mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Documentation for revert with reason string.
This commit is contained in:
parent
a06249c984
commit
3da16b3e8a
@ -5,6 +5,7 @@ Features:
|
|||||||
* Code Generator: More specialized and thus optimized implementation for ``x.push(...)``
|
* Code Generator: More specialized and thus optimized implementation for ``x.push(...)``
|
||||||
* Commandline interface: Error when missing or inaccessible file detected. Suppress it with the ``--ignore-missing`` flag.
|
* Commandline interface: Error when missing or inaccessible file detected. Suppress it with the ``--ignore-missing`` flag.
|
||||||
* Constant Evaluator: Fix evaluation of single element tuples.
|
* Constant Evaluator: Fix evaluation of single element tuples.
|
||||||
|
* General: Allow providing reason string for ``revert()``.
|
||||||
* General: Limit the number of errors output in a single run to 256.
|
* General: Limit the number of errors output in a single run to 256.
|
||||||
* General: Support accessing dynamic return data in post-byzantium EVMs.
|
* General: Support accessing dynamic return data in post-byzantium EVMs.
|
||||||
* Interfaces: Allow overriding external functions in interfaces with public in an implementing contract.
|
* Interfaces: Allow overriding external functions in interfaces with public in an implementing contract.
|
||||||
|
@ -455,8 +455,9 @@ The ``require`` function should be used to ensure valid conditions, such as inpu
|
|||||||
If used properly, analysis tools can evaluate your contract to identify the conditions and function calls which will reach a failing ``assert``. Properly functioning code should never reach a failing assert statement; if this happens there is a bug in your contract which you should fix.
|
If used properly, analysis tools can evaluate your contract to identify the conditions and function calls which will reach a failing ``assert``. Properly functioning code should never reach a failing assert statement; if this happens there is a bug in your contract which you should fix.
|
||||||
|
|
||||||
There are two other ways to trigger exceptions: The ``revert`` function can be used to flag an error and
|
There are two other ways to trigger exceptions: The ``revert`` function can be used to flag an error and
|
||||||
revert the current call. In the future it might be possible to also include details about the error
|
revert the current call. It is possible to provide a string message containing details about the error
|
||||||
in a call to ``revert``. The ``throw`` keyword can also be used as an alternative to ``revert()``.
|
that will be passed back to the caller.
|
||||||
|
The ``throw`` keyword can also be used as an alternative to ``revert()``, but is deprecated.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
From version 0.4.13 the ``throw`` keyword is deprecated and will be phased out in the future.
|
From version 0.4.13 the ``throw`` keyword is deprecated and will be phased out in the future.
|
||||||
@ -515,3 +516,24 @@ the EVM to revert all changes made to the state. The reason for reverting is tha
|
|||||||
did not occur. Because we want to retain the atomicity of transactions, the safest thing to do is to revert all changes and make the whole transaction
|
did not occur. Because we want to retain the atomicity of transactions, the safest thing to do is to revert all changes and make the whole transaction
|
||||||
(or at least call) without effect. Note that ``assert``-style exceptions consume all gas available to the call, while
|
(or at least call) without effect. Note that ``assert``-style exceptions consume all gas available to the call, while
|
||||||
``require``-style exceptions will not consume any gas starting from the Metropolis release.
|
``require``-style exceptions will not consume any gas starting from the Metropolis release.
|
||||||
|
|
||||||
|
The following example shows how an error string can be used together with revert:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
pragma solidity ^0.4.0;
|
||||||
|
|
||||||
|
contract VendingMachine {
|
||||||
|
function buy(uint amount) payable {
|
||||||
|
if (amount > msg.value / 2 ether)
|
||||||
|
revert("Not enough Ether provided.");
|
||||||
|
// Perform the purchase.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
The provided string will be abi-encoded together with a uint value that will always be zero.
|
||||||
|
This means that if a string ``x`` is provided, ``(0, x)`` will be encoded as if a function with arguments
|
||||||
|
``(uint256, string)`` would be called. This zero is used as a version identifier. Future extensions
|
||||||
|
of this feature might provide actual exception payload of dynamic type and this number could be used
|
||||||
|
to encode the type or also as a simple numeric error code. Until this is specified, a zero will
|
||||||
|
be used in all cases.
|
@ -334,6 +334,7 @@ Global Variables
|
|||||||
- ``assert(bool condition)``: abort execution and revert state changes if condition is ``false`` (use for internal error)
|
- ``assert(bool condition)``: abort execution and revert state changes if condition is ``false`` (use for internal error)
|
||||||
- ``require(bool condition)``: abort execution and revert state changes if condition is ``false`` (use for malformed input or error in external component)
|
- ``require(bool condition)``: abort execution and revert state changes if condition is ``false`` (use for malformed input or error in external component)
|
||||||
- ``revert()``: abort execution and revert state changes
|
- ``revert()``: abort execution and revert state changes
|
||||||
|
- ``revert(string)``: abort execution and revert state changes providing an explanatory string
|
||||||
- ``blockhash(uint blockNumber) returns (bytes32)``: hash of the given block - only works for 256 most recent blocks
|
- ``blockhash(uint blockNumber) returns (bytes32)``: hash of the given block - only works for 256 most recent blocks
|
||||||
- ``keccak256(...) returns (bytes32)``: compute the Ethereum-SHA-3 (Keccak-256) hash of the :ref:`(tightly packed) arguments <abi_packed_mode>`
|
- ``keccak256(...) returns (bytes32)``: compute the Ethereum-SHA-3 (Keccak-256) hash of the :ref:`(tightly packed) arguments <abi_packed_mode>`
|
||||||
- ``sha3(...) returns (bytes32)``: an alias to ``keccak256``
|
- ``sha3(...) returns (bytes32)``: an alias to ``keccak256``
|
||||||
|
@ -101,6 +101,8 @@ Error Handling
|
|||||||
throws if the condition is not met - to be used for errors in inputs or external components.
|
throws if the condition is not met - to be used for errors in inputs or external components.
|
||||||
``revert()``:
|
``revert()``:
|
||||||
abort execution and revert state changes
|
abort execution and revert state changes
|
||||||
|
``revert(string reason)``:
|
||||||
|
abort execution and revert state changes, providing an explanatory string
|
||||||
|
|
||||||
.. index:: keccak256, ripemd160, sha256, ecrecover, addmod, mulmod, cryptography,
|
.. index:: keccak256, ripemd160, sha256, ecrecover, addmod, mulmod, cryptography,
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user