2019-08-21 08:53:47 +03:00
|
|
|
_title: Byte Manipulation
|
|
|
|
|
|
|
|
_section: Byte Manipulation
|
|
|
|
|
|
|
|
Tra la la...
|
|
|
|
|
|
|
|
_subsection: Types
|
|
|
|
|
|
|
|
_heading: Bytes @<bytes>
|
|
|
|
|
2019-12-14 06:05:10 +03:00
|
|
|
A **Bytes** is any object which is an
|
2020-02-02 15:58:29 +03:00
|
|
|
[Array](link-js-array) or [TypedArray](link-js-typedarray) with
|
2019-08-21 08:53:47 +03:00
|
|
|
each value in the valid byte range (i.e. between 0 and 255 inclusive),
|
|
|
|
or is an Object with a ``length`` property where each indexed property
|
|
|
|
is in the valid byte range.
|
|
|
|
|
|
|
|
_heading: BytesLike @<byteslike>
|
|
|
|
|
2019-12-14 06:05:10 +03:00
|
|
|
A **BytesLike** can be either a [[bytes]] or a [[datahexstring]].
|
|
|
|
|
|
|
|
_heading: DataHexstring @<datahexstring>
|
|
|
|
|
|
|
|
A **DataHexstring** is identical to a [[hexstring]] except that it has
|
|
|
|
an even number of nibbles, and therefore is a valid representation of
|
|
|
|
binary data as a string.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
|
|
|
_heading: Hexstring @<hexstring>
|
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
A **Hexstring** is a string which has a ``0x`` prefix followed by any
|
2019-12-14 06:05:10 +03:00
|
|
|
number of nibbles (i.e. case-insensitive hexidecumal characters, ``0-9`` and ``a-f``).
|
2019-08-21 08:53:47 +03:00
|
|
|
|
|
|
|
_heading: Signature @<signature>
|
|
|
|
|
|
|
|
- **r** and **s** --- The x co-ordinate of **r** and the **s** value of the signature
|
|
|
|
- **v** --- The parity of the y co-ordinate of **r**
|
2020-02-02 15:58:29 +03:00
|
|
|
- **_vs** --- The [compact representation](link-eip-2098) of the **s** and **v**
|
2019-08-21 08:53:47 +03:00
|
|
|
- **recoveryParam** --- The normalized (i.e. 0 or 1) value of **v**
|
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_heading: Flat-Format Signature @<signature-flat>
|
|
|
|
|
|
|
|
A **Flat-Format Signature** is a common Signature format where
|
|
|
|
the r, s and v are concanenated into a 65 byte (130 nibble)
|
|
|
|
[[datahexstring]].
|
|
|
|
|
|
|
|
|
2019-08-21 08:53:47 +03:00
|
|
|
_heading: SignatureLike @<signaturelike>
|
|
|
|
|
|
|
|
A **SignatureLike** is similar to a [[signature]], except redundant properties
|
2020-01-10 09:01:00 +03:00
|
|
|
may be omitted or it may be a [[signature-flat]].
|
2019-08-21 08:53:47 +03:00
|
|
|
|
2019-12-14 06:05:10 +03:00
|
|
|
For example, if **_vs** is specified, **s** and **v** may be omitted. Likewise,
|
|
|
|
if **recoveryParam** is provided, **v** may be omitted (as in these cases the
|
|
|
|
missing values can be computed).
|
2019-08-21 08:53:47 +03:00
|
|
|
|
|
|
|
|
|
|
|
_subsection: Inspection
|
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.isBytes(object) => boolean @<utils-isbytes> @SRC<bytes>
|
2019-08-21 08:53:47 +03:00
|
|
|
Returns true if and only if //object// is a valid [[bytes]].
|
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.isBytesLike(object) => boolean @<utils-isbyteslike> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Returns true if and only if //object// is a [[bytes]] or [[datahexstring]].
|
2019-08-21 08:53:47 +03:00
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.isHexString(object, [ length ] ) => boolean @<utils-ishexstring> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Returns true if and only if //object// is a valid hex string.
|
|
|
|
If //length// is specified and //object// is not a valid [[datahexstring]] of
|
|
|
|
//length// bytes, an InvalidArgument error is thrown.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
|
|
|
|
|
|
|
_subsection: Converting between Arrays and Hexstrings
|
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.arrayify(datahexstringOrArrayish [ , options ]) => Uint8Array @<utils-arrayify> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Converts //datahexstringOrArrayish// to a Uint8Array.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.hexlify(hexstringOrArrayish) => string<[[datahexstring]]> @<utils-hexlify> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Converts //hexstringOrArrayish// to a [[datahexstring]].
|
2019-08-21 08:53:47 +03:00
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.hexValue(aBigNumberish) => string<[[hexstring]]> @<utils-hexvalue> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Converts //aBigNumberish// to a [[hexstring]], with no __unnecessary__ leading
|
|
|
|
zeros.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
|
|
|
_heading: Examples
|
|
|
|
|
|
|
|
_code: bytes-conversion.js
|
|
|
|
|
|
|
|
|
|
|
|
_subsection: Array Manipulation
|
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.concat(arrayOfBytesLike) => Uint8Array @<utils-concat> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Concatenates all the [[byteslike]] in //arrayOfBytesLike// into a single Uint8Array.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.stripZeros(aBytesLike) => Uint8Array @<utils-stripzeros> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Returns a Uint8Array with all leading ``0`` bytes of //aBtyesLike// removed.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.zeroPad(aBytesLike, length) => Uint8Array @<utils-zeropad> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Retutns a Uint8Array of the data in //aBytesLike// with ``0`` bytes prepended to
|
|
|
|
//length// bytes long.
|
|
|
|
|
|
|
|
If //aBytesLike// is already longer than //length// bytes long, an InvalidArgument
|
|
|
|
error will be thrown.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
|
|
|
|
|
|
|
_subsection: Hexstring Manipulation
|
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.hexConcat(arrayOfBytesLike) => string<[[datahexstring]]> @<utils-hexconcat> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Concatenates all the [[byteslike]] in //arrayOfBytesLike// into a single [[datahexstring]]
|
2019-08-21 08:53:47 +03:00
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.hexDataLength(aBytesLike) => string<[[datahexstring]]> @<utils-hexdatalength> @SRC<bytes>
|
2019-08-21 08:53:47 +03:00
|
|
|
Returns the length (in bytes) of //aBytesLike//.
|
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.hexDataSlice(aBytesLike, offset [ , endOffset ] ) => string<[[datahexstring]]> @<utils-hexdataslice> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Returns a [[datahexstring]] representation of a slice of //aBytesLike//, from
|
|
|
|
//offset// (in bytes) to //endOffset// (in bytes). If //endOffset// is
|
|
|
|
omitted, the length of //aBytesLike// is used.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.hexStripZeros(aBytesLike) => string<[[hexstring]]> @<utils-hexstripzeros> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Returns a [[hexstring]] representation of //aBytesLike// with all
|
|
|
|
leading zeros removed.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.hexZeroPad(aBytesLike, length) => string<[[datahexstring]]> @<utils-hexzeropad> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Returns a [[datahexstring]] representation of //aBytesLike// padded to //length// bytes.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
2019-12-14 06:05:10 +03:00
|
|
|
If //aBytesLike// is already longer than //length// bytes long, an InvalidArgument
|
|
|
|
error will be thrown.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
|
|
|
|
|
|
|
_subsection: Signature Conversion
|
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.joinSignature(aSignatureLike) => string<[FlatSignature](signature-flat)> @<utils-joinsignature> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Return the flat-format of //aSignaturelike//, which is 65 bytes (130 nibbles)
|
|
|
|
long, concatenating the **r**, **s** and (normalized) **v** of a Signature.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
2020-01-10 09:01:00 +03:00
|
|
|
_property: utils.splitSignature(aSignatureLikeOrBytesLike) => [[signature]] @<utils-splitsignature> @SRC<bytes>
|
2019-12-14 06:05:10 +03:00
|
|
|
Return the full expanded-format of //aSignaturelike// or a flat-format [[datahexstring]].
|
|
|
|
Any missing properties will be computed.
|
2019-08-21 08:53:47 +03:00
|
|
|
|
2020-02-18 01:56:13 +03:00
|
|
|
_subsection: Random Bytes
|
|
|
|
|
|
|
|
_property: ethers.utils.randomBytes(length) => Uint8Array
|
|
|
|
Return a new Uint8Array of //length// random bytes.
|