@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
package/es/tx/index.mjs
CHANGED
|
@@ -21,82 +21,24 @@
|
|
|
21
21
|
* the creation of transactions to {@link Node}.
|
|
22
22
|
* These methods provide ability to create native transactions.
|
|
23
23
|
*/
|
|
24
|
-
import {
|
|
25
|
-
import { Tag } from "./builder/constants.mjs";
|
|
26
|
-
import { ArgumentError,
|
|
24
|
+
import { TX_TTL } from "./builder/schema.mjs";
|
|
25
|
+
import { ConsensusProtocolVersion, Tag } from "./builder/constants.mjs";
|
|
26
|
+
import { ArgumentError, InvalidTxParamsError } from "../utils/errors.mjs";
|
|
27
27
|
import { buildTx as syncBuildTx, unpackTx } from "./builder/index.mjs";
|
|
28
|
-
import { isAccountNotFoundError
|
|
29
|
-
async function getVmVersion(txType, _ref) {
|
|
30
|
-
var _abiVersion, _vmVersion;
|
|
31
|
-
let {
|
|
32
|
-
vmVersion,
|
|
33
|
-
abiVersion,
|
|
34
|
-
onNode
|
|
35
|
-
} = _ref;
|
|
36
|
-
const {
|
|
37
|
-
consensusProtocolVersion
|
|
38
|
-
} = await onNode.getNodeInfo();
|
|
39
|
-
if (!isKeyOfObject(consensusProtocolVersion, PROTOCOL_VM_ABI)) {
|
|
40
|
-
throw new UnsupportedProtocolError('Not supported consensus protocol version');
|
|
41
|
-
}
|
|
42
|
-
const supportedProtocol = PROTOCOL_VM_ABI[consensusProtocolVersion];
|
|
43
|
-
if (!isKeyOfObject(txType, supportedProtocol)) {
|
|
44
|
-
throw new UnknownTxError('Not supported tx type');
|
|
45
|
-
}
|
|
46
|
-
const protocolForTX = supportedProtocol[txType];
|
|
47
|
-
(_abiVersion = abiVersion) !== null && _abiVersion !== void 0 ? _abiVersion : abiVersion = protocolForTX.abiVersion[0];
|
|
48
|
-
(_vmVersion = vmVersion) !== null && _vmVersion !== void 0 ? _vmVersion : vmVersion = protocolForTX.vmVersion[0];
|
|
49
|
-
return {
|
|
50
|
-
vmVersion,
|
|
51
|
-
abiVersion
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Calculate fee, get absolute ttl (ttl + height), get account nonce
|
|
57
|
-
* @category transaction builder
|
|
58
|
-
* @param txType - Type of transaction
|
|
59
|
-
* @param params - Object which contains all tx data
|
|
60
|
-
* @returns Object with account nonce, absolute ttl and transaction fee
|
|
61
|
-
*/
|
|
62
|
-
async function prepareTxParams(txType, _ref2) {
|
|
63
|
-
var _nonce;
|
|
64
|
-
let {
|
|
65
|
-
senderId,
|
|
66
|
-
nonce,
|
|
67
|
-
ttl = TX_TTL,
|
|
68
|
-
absoluteTtl,
|
|
69
|
-
strategy,
|
|
70
|
-
onNode
|
|
71
|
-
} = _ref2;
|
|
72
|
-
(_nonce = nonce) !== null && _nonce !== void 0 ? _nonce : nonce = (await onNode.getAccountNextNonce(senderId, {
|
|
73
|
-
strategy
|
|
74
|
-
}).catch(error => {
|
|
75
|
-
if (!isAccountNotFoundError(error)) throw error;
|
|
76
|
-
return {
|
|
77
|
-
nextNonce: 1
|
|
78
|
-
};
|
|
79
|
-
})).nextNonce;
|
|
80
|
-
if (ttl !== 0) {
|
|
81
|
-
if (ttl < 0) throw new ArgumentError('ttl', 'greater or equal to 0', ttl);
|
|
82
|
-
ttl += absoluteTtl === true ? 0 : (await onNode.getCurrentKeyBlock()).height;
|
|
83
|
-
}
|
|
84
|
-
return {
|
|
85
|
-
ttl,
|
|
86
|
-
nonce
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
|
|
28
|
+
import { isAccountNotFoundError } from "../utils/other.mjs";
|
|
90
29
|
// TODO: find a better name or rearrange methods
|
|
91
30
|
/**
|
|
92
31
|
* @category transaction builder
|
|
93
32
|
*/
|
|
94
|
-
export async function _buildTx(txType,
|
|
33
|
+
export async function _buildTx(txType, _ref) {
|
|
34
|
+
var _params$nonce, _params$ttl;
|
|
95
35
|
let {
|
|
96
36
|
denomination,
|
|
97
37
|
absoluteTtl,
|
|
38
|
+
strategy,
|
|
39
|
+
onNode,
|
|
98
40
|
..._params
|
|
99
|
-
} =
|
|
41
|
+
} = _ref;
|
|
100
42
|
// TODO: avoid this assertion
|
|
101
43
|
const params = _params;
|
|
102
44
|
let senderKey;
|
|
@@ -137,19 +79,12 @@ export async function _buildTx(txType, _ref3) {
|
|
|
137
79
|
default:
|
|
138
80
|
throw new ArgumentError('txType', 'valid transaction type', txType);
|
|
139
81
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
}
|
|
147
|
-
if ([Tag.ContractCallTx, Tag.GaMetaTx].includes(txType)) {
|
|
148
|
-
params.abiVersion = (await getVmVersion(Tag.ContractCallTx, params)).abiVersion;
|
|
149
|
-
}
|
|
150
|
-
if (txType === Tag.OracleRegisterTx) {
|
|
151
|
-
var _params$abiVersion;
|
|
152
|
-
(_params$abiVersion = params.abiVersion) !== null && _params$abiVersion !== void 0 ? _params$abiVersion : params.abiVersion = ABI_VERSIONS.NO_ABI;
|
|
82
|
+
if (Object.keys(ConsensusProtocolVersion).length !== 2 && ((Tag.ContractCreateTx === txType || Tag.GaAttachTx === txType) && params.ctVersion == null || (Tag.ContractCallTx === txType || Tag.GaMetaTx === txType) && params.abiVersion == null)) {
|
|
83
|
+
const {
|
|
84
|
+
consensusProtocolVersion
|
|
85
|
+
} = await onNode.getNodeInfo();
|
|
86
|
+
// @ts-expect-error remove after fixing buildTx types
|
|
87
|
+
params.consensusProtocolVersion = consensusProtocolVersion;
|
|
153
88
|
}
|
|
154
89
|
if (txType === Tag.PayingForTx) {
|
|
155
90
|
params.tx = unpackTx(params.tx);
|
|
@@ -157,16 +92,24 @@ export async function _buildTx(txType, _ref3) {
|
|
|
157
92
|
const senderId = params[senderKey];
|
|
158
93
|
// TODO: do this check on TypeScript level
|
|
159
94
|
if (senderId == null) throw new InvalidTxParamsError(`Transaction field ${senderKey} is missed`);
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
95
|
+
(_params$nonce = params.nonce) !== null && _params$nonce !== void 0 ? _params$nonce : params.nonce = (await onNode.getAccountNextNonce(senderId, {
|
|
96
|
+
strategy
|
|
97
|
+
}).catch(error => {
|
|
98
|
+
if (!isAccountNotFoundError(error)) throw error;
|
|
99
|
+
return {
|
|
100
|
+
nextNonce: 1
|
|
101
|
+
};
|
|
102
|
+
})).nextNonce;
|
|
103
|
+
(_params$ttl = params.ttl) !== null && _params$ttl !== void 0 ? _params$ttl : params.ttl = TX_TTL;
|
|
104
|
+
if (params.ttl !== 0) {
|
|
105
|
+
if (params.ttl < 0) throw new ArgumentError('ttl', 'greater or equal to 0', params.ttl);
|
|
106
|
+
params.ttl += absoluteTtl === true ? 0 : (await onNode.getCurrentKeyBlock()).height;
|
|
107
|
+
}
|
|
165
108
|
return syncBuildTx({
|
|
166
109
|
...params,
|
|
167
|
-
|
|
168
|
-
},
|
|
110
|
+
tag: txType
|
|
111
|
+
}, {
|
|
169
112
|
denomination
|
|
170
|
-
})
|
|
113
|
+
});
|
|
171
114
|
}
|
|
172
115
|
//# sourceMappingURL=index.mjs.map
|
package/es/tx/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["ABI_VERSIONS","PROTOCOL_VM_ABI","TX_TTL","Tag","ArgumentError","UnsupportedProtocolError","UnknownTxError","InvalidTxParamsError","buildTx","syncBuildTx","unpackTx","isAccountNotFoundError","isKeyOfObject","getVmVersion","txType","vmVersion","abiVersion","onNode","consensusProtocolVersion","getNodeInfo","supportedProtocol","protocolForTX","prepareTxParams","senderId","nonce","ttl","absoluteTtl","strategy","getAccountNextNonce","catch","error","nextNonce","getCurrentKeyBlock","height","_buildTx","denomination","_params","params","senderKey","SpendTx","OracleQueryTx","NameClaimTx","NameUpdateTx","NameRevokeTx","NameTransferTx","NamePreclaimTx","OracleRegisterTx","ContractCreateTx","GaAttachTx","GaMetaTx","ContractCallTx","OracleExtendTx","OracleResponseTx","ChannelCloseSoloTx","ChannelSlashTx","ChannelSettleTx","ChannelSnapshotSoloTx","PayingForTx","includes","ctVersion","NO_ABI","tx","extraParams"],"sources":["../../src/tx/index.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Transaction methods\n *\n * This is implementation of [Tx](api/tx.md) relays\n * the creation of transactions to {@link Node}.\n * These methods provide ability to create native transactions.\n */\nimport BigNumber from 'bignumber.js';\nimport {\n ABI_VERSIONS, CtVersion, PROTOCOL_VM_ABI, TX_TTL, TxParamsCommon,\n} from './builder/schema';\nimport { Tag } from './builder/constants';\nimport {\n ArgumentError, UnsupportedProtocolError, UnknownTxError, InvalidTxParamsError,\n} from '../utils/errors';\nimport Node from '../Node';\nimport { Encoded } from '../utils/encoder';\nimport { buildTx as syncBuildTx, unpackTx } from './builder/index';\nimport { isAccountNotFoundError, isKeyOfObject } from '../utils/other';\nimport { AE_AMOUNT_FORMATS } from '../utils/amount-formatter';\n\ntype Int = number | string | BigNumber;\n\nexport type BuildTxOptions <TxType extends Tag, OmitFields extends string> =\n Omit<Parameters<typeof _buildTx<TxType>>[1], OmitFields>;\n\n/**\n * Validated vm/abi version or get default based on transaction type and NODE version\n * @category transaction builder\n * @param txType - Type of transaction\n * @param ctVersion - Object with vm and abi version fields\n * @returns Object with vm/abi version\n */\nasync function getVmVersion(\n txType: Tag.ContractCreateTx, ctVersion: Partial<CtVersion> & { onNode: Node }\n): Promise<CtVersion>;\nasync function getVmVersion(\n txType: Tag, ctVersion: Partial<Pick<CtVersion, 'abiVersion'>> & { onNode: Node }\n): Promise<Pick<CtVersion, 'abiVersion'>>;\nasync function getVmVersion(\n txType: Tag,\n { vmVersion, abiVersion, onNode }: Partial<CtVersion> & { onNode: Node },\n): Promise<Partial<CtVersion>> {\n const { consensusProtocolVersion } = await onNode.getNodeInfo();\n if (!isKeyOfObject(consensusProtocolVersion, PROTOCOL_VM_ABI)) {\n throw new UnsupportedProtocolError('Not supported consensus protocol version');\n }\n const supportedProtocol = PROTOCOL_VM_ABI[consensusProtocolVersion];\n if (!isKeyOfObject(txType, supportedProtocol)) {\n throw new UnknownTxError('Not supported tx type');\n }\n const protocolForTX = supportedProtocol[txType];\n abiVersion ??= protocolForTX.abiVersion[0];\n vmVersion ??= protocolForTX.vmVersion[0];\n return { vmVersion, abiVersion };\n}\n\n/**\n * Calculate fee, get absolute ttl (ttl + height), get account nonce\n * @category transaction builder\n * @param txType - Type of transaction\n * @param params - Object which contains all tx data\n * @returns Object with account nonce, absolute ttl and transaction fee\n */\nasync function prepareTxParams(\n txType: Tag,\n {\n senderId,\n nonce,\n ttl = TX_TTL,\n absoluteTtl,\n strategy,\n onNode,\n }: {\n senderId: Encoded.AccountAddress;\n absoluteTtl?: boolean;\n strategy?: 'continuity' | 'max';\n onNode: Node;\n } & Pick<TxParamsCommon, 'nonce' | 'ttl'>,\n): Promise<{ ttl: number; nonce: number }> {\n nonce ??= (\n await onNode.getAccountNextNonce(senderId, { strategy }).catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { nextNonce: 1 };\n })\n ).nextNonce;\n\n if (ttl !== 0) {\n if (ttl < 0) throw new ArgumentError('ttl', 'greater or equal to 0', ttl);\n ttl += absoluteTtl === true ? 0 : (await onNode.getCurrentKeyBlock()).height;\n }\n\n return { ttl, nonce };\n}\n\n// TODO: find a better name or rearrange methods\n/**\n * @category transaction builder\n */\nexport async function _buildTx<TxType extends Tag>(\n txType: TxType,\n { denomination, absoluteTtl, ..._params }:\n Omit<Parameters<typeof syncBuildTx<TxType, 'tx'>>[0], 'fee' | 'nonce' | 'ttl' | 'ctVersion' | 'abiVersion'>\n & {\n onNode: Node;\n fee?: Int;\n nonce?: number;\n ttl?: number;\n denomination?: AE_AMOUNT_FORMATS;\n absoluteTtl?: boolean;\n }\n & (TxType extends Tag.OracleExtendTx | Tag.OracleResponseTx\n ? { callerId: Encoded.AccountAddress } : {})\n & (TxType extends Tag.ContractCreateTx | Tag.GaAttachTx ? { ctVersion?: CtVersion } : {})\n & (TxType extends Tag.ContractCallTx | Tag.OracleRegisterTx\n ? { abiVersion?: ABI_VERSIONS } : {}),\n): Promise<Encoded.Transaction> {\n // TODO: avoid this assertion\n const params = _params as unknown as TxParamsCommon & { onNode: Node };\n let senderKey: keyof TxParamsCommon | '<absent>';\n switch (txType) {\n case Tag.SpendTx:\n case Tag.OracleQueryTx:\n senderKey = 'senderId';\n break;\n case Tag.NameClaimTx:\n case Tag.NameUpdateTx:\n case Tag.NameRevokeTx:\n case Tag.NameTransferTx:\n case Tag.NamePreclaimTx:\n case Tag.OracleRegisterTx:\n senderKey = 'accountId';\n break;\n case Tag.ContractCreateTx:\n case Tag.GaAttachTx:\n senderKey = 'ownerId';\n break;\n case Tag.GaMetaTx:\n senderKey = 'gaId';\n break;\n case Tag.ContractCallTx:\n case Tag.OracleExtendTx:\n case Tag.OracleResponseTx:\n senderKey = 'callerId';\n break;\n case Tag.ChannelCloseSoloTx:\n case Tag.ChannelSlashTx:\n case Tag.ChannelSettleTx:\n case Tag.ChannelSnapshotSoloTx:\n senderKey = 'fromId';\n break;\n case Tag.PayingForTx:\n senderKey = 'payerId';\n break;\n default:\n throw new ArgumentError('txType', 'valid transaction type', txType);\n }\n // TODO: move specific cases to field-types\n if ([Tag.ContractCreateTx, Tag.GaAttachTx].includes(txType)) {\n params.ctVersion = await getVmVersion(\n Tag.ContractCreateTx,\n { ...params, ...params.ctVersion },\n );\n }\n if ([Tag.ContractCallTx, Tag.GaMetaTx].includes(txType)) {\n params.abiVersion = (await getVmVersion(Tag.ContractCallTx, params)).abiVersion;\n }\n if (txType === Tag.OracleRegisterTx) {\n params.abiVersion ??= ABI_VERSIONS.NO_ABI;\n }\n if (txType === Tag.PayingForTx) {\n params.tx = unpackTx(params.tx);\n }\n const senderId = params[senderKey];\n // TODO: do this check on TypeScript level\n if (senderId == null) throw new InvalidTxParamsError(`Transaction field ${senderKey} is missed`);\n const extraParams = await prepareTxParams(txType, { ...params, senderId, absoluteTtl });\n return syncBuildTx({ ...params, ...extraParams } as any, txType, { denomination }).tx;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["TX_TTL","ConsensusProtocolVersion","Tag","ArgumentError","InvalidTxParamsError","buildTx","syncBuildTx","unpackTx","isAccountNotFoundError","_buildTx","txType","denomination","absoluteTtl","strategy","onNode","_params","params","senderKey","SpendTx","OracleQueryTx","NameClaimTx","NameUpdateTx","NameRevokeTx","NameTransferTx","NamePreclaimTx","OracleRegisterTx","ContractCreateTx","GaAttachTx","GaMetaTx","ContractCallTx","OracleExtendTx","OracleResponseTx","ChannelCloseSoloTx","ChannelSlashTx","ChannelSettleTx","ChannelSnapshotSoloTx","PayingForTx","Object","keys","length","ctVersion","abiVersion","consensusProtocolVersion","getNodeInfo","tx","senderId","nonce","getAccountNextNonce","catch","error","nextNonce","ttl","getCurrentKeyBlock","height","tag"],"sources":["../../src/tx/index.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Transaction methods\n *\n * This is implementation of [Tx](api/tx.md) relays\n * the creation of transactions to {@link Node}.\n * These methods provide ability to create native transactions.\n */\nimport { TX_TTL, TxParamsCommon } from './builder/schema';\nimport { ConsensusProtocolVersion, Tag } from './builder/constants';\nimport { ArgumentError, InvalidTxParamsError } from '../utils/errors';\nimport Node from '../Node';\nimport { Encoded } from '../utils/encoder';\nimport { buildTx as syncBuildTx, unpackTx } from './builder/index';\nimport { isAccountNotFoundError } from '../utils/other';\nimport { AE_AMOUNT_FORMATS } from '../utils/amount-formatter';\n\nexport type BuildTxOptions <TxType extends Tag, OmitFields extends string> =\n Omit<Parameters<typeof _buildTx<TxType>>[1], OmitFields>;\n\n// TODO: find a better name or rearrange methods\n/**\n * @category transaction builder\n */\nexport async function _buildTx<TxType extends Tag>(\n txType: TxType,\n {\n denomination, absoluteTtl, strategy, onNode, ..._params\n }: Omit<Parameters<typeof syncBuildTx<TxType>>[0], 'tag' | 'nonce' | 'ttl'>\n & {\n denomination?: AE_AMOUNT_FORMATS;\n absoluteTtl?: boolean;\n strategy?: 'continuity' | 'max';\n onNode: Node;\n ttl?: number;\n nonce?: number;\n }\n & (TxType extends Tag.OracleExtendTx | Tag.OracleResponseTx\n ? { callerId: Encoded.AccountAddress } : {}),\n): Promise<Encoded.Transaction> {\n // TODO: avoid this assertion\n const params = _params as unknown as TxParamsCommon & { onNode: Node };\n let senderKey: keyof TxParamsCommon | '<absent>';\n switch (txType) {\n case Tag.SpendTx:\n case Tag.OracleQueryTx:\n senderKey = 'senderId';\n break;\n case Tag.NameClaimTx:\n case Tag.NameUpdateTx:\n case Tag.NameRevokeTx:\n case Tag.NameTransferTx:\n case Tag.NamePreclaimTx:\n case Tag.OracleRegisterTx:\n senderKey = 'accountId';\n break;\n case Tag.ContractCreateTx:\n case Tag.GaAttachTx:\n senderKey = 'ownerId';\n break;\n case Tag.GaMetaTx:\n senderKey = 'gaId';\n break;\n case Tag.ContractCallTx:\n case Tag.OracleExtendTx:\n case Tag.OracleResponseTx:\n senderKey = 'callerId';\n break;\n case Tag.ChannelCloseSoloTx:\n case Tag.ChannelSlashTx:\n case Tag.ChannelSettleTx:\n case Tag.ChannelSnapshotSoloTx:\n senderKey = 'fromId';\n break;\n case Tag.PayingForTx:\n senderKey = 'payerId';\n break;\n default:\n throw new ArgumentError('txType', 'valid transaction type', txType);\n }\n\n if (\n Object.keys(ConsensusProtocolVersion).length !== 2\n && (((Tag.ContractCreateTx === txType || Tag.GaAttachTx === txType) && params.ctVersion == null)\n || ((Tag.ContractCallTx === txType || Tag.GaMetaTx === txType) && params.abiVersion == null))\n ) {\n const { consensusProtocolVersion } = await onNode.getNodeInfo();\n // @ts-expect-error remove after fixing buildTx types\n params.consensusProtocolVersion = consensusProtocolVersion;\n }\n\n if (txType === Tag.PayingForTx) {\n params.tx = unpackTx(params.tx);\n }\n const senderId = params[senderKey];\n // TODO: do this check on TypeScript level\n if (senderId == null) throw new InvalidTxParamsError(`Transaction field ${senderKey} is missed`);\n\n params.nonce ??= (\n await onNode.getAccountNextNonce(senderId, { strategy }).catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { nextNonce: 1 };\n })\n ).nextNonce;\n\n params.ttl ??= TX_TTL;\n if (params.ttl !== 0) {\n if (params.ttl < 0) throw new ArgumentError('ttl', 'greater or equal to 0', params.ttl);\n params.ttl += absoluteTtl === true ? 0 : (await onNode.getCurrentKeyBlock()).height;\n }\n\n return syncBuildTx({ ...params, tag: txType } as any, { denomination });\n}\n"],"mappings":"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"}
|
package/es/tx/validator.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Encoded } from '../utils/encoder';
|
|
1
|
+
import { unpackTx } from './builder';
|
|
3
2
|
import Node from '../Node';
|
|
4
3
|
export interface ValidatorResult {
|
|
5
4
|
message: string;
|
|
@@ -8,13 +7,12 @@ export interface ValidatorResult {
|
|
|
8
7
|
}
|
|
9
8
|
/**
|
|
10
9
|
* Transaction Validator
|
|
11
|
-
* This function validates some
|
|
10
|
+
* This function validates some transaction properties,
|
|
12
11
|
* to make sure it can be posted it to the chain
|
|
13
12
|
* @category transaction builder
|
|
14
13
|
* @param transaction - Base64Check-encoded transaction
|
|
15
14
|
* @param nodeNotCached - Node to validate transaction against
|
|
16
|
-
* @param parentTxTypes - Types of parent transactions
|
|
17
15
|
* @returns Array with verification errors
|
|
18
16
|
* @example const errors = await verifyTransaction(transaction, node)
|
|
19
17
|
*/
|
|
20
|
-
export default function verifyTransaction(transaction:
|
|
18
|
+
export default function verifyTransaction(transaction: Parameters<typeof unpackTx>[0], nodeNotCached: Node): Promise<ValidatorResult[]>;
|
package/es/tx/validator.mjs
CHANGED
|
@@ -4,48 +4,18 @@ const {
|
|
|
4
4
|
} = _buffer;
|
|
5
5
|
import BigNumber from 'bignumber.js';
|
|
6
6
|
import { hash, verify } from "../utils/crypto.mjs";
|
|
7
|
-
import {
|
|
7
|
+
import { ProtocolToVmAbi } from "./builder/field-types/ct-version.mjs";
|
|
8
8
|
import { Tag } from "./builder/constants.mjs";
|
|
9
|
-
import { unpackTx } from "./builder/index.mjs";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { encode, Encoding } from "../utils/encoder.mjs";
|
|
9
|
+
import { buildTx, unpackTx } from "./builder/index.mjs";
|
|
10
|
+
import { concatBuffers, isAccountNotFoundError } from "../utils/other.mjs";
|
|
11
|
+
import { decode } from "../utils/encoder.mjs";
|
|
13
12
|
import Node from "../Node.mjs";
|
|
14
13
|
import { genAggressiveCacheGetResponsesPolicy } from "../utils/autorest.mjs";
|
|
15
14
|
const validators = [];
|
|
16
15
|
const getSenderAddress = tx => ['senderId', 'accountId', 'ownerId', 'callerId', 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId'].map(key => tx[key]).filter(a => a).map(a => a === null || a === void 0 ? void 0 : a.toString().replace(/^ok_/, 'ak_'))[0];
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Transaction Validator
|
|
20
|
-
* This function validates some of transaction properties,
|
|
21
|
-
* to make sure it can be posted it to the chain
|
|
22
|
-
* @category transaction builder
|
|
23
|
-
* @param transaction - Base64Check-encoded transaction
|
|
24
|
-
* @param nodeNotCached - Node to validate transaction against
|
|
25
|
-
* @param parentTxTypes - Types of parent transactions
|
|
26
|
-
* @returns Array with verification errors
|
|
27
|
-
* @example const errors = await verifyTransaction(transaction, node)
|
|
28
|
-
*/
|
|
29
|
-
export default async function verifyTransaction(transaction, nodeNotCached) {
|
|
16
|
+
async function verifyTransactionInternal(tx, node, parentTxTypes) {
|
|
30
17
|
var _getSenderAddress;
|
|
31
|
-
|
|
32
|
-
let node = nodeNotCached;
|
|
33
|
-
if (!node.pipeline.getOrderedPolicies().some(_ref => {
|
|
34
|
-
let {
|
|
35
|
-
name
|
|
36
|
-
} = _ref;
|
|
37
|
-
return name === 'aggressive-cache-get-responses';
|
|
38
|
-
})) {
|
|
39
|
-
node = new Node(nodeNotCached.$host, {
|
|
40
|
-
ignoreVersion: true
|
|
41
|
-
});
|
|
42
|
-
node.pipeline.addPolicy(genAggressiveCacheGetResponsesPolicy());
|
|
43
|
-
}
|
|
44
|
-
const {
|
|
45
|
-
tx,
|
|
46
|
-
txType
|
|
47
|
-
} = unpackTx(transaction);
|
|
48
|
-
const address = (_getSenderAddress = getSenderAddress(tx)) !== null && _getSenderAddress !== void 0 ? _getSenderAddress : txType === Tag.SignedTx ? getSenderAddress(tx.encodedTx.tx) : undefined;
|
|
18
|
+
const address = (_getSenderAddress = getSenderAddress(tx)) !== null && _getSenderAddress !== void 0 ? _getSenderAddress : tx.tag === Tag.SignedTx ? getSenderAddress(tx.encodedTx) : undefined;
|
|
49
19
|
const [account, {
|
|
50
20
|
height
|
|
51
21
|
}, {
|
|
@@ -65,7 +35,6 @@ export default async function verifyTransaction(transaction, nodeNotCached) {
|
|
|
65
35
|
id: acc.id
|
|
66
36
|
})), node.getCurrentKeyBlockHeight(), node.getNodeInfo()]);
|
|
67
37
|
return (await Promise.all(validators.map(v => v(tx, {
|
|
68
|
-
txType,
|
|
69
38
|
node,
|
|
70
39
|
account,
|
|
71
40
|
height,
|
|
@@ -74,48 +43,67 @@ export default async function verifyTransaction(transaction, nodeNotCached) {
|
|
|
74
43
|
parentTxTypes
|
|
75
44
|
})))).flat();
|
|
76
45
|
}
|
|
77
|
-
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Transaction Validator
|
|
49
|
+
* This function validates some transaction properties,
|
|
50
|
+
* to make sure it can be posted it to the chain
|
|
51
|
+
* @category transaction builder
|
|
52
|
+
* @param transaction - Base64Check-encoded transaction
|
|
53
|
+
* @param nodeNotCached - Node to validate transaction against
|
|
54
|
+
* @returns Array with verification errors
|
|
55
|
+
* @example const errors = await verifyTransaction(transaction, node)
|
|
56
|
+
*/
|
|
57
|
+
export default async function verifyTransaction(transaction, nodeNotCached) {
|
|
58
|
+
const node = new Node(nodeNotCached.$host, {
|
|
59
|
+
ignoreVersion: true
|
|
60
|
+
});
|
|
61
|
+
node.pipeline.addPolicy(genAggressiveCacheGetResponsesPolicy());
|
|
62
|
+
return verifyTransactionInternal(unpackTx(transaction), node, []);
|
|
63
|
+
}
|
|
64
|
+
validators.push((_ref, _ref2) => {
|
|
78
65
|
let {
|
|
79
66
|
encodedTx,
|
|
80
67
|
signatures
|
|
81
|
-
} =
|
|
68
|
+
} = _ref;
|
|
82
69
|
let {
|
|
83
70
|
account,
|
|
84
71
|
nodeNetworkId,
|
|
85
72
|
parentTxTypes
|
|
86
|
-
} =
|
|
87
|
-
if ((encodedTx !== null && encodedTx !== void 0 ? encodedTx : signatures)
|
|
73
|
+
} = _ref2;
|
|
74
|
+
if ((encodedTx !== null && encodedTx !== void 0 ? encodedTx : signatures) == null) return [];
|
|
88
75
|
if (account == null) return [];
|
|
89
|
-
if (signatures.length !== 1) return []; // TODO: Support multisignature
|
|
76
|
+
if (signatures.length !== 1) return []; // TODO: Support multisignature like in state channels
|
|
90
77
|
const prefix = _Buffer.from([nodeNetworkId, ...(parentTxTypes.includes(Tag.PayingForTx) ? ['inner_tx'] : [])].join('-'));
|
|
91
|
-
const
|
|
92
|
-
const
|
|
78
|
+
const txBinary = decode(buildTx(encodedTx));
|
|
79
|
+
const txWithNetworkId = concatBuffers([prefix, txBinary]);
|
|
80
|
+
const txHashWithNetworkId = concatBuffers([prefix, hash(txBinary)]);
|
|
93
81
|
if (verify(txWithNetworkId, signatures[0], account.id) || verify(txHashWithNetworkId, signatures[0], account.id)) return [];
|
|
94
82
|
return [{
|
|
95
83
|
message: 'Signature cannot be verified, please ensure that you transaction have' + ' the correct prefix and the correct private key for the sender address',
|
|
96
84
|
key: 'InvalidSignature',
|
|
97
85
|
checkedKeys: ['encodedTx', 'signatures']
|
|
98
86
|
}];
|
|
99
|
-
}, async (
|
|
87
|
+
}, async (_ref3, _ref4) => {
|
|
100
88
|
let {
|
|
101
89
|
encodedTx,
|
|
102
|
-
tx
|
|
103
|
-
|
|
90
|
+
tx,
|
|
91
|
+
tag
|
|
92
|
+
} = _ref3;
|
|
104
93
|
let {
|
|
105
94
|
node,
|
|
106
|
-
parentTxTypes
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}, (_ref6, _ref7) => {
|
|
95
|
+
parentTxTypes
|
|
96
|
+
} = _ref4;
|
|
97
|
+
if ((encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx) == null) return [];
|
|
98
|
+
return verifyTransactionInternal(encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx, node, [...parentTxTypes, tag]);
|
|
99
|
+
}, (_ref5, _ref6) => {
|
|
112
100
|
let {
|
|
113
101
|
ttl
|
|
114
|
-
} =
|
|
102
|
+
} = _ref5;
|
|
115
103
|
let {
|
|
116
104
|
height
|
|
117
|
-
} =
|
|
118
|
-
if (ttl
|
|
105
|
+
} = _ref6;
|
|
106
|
+
if (ttl == null) return [];
|
|
119
107
|
ttl = +ttl;
|
|
120
108
|
if (ttl === 0 || ttl >= height) return [];
|
|
121
109
|
return [{
|
|
@@ -123,43 +111,43 @@ validators.push((_ref2, _ref3) => {
|
|
|
123
111
|
key: 'ExpiredTTL',
|
|
124
112
|
checkedKeys: ['ttl']
|
|
125
113
|
}];
|
|
126
|
-
}, (
|
|
127
|
-
var
|
|
114
|
+
}, (_ref7, _ref8) => {
|
|
115
|
+
var _ref9, _fee;
|
|
128
116
|
let {
|
|
129
117
|
amount,
|
|
130
118
|
fee,
|
|
131
119
|
nameFee,
|
|
132
|
-
tx
|
|
133
|
-
|
|
120
|
+
tx,
|
|
121
|
+
tag
|
|
122
|
+
} = _ref7;
|
|
134
123
|
let {
|
|
135
124
|
account,
|
|
136
|
-
parentTxTypes
|
|
137
|
-
|
|
138
|
-
} = _ref9;
|
|
125
|
+
parentTxTypes
|
|
126
|
+
} = _ref8;
|
|
139
127
|
if (account == null) return [];
|
|
140
|
-
if (((
|
|
128
|
+
if (((_ref9 = amount !== null && amount !== void 0 ? amount : fee) !== null && _ref9 !== void 0 ? _ref9 : nameFee) == null) return [];
|
|
141
129
|
(_fee = fee) !== null && _fee !== void 0 ? _fee : fee = 0;
|
|
142
|
-
const cost = new BigNumber(fee).plus(nameFee !== null && nameFee !== void 0 ? nameFee : 0).plus(amount !== null && amount !== void 0 ? amount : 0).plus(
|
|
130
|
+
const cost = new BigNumber(fee).plus(nameFee !== null && nameFee !== void 0 ? nameFee : 0).plus(amount !== null && amount !== void 0 ? amount : 0).plus(tag === Tag.PayingForTx ? tx.encodedTx.fee : 0).minus(parentTxTypes.includes(Tag.PayingForTx) ? fee : 0);
|
|
143
131
|
if (cost.lte(account.balance.toString())) return [];
|
|
144
132
|
return [{
|
|
145
133
|
message: `Account balance ${account.balance.toString()} is not enough to execute the transaction that costs ${cost.toFixed()}`,
|
|
146
134
|
key: 'InsufficientBalance',
|
|
147
135
|
checkedKeys: ['amount', 'fee', 'nameFee']
|
|
148
136
|
}];
|
|
149
|
-
}, (
|
|
137
|
+
}, (_ref10, _ref11) => {
|
|
150
138
|
let {
|
|
151
|
-
signatures
|
|
152
|
-
|
|
139
|
+
signatures,
|
|
140
|
+
tag
|
|
141
|
+
} = _ref10;
|
|
153
142
|
let {
|
|
154
|
-
account
|
|
155
|
-
|
|
156
|
-
} = _ref12;
|
|
143
|
+
account
|
|
144
|
+
} = _ref11;
|
|
157
145
|
if (account == null) return [];
|
|
158
146
|
let message;
|
|
159
|
-
if (
|
|
147
|
+
if (tag === Tag.SignedTx && account.kind === 'generalized' && signatures.length !== 0) {
|
|
160
148
|
message = 'Generalized account can\'t be used to generate SignedTx with signatures';
|
|
161
149
|
}
|
|
162
|
-
if (
|
|
150
|
+
if (tag === Tag.GaMetaTx && account.kind === 'basic') {
|
|
163
151
|
message = 'Basic account can\'t be used to generate GaMetaTx';
|
|
164
152
|
}
|
|
165
153
|
if (message == null) return [];
|
|
@@ -168,14 +156,14 @@ validators.push((_ref2, _ref3) => {
|
|
|
168
156
|
key: 'InvalidAccountType',
|
|
169
157
|
checkedKeys: ['tag']
|
|
170
158
|
}];
|
|
171
|
-
}, (
|
|
159
|
+
}, (_ref12, _ref13) => {
|
|
172
160
|
let {
|
|
173
161
|
nonce
|
|
174
|
-
} =
|
|
162
|
+
} = _ref12;
|
|
175
163
|
let {
|
|
176
164
|
account,
|
|
177
165
|
parentTxTypes
|
|
178
|
-
} =
|
|
166
|
+
} = _ref13;
|
|
179
167
|
if (nonce == null || account == null || parentTxTypes.includes(Tag.GaMetaTx)) return [];
|
|
180
168
|
nonce = +nonce;
|
|
181
169
|
const validNonce = account.nonce + 1;
|
|
@@ -190,32 +178,31 @@ validators.push((_ref2, _ref3) => {
|
|
|
190
178
|
}),
|
|
191
179
|
checkedKeys: ['nonce']
|
|
192
180
|
}];
|
|
193
|
-
}, (
|
|
181
|
+
}, (_ref14, _ref15) => {
|
|
182
|
+
var _ref16, _ref17;
|
|
194
183
|
let {
|
|
195
184
|
ctVersion,
|
|
196
|
-
abiVersion
|
|
197
|
-
|
|
185
|
+
abiVersion,
|
|
186
|
+
tag
|
|
187
|
+
} = _ref14;
|
|
198
188
|
let {
|
|
199
|
-
txType,
|
|
200
189
|
consensusProtocolVersion
|
|
201
|
-
} =
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
const
|
|
190
|
+
} = _ref15;
|
|
191
|
+
const oracleCall = Tag.Oracle === tag || Tag.OracleRegisterTx === tag;
|
|
192
|
+
const contractCreate = Tag.ContractCreateTx === tag || Tag.GaAttachTx === tag;
|
|
193
|
+
const contractCall = Tag.ContractCallTx === tag || Tag.GaMetaTx === tag;
|
|
194
|
+
const type = (_ref16 = (_ref17 = oracleCall ? 'oracle-call' : null) !== null && _ref17 !== void 0 ? _ref17 : contractCreate ? 'contract-create' : null) !== null && _ref16 !== void 0 ? _ref16 : contractCall ? 'contract-call' : null;
|
|
195
|
+
if (type == null) return [];
|
|
196
|
+
// TODO: remove assertion after fixing buildTx types
|
|
197
|
+
const protocol = ProtocolToVmAbi[consensusProtocolVersion][type];
|
|
206
198
|
|
|
207
199
|
// If not contract create tx
|
|
208
200
|
if (ctVersion == null) ctVersion = {
|
|
209
201
|
abiVersion
|
|
210
202
|
};
|
|
211
|
-
|
|
212
|
-
if (txProtocol == null) return [];
|
|
213
|
-
if (Object.entries(ctVersion).some(_ref17 => {
|
|
214
|
-
let [key, value] = _ref17;
|
|
215
|
-
return !txProtocol[key].includes(+value);
|
|
216
|
-
})) {
|
|
203
|
+
if (!protocol.abiVersion.includes(ctVersion.abiVersion) || contractCreate && !protocol.vmVersion.includes(ctVersion.vmVersion)) {
|
|
217
204
|
return [{
|
|
218
|
-
message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(
|
|
205
|
+
message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(protocol)}`,
|
|
219
206
|
key: 'VmAndAbiVersionMismatch',
|
|
220
207
|
checkedKeys: ['ctVersion', 'abiVersion']
|
|
221
208
|
}];
|
|
@@ -223,13 +210,13 @@ validators.push((_ref2, _ref3) => {
|
|
|
223
210
|
return [];
|
|
224
211
|
}, async (_ref18, _ref19) => {
|
|
225
212
|
let {
|
|
226
|
-
contractId
|
|
213
|
+
contractId,
|
|
214
|
+
tag
|
|
227
215
|
} = _ref18;
|
|
228
216
|
let {
|
|
229
|
-
txType,
|
|
230
217
|
node
|
|
231
218
|
} = _ref19;
|
|
232
|
-
if (Tag.ContractCallTx !==
|
|
219
|
+
if (Tag.ContractCallTx !== tag) return [];
|
|
233
220
|
contractId = contractId;
|
|
234
221
|
try {
|
|
235
222
|
const {
|
package/es/tx/validator.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.mjs","names":["BigNumber","hash","verify","PROTOCOL_VM_ABI","Tag","unpackTx","UnsupportedProtocolError","concatBuffers","isAccountNotFoundError","isKeyOfObject","encode","Encoding","Node","genAggressiveCacheGetResponsesPolicy","validators","getSenderAddress","tx","map","key","filter","a","toString","replace","verifyTransaction","transaction","nodeNotCached","parentTxTypes","node","pipeline","getOrderedPolicies","some","name","$host","ignoreVersion","addPolicy","txType","address","SignedTx","encodedTx","undefined","account","height","consensusProtocolVersion","nodeNetworkId","Promise","all","getAccountByPubkey","catch","error","id","balance","nonce","then","acc","getCurrentKeyBlockHeight","getNodeInfo","v","flat","push","signatures","length","prefix","from","includes","PayingForTx","join","txWithNetworkId","rlpEncoded","txHashWithNetworkId","message","checkedKeys","Transaction","ttl","amount","fee","nameFee","cost","plus","minus","lte","toFixed","kind","GaMetaTx","validNonce","ctVersion","abiVersion","protocol","txProtocol","Object","entries","value","JSON","stringify","contractId","ContractCallTx","active","getContract","response","parsedBody","reason"],"sources":["../../src/tx/validator.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\nimport { hash, verify } from '../utils/crypto';\nimport {\n CtVersion,\n PROTOCOL_VM_ABI,\n RawTxObject,\n TxParamsCommon,\n TxSchema,\n TxTypeSchemas,\n} from './builder/schema';\nimport { Tag } from './builder/constants';\nimport { TxUnpacked, unpackTx } from './builder';\nimport { UnsupportedProtocolError } from '../utils/errors';\nimport { concatBuffers, isAccountNotFoundError, isKeyOfObject } from '../utils/other';\nimport { encode, Encoded, Encoding } from '../utils/encoder';\nimport Node, { TransformNodeType } from '../Node';\nimport { Account } from '../apis/node';\nimport { genAggressiveCacheGetResponsesPolicy } from '../utils/autorest';\n\nexport interface ValidatorResult {\n message: string;\n key: string;\n checkedKeys: string[];\n}\n\ntype Validator = (\n tx: {\n encodedTx: TxUnpacked<TxSchema>;\n signatures: Buffer[];\n tx: TxUnpacked<TxSchema> & {\n tx: TxTypeSchemas[Tag.SignedTx];\n };\n nonce?: number;\n ttl?: number;\n amount?: number;\n fee?: number;\n nameFee?: number;\n ctVersion?: Partial<CtVersion>;\n abiVersion?: number;\n contractId?: Encoded.ContractAddress;\n },\n options: {\n // TODO: remove after fixing node types\n account?: TransformNodeType<Account> & { id: Encoded.AccountAddress };\n nodeNetworkId: string;\n parentTxTypes: Tag[];\n node: Node;\n txType: Tag;\n height: number;\n consensusProtocolVersion: number;\n }\n) => ValidatorResult[] | Promise<ValidatorResult[]>;\n\nconst validators: Validator[] = [];\n\nconst getSenderAddress = (\n tx: TxParamsCommon | RawTxObject<TxSchema>,\n): Encoded.AccountAddress | undefined => [\n 'senderId', 'accountId', 'ownerId', 'callerId',\n 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId',\n]\n .map((key: keyof TxSchema) => tx[key])\n .filter((a) => a)\n .map((a) => a?.toString().replace(/^ok_/, 'ak_'))[0] as Encoded.AccountAddress | undefined;\n\n/**\n * Transaction Validator\n * This function validates some of transaction properties,\n * to make sure it can be posted it to the chain\n * @category transaction builder\n * @param transaction - Base64Check-encoded transaction\n * @param nodeNotCached - Node to validate transaction against\n * @param parentTxTypes - Types of parent transactions\n * @returns Array with verification errors\n * @example const errors = await verifyTransaction(transaction, node)\n */\nexport default async function verifyTransaction(\n transaction: Encoded.Transaction | Encoded.Poi,\n nodeNotCached: Node,\n parentTxTypes: Tag[] = [],\n): Promise<ValidatorResult[]> {\n let node = nodeNotCached;\n if (\n !node.pipeline.getOrderedPolicies()\n .some(({ name }) => name === 'aggressive-cache-get-responses')\n ) {\n node = new Node(nodeNotCached.$host, { ignoreVersion: true });\n node.pipeline.addPolicy(genAggressiveCacheGetResponsesPolicy());\n }\n\n const { tx, txType } = unpackTx<Tag.SignedTx>(transaction);\n const address = getSenderAddress(tx)\n ?? (txType === Tag.SignedTx ? getSenderAddress(tx.encodedTx.tx) : undefined);\n const [account, { height }, { consensusProtocolVersion, nodeNetworkId }] = await Promise.all([\n address == null\n ? undefined\n : node.getAccountByPubkey(address)\n .catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { id: address, balance: 0n, nonce: 0 };\n })\n // TODO: remove after fixing https://github.com/aeternity/aepp-sdk-js/issues/1537\n .then((acc) => ({ ...acc, id: acc.id as Encoded.AccountAddress })),\n node.getCurrentKeyBlockHeight(),\n node.getNodeInfo(),\n ]);\n\n return (await Promise.all(\n validators.map((v) => v(\n tx as any,\n {\n txType, node, account, height, consensusProtocolVersion, nodeNetworkId, parentTxTypes,\n },\n )),\n )).flat();\n}\n\nvalidators.push(\n ({ encodedTx, signatures }, { account, nodeNetworkId, parentTxTypes }) => {\n if ((encodedTx ?? signatures) === undefined) return [];\n if (account == null) return [];\n if (signatures.length !== 1) return []; // TODO: Support multisignature?\n const prefix = Buffer.from([\n nodeNetworkId,\n ...parentTxTypes.includes(Tag.PayingForTx) ? ['inner_tx'] : [],\n ].join('-'));\n const txWithNetworkId = concatBuffers([prefix, encodedTx.rlpEncoded]);\n const txHashWithNetworkId = concatBuffers([prefix, hash(encodedTx.rlpEncoded)]);\n if (verify(txWithNetworkId, signatures[0], account.id)\n || verify(txHashWithNetworkId, signatures[0], account.id)) return [];\n return [{\n message: 'Signature cannot be verified, please ensure that you transaction have'\n + ' the correct prefix and the correct private key for the sender address',\n key: 'InvalidSignature',\n checkedKeys: ['encodedTx', 'signatures'],\n }];\n },\n async ({ encodedTx, tx }, { node, parentTxTypes, txType }) => {\n if ((encodedTx ?? tx) === undefined) return [];\n return verifyTransaction(\n encode((encodedTx ?? tx).rlpEncoded, Encoding.Transaction),\n node,\n [...parentTxTypes, txType],\n );\n },\n ({ ttl }, { height }) => {\n if (ttl === undefined) return [];\n ttl = +ttl;\n if (ttl === 0 || ttl >= height) return [];\n return [{\n message: `TTL ${ttl} is already expired, current height is ${height}`,\n key: 'ExpiredTTL',\n checkedKeys: ['ttl'],\n }];\n },\n ({\n amount, fee, nameFee, tx,\n }, { account, parentTxTypes, txType }) => {\n if (account == null) return [];\n if ((amount ?? fee ?? nameFee) === undefined) return [];\n fee ??= 0;\n const cost = new BigNumber(fee).plus(nameFee ?? 0).plus(amount ?? 0)\n .plus(txType === Tag.PayingForTx ? (tx.tx.encodedTx.tx).fee : 0)\n .minus(parentTxTypes.includes(Tag.PayingForTx) ? fee : 0);\n if (cost.lte(account.balance.toString())) return [];\n return [{\n message: `Account balance ${account.balance.toString()} is not enough to execute the transaction that costs ${cost.toFixed()}`,\n key: 'InsufficientBalance',\n checkedKeys: ['amount', 'fee', 'nameFee'],\n }];\n },\n ({ signatures }, { account, txType }) => {\n if (account == null) return [];\n let message;\n if (txType === Tag.SignedTx && account.kind === 'generalized' && signatures.length !== 0) {\n message = 'Generalized account can\\'t be used to generate SignedTx with signatures';\n }\n if (txType === Tag.GaMetaTx && account.kind === 'basic') {\n message = 'Basic account can\\'t be used to generate GaMetaTx';\n }\n if (message == null) return [];\n return [{ message, key: 'InvalidAccountType', checkedKeys: ['tag'] }];\n },\n ({ nonce }, { account, parentTxTypes }) => {\n if (nonce == null || account == null || parentTxTypes.includes(Tag.GaMetaTx)) return [];\n nonce = +nonce;\n const validNonce = account.nonce + 1;\n if (nonce === validNonce) return [];\n return [{\n ...nonce < validNonce\n ? {\n message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,\n key: 'NonceAlreadyUsed',\n }\n : {\n message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,\n key: 'NonceHigh',\n },\n checkedKeys: ['nonce'],\n }];\n },\n ({ ctVersion, abiVersion }, { txType, consensusProtocolVersion }) => {\n if (!isKeyOfObject(consensusProtocolVersion, PROTOCOL_VM_ABI)) {\n throw new UnsupportedProtocolError(`Unsupported protocol: ${consensusProtocolVersion}`);\n }\n const protocol = PROTOCOL_VM_ABI[consensusProtocolVersion];\n\n // If not contract create tx\n if (ctVersion == null) ctVersion = { abiVersion };\n const txProtocol = protocol[txType as keyof typeof protocol];\n if (txProtocol == null) return [];\n if (Object.entries(ctVersion).some(\n ([\n key,\n value,\n ]: [\n key:keyof typeof txProtocol,\n value:any]) => !(txProtocol[key].includes(+value as never)),\n )) {\n return [{\n message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(txProtocol)}`,\n key: 'VmAndAbiVersionMismatch',\n checkedKeys: ['ctVersion', 'abiVersion'],\n }];\n }\n return [];\n },\n async ({ contractId }, { txType, node }) => {\n if (Tag.ContractCallTx !== txType) return [];\n contractId = contractId as Encoded.ContractAddress;\n try {\n const { active } = await node.getContract(contractId);\n if (active) return [];\n return [{\n message: `Contract ${contractId} is not active`,\n key: 'ContractNotActive',\n checkedKeys: ['contractId'],\n }];\n } catch (error) {\n if (error.response?.parsedBody?.reason == null) throw error;\n return [{\n message: error.response.parsedBody.reason,\n key: 'ContractNotFound',\n checkedKeys: ['contractId'],\n }];\n }\n },\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validator.mjs","names":["BigNumber","hash","verify","ProtocolToVmAbi","Tag","buildTx","unpackTx","concatBuffers","isAccountNotFoundError","decode","Node","genAggressiveCacheGetResponsesPolicy","validators","getSenderAddress","tx","map","key","filter","a","toString","replace","verifyTransactionInternal","node","parentTxTypes","address","tag","SignedTx","encodedTx","undefined","account","height","consensusProtocolVersion","nodeNetworkId","Promise","all","getAccountByPubkey","catch","error","id","balance","nonce","then","acc","getCurrentKeyBlockHeight","getNodeInfo","v","flat","verifyTransaction","transaction","nodeNotCached","$host","ignoreVersion","pipeline","addPolicy","push","signatures","length","prefix","from","includes","PayingForTx","join","txBinary","txWithNetworkId","txHashWithNetworkId","message","checkedKeys","ttl","amount","fee","nameFee","cost","plus","minus","lte","toFixed","kind","GaMetaTx","validNonce","ctVersion","abiVersion","oracleCall","Oracle","OracleRegisterTx","contractCreate","ContractCreateTx","GaAttachTx","contractCall","ContractCallTx","type","protocol","vmVersion","JSON","stringify","contractId","active","getContract","response","parsedBody","reason"],"sources":["../../src/tx/validator.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\nimport { hash, verify } from '../utils/crypto';\nimport { RawTxObject, TxParamsCommon, TxSchema } from './builder/schema';\nimport { ProtocolToVmAbi } from './builder/field-types/ct-version';\nimport { Tag, ConsensusProtocolVersion } from './builder/constants';\nimport { buildTx, unpackTx } from './builder';\nimport { concatBuffers, isAccountNotFoundError } from '../utils/other';\nimport { Encoded, decode } from '../utils/encoder';\nimport Node, { TransformNodeType } from '../Node';\nimport { Account } from '../apis/node';\nimport { genAggressiveCacheGetResponsesPolicy } from '../utils/autorest';\n\nexport interface ValidatorResult {\n message: string;\n key: string;\n checkedKeys: string[];\n}\n\ntype UnpackedTx = ReturnType<typeof unpackTx>['tx'];\n\ntype Validator = (\n tx: UnpackedTx,\n options: {\n // TODO: remove after fixing node types\n account?: TransformNodeType<Account> & { id: Encoded.AccountAddress };\n nodeNetworkId: string;\n parentTxTypes: Tag[];\n node: Node;\n height: number;\n consensusProtocolVersion: ConsensusProtocolVersion;\n }\n) => ValidatorResult[] | Promise<ValidatorResult[]>;\n\nconst validators: Validator[] = [];\n\nconst getSenderAddress = (\n tx: TxParamsCommon | RawTxObject<TxSchema>,\n): Encoded.AccountAddress | undefined => [\n 'senderId', 'accountId', 'ownerId', 'callerId',\n 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId',\n]\n .map((key: keyof TxSchema) => tx[key])\n .filter((a) => a)\n .map((a) => a?.toString().replace(/^ok_/, 'ak_'))[0] as Encoded.AccountAddress | undefined;\n\nasync function verifyTransactionInternal(\n tx: UnpackedTx,\n node: Node,\n parentTxTypes: Tag[],\n): Promise<ValidatorResult[]> {\n const address = getSenderAddress(tx)\n ?? (tx.tag === Tag.SignedTx ? getSenderAddress(tx.encodedTx) : undefined);\n const [account, { height }, { consensusProtocolVersion, nodeNetworkId }] = await Promise.all([\n address == null\n ? undefined\n : node.getAccountByPubkey(address)\n .catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { id: address, balance: 0n, nonce: 0 };\n })\n // TODO: remove after fixing https://github.com/aeternity/aepp-sdk-js/issues/1537\n .then((acc) => ({ ...acc, id: acc.id as Encoded.AccountAddress })),\n node.getCurrentKeyBlockHeight(),\n node.getNodeInfo(),\n ]);\n\n return (await Promise.all(\n validators.map((v) => v(\n tx,\n {\n node, account, height, consensusProtocolVersion, nodeNetworkId, parentTxTypes,\n },\n )),\n )).flat();\n}\n\n/**\n * Transaction Validator\n * This function validates some transaction properties,\n * to make sure it can be posted it to the chain\n * @category transaction builder\n * @param transaction - Base64Check-encoded transaction\n * @param nodeNotCached - Node to validate transaction against\n * @returns Array with verification errors\n * @example const errors = await verifyTransaction(transaction, node)\n */\nexport default async function verifyTransaction(\n transaction: Parameters<typeof unpackTx>[0],\n nodeNotCached: Node,\n): Promise<ValidatorResult[]> {\n const node = new Node(nodeNotCached.$host, { ignoreVersion: true });\n node.pipeline.addPolicy(genAggressiveCacheGetResponsesPolicy());\n return verifyTransactionInternal(unpackTx(transaction), node, []);\n}\n\nvalidators.push(\n ({ encodedTx, signatures }, { account, nodeNetworkId, parentTxTypes }) => {\n if ((encodedTx ?? signatures) == null) return [];\n if (account == null) return [];\n if (signatures.length !== 1) return []; // TODO: Support multisignature like in state channels\n const prefix = Buffer.from([\n nodeNetworkId,\n ...parentTxTypes.includes(Tag.PayingForTx) ? ['inner_tx'] : [],\n ].join('-'));\n const txBinary = decode(buildTx(encodedTx));\n const txWithNetworkId = concatBuffers([prefix, txBinary]);\n const txHashWithNetworkId = concatBuffers([prefix, hash(txBinary)]);\n if (verify(txWithNetworkId, signatures[0], account.id)\n || verify(txHashWithNetworkId, signatures[0], account.id)) return [];\n return [{\n message: 'Signature cannot be verified, please ensure that you transaction have'\n + ' the correct prefix and the correct private key for the sender address',\n key: 'InvalidSignature',\n checkedKeys: ['encodedTx', 'signatures'],\n }];\n },\n async ({ encodedTx, tx, tag }, { node, parentTxTypes }) => {\n if ((encodedTx ?? tx) == null) return [];\n return verifyTransactionInternal(encodedTx ?? tx, node, [...parentTxTypes, tag]);\n },\n ({ ttl }, { height }) => {\n if (ttl == null) return [];\n ttl = +ttl;\n if (ttl === 0 || ttl >= height) return [];\n return [{\n message: `TTL ${ttl} is already expired, current height is ${height}`,\n key: 'ExpiredTTL',\n checkedKeys: ['ttl'],\n }];\n },\n ({\n amount, fee, nameFee, tx, tag,\n }, { account, parentTxTypes }) => {\n if (account == null) return [];\n if ((amount ?? fee ?? nameFee) == null) return [];\n fee ??= 0;\n const cost = new BigNumber(fee).plus(nameFee ?? 0).plus(amount ?? 0)\n .plus(tag === Tag.PayingForTx ? tx.encodedTx.fee : 0)\n .minus(parentTxTypes.includes(Tag.PayingForTx) ? fee : 0);\n if (cost.lte(account.balance.toString())) return [];\n return [{\n message: `Account balance ${account.balance.toString()} is not enough to execute the transaction that costs ${cost.toFixed()}`,\n key: 'InsufficientBalance',\n checkedKeys: ['amount', 'fee', 'nameFee'],\n }];\n },\n ({ signatures, tag }, { account }) => {\n if (account == null) return [];\n let message;\n if (tag === Tag.SignedTx && account.kind === 'generalized' && signatures.length !== 0) {\n message = 'Generalized account can\\'t be used to generate SignedTx with signatures';\n }\n if (tag === Tag.GaMetaTx && account.kind === 'basic') {\n message = 'Basic account can\\'t be used to generate GaMetaTx';\n }\n if (message == null) return [];\n return [{ message, key: 'InvalidAccountType', checkedKeys: ['tag'] }];\n },\n ({ nonce }, { account, parentTxTypes }) => {\n if (nonce == null || account == null || parentTxTypes.includes(Tag.GaMetaTx)) return [];\n nonce = +nonce;\n const validNonce = account.nonce + 1;\n if (nonce === validNonce) return [];\n return [{\n ...nonce < validNonce\n ? {\n message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,\n key: 'NonceAlreadyUsed',\n }\n : {\n message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,\n key: 'NonceHigh',\n },\n checkedKeys: ['nonce'],\n }];\n },\n ({ ctVersion, abiVersion, tag }, { consensusProtocolVersion }) => {\n const oracleCall = Tag.Oracle === tag || Tag.OracleRegisterTx === tag;\n const contractCreate = Tag.ContractCreateTx === tag || Tag.GaAttachTx === tag;\n const contractCall = Tag.ContractCallTx === tag || Tag.GaMetaTx === tag;\n const type = (oracleCall ? 'oracle-call' : null)\n ?? (contractCreate ? 'contract-create' : null)\n ?? (contractCall ? 'contract-call' : null);\n if (type == null) return [];\n // TODO: remove assertion after fixing buildTx types\n const protocol = ProtocolToVmAbi[consensusProtocolVersion][type] as unknown as {\n abiVersion: any[];\n vmVersion: any[];\n };\n\n // If not contract create tx\n if (ctVersion == null) ctVersion = { abiVersion };\n if (\n !protocol.abiVersion.includes(ctVersion.abiVersion)\n || (contractCreate && !protocol.vmVersion.includes(ctVersion.vmVersion))\n ) {\n return [{\n message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(protocol)}`,\n key: 'VmAndAbiVersionMismatch',\n checkedKeys: ['ctVersion', 'abiVersion'],\n }];\n }\n return [];\n },\n async ({ contractId, tag }, { node }) => {\n if (Tag.ContractCallTx !== tag) return [];\n contractId = contractId as Encoded.ContractAddress;\n try {\n const { active } = await node.getContract(contractId);\n if (active) return [];\n return [{\n message: `Contract ${contractId} is not active`,\n key: 'ContractNotActive',\n checkedKeys: ['contractId'],\n }];\n } catch (error) {\n if (error.response?.parsedBody?.reason == null) throw error;\n return [{\n message: error.response.parsedBody.reason,\n key: 'ContractNotFound',\n checkedKeys: ['contractId'],\n }];\n }\n },\n);\n"],"mappings":"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"}
|
package/es/utils/bytes.mjs
CHANGED
|
@@ -33,7 +33,7 @@ export function toBytes(val) {
|
|
|
33
33
|
// If the value is an int it will be encoded as bytes big endian
|
|
34
34
|
// Raises ValueError if the input is not an int or string
|
|
35
35
|
|
|
36
|
-
if (val
|
|
36
|
+
if (val == null) return _Buffer.from([]);
|
|
37
37
|
if (Number.isInteger(val) || BigNumber.isBigNumber(val) || big) {
|
|
38
38
|
if (!BigNumber.isBigNumber(val)) val = new BigNumber(val);
|
|
39
39
|
if (!val.isInteger()) throw new TypeError(`Unexpected not integer value: ${val.toFixed()}`);
|
package/es/utils/bytes.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bytes.mjs","names":["BigNumber","NoSerializerFoundError","TypeError","toBytes","val","big","
|
|
1
|
+
{"version":3,"file":"bytes.mjs","names":["BigNumber","NoSerializerFoundError","TypeError","toBytes","val","big","from","Number","isInteger","isBigNumber","toFixed","hexString","toString","length"],"sources":["../../src/utils/bytes.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\nimport BigNumber from 'bignumber.js';\nimport { NoSerializerFoundError, TypeError } from './errors';\n\n/**\n * Convert string, number, or BigNumber to byte array\n * @param val - value to convert\n * @param big - enables force conversion to BigNumber\n * @returns Buffer\n */\n// eslint-disable-next-line import/prefer-default-export\nexport function toBytes(val?: null | string | number | BigNumber, big = false): Buffer {\n // Encode a value to bytes.\n // If the value is an int it will be encoded as bytes big endian\n // Raises ValueError if the input is not an int or string\n\n if (val == null) return Buffer.from([]);\n if (Number.isInteger(val) || BigNumber.isBigNumber(val) || big) {\n if (!BigNumber.isBigNumber(val)) val = new BigNumber(val);\n if (!val.isInteger()) throw new TypeError(`Unexpected not integer value: ${val.toFixed()}`);\n let hexString = val.toString(16);\n if (hexString.length % 2 === 1) hexString = `0${hexString}`;\n return Buffer.from(hexString, 'hex');\n }\n if (typeof val === 'string') {\n return Buffer.from(val);\n }\n throw new NoSerializerFoundError();\n}\n"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,SAAS,MAAM,cAAc;AAAC,SAC5BC,sBAAsB,EAAEC,SAAS;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAO,CAACC,GAAwC,EAAuB;EAAA,IAArBC,GAAG,uEAAG,KAAK;EAC3E;EACA;EACA;;EAEA,IAAID,GAAG,IAAI,IAAI,EAAE,OAAO,QAAOE,IAAI,CAAC,EAAE,CAAC;EACvC,IAAIC,MAAM,CAACC,SAAS,CAACJ,GAAG,CAAC,IAAIJ,SAAS,CAACS,WAAW,CAACL,GAAG,CAAC,IAAIC,GAAG,EAAE;IAC9D,IAAI,CAACL,SAAS,CAACS,WAAW,CAACL,GAAG,CAAC,EAAEA,GAAG,GAAG,IAAIJ,SAAS,CAACI,GAAG,CAAC;IACzD,IAAI,CAACA,GAAG,CAACI,SAAS,EAAE,EAAE,MAAM,IAAIN,SAAS,CAAE,iCAAgCE,GAAG,CAACM,OAAO,EAAG,EAAC,CAAC;IAC3F,IAAIC,SAAS,GAAGP,GAAG,CAACQ,QAAQ,CAAC,EAAE,CAAC;IAChC,IAAID,SAAS,CAACE,MAAM,GAAG,CAAC,KAAK,CAAC,EAAEF,SAAS,GAAI,IAAGA,SAAU,EAAC;IAC3D,OAAO,QAAOL,IAAI,CAACK,SAAS,EAAE,KAAK,CAAC;EACtC;EACA,IAAI,OAAOP,GAAG,KAAK,QAAQ,EAAE;IAC3B,OAAO,QAAOE,IAAI,CAACF,GAAG,CAAC;EACzB;EACA,MAAM,IAAIH,sBAAsB,EAAE;AACpC"}
|