@aeternity/aepp-sdk 11.0.0 → 12.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -22
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +2 -1
- package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +20764 -1
- package/dist/aepp-sdk.js.map +1 -1
- package/es/AeSdk.d.ts +37 -0
- package/es/AeSdk.mjs +81 -0
- package/es/AeSdk.mjs.map +1 -0
- package/es/AeSdkAepp.d.ts +70 -0
- package/es/AeSdkAepp.mjs +176 -0
- package/es/AeSdkAepp.mjs.map +1 -0
- package/es/AeSdkBase.d.ts +213 -0
- package/es/AeSdkBase.mjs +314 -0
- package/es/AeSdkBase.mjs.map +1 -0
- package/es/AeSdkWallet.d.ts +104 -0
- package/es/AeSdkWallet.mjs +326 -0
- package/es/AeSdkWallet.mjs.map +1 -0
- package/es/Node.d.ts +41 -0
- package/es/Node.mjs +147 -0
- package/es/Node.mjs.map +1 -0
- package/es/account/Base.d.ts +68 -0
- package/es/account/Base.mjs +123 -0
- package/es/account/Base.mjs.map +1 -0
- package/es/account/Memory.d.ts +26 -0
- package/es/account/Memory.mjs +103 -0
- package/es/account/Memory.mjs.map +1 -0
- package/es/account/Rpc.d.ts +27 -0
- package/es/account/Rpc.mjs +80 -0
- package/es/account/Rpc.mjs.map +1 -0
- package/es/aens.d.ts +222 -0
- package/es/aens.mjs +338 -0
- package/es/aens.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/Browser.d.ts +33 -0
- package/es/aepp-wallet-communication/connection/Browser.mjs +73 -0
- package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +18 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +58 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +36 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +146 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection-proxy.d.ts +11 -0
- package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +16 -11
- package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +34 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
- package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
- package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
- package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
- package/es/aepp-wallet-communication/schema.d.ts +105 -46
- package/es/aepp-wallet-communication/schema.mjs +251 -0
- package/es/aepp-wallet-communication/schema.mjs.map +1 -0
- package/es/aepp-wallet-communication/wallet-detector.d.ts +25 -0
- package/es/aepp-wallet-communication/wallet-detector.mjs +62 -0
- package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
- package/es/apis/compiler/compiler.d.ts +92 -0
- package/es/apis/compiler/compiler.mjs +576 -0
- package/es/apis/compiler/compiler.mjs.map +1 -0
- package/es/apis/compiler/index.d.ts +2 -0
- package/es/apis/compiler/index.mjs +3 -0
- package/es/apis/compiler/index.mjs.map +1 -0
- package/es/apis/compiler/models/index.d.ts +248 -0
- package/es/apis/compiler/models/index.mjs +48 -0
- package/es/apis/compiler/models/index.mjs.map +1 -0
- package/es/apis/compiler/models/mappers.d.ts +23 -0
- package/es/apis/compiler/models/mappers.mjs +585 -0
- package/es/apis/compiler/models/mappers.mjs.map +1 -0
- package/es/apis/compiler/models/parameters.d.ts +13 -0
- package/es/apis/compiler/models/parameters.mjs +71 -0
- package/es/apis/compiler/models/parameters.mjs.map +1 -0
- package/es/apis/node/index.d.ts +2 -0
- package/es/apis/node/index.mjs +3 -0
- package/es/apis/node/index.mjs.map +1 -0
- package/es/apis/node/models/index.d.ts +1065 -0
- package/es/apis/node/models/index.mjs +2 -0
- package/es/apis/node/models/index.mjs.map +1 -0
- package/es/apis/node/models/mappers.d.ts +95 -0
- package/es/apis/node/models/mappers.mjs +4166 -0
- package/es/apis/node/models/mappers.mjs.map +1 -0
- package/es/apis/node/models/parameters.d.ts +17 -0
- package/es/apis/node/models/parameters.mjs +165 -0
- package/es/apis/node/models/parameters.mjs.map +1 -0
- package/es/apis/node/node.d.ts +215 -0
- package/es/apis/node/node.mjs +1165 -0
- package/es/apis/node/node.mjs.map +1 -0
- package/es/chain.d.ts +248 -0
- package/es/chain.mjs +560 -0
- package/es/chain.mjs.map +1 -0
- package/es/channel/handlers.d.ts +34 -0
- package/es/channel/handlers.mjs +164 -131
- package/es/channel/handlers.mjs.map +1 -1
- package/es/channel/index.d.ts +625 -0
- package/es/channel/index.mjs +897 -902
- package/es/channel/index.mjs.map +1 -1
- package/es/channel/internal.d.ts +101 -0
- package/es/channel/internal.mjs +138 -88
- package/es/channel/internal.mjs.map +1 -1
- package/es/contract/Compiler.d.ts +18 -0
- package/es/contract/Compiler.mjs +68 -0
- package/es/contract/Compiler.mjs.map +1 -0
- package/es/contract/aci.d.ts +127 -0
- package/es/contract/aci.mjs +225 -193
- package/es/contract/aci.mjs.map +1 -1
- package/es/contract/ga.d.ts +69 -0
- package/es/contract/ga.mjs +195 -0
- package/es/contract/ga.mjs.map +1 -0
- package/es/contract/methods.d.ts +71 -0
- package/es/contract/methods.mjs +104 -0
- package/es/contract/methods.mjs.map +1 -0
- package/es/deprecated/index.d.ts +143 -0
- package/es/deprecated/index.mjs +162 -0
- package/es/deprecated/index.mjs.map +1 -0
- package/es/deprecated/methods.d.ts +18 -0
- package/es/deprecated/methods.mjs +26 -0
- package/es/deprecated/methods.mjs.map +1 -0
- package/es/index.d.ts +35 -0
- package/es/index.mjs +35 -40
- package/es/index.mjs.map +1 -1
- package/es/oracle.d.ts +161 -0
- package/es/oracle.mjs +306 -0
- package/es/oracle.mjs.map +1 -0
- package/es/spend.d.ts +62 -0
- package/es/spend.mjs +111 -0
- package/es/spend.mjs.map +1 -0
- package/es/tx/builder/address.d.ts +25 -0
- package/es/tx/builder/address.mjs +45 -0
- package/es/tx/builder/address.mjs.map +1 -0
- package/es/tx/builder/constants.d.ts +70 -0
- package/es/tx/builder/constants.mjs +122 -0
- package/es/tx/builder/constants.mjs.map +1 -0
- package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
- package/es/tx/builder/field-types/coin-amount.mjs +26 -0
- package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
- package/es/tx/builder/field-types/deposit.d.ts +15 -0
- package/es/tx/builder/field-types/deposit.mjs +19 -0
- package/es/tx/builder/field-types/deposit.mjs.map +1 -0
- package/es/tx/builder/field-types/fee.d.ts +25 -0
- package/es/tx/builder/field-types/fee.mjs +150 -0
- package/es/tx/builder/field-types/fee.mjs.map +1 -0
- package/es/tx/builder/field-types/field.d.ts +6 -0
- package/es/tx/builder/field-types/field.mjs +15 -0
- package/es/tx/builder/field-types/field.mjs.map +1 -0
- package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
- package/es/tx/builder/field-types/gas-limit.mjs +33 -0
- package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
- package/es/tx/builder/field-types/gas-price.d.ts +8 -0
- package/es/tx/builder/field-types/gas-price.mjs +18 -0
- package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
- package/es/tx/builder/field-types/index.d.ts +70 -0
- package/es/tx/builder/field-types/index.mjs +25 -0
- package/es/tx/builder/field-types/index.mjs.map +1 -0
- package/es/tx/builder/field-types/name-fee.d.ts +20 -0
- package/es/tx/builder/field-types/name-fee.mjs +24 -0
- package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
- package/es/tx/builder/field-types/name-id.d.ts +14 -0
- package/es/tx/builder/field-types/name-id.mjs +19 -0
- package/es/tx/builder/field-types/name-id.mjs.map +1 -0
- package/es/tx/builder/field-types/name.d.ts +13 -0
- package/es/tx/builder/field-types/name.mjs +18 -0
- package/es/tx/builder/field-types/name.mjs.map +1 -0
- package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
- package/es/tx/builder/field-types/short-u-int.mjs +12 -0
- package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
- package/es/tx/builder/field-types/u-int.d.ts +8 -0
- package/es/tx/builder/field-types/u-int.mjs +14 -0
- package/es/tx/builder/field-types/u-int.mjs.map +1 -0
- package/es/tx/builder/helpers.d.ts +125 -0
- package/es/tx/builder/helpers.mjs +94 -240
- package/es/tx/builder/helpers.mjs.map +1 -1
- package/es/tx/builder/index.d.ts +88 -0
- package/es/tx/builder/index.mjs +167 -358
- package/es/tx/builder/index.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +1201 -0
- package/es/tx/builder/schema.mjs +175 -664
- package/es/tx/builder/schema.mjs.map +1 -1
- package/es/tx/index.d.ts +64 -0
- package/es/tx/index.mjs +151 -265
- package/es/tx/index.mjs.map +1 -1
- package/es/tx/validator.d.ts +20 -0
- package/es/tx/validator.mjs +104 -124
- package/es/tx/validator.mjs.map +1 -1
- package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
- package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
- package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
- package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
- package/es/typings/bip32-path/index.d.mjs +2 -0
- package/es/typings/bip32-path/index.d.mjs.map +1 -0
- package/es/typings/blakejs/index.d.mjs.map +1 -1
- package/es/typings/sha-js/index.d.mjs +2 -0
- package/es/typings/sha-js/index.d.mjs.map +1 -0
- package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
- package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
- package/es/utils/amount-formatter.d.ts +42 -0
- package/es/utils/amount-formatter.mjs +36 -49
- package/es/utils/amount-formatter.mjs.map +1 -1
- package/es/utils/autorest.d.ts +6 -0
- package/es/utils/autorest.mjs +97 -0
- package/es/utils/autorest.mjs.map +1 -0
- package/es/utils/bignumber.d.ts +13 -0
- package/es/utils/bignumber.mjs +11 -8
- package/es/utils/bignumber.mjs.map +1 -1
- package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
- package/es/utils/bytes.mjs +11 -15
- package/es/utils/bytes.mjs.map +1 -1
- package/es/utils/crypto.d.ts +88 -0
- package/es/utils/crypto.mjs +64 -108
- package/es/utils/crypto.mjs.map +1 -1
- package/es/utils/encoder-types.d.ts +61 -0
- package/es/utils/encoder-types.mjs +36 -0
- package/es/utils/encoder-types.mjs.map +1 -0
- package/es/utils/encoder.d.ts +25 -0
- package/es/utils/encoder.mjs +118 -0
- package/es/utils/encoder.mjs.map +1 -0
- package/es/{errors.d.ts → utils/errors.d.ts} +246 -59
- package/es/utils/errors.mjs +313 -136
- package/es/utils/errors.mjs.map +1 -1
- package/es/utils/hd-wallet.d.ts +50 -0
- package/es/utils/hd-wallet.mjs +86 -45
- package/es/utils/hd-wallet.mjs.map +1 -1
- package/es/utils/json-big.d.ts +5 -0
- package/es/utils/json-big.mjs +12 -16
- package/es/utils/json-big.mjs.map +1 -1
- package/es/utils/keystore.d.ts +51 -0
- package/es/utils/keystore.mjs +101 -194
- package/es/utils/keystore.mjs.map +1 -1
- package/es/{mptree.d.ts → utils/mptree.d.ts} +6 -9
- package/es/utils/mptree.mjs +22 -18
- package/es/utils/mptree.mjs.map +1 -1
- package/es/utils/other.d.ts +20 -0
- package/es/utils/other.mjs +32 -35
- package/es/utils/other.mjs.map +1 -1
- package/es/utils/semver-satisfies.d.ts +1 -0
- package/es/utils/semver-satisfies.mjs +2 -2
- package/es/utils/semver-satisfies.mjs.map +1 -1
- package/es/utils/string.d.ts +24 -0
- package/es/utils/string.mjs +8 -10
- package/es/utils/string.mjs.map +1 -1
- package/package.json +56 -42
- package/src/AeSdk.ts +68 -0
- package/src/AeSdkAepp.ts +176 -0
- package/src/AeSdkBase.ts +338 -0
- package/src/AeSdkWallet.ts +348 -0
- package/src/Node.ts +173 -0
- package/src/account/Base.ts +124 -0
- package/src/account/Memory.ts +98 -0
- package/src/account/Rpc.ts +69 -0
- package/src/aens.ts +407 -0
- package/src/aepp-wallet-communication/connection/Browser.ts +71 -0
- package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +59 -0
- package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +122 -0
- package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +18 -18
- package/src/aepp-wallet-communication/rpc/RpcClient.ts +143 -0
- package/src/aepp-wallet-communication/rpc/types.ts +66 -0
- package/src/aepp-wallet-communication/schema.ts +224 -0
- package/src/aepp-wallet-communication/wallet-detector.ts +72 -0
- package/src/apis/compiler/code-model-v4.yaml +2649 -0
- package/src/apis/compiler/compiler.ts +585 -0
- package/src/apis/compiler/index.ts +2 -0
- package/src/apis/compiler/models/index.ts +301 -0
- package/src/apis/compiler/models/mappers.ts +583 -0
- package/src/apis/compiler/models/parameters.ts +93 -0
- package/src/apis/node/code-model-v4.yaml +10080 -0
- package/src/apis/node/index.ts +2 -0
- package/src/apis/node/models/index.ts +1257 -0
- package/src/apis/node/models/mappers.ts +4280 -0
- package/src/apis/node/models/parameters.ts +188 -0
- package/src/apis/node/node.ts +1299 -0
- package/src/chain.ts +502 -0
- package/src/channel/handlers.ts +817 -0
- package/src/channel/index.ts +1025 -0
- package/src/channel/internal.ts +361 -0
- package/src/contract/Compiler.ts +67 -0
- package/src/contract/aci.ts +538 -0
- package/src/contract/ga.ts +199 -0
- package/src/contract/methods.ts +123 -0
- package/src/deprecated/index.ts +170 -0
- package/src/deprecated/methods.ts +25 -0
- package/src/index.ts +56 -0
- package/src/oracle.ts +364 -0
- package/src/spend.ts +164 -0
- package/src/tx/builder/address.ts +50 -0
- package/src/tx/builder/constants.ts +126 -0
- package/src/tx/builder/field-types/coin-amount.ts +27 -0
- package/src/tx/builder/field-types/deposit.ts +21 -0
- package/src/tx/builder/field-types/fee.ts +143 -0
- package/src/tx/builder/field-types/field.ts +9 -0
- package/src/tx/builder/field-types/gas-limit.ts +41 -0
- package/src/tx/builder/field-types/gas-price.ts +16 -0
- package/src/tx/builder/field-types/index.ts +45 -0
- package/src/tx/builder/field-types/name-fee.ts +32 -0
- package/src/tx/builder/field-types/name-id.ts +20 -0
- package/src/tx/builder/field-types/name.ts +18 -0
- package/src/tx/builder/field-types/short-u-int.ts +11 -0
- package/src/tx/builder/field-types/u-int.ts +16 -0
- package/src/tx/builder/helpers.ts +248 -0
- package/src/tx/builder/index.ts +400 -0
- package/src/tx/builder/schema.ts +727 -0
- package/src/tx/index.ts +192 -0
- package/src/tx/validator.ts +230 -0
- package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
- package/src/typings/@aeternity__uuid/index.d.ts +5 -0
- package/src/typings/bip32-path/index.d.ts +33 -0
- package/src/typings/blakejs/index.d.ts +4 -32
- package/src/typings/sha-js/index.d.ts +5 -0
- package/src/typings/tweetnacl-auth/index.d.ts +14 -0
- package/src/utils/amount-formatter.ts +56 -69
- package/src/utils/autorest.ts +93 -0
- package/src/utils/bignumber.ts +11 -12
- package/src/utils/bytes.ts +29 -31
- package/src/utils/crypto.ts +205 -0
- package/src/utils/encoder-types.ts +63 -0
- package/src/utils/encoder.ts +146 -0
- package/src/utils/errors.ts +482 -366
- package/src/utils/hd-wallet.ts +166 -0
- package/src/utils/json-big.ts +27 -0
- package/src/utils/keystore.ts +182 -0
- package/src/utils/mptree.ts +64 -61
- package/src/utils/other.ts +34 -41
- package/src/utils/semver-satisfies.ts +15 -11
- package/src/utils/string.ts +18 -20
- package/es/account/base.mjs +0 -179
- package/es/account/base.mjs.map +0 -1
- package/es/account/memory.mjs +0 -99
- package/es/account/memory.mjs.map +0 -1
- package/es/account/multiple.mjs +0 -179
- package/es/account/multiple.mjs.map +0 -1
- package/es/ae/aens.mjs +0 -404
- package/es/ae/aens.mjs.map +0 -1
- package/es/ae/aepp.mjs +0 -45
- package/es/ae/aepp.mjs.map +0 -1
- package/es/ae/contract.mjs +0 -159
- package/es/ae/contract.mjs.map +0 -1
- package/es/ae/index.mjs +0 -207
- package/es/ae/index.mjs.map +0 -1
- package/es/ae/oracle.mjs +0 -339
- package/es/ae/oracle.mjs.map +0 -1
- package/es/ae/universal.mjs +0 -45
- package/es/ae/universal.mjs.map +0 -1
- package/es/ae/wallet.mjs +0 -50
- package/es/ae/wallet.mjs.map +0 -1
- package/es/amount-formatter.d.ts +0 -58
- package/es/bignumber.d.ts +0 -18
- package/es/chain/index.mjs +0 -272
- package/es/chain/index.mjs.map +0 -1
- package/es/chain/node.mjs +0 -442
- package/es/chain/node.mjs.map +0 -1
- package/es/contract/compiler.mjs +0 -115
- package/es/contract/compiler.mjs.map +0 -1
- package/es/contract/ga/helpers.mjs +0 -30
- package/es/contract/ga/helpers.mjs.map +0 -1
- package/es/contract/ga/index.mjs +0 -178
- package/es/contract/ga/index.mjs.map +0 -1
- package/es/crypto-ts.d.ts +0 -9
- package/es/node-pool/index.mjs +0 -188
- package/es/node-pool/index.mjs.map +0 -1
- package/es/node.mjs +0 -133
- package/es/node.mjs.map +0 -1
- package/es/other.d.ts +0 -31
- package/es/semver-satisfies.d.ts +0 -1
- package/es/string.d.ts +0 -26
- package/es/tx/builder/field-types.mjs +0 -74
- package/es/tx/builder/field-types.mjs.map +0 -1
- package/es/tx/tx-object.mjs +0 -283
- package/es/tx/tx-object.mjs.map +0 -1
- package/es/tx/tx.mjs +0 -938
- package/es/tx/tx.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
- package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
- package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
- package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
- package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
- package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
- package/es/utils/async-init.mjs +0 -64
- package/es/utils/async-init.mjs.map +0 -1
- package/es/utils/crypto-ts.mjs.map +0 -1
- package/es/utils/swagger.mjs +0 -164
- package/es/utils/swagger.mjs.map +0 -1
- package/src/account/base.js +0 -153
- package/src/account/memory.js +0 -83
- package/src/account/multiple.js +0 -162
- package/src/ae/aens.js +0 -361
- package/src/ae/aepp.js +0 -45
- package/src/ae/contract.js +0 -148
- package/src/ae/index.js +0 -168
- package/src/ae/oracle.js +0 -311
- package/src/ae/universal.js +0 -47
- package/src/ae/wallet.js +0 -50
- package/src/chain/index.js +0 -269
- package/src/chain/node.js +0 -320
- package/src/channel/handlers.js +0 -673
- package/src/channel/index.js +0 -898
- package/src/channel/internal.js +0 -237
- package/src/contract/aci.js +0 -376
- package/src/contract/compiler.js +0 -100
- package/src/contract/ga/helpers.js +0 -19
- package/src/contract/ga/index.js +0 -150
- package/src/index.js +0 -89
- package/src/node-pool/index.js +0 -172
- package/src/node.js +0 -116
- package/src/tx/builder/field-types.js +0 -61
- package/src/tx/builder/helpers.js +0 -380
- package/src/tx/builder/index.js +0 -465
- package/src/tx/builder/schema.js +0 -1197
- package/src/tx/index.js +0 -301
- package/src/tx/tx-object.js +0 -187
- package/src/tx/tx.js +0 -631
- package/src/tx/validator.js +0 -181
- package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
- package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
- package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
- package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
- package/src/utils/aepp-wallet-communication/helpers.js +0 -60
- package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
- package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
- package/src/utils/aepp-wallet-communication/schema.ts +0 -80
- package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
- package/src/utils/async-init.js +0 -45
- package/src/utils/crypto.js +0 -229
- package/src/utils/hd-wallet.js +0 -100
- package/src/utils/json-big.js +0 -26
- package/src/utils/keystore.js +0 -219
- package/src/utils/swagger.js +0 -156
package/src/oracle.ts
ADDED
|
@@ -0,0 +1,364 @@
|
|
|
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
|
+
/**
|
|
19
|
+
* Oracle methods - routines to interact with the æternity oracle system
|
|
20
|
+
*
|
|
21
|
+
* The high-level description of the oracle system is
|
|
22
|
+
* https://github.com/aeternity/protocol/blob/master/ORACLE.md in the protocol
|
|
23
|
+
* repository.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import BigNumber from 'bignumber.js';
|
|
27
|
+
import { send, SendOptions } from './spend';
|
|
28
|
+
import { mapObject, pause } from './utils/other';
|
|
29
|
+
import { oracleQueryId } from './tx/builder/helpers';
|
|
30
|
+
import { unpackTx } from './tx/builder';
|
|
31
|
+
import {
|
|
32
|
+
ORACLE_TTL,
|
|
33
|
+
ORACLE_TTL_TYPES,
|
|
34
|
+
QUERY_FEE,
|
|
35
|
+
QUERY_TTL,
|
|
36
|
+
RESPONSE_TTL,
|
|
37
|
+
} from './tx/builder/schema';
|
|
38
|
+
import { Tag } from './tx/builder/constants';
|
|
39
|
+
import { RequestTimedOutError } from './utils/errors';
|
|
40
|
+
import {
|
|
41
|
+
decode, encode, Encoded, Encoding,
|
|
42
|
+
} from './utils/encoder';
|
|
43
|
+
import { _getPollInterval } from './chain';
|
|
44
|
+
import { _buildTx, BuildTxOptions } from './tx';
|
|
45
|
+
import Node from './Node';
|
|
46
|
+
import AccountBase from './account/Base';
|
|
47
|
+
|
|
48
|
+
type OracleQueries = Awaited<ReturnType<Node['getOracleQueriesByPubkey']>>['oracleQueries'];
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Poll for oracle queries
|
|
52
|
+
* @category oracle
|
|
53
|
+
* @param oracleId - Oracle public key
|
|
54
|
+
* @param onQuery - OnQuery callback
|
|
55
|
+
* @param options - Options object
|
|
56
|
+
* @param options.interval - Poll interval(default: 5000)
|
|
57
|
+
* @param options.onNode - Node to use
|
|
58
|
+
* @returns Callback to stop polling function
|
|
59
|
+
*/
|
|
60
|
+
export function pollForQueries(
|
|
61
|
+
oracleId: Encoded.OracleAddress,
|
|
62
|
+
onQuery: (queries: OracleQueries) => void,
|
|
63
|
+
{ interval, onNode, ...options }: { interval?: number; onNode: Node }
|
|
64
|
+
& Parameters<typeof _getPollInterval>[1],
|
|
65
|
+
): () => void {
|
|
66
|
+
interval ??= _getPollInterval('microblock', options);
|
|
67
|
+
const knownQueryIds = new Set();
|
|
68
|
+
const checkNewQueries = async (): Promise<void> => {
|
|
69
|
+
const queries = ((await onNode.getOracleQueriesByPubkey(oracleId)).oracleQueries ?? [])
|
|
70
|
+
.filter(({ id }) => !knownQueryIds.has(id));
|
|
71
|
+
queries.forEach(({ id }) => knownQueryIds.add(id));
|
|
72
|
+
if (queries.length > 0) onQuery(queries);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
let stopped = false;
|
|
76
|
+
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
78
|
+
(async () => {
|
|
79
|
+
while (!stopped) { // eslint-disable-line no-unmodified-loop-condition
|
|
80
|
+
// TODO: allow to handle this error somehow
|
|
81
|
+
await checkNewQueries().catch(console.error);
|
|
82
|
+
await pause(interval);
|
|
83
|
+
}
|
|
84
|
+
})();
|
|
85
|
+
return () => { stopped = true; };
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Poll for oracle query response
|
|
90
|
+
* @category oracle
|
|
91
|
+
* @param oracleId - Oracle public key
|
|
92
|
+
* @param queryId - Oracle Query id
|
|
93
|
+
* @param options - Options object
|
|
94
|
+
* @param options.interval - Poll interval
|
|
95
|
+
* @param options.onNode - Node to use
|
|
96
|
+
* @returns OracleQuery object
|
|
97
|
+
*/
|
|
98
|
+
export async function pollForQueryResponse(
|
|
99
|
+
oracleId: Encoded.OracleAddress,
|
|
100
|
+
queryId: Encoded.OracleQueryId,
|
|
101
|
+
{ interval, onNode, ...options }:
|
|
102
|
+
{ interval?: number; onNode: Node } & Parameters<typeof _getPollInterval>[1],
|
|
103
|
+
): Promise<string> {
|
|
104
|
+
interval ??= _getPollInterval('microblock', options);
|
|
105
|
+
let height;
|
|
106
|
+
let ttl;
|
|
107
|
+
let response;
|
|
108
|
+
do {
|
|
109
|
+
if (height != null) await pause(interval);
|
|
110
|
+
({ response, ttl } = await onNode.getOracleQueryByPubkeyAndQueryId(oracleId, queryId));
|
|
111
|
+
const responseBuffer = decode(response as Encoded.OracleResponse);
|
|
112
|
+
if (responseBuffer.length > 0) return responseBuffer.toString();
|
|
113
|
+
height = await this.getHeight();
|
|
114
|
+
} while (ttl >= height);
|
|
115
|
+
throw new RequestTimedOutError(height);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Constructor for OracleQuery Object (helper object for using OracleQuery)
|
|
120
|
+
* @category oracle
|
|
121
|
+
* @param oracleId - Oracle public key
|
|
122
|
+
* @param queryId - Oracle Query id
|
|
123
|
+
* @param options - Options
|
|
124
|
+
* @returns OracleQuery object
|
|
125
|
+
*/
|
|
126
|
+
export async function getQueryObject(
|
|
127
|
+
oracleId: Encoded.OracleAddress,
|
|
128
|
+
queryId: Encoded.OracleQueryId,
|
|
129
|
+
options: RespondToQueryOptions & Parameters<typeof pollForQueryResponse>[2],
|
|
130
|
+
): Promise<GetQueryObjectReturnType> {
|
|
131
|
+
const record = await options.onNode.getOracleQueryByPubkeyAndQueryId(oracleId, queryId);
|
|
132
|
+
return {
|
|
133
|
+
...record,
|
|
134
|
+
decodedQuery: decode(record.query as Encoded.OracleQueryId).toString(),
|
|
135
|
+
decodedResponse: decode(record.response as Encoded.OracleResponse).toString(),
|
|
136
|
+
respond: async (response, opt) => (
|
|
137
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
138
|
+
respondToQuery(oracleId, queryId, response, { ...options, ...opt })
|
|
139
|
+
),
|
|
140
|
+
pollForResponse: async (opt) => pollForQueryResponse(oracleId, queryId, { ...options, ...opt }),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
interface GetQueryObjectReturnType extends Awaited<ReturnType<Node['getOracleQueryByPubkeyAndQueryId']>> {
|
|
145
|
+
decodedQuery: string;
|
|
146
|
+
decodedResponse: string;
|
|
147
|
+
respond: (response: string, options?: Parameters<typeof respondToQuery>[3]) =>
|
|
148
|
+
ReturnType<typeof respondToQuery>;
|
|
149
|
+
pollForResponse: (options?: Parameters<typeof pollForQueryResponse>[2]) =>
|
|
150
|
+
ReturnType<typeof pollForQueryResponse>;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Post query to oracle
|
|
155
|
+
* @category oracle
|
|
156
|
+
* @param oracleId - Oracle public key
|
|
157
|
+
* @param query - Oracle query object
|
|
158
|
+
* @param options - Options object
|
|
159
|
+
* @param options.queryTtl - queryTtl Oracle query time to leave
|
|
160
|
+
* @param options.responseTtl - queryFee Oracle query response time to leave
|
|
161
|
+
* @param options.queryFee - queryFee Oracle query fee
|
|
162
|
+
* @param options.fee - fee Transaction fee
|
|
163
|
+
* @param options.ttl - Transaction time to leave
|
|
164
|
+
* @returns Query object
|
|
165
|
+
*/
|
|
166
|
+
export async function postQueryToOracle(
|
|
167
|
+
oracleId: Encoded.OracleAddress,
|
|
168
|
+
query: string,
|
|
169
|
+
options: PostQueryToOracleOptions,
|
|
170
|
+
): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getQueryObject>>> {
|
|
171
|
+
options.queryFee ??= (await options.onNode.getOracleByPubkey(oracleId)).queryFee.toString();
|
|
172
|
+
const senderId = await options.onAccount.address(options);
|
|
173
|
+
|
|
174
|
+
const oracleQueryTx = await _buildTx(Tag.OracleQueryTx, {
|
|
175
|
+
queryTtlType: QUERY_TTL.type,
|
|
176
|
+
queryTtlValue: QUERY_TTL.value,
|
|
177
|
+
responseTtlType: RESPONSE_TTL.type,
|
|
178
|
+
responseTtlValue: RESPONSE_TTL.value,
|
|
179
|
+
...options,
|
|
180
|
+
oracleId,
|
|
181
|
+
senderId,
|
|
182
|
+
query,
|
|
183
|
+
});
|
|
184
|
+
const { nonce } = unpackTx(oracleQueryTx, Tag.OracleQueryTx).tx;
|
|
185
|
+
const queryId = oracleQueryId(senderId, nonce, oracleId);
|
|
186
|
+
return {
|
|
187
|
+
...await send(oracleQueryTx, options),
|
|
188
|
+
...await getQueryObject(oracleId, queryId, options),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
type PostQueryToOracleOptionsType = Parameters<typeof send>[1]
|
|
193
|
+
& Parameters<typeof getQueryObject>[2]
|
|
194
|
+
& BuildTxOptions<Tag.OracleQueryTx, 'oracleId' | 'senderId' | 'query' | 'queryTtlType' | 'queryTtlValue' | 'responseTtlType' | 'responseTtlValue'>
|
|
195
|
+
& {
|
|
196
|
+
queryTtlType?: ORACLE_TTL_TYPES;
|
|
197
|
+
queryTtlValue?: number;
|
|
198
|
+
responseTtlType?: ORACLE_TTL_TYPES;
|
|
199
|
+
responseTtlValue?: number;
|
|
200
|
+
};
|
|
201
|
+
interface PostQueryToOracleOptions extends PostQueryToOracleOptionsType {}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Extend oracle ttl
|
|
205
|
+
* @category oracle
|
|
206
|
+
* @param oracleId - Oracle public key
|
|
207
|
+
* @param options - Options object
|
|
208
|
+
* @param options.fee - fee Transaction fee
|
|
209
|
+
* @param options.ttl - Transaction time to leave
|
|
210
|
+
* @param options.oracleTtlType - Oracle time to leave for extend
|
|
211
|
+
* @param options.oracleTtlValue - Oracle time to leave for extend
|
|
212
|
+
* @returns Oracle object
|
|
213
|
+
*/
|
|
214
|
+
export async function extendOracleTtl(
|
|
215
|
+
oracleId: Encoded.OracleAddress,
|
|
216
|
+
options: ExtendOracleTtlOptions,
|
|
217
|
+
): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getOracleObject>>> {
|
|
218
|
+
const oracleExtendTx = await _buildTx(Tag.OracleExtendTx, {
|
|
219
|
+
oracleTtlType: ORACLE_TTL.type,
|
|
220
|
+
oracleTtlValue: ORACLE_TTL.value,
|
|
221
|
+
...options,
|
|
222
|
+
callerId: await options.onAccount.address(options),
|
|
223
|
+
oracleId,
|
|
224
|
+
});
|
|
225
|
+
return {
|
|
226
|
+
...await send(oracleExtendTx, options),
|
|
227
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
228
|
+
...await getOracleObject(oracleId, options),
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
type ExtendOracleTtlOptionsType = SendOptions & Parameters<typeof getOracleObject>[1]
|
|
233
|
+
& BuildTxOptions<Tag.OracleExtendTx, 'oracleTtlType' | 'oracleTtlValue' | 'callerId' | 'oracleId'>
|
|
234
|
+
& { oracleTtlType?: ORACLE_TTL_TYPES; oracleTtlValue?: number };
|
|
235
|
+
interface ExtendOracleTtlOptions extends ExtendOracleTtlOptionsType {}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Extend oracle ttl
|
|
239
|
+
* @category oracle
|
|
240
|
+
* @param oracleId - Oracle public key
|
|
241
|
+
* @param queryId - Oracle query id
|
|
242
|
+
* @param response - Oracle query response
|
|
243
|
+
* @param options - Options object
|
|
244
|
+
* @param options.responseTtl - responseTtl Query response time to leave
|
|
245
|
+
* @param options.fee - Transaction fee
|
|
246
|
+
* @param options.ttl - Transaction time to leave
|
|
247
|
+
* @returns Oracle object
|
|
248
|
+
*/
|
|
249
|
+
export async function respondToQuery(
|
|
250
|
+
oracleId: Encoded.OracleAddress,
|
|
251
|
+
queryId: Encoded.OracleQueryId,
|
|
252
|
+
response: string,
|
|
253
|
+
options: RespondToQueryOptions,
|
|
254
|
+
): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getOracleObject>>> {
|
|
255
|
+
const oracleRespondTx = await _buildTx(Tag.OracleResponseTx, {
|
|
256
|
+
responseTtlType: RESPONSE_TTL.type,
|
|
257
|
+
responseTtlValue: RESPONSE_TTL.value,
|
|
258
|
+
...options,
|
|
259
|
+
callerId: await options.onAccount.address(options),
|
|
260
|
+
oracleId,
|
|
261
|
+
queryId,
|
|
262
|
+
response,
|
|
263
|
+
});
|
|
264
|
+
return {
|
|
265
|
+
...await send(oracleRespondTx, options),
|
|
266
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
267
|
+
...await getOracleObject(oracleId, options),
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
type RespondToQueryOptionsType = SendOptions & Parameters<typeof getOracleObject>[1]
|
|
272
|
+
& BuildTxOptions<Tag.OracleResponseTx, 'callerId' | 'oracleId' | 'queryId' | 'response' | 'responseTtlType' | 'responseTtlValue'>
|
|
273
|
+
& { responseTtlType?: ORACLE_TTL_TYPES; responseTtlValue?: number };
|
|
274
|
+
interface RespondToQueryOptions extends RespondToQueryOptionsType {}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Constructor for Oracle Object (helper object for using Oracle)
|
|
278
|
+
* @category oracle
|
|
279
|
+
* @param oracleId - Oracle public key
|
|
280
|
+
* @param options - Options
|
|
281
|
+
* @returns Oracle object
|
|
282
|
+
*/
|
|
283
|
+
export async function getOracleObject(
|
|
284
|
+
oracleId: Encoded.OracleAddress,
|
|
285
|
+
options: { onNode: Node; onAccount: AccountBase },
|
|
286
|
+
): Promise<GetOracleObjectReturnType> {
|
|
287
|
+
return {
|
|
288
|
+
...await options.onNode.getOracleByPubkey(oracleId),
|
|
289
|
+
queries: (await options.onNode.getOracleQueriesByPubkey(oracleId)).oracleQueries,
|
|
290
|
+
...mapObject<Function, Function>(
|
|
291
|
+
{
|
|
292
|
+
pollQueries: pollForQueries,
|
|
293
|
+
postQuery: postQueryToOracle,
|
|
294
|
+
respondToQuery,
|
|
295
|
+
extendOracle: extendOracleTtl,
|
|
296
|
+
getQuery: getQueryObject,
|
|
297
|
+
},
|
|
298
|
+
([name, handler]) => [
|
|
299
|
+
name,
|
|
300
|
+
(...args: any) => {
|
|
301
|
+
const lastArg = args[args.length - 1];
|
|
302
|
+
if (lastArg != null && typeof lastArg === 'object' && lastArg.constructor === Object) {
|
|
303
|
+
Object.assign(lastArg, { ...options, ...lastArg });
|
|
304
|
+
} else args.push(options);
|
|
305
|
+
return handler(oracleId, ...args);
|
|
306
|
+
},
|
|
307
|
+
],
|
|
308
|
+
),
|
|
309
|
+
} as any;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
interface GetOracleObjectReturnType extends Awaited<ReturnType<Node['getOracleByPubkey']>> {
|
|
313
|
+
id: Encoded.OracleAddress;
|
|
314
|
+
queries: OracleQueries;
|
|
315
|
+
// TODO: replace getOracleObject with a class
|
|
316
|
+
pollQueries: (cb: Parameters<typeof pollForQueries>[1]) => ReturnType<typeof pollForQueries>;
|
|
317
|
+
postQuery: Function;
|
|
318
|
+
respondToQuery: Function;
|
|
319
|
+
extendOracle: Function;
|
|
320
|
+
getQuery: Function;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Register oracle
|
|
325
|
+
* @category oracle
|
|
326
|
+
* @param queryFormat - Format of query
|
|
327
|
+
* @param responseFormat - Format of query response
|
|
328
|
+
* @param options - Options
|
|
329
|
+
* @param options.queryFee - Oracle query Fee
|
|
330
|
+
* @param options - Options object
|
|
331
|
+
* @param options.abiVersion - Always 0 (do not use virtual machine)
|
|
332
|
+
* @param options.fee - Transaction fee
|
|
333
|
+
* @param options.ttl - Transaction time to leave
|
|
334
|
+
* @returns Oracle object
|
|
335
|
+
*/
|
|
336
|
+
export async function registerOracle(
|
|
337
|
+
queryFormat: string,
|
|
338
|
+
responseFormat: string,
|
|
339
|
+
options: RegisterOracleOptions,
|
|
340
|
+
): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getOracleObject>>> {
|
|
341
|
+
const accountId = await options.onAccount.address(options);
|
|
342
|
+
const oracleRegisterTx = await _buildTx(Tag.OracleRegisterTx, {
|
|
343
|
+
queryFee: QUERY_FEE,
|
|
344
|
+
oracleTtlValue: ORACLE_TTL.value,
|
|
345
|
+
oracleTtlType: ORACLE_TTL.type,
|
|
346
|
+
...options,
|
|
347
|
+
accountId,
|
|
348
|
+
queryFormat,
|
|
349
|
+
responseFormat,
|
|
350
|
+
});
|
|
351
|
+
return {
|
|
352
|
+
...await send(oracleRegisterTx, options),
|
|
353
|
+
...await getOracleObject(encode(decode(accountId), Encoding.OracleAddress), options),
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
type RegisterOracleOptionsType = SendOptions & Parameters<typeof getOracleObject>[1]
|
|
358
|
+
& BuildTxOptions<Tag.OracleRegisterTx, 'accountId' | 'queryFormat' | 'responseFormat' | 'queryFee' | 'oracleTtlType' | 'oracleTtlValue'>
|
|
359
|
+
& {
|
|
360
|
+
queryFee?: number | string | BigNumber;
|
|
361
|
+
oracleTtlType?: ORACLE_TTL_TYPES;
|
|
362
|
+
oracleTtlValue?: number;
|
|
363
|
+
};
|
|
364
|
+
interface RegisterOracleOptions extends RegisterOracleOptionsType {}
|
package/src/spend.ts
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
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
|
+
import BigNumber from 'bignumber.js';
|
|
18
|
+
import {
|
|
19
|
+
sendTransaction, getAccount, getBalance, resolveName,
|
|
20
|
+
} from './chain';
|
|
21
|
+
import { _buildTx, BuildTxOptions } from './tx';
|
|
22
|
+
import { buildTxHash, unpackTx } from './tx/builder';
|
|
23
|
+
import { ArgumentError } from './utils/errors';
|
|
24
|
+
import { Encoded, Encoding } from './utils/encoder';
|
|
25
|
+
import { Tag, AensName } from './tx/builder/constants';
|
|
26
|
+
import AccountBase from './account/Base';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Sign and post a transaction to the chain
|
|
30
|
+
* @category chain
|
|
31
|
+
* @param tx - Transaction
|
|
32
|
+
* @param options - Options
|
|
33
|
+
* @param options.verify - Verify transaction before broadcast, throw error if not
|
|
34
|
+
* valid
|
|
35
|
+
* @returns Transaction
|
|
36
|
+
*/
|
|
37
|
+
export async function send(
|
|
38
|
+
tx: Encoded.Transaction,
|
|
39
|
+
options: SendOptions,
|
|
40
|
+
): Promise<SendReturnType> {
|
|
41
|
+
// TODO: detect authFun in AccountGa
|
|
42
|
+
const authFun = options.innerTx === true
|
|
43
|
+
? undefined
|
|
44
|
+
: (await getAccount(await options.onAccount.address(options), options)).authFun;
|
|
45
|
+
|
|
46
|
+
const signed = await options.onAccount.signTransaction(tx, {
|
|
47
|
+
...options,
|
|
48
|
+
authFun,
|
|
49
|
+
networkId: (await options.onNode.getStatus()).networkId,
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
return options.innerTx === true
|
|
53
|
+
? { hash: buildTxHash(signed), rawTx: signed }
|
|
54
|
+
: sendTransaction(signed, options);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
type SendOptionsType = Parameters<AccountBase['signTransaction']>[1]
|
|
58
|
+
& Parameters<typeof sendTransaction>[1] & { onAccount: AccountBase };
|
|
59
|
+
export interface SendOptions extends SendOptionsType {}
|
|
60
|
+
interface SendReturnType extends Awaited<ReturnType<typeof sendTransaction>> {}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Send coins to another account
|
|
64
|
+
* @category chain
|
|
65
|
+
* @param amount - Amount to spend
|
|
66
|
+
* @param recipientIdOrName - Address or name of recipient account
|
|
67
|
+
* @param options - Options
|
|
68
|
+
* @returns Transaction
|
|
69
|
+
*/
|
|
70
|
+
export async function spend(
|
|
71
|
+
amount: number | string,
|
|
72
|
+
recipientIdOrName: Encoded.AccountAddress | AensName,
|
|
73
|
+
options: SpendOptions,
|
|
74
|
+
): ReturnType<typeof send> {
|
|
75
|
+
return send(
|
|
76
|
+
await _buildTx(Tag.SpendTx, {
|
|
77
|
+
...options,
|
|
78
|
+
senderId: await options.onAccount.address(options),
|
|
79
|
+
recipientId: await resolveName<Encoding.AccountAddress>(
|
|
80
|
+
recipientIdOrName,
|
|
81
|
+
'account_pubkey',
|
|
82
|
+
options,
|
|
83
|
+
),
|
|
84
|
+
amount,
|
|
85
|
+
}),
|
|
86
|
+
options,
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
type SpendOptionsType = BuildTxOptions<Tag.SpendTx, 'senderId' | 'recipientId' | 'amount'>
|
|
91
|
+
& Parameters<typeof resolveName>[2] & { onAccount: AccountBase } & SendOptions;
|
|
92
|
+
interface SpendOptions extends SpendOptionsType {}
|
|
93
|
+
|
|
94
|
+
// TODO: Rename to spendFraction
|
|
95
|
+
/**
|
|
96
|
+
* Send a fraction of coin balance to another account
|
|
97
|
+
* @category chain
|
|
98
|
+
* @param fraction - Fraction of balance to spend (between 0 and 1)
|
|
99
|
+
* @param recipientIdOrName - Address or name of recipient account
|
|
100
|
+
* @param options - Options
|
|
101
|
+
* @returns Transaction
|
|
102
|
+
*/
|
|
103
|
+
export async function transferFunds(
|
|
104
|
+
fraction: number | string,
|
|
105
|
+
recipientIdOrName: AensName | Encoded.AccountAddress,
|
|
106
|
+
options: TransferFundsOptions,
|
|
107
|
+
): ReturnType<typeof send> {
|
|
108
|
+
if (fraction < 0 || fraction > 1) {
|
|
109
|
+
throw new ArgumentError('fraction', 'a number between 0 and 1', fraction);
|
|
110
|
+
}
|
|
111
|
+
const recipientId = await resolveName<Encoding.AccountAddress>(
|
|
112
|
+
recipientIdOrName,
|
|
113
|
+
'account_pubkey',
|
|
114
|
+
options,
|
|
115
|
+
);
|
|
116
|
+
const senderId = await options.onAccount.address(options);
|
|
117
|
+
const balance = new BigNumber(
|
|
118
|
+
await getBalance.bind(options.onAccount)(senderId, options),
|
|
119
|
+
);
|
|
120
|
+
const desiredAmount = balance.times(fraction).integerValue(BigNumber.ROUND_HALF_UP);
|
|
121
|
+
const { tx: { fee } } = unpackTx(
|
|
122
|
+
await _buildTx(Tag.SpendTx, {
|
|
123
|
+
...options, senderId, recipientId, amount: desiredAmount,
|
|
124
|
+
}),
|
|
125
|
+
Tag.SpendTx,
|
|
126
|
+
);
|
|
127
|
+
// Reducing of the amount may reduce transaction fee, so this is not completely accurate
|
|
128
|
+
const amount = desiredAmount.plus(fee).gt(balance) ? balance.minus(fee) : desiredAmount;
|
|
129
|
+
return send(
|
|
130
|
+
await _buildTx(Tag.SpendTx, {
|
|
131
|
+
...options, senderId, recipientId, amount,
|
|
132
|
+
}),
|
|
133
|
+
options,
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
type TransferFundsOptionsType = BuildTxOptions<Tag.SpendTx, 'senderId' | 'recipientId' | 'amount'>
|
|
138
|
+
& Parameters<typeof resolveName>[2] & { onAccount: AccountBase } & SendOptions;
|
|
139
|
+
interface TransferFundsOptions extends TransferFundsOptionsType {}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Submit transaction of another account paying for it (fee and gas)
|
|
143
|
+
* @category chain
|
|
144
|
+
* @param transaction - tx_<base64>-encoded transaction
|
|
145
|
+
* @param options - Options
|
|
146
|
+
* @returns Object Transaction
|
|
147
|
+
*/
|
|
148
|
+
export async function payForTransaction(
|
|
149
|
+
transaction: Encoded.Transaction,
|
|
150
|
+
options: PayForTransactionOptions,
|
|
151
|
+
): ReturnType<typeof send> {
|
|
152
|
+
return send(
|
|
153
|
+
await _buildTx(
|
|
154
|
+
Tag.PayingForTx,
|
|
155
|
+
{ ...options, payerId: await options.onAccount.address(options), tx: transaction },
|
|
156
|
+
),
|
|
157
|
+
options,
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
interface PayForTransactionOptions extends
|
|
162
|
+
BuildTxOptions<Tag.PayingForTx, 'payerId' | 'tx'>, SendOptions {
|
|
163
|
+
onAccount: AccountBase;
|
|
164
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ArgumentError, PrefixNotFoundError, TagNotFoundError } from '../../utils/errors';
|
|
2
|
+
import { toBytes } from '../../utils/bytes';
|
|
3
|
+
import {
|
|
4
|
+
decode, encode, Encoded, Encoding,
|
|
5
|
+
} from '../../utils/encoder';
|
|
6
|
+
import { isItemOfArray } from '../../utils/other';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Map of prefix to ID tag constant
|
|
10
|
+
* @see {@link https://github.com/aeternity/protocol/blob/master/serializations.md#the-id-type}
|
|
11
|
+
* @see {@link https://github.com/aeternity/aeserialization/blob/eb68fe331bd476910394966b7f5ede7a74d37e35/src/aeser_id.erl#L97-L102}
|
|
12
|
+
* @see {@link https://github.com/aeternity/aeserialization/blob/eb68fe331bd476910394966b7f5ede7a74d37e35/src/aeser_api_encoder.erl#L163-L168}
|
|
13
|
+
*/
|
|
14
|
+
const idTagToEncoding = [
|
|
15
|
+
Encoding.AccountAddress,
|
|
16
|
+
Encoding.Name,
|
|
17
|
+
Encoding.Commitment,
|
|
18
|
+
Encoding.OracleAddress,
|
|
19
|
+
Encoding.ContractAddress,
|
|
20
|
+
Encoding.Channel,
|
|
21
|
+
] as const;
|
|
22
|
+
|
|
23
|
+
type AddressEncodings = typeof idTagToEncoding[number];
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Utility function to create and _id type
|
|
27
|
+
* @category transaction builder
|
|
28
|
+
* @param hashId - Encoded hash
|
|
29
|
+
* @returns Buffer Buffer with ID tag and decoded HASh
|
|
30
|
+
*/
|
|
31
|
+
export function writeId(hashId: Encoded.Generic<AddressEncodings>): Buffer {
|
|
32
|
+
if (typeof hashId !== 'string') throw new ArgumentError('hashId', 'a string', hashId);
|
|
33
|
+
const encoding = hashId.slice(0, 2);
|
|
34
|
+
if (!isItemOfArray(encoding, idTagToEncoding)) throw new TagNotFoundError(encoding);
|
|
35
|
+
const idTag = idTagToEncoding.indexOf(encoding) + 1;
|
|
36
|
+
return Buffer.from([...toBytes(idTag), ...decode(hashId)]);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Utility function to read and _id type
|
|
41
|
+
* @category transaction builder
|
|
42
|
+
* @param buf - Data
|
|
43
|
+
* @returns Encoided hash string with prefix
|
|
44
|
+
*/
|
|
45
|
+
export function readId(buf: Buffer): Encoded.Generic<AddressEncodings> {
|
|
46
|
+
const idTag = Buffer.from(buf).readUIntBE(0, 1);
|
|
47
|
+
const encoding = idTagToEncoding[idTag - 1];
|
|
48
|
+
if (encoding == null) throw new PrefixNotFoundError(idTag);
|
|
49
|
+
return encode(buf.slice(1, buf.length), encoding);
|
|
50
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
import { mapObject } from '../../utils/other';
|
|
3
|
+
|
|
4
|
+
// # AENS
|
|
5
|
+
export type AensName = `${string}.chain`;
|
|
6
|
+
export const NAME_TTL = 180000;
|
|
7
|
+
// # max number of block into the future that the name is going to be available
|
|
8
|
+
// # https://github.com/aeternity/protocol/blob/epoch-v0.22.0/AENS.md#update
|
|
9
|
+
// # https://github.com/aeternity/protocol/blob/44a93d3aab957ca820183c3520b9daf6b0fedff4/AENS.md#aens-entry
|
|
10
|
+
export const NAME_MAX_TTL = 36000;
|
|
11
|
+
export const NAME_MAX_CLIENT_TTL = 84600;
|
|
12
|
+
export const CLIENT_TTL = NAME_MAX_CLIENT_TTL;
|
|
13
|
+
export const MIN_GAS_PRICE = 1e9;
|
|
14
|
+
// # see https://github.com/aeternity/aeternity/blob/72e440b8731422e335f879a31ecbbee7ac23a1cf/apps/aecore/src/aec_governance.erl#L67
|
|
15
|
+
export const NAME_FEE_MULTIPLIER = 1e14; // 100000000000000
|
|
16
|
+
export const NAME_FEE_BID_INCREMENT = 0.05; // # the increment is in percentage
|
|
17
|
+
// # see https://github.com/aeternity/aeternity/blob/72e440b8731422e335f879a31ecbbee7ac23a1cf/apps/aecore/src/aec_governance.erl#L272
|
|
18
|
+
export const NAME_BID_TIMEOUT_BLOCKS = 480; // # ~1 day
|
|
19
|
+
// # this is the max length for a domain that requires a base fee to be paid
|
|
20
|
+
export const NAME_MAX_LENGTH_FEE = 31;
|
|
21
|
+
export const NAME_BID_MAX_LENGTH = 12; // # this is the max length for a domain to be part of a bid
|
|
22
|
+
// # https://github.com/aeternity/aeternity/blob/72e440b8731422e335f879a31ecbbee7ac23a1cf/apps/aecore/src/aec_governance.erl#L290
|
|
23
|
+
// # https://github.com/aeternity/protocol/blob/master/AENS.md#protocol-fees-and-protection-times
|
|
24
|
+
// # bid ranges:
|
|
25
|
+
export const NAME_BID_RANGES = mapObject({
|
|
26
|
+
31: 3,
|
|
27
|
+
30: 5,
|
|
28
|
+
29: 8,
|
|
29
|
+
28: 13,
|
|
30
|
+
27: 21,
|
|
31
|
+
26: 34,
|
|
32
|
+
25: 55,
|
|
33
|
+
24: 89,
|
|
34
|
+
23: 144,
|
|
35
|
+
22: 233,
|
|
36
|
+
21: 377,
|
|
37
|
+
20: 610,
|
|
38
|
+
19: 987,
|
|
39
|
+
18: 1597,
|
|
40
|
+
17: 2584,
|
|
41
|
+
16: 4181,
|
|
42
|
+
15: 6765,
|
|
43
|
+
14: 10946,
|
|
44
|
+
13: 17711,
|
|
45
|
+
12: 28657,
|
|
46
|
+
11: 46368,
|
|
47
|
+
10: 75025,
|
|
48
|
+
9: 121393,
|
|
49
|
+
8: 196418,
|
|
50
|
+
7: 317811,
|
|
51
|
+
6: 514229,
|
|
52
|
+
5: 832040,
|
|
53
|
+
4: 1346269,
|
|
54
|
+
3: 2178309,
|
|
55
|
+
2: 3524578,
|
|
56
|
+
1: 5702887,
|
|
57
|
+
}, ([key, value]) => [key, new BigNumber(value).times(NAME_FEE_MULTIPLIER)]);
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Enum with tag types
|
|
61
|
+
* @category transaction builder
|
|
62
|
+
* @see {@link https://github.com/aeternity/protocol/blob/0f6dee3d9d1e8e2469816798f5c7587a6c918f94/serializations.md#binary-serialization}
|
|
63
|
+
* @see {@link https://github.com/aeternity/aeserialization/blob/eb68fe331bd476910394966b7f5ede7a74d37e35/src/aeser_chain_objects.erl#L39-L97}
|
|
64
|
+
*/
|
|
65
|
+
// TODO: implement serialisation for commented-out tags
|
|
66
|
+
export enum Tag {
|
|
67
|
+
Account = 10,
|
|
68
|
+
SignedTx = 11,
|
|
69
|
+
SpendTx = 12,
|
|
70
|
+
// Oracle = 20,
|
|
71
|
+
// OracleQuery = 21,
|
|
72
|
+
OracleRegisterTx = 22,
|
|
73
|
+
OracleQueryTx = 23,
|
|
74
|
+
OracleResponseTx = 24,
|
|
75
|
+
OracleExtendTx = 25,
|
|
76
|
+
// Name = 30,
|
|
77
|
+
// NameCommitment = 31,
|
|
78
|
+
NameClaimTx = 32,
|
|
79
|
+
NamePreclaimTx = 33,
|
|
80
|
+
NameUpdateTx = 34,
|
|
81
|
+
NameRevokeTx = 35,
|
|
82
|
+
NameTransferTx = 36,
|
|
83
|
+
// NameAuction = 37,
|
|
84
|
+
Contract = 40,
|
|
85
|
+
ContractCall = 41,
|
|
86
|
+
ContractCreateTx = 42,
|
|
87
|
+
ContractCallTx = 43,
|
|
88
|
+
ChannelCreateTx = 50,
|
|
89
|
+
// ChannelSetDelegatesTx = 501,
|
|
90
|
+
ChannelDepositTx = 51,
|
|
91
|
+
ChannelWithdrawTx = 52,
|
|
92
|
+
ChannelForceProgressTx = 521,
|
|
93
|
+
ChannelCloseMutualTx = 53,
|
|
94
|
+
ChannelCloseSoloTx = 54,
|
|
95
|
+
ChannelSlashTx = 55,
|
|
96
|
+
ChannelSettleTx = 56,
|
|
97
|
+
ChannelOffChainTx = 57,
|
|
98
|
+
ChannelOffChainUpdateTransfer = 570,
|
|
99
|
+
ChannelOffChainUpdateDeposit = 571,
|
|
100
|
+
ChannelOffChainUpdateWithdraw = 572,
|
|
101
|
+
ChannelOffChainUpdateCreateContract = 573,
|
|
102
|
+
ChannelOffChainUpdateCallContract = 574,
|
|
103
|
+
// ChannelOffChainUpdateMeta = 576,
|
|
104
|
+
ChannelClientReconnectTx = 575,
|
|
105
|
+
Channel = 58,
|
|
106
|
+
ChannelSnapshotSoloTx = 59,
|
|
107
|
+
TreesPoi = 60,
|
|
108
|
+
// TreesDb = 61,
|
|
109
|
+
StateTrees = 62,
|
|
110
|
+
Mtree = 63,
|
|
111
|
+
MtreeValue = 64,
|
|
112
|
+
ContractsMtree = 621,
|
|
113
|
+
CallsMtree = 622,
|
|
114
|
+
ChannelsMtree = 623,
|
|
115
|
+
NameserviceMtree = 624,
|
|
116
|
+
OraclesMtree = 625,
|
|
117
|
+
AccountsMtree = 626,
|
|
118
|
+
CompilerSophia = 70,
|
|
119
|
+
GaAttachTx = 80,
|
|
120
|
+
GaMetaTx = 81,
|
|
121
|
+
PayingForTx = 82,
|
|
122
|
+
// KeyBlock = 100,
|
|
123
|
+
// MicroBlock = 101,
|
|
124
|
+
// LightMicroBlock = 102,
|
|
125
|
+
// Pof = 200,
|
|
126
|
+
}
|