quantumcoin 6.14.2 → 6.14.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +442 -442
- package/FUNDING.json +10 -10
- package/LICENSE.md +21 -21
- package/README.md +132 -142
- package/SECURITY.md +34 -34
- package/dist/README.md +22 -22
- package/dist/quantumcoin.js +1127 -1324
- package/dist/quantumcoin.js.map +1 -1
- package/dist/quantumcoin.min.js +1 -1
- package/dist/quantumcoin.umd.js +1128 -1327
- package/dist/quantumcoin.umd.js.map +1 -1
- package/dist/quantumcoin.umd.min.js +1 -1
- package/dist/wordlists-extra.js +1 -1
- package/dist/wordlists-extra.js.map +1 -1
- package/dist/wordlists-extra.min.js +1 -1
- package/lib.commonjs/README.md +16 -16
- package/lib.commonjs/_version.js +1 -1
- package/lib.commonjs/crypto/signature.d.ts +3 -76
- package/lib.commonjs/crypto/signature.d.ts.map +1 -1
- package/lib.commonjs/crypto/signature.js +15 -199
- package/lib.commonjs/crypto/signature.js.map +1 -1
- package/lib.commonjs/crypto/signing-key.d.ts +1 -1
- package/lib.commonjs/crypto/signing-key.d.ts.map +1 -1
- package/lib.commonjs/crypto/signing-key.js +19 -10
- package/lib.commonjs/crypto/signing-key.js.map +1 -1
- package/lib.commonjs/package.json +12 -12
- package/lib.commonjs/providers/provider-jsonrpc.d.ts +0 -1
- package/lib.commonjs/providers/provider-jsonrpc.d.ts.map +1 -1
- package/lib.commonjs/providers/provider-jsonrpc.js +0 -1
- package/lib.commonjs/providers/provider-jsonrpc.js.map +1 -1
- package/lib.commonjs/quantumcoin.d.ts +2 -0
- package/lib.commonjs/quantumcoin.d.ts.map +1 -1
- package/lib.commonjs/quantumcoin.js +11 -5
- package/lib.commonjs/quantumcoin.js.map +1 -1
- package/lib.commonjs/transaction/address.d.ts.map +1 -1
- package/lib.commonjs/transaction/address.js +8 -3
- package/lib.commonjs/transaction/address.js.map +1 -1
- package/lib.commonjs/transaction/transaction.d.ts.map +1 -1
- package/lib.commonjs/transaction/transaction.js +7 -40
- package/lib.commonjs/transaction/transaction.js.map +1 -1
- package/lib.commonjs/wallet/json-keystore.d.ts.map +1 -1
- package/lib.commonjs/wallet/json-keystore.js +7 -7
- package/lib.commonjs/wallet/json-keystore.js.map +1 -1
- package/lib.commonjs/wallet/wallet.d.ts.map +1 -1
- package/lib.commonjs/wallet/wallet.js +2 -2
- package/lib.commonjs/wallet/wallet.js.map +1 -1
- package/lib.esm/README.md +16 -16
- package/lib.esm/_version.js +1 -1
- package/lib.esm/crypto/signature.d.ts +3 -76
- package/lib.esm/crypto/signature.d.ts.map +1 -1
- package/lib.esm/crypto/signature.js +16 -202
- package/lib.esm/crypto/signature.js.map +1 -1
- package/lib.esm/crypto/signing-key.d.ts +1 -1
- package/lib.esm/crypto/signing-key.d.ts.map +1 -1
- package/lib.esm/crypto/signing-key.js +20 -9
- package/lib.esm/crypto/signing-key.js.map +1 -1
- package/lib.esm/package.json +12 -12
- package/lib.esm/providers/provider-jsonrpc.d.ts +0 -1
- package/lib.esm/providers/provider-jsonrpc.d.ts.map +1 -1
- package/lib.esm/providers/provider-jsonrpc.js +0 -1
- package/lib.esm/providers/provider-jsonrpc.js.map +1 -1
- package/lib.esm/quantumcoin.d.ts +2 -0
- package/lib.esm/quantumcoin.d.ts.map +1 -1
- package/lib.esm/quantumcoin.js +6 -0
- package/lib.esm/quantumcoin.js.map +1 -1
- package/lib.esm/transaction/address.d.ts.map +1 -1
- package/lib.esm/transaction/address.js +8 -2
- package/lib.esm/transaction/address.js.map +1 -1
- package/lib.esm/transaction/transaction.d.ts.map +1 -1
- package/lib.esm/transaction/transaction.js +7 -40
- package/lib.esm/transaction/transaction.js.map +1 -1
- package/lib.esm/wallet/json-keystore.d.ts.map +1 -1
- package/lib.esm/wallet/json-keystore.js +11 -5
- package/lib.esm/wallet/json-keystore.js.map +1 -1
- package/lib.esm/wallet/wallet.d.ts.map +1 -1
- package/lib.esm/wallet/wallet.js +3 -1
- package/lib.esm/wallet/wallet.js.map +1 -1
- package/package.json +6 -5
- package/rollup.config.mjs +50 -50
- package/src.ts/_version.ts +1 -1
- package/src.ts/abi/abi-coder.ts +237 -237
- package/src.ts/abi/bytes32.ts +45 -45
- package/src.ts/abi/coders/abstract-coder.ts +541 -541
- package/src.ts/abi/coders/address.ts +36 -36
- package/src.ts/abi/coders/anonymous.ts +29 -29
- package/src.ts/abi/coders/array.ts +199 -199
- package/src.ts/abi/coders/boolean.ts +27 -27
- package/src.ts/abi/coders/bytes.ts +43 -43
- package/src.ts/abi/coders/fixed-bytes.ts +37 -37
- package/src.ts/abi/coders/null.ts +28 -28
- package/src.ts/abi/coders/number.ts +63 -63
- package/src.ts/abi/coders/string.ts +29 -29
- package/src.ts/abi/coders/tuple.ts +69 -69
- package/src.ts/abi/fragments.ts +1617 -1617
- package/src.ts/abi/index.ts +41 -41
- package/src.ts/abi/interface.ts +1271 -1271
- package/src.ts/abi/typed.ts +796 -796
- package/src.ts/address/address.ts +148 -148
- package/src.ts/address/checks.ts +123 -123
- package/src.ts/address/contract-address.ts +80 -80
- package/src.ts/address/index.ts +57 -57
- package/src.ts/constants/addresses.ts +8 -8
- package/src.ts/constants/hashes.ts +7 -7
- package/src.ts/constants/index.ts +16 -16
- package/src.ts/constants/numbers.ts +35 -35
- package/src.ts/constants/strings.ts +16 -16
- package/src.ts/contract/contract.ts +1120 -1120
- package/src.ts/contract/factory.ts +143 -143
- package/src.ts/contract/index.ts +31 -31
- package/src.ts/contract/types.ts +236 -236
- package/src.ts/contract/wrappers.ts +225 -225
- package/src.ts/crypto/crypto-browser.ts +64 -64
- package/src.ts/crypto/crypto.ts +4 -4
- package/src.ts/crypto/hmac.ts +51 -51
- package/src.ts/crypto/index.ts +59 -59
- package/src.ts/crypto/keccak.ts +54 -54
- package/src.ts/crypto/pbkdf2.ts +55 -55
- package/src.ts/crypto/random.ts +36 -36
- package/src.ts/crypto/ripemd160.ts +43 -43
- package/src.ts/crypto/scrypt.ts +114 -114
- package/src.ts/crypto/sha2.ts +78 -78
- package/src.ts/crypto/signature.ts +145 -349
- package/src.ts/crypto/signing-key.ts +126 -118
- package/src.ts/hash/authorization.ts +38 -38
- package/src.ts/hash/id.ts +17 -17
- package/src.ts/hash/index.ts +18 -18
- package/src.ts/hash/message.ts +51 -51
- package/src.ts/hash/namehash.ts +101 -101
- package/src.ts/hash/solidity.ts +117 -117
- package/src.ts/hash/typed-data.ts +658 -658
- package/src.ts/index.ts +12 -12
- package/src.ts/providers/abstract-provider.ts +1761 -1761
- package/src.ts/providers/abstract-signer.ts +314 -314
- package/src.ts/providers/community.ts +49 -49
- package/src.ts/providers/contracts.ts +42 -42
- package/src.ts/providers/default-provider.ts +96 -96
- package/src.ts/providers/ens-resolver.ts +606 -606
- package/src.ts/providers/format.ts +320 -320
- package/src.ts/providers/formatting.ts +418 -418
- package/src.ts/providers/index.ts +125 -125
- package/src.ts/providers/network.ts +327 -327
- package/src.ts/providers/pagination.ts +8 -8
- package/src.ts/providers/plugin-fallback.ts +35 -35
- package/src.ts/providers/plugins-network.ts +281 -281
- package/src.ts/providers/provider-browser.ts +334 -334
- package/src.ts/providers/provider-fallback.ts +801 -801
- package/src.ts/providers/provider-ipcsocket-browser.ts +3 -3
- package/src.ts/providers/provider-ipcsocket.ts +81 -81
- package/src.ts/providers/provider-jsonrpc.ts +1334 -1335
- package/src.ts/providers/provider-socket.ts +352 -352
- package/src.ts/providers/provider-websocket.ts +103 -103
- package/src.ts/providers/provider.ts +2136 -2136
- package/src.ts/providers/signer-noncemanager.ts +98 -98
- package/src.ts/providers/signer.ts +166 -166
- package/src.ts/providers/subscriber-connection.ts +74 -74
- package/src.ts/providers/subscriber-filterid.ts +199 -199
- package/src.ts/providers/subscriber-polling.ts +321 -321
- package/src.ts/providers/ws-browser.ts +11 -11
- package/src.ts/providers/ws.ts +3 -3
- package/src.ts/quantumcoin.ts +219 -211
- package/src.ts/thirdparty.d.ts +16 -16
- package/src.ts/transaction/accesslist.ts +43 -43
- package/src.ts/transaction/address.ts +35 -31
- package/src.ts/transaction/authorization.ts +14 -14
- package/src.ts/transaction/index.ts +51 -51
- package/src.ts/transaction/transaction.ts +1349 -1379
- package/src.ts/utils/base58.ts +73 -73
- package/src.ts/utils/base64-browser.ts +25 -25
- package/src.ts/utils/base64.ts +56 -56
- package/src.ts/utils/data.ts +199 -199
- package/src.ts/utils/errors.ts +793 -793
- package/src.ts/utils/events.ts +105 -105
- package/src.ts/utils/fetch.ts +970 -970
- package/src.ts/utils/fixednumber.ts +643 -643
- package/src.ts/utils/geturl-browser.ts +81 -81
- package/src.ts/utils/geturl.ts +134 -134
- package/src.ts/utils/index.ts +95 -95
- package/src.ts/utils/maths.ts +240 -240
- package/src.ts/utils/properties.ts +60 -60
- package/src.ts/utils/rlp-decode.ts +104 -104
- package/src.ts/utils/rlp-encode.ts +64 -64
- package/src.ts/utils/rlp.ts +20 -20
- package/src.ts/utils/units.ts +91 -91
- package/src.ts/utils/utf8.ts +325 -325
- package/src.ts/utils/uuid.ts +36 -36
- package/src.ts/wallet/base-wallet.ts +160 -160
- package/src.ts/wallet/index.ts +32 -32
- package/src.ts/wallet/json-keystore.ts +108 -106
- package/src.ts/wallet/utils.ts +147 -147
- package/src.ts/wallet/wallet.ts +138 -139
- package/src.ts/wordlists/bit-reader.ts +35 -35
- package/src.ts/wordlists/decode-owl.ts +58 -58
- package/src.ts/wordlists/decode-owla.ts +33 -33
- package/src.ts/wordlists/generation/encode-latin.ts +370 -370
- package/src.ts/wordlists/index.ts +26 -26
- package/src.ts/wordlists/lang-cz.ts +33 -33
- package/src.ts/wordlists/lang-en.ts +33 -33
- package/src.ts/wordlists/lang-es.ts +35 -35
- package/src.ts/wordlists/lang-fr.ts +34 -34
- package/src.ts/wordlists/lang-it.ts +33 -33
- package/src.ts/wordlists/lang-ja.ts +181 -181
- package/src.ts/wordlists/lang-ko.ts +104 -104
- package/src.ts/wordlists/lang-pt.ts +34 -34
- package/src.ts/wordlists/lang-zh.ts +112 -112
- package/src.ts/wordlists/wordlist-owl.ts +77 -77
- package/src.ts/wordlists/wordlist-owla.ts +41 -41
- package/src.ts/wordlists/wordlist.ts +59 -59
- package/src.ts/wordlists/wordlists-browser.ts +8 -8
- package/src.ts/wordlists/wordlists-extra.ts +9 -9
- package/src.ts/wordlists/wordlists.ts +38 -38
- package/dist/quantumcoin.min.js'.gz' +0 -0
- package/dist/quantumcoin.umd.min.js'.gz' +0 -0
- package/dist/wordlists-extra.min.js'.gz' +0 -0
- package/lib.commonjs/providers/provider-alchemy.d.ts +0 -50
- package/lib.commonjs/providers/provider-alchemy.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-alchemy.js +0 -151
- package/lib.commonjs/providers/provider-alchemy.js.map +0 -1
- package/lib.commonjs/providers/provider-ankr.d.ts +0 -61
- package/lib.commonjs/providers/provider-ankr.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-ankr.js +0 -137
- package/lib.commonjs/providers/provider-ankr.js.map +0 -1
- package/lib.commonjs/providers/provider-blockscout.d.ts +0 -59
- package/lib.commonjs/providers/provider-blockscout.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-blockscout.js +0 -145
- package/lib.commonjs/providers/provider-blockscout.js.map +0 -1
- package/lib.commonjs/providers/provider-chainstack.d.ts +0 -46
- package/lib.commonjs/providers/provider-chainstack.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-chainstack.js +0 -102
- package/lib.commonjs/providers/provider-chainstack.js.map +0 -1
- package/lib.commonjs/providers/provider-cloudflare.d.ts +0 -14
- package/lib.commonjs/providers/provider-cloudflare.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-cloudflare.js +0 -26
- package/lib.commonjs/providers/provider-cloudflare.js.map +0 -1
- package/lib.commonjs/providers/provider-etherscan.d.ts +0 -147
- package/lib.commonjs/providers/provider-etherscan.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-etherscan.js +0 -587
- package/lib.commonjs/providers/provider-etherscan.js.map +0 -1
- package/lib.commonjs/providers/provider-infura.d.ts +0 -101
- package/lib.commonjs/providers/provider-infura.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-infura.js +0 -206
- package/lib.commonjs/providers/provider-infura.js.map +0 -1
- package/lib.commonjs/providers/provider-pocket.d.ts +0 -54
- package/lib.commonjs/providers/provider-pocket.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-pocket.js +0 -109
- package/lib.commonjs/providers/provider-pocket.js.map +0 -1
- package/lib.commonjs/providers/provider-quicknode.d.ts +0 -59
- package/lib.commonjs/providers/provider-quicknode.d.ts.map +0 -1
- package/lib.commonjs/providers/provider-quicknode.js +0 -163
- package/lib.commonjs/providers/provider-quicknode.js.map +0 -1
- package/lib.commonjs/wallet/hdwallet.d.ts +0 -248
- package/lib.commonjs/wallet/hdwallet.d.ts.map +0 -1
- package/lib.commonjs/wallet/hdwallet.js +0 -505
- package/lib.commonjs/wallet/hdwallet.js.map +0 -1
- package/lib.commonjs/wallet/json-crowdsale.d.ts +0 -27
- package/lib.commonjs/wallet/json-crowdsale.d.ts.map +0 -1
- package/lib.commonjs/wallet/json-crowdsale.js +0 -60
- package/lib.commonjs/wallet/json-crowdsale.js.map +0 -1
- package/lib.commonjs/wallet/mnemonic.d.ts +0 -65
- package/lib.commonjs/wallet/mnemonic.d.ts.map +0 -1
- package/lib.commonjs/wallet/mnemonic.js +0 -169
- package/lib.commonjs/wallet/mnemonic.js.map +0 -1
- package/lib.commonjs/wallet/seedwallet.d.ts +0 -4
- package/lib.commonjs/wallet/seedwallet.d.ts.map +0 -1
- package/lib.commonjs/wallet/seedwallet.js +0 -8
- package/lib.commonjs/wallet/seedwallet.js.map +0 -1
- package/lib.esm/providers/provider-alchemy.d.ts +0 -50
- package/lib.esm/providers/provider-alchemy.d.ts.map +0 -1
- package/lib.esm/providers/provider-alchemy.js +0 -147
- package/lib.esm/providers/provider-alchemy.js.map +0 -1
- package/lib.esm/providers/provider-ankr.d.ts +0 -61
- package/lib.esm/providers/provider-ankr.d.ts.map +0 -1
- package/lib.esm/providers/provider-ankr.js +0 -133
- package/lib.esm/providers/provider-ankr.js.map +0 -1
- package/lib.esm/providers/provider-blockscout.d.ts +0 -59
- package/lib.esm/providers/provider-blockscout.d.ts.map +0 -1
- package/lib.esm/providers/provider-blockscout.js +0 -141
- package/lib.esm/providers/provider-blockscout.js.map +0 -1
- package/lib.esm/providers/provider-chainstack.d.ts +0 -46
- package/lib.esm/providers/provider-chainstack.d.ts.map +0 -1
- package/lib.esm/providers/provider-chainstack.js +0 -98
- package/lib.esm/providers/provider-chainstack.js.map +0 -1
- package/lib.esm/providers/provider-cloudflare.d.ts +0 -14
- package/lib.esm/providers/provider-cloudflare.d.ts.map +0 -1
- package/lib.esm/providers/provider-cloudflare.js +0 -22
- package/lib.esm/providers/provider-cloudflare.js.map +0 -1
- package/lib.esm/providers/provider-etherscan.d.ts +0 -147
- package/lib.esm/providers/provider-etherscan.d.ts.map +0 -1
- package/lib.esm/providers/provider-etherscan.js +0 -584
- package/lib.esm/providers/provider-etherscan.js.map +0 -1
- package/lib.esm/providers/provider-infura.d.ts +0 -101
- package/lib.esm/providers/provider-infura.d.ts.map +0 -1
- package/lib.esm/providers/provider-infura.js +0 -201
- package/lib.esm/providers/provider-infura.js.map +0 -1
- package/lib.esm/providers/provider-pocket.d.ts +0 -54
- package/lib.esm/providers/provider-pocket.d.ts.map +0 -1
- package/lib.esm/providers/provider-pocket.js +0 -105
- package/lib.esm/providers/provider-pocket.js.map +0 -1
- package/lib.esm/providers/provider-quicknode.d.ts +0 -59
- package/lib.esm/providers/provider-quicknode.d.ts.map +0 -1
- package/lib.esm/providers/provider-quicknode.js +0 -159
- package/lib.esm/providers/provider-quicknode.js.map +0 -1
- package/lib.esm/wallet/hdwallet.d.ts +0 -248
- package/lib.esm/wallet/hdwallet.d.ts.map +0 -1
- package/lib.esm/wallet/hdwallet.js +0 -498
- package/lib.esm/wallet/hdwallet.js.map +0 -1
- package/lib.esm/wallet/json-crowdsale.d.ts +0 -27
- package/lib.esm/wallet/json-crowdsale.d.ts.map +0 -1
- package/lib.esm/wallet/json-crowdsale.js +0 -55
- package/lib.esm/wallet/json-crowdsale.js.map +0 -1
- package/lib.esm/wallet/mnemonic.d.ts +0 -65
- package/lib.esm/wallet/mnemonic.d.ts.map +0 -1
- package/lib.esm/wallet/mnemonic.js +0 -165
- package/lib.esm/wallet/mnemonic.js.map +0 -1
- package/lib.esm/wallet/seedwallet.d.ts +0 -4
- package/lib.esm/wallet/seedwallet.d.ts.map +0 -1
- package/lib.esm/wallet/seedwallet.js +0 -4
- package/lib.esm/wallet/seedwallet.js.map +0 -1
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import { getAddress } from "../../address/index.js";
|
|
2
|
-
import { toBeHex } from "../../utils/maths.js";
|
|
3
|
-
|
|
4
|
-
import { Typed } from "../typed.js";
|
|
5
|
-
import { Coder } from "./abstract-coder.js";
|
|
6
|
-
|
|
7
|
-
import type { Reader, Writer } from "./abstract-coder.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @_ignore
|
|
12
|
-
*/
|
|
13
|
-
export class AddressCoder extends Coder {
|
|
14
|
-
|
|
15
|
-
constructor(localName: string) {
|
|
16
|
-
super("address", "address", localName, false);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
defaultValue(): string {
|
|
20
|
-
return "0x0000000000000000000000000000000000000000";
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
encode(writer: Writer, _value: string | Typed): number {
|
|
24
|
-
let value = Typed.dereference(_value, "string");
|
|
25
|
-
try {
|
|
26
|
-
value = getAddress(value);
|
|
27
|
-
} catch (error: any) {
|
|
28
|
-
return this._throwError(error.message, _value);
|
|
29
|
-
}
|
|
30
|
-
return writer.writeValue(value);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
decode(reader: Reader): any {
|
|
34
|
-
return getAddress(toBeHex(reader.readValue(), 20));
|
|
35
|
-
}
|
|
36
|
-
}
|
|
1
|
+
import { getAddress } from "../../address/index.js";
|
|
2
|
+
import { toBeHex } from "../../utils/maths.js";
|
|
3
|
+
|
|
4
|
+
import { Typed } from "../typed.js";
|
|
5
|
+
import { Coder } from "./abstract-coder.js";
|
|
6
|
+
|
|
7
|
+
import type { Reader, Writer } from "./abstract-coder.js";
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @_ignore
|
|
12
|
+
*/
|
|
13
|
+
export class AddressCoder extends Coder {
|
|
14
|
+
|
|
15
|
+
constructor(localName: string) {
|
|
16
|
+
super("address", "address", localName, false);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
defaultValue(): string {
|
|
20
|
+
return "0x0000000000000000000000000000000000000000";
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
encode(writer: Writer, _value: string | Typed): number {
|
|
24
|
+
let value = Typed.dereference(_value, "string");
|
|
25
|
+
try {
|
|
26
|
+
value = getAddress(value);
|
|
27
|
+
} catch (error: any) {
|
|
28
|
+
return this._throwError(error.message, _value);
|
|
29
|
+
}
|
|
30
|
+
return writer.writeValue(value);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
decode(reader: Reader): any {
|
|
34
|
+
return getAddress(toBeHex(reader.readValue(), 20));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { Coder } from "./abstract-coder.js";
|
|
2
|
-
|
|
3
|
-
import type { Reader, Writer } from "./abstract-coder.js";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Clones the functionality of an existing Coder, but without a localName
|
|
7
|
-
*
|
|
8
|
-
* @_ignore
|
|
9
|
-
*/
|
|
10
|
-
export class AnonymousCoder extends Coder {
|
|
11
|
-
private coder: Coder;
|
|
12
|
-
|
|
13
|
-
constructor(coder: Coder) {
|
|
14
|
-
super(coder.name, coder.type, "_", coder.dynamic);
|
|
15
|
-
this.coder = coder;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
defaultValue(): any {
|
|
19
|
-
return this.coder.defaultValue();
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
encode(writer: Writer, value: any): number {
|
|
23
|
-
return this.coder.encode(writer, value);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
decode(reader: Reader): any {
|
|
27
|
-
return this.coder.decode(reader);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
1
|
+
import { Coder } from "./abstract-coder.js";
|
|
2
|
+
|
|
3
|
+
import type { Reader, Writer } from "./abstract-coder.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Clones the functionality of an existing Coder, but without a localName
|
|
7
|
+
*
|
|
8
|
+
* @_ignore
|
|
9
|
+
*/
|
|
10
|
+
export class AnonymousCoder extends Coder {
|
|
11
|
+
private coder: Coder;
|
|
12
|
+
|
|
13
|
+
constructor(coder: Coder) {
|
|
14
|
+
super(coder.name, coder.type, "_", coder.dynamic);
|
|
15
|
+
this.coder = coder;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
defaultValue(): any {
|
|
19
|
+
return this.coder.defaultValue();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
encode(writer: Writer, value: any): number {
|
|
23
|
+
return this.coder.encode(writer, value);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
decode(reader: Reader): any {
|
|
27
|
+
return this.coder.decode(reader);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -1,199 +1,199 @@
|
|
|
1
|
-
import {
|
|
2
|
-
defineProperties, isError, assert, assertArgument, assertArgumentCount
|
|
3
|
-
} from "../../utils/index.js";
|
|
4
|
-
|
|
5
|
-
import { Typed } from "../typed.js";
|
|
6
|
-
|
|
7
|
-
import { Coder, Result, WordSize, Writer } from "./abstract-coder.js";
|
|
8
|
-
import { AnonymousCoder } from "./anonymous.js";
|
|
9
|
-
|
|
10
|
-
import type { Reader } from "./abstract-coder.js";
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @_ignore
|
|
14
|
-
*/
|
|
15
|
-
export function pack(writer: Writer, coders: ReadonlyArray<Coder>, values: Array<any> | { [ name: string ]: any }): number {
|
|
16
|
-
let arrayValues: Array<any> = [ ];
|
|
17
|
-
|
|
18
|
-
if (Array.isArray(values)) {
|
|
19
|
-
arrayValues = values;
|
|
20
|
-
|
|
21
|
-
} else if (values && typeof(values) === "object") {
|
|
22
|
-
let unique: { [ name: string ]: boolean } = { };
|
|
23
|
-
|
|
24
|
-
arrayValues = coders.map((coder) => {
|
|
25
|
-
const name = coder.localName;
|
|
26
|
-
assert(name, "cannot encode object for signature with missing names",
|
|
27
|
-
"INVALID_ARGUMENT", { argument: "values", info: { coder }, value: values });
|
|
28
|
-
|
|
29
|
-
assert(!unique[name], "cannot encode object for signature with duplicate names",
|
|
30
|
-
"INVALID_ARGUMENT", { argument: "values", info: { coder }, value: values });
|
|
31
|
-
|
|
32
|
-
unique[name] = true;
|
|
33
|
-
|
|
34
|
-
return values[name];
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
} else {
|
|
38
|
-
assertArgument(false, "invalid tuple value", "tuple", values);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
assertArgument(coders.length === arrayValues.length, "types/value length mismatch", "tuple", values);
|
|
42
|
-
|
|
43
|
-
let staticWriter = new Writer();
|
|
44
|
-
let dynamicWriter = new Writer();
|
|
45
|
-
|
|
46
|
-
let updateFuncs: Array<(baseOffset: number) => void> = [];
|
|
47
|
-
coders.forEach((coder, index) => {
|
|
48
|
-
let value = arrayValues[index];
|
|
49
|
-
|
|
50
|
-
if (coder.dynamic) {
|
|
51
|
-
// Get current dynamic offset (for the future pointer)
|
|
52
|
-
let dynamicOffset = dynamicWriter.length;
|
|
53
|
-
|
|
54
|
-
// Encode the dynamic value into the dynamicWriter
|
|
55
|
-
coder.encode(dynamicWriter, value);
|
|
56
|
-
|
|
57
|
-
// Prepare to populate the correct offset once we are done
|
|
58
|
-
let updateFunc = staticWriter.writeUpdatableValue();
|
|
59
|
-
updateFuncs.push((baseOffset: number) => {
|
|
60
|
-
updateFunc(baseOffset + dynamicOffset);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
} else {
|
|
64
|
-
coder.encode(staticWriter, value);
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
// Backfill all the dynamic offsets, now that we know the static length
|
|
69
|
-
updateFuncs.forEach((func) => { func(staticWriter.length); });
|
|
70
|
-
|
|
71
|
-
let length = writer.appendWriter(staticWriter);
|
|
72
|
-
length += writer.appendWriter(dynamicWriter);
|
|
73
|
-
return length;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* @_ignore
|
|
78
|
-
*/
|
|
79
|
-
export function unpack(reader: Reader, coders: ReadonlyArray<Coder>): Result {
|
|
80
|
-
let values: Array<any> = [];
|
|
81
|
-
let keys: Array<null | string> = [ ];
|
|
82
|
-
|
|
83
|
-
// A reader anchored to this base
|
|
84
|
-
let baseReader = reader.subReader(0);
|
|
85
|
-
|
|
86
|
-
coders.forEach((coder) => {
|
|
87
|
-
let value: any = null;
|
|
88
|
-
|
|
89
|
-
if (coder.dynamic) {
|
|
90
|
-
let offset = reader.readIndex();
|
|
91
|
-
let offsetReader = baseReader.subReader(offset);
|
|
92
|
-
try {
|
|
93
|
-
value = coder.decode(offsetReader);
|
|
94
|
-
} catch (error: any) {
|
|
95
|
-
// Cannot recover from this
|
|
96
|
-
if (isError(error, "BUFFER_OVERRUN")) {
|
|
97
|
-
throw error;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
value = error;
|
|
101
|
-
value.baseType = coder.name;
|
|
102
|
-
value.name = coder.localName;
|
|
103
|
-
value.type = coder.type;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
} else {
|
|
107
|
-
try {
|
|
108
|
-
value = coder.decode(reader);
|
|
109
|
-
} catch (error: any) {
|
|
110
|
-
// Cannot recover from this
|
|
111
|
-
if (isError(error, "BUFFER_OVERRUN")) {
|
|
112
|
-
throw error;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
value = error;
|
|
116
|
-
value.baseType = coder.name;
|
|
117
|
-
value.name = coder.localName;
|
|
118
|
-
value.type = coder.type;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (value == undefined) {
|
|
123
|
-
throw new Error("investigate");
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
values.push(value);
|
|
127
|
-
keys.push(coder.localName || null);
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
return Result.fromItems(values, keys);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* @_ignore
|
|
135
|
-
*/
|
|
136
|
-
export class ArrayCoder extends Coder {
|
|
137
|
-
readonly coder!: Coder;
|
|
138
|
-
readonly length!: number;
|
|
139
|
-
|
|
140
|
-
constructor(coder: Coder, length: number, localName: string) {
|
|
141
|
-
const type = (coder.type + "[" + (length >= 0 ? length: "") + "]");
|
|
142
|
-
const dynamic = (length === -1 || coder.dynamic);
|
|
143
|
-
super("array", type, localName, dynamic);
|
|
144
|
-
defineProperties<ArrayCoder>(this, { coder, length });
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
defaultValue(): Array<any> {
|
|
148
|
-
// Verifies the child coder is valid (even if the array is dynamic or 0-length)
|
|
149
|
-
const defaultChild = this.coder.defaultValue();
|
|
150
|
-
|
|
151
|
-
const result: Array<any> = [];
|
|
152
|
-
for (let i = 0; i < this.length; i++) {
|
|
153
|
-
result.push(defaultChild);
|
|
154
|
-
}
|
|
155
|
-
return result;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
encode(writer: Writer, _value: Array<any> | Typed): number {
|
|
159
|
-
const value = Typed.dereference(_value, "array");
|
|
160
|
-
|
|
161
|
-
if(!Array.isArray(value)) {
|
|
162
|
-
this._throwError("expected array value", value);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
let count = this.length;
|
|
166
|
-
|
|
167
|
-
if (count === -1) {
|
|
168
|
-
count = value.length;
|
|
169
|
-
writer.writeValue(value.length);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
assertArgumentCount(value.length, count, "coder array" + (this.localName? (" "+ this.localName): ""));
|
|
173
|
-
|
|
174
|
-
let coders: Array<Coder> = [ ];
|
|
175
|
-
for (let i = 0; i < value.length; i++) { coders.push(this.coder); }
|
|
176
|
-
|
|
177
|
-
return pack(writer, coders, value);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
decode(reader: Reader): any {
|
|
181
|
-
let count = this.length;
|
|
182
|
-
if (count === -1) {
|
|
183
|
-
count = reader.readIndex();
|
|
184
|
-
|
|
185
|
-
// Check that there is *roughly* enough data to ensure
|
|
186
|
-
// stray random data is not being read as a length. Each
|
|
187
|
-
// slot requires at least 32 bytes for their value (or 32
|
|
188
|
-
// bytes as a link to the data). This could use a much
|
|
189
|
-
// tighter bound, but we are erroring on the side of safety.
|
|
190
|
-
assert(count * WordSize <= reader.dataLength, "insufficient data length",
|
|
191
|
-
"BUFFER_OVERRUN", { buffer: reader.bytes, offset: count * WordSize, length: reader.dataLength });
|
|
192
|
-
}
|
|
193
|
-
let coders: Array<Coder> = [];
|
|
194
|
-
for (let i = 0; i < count; i++) { coders.push(new AnonymousCoder(this.coder)); }
|
|
195
|
-
|
|
196
|
-
return unpack(reader, coders);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
1
|
+
import {
|
|
2
|
+
defineProperties, isError, assert, assertArgument, assertArgumentCount
|
|
3
|
+
} from "../../utils/index.js";
|
|
4
|
+
|
|
5
|
+
import { Typed } from "../typed.js";
|
|
6
|
+
|
|
7
|
+
import { Coder, Result, WordSize, Writer } from "./abstract-coder.js";
|
|
8
|
+
import { AnonymousCoder } from "./anonymous.js";
|
|
9
|
+
|
|
10
|
+
import type { Reader } from "./abstract-coder.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @_ignore
|
|
14
|
+
*/
|
|
15
|
+
export function pack(writer: Writer, coders: ReadonlyArray<Coder>, values: Array<any> | { [ name: string ]: any }): number {
|
|
16
|
+
let arrayValues: Array<any> = [ ];
|
|
17
|
+
|
|
18
|
+
if (Array.isArray(values)) {
|
|
19
|
+
arrayValues = values;
|
|
20
|
+
|
|
21
|
+
} else if (values && typeof(values) === "object") {
|
|
22
|
+
let unique: { [ name: string ]: boolean } = { };
|
|
23
|
+
|
|
24
|
+
arrayValues = coders.map((coder) => {
|
|
25
|
+
const name = coder.localName;
|
|
26
|
+
assert(name, "cannot encode object for signature with missing names",
|
|
27
|
+
"INVALID_ARGUMENT", { argument: "values", info: { coder }, value: values });
|
|
28
|
+
|
|
29
|
+
assert(!unique[name], "cannot encode object for signature with duplicate names",
|
|
30
|
+
"INVALID_ARGUMENT", { argument: "values", info: { coder }, value: values });
|
|
31
|
+
|
|
32
|
+
unique[name] = true;
|
|
33
|
+
|
|
34
|
+
return values[name];
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
} else {
|
|
38
|
+
assertArgument(false, "invalid tuple value", "tuple", values);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
assertArgument(coders.length === arrayValues.length, "types/value length mismatch", "tuple", values);
|
|
42
|
+
|
|
43
|
+
let staticWriter = new Writer();
|
|
44
|
+
let dynamicWriter = new Writer();
|
|
45
|
+
|
|
46
|
+
let updateFuncs: Array<(baseOffset: number) => void> = [];
|
|
47
|
+
coders.forEach((coder, index) => {
|
|
48
|
+
let value = arrayValues[index];
|
|
49
|
+
|
|
50
|
+
if (coder.dynamic) {
|
|
51
|
+
// Get current dynamic offset (for the future pointer)
|
|
52
|
+
let dynamicOffset = dynamicWriter.length;
|
|
53
|
+
|
|
54
|
+
// Encode the dynamic value into the dynamicWriter
|
|
55
|
+
coder.encode(dynamicWriter, value);
|
|
56
|
+
|
|
57
|
+
// Prepare to populate the correct offset once we are done
|
|
58
|
+
let updateFunc = staticWriter.writeUpdatableValue();
|
|
59
|
+
updateFuncs.push((baseOffset: number) => {
|
|
60
|
+
updateFunc(baseOffset + dynamicOffset);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
} else {
|
|
64
|
+
coder.encode(staticWriter, value);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Backfill all the dynamic offsets, now that we know the static length
|
|
69
|
+
updateFuncs.forEach((func) => { func(staticWriter.length); });
|
|
70
|
+
|
|
71
|
+
let length = writer.appendWriter(staticWriter);
|
|
72
|
+
length += writer.appendWriter(dynamicWriter);
|
|
73
|
+
return length;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @_ignore
|
|
78
|
+
*/
|
|
79
|
+
export function unpack(reader: Reader, coders: ReadonlyArray<Coder>): Result {
|
|
80
|
+
let values: Array<any> = [];
|
|
81
|
+
let keys: Array<null | string> = [ ];
|
|
82
|
+
|
|
83
|
+
// A reader anchored to this base
|
|
84
|
+
let baseReader = reader.subReader(0);
|
|
85
|
+
|
|
86
|
+
coders.forEach((coder) => {
|
|
87
|
+
let value: any = null;
|
|
88
|
+
|
|
89
|
+
if (coder.dynamic) {
|
|
90
|
+
let offset = reader.readIndex();
|
|
91
|
+
let offsetReader = baseReader.subReader(offset);
|
|
92
|
+
try {
|
|
93
|
+
value = coder.decode(offsetReader);
|
|
94
|
+
} catch (error: any) {
|
|
95
|
+
// Cannot recover from this
|
|
96
|
+
if (isError(error, "BUFFER_OVERRUN")) {
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
value = error;
|
|
101
|
+
value.baseType = coder.name;
|
|
102
|
+
value.name = coder.localName;
|
|
103
|
+
value.type = coder.type;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
} else {
|
|
107
|
+
try {
|
|
108
|
+
value = coder.decode(reader);
|
|
109
|
+
} catch (error: any) {
|
|
110
|
+
// Cannot recover from this
|
|
111
|
+
if (isError(error, "BUFFER_OVERRUN")) {
|
|
112
|
+
throw error;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
value = error;
|
|
116
|
+
value.baseType = coder.name;
|
|
117
|
+
value.name = coder.localName;
|
|
118
|
+
value.type = coder.type;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (value == undefined) {
|
|
123
|
+
throw new Error("investigate");
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
values.push(value);
|
|
127
|
+
keys.push(coder.localName || null);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
return Result.fromItems(values, keys);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @_ignore
|
|
135
|
+
*/
|
|
136
|
+
export class ArrayCoder extends Coder {
|
|
137
|
+
readonly coder!: Coder;
|
|
138
|
+
readonly length!: number;
|
|
139
|
+
|
|
140
|
+
constructor(coder: Coder, length: number, localName: string) {
|
|
141
|
+
const type = (coder.type + "[" + (length >= 0 ? length: "") + "]");
|
|
142
|
+
const dynamic = (length === -1 || coder.dynamic);
|
|
143
|
+
super("array", type, localName, dynamic);
|
|
144
|
+
defineProperties<ArrayCoder>(this, { coder, length });
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
defaultValue(): Array<any> {
|
|
148
|
+
// Verifies the child coder is valid (even if the array is dynamic or 0-length)
|
|
149
|
+
const defaultChild = this.coder.defaultValue();
|
|
150
|
+
|
|
151
|
+
const result: Array<any> = [];
|
|
152
|
+
for (let i = 0; i < this.length; i++) {
|
|
153
|
+
result.push(defaultChild);
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
encode(writer: Writer, _value: Array<any> | Typed): number {
|
|
159
|
+
const value = Typed.dereference(_value, "array");
|
|
160
|
+
|
|
161
|
+
if(!Array.isArray(value)) {
|
|
162
|
+
this._throwError("expected array value", value);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
let count = this.length;
|
|
166
|
+
|
|
167
|
+
if (count === -1) {
|
|
168
|
+
count = value.length;
|
|
169
|
+
writer.writeValue(value.length);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
assertArgumentCount(value.length, count, "coder array" + (this.localName? (" "+ this.localName): ""));
|
|
173
|
+
|
|
174
|
+
let coders: Array<Coder> = [ ];
|
|
175
|
+
for (let i = 0; i < value.length; i++) { coders.push(this.coder); }
|
|
176
|
+
|
|
177
|
+
return pack(writer, coders, value);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
decode(reader: Reader): any {
|
|
181
|
+
let count = this.length;
|
|
182
|
+
if (count === -1) {
|
|
183
|
+
count = reader.readIndex();
|
|
184
|
+
|
|
185
|
+
// Check that there is *roughly* enough data to ensure
|
|
186
|
+
// stray random data is not being read as a length. Each
|
|
187
|
+
// slot requires at least 32 bytes for their value (or 32
|
|
188
|
+
// bytes as a link to the data). This could use a much
|
|
189
|
+
// tighter bound, but we are erroring on the side of safety.
|
|
190
|
+
assert(count * WordSize <= reader.dataLength, "insufficient data length",
|
|
191
|
+
"BUFFER_OVERRUN", { buffer: reader.bytes, offset: count * WordSize, length: reader.dataLength });
|
|
192
|
+
}
|
|
193
|
+
let coders: Array<Coder> = [];
|
|
194
|
+
for (let i = 0; i < count; i++) { coders.push(new AnonymousCoder(this.coder)); }
|
|
195
|
+
|
|
196
|
+
return unpack(reader, coders);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { Typed } from "../typed.js";
|
|
2
|
-
import { Coder } from "./abstract-coder.js";
|
|
3
|
-
|
|
4
|
-
import type { Reader, Writer } from "./abstract-coder.js";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* @_ignore
|
|
8
|
-
*/
|
|
9
|
-
export class BooleanCoder extends Coder {
|
|
10
|
-
|
|
11
|
-
constructor(localName: string) {
|
|
12
|
-
super("bool", "bool", localName, false);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
defaultValue(): boolean {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
encode(writer: Writer, _value: boolean | Typed): number {
|
|
20
|
-
const value = Typed.dereference(_value, "bool");
|
|
21
|
-
return writer.writeValue(value ? 1: 0);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
decode(reader: Reader): any {
|
|
25
|
-
return !!reader.readValue();
|
|
26
|
-
}
|
|
27
|
-
}
|
|
1
|
+
import { Typed } from "../typed.js";
|
|
2
|
+
import { Coder } from "./abstract-coder.js";
|
|
3
|
+
|
|
4
|
+
import type { Reader, Writer } from "./abstract-coder.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @_ignore
|
|
8
|
+
*/
|
|
9
|
+
export class BooleanCoder extends Coder {
|
|
10
|
+
|
|
11
|
+
constructor(localName: string) {
|
|
12
|
+
super("bool", "bool", localName, false);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
defaultValue(): boolean {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
encode(writer: Writer, _value: boolean | Typed): number {
|
|
20
|
+
const value = Typed.dereference(_value, "bool");
|
|
21
|
+
return writer.writeValue(value ? 1: 0);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
decode(reader: Reader): any {
|
|
25
|
+
return !!reader.readValue();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
import { getBytesCopy, hexlify } from "../../utils/index.js";
|
|
2
|
-
|
|
3
|
-
import { Coder } from "./abstract-coder.js";
|
|
4
|
-
|
|
5
|
-
import type { Reader, Writer } from "./abstract-coder.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @_ignore
|
|
10
|
-
*/
|
|
11
|
-
export class DynamicBytesCoder extends Coder {
|
|
12
|
-
constructor(type: string, localName: string) {
|
|
13
|
-
super(type, type, localName, true);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
defaultValue(): string {
|
|
17
|
-
return "0x";
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
encode(writer: Writer, value: any): number {
|
|
21
|
-
value = getBytesCopy(value);
|
|
22
|
-
let length = writer.writeValue(value.length);
|
|
23
|
-
length += writer.writeBytes(value);
|
|
24
|
-
return length;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
decode(reader: Reader): any {
|
|
28
|
-
return reader.readBytes(reader.readIndex(), true);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @_ignore
|
|
34
|
-
*/
|
|
35
|
-
export class BytesCoder extends DynamicBytesCoder {
|
|
36
|
-
constructor(localName: string) {
|
|
37
|
-
super("bytes", localName);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
decode(reader: Reader): any {
|
|
41
|
-
return hexlify(super.decode(reader));
|
|
42
|
-
}
|
|
43
|
-
}
|
|
1
|
+
import { getBytesCopy, hexlify } from "../../utils/index.js";
|
|
2
|
+
|
|
3
|
+
import { Coder } from "./abstract-coder.js";
|
|
4
|
+
|
|
5
|
+
import type { Reader, Writer } from "./abstract-coder.js";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @_ignore
|
|
10
|
+
*/
|
|
11
|
+
export class DynamicBytesCoder extends Coder {
|
|
12
|
+
constructor(type: string, localName: string) {
|
|
13
|
+
super(type, type, localName, true);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
defaultValue(): string {
|
|
17
|
+
return "0x";
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
encode(writer: Writer, value: any): number {
|
|
21
|
+
value = getBytesCopy(value);
|
|
22
|
+
let length = writer.writeValue(value.length);
|
|
23
|
+
length += writer.writeBytes(value);
|
|
24
|
+
return length;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
decode(reader: Reader): any {
|
|
28
|
+
return reader.readBytes(reader.readIndex(), true);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @_ignore
|
|
34
|
+
*/
|
|
35
|
+
export class BytesCoder extends DynamicBytesCoder {
|
|
36
|
+
constructor(localName: string) {
|
|
37
|
+
super("bytes", localName);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
decode(reader: Reader): any {
|
|
41
|
+
return hexlify(super.decode(reader));
|
|
42
|
+
}
|
|
43
|
+
}
|