mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Updated docs
This commit is contained in:
parent
6b435b2192
commit
bb2faf5e49
@ -635,116 +635,88 @@ If you found a bug or if you have a feature request, please
|
||||
Example
|
||||
~~~~~~~
|
||||
|
||||
Assume you have the following contracts you want to update declared in ``Source.sol``:
|
||||
Assume that you have the following contract in ``Source.sol``:
|
||||
|
||||
.. code-block:: none
|
||||
.. code-block:: solidity
|
||||
|
||||
// This will not compile after 0.5.0
|
||||
pragma solidity >=0.6.0 <0.6.4;
|
||||
// This will not compile after 0.7.0
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >0.4.23 <0.5.0;
|
||||
|
||||
contract Updateable {
|
||||
function run() public view returns (bool);
|
||||
function update() public;
|
||||
contract C {
|
||||
// FIXME: remove constructor visibility and make the contract abstract
|
||||
constructor() internal {}
|
||||
}
|
||||
|
||||
contract Upgradable {
|
||||
function run() public view returns (bool);
|
||||
function upgrade();
|
||||
contract D {
|
||||
uint time;
|
||||
|
||||
function f() public payable {
|
||||
// FIXME: change now to block.timestamp
|
||||
time = now;
|
||||
}
|
||||
}
|
||||
|
||||
contract Source is Updateable, Upgradable {
|
||||
function Source() public {}
|
||||
contract E {
|
||||
D d;
|
||||
|
||||
function run()
|
||||
public
|
||||
view
|
||||
returns (bool) {}
|
||||
// FIXME: remove constructor visibility
|
||||
constructor() public {}
|
||||
|
||||
function update() {}
|
||||
function upgrade() {}
|
||||
function g() public {
|
||||
// FIXME: change .value(5) => {value: 5}
|
||||
d.f.value(5)();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Required changes
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
To bring the contracts up to date with the current Solidity version, the
|
||||
following upgrade modules have to be executed: ``constructor``,
|
||||
``visibility``, ``abstract``, ``override`` and ``virtual``. Please read the
|
||||
documentation on :ref:`available modules <upgrade-modules>` for further details.
|
||||
The above contract will not compile starting from 0.7.0. To bring the contract up to date with the
|
||||
current Solidity version, the following upgrade modules have to be executed:
|
||||
``constructor-visibility``, ``now`` and ``dotsyntax``. Please read the documentation on
|
||||
:ref:`available modules <upgrade-modules>` for further details.
|
||||
|
||||
|
||||
Running the upgrade
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In this example, all modules needed to upgrade the contracts above,
|
||||
are available and all of them are activated by default. Therefore you
|
||||
do not need to specify the ``--modules`` option.
|
||||
It is recommended to explicitly specify the upgrade modules by using ``--modules`` argument.
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
$ solidity-upgrade Source.sol --dry-run
|
||||
$ solidity-upgrade --modules constructor-visibility,now,dotsyntax Source.sol
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
Running analysis (and upgrade) on given source files.
|
||||
..............
|
||||
|
||||
After upgrade:
|
||||
|
||||
Found 0 errors.
|
||||
Found 0 upgrades.
|
||||
|
||||
The above performs a dry-run upgrade on the given file and logs statistics at
|
||||
the end. In this case, the upgrade was successful and no further adjustments are
|
||||
needed.
|
||||
|
||||
Finally, you can run the upgrade and also write to the source file.
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
$ solidity-upgrade Source.sol
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
Running analysis (and upgrade) on given source files.
|
||||
..............
|
||||
|
||||
After upgrade:
|
||||
|
||||
Found 0 errors.
|
||||
Found 0 upgrades.
|
||||
|
||||
|
||||
Review changes
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
The command above applies all changes as shown below. Please review them carefully.
|
||||
The command above applies all changes as shown below. Please review them carefully (the pragmas will
|
||||
have to be updated manually.)
|
||||
|
||||
.. code-block:: solidity
|
||||
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >0.6.99 <0.8.0;
|
||||
|
||||
abstract contract Updateable {
|
||||
function run() public view virtual returns (bool);
|
||||
function update() public virtual;
|
||||
// SPDX-License-Identifier: GPL-3.0
|
||||
abstract contract C {
|
||||
// FIXME: remove constructor visibility and make the contract abstract
|
||||
constructor() {}
|
||||
}
|
||||
|
||||
abstract contract Upgradable {
|
||||
function run() public view virtual returns (bool);
|
||||
function upgrade() public virtual;
|
||||
contract D {
|
||||
uint time;
|
||||
|
||||
function f() public payable {
|
||||
// FIXME: change now to block.timestamp
|
||||
time = block.timestamp;
|
||||
}
|
||||
}
|
||||
|
||||
contract Source is Updateable, Upgradable {
|
||||
contract E {
|
||||
D d;
|
||||
|
||||
// FIXME: remove constructor visibility
|
||||
constructor() {}
|
||||
|
||||
function run()
|
||||
public
|
||||
view
|
||||
override(Updateable,Upgradable)
|
||||
returns (bool) {}
|
||||
|
||||
function update() public override {}
|
||||
function upgrade() public override {}
|
||||
function g() public {
|
||||
// FIXME: change .value(5) => {value: 5}
|
||||
d.f{value: 5}();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user