From 39cd2214f2161d2e09ab0de21a64f6dcdb851b13 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 10 Feb 2017 13:31:40 +0000 Subject: Document user provided exceptions --- docs/control-structures.rst | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'docs') diff --git a/docs/control-structures.rst b/docs/control-structures.rst index 1c7d71f2..ff0a48ec 100644 --- a/docs/control-structures.rst +++ b/docs/control-structures.rst @@ -396,6 +396,10 @@ Currently, Solidity automatically generates a runtime exception in the following #. If your contract receives Ether via a public getter function. #. If you call a zero-initialized variable of internal function type. +While a user-provided exception is generated in the following situations: +#. Calling ``throw``. +#. The condition of ``assert(condition)`` is not met. + Internally, Solidity performs an "invalid jump" when a user-provided exception is thrown. In contrast, it performs an invalid operation (instruction ``0xfe``) if a runtime exception is encountered. In both cases, this causes the EVM to revert all changes made to the state. The reason for this is that there is no safe way to continue execution, because an expected effect -- cgit