@aeternity/aepp-sdk 13.0.0-alpha.1 → 13.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- 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 +1833 -1543
- package/dist/aepp-sdk.js.map +1 -1
- package/es/AeSdk.mjs.map +1 -1
- package/es/AeSdkAepp.d.ts +5 -4
- package/es/AeSdkAepp.mjs +13 -17
- package/es/AeSdkAepp.mjs.map +1 -1
- package/es/AeSdkBase.mjs.map +1 -1
- package/es/AeSdkMethods.d.ts +11 -12
- package/es/AeSdkMethods.mjs +6 -8
- package/es/AeSdkMethods.mjs.map +1 -1
- package/es/AeSdkWallet.mjs +1 -1
- package/es/AeSdkWallet.mjs.map +1 -1
- package/es/Node.d.ts +5 -1
- package/es/Node.mjs +11 -5
- package/es/Node.mjs.map +1 -1
- package/es/account/Base.d.ts +11 -6
- package/es/account/Base.mjs +0 -17
- package/es/account/Base.mjs.map +1 -1
- package/es/account/Generalized.mjs +12 -25
- package/es/account/Generalized.mjs.map +1 -1
- package/es/account/Ledger.mjs.map +1 -1
- package/es/account/LedgerFactory.mjs.map +1 -1
- package/es/account/Memory.d.ts +2 -1
- package/es/account/Memory.mjs +9 -21
- package/es/account/Memory.mjs.map +1 -1
- package/es/account/Rpc.mjs.map +1 -1
- package/es/aens.d.ts +12 -14
- package/es/aens.mjs +17 -31
- package/es/aens.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/Browser.mjs +0 -16
- package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +0 -16
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +0 -16
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection-proxy.mjs +0 -17
- package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -1
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs +4 -5
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
- package/es/aepp-wallet-communication/rpc/types.d.ts +6 -2
- package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -1
- package/es/aepp-wallet-communication/schema.mjs.map +1 -1
- package/es/aepp-wallet-communication/wallet-detector.mjs +0 -16
- package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -1
- package/es/apis/compiler/compiler.d.ts +1 -1
- package/es/apis/compiler/compiler.mjs +4 -20
- package/es/apis/compiler/compiler.mjs.map +1 -1
- package/es/apis/compiler/models/index.d.ts +3 -2
- package/es/apis/compiler/models/index.mjs.map +1 -1
- package/es/apis/compiler/models/mappers.d.ts +1 -1
- package/es/apis/compiler/models/mappers.mjs +19 -2
- package/es/apis/compiler/models/mappers.mjs.map +1 -1
- package/es/apis/node/models/index.d.ts +15 -15
- package/es/apis/node/models/index.mjs.map +1 -1
- package/es/apis/node/models/mappers.d.ts +1 -1
- package/es/apis/node/models/mappers.mjs +2 -1
- package/es/apis/node/models/mappers.mjs.map +1 -1
- package/es/apis/node/models/parameters.d.ts +2 -2
- package/es/apis/node/models/parameters.mjs +2 -2
- package/es/apis/node/models/parameters.mjs.map +1 -1
- package/es/apis/node/node.mjs +3 -19
- package/es/apis/node/node.mjs.map +1 -1
- package/es/chain.d.ts +8 -8
- package/es/chain.mjs +20 -23
- package/es/chain.mjs.map +1 -1
- package/es/channel/Base.d.ts +25 -12
- package/es/channel/Base.mjs +23 -26
- package/es/channel/Base.mjs.map +1 -1
- package/es/channel/Contract.mjs +8 -21
- package/es/channel/Contract.mjs.map +1 -1
- package/es/channel/Spend.d.ts +4 -2
- package/es/channel/Spend.mjs +0 -16
- package/es/channel/Spend.mjs.map +1 -1
- package/es/channel/handlers.mjs +6 -18
- package/es/channel/handlers.mjs.map +1 -1
- package/es/channel/internal.d.ts +19 -2
- package/es/channel/internal.mjs +19 -19
- package/es/channel/internal.mjs.map +1 -1
- package/es/contract/Contract.d.ts +30 -85
- package/es/contract/Contract.mjs +197 -215
- package/es/contract/Contract.mjs.map +1 -1
- package/es/contract/compiler/Base.d.ts +10 -14
- package/es/contract/compiler/Base.mjs.map +1 -1
- package/es/contract/compiler/Cli.mjs +5 -11
- package/es/contract/compiler/Cli.mjs.map +1 -1
- package/es/contract/compiler/Http.mjs +6 -30
- package/es/contract/compiler/Http.mjs.map +1 -1
- package/es/contract/compiler/HttpNode.mjs.map +1 -1
- package/es/contract/compiler/getFileSystem.mjs.map +1 -1
- package/es/contract/delegation-signature.d.ts +43 -0
- package/es/contract/delegation-signature.mjs +45 -0
- package/es/contract/delegation-signature.mjs.map +1 -0
- package/es/contract/ga.d.ts +23 -7
- package/es/contract/ga.mjs +52 -27
- package/es/contract/ga.mjs.map +1 -1
- package/es/index-browser.d.ts +5 -4
- package/es/index-browser.mjs +7 -21
- package/es/index-browser.mjs.map +1 -1
- package/es/oracle.d.ts +12 -17
- package/es/oracle.mjs +28 -48
- package/es/oracle.mjs.map +1 -1
- package/es/spend.d.ts +19 -27
- package/es/spend.mjs +20 -43
- package/es/spend.mjs.map +1 -1
- package/es/tx/builder/SchemaTypes.d.ts +37 -0
- package/es/tx/builder/SchemaTypes.mjs +2 -0
- package/es/tx/builder/SchemaTypes.mjs.map +1 -0
- package/es/tx/builder/constants.d.ts +4 -2
- package/es/tx/builder/constants.mjs +2 -0
- package/es/tx/builder/constants.mjs.map +1 -1
- package/es/tx/builder/field-types/abi-version.d.ts +11 -2
- package/es/tx/builder/field-types/abi-version.mjs +24 -4
- package/es/tx/builder/field-types/abi-version.mjs.map +1 -1
- package/es/tx/builder/field-types/address.mjs.map +1 -1
- package/es/tx/builder/field-types/array.d.ts +1 -1
- package/es/tx/builder/field-types/array.mjs.map +1 -1
- package/es/tx/builder/field-types/boolean.mjs.map +1 -1
- package/es/tx/builder/field-types/coin-amount.d.ts +3 -4
- package/es/tx/builder/field-types/coin-amount.mjs +4 -5
- package/es/tx/builder/field-types/coin-amount.mjs.map +1 -1
- package/es/tx/builder/field-types/ct-version.d.ts +22 -3
- package/es/tx/builder/field-types/ct-version.mjs +32 -4
- package/es/tx/builder/field-types/ct-version.mjs.map +1 -1
- package/es/tx/builder/field-types/deposit.d.ts +2 -1
- package/es/tx/builder/field-types/deposit.mjs +3 -2
- package/es/tx/builder/field-types/deposit.mjs.map +1 -1
- package/es/tx/builder/field-types/encoded.d.ts +1 -1
- package/es/tx/builder/field-types/encoded.mjs.map +1 -1
- package/es/tx/builder/field-types/entry.mjs +3 -0
- package/es/tx/builder/field-types/entry.mjs.map +1 -1
- package/es/tx/builder/field-types/enumeration.mjs.map +1 -1
- package/es/tx/builder/field-types/fee.d.ts +3 -1
- package/es/tx/builder/field-types/fee.mjs +5 -1
- package/es/tx/builder/field-types/fee.mjs.map +1 -1
- package/es/tx/builder/field-types/field.mjs.map +1 -1
- package/es/tx/builder/field-types/gas-limit.d.ts +3 -2
- package/es/tx/builder/field-types/gas-limit.mjs +4 -2
- package/es/tx/builder/field-types/gas-limit.mjs.map +1 -1
- package/es/tx/builder/field-types/gas-price.d.ts +3 -1
- package/es/tx/builder/field-types/gas-price.mjs.map +1 -1
- package/es/tx/builder/field-types/index.d.ts +52 -13
- package/es/tx/builder/field-types/index.mjs +10 -2
- package/es/tx/builder/field-types/index.mjs.map +1 -1
- package/es/tx/builder/field-types/map.d.ts +13 -0
- package/es/tx/builder/field-types/map.mjs +49 -0
- package/es/tx/builder/field-types/map.mjs.map +1 -0
- package/es/tx/builder/field-types/mptree.d.ts +7 -2
- package/es/tx/builder/field-types/mptree.mjs +5 -7
- package/es/tx/builder/field-types/mptree.mjs.map +1 -1
- package/es/tx/builder/field-types/name-fee.d.ts +1 -1
- package/es/tx/builder/field-types/name-fee.mjs +2 -2
- package/es/tx/builder/field-types/name-fee.mjs.map +1 -1
- package/es/tx/builder/field-types/name-id.mjs.map +1 -1
- package/es/tx/builder/field-types/name.mjs.map +1 -1
- package/es/tx/builder/field-types/nonce.d.ts +14 -0
- package/es/tx/builder/field-types/nonce.mjs +29 -0
- package/es/tx/builder/field-types/nonce.mjs.map +1 -0
- package/es/tx/builder/field-types/pointers.mjs.map +1 -1
- package/es/tx/builder/field-types/raw.mjs.map +1 -1
- package/es/tx/builder/field-types/short-u-int-const.d.ts +4 -2
- package/es/tx/builder/field-types/short-u-int-const.mjs +12 -8
- package/es/tx/builder/field-types/short-u-int-const.mjs.map +1 -1
- package/es/tx/builder/field-types/short-u-int.mjs.map +1 -1
- package/es/tx/builder/field-types/string.mjs.map +1 -1
- package/es/tx/builder/field-types/ttl.d.ts +11 -0
- package/es/tx/builder/field-types/ttl.mjs +21 -0
- package/es/tx/builder/field-types/ttl.mjs.map +1 -0
- package/es/tx/builder/field-types/u-int.mjs.map +1 -1
- package/es/tx/builder/field-types/wrapped.d.ts +14 -0
- package/es/tx/builder/field-types/wrapped.mjs +22 -0
- package/es/tx/builder/field-types/wrapped.mjs.map +1 -0
- package/es/tx/builder/helpers.mjs.map +1 -1
- package/es/tx/builder/index.d.ts +20 -20
- package/es/tx/builder/index.mjs +54 -64
- package/es/tx/builder/index.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +2735 -2865
- package/es/tx/builder/schema.generated.d.ts +2011 -0
- package/es/tx/builder/schema.generated.mjs +2 -0
- package/es/tx/builder/schema.generated.mjs.map +1 -0
- package/es/tx/builder/schema.mjs +459 -155
- package/es/tx/builder/schema.mjs.map +1 -1
- package/es/tx/execution-cost.d.ts +35 -0
- package/es/tx/execution-cost.mjs +123 -0
- package/es/tx/execution-cost.mjs.map +1 -0
- package/es/tx/transaction-signer.d.ts +6 -0
- package/es/tx/transaction-signer.mjs +27 -0
- package/es/tx/transaction-signer.mjs.map +1 -0
- package/es/tx/validator.mjs +60 -109
- package/es/tx/validator.mjs.map +1 -1
- package/es/utils/amount-formatter.mjs +0 -16
- package/es/utils/amount-formatter.mjs.map +1 -1
- package/es/utils/autorest.d.ts +3 -2
- package/es/utils/autorest.mjs +43 -11
- package/es/utils/autorest.mjs.map +1 -1
- package/es/utils/bytes.mjs +0 -16
- package/es/utils/bytes.mjs.map +1 -1
- package/es/utils/crypto.mjs +0 -16
- package/es/utils/crypto.mjs.map +1 -1
- package/es/utils/encoder.mjs.map +1 -1
- package/es/utils/errors.d.ts +14 -31
- package/es/utils/errors.mjs +3 -33
- package/es/utils/errors.mjs.map +1 -1
- package/es/utils/hd-wallet.mjs.map +1 -1
- package/es/utils/json-big.mjs.map +1 -1
- package/es/utils/keystore.mjs.map +1 -1
- package/es/utils/other.d.ts +1 -1
- package/es/utils/other.mjs.map +1 -1
- package/es/utils/semver-satisfies.mjs.map +1 -1
- package/es/utils/string.mjs +0 -17
- package/es/utils/string.mjs.map +1 -1
- package/package.json +34 -30
- package/src/AeSdkAepp.ts +16 -14
- package/src/AeSdkMethods.ts +11 -16
- package/src/AeSdkWallet.ts +1 -1
- package/src/Node.ts +17 -6
- package/src/account/Base.ts +11 -22
- package/src/account/Generalized.ts +9 -24
- package/src/account/Memory.ts +14 -21
- package/src/aens.ts +31 -47
- package/src/aepp-wallet-communication/connection/Browser.ts +0 -17
- package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +0 -17
- package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +0 -17
- package/src/aepp-wallet-communication/connection-proxy.ts +0 -17
- package/src/aepp-wallet-communication/rpc/types.ts +7 -2
- package/src/aepp-wallet-communication/wallet-detector.ts +0 -17
- package/src/apis/compiler/compiler.ts +3 -27
- package/src/apis/compiler/models/index.ts +3 -2
- package/src/apis/compiler/models/mappers.ts +15 -2
- package/src/apis/node/models/index.ts +16 -15
- package/src/apis/node/models/mappers.ts +2 -1
- package/src/apis/node/models/parameters.ts +2 -2
- package/src/apis/node/node.ts +3 -27
- package/src/chain.ts +29 -28
- package/src/channel/Base.ts +33 -33
- package/src/channel/Contract.ts +8 -23
- package/src/channel/Spend.ts +2 -17
- package/src/channel/handlers.ts +5 -18
- package/src/channel/internal.ts +40 -22
- package/src/contract/Contract.ts +161 -170
- package/src/contract/compiler/Base.ts +10 -14
- package/src/contract/compiler/Cli.ts +5 -11
- package/src/contract/compiler/Http.ts +6 -25
- package/src/contract/delegation-signature.ts +56 -0
- package/src/contract/ga.ts +53 -32
- package/src/index-browser.ts +15 -21
- package/src/oracle.ts +46 -56
- package/src/spend.ts +33 -67
- package/src/tx/builder/SchemaTypes.ts +79 -0
- package/src/tx/builder/constants.ts +2 -0
- package/src/tx/builder/field-types/abi-version.ts +29 -6
- package/src/tx/builder/field-types/array.ts +1 -1
- package/src/tx/builder/field-types/coin-amount.ts +6 -4
- package/src/tx/builder/field-types/ct-version.ts +37 -4
- package/src/tx/builder/field-types/deposit.ts +3 -1
- package/src/tx/builder/field-types/encoded.ts +1 -1
- package/src/tx/builder/field-types/entry.ts +8 -3
- package/src/tx/builder/field-types/fee.ts +6 -4
- package/src/tx/builder/field-types/gas-limit.ts +2 -2
- package/src/tx/builder/field-types/index.ts +15 -1
- package/src/tx/builder/field-types/map.ts +45 -0
- package/src/tx/builder/field-types/mptree.ts +4 -3
- package/src/tx/builder/field-types/name-fee.ts +2 -1
- package/src/tx/builder/field-types/nonce.ts +40 -0
- package/src/tx/builder/field-types/short-u-int-const.ts +18 -8
- package/src/tx/builder/field-types/ttl.ts +24 -0
- package/src/tx/builder/field-types/wrapped.ts +32 -0
- package/src/tx/builder/index.ts +57 -71
- package/src/tx/builder/schema.generated.ts +2013 -0
- package/src/tx/builder/schema.ts +544 -624
- package/src/tx/execution-cost.ts +146 -0
- package/src/tx/transaction-signer.ts +27 -0
- package/src/tx/validator.ts +60 -91
- package/src/utils/amount-formatter.ts +0 -16
- package/src/utils/autorest.ts +52 -11
- package/src/utils/bytes.ts +0 -16
- package/src/utils/crypto.ts +0 -16
- package/src/utils/errors.ts +16 -45
- package/src/utils/string.ts +0 -17
- package/types-legacy/ts4.2/AeSdkAepp.d.ts +5 -4
- package/types-legacy/ts4.2/AeSdkMethods.d.ts +11 -12
- package/types-legacy/ts4.2/Node.d.ts +5 -1
- package/types-legacy/ts4.2/account/Base.d.ts +11 -6
- package/types-legacy/ts4.2/account/Memory.d.ts +2 -1
- package/types-legacy/ts4.2/aens.d.ts +12 -14
- package/types-legacy/ts4.2/aepp-wallet-communication/rpc/types.d.ts +6 -2
- package/types-legacy/ts4.2/apis/compiler/compiler.d.ts +1 -1
- package/types-legacy/ts4.2/apis/compiler/models/index.d.ts +3 -2
- package/types-legacy/ts4.2/apis/compiler/models/mappers.d.ts +1 -1
- package/types-legacy/ts4.2/apis/node/models/index.d.ts +15 -15
- package/types-legacy/ts4.2/apis/node/models/mappers.d.ts +1 -1
- package/types-legacy/ts4.2/apis/node/models/parameters.d.ts +2 -2
- package/types-legacy/ts4.2/chain.d.ts +8 -8
- package/types-legacy/ts4.2/channel/Base.d.ts +25 -12
- package/types-legacy/ts4.2/channel/Spend.d.ts +4 -2
- package/types-legacy/ts4.2/channel/internal.d.ts +22 -2
- package/types-legacy/ts4.2/contract/Contract.d.ts +29 -84
- package/types-legacy/ts4.2/contract/compiler/Base.d.ts +10 -14
- package/types-legacy/ts4.2/contract/delegation-signature.d.ts +43 -0
- package/types-legacy/ts4.2/contract/ga.d.ts +23 -7
- package/types-legacy/ts4.2/index-browser.d.ts +5 -4
- package/types-legacy/ts4.2/oracle.d.ts +12 -17
- package/types-legacy/ts4.2/spend.d.ts +19 -27
- package/types-legacy/ts4.2/tx/builder/SchemaTypes.d.ts +37 -0
- package/types-legacy/ts4.2/tx/builder/constants.d.ts +4 -2
- package/types-legacy/ts4.2/tx/builder/field-types/abi-version.d.ts +11 -2
- package/types-legacy/ts4.2/tx/builder/field-types/array.d.ts +1 -1
- package/types-legacy/ts4.2/tx/builder/field-types/coin-amount.d.ts +3 -4
- package/types-legacy/ts4.2/tx/builder/field-types/ct-version.d.ts +33 -3
- package/types-legacy/ts4.2/tx/builder/field-types/deposit.d.ts +2 -1
- package/types-legacy/ts4.2/tx/builder/field-types/encoded.d.ts +1 -1
- package/types-legacy/ts4.2/tx/builder/field-types/fee.d.ts +3 -1
- package/types-legacy/ts4.2/tx/builder/field-types/gas-limit.d.ts +3 -2
- package/types-legacy/ts4.2/tx/builder/field-types/gas-price.d.ts +3 -1
- package/types-legacy/ts4.2/tx/builder/field-types/index.d.ts +52 -13
- package/types-legacy/ts4.2/tx/builder/field-types/map.d.ts +13 -0
- package/types-legacy/ts4.2/tx/builder/field-types/mptree.d.ts +7 -2
- package/types-legacy/ts4.2/tx/builder/field-types/name-fee.d.ts +1 -1
- package/types-legacy/ts4.2/tx/builder/field-types/nonce.d.ts +14 -0
- package/types-legacy/ts4.2/tx/builder/field-types/short-u-int-const.d.ts +4 -2
- package/types-legacy/ts4.2/tx/builder/field-types/ttl.d.ts +11 -0
- package/types-legacy/ts4.2/tx/builder/field-types/wrapped.d.ts +14 -0
- package/types-legacy/ts4.2/tx/builder/index.d.ts +23 -20
- package/types-legacy/ts4.2/tx/builder/schema.d.ts +2962 -4629
- package/types-legacy/ts4.2/tx/builder/schema.generated.d.ts +2011 -0
- package/types-legacy/ts4.2/tx/execution-cost.d.ts +35 -0
- package/types-legacy/ts4.2/tx/transaction-signer.d.ts +6 -0
- package/types-legacy/ts4.2/utils/autorest.d.ts +3 -2
- package/types-legacy/ts4.2/utils/errors.d.ts +14 -31
- package/types-legacy/ts4.2/utils/other.d.ts +1 -1
- package/types-legacy/ts4.5/AeSdkAepp.d.ts +5 -4
- package/types-legacy/ts4.5/AeSdkMethods.d.ts +11 -12
- package/types-legacy/ts4.5/Node.d.ts +5 -1
- package/types-legacy/ts4.5/account/Base.d.ts +11 -6
- package/types-legacy/ts4.5/account/Memory.d.ts +2 -1
- package/types-legacy/ts4.5/aens.d.ts +12 -14
- package/types-legacy/ts4.5/aepp-wallet-communication/rpc/types.d.ts +6 -2
- package/types-legacy/ts4.5/apis/compiler/compiler.d.ts +1 -1
- package/types-legacy/ts4.5/apis/compiler/models/index.d.ts +3 -2
- package/types-legacy/ts4.5/apis/compiler/models/mappers.d.ts +1 -1
- package/types-legacy/ts4.5/apis/node/models/index.d.ts +15 -15
- package/types-legacy/ts4.5/apis/node/models/mappers.d.ts +1 -1
- package/types-legacy/ts4.5/apis/node/models/parameters.d.ts +2 -2
- package/types-legacy/ts4.5/chain.d.ts +8 -8
- package/types-legacy/ts4.5/channel/Base.d.ts +25 -12
- package/types-legacy/ts4.5/channel/Spend.d.ts +4 -2
- package/types-legacy/ts4.5/channel/internal.d.ts +22 -2
- package/types-legacy/ts4.5/contract/Contract.d.ts +29 -84
- package/types-legacy/ts4.5/contract/compiler/Base.d.ts +10 -14
- package/types-legacy/ts4.5/contract/delegation-signature.d.ts +43 -0
- package/types-legacy/ts4.5/contract/ga.d.ts +23 -7
- package/types-legacy/ts4.5/index-browser.d.ts +5 -4
- package/types-legacy/ts4.5/oracle.d.ts +12 -17
- package/types-legacy/ts4.5/spend.d.ts +19 -27
- package/types-legacy/ts4.5/tx/builder/SchemaTypes.d.ts +37 -0
- package/types-legacy/ts4.5/tx/builder/constants.d.ts +4 -2
- package/types-legacy/ts4.5/tx/builder/field-types/abi-version.d.ts +11 -2
- package/types-legacy/ts4.5/tx/builder/field-types/array.d.ts +1 -1
- package/types-legacy/ts4.5/tx/builder/field-types/coin-amount.d.ts +3 -4
- package/types-legacy/ts4.5/tx/builder/field-types/ct-version.d.ts +33 -3
- package/types-legacy/ts4.5/tx/builder/field-types/deposit.d.ts +2 -1
- package/types-legacy/ts4.5/tx/builder/field-types/encoded.d.ts +1 -1
- package/types-legacy/ts4.5/tx/builder/field-types/fee.d.ts +3 -1
- package/types-legacy/ts4.5/tx/builder/field-types/gas-limit.d.ts +3 -2
- package/types-legacy/ts4.5/tx/builder/field-types/gas-price.d.ts +3 -1
- package/types-legacy/ts4.5/tx/builder/field-types/index.d.ts +52 -13
- package/types-legacy/ts4.5/tx/builder/field-types/map.d.ts +13 -0
- package/types-legacy/ts4.5/tx/builder/field-types/mptree.d.ts +7 -2
- package/types-legacy/ts4.5/tx/builder/field-types/name-fee.d.ts +1 -1
- package/types-legacy/ts4.5/tx/builder/field-types/nonce.d.ts +14 -0
- package/types-legacy/ts4.5/tx/builder/field-types/short-u-int-const.d.ts +4 -2
- package/types-legacy/ts4.5/tx/builder/field-types/ttl.d.ts +11 -0
- package/types-legacy/ts4.5/tx/builder/field-types/wrapped.d.ts +14 -0
- package/types-legacy/ts4.5/tx/builder/index.d.ts +23 -20
- package/types-legacy/ts4.5/tx/builder/schema.d.ts +2962 -4629
- package/types-legacy/ts4.5/tx/builder/schema.generated.d.ts +2011 -0
- package/types-legacy/ts4.5/tx/execution-cost.d.ts +35 -0
- package/types-legacy/ts4.5/tx/transaction-signer.d.ts +6 -0
- package/types-legacy/ts4.5/utils/autorest.d.ts +3 -2
- package/types-legacy/ts4.5/utils/errors.d.ts +14 -31
- package/types-legacy/ts4.5/utils/other.d.ts +1 -1
- package/es/tx/index.d.ts +0 -19
- package/es/tx/index.mjs +0 -115
- package/es/tx/index.mjs.map +0 -1
- package/src/apis/compiler/code-model-v4.yaml +0 -2442
- package/src/apis/node/code-model-v4.yaml +0 -10080
- package/src/tx/index.ts +0 -129
- package/types-legacy/ts4.2/tx/index.d.ts +0 -19
- package/types-legacy/ts4.5/tx/index.d.ts +0 -19
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { Encoded } from '../utils/encoder';
|
|
2
|
+
import { buildTx, buildTxHash, unpackTx } from './builder';
|
|
3
|
+
import { Tag } from './builder/constants';
|
|
4
|
+
import { verify } from '../utils/crypto';
|
|
5
|
+
import { getBufferToSign } from '../account/Memory';
|
|
6
|
+
import { IllegalArgumentError, InternalError, TransactionError } from '../utils/errors';
|
|
7
|
+
import Node from '../Node';
|
|
8
|
+
import getTransactionSignerAddress from './transaction-signer';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Calculates the cost of transaction execution
|
|
12
|
+
* Provides an upper cost of contract-call-related transactions because of `gasLimit`.
|
|
13
|
+
* Also assumes that oracle query fee is 0 unless it is provided in options.
|
|
14
|
+
* @param transaction - Transaction to calculate the cost of
|
|
15
|
+
* @param innerTx - Should be provided if transaction wrapped with Tag.PayingForTx
|
|
16
|
+
* @param gasUsed - Amount of gas actually used to make calculation more accurate
|
|
17
|
+
* @param queryFee - Oracle query fee
|
|
18
|
+
* @param isInitiator - Is transaction signer an initiator of state channel
|
|
19
|
+
*/
|
|
20
|
+
export function getExecutionCost(
|
|
21
|
+
transaction: Encoded.Transaction,
|
|
22
|
+
{
|
|
23
|
+
innerTx, gasUsed, queryFee, isInitiator,
|
|
24
|
+
}: {
|
|
25
|
+
innerTx?: 'fee-payer' | 'freeloader';
|
|
26
|
+
gasUsed?: number;
|
|
27
|
+
queryFee?: string;
|
|
28
|
+
isInitiator?: boolean;
|
|
29
|
+
} = {},
|
|
30
|
+
): bigint {
|
|
31
|
+
const params = unpackTx(transaction);
|
|
32
|
+
if (params.tag === Tag.SignedTx) {
|
|
33
|
+
throw new IllegalArgumentError('Transaction shouldn\'t be a SignedTx, use `getExecutionCostBySignedTx` instead');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
let res = 0n;
|
|
37
|
+
if ('fee' in params && innerTx !== 'freeloader') {
|
|
38
|
+
res += BigInt(params.fee);
|
|
39
|
+
}
|
|
40
|
+
if (params.tag === Tag.NameClaimTx) {
|
|
41
|
+
res += BigInt(params.nameFee);
|
|
42
|
+
}
|
|
43
|
+
if (params.tag === Tag.OracleQueryTx) {
|
|
44
|
+
res += BigInt(params.queryFee);
|
|
45
|
+
}
|
|
46
|
+
if (params.tag === Tag.OracleResponseTx) {
|
|
47
|
+
res -= BigInt(queryFee ?? 0);
|
|
48
|
+
}
|
|
49
|
+
if (params.tag === Tag.ChannelSettleTx) {
|
|
50
|
+
if (isInitiator === true) res -= BigInt(params.initiatorAmountFinal);
|
|
51
|
+
if (isInitiator === false) res -= BigInt(params.responderAmountFinal);
|
|
52
|
+
}
|
|
53
|
+
if (
|
|
54
|
+
((params.tag === Tag.SpendTx && params.senderId !== params.recipientId)
|
|
55
|
+
|| params.tag === Tag.ContractCreateTx || params.tag === Tag.ContractCallTx
|
|
56
|
+
|| params.tag === Tag.ChannelDepositTx) && innerTx !== 'fee-payer'
|
|
57
|
+
) {
|
|
58
|
+
res += BigInt(params.amount);
|
|
59
|
+
}
|
|
60
|
+
if (params.tag === Tag.ContractCreateTx) res += BigInt(params.deposit);
|
|
61
|
+
if (
|
|
62
|
+
(params.tag === Tag.ContractCreateTx || params.tag === Tag.ContractCallTx
|
|
63
|
+
|| params.tag === Tag.GaAttachTx || params.tag === Tag.GaMetaTx)
|
|
64
|
+
&& innerTx !== 'freeloader'
|
|
65
|
+
) {
|
|
66
|
+
res += BigInt(params.gasPrice) * BigInt(gasUsed ?? params.gasLimit);
|
|
67
|
+
}
|
|
68
|
+
if (params.tag === Tag.GaMetaTx || params.tag === Tag.PayingForTx) {
|
|
69
|
+
res += getExecutionCost(
|
|
70
|
+
buildTx(params.tx.encodedTx),
|
|
71
|
+
params.tag === Tag.PayingForTx ? { innerTx: 'fee-payer' } : {},
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
return res;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Calculates the cost of signed transaction execution
|
|
79
|
+
* @param transaction - Transaction to calculate the cost of
|
|
80
|
+
* @param networkId - Network id used to sign the transaction
|
|
81
|
+
* @param options - Options
|
|
82
|
+
*/
|
|
83
|
+
export function getExecutionCostBySignedTx(
|
|
84
|
+
transaction: Encoded.Transaction,
|
|
85
|
+
networkId: string,
|
|
86
|
+
options?: Omit<Parameters<typeof getExecutionCost>[1], 'innerTx'>,
|
|
87
|
+
): bigint {
|
|
88
|
+
const params = unpackTx(transaction, Tag.SignedTx);
|
|
89
|
+
if (params.encodedTx.tag === Tag.GaMetaTx) {
|
|
90
|
+
return getExecutionCost(buildTx(params.encodedTx), options);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const tx = buildTx(params.encodedTx);
|
|
94
|
+
const address = getTransactionSignerAddress(tx);
|
|
95
|
+
const [isInnerTx, isNotInnerTx] = [true, false]
|
|
96
|
+
.map((f) => verify(getBufferToSign(tx, networkId, f), params.signatures[0], address));
|
|
97
|
+
if (!isInnerTx && !isNotInnerTx) throw new TransactionError('Can\'t verify signature');
|
|
98
|
+
return getExecutionCost(
|
|
99
|
+
buildTx(params.encodedTx),
|
|
100
|
+
{ ...isInnerTx && { innerTx: 'freeloader' }, ...options },
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Calculates the cost of signed and not signed transaction execution using node
|
|
106
|
+
* @param transaction - Transaction to calculate the cost of
|
|
107
|
+
* @param node - Node to use
|
|
108
|
+
* @param isMined - Is transaction already mined or not
|
|
109
|
+
* @param options - Options
|
|
110
|
+
*/
|
|
111
|
+
export async function getExecutionCostUsingNode(
|
|
112
|
+
transaction: Encoded.Transaction,
|
|
113
|
+
node: Node,
|
|
114
|
+
{ isMined, ...options }: { isMined?: boolean } & Parameters<typeof getExecutionCost>[1] = {},
|
|
115
|
+
): Promise<bigint> {
|
|
116
|
+
let params = unpackTx(transaction);
|
|
117
|
+
const isSignedTx = params.tag === Tag.SignedTx;
|
|
118
|
+
const txHash = isSignedTx && isMined === true && buildTxHash(transaction);
|
|
119
|
+
if (params.tag === Tag.SignedTx) params = params.encodedTx;
|
|
120
|
+
|
|
121
|
+
// TODO: set gasUsed for PayingForTx after solving https://github.com/aeternity/aeternity/issues/4087
|
|
122
|
+
if (
|
|
123
|
+
options.gasUsed == null && txHash !== false
|
|
124
|
+
&& [Tag.ContractCreateTx, Tag.ContractCallTx, Tag.GaAttachTx, Tag.GaMetaTx].includes(params.tag)
|
|
125
|
+
) {
|
|
126
|
+
const { callInfo, gaInfo } = await node.getTransactionInfoByHash(txHash);
|
|
127
|
+
const combinedInfo = callInfo ?? gaInfo;
|
|
128
|
+
if (combinedInfo == null) {
|
|
129
|
+
throw new InternalError(`callInfo and gaInfo is not available for transaction ${txHash}`);
|
|
130
|
+
}
|
|
131
|
+
options.gasUsed = combinedInfo.gasUsed;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (options.queryFee == null && Tag.OracleResponseTx === params.tag) {
|
|
135
|
+
options.queryFee = (await node.getOracleByPubkey(params.oracleId)).queryFee.toString();
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (options.isInitiator == null && Tag.ChannelSettleTx === params.tag && isMined !== true) {
|
|
139
|
+
const { initiatorId } = await node.getChannelByPubkey(params.channelId);
|
|
140
|
+
options.isInitiator = params.fromId === initiatorId;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return isSignedTx
|
|
144
|
+
? getExecutionCostBySignedTx(transaction, await node.getNetworkId(), options)
|
|
145
|
+
: getExecutionCost(transaction, options);
|
|
146
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Encoded } from '../utils/encoder';
|
|
2
|
+
import { buildTx, getSchema, unpackTx } from './builder';
|
|
3
|
+
import { Tag } from './builder/constants';
|
|
4
|
+
import { TransactionError, UnexpectedTsError } from '../utils/errors';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Returns account address that signed a transaction
|
|
8
|
+
* @param transaction - transaction to get a signer of
|
|
9
|
+
*/
|
|
10
|
+
export default function getTransactionSignerAddress(
|
|
11
|
+
transaction: Encoded.Transaction,
|
|
12
|
+
): Encoded.AccountAddress {
|
|
13
|
+
const params = unpackTx(transaction);
|
|
14
|
+
switch (params.tag) {
|
|
15
|
+
case Tag.SignedTx:
|
|
16
|
+
return getTransactionSignerAddress(buildTx(params.encodedTx));
|
|
17
|
+
case Tag.GaMetaTx:
|
|
18
|
+
return params.gaId;
|
|
19
|
+
default:
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const nonce = getSchema(params.tag, params.version).find(([name]) => name === 'nonce')?.[1];
|
|
23
|
+
if (nonce == null) throw new TransactionError(`Transaction doesn't have nonce: ${Tag[params.tag]}`);
|
|
24
|
+
if (!('senderKey' in nonce)) throw new UnexpectedTsError();
|
|
25
|
+
const address = params[nonce.senderKey as keyof typeof params] as unknown as string;
|
|
26
|
+
return address.replace(/^ok_/, 'ak_') as Encoded.AccountAddress;
|
|
27
|
+
}
|
package/src/tx/validator.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import BigNumber from 'bignumber.js';
|
|
2
1
|
import { hash, verify } from '../utils/crypto';
|
|
3
|
-
import {
|
|
4
|
-
import { ProtocolToVmAbi } from './builder/field-types/ct-version';
|
|
2
|
+
import { TxUnpacked } from './builder/schema.generated';
|
|
3
|
+
import { CtVersion, ProtocolToVmAbi } from './builder/field-types/ct-version';
|
|
5
4
|
import { Tag, ConsensusProtocolVersion } from './builder/constants';
|
|
6
5
|
import { buildTx, unpackTx } from './builder';
|
|
7
6
|
import { concatBuffers, isAccountNotFoundError } from '../utils/other';
|
|
@@ -9,6 +8,9 @@ import { Encoded, decode } from '../utils/encoder';
|
|
|
9
8
|
import Node, { TransformNodeType } from '../Node';
|
|
10
9
|
import { Account } from '../apis/node';
|
|
11
10
|
import { genAggressiveCacheGetResponsesPolicy } from '../utils/autorest';
|
|
11
|
+
import { UnexpectedTsError } from '../utils/errors';
|
|
12
|
+
import getTransactionSignerAddress from './transaction-signer';
|
|
13
|
+
import { getExecutionCostUsingNode } from './execution-cost';
|
|
12
14
|
|
|
13
15
|
export interface ValidatorResult {
|
|
14
16
|
message: string;
|
|
@@ -16,13 +18,11 @@ export interface ValidatorResult {
|
|
|
16
18
|
checkedKeys: string[];
|
|
17
19
|
}
|
|
18
20
|
|
|
19
|
-
type UnpackedTx = ReturnType<typeof unpackTx>['tx'];
|
|
20
|
-
|
|
21
21
|
type Validator = (
|
|
22
|
-
tx:
|
|
22
|
+
tx: TxUnpacked,
|
|
23
23
|
options: {
|
|
24
24
|
// TODO: remove after fixing node types
|
|
25
|
-
account
|
|
25
|
+
account: TransformNodeType<Account> & { id: Encoded.AccountAddress };
|
|
26
26
|
nodeNetworkId: string;
|
|
27
27
|
parentTxTypes: Tag[];
|
|
28
28
|
node: Node;
|
|
@@ -33,39 +33,26 @@ type Validator = (
|
|
|
33
33
|
|
|
34
34
|
const validators: Validator[] = [];
|
|
35
35
|
|
|
36
|
-
const getSenderAddress = (
|
|
37
|
-
tx: TxParamsCommon | RawTxObject<TxSchema>,
|
|
38
|
-
): Encoded.AccountAddress | undefined => [
|
|
39
|
-
'senderId', 'accountId', 'ownerId', 'callerId',
|
|
40
|
-
'oracleId', 'fromId', 'initiator', 'gaId', 'payerId',
|
|
41
|
-
]
|
|
42
|
-
.map((key: keyof TxSchema) => tx[key])
|
|
43
|
-
.filter((a) => a)
|
|
44
|
-
.map((a) => a?.toString().replace(/^ok_/, 'ak_'))[0] as Encoded.AccountAddress | undefined;
|
|
45
|
-
|
|
46
36
|
async function verifyTransactionInternal(
|
|
47
|
-
tx:
|
|
37
|
+
tx: TxUnpacked,
|
|
48
38
|
node: Node,
|
|
49
39
|
parentTxTypes: Tag[],
|
|
50
40
|
): Promise<ValidatorResult[]> {
|
|
51
|
-
const address =
|
|
52
|
-
?? (tx.tag === Tag.SignedTx ? getSenderAddress(tx.encodedTx) : undefined);
|
|
41
|
+
const address = getTransactionSignerAddress(buildTx(tx));
|
|
53
42
|
const [account, { height }, { consensusProtocolVersion, nodeNetworkId }] = await Promise.all([
|
|
54
|
-
address
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
// TODO: remove after fixing https://github.com/aeternity/aepp-sdk-js/issues/1537
|
|
62
|
-
.then((acc) => ({ ...acc, id: acc.id as Encoded.AccountAddress })),
|
|
43
|
+
node.getAccountByPubkey(address)
|
|
44
|
+
.catch((error) => {
|
|
45
|
+
if (!isAccountNotFoundError(error)) throw error;
|
|
46
|
+
return { id: address, balance: 0n, nonce: 0 };
|
|
47
|
+
})
|
|
48
|
+
// TODO: remove after fixing https://github.com/aeternity/aepp-sdk-js/issues/1537
|
|
49
|
+
.then((acc) => ({ ...acc, id: acc.id as Encoded.AccountAddress })),
|
|
63
50
|
node.getCurrentKeyBlockHeight(),
|
|
64
51
|
node.getNodeInfo(),
|
|
65
52
|
]);
|
|
66
53
|
|
|
67
54
|
return (await Promise.all(
|
|
68
|
-
validators.map((v) => v(
|
|
55
|
+
validators.map(async (v) => v(
|
|
69
56
|
tx,
|
|
70
57
|
{
|
|
71
58
|
node, account, height, consensusProtocolVersion, nodeNetworkId, parentTxTypes,
|
|
@@ -88,15 +75,19 @@ export default async function verifyTransaction(
|
|
|
88
75
|
transaction: Parameters<typeof unpackTx>[0],
|
|
89
76
|
nodeNotCached: Node,
|
|
90
77
|
): Promise<ValidatorResult[]> {
|
|
91
|
-
const node = new Node(nodeNotCached.$host, {
|
|
92
|
-
|
|
78
|
+
const node = new Node(nodeNotCached.$host, {
|
|
79
|
+
ignoreVersion: true,
|
|
80
|
+
pipeline: nodeNotCached.pipeline.clone(),
|
|
81
|
+
additionalPolicies: [genAggressiveCacheGetResponsesPolicy()],
|
|
82
|
+
});
|
|
93
83
|
return verifyTransactionInternal(unpackTx(transaction), node, []);
|
|
94
84
|
}
|
|
95
85
|
|
|
96
86
|
validators.push(
|
|
97
|
-
(
|
|
87
|
+
(tx, { account, nodeNetworkId, parentTxTypes }) => {
|
|
88
|
+
if (tx.tag !== Tag.SignedTx) return [];
|
|
89
|
+
const { encodedTx, signatures } = tx;
|
|
98
90
|
if ((encodedTx ?? signatures) == null) return [];
|
|
99
|
-
if (account == null) return [];
|
|
100
91
|
if (signatures.length !== 1) return []; // TODO: Support multisignature like in state channels
|
|
101
92
|
const prefix = Buffer.from([
|
|
102
93
|
nodeNetworkId,
|
|
@@ -114,82 +105,61 @@ validators.push(
|
|
|
114
105
|
checkedKeys: ['encodedTx', 'signatures'],
|
|
115
106
|
}];
|
|
116
107
|
},
|
|
117
|
-
async (
|
|
118
|
-
|
|
119
|
-
|
|
108
|
+
async (tx, { node, parentTxTypes }) => {
|
|
109
|
+
let nestedTx;
|
|
110
|
+
if ('encodedTx' in tx) nestedTx = tx.encodedTx;
|
|
111
|
+
if ('tx' in tx) nestedTx = tx.tx;
|
|
112
|
+
if (nestedTx == null) return [];
|
|
113
|
+
return verifyTransactionInternal(nestedTx, node, [...parentTxTypes, tx.tag]);
|
|
120
114
|
},
|
|
121
|
-
(
|
|
122
|
-
if (ttl
|
|
123
|
-
ttl
|
|
124
|
-
if (ttl === 0 || ttl >= height) return [];
|
|
115
|
+
(tx, { height }) => {
|
|
116
|
+
if (!('ttl' in tx)) return [];
|
|
117
|
+
if (tx.ttl === 0 || tx.ttl >= height) return [];
|
|
125
118
|
return [{
|
|
126
|
-
message: `TTL ${ttl} is already expired, current height is ${height}`,
|
|
119
|
+
message: `TTL ${tx.ttl} is already expired, current height is ${height}`,
|
|
127
120
|
key: 'ExpiredTTL',
|
|
128
121
|
checkedKeys: ['ttl'],
|
|
129
122
|
}];
|
|
130
123
|
},
|
|
131
|
-
({
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if (
|
|
135
|
-
if ((amount ?? fee ?? nameFee) == null) return [];
|
|
136
|
-
fee ??= 0;
|
|
137
|
-
const cost = new BigNumber(fee).plus(nameFee ?? 0).plus(amount ?? 0)
|
|
138
|
-
.plus(tag === Tag.PayingForTx ? tx.encodedTx.fee : 0)
|
|
139
|
-
.minus(parentTxTypes.includes(Tag.PayingForTx) ? fee : 0);
|
|
140
|
-
if (cost.lte(account.balance.toString())) return [];
|
|
124
|
+
async (tx, { account, parentTxTypes, node }) => {
|
|
125
|
+
if (parentTxTypes.length !== 0) return [];
|
|
126
|
+
const cost = await getExecutionCostUsingNode(buildTx(tx), node).catch(() => 0n);
|
|
127
|
+
if (cost <= account.balance) return [];
|
|
141
128
|
return [{
|
|
142
|
-
message: `Account balance ${account.balance
|
|
129
|
+
message: `Account balance ${account.balance} is not enough to execute the transaction that costs ${cost}`,
|
|
143
130
|
key: 'InsufficientBalance',
|
|
144
|
-
checkedKeys: ['amount', 'fee', 'nameFee'],
|
|
131
|
+
checkedKeys: ['amount', 'fee', 'nameFee', 'gasLimit', 'gasPrice'],
|
|
145
132
|
}];
|
|
146
133
|
},
|
|
147
|
-
(
|
|
148
|
-
if (account == null) return [];
|
|
134
|
+
(tx, { account }) => {
|
|
149
135
|
let message;
|
|
150
|
-
if (tag === Tag.SignedTx && account.kind === 'generalized' && signatures.length !== 0) {
|
|
136
|
+
if (tx.tag === Tag.SignedTx && account.kind === 'generalized' && tx.signatures.length !== 0) {
|
|
151
137
|
message = 'Generalized account can\'t be used to generate SignedTx with signatures';
|
|
152
138
|
}
|
|
153
|
-
if (tag === Tag.GaMetaTx && account.kind === 'basic') {
|
|
139
|
+
if (tx.tag === Tag.GaMetaTx && account.kind === 'basic') {
|
|
154
140
|
message = 'Basic account can\'t be used to generate GaMetaTx';
|
|
155
141
|
}
|
|
156
142
|
if (message == null) return [];
|
|
157
143
|
return [{ message, key: 'InvalidAccountType', checkedKeys: ['tag'] }];
|
|
158
144
|
},
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
return [{
|
|
165
|
-
...nonce < validNonce
|
|
166
|
-
? {
|
|
167
|
-
message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,
|
|
168
|
-
key: 'NonceAlreadyUsed',
|
|
169
|
-
}
|
|
170
|
-
: {
|
|
171
|
-
message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,
|
|
172
|
-
key: 'NonceHigh',
|
|
173
|
-
},
|
|
174
|
-
checkedKeys: ['nonce'],
|
|
175
|
-
}];
|
|
176
|
-
},
|
|
177
|
-
({ ctVersion, abiVersion, tag }, { consensusProtocolVersion }) => {
|
|
178
|
-
const oracleCall = Tag.Oracle === tag || Tag.OracleRegisterTx === tag;
|
|
179
|
-
const contractCreate = Tag.ContractCreateTx === tag || Tag.GaAttachTx === tag;
|
|
180
|
-
const contractCall = Tag.ContractCallTx === tag || Tag.GaMetaTx === tag;
|
|
145
|
+
// TODO: revert nonce check
|
|
146
|
+
(tx, { consensusProtocolVersion }) => {
|
|
147
|
+
const oracleCall = Tag.Oracle === tx.tag || Tag.OracleRegisterTx === tx.tag;
|
|
148
|
+
const contractCreate = Tag.ContractCreateTx === tx.tag || Tag.GaAttachTx === tx.tag;
|
|
149
|
+
const contractCall = Tag.ContractCallTx === tx.tag || Tag.GaMetaTx === tx.tag;
|
|
181
150
|
const type = (oracleCall ? 'oracle-call' : null)
|
|
182
151
|
?? (contractCreate ? 'contract-create' : null)
|
|
183
152
|
?? (contractCall ? 'contract-call' : null);
|
|
184
153
|
if (type == null) return [];
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
vmVersion: any[];
|
|
154
|
+
const protocol = ProtocolToVmAbi[consensusProtocolVersion][type] as {
|
|
155
|
+
abiVersion: readonly any[];
|
|
156
|
+
vmVersion: readonly any[];
|
|
189
157
|
};
|
|
190
158
|
|
|
191
|
-
|
|
192
|
-
if (
|
|
159
|
+
let ctVersion: Partial<CtVersion> | undefined;
|
|
160
|
+
if ('abiVersion' in tx) ctVersion = { abiVersion: tx.abiVersion };
|
|
161
|
+
if ('ctVersion' in tx) ctVersion = tx.ctVersion;
|
|
162
|
+
if (ctVersion == null) throw new UnexpectedTsError();
|
|
193
163
|
if (
|
|
194
164
|
!protocol.abiVersion.includes(ctVersion.abiVersion)
|
|
195
165
|
|| (contractCreate && !protocol.vmVersion.includes(ctVersion.vmVersion))
|
|
@@ -202,14 +172,13 @@ validators.push(
|
|
|
202
172
|
}
|
|
203
173
|
return [];
|
|
204
174
|
},
|
|
205
|
-
async (
|
|
206
|
-
if (Tag.ContractCallTx !== tag) return [];
|
|
207
|
-
contractId = contractId as Encoded.ContractAddress;
|
|
175
|
+
async (tx, { node }) => {
|
|
176
|
+
if (Tag.ContractCallTx !== tx.tag) return [];
|
|
208
177
|
try {
|
|
209
|
-
const { active } = await node.getContract(contractId);
|
|
178
|
+
const { active } = await node.getContract(tx.contractId);
|
|
210
179
|
if (active) return [];
|
|
211
180
|
return [{
|
|
212
|
-
message: `Contract ${contractId} is not active`,
|
|
181
|
+
message: `Contract ${tx.contractId} is not active`,
|
|
213
182
|
key: 'ContractNotActive',
|
|
214
183
|
checkedKeys: ['contractId'],
|
|
215
184
|
}];
|
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ISC License (ISC)
|
|
3
|
-
* Copyright (c) 2018 aeternity developers
|
|
4
|
-
*
|
|
5
|
-
* Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
-
* purpose with or without fee is hereby granted, provided that the above
|
|
7
|
-
* copyright notice and this permission notice appear in all copies.
|
|
8
|
-
*
|
|
9
|
-
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
-
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
-
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
-
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
-
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
-
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
-
* PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
-
*/
|
|
17
1
|
import BigNumber from 'bignumber.js';
|
|
18
2
|
import { isBigNumber } from './bignumber';
|
|
19
3
|
import { ArgumentError } from './errors';
|
package/src/utils/autorest.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { RestError, PipelineResponse, PipelinePolicy } from '@azure/core-rest-pi
|
|
|
2
2
|
import { AdditionalPolicyConfig } from '@azure/core-client';
|
|
3
3
|
import { pause } from './other';
|
|
4
4
|
import semverSatisfies from './semver-satisfies';
|
|
5
|
-
import { UnsupportedVersionError } from './errors';
|
|
5
|
+
import { UnexpectedTsError, UnsupportedVersionError } from './errors';
|
|
6
6
|
|
|
7
7
|
export const genRequestQueuesPolicy = (): AdditionalPolicyConfig => {
|
|
8
8
|
const requestQueues = new Map<string, Promise<unknown>>();
|
|
@@ -48,18 +48,21 @@ export const genCombineGetRequestsPolicy = (): AdditionalPolicyConfig => {
|
|
|
48
48
|
};
|
|
49
49
|
};
|
|
50
50
|
|
|
51
|
-
export const genAggressiveCacheGetResponsesPolicy = ():
|
|
51
|
+
export const genAggressiveCacheGetResponsesPolicy = (): AdditionalPolicyConfig => {
|
|
52
52
|
const getRequests = new Map<string, Promise<PipelineResponse>>();
|
|
53
53
|
|
|
54
54
|
return {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
55
|
+
policy: {
|
|
56
|
+
name: 'aggressive-cache-get-responses',
|
|
57
|
+
async sendRequest(request, next) {
|
|
58
|
+
if (request.method !== 'GET') return next(request);
|
|
59
|
+
const key = JSON.stringify([request.url, request.body]);
|
|
60
|
+
const response = getRequests.get(key) ?? next(request);
|
|
61
|
+
getRequests.set(key, response);
|
|
62
|
+
return response;
|
|
63
|
+
},
|
|
62
64
|
},
|
|
65
|
+
position: 'perCall',
|
|
63
66
|
};
|
|
64
67
|
};
|
|
65
68
|
|
|
@@ -94,15 +97,53 @@ export const genErrorFormatterPolicy = (
|
|
|
94
97
|
export const genVersionCheckPolicy = (
|
|
95
98
|
name: string,
|
|
96
99
|
ignorePath: string,
|
|
97
|
-
versionPromise: Promise<string>,
|
|
100
|
+
versionPromise: Promise<string | Error>,
|
|
98
101
|
geVersion: string,
|
|
99
102
|
ltVersion: string,
|
|
100
103
|
): PipelinePolicy => ({
|
|
101
104
|
name: 'version-check',
|
|
102
105
|
async sendRequest(request, next) {
|
|
103
106
|
if (new URL(request.url).pathname === ignorePath) return next(request);
|
|
104
|
-
const
|
|
107
|
+
const version = await versionPromise;
|
|
108
|
+
if (version instanceof Error) throw version;
|
|
109
|
+
const args = [version, geVersion, ltVersion] as const;
|
|
105
110
|
if (!semverSatisfies(...args)) throw new UnsupportedVersionError(name, ...args);
|
|
106
111
|
return next(request);
|
|
107
112
|
},
|
|
108
113
|
});
|
|
114
|
+
|
|
115
|
+
export const genRetryOnFailurePolicy = (
|
|
116
|
+
retryCount: number,
|
|
117
|
+
retryOverallDelay: number,
|
|
118
|
+
): AdditionalPolicyConfig => ({
|
|
119
|
+
policy: {
|
|
120
|
+
name: 'retry-on-failure',
|
|
121
|
+
async sendRequest(request, next) {
|
|
122
|
+
const statusesToNotRetry = [200, 400, 403];
|
|
123
|
+
|
|
124
|
+
const intervals = new Array(retryCount).fill(0)
|
|
125
|
+
.map((_, idx) => ((idx + 1) / retryCount) ** 2);
|
|
126
|
+
const intervalSum = intervals.reduce((a, b) => a + b);
|
|
127
|
+
const intervalsInMs = intervals.map((el) => (el / intervalSum) * retryOverallDelay);
|
|
128
|
+
|
|
129
|
+
let error: Error | undefined;
|
|
130
|
+
for (let attempt = 0; attempt <= retryCount; attempt += 1) {
|
|
131
|
+
if (error != null) {
|
|
132
|
+
if (
|
|
133
|
+
!(error instanceof RestError)
|
|
134
|
+
|| statusesToNotRetry.includes(error.response?.status ?? 0)
|
|
135
|
+
) throw error;
|
|
136
|
+
await pause(intervalsInMs[attempt - 1]);
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
return await next(request);
|
|
140
|
+
} catch (e) {
|
|
141
|
+
error = e;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (error == null) throw new UnexpectedTsError();
|
|
145
|
+
throw error;
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
position: 'perCall',
|
|
149
|
+
});
|
package/src/utils/bytes.ts
CHANGED
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ISC License (ISC)
|
|
3
|
-
* Copyright 2018 aeternity developers
|
|
4
|
-
*
|
|
5
|
-
* Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
-
* purpose with or without fee is hereby granted, provided that the above
|
|
7
|
-
* copyright notice and this permission notice appear in all copies.
|
|
8
|
-
*
|
|
9
|
-
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
-
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
-
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
-
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
-
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
-
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
-
* PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
-
*/
|
|
17
1
|
import BigNumber from 'bignumber.js';
|
|
18
2
|
import { NoSerializerFoundError, TypeError } from './errors';
|
|
19
3
|
|
package/src/utils/crypto.ts
CHANGED
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ISC License (ISC)
|
|
3
|
-
* Copyright 2018 aeternity developers
|
|
4
|
-
*
|
|
5
|
-
* Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
-
* purpose with or without fee is hereby granted, provided that the above
|
|
7
|
-
* copyright notice and this permission notice appear in all copies.
|
|
8
|
-
*
|
|
9
|
-
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
-
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
-
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
-
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
-
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
-
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
-
* PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
-
*/
|
|
17
1
|
import nacl, { SignKeyPair } from 'tweetnacl';
|
|
18
2
|
// js extension is required for mjs build, not importing the whole package to reduce bundle size
|
|
19
3
|
// eslint-disable-next-line import/extensions
|