@aeternity/aepp-sdk 12.0.0 → 12.1.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/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -15
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +2 -1
- package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +20764 -1
- package/dist/aepp-sdk.js.map +1 -1
- package/es/AeSdk.d.ts +7 -7
- package/es/AeSdk.mjs.map +1 -1
- package/es/AeSdkAepp.d.ts +4 -3
- package/es/AeSdkAepp.mjs +2 -1
- package/es/AeSdkAepp.mjs.map +1 -1
- package/es/AeSdkBase.d.ts +22 -21
- package/es/AeSdkBase.mjs +25 -21
- package/es/AeSdkBase.mjs.map +1 -1
- package/es/AeSdkWallet.d.ts +4 -3
- package/es/AeSdkWallet.mjs +5 -1
- package/es/AeSdkWallet.mjs.map +1 -1
- package/es/Node.d.ts +7 -10
- package/es/Node.mjs +63 -57
- package/es/Node.mjs.map +1 -1
- package/es/account/Base.d.ts +7 -4
- package/es/account/Base.mjs +3 -3
- package/es/account/Base.mjs.map +1 -1
- package/es/account/Memory.d.ts +5 -4
- package/es/account/Memory.mjs +24 -2
- package/es/account/Memory.mjs.map +1 -1
- package/es/account/Rpc.d.ts +6 -6
- package/es/account/Rpc.mjs +3 -2
- package/es/account/Rpc.mjs.map +1 -1
- package/es/aens.d.ts +27 -14
- package/es/aens.mjs +27 -21
- package/es/aens.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/Browser.d.ts +2 -1
- package/es/aepp-wallet-communication/connection/Browser.mjs +5 -2
- package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +1 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +5 -1
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection-proxy.d.ts +1 -0
- package/es/aepp-wallet-communication/connection-proxy.mjs +1 -0
- package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -1
- package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +1 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs +5 -5
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
- package/es/aepp-wallet-communication/rpc/types.d.ts +8 -8
- package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -1
- package/es/aepp-wallet-communication/schema.d.ts +17 -2
- package/es/aepp-wallet-communication/schema.mjs +54 -17
- package/es/aepp-wallet-communication/schema.mjs.map +1 -1
- package/es/aepp-wallet-communication/wallet-detector.d.ts +2 -1
- package/es/aepp-wallet-communication/wallet-detector.mjs +2 -3
- package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -1
- package/es/apis/node/models/index.d.ts +6 -2
- package/es/apis/node/models/index.mjs.map +1 -1
- package/es/apis/node/models/mappers.mjs +4 -2
- package/es/apis/node/models/mappers.mjs.map +1 -1
- package/es/chain.d.ts +92 -64
- package/es/chain.mjs +190 -154
- package/es/chain.mjs.map +1 -1
- package/es/channel/handlers.d.ts +3 -3
- package/es/channel/handlers.mjs +42 -44
- package/es/channel/handlers.mjs.map +1 -1
- package/es/channel/index.d.ts +43 -52
- package/es/channel/index.mjs +46 -49
- package/es/channel/index.mjs.map +1 -1
- package/es/channel/internal.d.ts +16 -15
- package/es/channel/internal.mjs +67 -62
- package/es/channel/internal.mjs.map +1 -1
- package/es/contract/Compiler.d.ts +1 -0
- package/es/contract/Compiler.mjs +5 -4
- package/es/contract/Compiler.mjs.map +1 -1
- package/es/contract/aci.d.ts +17 -15
- package/es/contract/aci.mjs +58 -45
- package/es/contract/aci.mjs.map +1 -1
- package/es/contract/ga.d.ts +16 -15
- package/es/contract/ga.mjs +12 -7
- package/es/contract/ga.mjs.map +1 -1
- package/es/contract/methods.d.ts +9 -6
- package/es/contract/methods.mjs +9 -6
- package/es/contract/methods.mjs.map +1 -1
- package/es/deprecated/index.d.ts +143 -0
- package/es/deprecated/index.mjs +162 -0
- package/es/deprecated/index.mjs.map +1 -0
- package/es/deprecated/methods.d.ts +18 -0
- package/es/deprecated/methods.mjs +26 -0
- package/es/deprecated/methods.mjs.map +1 -0
- package/es/index.d.ts +4 -1
- package/es/index.mjs +4 -1
- package/es/index.mjs.map +1 -1
- package/es/oracle.d.ts +69 -62
- package/es/oracle.mjs +121 -103
- package/es/oracle.mjs.map +1 -1
- package/es/spend.d.ts +16 -15
- package/es/spend.mjs +19 -30
- package/es/spend.mjs.map +1 -1
- package/es/tx/builder/address.d.ts +25 -0
- package/es/tx/builder/address.mjs +45 -0
- package/es/tx/builder/address.mjs.map +1 -0
- package/es/tx/builder/constants.d.ts +55 -26
- package/es/tx/builder/constants.mjs +60 -38
- package/es/tx/builder/constants.mjs.map +1 -1
- package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
- package/es/tx/builder/field-types/coin-amount.mjs +26 -0
- package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
- package/es/tx/builder/field-types/deposit.d.ts +15 -0
- package/es/tx/builder/field-types/deposit.mjs +19 -0
- package/es/tx/builder/field-types/deposit.mjs.map +1 -0
- package/es/tx/builder/field-types/fee.d.ts +25 -0
- package/es/tx/{min-fee.mjs → builder/field-types/fee.mjs} +62 -60
- package/es/tx/builder/field-types/fee.mjs.map +1 -0
- package/es/tx/builder/field-types/field.d.ts +6 -0
- package/es/tx/builder/field-types/field.mjs +15 -0
- package/es/tx/builder/field-types/field.mjs.map +1 -0
- package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
- package/es/tx/builder/field-types/gas-limit.mjs +33 -0
- package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
- package/es/tx/builder/field-types/gas-price.d.ts +8 -0
- package/es/tx/builder/field-types/gas-price.mjs +18 -0
- package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
- package/es/tx/builder/field-types/index.d.ts +70 -0
- package/es/tx/builder/field-types/index.mjs +25 -0
- package/es/tx/builder/field-types/index.mjs.map +1 -0
- package/es/tx/builder/field-types/name-fee.d.ts +20 -0
- package/es/tx/builder/field-types/name-fee.mjs +24 -0
- package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
- package/es/tx/builder/field-types/name-id.d.ts +14 -0
- package/es/tx/builder/field-types/name-id.mjs +19 -0
- package/es/tx/builder/field-types/name-id.mjs.map +1 -0
- package/es/tx/builder/field-types/name.d.ts +13 -0
- package/es/tx/builder/field-types/name.mjs +18 -0
- package/es/tx/builder/field-types/name.mjs.map +1 -0
- package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
- package/es/tx/builder/field-types/short-u-int.mjs +12 -0
- package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
- package/es/tx/builder/field-types/u-int.d.ts +8 -0
- package/es/tx/builder/field-types/u-int.mjs +14 -0
- package/es/tx/builder/field-types/u-int.mjs.map +1 -0
- package/es/tx/builder/helpers.d.ts +27 -33
- package/es/tx/builder/helpers.mjs +41 -47
- package/es/tx/builder/helpers.mjs.map +1 -1
- package/es/tx/builder/index.d.ts +25 -12
- package/es/tx/builder/index.mjs +74 -83
- package/es/tx/builder/index.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +995 -144
- package/es/tx/builder/schema.mjs +121 -170
- package/es/tx/builder/schema.mjs.map +1 -1
- package/es/tx/index.d.ts +28 -27
- package/es/tx/index.mjs +97 -117
- package/es/tx/index.mjs.map +1 -1
- package/es/tx/validator.d.ts +4 -3
- package/es/tx/validator.mjs +79 -92
- package/es/tx/validator.mjs.map +1 -1
- package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -1
- package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -1
- package/es/typings/bip32-path/index.d.mjs.map +1 -1
- package/es/typings/blakejs/index.d.mjs.map +1 -1
- package/es/typings/sha-js/index.d.mjs +2 -0
- package/es/typings/sha-js/index.d.mjs.map +1 -0
- package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -1
- package/es/utils/amount-formatter.d.ts +9 -9
- package/es/utils/amount-formatter.mjs +17 -17
- package/es/utils/amount-formatter.mjs.map +1 -1
- package/es/utils/autorest.mjs +7 -7
- package/es/utils/autorest.mjs.map +1 -1
- package/es/utils/bignumber.mjs +2 -1
- package/es/utils/bignumber.mjs.map +1 -1
- package/es/utils/bytes.mjs +1 -1
- package/es/utils/bytes.mjs.map +1 -1
- package/es/utils/crypto.d.ts +8 -23
- package/es/utils/crypto.mjs +15 -41
- package/es/utils/crypto.mjs.map +1 -1
- package/es/utils/encoder-types.d.ts +61 -0
- package/es/utils/encoder-types.mjs +36 -0
- package/es/utils/encoder-types.mjs.map +1 -0
- package/es/utils/encoder.d.ts +6 -7
- package/es/utils/encoder.mjs +42 -26
- package/es/utils/encoder.mjs.map +1 -1
- package/es/utils/errors.d.ts +1 -11
- package/es/utils/errors.mjs +4 -20
- package/es/utils/errors.mjs.map +1 -1
- package/es/utils/hd-wallet.d.ts +18 -2
- package/es/utils/hd-wallet.mjs +64 -34
- package/es/utils/hd-wallet.mjs.map +1 -1
- package/es/utils/json-big.mjs +2 -2
- package/es/utils/json-big.mjs.map +1 -1
- package/es/utils/keystore.mjs +4 -2
- package/es/utils/keystore.mjs.map +1 -1
- package/es/utils/mptree.d.ts +2 -2
- package/es/utils/mptree.mjs +11 -6
- package/es/utils/mptree.mjs.map +1 -1
- package/es/utils/other.d.ts +8 -2
- package/es/utils/other.mjs +15 -3
- package/es/utils/other.mjs.map +1 -1
- package/es/utils/semver-satisfies.d.ts +1 -1
- package/es/utils/semver-satisfies.mjs +2 -2
- package/es/utils/semver-satisfies.mjs.map +1 -1
- package/es/utils/string.mjs.map +1 -1
- package/package.json +35 -33
- package/src/AeSdk.ts +30 -27
- package/src/AeSdkAepp.ts +93 -84
- package/src/AeSdkBase.ts +148 -130
- package/src/AeSdkWallet.ts +172 -156
- package/src/Node.ts +108 -102
- package/src/account/Base.ts +42 -32
- package/src/account/Memory.ts +45 -30
- package/src/account/Rpc.ts +32 -30
- package/src/aens.ts +124 -108
- package/src/aepp-wallet-communication/connection/Browser.ts +18 -15
- package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +22 -21
- package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +63 -52
- package/src/aepp-wallet-communication/connection-proxy.ts +8 -7
- package/src/aepp-wallet-communication/rpc/RpcClient.ts +67 -61
- package/src/aepp-wallet-communication/rpc/types.ts +32 -32
- package/src/aepp-wallet-communication/schema.ts +117 -74
- package/src/aepp-wallet-communication/wallet-detector.ts +29 -28
- package/src/apis/node/code-model-v4.yaml +54 -20
- package/src/apis/node/models/index.ts +6 -2
- package/src/apis/node/models/mappers.ts +4 -2
- package/src/chain.ts +286 -228
- package/src/channel/handlers.ts +424 -372
- package/src/channel/index.ts +285 -251
- package/src/channel/internal.ts +248 -232
- package/src/contract/Compiler.ts +22 -21
- package/src/contract/aci.ts +267 -258
- package/src/contract/ga.ts +93 -72
- package/src/contract/methods.ts +32 -27
- package/src/deprecated/index.ts +170 -0
- package/src/deprecated/methods.ts +25 -0
- package/src/index.ts +37 -32
- package/src/oracle.ts +211 -189
- package/src/spend.ts +82 -70
- package/src/tx/builder/address.ts +50 -0
- package/src/tx/builder/constants.ts +82 -52
- package/src/tx/builder/field-types/coin-amount.ts +27 -0
- package/src/tx/builder/field-types/deposit.ts +21 -0
- package/src/tx/builder/field-types/fee.ts +143 -0
- package/src/tx/builder/field-types/field.ts +9 -0
- package/src/tx/builder/field-types/gas-limit.ts +41 -0
- package/src/tx/builder/field-types/gas-price.ts +16 -0
- package/src/tx/builder/field-types/index.ts +45 -0
- package/src/tx/builder/field-types/name-fee.ts +32 -0
- package/src/tx/builder/field-types/name-id.ts +20 -0
- package/src/tx/builder/field-types/name.ts +18 -0
- package/src/tx/builder/field-types/short-u-int.ts +11 -0
- package/src/tx/builder/field-types/u-int.ts +16 -0
- package/src/tx/builder/helpers.ts +112 -117
- package/src/tx/builder/index.ts +203 -197
- package/src/tx/builder/schema.ts +421 -465
- package/src/tx/index.ts +128 -135
- package/src/tx/validator.ts +165 -161
- package/src/typings/@aeternity__argon2-browser/index.d.ts +1 -1
- package/src/typings/@aeternity__uuid/index.d.ts +3 -1
- package/src/typings/bip32-path/index.d.ts +6 -6
- package/src/typings/blakejs/index.d.ts +4 -32
- package/src/typings/sha-js/index.d.ts +5 -0
- package/src/typings/tweetnacl-auth/index.d.ts +2 -2
- package/src/utils/amount-formatter.ts +41 -41
- package/src/utils/autorest.ts +57 -54
- package/src/utils/bignumber.ts +7 -6
- package/src/utils/bytes.ts +19 -19
- package/src/utils/crypto.ts +82 -94
- package/src/utils/encoder-types.ts +63 -0
- package/src/utils/encoder.ts +104 -56
- package/src/utils/errors.ts +246 -264
- package/src/utils/hd-wallet.ts +114 -82
- package/src/utils/json-big.ts +16 -15
- package/src/utils/keystore.ts +65 -62
- package/src/utils/mptree.ts +59 -56
- package/src/utils/other.ts +26 -18
- package/src/utils/semver-satisfies.ts +15 -11
- package/src/utils/string.ts +10 -10
- package/es/tx/builder/field-types.d.ts +0 -62
- package/es/tx/builder/field-types.mjs +0 -126
- package/es/tx/builder/field-types.mjs.map +0 -1
- package/es/tx/min-fee.d.ts +0 -20
- package/es/tx/min-fee.mjs.map +0 -1
- package/src/tx/builder/field-types.ts +0 -111
- package/src/tx/min-fee.ts +0 -136
package/es/tx/builder/index.mjs
CHANGED
|
@@ -3,25 +3,27 @@ import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/ins
|
|
|
3
3
|
const {
|
|
4
4
|
Buffer: _Buffer
|
|
5
5
|
} = _buffer;
|
|
6
|
-
import BigNumber from 'bignumber.js';
|
|
7
6
|
import _rlp from 'rlp';
|
|
8
7
|
const {
|
|
9
8
|
decode: rlpDecode,
|
|
10
9
|
encode: rlpEncode
|
|
11
10
|
} = _rlp;
|
|
12
|
-
import {
|
|
11
|
+
import { decode, encode, Encoding } from "../../utils/encoder.mjs";
|
|
12
|
+
import { AE_AMOUNT_FORMATS } from "../../utils/amount-formatter.mjs";
|
|
13
13
|
import { hash } from "../../utils/crypto.mjs";
|
|
14
|
-
import { FIELD_TYPES, TX_SCHEMA
|
|
15
|
-
import {
|
|
14
|
+
import { FIELD_TYPES, TX_SCHEMA } from "./schema.mjs";
|
|
15
|
+
import { Tag } from "./constants.mjs";
|
|
16
|
+
import { buildContractId, buildPointers, readInt, readPointers, writeInt } from "./helpers.mjs";
|
|
17
|
+
import { readId, writeId } from "./address.mjs";
|
|
16
18
|
import { toBytes } from "../../utils/bytes.mjs";
|
|
17
19
|
import MPTree from "../../utils/mptree.mjs";
|
|
18
|
-
import { ArgumentError, InvalidTxParamsError, SchemaNotFoundError
|
|
20
|
+
import { ArgumentError, DecodeError, InvalidTxParamsError, SchemaNotFoundError } from "../../utils/errors.mjs";
|
|
19
21
|
import { isKeyOfObject } from "../../utils/other.mjs";
|
|
22
|
+
|
|
20
23
|
/**
|
|
21
24
|
* JavaScript-based Transaction builder
|
|
22
25
|
*/
|
|
23
26
|
// SERIALIZE AND DESERIALIZE PART
|
|
24
|
-
|
|
25
27
|
function deserializeField(value, type, prefix) {
|
|
26
28
|
if (value == null) return '';
|
|
27
29
|
|
|
@@ -35,15 +37,10 @@ function deserializeField(value, type, prefix) {
|
|
|
35
37
|
};
|
|
36
38
|
}
|
|
37
39
|
|
|
38
|
-
case FIELD_TYPES.amount:
|
|
39
|
-
case FIELD_TYPES.int:
|
|
40
40
|
case FIELD_TYPES.abiVersion:
|
|
41
41
|
case FIELD_TYPES.ttlType:
|
|
42
42
|
return readInt(value);
|
|
43
43
|
|
|
44
|
-
case FIELD_TYPES.shortInt:
|
|
45
|
-
return +readInt(value);
|
|
46
|
-
|
|
47
44
|
case FIELD_TYPES.id:
|
|
48
45
|
return readId(value);
|
|
49
46
|
|
|
@@ -57,22 +54,24 @@ function deserializeField(value, type, prefix) {
|
|
|
57
54
|
return encode(value, prefix);
|
|
58
55
|
|
|
59
56
|
case FIELD_TYPES.stateTree:
|
|
60
|
-
return encode(value,
|
|
57
|
+
return encode(value, Encoding.StateTrees);
|
|
61
58
|
|
|
62
59
|
case FIELD_TYPES.string:
|
|
63
60
|
return value.toString();
|
|
64
61
|
|
|
65
62
|
case FIELD_TYPES.payload:
|
|
66
|
-
return encode(value,
|
|
63
|
+
return encode(value, Encoding.Bytearray);
|
|
67
64
|
|
|
68
65
|
case FIELD_TYPES.pointers:
|
|
69
66
|
return readPointers(value);
|
|
70
67
|
|
|
71
68
|
case FIELD_TYPES.rlpBinary:
|
|
72
|
-
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
70
|
+
return unpackTx(encode(value, Encoding.Transaction));
|
|
73
71
|
|
|
74
72
|
case FIELD_TYPES.rlpBinaries:
|
|
75
|
-
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
74
|
+
return value.map(v => unpackTx(encode(v, Encoding.Transaction)));
|
|
76
75
|
|
|
77
76
|
case FIELD_TYPES.rawBinary:
|
|
78
77
|
return value;
|
|
@@ -81,7 +80,8 @@ function deserializeField(value, type, prefix) {
|
|
|
81
80
|
return value.toString('hex');
|
|
82
81
|
|
|
83
82
|
case FIELD_TYPES.offChainUpdates:
|
|
84
|
-
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
84
|
+
return value.map(v => unpackTx(encode(v, Encoding.Transaction)));
|
|
85
85
|
|
|
86
86
|
case FIELD_TYPES.callStack:
|
|
87
87
|
// TODO: fix this
|
|
@@ -118,8 +118,8 @@ function deserializeField(value, type, prefix) {
|
|
|
118
118
|
}, {});
|
|
119
119
|
|
|
120
120
|
default:
|
|
121
|
-
if (type
|
|
122
|
-
return value;
|
|
121
|
+
if (typeof type === 'number') return value;
|
|
122
|
+
return type.deserialize(value);
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
|
|
@@ -127,9 +127,6 @@ function serializeField(value, type, params) {
|
|
|
127
127
|
var _value$rlpEncoded;
|
|
128
128
|
|
|
129
129
|
switch (type) {
|
|
130
|
-
case FIELD_TYPES.amount:
|
|
131
|
-
case FIELD_TYPES.int:
|
|
132
|
-
case FIELD_TYPES.shortInt:
|
|
133
130
|
case FIELD_TYPES.abiVersion:
|
|
134
131
|
case FIELD_TYPES.ttlType:
|
|
135
132
|
return writeInt(value);
|
|
@@ -168,7 +165,7 @@ function serializeField(value, type, params) {
|
|
|
168
165
|
return (_value$rlpEncoded = value.rlpEncoded) !== null && _value$rlpEncoded !== void 0 ? _value$rlpEncoded : value;
|
|
169
166
|
|
|
170
167
|
case FIELD_TYPES.mptrees:
|
|
171
|
-
return value.map(t => t.serialize(
|
|
168
|
+
return value.map(t => t.serialize());
|
|
172
169
|
|
|
173
170
|
case FIELD_TYPES.ctVersion:
|
|
174
171
|
return _Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)]);
|
|
@@ -189,8 +186,9 @@ function serializeField(value, type, params) {
|
|
|
189
186
|
}
|
|
190
187
|
|
|
191
188
|
default:
|
|
192
|
-
if (type
|
|
193
|
-
|
|
189
|
+
if (typeof type === 'number') return value; // @ts-expect-error will be solved after removing the whole serializeField function
|
|
190
|
+
|
|
191
|
+
return type.serialize(value, params);
|
|
194
192
|
}
|
|
195
193
|
}
|
|
196
194
|
|
|
@@ -199,18 +197,6 @@ function validateField(value, type, prefix) {
|
|
|
199
197
|
if (value == null) return 'Field is required'; // Validate type of value
|
|
200
198
|
|
|
201
199
|
switch (type) {
|
|
202
|
-
case FIELD_TYPES.amount:
|
|
203
|
-
case FIELD_TYPES.int:
|
|
204
|
-
case FIELD_TYPES.shortInt:
|
|
205
|
-
{
|
|
206
|
-
if (isNaN(value) && !BigNumber.isBigNumber(value)) {
|
|
207
|
-
return `${String(value)} is not of type Number or BigNumber`;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
if (new BigNumber(value).lt(0)) return `${String(value)} must be >= 0`;
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
200
|
case FIELD_TYPES.id:
|
|
215
201
|
{
|
|
216
202
|
const prefixes = Array.isArray(prefix) ? prefix : [prefix];
|
|
@@ -223,7 +209,7 @@ function validateField(value, type, prefix) {
|
|
|
223
209
|
return `'${String(value)}' prefix doesn't match expected prefix '${prefix.toString()}'`;
|
|
224
210
|
}
|
|
225
211
|
|
|
226
|
-
return;
|
|
212
|
+
return undefined;
|
|
227
213
|
}
|
|
228
214
|
|
|
229
215
|
case FIELD_TYPES.ctVersion:
|
|
@@ -231,7 +217,7 @@ function validateField(value, type, prefix) {
|
|
|
231
217
|
return 'Value must be an object with "vmVersion" and "abiVersion" fields';
|
|
232
218
|
}
|
|
233
219
|
|
|
234
|
-
return;
|
|
220
|
+
return undefined;
|
|
235
221
|
|
|
236
222
|
case FIELD_TYPES.pointers:
|
|
237
223
|
if (!Array.isArray(value)) return 'Value must be of type Array';
|
|
@@ -244,28 +230,15 @@ function validateField(value, type, prefix) {
|
|
|
244
230
|
return `Expected 32 pointers or less, got ${value.length} instead`;
|
|
245
231
|
}
|
|
246
232
|
|
|
247
|
-
|
|
248
|
-
}
|
|
233
|
+
return undefined;
|
|
249
234
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
} = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
254
|
-
params = schema.filter(_ref2 => {
|
|
255
|
-
let [, t] = _ref2;
|
|
256
|
-
return t === FIELD_TYPES.amount;
|
|
257
|
-
}).reduce((params, _ref3) => {
|
|
258
|
-
let [key] = _ref3;
|
|
259
|
-
return { ...params,
|
|
260
|
-
[key]: formatAmount(params[key], {
|
|
261
|
-
denomination
|
|
262
|
-
})
|
|
263
|
-
};
|
|
264
|
-
}, params);
|
|
265
|
-
return params;
|
|
235
|
+
default:
|
|
236
|
+
return undefined;
|
|
237
|
+
}
|
|
266
238
|
}
|
|
267
239
|
/**
|
|
268
240
|
* Validate transaction params
|
|
241
|
+
* @category transaction builder
|
|
269
242
|
* @param params - Object with tx params
|
|
270
243
|
* @param schema - Transaction schema
|
|
271
244
|
* @param excludeKeys - Array of keys to exclude for validation
|
|
@@ -273,42 +246,47 @@ function transformParams(params, schema) {
|
|
|
273
246
|
*/
|
|
274
247
|
|
|
275
248
|
|
|
276
|
-
export function validateParams(params, schema,
|
|
249
|
+
export function validateParams(params, schema, _ref2) {
|
|
277
250
|
let {
|
|
278
251
|
excludeKeys = []
|
|
279
|
-
} =
|
|
252
|
+
} = _ref2;
|
|
280
253
|
return Object.fromEntries(schema // TODO: allow optional keys in schema
|
|
281
|
-
.filter(
|
|
254
|
+
.filter(_ref3 => {
|
|
282
255
|
var _context;
|
|
283
256
|
|
|
284
|
-
let [key] =
|
|
285
|
-
return !_includesInstanceProperty(excludeKeys).call(excludeKeys, key) && !_includesInstanceProperty(_context = ['payload', 'nameFee', 'deposit', 'gasPrice']).call(_context, key);
|
|
286
|
-
}).map(
|
|
287
|
-
let [key, type, prefix] =
|
|
257
|
+
let [key] = _ref3;
|
|
258
|
+
return !_includesInstanceProperty(excludeKeys).call(excludeKeys, key) && !_includesInstanceProperty(_context = ['payload', 'nameFee', 'deposit', 'gasPrice', 'fee', 'gasLimit']).call(_context, key);
|
|
259
|
+
}).map(_ref4 => {
|
|
260
|
+
let [key, type, prefix] = _ref4;
|
|
288
261
|
return [key, validateField(params[key], type, prefix)];
|
|
289
|
-
}).filter(
|
|
290
|
-
let [, message] =
|
|
262
|
+
}).filter(_ref5 => {
|
|
263
|
+
let [, message] = _ref5;
|
|
291
264
|
return message;
|
|
292
265
|
}));
|
|
293
266
|
}
|
|
294
267
|
/**
|
|
295
268
|
* Unpack binary transaction
|
|
269
|
+
* @category transaction builder
|
|
296
270
|
* @param binary - Array with binary transaction field's
|
|
297
271
|
* @param schema - Transaction schema
|
|
298
272
|
* @returns Object with transaction field's
|
|
299
273
|
*/
|
|
300
274
|
|
|
301
275
|
export function unpackRawTx(binary, schema) {
|
|
302
|
-
return schema.reduce((acc,
|
|
303
|
-
let [key, fieldType, prefix] =
|
|
276
|
+
return schema.reduce((acc, _ref6, index) => {
|
|
277
|
+
let [key, fieldType, prefix] = _ref6;
|
|
304
278
|
return Object.assign(acc, {
|
|
305
279
|
[key]: deserializeField(binary[index], fieldType, prefix)
|
|
306
280
|
});
|
|
307
281
|
}, {});
|
|
308
282
|
}
|
|
283
|
+
/**
|
|
284
|
+
* @category transaction builder
|
|
285
|
+
*/
|
|
309
286
|
|
|
310
287
|
/**
|
|
311
288
|
* Build transaction hash
|
|
289
|
+
* @category transaction builder
|
|
312
290
|
* @param _params - Object with tx params
|
|
313
291
|
* @param type - Transaction type
|
|
314
292
|
* @param options - options
|
|
@@ -326,24 +304,21 @@ export function buildTx(_params, type) {
|
|
|
326
304
|
|
|
327
305
|
let {
|
|
328
306
|
excludeKeys = [],
|
|
329
|
-
prefix =
|
|
307
|
+
prefix = Encoding.Transaction,
|
|
330
308
|
vsn,
|
|
331
309
|
denomination = AE_AMOUNT_FORMATS.AETTOS
|
|
332
310
|
} = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
333
311
|
const schemas = TX_SCHEMA[type];
|
|
334
312
|
(_vsn = vsn) !== null && _vsn !== void 0 ? _vsn : vsn = Math.max(...Object.keys(schemas).map(a => +a));
|
|
335
|
-
if (!isKeyOfObject(vsn, schemas)) throw new SchemaNotFoundError('serialization',
|
|
313
|
+
if (!isKeyOfObject(vsn, schemas)) throw new SchemaNotFoundError('serialization', Tag[type], vsn);
|
|
336
314
|
const schema = schemas[vsn];
|
|
337
|
-
|
|
315
|
+
const params = _params;
|
|
338
316
|
params.VSN = vsn;
|
|
339
317
|
params.tag = type;
|
|
340
|
-
|
|
341
|
-
|
|
318
|
+
params.denomination = denomination;
|
|
319
|
+
const filteredSchema = schema.filter(_ref7 => {
|
|
320
|
+
let [key] = _ref7;
|
|
342
321
|
return !_includesInstanceProperty(excludeKeys).call(excludeKeys, key);
|
|
343
|
-
}); // Transform `amount` type fields to `aettos`
|
|
344
|
-
|
|
345
|
-
params = transformParams(params, filteredSchema, {
|
|
346
|
-
denomination
|
|
347
322
|
}); // Validation
|
|
348
323
|
|
|
349
324
|
const valid = validateParams(params, schema, {
|
|
@@ -351,12 +326,22 @@ export function buildTx(_params, type) {
|
|
|
351
326
|
});
|
|
352
327
|
|
|
353
328
|
if (Object.keys(valid).length > 0) {
|
|
354
|
-
throw new InvalidTxParamsError(
|
|
329
|
+
throw new InvalidTxParamsError(`Transaction build error. ${JSON.stringify(valid)}`);
|
|
355
330
|
}
|
|
356
331
|
|
|
357
|
-
const binary = filteredSchema.map(
|
|
358
|
-
let [key, fieldType] =
|
|
359
|
-
return serializeField(params[key], fieldType, params
|
|
332
|
+
const binary = filteredSchema.map(_ref8 => {
|
|
333
|
+
let [key, fieldType] = _ref8;
|
|
334
|
+
return serializeField(params[key], fieldType, { ...params,
|
|
335
|
+
txType: type,
|
|
336
|
+
rebuildTx: overrideParams => buildTx({ ...params,
|
|
337
|
+
...overrideParams
|
|
338
|
+
}, type, {
|
|
339
|
+
excludeKeys,
|
|
340
|
+
prefix: Encoding.Transaction,
|
|
341
|
+
vsn,
|
|
342
|
+
denomination
|
|
343
|
+
})
|
|
344
|
+
});
|
|
360
345
|
}).filter(e => e !== undefined);
|
|
361
346
|
const rlpEncoded = rlpEncode(binary);
|
|
362
347
|
const tx = encode(rlpEncoded, prefix);
|
|
@@ -367,9 +352,13 @@ export function buildTx(_params, type) {
|
|
|
367
352
|
txObject: unpackRawTx(binary, schema)
|
|
368
353
|
};
|
|
369
354
|
}
|
|
355
|
+
/**
|
|
356
|
+
* @category transaction builder
|
|
357
|
+
*/
|
|
370
358
|
|
|
371
359
|
/**
|
|
372
360
|
* Unpack transaction hash
|
|
361
|
+
* @category transaction builder
|
|
373
362
|
* @param encodedTx - Transaction to unpack
|
|
374
363
|
* @param txType - Expected transaction type
|
|
375
364
|
* @returns object
|
|
@@ -381,7 +370,7 @@ export function unpackTx(encodedTx, txType) {
|
|
|
381
370
|
const binary = rlpDecode(rlpEncoded);
|
|
382
371
|
const objId = +readInt(binary[0]);
|
|
383
372
|
if (!isKeyOfObject(objId, TX_SCHEMA)) throw new DecodeError(`Unknown transaction tag: ${objId}`);
|
|
384
|
-
if (txType != null && txType !== objId) throw new DecodeError(`Expected transaction to have ${
|
|
373
|
+
if (txType != null && txType !== objId) throw new DecodeError(`Expected transaction to have ${Tag[txType]} tag, got ${Tag[objId]} instead`);
|
|
385
374
|
const vsn = +readInt(binary[1]);
|
|
386
375
|
if (!isKeyOfObject(vsn, TX_SCHEMA[objId])) throw new SchemaNotFoundError('deserialization', `tag ${objId}`, vsn);
|
|
387
376
|
const schema = TX_SCHEMA[objId][vsn];
|
|
@@ -393,16 +382,18 @@ export function unpackTx(encodedTx, txType) {
|
|
|
393
382
|
}
|
|
394
383
|
/**
|
|
395
384
|
* Build a transaction hash
|
|
385
|
+
* @category transaction builder
|
|
396
386
|
* @param rawTx - base64 or rlp encoded transaction
|
|
397
387
|
* @returns Transaction hash
|
|
398
388
|
*/
|
|
399
389
|
|
|
400
390
|
export function buildTxHash(rawTx) {
|
|
401
391
|
const data = typeof rawTx === 'string' && rawTx.startsWith('tx_') ? decode(rawTx) : rawTx;
|
|
402
|
-
return encode(hash(data),
|
|
392
|
+
return encode(hash(data), Encoding.TxHash);
|
|
403
393
|
}
|
|
404
394
|
/**
|
|
405
395
|
* Build a contract public key by contractCreateTx or gaAttach
|
|
396
|
+
* @category contract
|
|
406
397
|
* @param contractTx - Transaction
|
|
407
398
|
* @returns Contract public key
|
|
408
399
|
*/
|
|
@@ -415,7 +406,7 @@ export function buildContractIdByContractTx(contractTx) {
|
|
|
415
406
|
tx
|
|
416
407
|
} = unpackTx(contractTx);
|
|
417
408
|
|
|
418
|
-
if (!_includesInstanceProperty(_context2 = [
|
|
409
|
+
if (!_includesInstanceProperty(_context2 = [Tag.ContractCreateTx, Tag.GaAttachTx]).call(_context2, txType)) {
|
|
419
410
|
throw new ArgumentError('contractCreateTx', 'a contractCreateTx or gaAttach', txType);
|
|
420
411
|
}
|
|
421
412
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["BigNumber","AE_AMOUNT_FORMATS","formatAmount","hash","FIELD_TYPES","TX_SCHEMA","TX_TYPE","readInt","readId","readPointers","writeId","writeInt","buildPointers","encode","decode","buildContractId","toBytes","MPTree","ArgumentError","InvalidTxParamsError","SchemaNotFoundError","DecodeError","isKeyOfObject","deserializeField","value","type","prefix","ctVersion","vm","abi","vmVersion","from","abiVersion","amount","int","ttlType","shortInt","id","ids","map","bool","binary","stateTree","string","toString","payload","pointers","rlpBinary","unpackTx","rlpBinaries","v","rawBinary","hex","offChainUpdates","callStack","mptrees","t","callReturnType","sophiaCodeTypeInfo","reduce","acc","funHash","fnName","argType","outType","Object","deserialize","serializeField","params","signatures","split","rlpEncoded","serialize","validateField","isNaN","isBigNumber","String","lt","prefixes","Array","isArray","Boolean","some","p","key","length","transformParams","schema","denomination","filter","validateParams","excludeKeys","fromEntries","message","unpackRawTx","index","fieldType","assign","buildTx","_params","vsn","AETTOS","schemas","Math","max","keys","a","VSN","tag","filteredSchema","valid","JSON","stringify","e","undefined","rlpEncode","tx","txObject","encodedTx","txType","rlpDecode","objId","buildTxHash","rawTx","data","startsWith","buildContractIdByContractTx","contractTx","contractCreate","gaAttach","ownerId","nonce"],"sources":["../../../src/tx/builder/index.ts"],"sourcesContent":["import { EncodedData, EncodingType } from './../../utils/encoder'\nimport BigNumber from 'bignumber.js'\nimport { decode as rlpDecode, encode as rlpEncode, NestedUint8Array } from 'rlp'\nimport { AE_AMOUNT_FORMATS, formatAmount } from '../../utils/amount-formatter'\nimport { hash } from '../../utils/crypto'\nimport { Field } from './field-types'\n\nimport {\n FIELD_TYPES,\n RawTxObject,\n TxField,\n TxTypeSchemas,\n TxParamsCommon,\n TX_SCHEMA,\n TX_TYPE,\n TxSchema\n} from './schema'\nimport {\n readInt,\n readId,\n readPointers,\n writeId,\n writeInt,\n buildPointers,\n encode,\n decode,\n Pointer,\n buildContractId\n} from './helpers'\nimport { toBytes } from '../../utils/bytes'\nimport MPTree, { MPTreeBinary } from '../../utils/mptree'\nimport { ArgumentError, InvalidTxParamsError, SchemaNotFoundError, DecodeError } from '../../utils/errors'\nimport { isKeyOfObject } from '../../utils/other'\n\n/**\n * JavaScript-based Transaction builder\n */\n\n// SERIALIZE AND DESERIALIZE PART\nfunction deserializeField (\n value: any,\n type: FIELD_TYPES | typeof Field,\n prefix?: EncodingType | EncodingType[]\n): any {\n if (value == null) return ''\n switch (type) {\n case FIELD_TYPES.ctVersion: {\n const [vm, , abi] = value\n return {\n vmVersion: readInt(Buffer.from([vm])),\n abiVersion: readInt(Buffer.from([abi]))\n }\n }\n case FIELD_TYPES.amount:\n case FIELD_TYPES.int:\n case FIELD_TYPES.abiVersion:\n case FIELD_TYPES.ttlType:\n return readInt(value)\n case FIELD_TYPES.shortInt:\n return +readInt(value)\n case FIELD_TYPES.id:\n return readId(value)\n case FIELD_TYPES.ids:\n return value.map(readId)\n case FIELD_TYPES.bool:\n return value[0] === 1\n case FIELD_TYPES.binary:\n return encode(value, prefix as EncodingType)\n case FIELD_TYPES.stateTree:\n return encode(value, 'ss')\n case FIELD_TYPES.string:\n return value.toString()\n case FIELD_TYPES.payload:\n return encode(value, 'ba')\n case FIELD_TYPES.pointers:\n return readPointers(value)\n case FIELD_TYPES.rlpBinary:\n return unpackTx(encode(value, 'tx'))\n case FIELD_TYPES.rlpBinaries:\n return value.map((v: Buffer) => unpackTx(encode(v, 'tx')))\n case FIELD_TYPES.rawBinary:\n return value\n case FIELD_TYPES.hex:\n return value.toString('hex')\n case FIELD_TYPES.offChainUpdates:\n return value.map((v: Buffer) => unpackTx(encode(v, 'tx')))\n case FIELD_TYPES.callStack:\n // TODO: fix this\n return [readInt(value)]\n case FIELD_TYPES.mptrees:\n return value.map((t: MPTreeBinary) => new MPTree(t))\n case FIELD_TYPES.callReturnType:\n switch (readInt(value)) {\n case '0':\n return 'ok'\n case '1':\n return 'error'\n case '2':\n return 'revert'\n default:\n return value\n }\n case FIELD_TYPES.sophiaCodeTypeInfo:\n return value.reduce(\n (acc: object, [funHash, fnName, argType, outType]: [\n funHash: Buffer,\n fnName: string,\n argType: string,\n outType: string\n ]) => ({\n ...acc,\n [fnName.toString()]: { funHash, argType, outType }\n }),\n {}\n )\n default:\n if (type instanceof Object && 'deserialize' in type) return type.deserialize(value)\n return value\n }\n}\n\nfunction serializeField (\n value: any, type: FIELD_TYPES | typeof Field, params: any\n): any {\n switch (type) {\n case FIELD_TYPES.amount:\n case FIELD_TYPES.int:\n case FIELD_TYPES.shortInt:\n case FIELD_TYPES.abiVersion:\n case FIELD_TYPES.ttlType:\n return writeInt(value)\n case FIELD_TYPES.id:\n return writeId(value)\n case FIELD_TYPES.ids:\n return value.map(writeId)\n case FIELD_TYPES.bool:\n return Buffer.from([(value === true) ? 1 : 0])\n case FIELD_TYPES.binary:\n return decode(value)\n case FIELD_TYPES.stateTree:\n return decode(value)\n case FIELD_TYPES.hex:\n return Buffer.from(value, 'hex')\n case FIELD_TYPES.signatures:\n return value.map(Buffer.from)\n case FIELD_TYPES.payload:\n return typeof value === 'string' && value.split('_')[0] === 'ba'\n ? decode(value as EncodedData<'ba'>)\n : toBytes(value)\n case FIELD_TYPES.string:\n return toBytes(value)\n case FIELD_TYPES.pointers:\n return buildPointers(value)\n case FIELD_TYPES.rlpBinary:\n return value.rlpEncoded ?? value\n case FIELD_TYPES.mptrees:\n return value.map((t: typeof Field) => t.serialize(''))\n case FIELD_TYPES.ctVersion:\n return Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)])\n case FIELD_TYPES.callReturnType:\n switch (value) {\n case 'ok': return writeInt(0)\n case 'error': return writeInt(1)\n case 'revert': return writeInt(2)\n default: return value\n }\n default:\n if (type instanceof Object && 'serialize' in type) return type.serialize(value, params)\n return value\n }\n}\n\nfunction validateField (\n value: any,\n type: FIELD_TYPES | typeof Field,\n prefix?: EncodingType | EncodingType[]\n): string | undefined {\n // All fields are required\n if (value == null) return 'Field is required'\n\n // Validate type of value\n switch (type) {\n case FIELD_TYPES.amount:\n case FIELD_TYPES.int:\n case FIELD_TYPES.shortInt: {\n if (isNaN(value) && !BigNumber.isBigNumber(value)) {\n return `${String(value)} is not of type Number or BigNumber`\n }\n if (new BigNumber(value).lt(0)) return `${String(value)} must be >= 0`\n return\n }\n case FIELD_TYPES.id: {\n const prefixes = Array.isArray(prefix) ? prefix : [prefix]\n if (!prefixes.includes(value.split('_')[0])) {\n if (prefix == null) { return `'${String(value)}' prefix doesn't exist'` }\n return `'${String(value)}' prefix doesn't match expected prefix '${prefix.toString()}'`\n }\n return\n }\n case FIELD_TYPES.ctVersion:\n if (!(Boolean(value.abiVersion) && Boolean(value.vmVersion))) {\n return 'Value must be an object with \"vmVersion\" and \"abiVersion\" fields'\n }\n return\n case FIELD_TYPES.pointers:\n if (!Array.isArray(value)) return 'Value must be of type Array'\n if (value.some((p: Pointer) => !(Boolean(p.key) && Boolean(p.id)))) {\n return 'Value must contains only object\\'s like \\'{key: \"account_pubkey\", id: \"ak_lkamsflkalsdalksdlasdlasdlamd\"}\\''\n }\n if (value.length > 32) {\n return `Expected 32 pointers or less, got ${value.length} instead`\n }\n }\n}\n\nfunction transformParams (\n params: TxParamsCommon,\n schema: TxField[],\n { denomination }: {denomination?: AE_AMOUNT_FORMATS} = {}\n): any {\n params = schema\n .filter(([, t]) => t === FIELD_TYPES.amount)\n .reduce(\n (params: TxParamsCommon, [key]) => ({\n ...params,\n [key]: formatAmount(params[key as keyof TxParamsCommon], { denomination })\n }),\n params\n )\n return params\n}\n\n/**\n * Validate transaction params\n * @param params - Object with tx params\n * @param schema - Transaction schema\n * @param excludeKeys - Array of keys to exclude for validation\n * @returns Object with validation errors\n */\nexport function validateParams (\n params: any, schema: TxField[], { excludeKeys = [] }: { excludeKeys: string[] }\n): object {\n return Object.fromEntries(\n schema\n // TODO: allow optional keys in schema\n .filter(([key]) => !excludeKeys.includes(key) &&\n !['payload', 'nameFee', 'deposit', 'gasPrice'].includes(key))\n .map(([key, type, prefix]) => [key, validateField(params[key], type, prefix)])\n .filter(([, message]) => message)\n )\n}\n\n/**\n * Unpack binary transaction\n * @param binary - Array with binary transaction field's\n * @param schema - Transaction schema\n * @returns Object with transaction field's\n */\nexport function unpackRawTx<Tx extends TxSchema> (\n binary: Uint8Array | NestedUint8Array,\n schema: TxField[]\n): RawTxObject<Tx> {\n return schema\n .reduce<any>(\n (\n acc,\n [key, fieldType, prefix],\n index\n ) => Object.assign(acc, { [key]: deserializeField(binary[index], fieldType, prefix) }),\n {}\n )\n}\n\nexport interface BuiltTx<Tx extends TxSchema, Prefix extends EncodingType> {\n tx: EncodedData<Prefix>\n rlpEncoded: Uint8Array\n binary: Uint8Array\n txObject: RawTxObject<Tx>\n}\n\n/**\n * Build transaction hash\n * @param _params - Object with tx params\n * @param type - Transaction type\n * @param options - options\n * @param options.excludeKeys - Array of keys to exclude for validation and build\n * @param options.denomination - Denomination of amounts\n * @param options.prefix - Prefix of transaction\n * @throws {@link InvalidTxParamsError}\n * @returns object\n * @returns object.tx Base64Check transaction hash with 'tx_' prefix\n * @returns object.rlpEncoded rlp encoded transaction\n * @returns object.binary binary transaction\n */\nexport function buildTx<TxType extends TX_TYPE, Prefix> (\n _params: Omit<TxTypeSchemas[TxType], 'tag' | 'VSN'> & { VSN?: number },\n type: TxType,\n { excludeKeys = [], prefix = 'tx', vsn, denomination = AE_AMOUNT_FORMATS.AETTOS }: {\n excludeKeys?: string[]\n prefix?: EncodingType\n vsn?: number\n denomination?: AE_AMOUNT_FORMATS\n } = {}\n): BuiltTx<TxSchema, Prefix extends EncodingType ? Prefix : 'tx'> {\n const schemas = TX_SCHEMA[type]\n\n vsn ??= Math.max(...Object.keys(schemas).map(a => +a))\n if (!isKeyOfObject(vsn, schemas)) throw new SchemaNotFoundError('serialization', TX_TYPE[type], vsn)\n\n const schema = schemas[vsn] as unknown as TxField[]\n\n let params = _params as TxParamsCommon & { onNode: Node }\n params.VSN = vsn\n params.tag = type\n const filteredSchema = schema.filter(([key]) => !excludeKeys.includes(key))\n\n // Transform `amount` type fields to `aettos`\n params = transformParams(params, filteredSchema, { denomination })\n // Validation\n const valid = validateParams(params, schema, { excludeKeys })\n if (Object.keys(valid).length > 0) {\n throw new InvalidTxParamsError('Transaction build error. ' + JSON.stringify(valid))\n }\n\n const binary = filteredSchema\n .map(([key, fieldType]: [keyof TxSchema, FIELD_TYPES, EncodingType]) => serializeField(\n params[key], fieldType, params))\n .filter(e => e !== undefined)\n\n const rlpEncoded = rlpEncode(binary)\n const tx = encode(rlpEncoded, prefix)\n return {\n tx,\n rlpEncoded,\n binary,\n txObject: unpackRawTx<TxTypeSchemas[TX_TYPE]>(binary, schema)\n } as any\n}\n\nexport interface TxUnpacked<Tx extends TxSchema> {\n txType: TX_TYPE\n tx: RawTxObject<Tx>\n rlpEncoded: Uint8Array\n}\n/**\n * Unpack transaction hash\n * @param encodedTx - Transaction to unpack\n * @param txType - Expected transaction type\n * @returns object\n * @returns object.tx Object with transaction param's\n * @returns object.txType Transaction type\n */\nexport function unpackTx<TxType extends TX_TYPE> (\n encodedTx: EncodedData<'tx' | 'pi'>, txType?: TxType\n): TxUnpacked<TxTypeSchemas[TxType]> {\n const rlpEncoded = decode(encodedTx)\n const binary = rlpDecode(rlpEncoded)\n const objId = +readInt(binary[0] as Buffer)\n if (!isKeyOfObject(objId, TX_SCHEMA)) throw new DecodeError(`Unknown transaction tag: ${objId}`)\n if (txType != null && txType !== objId) throw new DecodeError(`Expected transaction to have ${TX_TYPE[txType]} tag, got ${TX_TYPE[objId]} instead`)\n const vsn = +readInt(binary[1] as Buffer)\n if (!isKeyOfObject(vsn, TX_SCHEMA[objId])) throw new SchemaNotFoundError('deserialization', `tag ${objId}`, vsn)\n const schema = TX_SCHEMA[objId][vsn]\n return {\n txType: objId,\n tx: unpackRawTx<TxTypeSchemas[TxType]>(binary, schema),\n rlpEncoded\n }\n}\n\n/**\n * Build a transaction hash\n * @param rawTx - base64 or rlp encoded transaction\n * @returns Transaction hash\n */\nexport function buildTxHash (rawTx: EncodedData<'tx'> | Uint8Array): EncodedData<'th'> {\n const data = typeof rawTx === 'string' && rawTx.startsWith('tx_')\n ? decode(rawTx)\n : rawTx\n return encode(hash(data), 'th')\n}\n\n/**\n * Build a contract public key by contractCreateTx or gaAttach\n * @param contractTx - Transaction\n * @returns Contract public key\n */\nexport function buildContractIdByContractTx (contractTx: EncodedData<'tx'>): EncodedData<'ct'> {\n const { txType, tx } = unpackTx<TX_TYPE.contractCreate | TX_TYPE.gaAttach>(contractTx)\n if (![TX_TYPE.contractCreate, TX_TYPE.gaAttach].includes(txType)) {\n throw new ArgumentError('contractCreateTx', 'a contractCreateTx or gaAttach', txType)\n }\n return buildContractId(tx.ownerId, +tx.nonce)\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["decode","encode","Encoding","AE_AMOUNT_FORMATS","hash","FIELD_TYPES","TX_SCHEMA","Tag","buildContractId","buildPointers","readInt","readPointers","writeInt","readId","writeId","toBytes","MPTree","ArgumentError","DecodeError","InvalidTxParamsError","SchemaNotFoundError","isKeyOfObject","deserializeField","value","type","prefix","ctVersion","vm","abi","vmVersion","from","abiVersion","ttlType","id","ids","map","bool","binary","stateTree","StateTrees","string","toString","payload","Bytearray","pointers","rlpBinary","unpackTx","Transaction","rlpBinaries","v","rawBinary","hex","offChainUpdates","callStack","mptrees","t","callReturnType","sophiaCodeTypeInfo","reduce","acc","funHash","fnName","argType","outType","deserialize","serializeField","params","signatures","split","rlpEncoded","serialize","validateField","prefixes","Array","isArray","String","undefined","Boolean","some","p","key","length","validateParams","schema","excludeKeys","Object","fromEntries","filter","message","unpackRawTx","index","fieldType","assign","buildTx","_params","vsn","denomination","AETTOS","schemas","Math","max","keys","a","VSN","tag","filteredSchema","valid","JSON","stringify","txType","rebuildTx","overrideParams","e","rlpEncode","tx","txObject","encodedTx","rlpDecode","objId","buildTxHash","rawTx","data","startsWith","TxHash","buildContractIdByContractTx","contractTx","ContractCreateTx","GaAttachTx","ownerId","nonce"],"sources":["../../../src/tx/builder/index.ts"],"sourcesContent":["import { decode as rlpDecode, encode as rlpEncode, NestedUint8Array } from 'rlp';\nimport {\n decode, encode, Encoded, Encoding,\n} from '../../utils/encoder';\nimport { AE_AMOUNT_FORMATS } from '../../utils/amount-formatter';\nimport { hash } from '../../utils/crypto';\nimport { Field } from './field-types';\nimport {\n FIELD_TYPES,\n RawTxObject,\n TX_SCHEMA,\n TxField,\n TxParamsCommon,\n TxSchema,\n TxTypeSchemas,\n} from './schema';\nimport { Tag } from './constants';\nimport {\n buildContractId, buildPointers, readInt, readPointers, writeInt,\n} from './helpers';\nimport { readId, writeId } from './address';\nimport { toBytes } from '../../utils/bytes';\nimport MPTree, { MPTreeBinary } from '../../utils/mptree';\nimport {\n ArgumentError,\n DecodeError,\n InvalidTxParamsError,\n SchemaNotFoundError,\n} from '../../utils/errors';\nimport { isKeyOfObject } from '../../utils/other';\nimport { NamePointer } from '../../apis/node';\n\n/**\n * JavaScript-based Transaction builder\n */\n\n// SERIALIZE AND DESERIALIZE PART\nfunction deserializeField(\n value: any,\n type: FIELD_TYPES | Field,\n prefix?: Encoding | Encoding[],\n): any {\n if (value == null) return '';\n switch (type) {\n case FIELD_TYPES.ctVersion: {\n const [vm, , abi] = value;\n return {\n vmVersion: readInt(Buffer.from([vm])),\n abiVersion: readInt(Buffer.from([abi])),\n };\n }\n case FIELD_TYPES.abiVersion:\n case FIELD_TYPES.ttlType:\n return readInt(value);\n case FIELD_TYPES.id:\n return readId(value);\n case FIELD_TYPES.ids:\n return value.map(readId);\n case FIELD_TYPES.bool:\n return value[0] === 1;\n case FIELD_TYPES.binary:\n return encode(value, prefix as Encoding);\n case FIELD_TYPES.stateTree:\n return encode(value, Encoding.StateTrees);\n case FIELD_TYPES.string:\n return value.toString();\n case FIELD_TYPES.payload:\n return encode(value, Encoding.Bytearray);\n case FIELD_TYPES.pointers:\n return readPointers(value);\n case FIELD_TYPES.rlpBinary:\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return unpackTx(encode(value, Encoding.Transaction));\n case FIELD_TYPES.rlpBinaries:\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return value.map((v: Buffer) => unpackTx(encode(v, Encoding.Transaction)));\n case FIELD_TYPES.rawBinary:\n return value;\n case FIELD_TYPES.hex:\n return value.toString('hex');\n case FIELD_TYPES.offChainUpdates:\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return value.map((v: Buffer) => unpackTx(encode(v, Encoding.Transaction)));\n case FIELD_TYPES.callStack:\n // TODO: fix this\n return [readInt(value)];\n case FIELD_TYPES.mptrees:\n return value.map((t: MPTreeBinary) => new MPTree(t));\n case FIELD_TYPES.callReturnType:\n switch (readInt(value)) {\n case '0':\n return 'ok';\n case '1':\n return 'error';\n case '2':\n return 'revert';\n default:\n return value;\n }\n case FIELD_TYPES.sophiaCodeTypeInfo:\n return value.reduce(\n (acc: object, [funHash, fnName, argType, outType]: [\n funHash: Buffer,\n fnName: string,\n argType: string,\n outType: string,\n ]) => ({\n ...acc,\n [fnName.toString()]: { funHash, argType, outType },\n }),\n {},\n );\n default:\n if (typeof type === 'number') return value;\n return type.deserialize(value);\n }\n}\n\nfunction serializeField(value: any, type: FIELD_TYPES | Field, params: any): any {\n switch (type) {\n case FIELD_TYPES.abiVersion:\n case FIELD_TYPES.ttlType:\n return writeInt(value);\n case FIELD_TYPES.id:\n return writeId(value);\n case FIELD_TYPES.ids:\n return value.map(writeId);\n case FIELD_TYPES.bool:\n return Buffer.from([(value === true) ? 1 : 0]);\n case FIELD_TYPES.binary:\n return decode(value);\n case FIELD_TYPES.stateTree:\n return decode(value);\n case FIELD_TYPES.hex:\n return Buffer.from(value, 'hex');\n case FIELD_TYPES.signatures:\n return value.map(Buffer.from);\n case FIELD_TYPES.payload:\n return typeof value === 'string' && value.split('_')[0] === 'ba'\n ? decode(value as Encoded.Bytearray)\n : toBytes(value);\n case FIELD_TYPES.string:\n return toBytes(value);\n case FIELD_TYPES.pointers:\n return buildPointers(value);\n case FIELD_TYPES.rlpBinary:\n return value.rlpEncoded ?? value;\n case FIELD_TYPES.mptrees:\n return value.map((t: MPTree) => t.serialize());\n case FIELD_TYPES.ctVersion:\n return Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)]);\n case FIELD_TYPES.callReturnType:\n switch (value) {\n case 'ok': return writeInt(0);\n case 'error': return writeInt(1);\n case 'revert': return writeInt(2);\n default: return value;\n }\n default:\n if (typeof type === 'number') return value;\n // @ts-expect-error will be solved after removing the whole serializeField function\n return type.serialize(value, params);\n }\n}\n\nfunction validateField(\n value: any,\n type: FIELD_TYPES | Field,\n prefix?: Encoding | Encoding[],\n): string | undefined {\n // All fields are required\n if (value == null) return 'Field is required';\n\n // Validate type of value\n switch (type) {\n case FIELD_TYPES.id: {\n const prefixes = Array.isArray(prefix) ? prefix : [prefix];\n if (!prefixes.includes(value.split('_')[0])) {\n if (prefix == null) { return `'${String(value)}' prefix doesn't exist'`; }\n return `'${String(value)}' prefix doesn't match expected prefix '${prefix.toString()}'`;\n }\n return undefined;\n }\n case FIELD_TYPES.ctVersion:\n if (!(Boolean(value.abiVersion) && Boolean(value.vmVersion))) {\n return 'Value must be an object with \"vmVersion\" and \"abiVersion\" fields';\n }\n return undefined;\n case FIELD_TYPES.pointers:\n if (!Array.isArray(value)) return 'Value must be of type Array';\n if (value.some((p: NamePointer) => !(Boolean(p.key) && Boolean(p.id)))) {\n return 'Value must contains only object\\'s like \\'{key: \"account_pubkey\", id: \"ak_lkamsflkalsdalksdlasdlasdlamd\"}\\'';\n }\n if (value.length > 32) {\n return `Expected 32 pointers or less, got ${value.length} instead`;\n }\n return undefined;\n default:\n return undefined;\n }\n}\n\n/**\n * Validate transaction params\n * @category transaction builder\n * @param params - Object with tx params\n * @param schema - Transaction schema\n * @param excludeKeys - Array of keys to exclude for validation\n * @returns Object with validation errors\n */\nexport function validateParams(\n params: any,\n schema: TxField[],\n { excludeKeys = [] }: { excludeKeys: string[] },\n): object {\n return Object.fromEntries(\n schema\n // TODO: allow optional keys in schema\n .filter(([key]) => !excludeKeys.includes(key)\n && !['payload', 'nameFee', 'deposit', 'gasPrice', 'fee', 'gasLimit'].includes(key))\n .map(([key, type, prefix]) => [key, validateField(params[key], type, prefix)])\n .filter(([, message]) => message),\n );\n}\n\n/**\n * Unpack binary transaction\n * @category transaction builder\n * @param binary - Array with binary transaction field's\n * @param schema - Transaction schema\n * @returns Object with transaction field's\n */\nexport function unpackRawTx<Tx extends TxSchema>(\n binary: Uint8Array | NestedUint8Array,\n schema: TxField[],\n): RawTxObject<Tx> {\n return schema\n .reduce<any>(\n (\n acc,\n [key, fieldType, prefix],\n index,\n ) => Object.assign(acc, { [key]: deserializeField(binary[index], fieldType, prefix) }),\n {},\n );\n}\n\n/**\n * @category transaction builder\n */\nexport interface BuiltTx<Tx extends TxSchema, Prefix extends Encoding> {\n tx: Encoded.Generic<Prefix>;\n rlpEncoded: Uint8Array;\n binary: Uint8Array;\n txObject: RawTxObject<Tx>;\n}\n\n/**\n * Build transaction hash\n * @category transaction builder\n * @param _params - Object with tx params\n * @param type - Transaction type\n * @param options - options\n * @param options.excludeKeys - Array of keys to exclude for validation and build\n * @param options.denomination - Denomination of amounts\n * @param options.prefix - Prefix of transaction\n * @throws {@link InvalidTxParamsError}\n * @returns object\n * @returns object.tx Base64Check transaction hash with 'tx_' prefix\n * @returns object.rlpEncoded rlp encoded transaction\n * @returns object.binary binary transaction\n */\nexport function buildTx<TxType extends Tag, Prefix>(\n _params: Omit<TxTypeSchemas[TxType], 'tag' | 'VSN'> & { VSN?: number },\n type: TxType,\n {\n excludeKeys = [],\n prefix = Encoding.Transaction,\n vsn,\n denomination = AE_AMOUNT_FORMATS.AETTOS,\n }: {\n excludeKeys?: string[];\n prefix?: Encoding;\n vsn?: number;\n denomination?: AE_AMOUNT_FORMATS;\n } = {},\n): BuiltTx<TxSchema, Prefix extends Encoding ? Prefix : Encoding.Transaction> {\n const schemas = TX_SCHEMA[type];\n\n vsn ??= Math.max(...Object.keys(schemas).map((a) => +a));\n if (!isKeyOfObject(vsn, schemas)) throw new SchemaNotFoundError('serialization', Tag[type], vsn);\n\n const schema = schemas[vsn] as unknown as TxField[];\n\n const params = _params as TxParamsCommon & { onNode: Node; denomination?: AE_AMOUNT_FORMATS };\n params.VSN = vsn;\n params.tag = type;\n params.denomination = denomination;\n const filteredSchema = schema.filter(([key]) => !excludeKeys.includes(key));\n\n // Validation\n const valid = validateParams(params, schema, { excludeKeys });\n if (Object.keys(valid).length > 0) {\n throw new InvalidTxParamsError(`Transaction build error. ${JSON.stringify(valid)}`);\n }\n\n const binary = filteredSchema\n .map(([key, fieldType]: [keyof TxSchema, FIELD_TYPES, Encoding]) => (\n serializeField(\n params[key],\n fieldType,\n {\n ...params,\n txType: type,\n rebuildTx: (overrideParams: any) => buildTx(\n { ...params, ...overrideParams },\n type,\n {\n excludeKeys, prefix: Encoding.Transaction, vsn, denomination,\n },\n ),\n },\n )\n ))\n .filter((e) => e !== undefined);\n\n const rlpEncoded = rlpEncode(binary);\n const tx = encode(rlpEncoded, prefix);\n return {\n tx,\n rlpEncoded,\n binary,\n txObject: unpackRawTx<TxTypeSchemas[Tag]>(binary, schema),\n } as any;\n}\n\n/**\n * @category transaction builder\n */\nexport interface TxUnpacked<Tx extends TxSchema> {\n txType: Tag;\n tx: RawTxObject<Tx>;\n rlpEncoded: Uint8Array;\n}\n/**\n * Unpack transaction hash\n * @category transaction builder\n * @param encodedTx - Transaction to unpack\n * @param txType - Expected transaction type\n * @returns object\n * @returns object.tx Object with transaction param's\n * @returns object.txType Transaction type\n */\nexport function unpackTx<TxType extends Tag>(\n encodedTx: Encoded.Transaction | Encoded.Poi,\n txType?: TxType,\n): TxUnpacked<TxTypeSchemas[TxType]> {\n const rlpEncoded = decode(encodedTx);\n const binary = rlpDecode(rlpEncoded);\n const objId = +readInt(binary[0] as Buffer);\n if (!isKeyOfObject(objId, TX_SCHEMA)) throw new DecodeError(`Unknown transaction tag: ${objId}`);\n if (txType != null && txType !== objId) throw new DecodeError(`Expected transaction to have ${Tag[txType]} tag, got ${Tag[objId]} instead`);\n const vsn = +readInt(binary[1] as Buffer);\n if (!isKeyOfObject(vsn, TX_SCHEMA[objId])) throw new SchemaNotFoundError('deserialization', `tag ${objId}`, vsn);\n const schema = TX_SCHEMA[objId][vsn];\n return {\n txType: objId,\n tx: unpackRawTx<TxTypeSchemas[TxType]>(binary, schema),\n rlpEncoded,\n };\n}\n\n/**\n * Build a transaction hash\n * @category transaction builder\n * @param rawTx - base64 or rlp encoded transaction\n * @returns Transaction hash\n */\nexport function buildTxHash(rawTx: Encoded.Transaction | Uint8Array): Encoded.TxHash {\n const data = typeof rawTx === 'string' && rawTx.startsWith('tx_')\n ? decode(rawTx)\n : rawTx;\n return encode(hash(data), Encoding.TxHash);\n}\n\n/**\n * Build a contract public key by contractCreateTx or gaAttach\n * @category contract\n * @param contractTx - Transaction\n * @returns Contract public key\n */\nexport function buildContractIdByContractTx(\n contractTx: Encoded.Transaction,\n): Encoded.ContractAddress {\n const { txType, tx } = unpackTx<Tag.ContractCreateTx | Tag.GaAttachTx>(contractTx);\n if (![Tag.ContractCreateTx, Tag.GaAttachTx].includes(txType)) {\n throw new ArgumentError('contractCreateTx', 'a contractCreateTx or gaAttach', txType);\n }\n return buildContractId(tx.ownerId, +tx.nonce);\n}\n"],"mappings":"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"}
|