Merge pull request #3992 from davesque/improve-abi-spec

A couple of ABI spec improvements
This commit is contained in:
chriseth 2018-05-02 15:50:10 +02:00 committed by GitHub
commit 451e8edb1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -77,7 +77,7 @@ of them inside parentheses, separated by commas:
- ``(T1,T2,...,Tn)``: tuple consisting of the types ``T1``, ..., ``Tn``, ``n >= 0`` - ``(T1,T2,...,Tn)``: tuple consisting of the types ``T1``, ..., ``Tn``, ``n >= 0``
It is possible to form tuples of tuples, arrays of tuples and so on. It is possible to form tuples of tuples, arrays of tuples and so on. It is also possible to form zero-tuples (where ``n == 0``).
.. note:: .. note::
Solidity supports all the types presented above with the same names with the exception of tuples. The ABI tuple type is utilised for encoding Solidity ``structs``. Solidity supports all the types presented above with the same names with the exception of tuples. The ABI tuple type is utilised for encoding Solidity ``structs``.
@ -117,7 +117,7 @@ on the type of ``X`` being
- ``(T1,...,Tk)`` for ``k >= 0`` and any types ``T1``, ..., ``Tk`` - ``(T1,...,Tk)`` for ``k >= 0`` and any types ``T1``, ..., ``Tk``
``enc(X) = head(X(1)) ... head(X(k-1)) tail(X(0)) ... tail(X(k-1))`` ``enc(X) = head(X(1)) ... head(X(k)) tail(X(1)) ... tail(X(k))``
where ``X(i)`` is the ``ith`` component of the value, and where ``X(i)`` is the ``ith`` component of the value, and
``head`` and ``tail`` are defined for ``Ti`` being a static type as ``head`` and ``tail`` are defined for ``Ti`` being a static type as
@ -126,7 +126,7 @@ on the type of ``X`` being
and as and as
``head(X(i)) = enc(len(head(X(0)) ... head(X(k-1)) tail(X(0)) ... tail(X(i-1))))`` ``head(X(i)) = enc(len( head(X(1)) ... head(X(k)) tail(X(1)) ... tail(X(i-1)) ))``
``tail(X(i)) = enc(X(i))`` ``tail(X(i)) = enc(X(i))``
otherwise, i.e. if ``Ti`` is a dynamic type. otherwise, i.e. if ``Ti`` is a dynamic type.
@ -137,7 +137,7 @@ on the type of ``X`` being
- ``T[k]`` for any ``T`` and ``k``: - ``T[k]`` for any ``T`` and ``k``:
``enc(X) = enc((X[0], ..., X[k-1]))`` ``enc(X) = enc((X[1], ..., X[k]))``
i.e. it is encoded as if it were a tuple with ``k`` elements i.e. it is encoded as if it were a tuple with ``k`` elements
of the same type. of the same type.