mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Start draft update to ecrecover
First draft of ecrecover clarifications Further clarify Correct byte error Correct resurfaced typo Small changes from further review
This commit is contained in:
parent
52ee955fba
commit
7d7237e935
@ -156,29 +156,41 @@ Mathematical and Cryptographic Functions
|
|||||||
|
|
||||||
``addmod(uint x, uint y, uint k) returns (uint)``:
|
``addmod(uint x, uint y, uint k) returns (uint)``:
|
||||||
compute ``(x + y) % k`` where the addition is performed with arbitrary precision and does not wrap around at ``2**256``. Assert that ``k != 0`` starting from version 0.5.0.
|
compute ``(x + y) % k`` where the addition is performed with arbitrary precision and does not wrap around at ``2**256``. Assert that ``k != 0`` starting from version 0.5.0.
|
||||||
|
|
||||||
``mulmod(uint x, uint y, uint k) returns (uint)``:
|
``mulmod(uint x, uint y, uint k) returns (uint)``:
|
||||||
compute ``(x * y) % k`` where the multiplication is performed with arbitrary precision and does not wrap around at ``2**256``. Assert that ``k != 0`` starting from version 0.5.0.
|
compute ``(x * y) % k`` where the multiplication is performed with arbitrary precision and does not wrap around at ``2**256``. Assert that ``k != 0`` starting from version 0.5.0.
|
||||||
|
|
||||||
``keccak256(bytes memory) returns (bytes32)``:
|
``keccak256(bytes memory) returns (bytes32)``:
|
||||||
compute the Keccak-256 hash of the input
|
compute the Keccak-256 hash of the input
|
||||||
|
|
||||||
``sha256(bytes memory) returns (bytes32)``:
|
``sha256(bytes memory) returns (bytes32)``:
|
||||||
compute the SHA-256 hash of the input
|
compute the SHA-256 hash of the input
|
||||||
|
|
||||||
``ripemd160(bytes memory) returns (bytes20)``:
|
``ripemd160(bytes memory) returns (bytes20)``:
|
||||||
compute RIPEMD-160 hash of the input
|
compute RIPEMD-160 hash of the input
|
||||||
|
|
||||||
``ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)``:
|
``ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)``:
|
||||||
recover the address associated with the public key from elliptic curve signature or return zero on error
|
recover the address associated with the public key from elliptic curve signature or return zero on error.
|
||||||
(`example usage <https://ethereum.stackexchange.com/q/1777/222>`_)
|
The function parameters correspond to ECDSA values of the signature:
|
||||||
|
|
||||||
|
``r`` = first 32 bytes of signature
|
||||||
|
``s`` = second 32 bytes of signature
|
||||||
|
``v`` = final 1 byte of signature
|
||||||
|
|
||||||
|
``ecrecover`` returns an ``address``, and not an ``address payable``. See :ref:`address payable<address>` for
|
||||||
|
conversion, in case you need to transfer funds to the recovered address.
|
||||||
|
|
||||||
|
For further details, read `example usage <https://ethereum.stackexchange.com/q/1777/222>`_.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
Function ``ecrecover`` returns an ``address``, and not an ``address
|
|
||||||
payable``. See :ref:`address payable<address>` for conversion, in case you need
|
|
||||||
to transfer funds to the recovered address.
|
|
||||||
|
|
||||||
It might be that you run into Out-of-Gas for ``sha256``, ``ripemd160`` or ``ecrecover`` on a *private blockchain*. The reason for this is that those are implemented as so-called precompiled contracts and these contracts only really exist after they received the first message (although their contract code is hardcoded). Messages to non-existing contracts are more expensive and thus the execution runs into an Out-of-Gas error. A workaround for this problem is to first send e.g. 1 Wei to each of the contracts before you use them in your actual contracts. This is not an issue on the official or test net.
|
When running ``sha256``, ``ripemd160`` or ``ecrecover`` on a *private blockchain*, you might encounter Out-of-Gas. This is because these functions are implemented as "precompiled contracts" and only really exist after they receive the first message (although their contract code is hardcoded). Messages to non-existing contracts are more expensive and thus the execution might run into an Out-of-Gas error. A workaround for this problem is to first send Wei (1 for example) to each of the contracts before you use them in your actual contracts. This is not an issue on the main or test net.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
There used to be an alias for ``keccak256`` called ``sha3``, which was removed in version 0.5.0.
|
There used to be an alias for ``keccak256`` called ``sha3``, which was removed in version 0.5.0.
|
||||||
|
|
||||||
.. index:: balance, send, transfer, call, callcode, delegatecall, staticcall
|
.. index:: balance, send, transfer, call, callcode, delegatecall, staticcall
|
||||||
|
|
||||||
.. _address_related:
|
.. _address_related:
|
||||||
|
|
||||||
Members of Address Types
|
Members of Address Types
|
||||||
|
Loading…
Reference in New Issue
Block a user