Merge pull request #2792 from ethereum/statemutability-docs

Require 0.4.16 for view/pure in docs examples
This commit is contained in:
chriseth 2017-08-25 14:22:03 +02:00 committed by GitHub
commit 1417e5a459
2 changed files with 22 additions and 4 deletions

View File

@ -293,9 +293,9 @@ The JSON format for a contract's interface is given by an array of function and/
* `name`: the name of the parameter;
* `type`: the canonical type of the parameter.
- `outputs`: an array of objects similar to `inputs`, can be omitted if function doesn't return anything;
- `constant`: `true` if function is :ref:`specified to not modify blockchain state <view-functions>`);
- `payable`: `true` if function accepts ether, defaults to `false`;
- `stateMutability`: a string with one of the following values: `pure` (:ref:`specified to not read blockchain state <pure-functions>`), `view` (same as `constant` above), `nonpayable` and `payable` (same as `payable` above).
- `stateMutability`: a string with one of the following values: `pure` (:ref:`specified to not read blockchain state <pure-functions>`), `view` (:ref:`specified to not modify the blockchain state <view-functions>`), `nonpayable` and `payable` (same as `payable` above).
- `constant`: `true` if function is either `pure` or `view`
`type` can be omitted, defaulting to `"function"`.

View File

@ -469,9 +469,20 @@ View Functions
Functions can be declared ``view`` in which case they promise not to modify the state.
The following statements are considered modifying the state:
#. Writing to state variables.
#. :ref:`Emitting events. <events>`.
#. :ref:`Creating other contracts <creating-contracts>`.
#. Using ``selfdestruct``.
#. Sending Ether via calls.
#. Calling any function not marked ``view`` or ``pure``.
#. Using low-level calls.
#. Using inline assembly that contains certain opcodes.
::
pragma solidity ^0.4.0;
pragma solidity ^0.4.16;
contract C {
function f(uint a, uint b) view returns (uint) {
@ -496,9 +507,16 @@ Pure Functions
Functions can be declared ``pure`` in which case they promise not to read from or modify the state.
In addition to the list of state modifying statements explained above, the following are considered reading from the state:
#. Reading from state variables.
#. Accessing ``this.balance`` or ``<address>.balance``.
#. Accessing any of the members of ``block``, ``tx``, ``msg`` (with the exception of ``msg.sig`` and ``msg.data``).
#. Calling any function not marked ``pure``.
#. Using inline assembly that contains certain opcodes.
::
pragma solidity ^0.4.0;
pragma solidity ^0.4.16;
contract C {
function f(uint a, uint b) pure returns (uint) {