mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Update documentation.
This commit is contained in:
parent
31c504c5ba
commit
f320a95dd9
@ -114,10 +114,19 @@ otherwise, the ``value`` option would not be available.
|
||||
Due to the fact that the EVM considers a call to a non-existing contract to
|
||||
always succeed, Solidity uses the ``extcodesize`` opcode to check that
|
||||
the contract that is about to be called actually exists (it contains code)
|
||||
and causes an exception if it does not.
|
||||
and causes an exception if it does not. This check is skipped if the return
|
||||
data will be decoded after the call and thus the ABI decoder will catch the
|
||||
case of a non-existing contract.
|
||||
|
||||
Note that this check is not performed in case of :ref:`low-level calls <address_related>` which
|
||||
operate on addresses rather than contract instances.
|
||||
|
||||
.. note::
|
||||
Be careful when using high-level calls to
|
||||
:ref:`precompiled contracts <precompiledContracts>`,
|
||||
since the compiler considers them non-existing according to the
|
||||
above logic even though they execute code and can return data.
|
||||
|
||||
Function calls also cause exceptions if the called contract itself
|
||||
throws an exception or goes out of gas.
|
||||
|
||||
|
@ -565,3 +565,24 @@ contracts, the Ether is forever lost.
|
||||
If you want to deactivate your contracts, you should instead **disable** them
|
||||
by changing some internal state which causes all functions to revert. This
|
||||
makes it impossible to use the contract, as it returns Ether immediately.
|
||||
|
||||
|
||||
.. index:: ! precompiled contracts, ! precompiles, ! contract;precompiled
|
||||
|
||||
.. _precompiledContracts:
|
||||
|
||||
Precompiled Contracts
|
||||
=====================
|
||||
|
||||
There is a small set of contract addresses that are special:
|
||||
The address range between ``1`` and (including) ``8`` contains
|
||||
"precompiled contracts" that can be called as any other contract
|
||||
but their behaviour (and their gas consumption) is not defined
|
||||
by EVM code stored at that address (they do not contain code)
|
||||
but instead is implemented in the EVM execution environment itself.
|
||||
|
||||
Different EVM-compatible chains might use a different set of
|
||||
precompiled contracts. It might also be possible that new
|
||||
precompiled contracts are added to the Ethereum main chain in the future,
|
||||
but you can reasonabyly expect them to always be in the range between
|
||||
``1`` and ``0xffff`` (inclusive).
|
Loading…
Reference in New Issue
Block a user