@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
package/src/contract/Contract.ts
CHANGED
|
@@ -1,20 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ISC License (ISC)
|
|
3
|
-
* Copyright (c) 2022 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
|
-
|
|
18
1
|
/**
|
|
19
2
|
* Contract module - routines to interact with the æternity contract
|
|
20
3
|
*
|
|
@@ -25,9 +8,9 @@
|
|
|
25
8
|
import { Encoder as Calldata } from '@aeternity/aepp-calldata';
|
|
26
9
|
import { DRY_RUN_ACCOUNT } from '../tx/builder/schema';
|
|
27
10
|
import { Tag, AensName } from '../tx/builder/constants';
|
|
28
|
-
import {
|
|
29
|
-
|
|
30
|
-
|
|
11
|
+
import {
|
|
12
|
+
buildContractIdByContractTx, unpackTx, buildTxAsync, BuildTxOptions, buildTxHash,
|
|
13
|
+
} from '../tx/builder';
|
|
31
14
|
import { decode, Encoded } from '../utils/encoder';
|
|
32
15
|
import {
|
|
33
16
|
MissingContractDefError,
|
|
@@ -47,28 +30,30 @@ import {
|
|
|
47
30
|
UnexpectedTsError,
|
|
48
31
|
InternalError,
|
|
49
32
|
NoWalletConnectedError,
|
|
33
|
+
ContractError,
|
|
50
34
|
} from '../utils/errors';
|
|
51
35
|
import { hash as calcHash } from '../utils/crypto';
|
|
52
36
|
import {
|
|
53
|
-
ContractCallObject as NodeContractCallObject,
|
|
37
|
+
ContractCallObject as NodeContractCallObject, Event as NodeEvent,
|
|
54
38
|
} from '../apis/node';
|
|
55
39
|
import CompilerBase, { Aci } from './compiler/Base';
|
|
56
40
|
import Node, { TransformNodeType } from '../Node';
|
|
57
41
|
import {
|
|
58
|
-
getAccount, getContract, getContractByteCode, resolveName, txDryRun,
|
|
42
|
+
getAccount, getContract, getContractByteCode, resolveName, txDryRun, sendTransaction,
|
|
43
|
+
SendTransactionOptions,
|
|
59
44
|
} from '../chain';
|
|
60
45
|
import AccountBase from '../account/Base';
|
|
61
|
-
import {
|
|
62
|
-
import { isNameValid, produceNameId } from '../tx/builder/helpers';
|
|
46
|
+
import { TxUnpacked } from '../tx/builder/schema.generated';
|
|
63
47
|
|
|
64
|
-
type
|
|
48
|
+
type ContractAci = NonNullable<Aci[0]['contract']>;
|
|
49
|
+
type FunctionAci = ContractAci['functions'][0];
|
|
65
50
|
|
|
66
51
|
interface Event extends NodeEvent {
|
|
67
52
|
address: Encoded.ContractAddress;
|
|
68
53
|
data: Encoded.ContractBytearray;
|
|
69
54
|
}
|
|
70
55
|
|
|
71
|
-
export interface ContractCallObject extends NodeContractCallObject {
|
|
56
|
+
export interface ContractCallObject extends TransformNodeType<NodeContractCallObject> {
|
|
72
57
|
returnValue: Encoded.ContractBytearray;
|
|
73
58
|
log: Event[];
|
|
74
59
|
}
|
|
@@ -82,12 +67,12 @@ interface DecodedEvent {
|
|
|
82
67
|
};
|
|
83
68
|
}
|
|
84
69
|
|
|
85
|
-
type TxData = Awaited<ReturnType<typeof
|
|
70
|
+
type TxData = Awaited<ReturnType<typeof sendTransaction>>;
|
|
86
71
|
|
|
87
72
|
interface SendAndProcessReturnType {
|
|
88
|
-
result?:
|
|
73
|
+
result?: ContractCallObject;
|
|
89
74
|
hash: TxData['hash'];
|
|
90
|
-
tx:
|
|
75
|
+
tx: TxUnpacked & { tag: Tag.ContractCallTx | Tag.ContractCreateTx };
|
|
91
76
|
txData: TxData;
|
|
92
77
|
rawTx: Encoded.Transaction;
|
|
93
78
|
}
|
|
@@ -96,15 +81,12 @@ export interface ContractMethodsBase { [key: string]: (...args: any[]) => any }
|
|
|
96
81
|
|
|
97
82
|
type MethodsToContractApi<M extends ContractMethodsBase> = {
|
|
98
83
|
[Name in keyof M]:
|
|
99
|
-
M[Name] extends (...args: infer Args) =>
|
|
84
|
+
M[Name] extends (...args: infer Args) => any
|
|
100
85
|
? (...args: [
|
|
101
86
|
...Args,
|
|
102
87
|
...[] | [Name extends 'init'
|
|
103
88
|
? Parameters<Contract<M>['$deploy']>[1] : Parameters<Contract<M>['$call']>[2]],
|
|
104
|
-
]) =>
|
|
105
|
-
Awaited<ReturnType<Contract<M>['$call']>> &
|
|
106
|
-
{ decodedResult?: Ret }
|
|
107
|
-
>
|
|
89
|
+
]) => ReturnType<Contract<M>['$call']>
|
|
108
90
|
: never
|
|
109
91
|
};
|
|
110
92
|
|
|
@@ -117,6 +99,15 @@ type MethodParameters<M extends ContractMethodsBase, Fn extends MethodNames<M>>
|
|
|
117
99
|
? M extends { init: any } ? Parameters<M['init']> : []
|
|
118
100
|
: Parameters<M[Fn]>;
|
|
119
101
|
|
|
102
|
+
interface GetContractNameByEventOptions {
|
|
103
|
+
contractAddressToName?: { [key: Encoded.ContractAddress]: string };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
interface GetCallResultByHashReturnType<M extends ContractMethodsBase, Fn extends MethodNames<M>> {
|
|
107
|
+
decodedResult: ReturnType<M[Fn]>;
|
|
108
|
+
decodedEvents?: ReturnType<Contract<M>['$decodeEvents']>;
|
|
109
|
+
}
|
|
110
|
+
|
|
120
111
|
/**
|
|
121
112
|
* Generate contract ACI object with predefined js methods for contract usage - can be used for
|
|
122
113
|
* creating a reference to already deployed contracts
|
|
@@ -135,84 +126,43 @@ type MethodParameters<M extends ContractMethodsBase, Fn extends MethodNames<M>>
|
|
|
135
126
|
* stateful or not
|
|
136
127
|
*/
|
|
137
128
|
class Contract<M extends ContractMethodsBase> {
|
|
138
|
-
/**
|
|
139
|
-
* Helper to generate a signature to delegate
|
|
140
|
-
* - pre-claim/claim/transfer/revoke of a name to a contract.
|
|
141
|
-
* - register/extend/respond of an Oracle to a contract.
|
|
142
|
-
* @category contract
|
|
143
|
-
* @param ids - The list of id's to prepend
|
|
144
|
-
* @param _options - Options
|
|
145
|
-
* @param _options.omitAddress - Prepend delegation signature with an account address
|
|
146
|
-
* @param _options.onAccount - Account to use
|
|
147
|
-
* @returns Signature
|
|
148
|
-
* @example
|
|
149
|
-
* ```js
|
|
150
|
-
* const aeSdk = new AeSdk({ ... })
|
|
151
|
-
* const contract = await aeSdk.initializeContract({ address: 'ct_asd2ks...' })
|
|
152
|
-
* const aensName = 'example.chain'
|
|
153
|
-
* const onAccount = new MemoryAccount(...) // Sign with a specific account
|
|
154
|
-
* // Preclaim signature
|
|
155
|
-
* const preclaimSig = await contract.$createDelegationSignature([], { onAccount })
|
|
156
|
-
* // Claim, transfer and revoke signature
|
|
157
|
-
* const aensDelegationSig = await contract
|
|
158
|
-
* .$createDelegationSignature([aensName], { onAccount })
|
|
159
|
-
* ```
|
|
160
|
-
* @example
|
|
161
|
-
* ```js
|
|
162
|
-
* const aeSdk = new AeSdk({ ... })
|
|
163
|
-
* const contract = await aeSdk.initializeContract({ address: 'ct_asd2ks...' })
|
|
164
|
-
* const oracleQueryId = 'oq_...'
|
|
165
|
-
* const onAccount = new MemoryAccount(...) // Sign with a specific account
|
|
166
|
-
* // Oracle register and extend signature
|
|
167
|
-
* const oracleDelegationSig = await contract.$createDelegationSignature([], { onAccount })
|
|
168
|
-
* // Oracle respond signature
|
|
169
|
-
* const respondSig = await contract
|
|
170
|
-
* .$createDelegationSignature([oracleQueryId], { onAccount, omitAddress: true })
|
|
171
|
-
* ```
|
|
172
|
-
*/
|
|
173
|
-
async $createDelegationSignature(
|
|
174
|
-
ids: Array<Encoded.Any | AensName> = [],
|
|
175
|
-
_options?: { omitAddress?: boolean; onAccount?: AccountBase },
|
|
176
|
-
): Promise<Uint8Array> {
|
|
177
|
-
const options = { ...this.$options, ..._options };
|
|
178
|
-
const contractId = this.$options.address;
|
|
179
|
-
if (options.onAccount == null) throw new IllegalArgumentError('Can\'t create delegation signature without account');
|
|
180
|
-
if (contractId == null) throw new MissingContractAddressError('Can\'t create delegation signature without address');
|
|
181
|
-
return options.onAccount.sign(
|
|
182
|
-
concatBuffers([
|
|
183
|
-
Buffer.from(await options.onNode.getNetworkId()),
|
|
184
|
-
...options.omitAddress === true ? [] : [decode(options.onAccount.address)],
|
|
185
|
-
...ids.map((e) => (isNameValid(e) ? produceNameId(e) : e)).map((e) => decode(e)),
|
|
186
|
-
decode(contractId),
|
|
187
|
-
]),
|
|
188
|
-
options,
|
|
189
|
-
);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
129
|
/**
|
|
193
130
|
* Compile contract
|
|
194
131
|
* @returns bytecode
|
|
195
132
|
*/
|
|
196
133
|
async $compile(): Promise<Encoded.ContractBytearray> {
|
|
197
134
|
if (this.$options.bytecode != null) return this.$options.bytecode;
|
|
198
|
-
if (this.$options.sourceCode == null) throw new IllegalArgumentError('Can\'t compile without source code');
|
|
199
135
|
if (this.$options.onCompiler == null) throw new IllegalArgumentError('Can\'t compile without compiler');
|
|
200
|
-
this.$options.
|
|
201
|
-
|
|
202
|
-
|
|
136
|
+
if (this.$options.sourceCode != null) {
|
|
137
|
+
const { bytecode } = await this.$options.onCompiler
|
|
138
|
+
.compileBySourceCode(this.$options.sourceCode, this.$options.fileSystem);
|
|
139
|
+
this.$options.bytecode = bytecode;
|
|
140
|
+
}
|
|
141
|
+
if (this.$options.sourceCodePath != null) {
|
|
142
|
+
const { bytecode } = await this.$options.onCompiler.compile(this.$options.sourceCodePath);
|
|
143
|
+
this.$options.bytecode = bytecode;
|
|
144
|
+
}
|
|
145
|
+
if (this.$options.bytecode == null) {
|
|
146
|
+
throw new IllegalArgumentError('Can\'t compile without sourceCode and sourceCodePath');
|
|
147
|
+
}
|
|
203
148
|
return this.$options.bytecode;
|
|
204
149
|
}
|
|
205
150
|
|
|
206
|
-
|
|
207
|
-
{ returnType, returnValue }:
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
): void {
|
|
151
|
+
#getCallResult<Fn extends MethodNames<M>>(
|
|
152
|
+
{ returnType, returnValue, log }: ContractCallObject,
|
|
153
|
+
fnName: Fn,
|
|
154
|
+
transaction: Encoded.Transaction | undefined,
|
|
155
|
+
options: Parameters<Contract<M>['$decodeEvents']>[1],
|
|
156
|
+
): GetCallResultByHashReturnType<M, Fn> {
|
|
213
157
|
let message: string;
|
|
214
158
|
switch (returnType) {
|
|
215
|
-
case 'ok':
|
|
159
|
+
case 'ok': {
|
|
160
|
+
const fnAci = this.#getFunctionAci(fnName);
|
|
161
|
+
return {
|
|
162
|
+
decodedResult: this._calldata.decode(this._name, fnAci.name, returnValue),
|
|
163
|
+
decodedEvents: this.$decodeEvents(log, options),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
216
166
|
case 'revert':
|
|
217
167
|
message = this._calldata.decodeFateString(returnValue);
|
|
218
168
|
break;
|
|
@@ -225,29 +175,43 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
225
175
|
throw new NodeInvocationError(message, transaction);
|
|
226
176
|
}
|
|
227
177
|
|
|
228
|
-
|
|
178
|
+
async #sendAndProcess<Fn extends MethodNames<M>>(
|
|
229
179
|
tx: Encoded.Transaction,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
const
|
|
180
|
+
fnName: Fn,
|
|
181
|
+
options: SendTransactionOptions & Parameters<Contract<M>['$getCallResultByTxHash']>[2],
|
|
182
|
+
): Promise<SendAndProcessReturnType & Partial<GetCallResultByHashReturnType<M, Fn>>> {
|
|
183
|
+
const txData = await sendTransaction(tx, { ...this.$options, ...options });
|
|
184
|
+
return {
|
|
234
185
|
hash: txData.hash,
|
|
235
186
|
tx: unpackTx<Tag.ContractCallTx | Tag.ContractCreateTx>(txData.rawTx),
|
|
236
187
|
txData,
|
|
237
188
|
rawTx: txData.rawTx,
|
|
189
|
+
...txData.blockHeight != null && (
|
|
190
|
+
await this.$getCallResultByTxHash(txData.hash, fnName, options)
|
|
191
|
+
),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
async $getCallResultByTxHash<Fn extends MethodNames<M>>(
|
|
196
|
+
hash: Encoded.TxHash,
|
|
197
|
+
fnName: Fn,
|
|
198
|
+
options?: Parameters<Contract<M>['$decodeEvents']>[1],
|
|
199
|
+
): Promise<GetCallResultByHashReturnType<M, Fn> & { result: ContractCallObject }> {
|
|
200
|
+
const { callInfo } = await this.$options.onNode.getTransactionInfoByHash(hash);
|
|
201
|
+
if (callInfo == null) {
|
|
202
|
+
throw new ContractError(`callInfo is not available for transaction ${hash}`);
|
|
203
|
+
}
|
|
204
|
+
const callInfoTyped = callInfo as ContractCallObject;
|
|
205
|
+
return {
|
|
206
|
+
...this.#getCallResult(callInfoTyped, fnName, undefined, options),
|
|
207
|
+
result: callInfoTyped,
|
|
238
208
|
};
|
|
239
|
-
if (txData.blockHeight == null) return result;
|
|
240
|
-
const { callInfo } = await this.$options.onNode.getTransactionInfoByHash(txData.hash);
|
|
241
|
-
Object.assign(result.txData, callInfo); // TODO: don't duplicate data in result
|
|
242
|
-
// @ts-expect-error TODO api should be updated to match types
|
|
243
|
-
this._handleCallError(callInfo, tx);
|
|
244
|
-
return { ...result, result: callInfo as TransformNodeType<ContractCallObject> };
|
|
245
209
|
}
|
|
246
210
|
|
|
247
211
|
async _estimateGas<Fn extends MethodNames<M>>(
|
|
248
212
|
name: Fn,
|
|
249
213
|
params: MethodParameters<M, Fn>,
|
|
250
|
-
options:
|
|
214
|
+
options: Omit<Parameters<Contract<M>['$call']>[2], 'callStatic'> = {},
|
|
251
215
|
): Promise<number> {
|
|
252
216
|
const { result } = await this.$call(name, params, { ...options, callStatic: true });
|
|
253
217
|
if (result == null) throw new UnexpectedTsError();
|
|
@@ -280,15 +244,20 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
280
244
|
if (opt.onAccount == null) throw new IllegalArgumentError('Can\'t deploy without account');
|
|
281
245
|
const ownerId = opt.onAccount.address;
|
|
282
246
|
if (this.$options.bytecode == null) throw new IllegalArgumentError('Can\'t deploy without bytecode');
|
|
283
|
-
const tx = await
|
|
247
|
+
const tx = await buildTxAsync({
|
|
284
248
|
...opt,
|
|
249
|
+
tag: Tag.ContractCreateTx,
|
|
285
250
|
gasLimit: opt.gasLimit ?? await this._estimateGas('init', params, opt),
|
|
286
251
|
callData: this._calldata.encode(this._name, 'init', params),
|
|
287
252
|
code: this.$options.bytecode,
|
|
288
253
|
ownerId,
|
|
289
254
|
});
|
|
290
255
|
this.$options.address = buildContractIdByContractTx(tx);
|
|
291
|
-
const { hash, ...other } = await this
|
|
256
|
+
const { hash, ...other } = await this.#sendAndProcess(
|
|
257
|
+
tx,
|
|
258
|
+
'init',
|
|
259
|
+
{ ...opt, onAccount: opt.onAccount },
|
|
260
|
+
);
|
|
292
261
|
return {
|
|
293
262
|
...other,
|
|
294
263
|
...other.result?.log != null && {
|
|
@@ -305,14 +274,18 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
305
274
|
* @param name - Function name
|
|
306
275
|
* @returns function ACI
|
|
307
276
|
*/
|
|
308
|
-
|
|
309
|
-
const fn = this.
|
|
277
|
+
#getFunctionAci(name: string): FunctionAci {
|
|
278
|
+
const fn = this.#aciContract.functions.find(
|
|
310
279
|
(f: { name: string }) => f.name === name,
|
|
311
280
|
);
|
|
312
281
|
if (fn != null) {
|
|
313
282
|
return fn;
|
|
314
283
|
}
|
|
315
|
-
if (name === 'init')
|
|
284
|
+
if (name === 'init') {
|
|
285
|
+
return {
|
|
286
|
+
arguments: [], name: 'init', payable: false, returns: 'unit', stateful: true,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
316
289
|
throw new NoSuchContractFunctionError(`Function ${name} doesn't exist in contract`);
|
|
317
290
|
}
|
|
318
291
|
|
|
@@ -328,21 +301,18 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
328
301
|
params: MethodParameters<M, Fn>,
|
|
329
302
|
options: Partial<BuildTxOptions<Tag.ContractCallTx, 'callerId' | 'contractId' | 'callData'>>
|
|
330
303
|
& Parameters<Contract<M>['$decodeEvents']>[1]
|
|
331
|
-
& Omit<
|
|
304
|
+
& Omit<SendTransactionOptions, 'onAccount' | 'onNode'>
|
|
332
305
|
& Omit<Parameters<typeof txDryRun>[2], 'onNode'>
|
|
333
306
|
& { onAccount?: AccountBase; onNode?: Node; callStatic?: boolean } = {},
|
|
334
|
-
): Promise<{
|
|
335
|
-
decodedResult?: any;
|
|
336
|
-
decodedEvents?: ReturnType<Contract<M>['$decodeEvents']>;
|
|
337
|
-
} & SendAndProcessReturnType> {
|
|
307
|
+
): Promise<SendAndProcessReturnType & Partial<GetCallResultByHashReturnType<M, Fn>>> {
|
|
338
308
|
const { callStatic, top, ...opt } = { ...this.$options, ...options };
|
|
339
|
-
const
|
|
309
|
+
const fnAci = this.#getFunctionAci(fn);
|
|
340
310
|
const contractId = this.$options.address;
|
|
341
311
|
const { onNode } = opt;
|
|
342
312
|
|
|
343
313
|
if (fn == null) throw new MissingFunctionNameError();
|
|
344
314
|
if (fn === 'init' && callStatic !== true) throw new InvalidMethodInvocationError('"init" can be called only via dryRun');
|
|
345
|
-
if (fn !== 'init' && opt.amount != null && opt.amount > 0 &&
|
|
315
|
+
if (fn !== 'init' && opt.amount != null && opt.amount > 0 && !fnAci.payable) {
|
|
346
316
|
throw new NotPayableFunctionError(opt.amount, fn);
|
|
347
317
|
}
|
|
348
318
|
|
|
@@ -360,7 +330,6 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
360
330
|
}
|
|
361
331
|
const callData = this._calldata.encode(this._name, fn, params);
|
|
362
332
|
|
|
363
|
-
let res: any;
|
|
364
333
|
if (callStatic === true) {
|
|
365
334
|
if (opt.nonce == null && top != null) {
|
|
366
335
|
const topKey = typeof top === 'number' ? 'height' : 'hash';
|
|
@@ -370,41 +339,44 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
370
339
|
let tx;
|
|
371
340
|
if (fn === 'init') {
|
|
372
341
|
if (this.$options.bytecode == null) throw new IllegalArgumentError('Can\'t dry-run "init" without bytecode');
|
|
373
|
-
tx = await
|
|
374
|
-
Tag.ContractCreateTx,
|
|
375
|
-
|
|
376
|
-
);
|
|
342
|
+
tx = await buildTxAsync({
|
|
343
|
+
...txOpt, tag: Tag.ContractCreateTx, code: this.$options.bytecode, ownerId: callerId,
|
|
344
|
+
});
|
|
377
345
|
} else {
|
|
378
346
|
if (contractId == null) throw new MissingContractAddressError('Can\'t dry-run contract without address');
|
|
379
|
-
tx = await
|
|
347
|
+
tx = await buildTxAsync({
|
|
348
|
+
...txOpt, tag: Tag.ContractCallTx, callerId, contractId,
|
|
349
|
+
});
|
|
380
350
|
}
|
|
381
351
|
|
|
382
352
|
const { callObj, ...dryRunOther } = await txDryRun(tx, callerId, { ...opt, top });
|
|
383
|
-
if (callObj == null)
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
contractId,
|
|
397
|
-
callData,
|
|
398
|
-
});
|
|
399
|
-
if (opt.onAccount == null) throw new IllegalArgumentError('Can\'t call contract on chain without account');
|
|
400
|
-
res = await this._sendAndProcess(tx, { ...opt, onAccount: opt.onAccount });
|
|
401
|
-
}
|
|
402
|
-
if (callStatic === true || res.txData.blockHeight != null) {
|
|
403
|
-
res.decodedResult = fnACI.returns != null && fnACI.returns !== 'unit' && fn !== 'init'
|
|
404
|
-
&& this._calldata.decode(this._name, fn, res.result.returnValue);
|
|
405
|
-
res.decodedEvents = this.$decodeEvents(res.result.log, opt);
|
|
353
|
+
if (callObj == null) {
|
|
354
|
+
throw new InternalError(`callObj is not available for transaction ${tx}`);
|
|
355
|
+
}
|
|
356
|
+
const callInfoTyped = callObj as ContractCallObject;
|
|
357
|
+
return {
|
|
358
|
+
...dryRunOther,
|
|
359
|
+
...this.#getCallResult(callInfoTyped, fn, tx, opt),
|
|
360
|
+
tx: unpackTx(tx),
|
|
361
|
+
result: callInfoTyped,
|
|
362
|
+
rawTx: tx,
|
|
363
|
+
hash: buildTxHash(tx),
|
|
364
|
+
txData: undefined as any,
|
|
365
|
+
};
|
|
406
366
|
}
|
|
407
|
-
|
|
367
|
+
|
|
368
|
+
if (top != null) throw new IllegalArgumentError('Can\'t handle `top` option in on-chain contract call');
|
|
369
|
+
if (contractId == null) throw new MissingContractAddressError('Can\'t call contract without address');
|
|
370
|
+
const tx = await buildTxAsync({
|
|
371
|
+
...opt,
|
|
372
|
+
tag: Tag.ContractCallTx,
|
|
373
|
+
gasLimit: opt.gasLimit ?? await this._estimateGas(fn, params, opt),
|
|
374
|
+
callerId,
|
|
375
|
+
contractId,
|
|
376
|
+
callData,
|
|
377
|
+
});
|
|
378
|
+
if (opt.onAccount == null) throw new IllegalArgumentError('Can\'t call contract on chain without account');
|
|
379
|
+
return this.#sendAndProcess(tx, fn, { ...opt, onAccount: opt.onAccount });
|
|
408
380
|
}
|
|
409
381
|
|
|
410
382
|
/**
|
|
@@ -415,12 +387,10 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
415
387
|
* @throws {@link MissingEventDefinitionError}
|
|
416
388
|
* @throws {@link AmbiguousEventDefinitionError}
|
|
417
389
|
*/
|
|
418
|
-
|
|
390
|
+
#getContractNameByEvent(
|
|
419
391
|
ctAddress: Encoded.ContractAddress,
|
|
420
392
|
nameHash: BigInt,
|
|
421
|
-
{ contractAddressToName }:
|
|
422
|
-
contractAddressToName?: { [key: Encoded.ContractAddress]: string };
|
|
423
|
-
},
|
|
393
|
+
{ contractAddressToName }: GetContractNameByEventOptions,
|
|
424
394
|
): string {
|
|
425
395
|
const addressToName = { ...this.$options.contractAddressToName, ...contractAddressToName };
|
|
426
396
|
if (addressToName[ctAddress] != null) return addressToName[ctAddress];
|
|
@@ -428,9 +398,11 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
428
398
|
// TODO: consider using a third-party library
|
|
429
399
|
const isEqual = (a: any, b: any): boolean => JSON.stringify(a) === JSON.stringify(b);
|
|
430
400
|
|
|
431
|
-
const
|
|
432
|
-
.
|
|
433
|
-
.
|
|
401
|
+
const contracts = this._aci
|
|
402
|
+
.map(({ contract }) => contract)
|
|
403
|
+
.filter((contract) => contract?.event) as ContractAci[];
|
|
404
|
+
const matchedEvents = contracts
|
|
405
|
+
.map((contract) => [contract.name, contract.event.variant])
|
|
434
406
|
.map(([name, events]) => events.map((event: {}) => (
|
|
435
407
|
[name, Object.keys(event)[0], Object.values(event)[0]]
|
|
436
408
|
)))
|
|
@@ -452,15 +424,14 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
452
424
|
*/
|
|
453
425
|
$decodeEvents(
|
|
454
426
|
events: Event[],
|
|
455
|
-
{ omitUnknown, ...opt }: { omitUnknown?: boolean } &
|
|
456
|
-
Parameters<Contract<M>['_getContractNameByEvent']>[2] = {},
|
|
427
|
+
{ omitUnknown, ...opt }: { omitUnknown?: boolean } & GetContractNameByEventOptions = {},
|
|
457
428
|
): DecodedEvent[] {
|
|
458
429
|
return events
|
|
459
430
|
.map((event) => {
|
|
460
431
|
const topics = event.topics.map((t: string | number) => BigInt(t));
|
|
461
432
|
let contractName;
|
|
462
433
|
try {
|
|
463
|
-
contractName = this
|
|
434
|
+
contractName = this.#getContractNameByEvent(event.address, topics[0], opt);
|
|
464
435
|
} catch (error) {
|
|
465
436
|
if ((omitUnknown ?? false) && error instanceof MissingEventDefinitionError) return null;
|
|
466
437
|
throw error;
|
|
@@ -515,7 +486,7 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
515
486
|
) as Encoded.ContractAddress;
|
|
516
487
|
}
|
|
517
488
|
|
|
518
|
-
if (address == null && sourceCode == null && bytecode == null) {
|
|
489
|
+
if (address == null && sourceCode == null && sourceCodePath == null && bytecode == null) {
|
|
519
490
|
throw new MissingContractAddressError('Can\'t create instance by ACI without address');
|
|
520
491
|
}
|
|
521
492
|
|
|
@@ -532,17 +503,32 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
532
503
|
else if (sourceCode != null) {
|
|
533
504
|
if (onCompiler == null) throw new IllegalArgumentError('Can\'t validate bytecode without compiler');
|
|
534
505
|
isValid = await onCompiler.validateBySourceCode(onChanBytecode, sourceCode, fileSystem);
|
|
506
|
+
} else if (sourceCodePath != null) {
|
|
507
|
+
if (onCompiler == null) throw new IllegalArgumentError('Can\'t validate bytecode without compiler');
|
|
508
|
+
isValid = await onCompiler.validate(onChanBytecode, sourceCodePath);
|
|
509
|
+
}
|
|
510
|
+
if (!isValid) {
|
|
511
|
+
throw new BytecodeMismatchError((sourceCode ?? sourceCodePath) != null ? 'source code' : 'bytecode');
|
|
535
512
|
}
|
|
536
|
-
if (!isValid) throw new BytecodeMismatchError(sourceCode != null ? 'source code' : 'bytecode');
|
|
537
513
|
}
|
|
538
514
|
|
|
539
515
|
return new ContractWithMethods<M>({
|
|
540
|
-
onCompiler,
|
|
516
|
+
onCompiler,
|
|
517
|
+
onNode,
|
|
518
|
+
sourceCode,
|
|
519
|
+
sourceCodePath,
|
|
520
|
+
bytecode,
|
|
521
|
+
aci,
|
|
522
|
+
address,
|
|
523
|
+
fileSystem,
|
|
524
|
+
...otherOptions,
|
|
541
525
|
});
|
|
542
526
|
}
|
|
543
527
|
|
|
544
528
|
_aci: Aci;
|
|
545
529
|
|
|
530
|
+
#aciContract: ContractAci;
|
|
531
|
+
|
|
546
532
|
_name: string;
|
|
547
533
|
|
|
548
534
|
_calldata: Calldata;
|
|
@@ -560,8 +546,13 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
560
546
|
fileSystem?: Parameters<CompilerBase['compileBySourceCode']>[1];
|
|
561
547
|
} & Parameters<Contract<M>['$deploy']>[1]) {
|
|
562
548
|
this._aci = aci;
|
|
563
|
-
|
|
564
|
-
|
|
549
|
+
const aciLast = aci[aci.length - 1];
|
|
550
|
+
if (aciLast.contract == null) {
|
|
551
|
+
throw new IllegalArgumentError(`The last 'aci' item should have 'contract' key, got ${Object.keys(aciLast)} keys instead`);
|
|
552
|
+
}
|
|
553
|
+
this.#aciContract = aciLast.contract;
|
|
554
|
+
this._name = this.#aciContract.name;
|
|
555
|
+
this._calldata = new Calldata(aci);
|
|
565
556
|
this.$options = otherOptions;
|
|
566
557
|
|
|
567
558
|
/**
|
|
@@ -580,7 +571,7 @@ class Contract<M extends ContractMethodsBase> {
|
|
|
580
571
|
*/
|
|
581
572
|
Object.assign(
|
|
582
573
|
this,
|
|
583
|
-
Object.fromEntries(this.
|
|
574
|
+
Object.fromEntries(this.#aciContract.functions
|
|
584
575
|
.map(({ name, arguments: aciArgs, stateful }: FunctionAci) => {
|
|
585
576
|
const callStatic = name !== 'init' && !stateful;
|
|
586
577
|
return [
|
|
@@ -1,27 +1,23 @@
|
|
|
1
1
|
import { Encoded } from '../../utils/encoder';
|
|
2
|
-
import { Aci as BaseAci } from '../../apis/compiler';
|
|
3
2
|
|
|
4
3
|
interface FunctionAci {
|
|
5
4
|
arguments: any[];
|
|
6
5
|
name: string;
|
|
7
6
|
payable: boolean;
|
|
8
|
-
returns:
|
|
7
|
+
returns: any;
|
|
9
8
|
stateful: boolean;
|
|
10
9
|
}
|
|
11
10
|
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
functions: FunctionAci[];
|
|
21
|
-
};
|
|
11
|
+
export type Aci = Array<{
|
|
12
|
+
contract?: {
|
|
13
|
+
name: string;
|
|
14
|
+
event?: any;
|
|
15
|
+
functions: FunctionAci[];
|
|
16
|
+
kind: string; // known values: 'contract_main'
|
|
17
|
+
payable: boolean;
|
|
18
|
+
typedefs: any[];
|
|
22
19
|
};
|
|
23
|
-
|
|
24
|
-
}
|
|
20
|
+
}>;
|
|
25
21
|
|
|
26
22
|
/**
|
|
27
23
|
* A base class for all compiler implementations
|
|
@@ -71,24 +71,18 @@ export default class CompilerCli extends CompilerBase {
|
|
|
71
71
|
aci: Aci;
|
|
72
72
|
}> {
|
|
73
73
|
await this.#ensureCompatibleVersion;
|
|
74
|
-
let bytecode;
|
|
75
|
-
let aciCli;
|
|
76
74
|
try {
|
|
77
|
-
[bytecode,
|
|
75
|
+
const [bytecode, aci] = await Promise.all([
|
|
78
76
|
this.#run(path),
|
|
79
77
|
this.#run('--create_json_aci', path).then((res) => JSON.parse(res)),
|
|
80
78
|
]);
|
|
79
|
+
return {
|
|
80
|
+
bytecode: bytecode.trimEnd() as Encoded.ContractBytearray,
|
|
81
|
+
aci: aci as Aci,
|
|
82
|
+
};
|
|
81
83
|
} catch (error) {
|
|
82
84
|
throw new CompilerError(error.message);
|
|
83
85
|
}
|
|
84
|
-
const aci = {
|
|
85
|
-
encodedAci: aciCli[0],
|
|
86
|
-
externalEncodedAci: aciCli.slice(1),
|
|
87
|
-
};
|
|
88
|
-
return {
|
|
89
|
-
bytecode: bytecode.trimEnd() as Encoded.ContractBytearray,
|
|
90
|
-
aci: aci as Aci,
|
|
91
|
-
};
|
|
92
86
|
}
|
|
93
87
|
|
|
94
88
|
async compileBySourceCode(sourceCode: string, fileSystem?: Record<string, string>): Promise<{
|