aboutsummaryrefslogtreecommitdiffstats
path: root/docs/contracts.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/contracts.rst')
-rw-r--r--docs/contracts.rst71
1 files changed, 28 insertions, 43 deletions
diff --git a/docs/contracts.rst b/docs/contracts.rst
index 19eba047..53e50656 100644
--- a/docs/contracts.rst
+++ b/docs/contracts.rst
@@ -301,10 +301,10 @@ inheritable properties of contracts and may be overridden by derived contracts.
::
- pragma solidity ^0.4.22;
+ pragma solidity >0.4.24;
contract owned {
- function owned() public { owner = msg.sender; }
+ constructor() public { owner = msg.sender; }
address owner;
// This contract only defines a modifier but does not use
@@ -346,7 +346,7 @@ inheritable properties of contracts and may be overridden by derived contracts.
mapping (address => bool) registeredAddresses;
uint price;
- function Register(uint initialPrice) public { price = initialPrice; }
+ constructor(uint initialPrice) public { price = initialPrice; }
// It is important to also provide the
// `payable` keyword here, otherwise the function will
@@ -473,7 +473,7 @@ The following statements are considered modifying the state:
}
.. note::
- ``constant`` on functions is an alias to ``view``, but this is deprecated and will be dropped in version 0.5.0.
+ ``constant`` on functions used to be an alias to ``view``, but this was dropped in version 0.5.0.
.. note::
Getter methods are marked ``view``.
@@ -485,9 +485,6 @@ The following statements are considered modifying the state:
prevent modifications to the state on the level of the EVM by adding
``pragma experimental "v0.5.0";``
-.. warning::
- The compiler does not enforce yet that a ``view`` method is not modifying state. It raises a warning though.
-
.. index:: ! pure function, function;pure
.. _pure-functions:
@@ -529,12 +526,15 @@ In addition to the list of state modifying statements explained above, the follo
It is a non-circumventable runtime checks done by the EVM.
.. warning::
- Before version 0.4.17 the compiler didn't enforce that ``pure`` is not reading the state.
+ Before version 0.4.17 the compiler did not enforce that ``pure`` is not reading the state.
It is a compile-time type check, which can be circumvented doing invalid explicit conversions
between contract types, because the compiler can verify that the type of the contract does
not do state-changing operations, but it cannot check that the contract that will be called
at runtime is actually of that type.
+.. warning::
+ Before version 0.5.0 the compiler did not enforce that ``view`` is not writing the state.
+
.. index:: ! fallback function, function;fallback
.. _fallback-function:
@@ -543,7 +543,7 @@ Fallback Function
=================
A contract can have exactly one unnamed function. This function cannot have
-arguments and cannot return anything.
+arguments, cannot return anything and has to have ``external`` visibility.
It is executed on a call to the contract if none of the other
functions match the given function identifier (or if no data was supplied at
all).
@@ -591,7 +591,7 @@ Like any function, the fallback function can execute complex operations as long
// Sending Ether to this contract will cause an exception,
// because the fallback function does not have the `payable`
// modifier.
- function() public { x = 1; }
+ function() external { x = 1; }
uint x;
}
@@ -599,7 +599,7 @@ Like any function, the fallback function can execute complex operations as long
// This contract keeps all Ether sent to it with no way
// to get it back.
contract Sink {
- function() public payable { }
+ function() external payable { }
}
contract Caller {
@@ -990,7 +990,7 @@ default constructor: ``contructor() public {}``.
::
- pragma solidity ^0.4.22;
+ pragma solidity >0.4.24;
contract A {
uint public a;
@@ -1006,24 +1006,8 @@ default constructor: ``contructor() public {}``.
A constructor set as ``internal`` causes the contract to be marked as :ref:`abstract <abstract-contract>`.
-.. note ::
- Prior to version 0.4.22, constructors were defined as functions with the same name as the contract. This syntax is now deprecated.
-
-::
-
- pragma solidity ^0.4.11;
-
- contract A {
- uint public a;
-
- function A(uint _a) internal {
- a = _a;
- }
- }
-
- contract B is A(1) {
- function B() public {}
- }
+.. warning ::
+ Prior to version 0.4.22, constructors were defined as functions with the same name as the contract. This syntax was deprecated and is not allowed anymore in version 0.5.0.
.. index:: ! base;constructor
@@ -1344,9 +1328,9 @@ custom types without the overhead of external function calls:
using BigInt for BigInt.bigint;
function f() public pure {
- var x = BigInt.fromUint(7);
- var y = BigInt.fromUint(uint(-1));
- var z = x.add(y);
+ BigInt.bigint memory x = BigInt.fromUint(7);
+ BigInt.bigint memory y = BigInt.fromUint(uint(-1));
+ BigInt.bigint memory z = x.add(y);
}
}
@@ -1404,22 +1388,23 @@ Using For
The directive ``using A for B;`` can be used to attach library
functions (from the library ``A``) to any type (``B``).
These functions will receive the object they are called on
-as their first parameter (like the ``self`` variable in
-Python).
+as their first parameter (like the ``self`` variable in Python).
The effect of ``using A for *;`` is that the functions from
-the library ``A`` are attached to any type.
+the library ``A`` are attached to *any* type.
-In both situations, all functions, even those where the
-type of the first parameter does not match the type of
-the object, are attached. The type is checked at the
+In both situations, *all* functions in the library are attached,
+even those where the type of the first parameter does not
+match the type of the object. The type is checked at the
point the function is called and function overload
resolution is performed.
-The ``using A for B;`` directive is active for the current
-scope, which is limited to a contract for now but will
-be lifted to the global scope later, so that by including
-a module, its data types including library functions are
+The ``using A for B;`` directive is active only within the current
+contract, including within all of its functions, and has no effect
+outside of the contract in which it is used. The directive
+may only be used inside a contract, not inside any of its functions.
+
+By including a library, its data types including library functions are
available without having to add further code.
Let us rewrite the set example from the