@aeternity/aepp-sdk 13.0.0-alpha.0 → 13.0.0-alpha.1
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/bin/aesophia_cli +0 -0
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +1 -1
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +4206 -1127
- package/dist/aepp-sdk.js.map +1 -1
- package/es/AeSdkBase.d.ts +3 -3
- package/es/AeSdkBase.mjs +4 -0
- package/es/AeSdkBase.mjs.map +1 -1
- package/es/AeSdkMethods.d.ts +3 -4
- package/es/AeSdkMethods.mjs.map +1 -1
- package/es/Node.d.ts +4 -3
- package/es/Node.mjs +1 -1
- package/es/Node.mjs.map +1 -1
- package/es/account/Base.d.ts +2 -2
- package/es/account/Base.mjs.map +1 -1
- package/es/account/Generalized.mjs +5 -3
- package/es/account/Generalized.mjs.map +1 -1
- package/es/account/Ledger.mjs +2 -1
- package/es/account/Ledger.mjs.map +1 -1
- package/es/account/Memory.mjs +2 -1
- package/es/account/Memory.mjs.map +1 -1
- package/es/aens.d.ts +1 -1
- package/es/aens.mjs +5 -1
- package/es/aens.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +19 -4
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs +1 -1
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
- package/es/chain.d.ts +9 -1
- package/es/chain.mjs +4 -1
- package/es/chain.mjs.map +1 -1
- package/es/channel/Base.d.ts +6 -1
- package/es/channel/Base.mjs +9 -6
- package/es/channel/Base.mjs.map +1 -1
- package/es/channel/Contract.d.ts +8 -7
- package/es/channel/Contract.mjs +1 -1
- package/es/channel/Contract.mjs.map +1 -1
- package/es/channel/Spend.d.ts +3 -1
- package/es/channel/Spend.mjs +4 -2
- package/es/channel/Spend.mjs.map +1 -1
- package/es/channel/handlers.mjs +11 -9
- package/es/channel/handlers.mjs.map +1 -1
- package/es/channel/internal.mjs +3 -1
- package/es/channel/internal.mjs.map +1 -1
- package/es/contract/Contract.d.ts +21 -46
- package/es/contract/Contract.mjs +69 -52
- package/es/contract/Contract.mjs.map +1 -1
- package/es/contract/compiler/Base.d.ts +81 -0
- package/es/contract/compiler/Base.mjs +5 -0
- package/es/contract/compiler/Base.mjs.map +1 -0
- package/es/contract/compiler/Cli.d.ts +23 -0
- package/es/contract/compiler/Cli.mjs +155 -0
- package/es/contract/compiler/Cli.mjs.map +1 -0
- package/es/contract/compiler/Http.d.ts +32 -0
- package/es/contract/{CompilerHttp.mjs → compiler/Http.mjs} +64 -9
- package/es/contract/compiler/Http.mjs.map +1 -0
- package/es/contract/compiler/HttpNode.d.ts +17 -0
- package/es/contract/compiler/HttpNode.mjs +26 -0
- package/es/contract/compiler/HttpNode.mjs.map +1 -0
- package/es/contract/compiler/getFileSystem.d.ts +6 -0
- package/es/contract/compiler/getFileSystem.mjs +40 -0
- package/es/contract/compiler/getFileSystem.mjs.map +1 -0
- package/es/contract/ga.d.ts +5 -4
- package/es/contract/ga.mjs +11 -2
- package/es/contract/ga.mjs.map +1 -1
- package/es/index-browser.d.ts +39 -0
- package/es/index-browser.mjs +55 -0
- package/es/index-browser.mjs.map +1 -0
- package/es/index.d.ts +4 -38
- package/es/index.mjs +4 -53
- package/es/index.mjs.map +1 -1
- package/es/oracle.mjs +1 -1
- package/es/oracle.mjs.map +1 -1
- package/es/spend.mjs +1 -3
- package/es/spend.mjs.map +1 -1
- package/es/tx/builder/constants.d.ts +28 -1
- package/es/tx/builder/constants.mjs +32 -3
- package/es/tx/builder/constants.mjs.map +1 -1
- package/es/tx/builder/field-types/abi-version.d.ts +10 -0
- package/es/tx/builder/field-types/abi-version.mjs +20 -0
- package/es/tx/builder/field-types/abi-version.mjs.map +1 -0
- package/es/tx/builder/field-types/address.d.ts +5 -6
- package/es/tx/builder/field-types/address.mjs +17 -8
- package/es/tx/builder/field-types/address.mjs.map +1 -1
- package/es/tx/builder/field-types/array.d.ts +7 -0
- package/es/tx/builder/field-types/array.mjs +11 -0
- package/es/tx/builder/field-types/array.mjs.map +1 -0
- package/es/tx/builder/field-types/boolean.d.ts +6 -0
- package/es/tx/builder/field-types/boolean.mjs +13 -0
- package/es/tx/builder/field-types/boolean.mjs.map +1 -0
- package/es/tx/builder/field-types/coin-amount.d.ts +1 -1
- package/es/tx/builder/field-types/coin-amount.mjs.map +1 -1
- package/es/tx/builder/field-types/ct-version.d.ts +30 -0
- package/es/tx/builder/field-types/ct-version.mjs +48 -0
- package/es/tx/builder/field-types/ct-version.mjs.map +1 -0
- package/es/tx/builder/field-types/deposit.d.ts +1 -1
- package/es/tx/builder/field-types/deposit.mjs.map +1 -1
- package/es/tx/builder/field-types/encoded.d.ts +6 -0
- package/es/tx/builder/field-types/encoded.mjs +21 -0
- package/es/tx/builder/field-types/encoded.mjs.map +1 -0
- package/es/tx/builder/field-types/entry.d.ts +11 -0
- package/es/tx/builder/field-types/entry.mjs +31 -0
- package/es/tx/builder/field-types/entry.mjs.map +1 -0
- package/es/tx/builder/field-types/enumeration.d.ts +5 -3
- package/es/tx/builder/field-types/enumeration.mjs +11 -2
- package/es/tx/builder/field-types/enumeration.mjs.map +1 -1
- package/es/tx/builder/field-types/fee.d.ts +10 -7
- package/es/tx/builder/field-types/fee.mjs +24 -20
- package/es/tx/builder/field-types/fee.mjs.map +1 -1
- package/es/tx/builder/field-types/gas-limit.d.ts +5 -2
- package/es/tx/builder/field-types/gas-limit.mjs +9 -6
- package/es/tx/builder/field-types/gas-limit.mjs.map +1 -1
- package/es/tx/builder/field-types/gas-price.d.ts +1 -1
- package/es/tx/builder/field-types/index.d.ts +66 -28
- package/es/tx/builder/field-types/index.mjs +30 -12
- package/es/tx/builder/field-types/index.mjs.map +1 -1
- package/es/tx/builder/field-types/mptree.d.ts +37 -0
- package/es/tx/builder/field-types/mptree.mjs +268 -0
- package/es/tx/builder/field-types/mptree.mjs.map +1 -0
- package/es/tx/builder/field-types/name-fee.d.ts +1 -2
- package/es/tx/builder/field-types/name-fee.mjs.map +1 -1
- package/es/tx/builder/field-types/name-id.mjs +2 -1
- package/es/tx/builder/field-types/name-id.mjs.map +1 -1
- package/es/tx/builder/field-types/pointers.mjs +2 -2
- package/es/tx/builder/field-types/pointers.mjs.map +1 -1
- package/es/tx/builder/field-types/raw.d.ts +6 -0
- package/es/tx/builder/field-types/raw.mjs +13 -0
- package/es/tx/builder/field-types/raw.mjs.map +1 -0
- package/es/tx/builder/field-types/short-u-int-const.d.ts +5 -0
- package/es/tx/builder/field-types/short-u-int-const.mjs +16 -0
- package/es/tx/builder/field-types/short-u-int-const.mjs.map +1 -0
- package/es/tx/builder/field-types/string.d.ts +6 -0
- package/es/tx/builder/field-types/string.mjs +10 -0
- package/es/tx/builder/field-types/string.mjs.map +1 -0
- package/es/tx/builder/field-types/u-int.d.ts +1 -2
- package/es/tx/builder/field-types/u-int.mjs.map +1 -1
- package/es/tx/builder/index.d.ts +11 -29
- package/es/tx/builder/index.mjs +50 -211
- package/es/tx/builder/index.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +2111 -571
- package/es/tx/builder/schema.mjs +57 -125
- package/es/tx/builder/schema.mjs.map +1 -1
- package/es/tx/index.d.ts +5 -20
- package/es/tx/index.mjs +31 -88
- package/es/tx/index.mjs.map +1 -1
- package/es/tx/validator.d.ts +3 -5
- package/es/tx/validator.mjs +82 -95
- package/es/tx/validator.mjs.map +1 -1
- package/es/utils/bytes.mjs +1 -1
- package/es/utils/bytes.mjs.map +1 -1
- package/es/utils/errors.d.ts +3 -8
- package/es/utils/errors.mjs +1 -11
- package/es/utils/errors.mjs.map +1 -1
- package/es/utils/other.d.ts +1 -1
- package/package.json +35 -27
- package/src/AeSdkBase.ts +6 -3
- package/src/AeSdkMethods.ts +3 -4
- package/src/Node.ts +6 -3
- package/src/account/Base.ts +2 -2
- package/src/account/Generalized.ts +2 -2
- package/src/account/Ledger.ts +1 -1
- package/src/account/Memory.ts +1 -1
- package/src/aens.ts +3 -2
- package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +18 -7
- package/src/aepp-wallet-communication/rpc/RpcClient.ts +2 -2
- package/src/chain.ts +5 -3
- package/src/channel/Base.ts +13 -5
- package/src/channel/Contract.ts +11 -10
- package/src/channel/Spend.ts +7 -2
- package/src/channel/handlers.ts +10 -9
- package/src/channel/internal.ts +1 -1
- package/src/contract/Contract.ts +69 -79
- package/src/contract/compiler/Base.ts +94 -0
- package/src/contract/compiler/Cli.ts +134 -0
- package/src/contract/compiler/Http.ts +124 -0
- package/src/contract/compiler/HttpNode.ts +26 -0
- package/src/contract/compiler/getFileSystem.ts +42 -0
- package/src/contract/ga.ts +9 -6
- package/src/index-browser.ts +58 -0
- package/src/index.ts +4 -56
- package/src/oracle.ts +1 -1
- package/src/spend.ts +1 -1
- package/src/tx/builder/constants.ts +32 -3
- package/src/tx/builder/field-types/abi-version.ts +21 -0
- package/src/tx/builder/field-types/address.ts +23 -13
- package/src/tx/builder/field-types/array.ts +19 -0
- package/src/tx/builder/field-types/boolean.ts +9 -0
- package/src/tx/builder/field-types/coin-amount.ts +2 -1
- package/src/tx/builder/field-types/ct-version.ts +50 -0
- package/src/tx/builder/field-types/deposit.ts +1 -1
- package/src/tx/builder/field-types/encoded.ts +27 -0
- package/src/tx/builder/field-types/entry.ts +31 -0
- package/src/tx/builder/field-types/enumeration.ts +15 -4
- package/src/tx/builder/field-types/fee.ts +38 -18
- package/src/tx/builder/field-types/gas-limit.ts +12 -7
- package/src/tx/builder/field-types/index.ts +46 -17
- package/src/tx/builder/field-types/mptree.ts +242 -0
- package/src/tx/builder/field-types/name-fee.ts +1 -2
- package/src/tx/builder/field-types/name-id.ts +1 -1
- package/src/tx/builder/field-types/pointers.ts +2 -2
- package/src/tx/builder/field-types/raw.ts +9 -0
- package/src/tx/builder/field-types/short-u-int-const.ts +20 -0
- package/src/tx/builder/field-types/string.ts +11 -0
- package/src/tx/builder/field-types/u-int.ts +1 -3
- package/src/tx/builder/index.ts +63 -247
- package/src/tx/builder/schema.ts +273 -323
- package/src/tx/index.ts +37 -104
- package/src/tx/validator.ts +72 -95
- package/src/utils/bytes.ts +1 -1
- package/src/utils/errors.ts +4 -13
- package/types-legacy/ts4.2/AeSdkBase.d.ts +3 -3
- package/types-legacy/ts4.2/AeSdkMethods.d.ts +3 -4
- package/types-legacy/ts4.2/Node.d.ts +3 -3
- package/types-legacy/ts4.2/account/Base.d.ts +2 -2
- package/types-legacy/ts4.2/aens.d.ts +1 -1
- package/types-legacy/ts4.2/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
- package/types-legacy/ts4.2/chain.d.ts +9 -1
- package/types-legacy/ts4.2/channel/Base.d.ts +6 -1
- package/types-legacy/ts4.2/channel/Contract.d.ts +8 -7
- package/types-legacy/ts4.2/channel/Spend.d.ts +3 -1
- package/types-legacy/ts4.2/contract/Contract.d.ts +21 -46
- package/types-legacy/ts4.2/contract/compiler/Base.d.ts +81 -0
- package/types-legacy/ts4.2/contract/compiler/Cli.d.ts +23 -0
- package/types-legacy/ts4.2/contract/compiler/Http.d.ts +32 -0
- package/types-legacy/ts4.2/contract/compiler/HttpNode.d.ts +17 -0
- package/types-legacy/ts4.2/contract/compiler/getFileSystem.d.ts +6 -0
- package/types-legacy/ts4.2/contract/ga.d.ts +5 -4
- package/types-legacy/ts4.2/index-browser.d.ts +39 -0
- package/types-legacy/ts4.2/index.d.ts +4 -38
- package/types-legacy/ts4.2/tx/builder/constants.d.ts +28 -1
- package/types-legacy/ts4.2/tx/builder/field-types/abi-version.d.ts +10 -0
- package/types-legacy/ts4.2/tx/builder/field-types/address.d.ts +11 -12
- package/types-legacy/ts4.2/tx/builder/field-types/array.d.ts +7 -0
- package/types-legacy/ts4.2/tx/builder/field-types/boolean.d.ts +6 -0
- package/types-legacy/ts4.2/tx/builder/field-types/coin-amount.d.ts +1 -1
- package/types-legacy/ts4.2/tx/builder/field-types/ct-version.d.ts +42 -0
- package/types-legacy/ts4.2/tx/builder/field-types/deposit.d.ts +1 -1
- package/types-legacy/ts4.2/tx/builder/field-types/encoded.d.ts +6 -0
- package/types-legacy/ts4.2/tx/builder/field-types/entry.d.ts +11 -0
- package/types-legacy/ts4.2/tx/builder/field-types/enumeration.d.ts +5 -3
- package/types-legacy/ts4.2/tx/builder/field-types/fee.d.ts +10 -7
- package/types-legacy/ts4.2/tx/builder/field-types/gas-limit.d.ts +5 -2
- package/types-legacy/ts4.2/tx/builder/field-types/gas-price.d.ts +1 -1
- package/types-legacy/ts4.2/tx/builder/field-types/index.d.ts +72 -28
- package/types-legacy/ts4.2/tx/builder/field-types/mptree.d.ts +43 -0
- package/types-legacy/ts4.2/tx/builder/field-types/name-fee.d.ts +1 -2
- package/types-legacy/ts4.2/tx/builder/field-types/raw.d.ts +6 -0
- package/types-legacy/ts4.2/tx/builder/field-types/short-u-int-const.d.ts +5 -0
- package/types-legacy/ts4.2/tx/builder/field-types/string.d.ts +6 -0
- package/types-legacy/ts4.2/tx/builder/field-types/u-int.d.ts +1 -2
- package/types-legacy/ts4.2/tx/builder/index.d.ts +11 -29
- package/types-legacy/ts4.2/tx/builder/schema.d.ts +2380 -668
- package/types-legacy/ts4.2/tx/index.d.ts +5 -20
- package/types-legacy/ts4.2/tx/validator.d.ts +3 -5
- package/types-legacy/ts4.2/utils/errors.d.ts +3 -8
- package/types-legacy/ts4.2/utils/other.d.ts +1 -1
- package/types-legacy/ts4.5/AeSdkBase.d.ts +3 -3
- package/types-legacy/ts4.5/AeSdkMethods.d.ts +3 -4
- package/types-legacy/ts4.5/Node.d.ts +3 -3
- package/types-legacy/ts4.5/account/Base.d.ts +2 -2
- package/types-legacy/ts4.5/aens.d.ts +1 -1
- package/types-legacy/ts4.5/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
- package/types-legacy/ts4.5/chain.d.ts +9 -1
- package/types-legacy/ts4.5/channel/Base.d.ts +6 -1
- package/types-legacy/ts4.5/channel/Contract.d.ts +8 -7
- package/types-legacy/ts4.5/channel/Spend.d.ts +3 -1
- package/types-legacy/ts4.5/contract/Contract.d.ts +21 -46
- package/types-legacy/ts4.5/contract/compiler/Base.d.ts +81 -0
- package/types-legacy/ts4.5/contract/compiler/Cli.d.ts +23 -0
- package/types-legacy/ts4.5/contract/compiler/Http.d.ts +32 -0
- package/types-legacy/ts4.5/contract/compiler/HttpNode.d.ts +17 -0
- package/types-legacy/ts4.5/contract/compiler/getFileSystem.d.ts +6 -0
- package/types-legacy/ts4.5/contract/ga.d.ts +5 -4
- package/types-legacy/ts4.5/index-browser.d.ts +39 -0
- package/types-legacy/ts4.5/index.d.ts +4 -38
- package/types-legacy/ts4.5/tx/builder/constants.d.ts +28 -1
- package/types-legacy/ts4.5/tx/builder/field-types/abi-version.d.ts +10 -0
- package/types-legacy/ts4.5/tx/builder/field-types/address.d.ts +11 -12
- package/types-legacy/ts4.5/tx/builder/field-types/array.d.ts +7 -0
- package/types-legacy/ts4.5/tx/builder/field-types/boolean.d.ts +6 -0
- package/types-legacy/ts4.5/tx/builder/field-types/coin-amount.d.ts +1 -1
- package/types-legacy/ts4.5/tx/builder/field-types/ct-version.d.ts +42 -0
- package/types-legacy/ts4.5/tx/builder/field-types/deposit.d.ts +1 -1
- package/types-legacy/ts4.5/tx/builder/field-types/encoded.d.ts +6 -0
- package/types-legacy/ts4.5/tx/builder/field-types/entry.d.ts +11 -0
- package/types-legacy/ts4.5/tx/builder/field-types/enumeration.d.ts +5 -3
- package/types-legacy/ts4.5/tx/builder/field-types/fee.d.ts +10 -7
- package/types-legacy/ts4.5/tx/builder/field-types/gas-limit.d.ts +5 -2
- package/types-legacy/ts4.5/tx/builder/field-types/gas-price.d.ts +1 -1
- package/types-legacy/ts4.5/tx/builder/field-types/index.d.ts +72 -28
- package/types-legacy/ts4.5/tx/builder/field-types/mptree.d.ts +43 -0
- package/types-legacy/ts4.5/tx/builder/field-types/name-fee.d.ts +1 -2
- package/types-legacy/ts4.5/tx/builder/field-types/raw.d.ts +6 -0
- package/types-legacy/ts4.5/tx/builder/field-types/short-u-int-const.d.ts +5 -0
- package/types-legacy/ts4.5/tx/builder/field-types/string.d.ts +6 -0
- package/types-legacy/ts4.5/tx/builder/field-types/u-int.d.ts +1 -2
- package/types-legacy/ts4.5/tx/builder/index.d.ts +11 -29
- package/types-legacy/ts4.5/tx/builder/schema.d.ts +2380 -668
- package/types-legacy/ts4.5/tx/index.d.ts +5 -20
- package/types-legacy/ts4.5/tx/validator.d.ts +3 -5
- package/types-legacy/ts4.5/utils/errors.d.ts +3 -8
- package/types-legacy/ts4.5/utils/other.d.ts +1 -1
- package/es/contract/CompilerHttp.d.ts +0 -18
- package/es/contract/CompilerHttp.mjs.map +0 -1
- package/es/tx/builder/field-types/addresses.d.ts +0 -6
- package/es/tx/builder/field-types/addresses.mjs +0 -13
- package/es/tx/builder/field-types/addresses.mjs.map +0 -1
- package/es/utils/mptree.d.ts +0 -26
- package/es/utils/mptree.mjs +0 -143
- package/es/utils/mptree.mjs.map +0 -1
- package/src/contract/CompilerHttp.ts +0 -67
- package/src/tx/builder/field-types/addresses.ts +0 -18
- package/src/utils/mptree.ts +0 -145
- package/types-legacy/ts4.2/contract/CompilerHttp.d.ts +0 -18
- package/types-legacy/ts4.2/tx/builder/field-types/addresses.d.ts +0 -6
- package/types-legacy/ts4.2/utils/mptree.d.ts +0 -32
- package/types-legacy/ts4.5/contract/CompilerHttp.d.ts +0 -18
- package/types-legacy/ts4.5/tx/builder/field-types/addresses.d.ts +0 -6
- package/types-legacy/ts4.5/utils/mptree.d.ts +0 -32
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { encode as rlpEncode, Input } from 'rlp';
|
|
2
|
+
import { Tag } from '../constants';
|
|
3
|
+
import { hash } from '../../../utils/crypto';
|
|
4
|
+
import {
|
|
5
|
+
MerkleTreeHashMismatchError,
|
|
6
|
+
MissingNodeInTreeError,
|
|
7
|
+
UnknownPathNibbleError,
|
|
8
|
+
UnexpectedTsError,
|
|
9
|
+
UnknownNodeLengthError,
|
|
10
|
+
InternalError,
|
|
11
|
+
} from '../../../utils/errors';
|
|
12
|
+
import {
|
|
13
|
+
decode, encode, Encoded, Encoding,
|
|
14
|
+
} from '../../../utils/encoder';
|
|
15
|
+
import type { unpackTx } from '..';
|
|
16
|
+
|
|
17
|
+
enum NodeType {
|
|
18
|
+
Branch,
|
|
19
|
+
Extension,
|
|
20
|
+
Leaf,
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
type MPTreeBinary = [Buffer, Array<[Buffer, Buffer[]]>];
|
|
24
|
+
|
|
25
|
+
class MPTree<E extends Encoding, T extends Tag> {
|
|
26
|
+
readonly #rootHash: string;
|
|
27
|
+
|
|
28
|
+
#isComplete = true;
|
|
29
|
+
|
|
30
|
+
get isComplete(): boolean {
|
|
31
|
+
return this.#isComplete;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
readonly #nodes: { [key: string]: Buffer[] };
|
|
35
|
+
|
|
36
|
+
readonly #encoding: E;
|
|
37
|
+
|
|
38
|
+
readonly #tag: T;
|
|
39
|
+
|
|
40
|
+
readonly #unpackTx: typeof unpackTx;
|
|
41
|
+
|
|
42
|
+
static #nodeHash(node: Input): string {
|
|
43
|
+
return Buffer.from(hash(rlpEncode(node))).toString('hex');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Deserialize Merkle Patricia Tree
|
|
48
|
+
* @param binary - Binary
|
|
49
|
+
* @param tag - Tag to use to decode value
|
|
50
|
+
* @param unpTx - Implementation of unpackTx use to decode values
|
|
51
|
+
* @returns Merkle Patricia Tree
|
|
52
|
+
*/
|
|
53
|
+
constructor(binary: MPTreeBinary, encoding: E, tag: T, unpTx: typeof unpackTx) {
|
|
54
|
+
this.#encoding = encoding;
|
|
55
|
+
this.#tag = tag;
|
|
56
|
+
this.#unpackTx = unpTx;
|
|
57
|
+
this.#rootHash = binary[0].toString('hex');
|
|
58
|
+
this.#nodes = Object.fromEntries(
|
|
59
|
+
binary[1].map((node) => [node[0].toString('hex'), node[1]]),
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
if (this.#nodes[this.#rootHash] == null) {
|
|
63
|
+
if (Object.keys(this.#nodes).length !== 0) {
|
|
64
|
+
throw new MissingNodeInTreeError('Can\'t find a node by root hash');
|
|
65
|
+
}
|
|
66
|
+
this.#isComplete = false;
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
Object.entries(this.#nodes).forEach(([key, node]) => {
|
|
70
|
+
if (MPTree.#nodeHash(node) !== key) throw new MerkleTreeHashMismatchError();
|
|
71
|
+
const { type } = MPTree.#parseNode(node);
|
|
72
|
+
switch (type) {
|
|
73
|
+
case NodeType.Branch:
|
|
74
|
+
node
|
|
75
|
+
.slice(0, 16)
|
|
76
|
+
.filter((n) => n.length)
|
|
77
|
+
.forEach((n) => {
|
|
78
|
+
// TODO: enable after resolving https://github.com/aeternity/aeternity/issues/4066
|
|
79
|
+
// if (n.length !== 32) {
|
|
80
|
+
// throw new ArgumentError('MPTree branch item length', 32, n.length);
|
|
81
|
+
// }
|
|
82
|
+
if (this.#nodes[n.toString('hex')] == null) this.#isComplete = false;
|
|
83
|
+
});
|
|
84
|
+
break;
|
|
85
|
+
case NodeType.Extension:
|
|
86
|
+
if (this.#nodes[node[1].toString('hex')] == null) {
|
|
87
|
+
throw new MissingNodeInTreeError('Can\'t find a node by hash in extension node');
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
case NodeType.Leaf:
|
|
91
|
+
break;
|
|
92
|
+
default:
|
|
93
|
+
throw new InternalError(`Unknown MPTree node type: ${type}`);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
isEqual(tree: MPTree<E, T>): boolean {
|
|
99
|
+
return this.#rootHash === tree.#rootHash;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
static #parseNode(node: Buffer[]): { type: NodeType; value?: Buffer; path?: string } {
|
|
103
|
+
switch (node.length) {
|
|
104
|
+
case 17:
|
|
105
|
+
return {
|
|
106
|
+
type: NodeType.Branch,
|
|
107
|
+
...node[16].length !== 0 && { value: node[16] },
|
|
108
|
+
};
|
|
109
|
+
case 2: {
|
|
110
|
+
const nibble = node[0][0] >> 4; // eslint-disable-line no-bitwise
|
|
111
|
+
if (nibble > 3) throw new UnknownPathNibbleError(nibble);
|
|
112
|
+
const type = nibble <= 1 ? NodeType.Extension : NodeType.Leaf;
|
|
113
|
+
const slice = [0, 2].includes(nibble) ? 2 : 1;
|
|
114
|
+
return {
|
|
115
|
+
type,
|
|
116
|
+
...type === NodeType.Leaf && { value: node[1] },
|
|
117
|
+
path: node[0].toString('hex').slice(slice),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
default:
|
|
121
|
+
throw new UnknownNodeLengthError(node.length);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Serialize Merkle Patricia Tree
|
|
127
|
+
* @returns Binary
|
|
128
|
+
*/
|
|
129
|
+
serialize(): MPTreeBinary {
|
|
130
|
+
return [
|
|
131
|
+
Buffer.from(this.#rootHash, 'hex'),
|
|
132
|
+
Object.entries(this.#nodes).map(([mptHash, value]) => ([
|
|
133
|
+
Buffer.from(mptHash, 'hex'),
|
|
134
|
+
value,
|
|
135
|
+
])),
|
|
136
|
+
];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Retrieve value from Merkle Patricia Tree
|
|
141
|
+
* @param _key - The key of the element to retrieve
|
|
142
|
+
* @returns Value associated to the specified key
|
|
143
|
+
*/
|
|
144
|
+
#getRaw(_key: string): Buffer | undefined {
|
|
145
|
+
let searchFrom = this.#rootHash;
|
|
146
|
+
let key = _key;
|
|
147
|
+
while (true) { // eslint-disable-line no-constant-condition
|
|
148
|
+
const node = this.#nodes[searchFrom];
|
|
149
|
+
if (node == null) {
|
|
150
|
+
if (!this.isComplete) return undefined;
|
|
151
|
+
throw new InternalError('Can\'t find node in complete tree');
|
|
152
|
+
}
|
|
153
|
+
const { type, value, path } = MPTree.#parseNode(node);
|
|
154
|
+
switch (type) {
|
|
155
|
+
case NodeType.Branch:
|
|
156
|
+
if (key.length === 0) return value;
|
|
157
|
+
searchFrom = node[+`0x${key[0]}`].toString('hex');
|
|
158
|
+
key = key.substring(1);
|
|
159
|
+
break;
|
|
160
|
+
case NodeType.Extension:
|
|
161
|
+
if (key.substring(0, path?.length) !== path) return undefined;
|
|
162
|
+
searchFrom = node[1].toString('hex');
|
|
163
|
+
key = key.substring(path.length);
|
|
164
|
+
break;
|
|
165
|
+
case NodeType.Leaf:
|
|
166
|
+
if (path !== key) return undefined;
|
|
167
|
+
return value;
|
|
168
|
+
default:
|
|
169
|
+
throw new InternalError(`Unknown MPTree node type: ${type}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Retrieve value from Merkle Patricia Tree
|
|
176
|
+
* @param key - The key of the element to retrieve
|
|
177
|
+
* @returns Value associated to the specified key
|
|
178
|
+
*/
|
|
179
|
+
get(key: Encoded.Generic<E>): ReturnType<typeof unpackTx<T>> | undefined {
|
|
180
|
+
const d = this.#getRaw(decode(key).toString('hex'));
|
|
181
|
+
if (d == null) return d;
|
|
182
|
+
return this.#unpackTx(encode(d, Encoding.Transaction), this.#tag);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
#entriesRaw(): Array<[string, Buffer]> {
|
|
186
|
+
const entries: Array<[string, Buffer]> = [];
|
|
187
|
+
const rec = (searchFrom: string, key: string): void => {
|
|
188
|
+
const node = this.#nodes[searchFrom];
|
|
189
|
+
if (node == null) {
|
|
190
|
+
if (!this.isComplete) return;
|
|
191
|
+
throw new InternalError('Can\'t find node in complete tree');
|
|
192
|
+
}
|
|
193
|
+
const { type, value, path } = MPTree.#parseNode(node);
|
|
194
|
+
switch (type) {
|
|
195
|
+
case NodeType.Branch:
|
|
196
|
+
node
|
|
197
|
+
.slice(0, 16)
|
|
198
|
+
.map((t, idx): [typeof t, number] => [t, idx])
|
|
199
|
+
.filter(([t]) => t.length)
|
|
200
|
+
.forEach(([t, idx]) => rec(t.toString('hex'), key + idx.toString(16)));
|
|
201
|
+
if (value != null) entries.push([key, value]);
|
|
202
|
+
break;
|
|
203
|
+
case NodeType.Extension:
|
|
204
|
+
rec(node[1].toString('hex'), key + path);
|
|
205
|
+
break;
|
|
206
|
+
case NodeType.Leaf:
|
|
207
|
+
if (value == null) throw new UnexpectedTsError();
|
|
208
|
+
entries.push([key + path, value]);
|
|
209
|
+
break;
|
|
210
|
+
default:
|
|
211
|
+
throw new InternalError(`Unknown MPTree node type: ${type}`);
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
rec(this.#rootHash, '');
|
|
215
|
+
return entries;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
toObject(): Record<Encoded.Any, ReturnType<typeof unpackTx<T>>> {
|
|
219
|
+
return Object.fromEntries(this.#entriesRaw()
|
|
220
|
+
// TODO: remove after resolving https://github.com/aeternity/aeternity/issues/4066
|
|
221
|
+
.filter(([k]) => this.#encoding !== Encoding.ContractAddress || k.length !== 66)
|
|
222
|
+
.map(([k, v]) => [
|
|
223
|
+
encode(Buffer.from(k, 'hex'), this.#encoding),
|
|
224
|
+
this.#unpackTx(encode(v, Encoding.Transaction), this.#tag),
|
|
225
|
+
]));
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export default function genMPTreeField<E extends Encoding, T extends Tag>(encoding: E, tag: T): {
|
|
230
|
+
serialize: (value: MPTree<E, T>) => MPTreeBinary;
|
|
231
|
+
deserialize: (value: MPTreeBinary, o: { unpackTx: typeof unpackTx }) => MPTree<E, T>;
|
|
232
|
+
} {
|
|
233
|
+
return {
|
|
234
|
+
serialize(value) {
|
|
235
|
+
return value.serialize();
|
|
236
|
+
},
|
|
237
|
+
|
|
238
|
+
deserialize(value, { unpackTx }) {
|
|
239
|
+
return new MPTree(value, encoding, tag, unpackTx);
|
|
240
|
+
},
|
|
241
|
+
};
|
|
242
|
+
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import BigNumber from 'bignumber.js';
|
|
2
2
|
import { getMinimumNameFee } from '../helpers';
|
|
3
3
|
import { InsufficientNameFeeError } from '../../../utils/errors';
|
|
4
|
-
import { Int } from './u-int';
|
|
5
4
|
import coinAmount from './coin-amount';
|
|
6
|
-
import { AensName } from '../constants';
|
|
5
|
+
import { AensName, Int } from '../constants';
|
|
7
6
|
|
|
8
7
|
export default {
|
|
9
8
|
...coinAmount,
|
|
@@ -3,7 +3,7 @@ import { produceNameId, isNameValid } from '../helpers';
|
|
|
3
3
|
import address from './address';
|
|
4
4
|
import { Encoded, Encoding } from '../../../utils/encoder';
|
|
5
5
|
|
|
6
|
-
const addressName = address
|
|
6
|
+
const addressName = address(Encoding.Name);
|
|
7
7
|
|
|
8
8
|
export default {
|
|
9
9
|
...addressName,
|
|
@@ -2,9 +2,9 @@ import { NamePointer as NamePointerString } from '../../../apis/node';
|
|
|
2
2
|
import { toBytes } from '../../../utils/bytes';
|
|
3
3
|
import { Encoded } from '../../../utils/encoder';
|
|
4
4
|
import { IllegalArgumentError } from '../../../utils/errors';
|
|
5
|
-
import address, { AddressEncodings } from './address';
|
|
5
|
+
import address, { AddressEncodings, idTagToEncoding } from './address';
|
|
6
6
|
|
|
7
|
-
const addressAny = address
|
|
7
|
+
const addressAny = address(...idTagToEncoding);
|
|
8
8
|
|
|
9
9
|
// TODO: remove after fixing node types
|
|
10
10
|
type NamePointer = NamePointerString & {
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ArgumentError } from '../../../utils/errors';
|
|
2
|
+
import shortUInt from './short-u-int';
|
|
3
|
+
|
|
4
|
+
export default function genShortUIntConstField<Value extends number>(value: Value): {
|
|
5
|
+
serialize: (value?: Value) => Buffer;
|
|
6
|
+
deserialize: (value: Buffer) => Value;
|
|
7
|
+
} {
|
|
8
|
+
return {
|
|
9
|
+
serialize(val) {
|
|
10
|
+
if (val != null && val !== value) throw new ArgumentError('ShortUIntConst', value, val);
|
|
11
|
+
return shortUInt.serialize(value);
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
deserialize(buf) {
|
|
15
|
+
const val = shortUInt.deserialize(buf);
|
|
16
|
+
if (val !== value) throw new ArgumentError('ShortUIntConst', value, val);
|
|
17
|
+
return value;
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import BigNumber from 'bignumber.js';
|
|
2
1
|
import { readInt } from '../helpers';
|
|
2
|
+
import { Int } from '../constants';
|
|
3
3
|
import { ArgumentError } from '../../../utils/errors';
|
|
4
4
|
import { toBytes } from '../../../utils/bytes';
|
|
5
5
|
|
|
6
|
-
export type Int = number | string | BigNumber;
|
|
7
|
-
|
|
8
6
|
export default {
|
|
9
7
|
serialize(value: Int): Buffer {
|
|
10
8
|
if (value < 0) throw new ArgumentError('value', 'greater or equal to 0', value);
|