@aeternity/aepp-sdk 11.0.1 → 12.0.0
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/LICENSE +1 -1
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +12 -19
- 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 +1 -1
- package/dist/aepp-sdk.js.map +1 -1
- package/es/AeSdk.d.ts +37 -0
- package/es/AeSdk.mjs +81 -0
- package/es/AeSdk.mjs.map +1 -0
- package/es/AeSdkAepp.d.ts +69 -0
- package/es/AeSdkAepp.mjs +175 -0
- package/es/AeSdkAepp.mjs.map +1 -0
- package/es/AeSdkBase.d.ts +212 -0
- package/es/AeSdkBase.mjs +310 -0
- package/es/AeSdkBase.mjs.map +1 -0
- package/es/AeSdkWallet.d.ts +103 -0
- package/es/AeSdkWallet.mjs +322 -0
- package/es/AeSdkWallet.mjs.map +1 -0
- package/es/Node.d.ts +44 -0
- package/es/Node.mjs +141 -0
- package/es/Node.mjs.map +1 -0
- package/es/account/Base.d.ts +65 -0
- package/es/account/Base.mjs +123 -0
- package/es/account/Base.mjs.map +1 -0
- package/es/account/Memory.d.ts +25 -0
- package/es/account/Memory.mjs +81 -0
- package/es/account/Memory.mjs.map +1 -0
- package/es/account/Rpc.d.ts +27 -0
- package/es/account/Rpc.mjs +79 -0
- package/es/account/Rpc.mjs.map +1 -0
- package/es/aens.d.ts +209 -0
- package/es/aens.mjs +332 -0
- package/es/aens.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
- package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
- package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
- package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
- package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
- package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
- package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
- package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
- package/es/aepp-wallet-communication/schema.d.ts +90 -46
- package/es/aepp-wallet-communication/schema.mjs +214 -0
- package/es/aepp-wallet-communication/schema.mjs.map +1 -0
- package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
- package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
- package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
- package/es/apis/compiler/compiler.d.ts +92 -0
- package/es/apis/compiler/compiler.mjs +576 -0
- package/es/apis/compiler/compiler.mjs.map +1 -0
- package/es/apis/compiler/index.d.ts +2 -0
- package/es/apis/compiler/index.mjs +3 -0
- package/es/apis/compiler/index.mjs.map +1 -0
- package/es/apis/compiler/models/index.d.ts +248 -0
- package/es/apis/compiler/models/index.mjs +48 -0
- package/es/apis/compiler/models/index.mjs.map +1 -0
- package/es/apis/compiler/models/mappers.d.ts +23 -0
- package/es/apis/compiler/models/mappers.mjs +585 -0
- package/es/apis/compiler/models/mappers.mjs.map +1 -0
- package/es/apis/compiler/models/parameters.d.ts +13 -0
- package/es/apis/compiler/models/parameters.mjs +71 -0
- package/es/apis/compiler/models/parameters.mjs.map +1 -0
- package/es/apis/node/index.d.ts +2 -0
- package/es/apis/node/index.mjs +3 -0
- package/es/apis/node/index.mjs.map +1 -0
- package/es/apis/node/models/index.d.ts +1061 -0
- package/es/apis/node/models/index.mjs +2 -0
- package/es/apis/node/models/index.mjs.map +1 -0
- package/es/apis/node/models/mappers.d.ts +95 -0
- package/es/apis/node/models/mappers.mjs +4164 -0
- package/es/apis/node/models/mappers.mjs.map +1 -0
- package/es/apis/node/models/parameters.d.ts +17 -0
- package/es/apis/node/models/parameters.mjs +165 -0
- package/es/apis/node/models/parameters.mjs.map +1 -0
- package/es/apis/node/node.d.ts +215 -0
- package/es/apis/node/node.mjs +1165 -0
- package/es/apis/node/node.mjs.map +1 -0
- package/es/chain.d.ts +220 -0
- package/es/chain.mjs +524 -0
- package/es/chain.mjs.map +1 -0
- package/es/channel/handlers.d.ts +34 -0
- package/es/channel/handlers.mjs +147 -112
- package/es/channel/handlers.mjs.map +1 -1
- package/es/channel/index.d.ts +634 -0
- package/es/channel/index.mjs +898 -900
- package/es/channel/index.mjs.map +1 -1
- package/es/channel/internal.d.ts +100 -0
- package/es/channel/internal.mjs +97 -51
- package/es/channel/internal.mjs.map +1 -1
- package/es/contract/Compiler.d.ts +17 -0
- package/es/contract/Compiler.mjs +67 -0
- package/es/contract/Compiler.mjs.map +1 -0
- package/es/contract/aci.d.ts +125 -0
- package/es/contract/aci.mjs +199 -180
- package/es/contract/aci.mjs.map +1 -1
- package/es/contract/ga.d.ts +68 -0
- package/es/contract/ga.mjs +190 -0
- package/es/contract/ga.mjs.map +1 -0
- package/es/contract/methods.d.ts +68 -0
- package/es/contract/methods.mjs +101 -0
- package/es/contract/methods.mjs.map +1 -0
- package/es/index.d.ts +32 -0
- package/es/index.mjs +32 -40
- package/es/index.mjs.map +1 -1
- package/es/oracle.d.ts +154 -0
- package/es/oracle.mjs +288 -0
- package/es/oracle.mjs.map +1 -0
- package/es/spend.d.ts +61 -0
- package/es/spend.mjs +122 -0
- package/es/spend.mjs.map +1 -0
- package/es/tx/builder/constants.d.ts +41 -0
- package/es/tx/builder/constants.mjs +11 -19
- package/es/tx/builder/constants.mjs.map +1 -1
- package/es/tx/builder/field-types.d.ts +62 -0
- package/es/tx/builder/field-types.mjs +62 -10
- package/es/tx/builder/field-types.mjs.map +1 -1
- package/es/tx/builder/helpers.d.ts +131 -0
- package/es/tx/builder/helpers.mjs +71 -169
- package/es/tx/builder/helpers.mjs.map +1 -1
- package/es/tx/builder/index.d.ts +75 -0
- package/es/tx/builder/index.mjs +141 -323
- package/es/tx/builder/index.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +350 -0
- package/es/tx/builder/schema.mjs +173 -510
- package/es/tx/builder/schema.mjs.map +1 -1
- package/es/tx/index.d.ts +63 -0
- package/es/tx/index.mjs +171 -265
- package/es/tx/index.mjs.map +1 -1
- package/es/tx/min-fee.d.ts +20 -0
- package/es/tx/min-fee.mjs +148 -0
- package/es/tx/min-fee.mjs.map +1 -0
- package/es/tx/validator.d.ts +19 -0
- package/es/tx/validator.mjs +64 -71
- package/es/tx/validator.mjs.map +1 -1
- package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
- package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
- package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
- package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
- package/es/typings/bip32-path/index.d.mjs +2 -0
- package/es/typings/bip32-path/index.d.mjs.map +1 -0
- package/es/typings/blakejs/index.d.mjs.map +1 -1
- package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
- package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
- package/es/utils/amount-formatter.d.ts +42 -0
- package/es/utils/amount-formatter.mjs +28 -41
- package/es/utils/amount-formatter.mjs.map +1 -1
- package/es/utils/autorest.d.ts +6 -0
- package/es/utils/autorest.mjs +97 -0
- package/es/utils/autorest.mjs.map +1 -0
- package/es/utils/bignumber.d.ts +13 -0
- package/es/utils/bignumber.mjs +10 -8
- package/es/utils/bignumber.mjs.map +1 -1
- package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
- package/es/utils/bytes.mjs +10 -14
- package/es/utils/bytes.mjs.map +1 -1
- package/es/utils/crypto.d.ts +103 -0
- package/es/utils/crypto.mjs +60 -68
- package/es/utils/crypto.mjs.map +1 -1
- package/es/utils/encoder.d.ts +26 -0
- package/es/utils/encoder.mjs +47 -51
- package/es/utils/encoder.mjs.map +1 -1
- package/es/{errors.d.ts → utils/errors.d.ts} +254 -57
- package/es/utils/errors.mjs +318 -125
- package/es/utils/errors.mjs.map +1 -1
- package/es/utils/hd-wallet.d.ts +34 -0
- package/es/utils/hd-wallet.mjs +27 -16
- package/es/utils/hd-wallet.mjs.map +1 -1
- package/es/utils/json-big.d.ts +5 -0
- package/es/utils/json-big.mjs +10 -14
- package/es/utils/json-big.mjs.map +1 -1
- package/es/utils/keystore.d.ts +51 -0
- package/es/utils/keystore.mjs +98 -193
- package/es/utils/keystore.mjs.map +1 -1
- package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
- package/es/utils/mptree.mjs +13 -14
- package/es/utils/mptree.mjs.map +1 -1
- package/es/utils/other.d.ts +14 -0
- package/es/utils/other.mjs +21 -36
- package/es/utils/other.mjs.map +1 -1
- package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
- package/es/utils/semver-satisfies.mjs.map +1 -1
- package/es/utils/string.d.ts +24 -0
- package/es/utils/string.mjs +8 -10
- package/es/utils/string.mjs.map +1 -1
- package/package.json +49 -39
- package/src/AeSdk.ts +65 -0
- package/src/AeSdkAepp.ts +167 -0
- package/src/AeSdkBase.ts +320 -0
- package/src/AeSdkWallet.ts +332 -0
- package/src/Node.ts +167 -0
- package/src/account/Base.ts +114 -0
- package/src/account/Memory.ts +83 -0
- package/src/account/Rpc.ts +67 -0
- package/src/aens.ts +391 -0
- package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
- package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
- package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
- package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +16 -17
- package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
- package/src/aepp-wallet-communication/rpc/types.ts +66 -0
- package/src/aepp-wallet-communication/schema.ts +181 -0
- package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
- package/src/apis/compiler/code-model-v4.yaml +2649 -0
- package/src/apis/compiler/compiler.ts +585 -0
- package/src/apis/compiler/index.ts +2 -0
- package/src/apis/compiler/models/index.ts +301 -0
- package/src/apis/compiler/models/mappers.ts +583 -0
- package/src/apis/compiler/models/parameters.ts +93 -0
- package/src/apis/node/code-model-v4.yaml +10046 -0
- package/src/apis/node/index.ts +2 -0
- package/src/apis/node/models/index.ts +1253 -0
- package/src/apis/node/models/mappers.ts +4278 -0
- package/src/apis/node/models/parameters.ts +188 -0
- package/src/apis/node/node.ts +1299 -0
- package/src/chain.ts +444 -0
- package/src/channel/{handlers.js → handlers.ts} +220 -128
- package/src/channel/index.ts +991 -0
- package/src/channel/internal.ts +345 -0
- package/src/contract/Compiler.ts +66 -0
- package/src/contract/aci.ts +529 -0
- package/src/contract/ga.ts +178 -0
- package/src/contract/methods.ts +118 -0
- package/src/index.ts +51 -0
- package/src/oracle.ts +342 -0
- package/src/spend.ts +152 -0
- package/src/tx/builder/{constants.js → constants.ts} +12 -16
- package/src/tx/builder/field-types.ts +111 -0
- package/src/tx/builder/helpers.ts +253 -0
- package/src/tx/builder/index.ts +394 -0
- package/src/tx/builder/schema.ts +771 -0
- package/src/tx/index.ts +199 -0
- package/src/tx/min-fee.ts +136 -0
- package/src/tx/validator.ts +226 -0
- package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
- package/src/typings/@aeternity__uuid/index.d.ts +3 -0
- package/src/typings/bip32-path/index.d.ts +33 -0
- package/src/typings/tweetnacl-auth/index.d.ts +14 -0
- package/src/utils/amount-formatter.ts +29 -42
- package/src/utils/autorest.ts +90 -0
- package/src/utils/bignumber.ts +9 -11
- package/src/utils/bytes.ts +12 -14
- package/src/utils/crypto.ts +217 -0
- package/src/utils/encoder.ts +52 -55
- package/src/utils/errors.ts +268 -134
- package/src/utils/hd-wallet.ts +134 -0
- package/src/utils/json-big.ts +26 -0
- package/src/utils/keystore.ts +179 -0
- package/src/utils/mptree.ts +14 -14
- package/src/utils/other.ts +28 -43
- package/src/utils/string.ts +8 -10
- package/es/account/base.mjs +0 -179
- package/es/account/base.mjs.map +0 -1
- package/es/account/memory.mjs +0 -99
- package/es/account/memory.mjs.map +0 -1
- package/es/account/multiple.mjs +0 -179
- package/es/account/multiple.mjs.map +0 -1
- package/es/ae/aens.mjs +0 -404
- package/es/ae/aens.mjs.map +0 -1
- package/es/ae/aepp.mjs +0 -45
- package/es/ae/aepp.mjs.map +0 -1
- package/es/ae/contract.mjs +0 -159
- package/es/ae/contract.mjs.map +0 -1
- package/es/ae/index.mjs +0 -207
- package/es/ae/index.mjs.map +0 -1
- package/es/ae/oracle.mjs +0 -339
- package/es/ae/oracle.mjs.map +0 -1
- package/es/ae/universal.mjs +0 -45
- package/es/ae/universal.mjs.map +0 -1
- package/es/ae/wallet.mjs +0 -50
- package/es/ae/wallet.mjs.map +0 -1
- package/es/amount-formatter.d.ts +0 -58
- package/es/bignumber.d.ts +0 -18
- package/es/chain/index.mjs +0 -272
- package/es/chain/index.mjs.map +0 -1
- package/es/chain/node.mjs +0 -442
- package/es/chain/node.mjs.map +0 -1
- package/es/contract/compiler.mjs +0 -115
- package/es/contract/compiler.mjs.map +0 -1
- package/es/contract/ga/helpers.mjs +0 -30
- package/es/contract/ga/helpers.mjs.map +0 -1
- package/es/contract/ga/index.mjs +0 -178
- package/es/contract/ga/index.mjs.map +0 -1
- package/es/crypto-ts.d.ts +0 -9
- package/es/encoder.d.ts +0 -26
- package/es/node-pool/index.mjs +0 -188
- package/es/node-pool/index.mjs.map +0 -1
- package/es/node.mjs +0 -133
- package/es/node.mjs.map +0 -1
- package/es/other.d.ts +0 -31
- package/es/string.d.ts +0 -26
- package/es/tx/tx-object.mjs +0 -283
- package/es/tx/tx-object.mjs.map +0 -1
- package/es/tx/tx.mjs +0 -938
- package/es/tx/tx.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
- package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
- package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
- package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
- package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
- package/es/utils/async-init.mjs +0 -64
- package/es/utils/async-init.mjs.map +0 -1
- package/es/utils/crypto-ts.mjs.map +0 -1
- package/es/utils/swagger.mjs +0 -164
- package/es/utils/swagger.mjs.map +0 -1
- package/src/account/base.js +0 -153
- package/src/account/memory.js +0 -83
- package/src/account/multiple.js +0 -162
- package/src/ae/aens.js +0 -361
- package/src/ae/aepp.js +0 -45
- package/src/ae/contract.js +0 -148
- package/src/ae/index.js +0 -168
- package/src/ae/oracle.js +0 -311
- package/src/ae/universal.js +0 -47
- package/src/ae/wallet.js +0 -50
- package/src/chain/index.js +0 -269
- package/src/chain/node.js +0 -320
- package/src/channel/index.js +0 -903
- package/src/channel/internal.js +0 -236
- package/src/contract/aci.js +0 -376
- package/src/contract/compiler.js +0 -100
- package/src/contract/ga/helpers.js +0 -19
- package/src/contract/ga/index.js +0 -150
- package/src/index.js +0 -89
- package/src/node-pool/index.js +0 -172
- package/src/node.js +0 -116
- package/src/tx/builder/field-types.js +0 -61
- package/src/tx/builder/helpers.js +0 -334
- package/src/tx/builder/index.js +0 -465
- package/src/tx/builder/schema.js +0 -1100
- package/src/tx/index.js +0 -301
- package/src/tx/tx-object.js +0 -187
- package/src/tx/tx.js +0 -631
- package/src/tx/validator.js +0 -181
- package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
- package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
- package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
- package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
- package/src/utils/aepp-wallet-communication/helpers.js +0 -60
- package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
- package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
- package/src/utils/aepp-wallet-communication/schema.ts +0 -80
- package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
- package/src/utils/async-init.js +0 -45
- package/src/utils/crypto.js +0 -219
- package/src/utils/hd-wallet.js +0 -100
- package/src/utils/json-big.js +0 -26
- package/src/utils/keystore.js +0 -219
- package/src/utils/swagger.js +0 -156
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
import { EncodedData, EncodingType } from './../../utils/encoder'
|
|
2
|
+
import BigNumber from 'bignumber.js'
|
|
3
|
+
import { decode as rlpDecode, encode as rlpEncode, NestedUint8Array } from 'rlp'
|
|
4
|
+
import { AE_AMOUNT_FORMATS, formatAmount } from '../../utils/amount-formatter'
|
|
5
|
+
import { hash } from '../../utils/crypto'
|
|
6
|
+
import { Field } from './field-types'
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
FIELD_TYPES,
|
|
10
|
+
RawTxObject,
|
|
11
|
+
TxField,
|
|
12
|
+
TxTypeSchemas,
|
|
13
|
+
TxParamsCommon,
|
|
14
|
+
TX_SCHEMA,
|
|
15
|
+
TX_TYPE,
|
|
16
|
+
TxSchema
|
|
17
|
+
} from './schema'
|
|
18
|
+
import {
|
|
19
|
+
readInt,
|
|
20
|
+
readId,
|
|
21
|
+
readPointers,
|
|
22
|
+
writeId,
|
|
23
|
+
writeInt,
|
|
24
|
+
buildPointers,
|
|
25
|
+
encode,
|
|
26
|
+
decode,
|
|
27
|
+
Pointer,
|
|
28
|
+
buildContractId
|
|
29
|
+
} from './helpers'
|
|
30
|
+
import { toBytes } from '../../utils/bytes'
|
|
31
|
+
import MPTree, { MPTreeBinary } from '../../utils/mptree'
|
|
32
|
+
import { ArgumentError, InvalidTxParamsError, SchemaNotFoundError, DecodeError } from '../../utils/errors'
|
|
33
|
+
import { isKeyOfObject } from '../../utils/other'
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* JavaScript-based Transaction builder
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
// SERIALIZE AND DESERIALIZE PART
|
|
40
|
+
function deserializeField (
|
|
41
|
+
value: any,
|
|
42
|
+
type: FIELD_TYPES | typeof Field,
|
|
43
|
+
prefix?: EncodingType | EncodingType[]
|
|
44
|
+
): any {
|
|
45
|
+
if (value == null) return ''
|
|
46
|
+
switch (type) {
|
|
47
|
+
case FIELD_TYPES.ctVersion: {
|
|
48
|
+
const [vm, , abi] = value
|
|
49
|
+
return {
|
|
50
|
+
vmVersion: readInt(Buffer.from([vm])),
|
|
51
|
+
abiVersion: readInt(Buffer.from([abi]))
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
case FIELD_TYPES.amount:
|
|
55
|
+
case FIELD_TYPES.int:
|
|
56
|
+
case FIELD_TYPES.abiVersion:
|
|
57
|
+
case FIELD_TYPES.ttlType:
|
|
58
|
+
return readInt(value)
|
|
59
|
+
case FIELD_TYPES.shortInt:
|
|
60
|
+
return +readInt(value)
|
|
61
|
+
case FIELD_TYPES.id:
|
|
62
|
+
return readId(value)
|
|
63
|
+
case FIELD_TYPES.ids:
|
|
64
|
+
return value.map(readId)
|
|
65
|
+
case FIELD_TYPES.bool:
|
|
66
|
+
return value[0] === 1
|
|
67
|
+
case FIELD_TYPES.binary:
|
|
68
|
+
return encode(value, prefix as EncodingType)
|
|
69
|
+
case FIELD_TYPES.stateTree:
|
|
70
|
+
return encode(value, 'ss')
|
|
71
|
+
case FIELD_TYPES.string:
|
|
72
|
+
return value.toString()
|
|
73
|
+
case FIELD_TYPES.payload:
|
|
74
|
+
return encode(value, 'ba')
|
|
75
|
+
case FIELD_TYPES.pointers:
|
|
76
|
+
return readPointers(value)
|
|
77
|
+
case FIELD_TYPES.rlpBinary:
|
|
78
|
+
return unpackTx(encode(value, 'tx'))
|
|
79
|
+
case FIELD_TYPES.rlpBinaries:
|
|
80
|
+
return value.map((v: Buffer) => unpackTx(encode(v, 'tx')))
|
|
81
|
+
case FIELD_TYPES.rawBinary:
|
|
82
|
+
return value
|
|
83
|
+
case FIELD_TYPES.hex:
|
|
84
|
+
return value.toString('hex')
|
|
85
|
+
case FIELD_TYPES.offChainUpdates:
|
|
86
|
+
return value.map((v: Buffer) => unpackTx(encode(v, 'tx')))
|
|
87
|
+
case FIELD_TYPES.callStack:
|
|
88
|
+
// TODO: fix this
|
|
89
|
+
return [readInt(value)]
|
|
90
|
+
case FIELD_TYPES.mptrees:
|
|
91
|
+
return value.map((t: MPTreeBinary) => new MPTree(t))
|
|
92
|
+
case FIELD_TYPES.callReturnType:
|
|
93
|
+
switch (readInt(value)) {
|
|
94
|
+
case '0':
|
|
95
|
+
return 'ok'
|
|
96
|
+
case '1':
|
|
97
|
+
return 'error'
|
|
98
|
+
case '2':
|
|
99
|
+
return 'revert'
|
|
100
|
+
default:
|
|
101
|
+
return value
|
|
102
|
+
}
|
|
103
|
+
case FIELD_TYPES.sophiaCodeTypeInfo:
|
|
104
|
+
return value.reduce(
|
|
105
|
+
(acc: object, [funHash, fnName, argType, outType]: [
|
|
106
|
+
funHash: Buffer,
|
|
107
|
+
fnName: string,
|
|
108
|
+
argType: string,
|
|
109
|
+
outType: string
|
|
110
|
+
]) => ({
|
|
111
|
+
...acc,
|
|
112
|
+
[fnName.toString()]: { funHash, argType, outType }
|
|
113
|
+
}),
|
|
114
|
+
{}
|
|
115
|
+
)
|
|
116
|
+
default:
|
|
117
|
+
if (type instanceof Object && 'deserialize' in type) return type.deserialize(value)
|
|
118
|
+
return value
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function serializeField (
|
|
123
|
+
value: any, type: FIELD_TYPES | typeof Field, params: any
|
|
124
|
+
): any {
|
|
125
|
+
switch (type) {
|
|
126
|
+
case FIELD_TYPES.amount:
|
|
127
|
+
case FIELD_TYPES.int:
|
|
128
|
+
case FIELD_TYPES.shortInt:
|
|
129
|
+
case FIELD_TYPES.abiVersion:
|
|
130
|
+
case FIELD_TYPES.ttlType:
|
|
131
|
+
return writeInt(value)
|
|
132
|
+
case FIELD_TYPES.id:
|
|
133
|
+
return writeId(value)
|
|
134
|
+
case FIELD_TYPES.ids:
|
|
135
|
+
return value.map(writeId)
|
|
136
|
+
case FIELD_TYPES.bool:
|
|
137
|
+
return Buffer.from([(value === true) ? 1 : 0])
|
|
138
|
+
case FIELD_TYPES.binary:
|
|
139
|
+
return decode(value)
|
|
140
|
+
case FIELD_TYPES.stateTree:
|
|
141
|
+
return decode(value)
|
|
142
|
+
case FIELD_TYPES.hex:
|
|
143
|
+
return Buffer.from(value, 'hex')
|
|
144
|
+
case FIELD_TYPES.signatures:
|
|
145
|
+
return value.map(Buffer.from)
|
|
146
|
+
case FIELD_TYPES.payload:
|
|
147
|
+
return typeof value === 'string' && value.split('_')[0] === 'ba'
|
|
148
|
+
? decode(value as EncodedData<'ba'>)
|
|
149
|
+
: toBytes(value)
|
|
150
|
+
case FIELD_TYPES.string:
|
|
151
|
+
return toBytes(value)
|
|
152
|
+
case FIELD_TYPES.pointers:
|
|
153
|
+
return buildPointers(value)
|
|
154
|
+
case FIELD_TYPES.rlpBinary:
|
|
155
|
+
return value.rlpEncoded ?? value
|
|
156
|
+
case FIELD_TYPES.mptrees:
|
|
157
|
+
return value.map((t: typeof Field) => t.serialize(''))
|
|
158
|
+
case FIELD_TYPES.ctVersion:
|
|
159
|
+
return Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)])
|
|
160
|
+
case FIELD_TYPES.callReturnType:
|
|
161
|
+
switch (value) {
|
|
162
|
+
case 'ok': return writeInt(0)
|
|
163
|
+
case 'error': return writeInt(1)
|
|
164
|
+
case 'revert': return writeInt(2)
|
|
165
|
+
default: return value
|
|
166
|
+
}
|
|
167
|
+
default:
|
|
168
|
+
if (type instanceof Object && 'serialize' in type) return type.serialize(value, params)
|
|
169
|
+
return value
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function validateField (
|
|
174
|
+
value: any,
|
|
175
|
+
type: FIELD_TYPES | typeof Field,
|
|
176
|
+
prefix?: EncodingType | EncodingType[]
|
|
177
|
+
): string | undefined {
|
|
178
|
+
// All fields are required
|
|
179
|
+
if (value == null) return 'Field is required'
|
|
180
|
+
|
|
181
|
+
// Validate type of value
|
|
182
|
+
switch (type) {
|
|
183
|
+
case FIELD_TYPES.amount:
|
|
184
|
+
case FIELD_TYPES.int:
|
|
185
|
+
case FIELD_TYPES.shortInt: {
|
|
186
|
+
if (isNaN(value) && !BigNumber.isBigNumber(value)) {
|
|
187
|
+
return `${String(value)} is not of type Number or BigNumber`
|
|
188
|
+
}
|
|
189
|
+
if (new BigNumber(value).lt(0)) return `${String(value)} must be >= 0`
|
|
190
|
+
return
|
|
191
|
+
}
|
|
192
|
+
case FIELD_TYPES.id: {
|
|
193
|
+
const prefixes = Array.isArray(prefix) ? prefix : [prefix]
|
|
194
|
+
if (!prefixes.includes(value.split('_')[0])) {
|
|
195
|
+
if (prefix == null) { return `'${String(value)}' prefix doesn't exist'` }
|
|
196
|
+
return `'${String(value)}' prefix doesn't match expected prefix '${prefix.toString()}'`
|
|
197
|
+
}
|
|
198
|
+
return
|
|
199
|
+
}
|
|
200
|
+
case FIELD_TYPES.ctVersion:
|
|
201
|
+
if (!(Boolean(value.abiVersion) && Boolean(value.vmVersion))) {
|
|
202
|
+
return 'Value must be an object with "vmVersion" and "abiVersion" fields'
|
|
203
|
+
}
|
|
204
|
+
return
|
|
205
|
+
case FIELD_TYPES.pointers:
|
|
206
|
+
if (!Array.isArray(value)) return 'Value must be of type Array'
|
|
207
|
+
if (value.some((p: Pointer) => !(Boolean(p.key) && Boolean(p.id)))) {
|
|
208
|
+
return 'Value must contains only object\'s like \'{key: "account_pubkey", id: "ak_lkamsflkalsdalksdlasdlasdlamd"}\''
|
|
209
|
+
}
|
|
210
|
+
if (value.length > 32) {
|
|
211
|
+
return `Expected 32 pointers or less, got ${value.length} instead`
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function transformParams (
|
|
217
|
+
params: TxParamsCommon,
|
|
218
|
+
schema: TxField[],
|
|
219
|
+
{ denomination }: {denomination?: AE_AMOUNT_FORMATS} = {}
|
|
220
|
+
): any {
|
|
221
|
+
params = schema
|
|
222
|
+
.filter(([, t]) => t === FIELD_TYPES.amount)
|
|
223
|
+
.reduce(
|
|
224
|
+
(params: TxParamsCommon, [key]) => ({
|
|
225
|
+
...params,
|
|
226
|
+
[key]: formatAmount(params[key as keyof TxParamsCommon], { denomination })
|
|
227
|
+
}),
|
|
228
|
+
params
|
|
229
|
+
)
|
|
230
|
+
return params
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Validate transaction params
|
|
235
|
+
* @param params - Object with tx params
|
|
236
|
+
* @param schema - Transaction schema
|
|
237
|
+
* @param excludeKeys - Array of keys to exclude for validation
|
|
238
|
+
* @returns Object with validation errors
|
|
239
|
+
*/
|
|
240
|
+
export function validateParams (
|
|
241
|
+
params: any, schema: TxField[], { excludeKeys = [] }: { excludeKeys: string[] }
|
|
242
|
+
): object {
|
|
243
|
+
return Object.fromEntries(
|
|
244
|
+
schema
|
|
245
|
+
// TODO: allow optional keys in schema
|
|
246
|
+
.filter(([key]) => !excludeKeys.includes(key) &&
|
|
247
|
+
!['payload', 'nameFee', 'deposit', 'gasPrice'].includes(key))
|
|
248
|
+
.map(([key, type, prefix]) => [key, validateField(params[key], type, prefix)])
|
|
249
|
+
.filter(([, message]) => message)
|
|
250
|
+
)
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Unpack binary transaction
|
|
255
|
+
* @param binary - Array with binary transaction field's
|
|
256
|
+
* @param schema - Transaction schema
|
|
257
|
+
* @returns Object with transaction field's
|
|
258
|
+
*/
|
|
259
|
+
export function unpackRawTx<Tx extends TxSchema> (
|
|
260
|
+
binary: Uint8Array | NestedUint8Array,
|
|
261
|
+
schema: TxField[]
|
|
262
|
+
): RawTxObject<Tx> {
|
|
263
|
+
return schema
|
|
264
|
+
.reduce<any>(
|
|
265
|
+
(
|
|
266
|
+
acc,
|
|
267
|
+
[key, fieldType, prefix],
|
|
268
|
+
index
|
|
269
|
+
) => Object.assign(acc, { [key]: deserializeField(binary[index], fieldType, prefix) }),
|
|
270
|
+
{}
|
|
271
|
+
)
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export interface BuiltTx<Tx extends TxSchema, Prefix extends EncodingType> {
|
|
275
|
+
tx: EncodedData<Prefix>
|
|
276
|
+
rlpEncoded: Uint8Array
|
|
277
|
+
binary: Uint8Array
|
|
278
|
+
txObject: RawTxObject<Tx>
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Build transaction hash
|
|
283
|
+
* @param _params - Object with tx params
|
|
284
|
+
* @param type - Transaction type
|
|
285
|
+
* @param options - options
|
|
286
|
+
* @param options.excludeKeys - Array of keys to exclude for validation and build
|
|
287
|
+
* @param options.denomination - Denomination of amounts
|
|
288
|
+
* @param options.prefix - Prefix of transaction
|
|
289
|
+
* @throws {@link InvalidTxParamsError}
|
|
290
|
+
* @returns object
|
|
291
|
+
* @returns object.tx Base64Check transaction hash with 'tx_' prefix
|
|
292
|
+
* @returns object.rlpEncoded rlp encoded transaction
|
|
293
|
+
* @returns object.binary binary transaction
|
|
294
|
+
*/
|
|
295
|
+
export function buildTx<TxType extends TX_TYPE, Prefix> (
|
|
296
|
+
_params: Omit<TxTypeSchemas[TxType], 'tag' | 'VSN'> & { VSN?: number },
|
|
297
|
+
type: TxType,
|
|
298
|
+
{ excludeKeys = [], prefix = 'tx', vsn, denomination = AE_AMOUNT_FORMATS.AETTOS }: {
|
|
299
|
+
excludeKeys?: string[]
|
|
300
|
+
prefix?: EncodingType
|
|
301
|
+
vsn?: number
|
|
302
|
+
denomination?: AE_AMOUNT_FORMATS
|
|
303
|
+
} = {}
|
|
304
|
+
): BuiltTx<TxSchema, Prefix extends EncodingType ? Prefix : 'tx'> {
|
|
305
|
+
const schemas = TX_SCHEMA[type]
|
|
306
|
+
|
|
307
|
+
vsn ??= Math.max(...Object.keys(schemas).map(a => +a))
|
|
308
|
+
if (!isKeyOfObject(vsn, schemas)) throw new SchemaNotFoundError('serialization', TX_TYPE[type], vsn)
|
|
309
|
+
|
|
310
|
+
const schema = schemas[vsn] as unknown as TxField[]
|
|
311
|
+
|
|
312
|
+
let params = _params as TxParamsCommon & { onNode: Node }
|
|
313
|
+
params.VSN = vsn
|
|
314
|
+
params.tag = type
|
|
315
|
+
const filteredSchema = schema.filter(([key]) => !excludeKeys.includes(key))
|
|
316
|
+
|
|
317
|
+
// Transform `amount` type fields to `aettos`
|
|
318
|
+
params = transformParams(params, filteredSchema, { denomination })
|
|
319
|
+
// Validation
|
|
320
|
+
const valid = validateParams(params, schema, { excludeKeys })
|
|
321
|
+
if (Object.keys(valid).length > 0) {
|
|
322
|
+
throw new InvalidTxParamsError('Transaction build error. ' + JSON.stringify(valid))
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
const binary = filteredSchema
|
|
326
|
+
.map(([key, fieldType]: [keyof TxSchema, FIELD_TYPES, EncodingType]) => serializeField(
|
|
327
|
+
params[key], fieldType, params))
|
|
328
|
+
.filter(e => e !== undefined)
|
|
329
|
+
|
|
330
|
+
const rlpEncoded = rlpEncode(binary)
|
|
331
|
+
const tx = encode(rlpEncoded, prefix)
|
|
332
|
+
return {
|
|
333
|
+
tx,
|
|
334
|
+
rlpEncoded,
|
|
335
|
+
binary,
|
|
336
|
+
txObject: unpackRawTx<TxTypeSchemas[TX_TYPE]>(binary, schema)
|
|
337
|
+
} as any
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
export interface TxUnpacked<Tx extends TxSchema> {
|
|
341
|
+
txType: TX_TYPE
|
|
342
|
+
tx: RawTxObject<Tx>
|
|
343
|
+
rlpEncoded: Uint8Array
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Unpack transaction hash
|
|
347
|
+
* @param encodedTx - Transaction to unpack
|
|
348
|
+
* @param txType - Expected transaction type
|
|
349
|
+
* @returns object
|
|
350
|
+
* @returns object.tx Object with transaction param's
|
|
351
|
+
* @returns object.txType Transaction type
|
|
352
|
+
*/
|
|
353
|
+
export function unpackTx<TxType extends TX_TYPE> (
|
|
354
|
+
encodedTx: EncodedData<'tx' | 'pi'>, txType?: TxType
|
|
355
|
+
): TxUnpacked<TxTypeSchemas[TxType]> {
|
|
356
|
+
const rlpEncoded = decode(encodedTx)
|
|
357
|
+
const binary = rlpDecode(rlpEncoded)
|
|
358
|
+
const objId = +readInt(binary[0] as Buffer)
|
|
359
|
+
if (!isKeyOfObject(objId, TX_SCHEMA)) throw new DecodeError(`Unknown transaction tag: ${objId}`)
|
|
360
|
+
if (txType != null && txType !== objId) throw new DecodeError(`Expected transaction to have ${TX_TYPE[txType]} tag, got ${TX_TYPE[objId]} instead`)
|
|
361
|
+
const vsn = +readInt(binary[1] as Buffer)
|
|
362
|
+
if (!isKeyOfObject(vsn, TX_SCHEMA[objId])) throw new SchemaNotFoundError('deserialization', `tag ${objId}`, vsn)
|
|
363
|
+
const schema = TX_SCHEMA[objId][vsn]
|
|
364
|
+
return {
|
|
365
|
+
txType: objId,
|
|
366
|
+
tx: unpackRawTx<TxTypeSchemas[TxType]>(binary, schema),
|
|
367
|
+
rlpEncoded
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Build a transaction hash
|
|
373
|
+
* @param rawTx - base64 or rlp encoded transaction
|
|
374
|
+
* @returns Transaction hash
|
|
375
|
+
*/
|
|
376
|
+
export function buildTxHash (rawTx: EncodedData<'tx'> | Uint8Array): EncodedData<'th'> {
|
|
377
|
+
const data = typeof rawTx === 'string' && rawTx.startsWith('tx_')
|
|
378
|
+
? decode(rawTx)
|
|
379
|
+
: rawTx
|
|
380
|
+
return encode(hash(data), 'th')
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Build a contract public key by contractCreateTx or gaAttach
|
|
385
|
+
* @param contractTx - Transaction
|
|
386
|
+
* @returns Contract public key
|
|
387
|
+
*/
|
|
388
|
+
export function buildContractIdByContractTx (contractTx: EncodedData<'tx'>): EncodedData<'ct'> {
|
|
389
|
+
const { txType, tx } = unpackTx<TX_TYPE.contractCreate | TX_TYPE.gaAttach>(contractTx)
|
|
390
|
+
if (![TX_TYPE.contractCreate, TX_TYPE.gaAttach].includes(txType)) {
|
|
391
|
+
throw new ArgumentError('contractCreateTx', 'a contractCreateTx or gaAttach', txType)
|
|
392
|
+
}
|
|
393
|
+
return buildContractId(tx.ownerId, +tx.nonce)
|
|
394
|
+
}
|