diff options
author | Li Xuanji <xuanji@gmail.com> | 2018-09-25 04:38:16 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2018-10-04 19:00:33 +0800 |
commit | 26d36e1faac40fb0570965a33b67f7651ce8eeaa (patch) | |
tree | a59693ca7533f040f258f16e7d62243b352a91e8 /docs/abi-spec.rst | |
parent | 3eb5ecdf585426cb6390bffa881b448f50a655f9 (diff) | |
download | dexon-solidity-26d36e1faac40fb0570965a33b67f7651ce8eeaa.tar.gz dexon-solidity-26d36e1faac40fb0570965a33b67f7651ce8eeaa.tar.zst dexon-solidity-26d36e1faac40fb0570965a33b67f7651ce8eeaa.zip |
separate out a new "Design Criteria" section from "Formal Specification"
Diffstat (limited to 'docs/abi-spec.rst')
-rw-r--r-- | docs/abi-spec.rst | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/docs/abi-spec.rst b/docs/abi-spec.rst index 4e7c88d0..7b78fad3 100644 --- a/docs/abi-spec.rst +++ b/docs/abi-spec.rst @@ -102,18 +102,19 @@ them. |:ref:`struct<structs>` |``tuple`` | +-------------------------------+-----------------------------------------------------------------------------+ -Formal Specification of the Encoding -==================================== +Design Criteria for the Encoding +================================ -We will now formally specify the encoding, such that it will have the following -properties, which are especially useful if some arguments are nested arrays: - -Properties: +The encoding is designed to have the following properties, which are especially useful if some arguments are nested arrays: 1. The number of reads necessary to access a value is at most the depth of the value inside the argument array structure, i.e. four reads are needed to retrieve ``a_i[k][l][r]``. In a previous version of the ABI, the number of reads scaled linearly with the total number of dynamic parameters in the worst case. 2. The data of a variable or array element is not interleaved with other data and it is relocatable, i.e. it only uses relative "addresses" + +Formal Specification of the Encoding +==================================== + We distinguish static and dynamic types. Static types are encoded in-place and dynamic types are encoded at a separately allocated location after the current block. **Definition:** The following types are called "dynamic": |