@pezkuwi/api-contract 16.5.6 → 16.5.8
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/build/Abi/index.d.ts +31 -0
- package/build/Abi/index.js +359 -0
- package/build/Abi/toLatestCompatible.d.ts +15 -0
- package/build/Abi/toLatestCompatible.js +30 -0
- package/build/Abi/toV1.d.ts +3 -0
- package/build/Abi/toV1.js +21 -0
- package/build/Abi/toV2.d.ts +3 -0
- package/build/Abi/toV2.js +27 -0
- package/build/Abi/toV3.d.ts +3 -0
- package/build/Abi/toV3.js +10 -0
- package/build/Abi/toV4.d.ts +3 -0
- package/build/Abi/toV4.js +10 -0
- package/build/LICENSE +201 -0
- package/build/README.md +3 -0
- package/build/augment.d.ts +1 -0
- package/build/augment.js +1 -0
- package/build/base/Base.d.ts +13 -0
- package/build/base/Base.js +40 -0
- package/build/base/Blueprint.d.ts +24 -0
- package/build/base/Blueprint.js +51 -0
- package/build/base/Code.d.ts +22 -0
- package/build/base/Code.js +74 -0
- package/build/base/Contract.d.ts +25 -0
- package/build/base/Contract.js +127 -0
- package/build/base/index.d.ts +3 -0
- package/build/base/index.js +3 -0
- package/build/base/mock.d.ts +3 -0
- package/build/base/mock.js +38 -0
- package/build/base/types.d.ts +25 -0
- package/build/base/types.js +1 -0
- package/build/base/util.d.ts +16 -0
- package/build/base/util.js +33 -0
- package/build/bundle-pezkuwi-api-contract.js +1238 -0
- package/build/bundle.d.ts +4 -0
- package/build/bundle.js +4 -0
- package/build/cjs/Abi/index.d.ts +31 -0
- package/build/cjs/Abi/index.js +363 -0
- package/build/cjs/Abi/toLatestCompatible.d.ts +15 -0
- package/build/cjs/Abi/toLatestCompatible.js +36 -0
- package/build/cjs/Abi/toV1.d.ts +3 -0
- package/build/cjs/Abi/toV1.js +24 -0
- package/build/cjs/Abi/toV2.d.ts +3 -0
- package/build/cjs/Abi/toV2.js +30 -0
- package/build/cjs/Abi/toV3.d.ts +3 -0
- package/build/cjs/Abi/toV3.js +13 -0
- package/build/cjs/Abi/toV4.d.ts +3 -0
- package/build/cjs/Abi/toV4.js +13 -0
- package/build/cjs/augment.d.ts +1 -0
- package/build/cjs/augment.js +3 -0
- package/build/cjs/base/Base.d.ts +13 -0
- package/build/cjs/base/Base.js +44 -0
- package/build/cjs/base/Blueprint.d.ts +24 -0
- package/build/cjs/base/Blueprint.js +57 -0
- package/build/cjs/base/Code.d.ts +22 -0
- package/build/cjs/base/Code.js +80 -0
- package/build/cjs/base/Contract.d.ts +25 -0
- package/build/cjs/base/Contract.js +133 -0
- package/build/cjs/base/index.d.ts +3 -0
- package/build/cjs/base/index.js +14 -0
- package/build/cjs/base/mock.d.ts +3 -0
- package/build/cjs/base/mock.js +41 -0
- package/build/cjs/base/types.d.ts +25 -0
- package/build/cjs/base/types.js +2 -0
- package/build/cjs/base/util.d.ts +16 -0
- package/build/cjs/base/util.js +42 -0
- package/build/cjs/bundle.d.ts +4 -0
- package/build/cjs/bundle.js +10 -0
- package/build/cjs/index.d.ts +2 -0
- package/build/cjs/index.js +5 -0
- package/build/cjs/package.json +3 -0
- package/build/cjs/packageDetect.d.ts +1 -0
- package/build/cjs/packageDetect.js +7 -0
- package/build/cjs/packageInfo.d.ts +6 -0
- package/build/cjs/packageInfo.js +4 -0
- package/build/cjs/promise/index.d.ts +13 -0
- package/build/cjs/promise/index.js +23 -0
- package/build/cjs/promise/types.d.ts +3 -0
- package/build/cjs/promise/types.js +2 -0
- package/build/cjs/rx/index.d.ts +13 -0
- package/build/cjs/rx/index.js +23 -0
- package/build/cjs/rx/types.d.ts +3 -0
- package/build/cjs/rx/types.js +2 -0
- package/build/cjs/types.d.ts +79 -0
- package/build/cjs/types.js +2 -0
- package/build/cjs/util.d.ts +5 -0
- package/build/cjs/util.js +13 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +2 -0
- package/build/package.json +408 -0
- package/build/packageDetect.d.ts +1 -0
- package/build/packageDetect.js +5 -0
- package/build/packageInfo.d.ts +6 -0
- package/build/packageInfo.js +1 -0
- package/build/promise/index.d.ts +13 -0
- package/build/promise/index.js +17 -0
- package/build/promise/types.d.ts +3 -0
- package/build/promise/types.js +1 -0
- package/build/rx/index.d.ts +13 -0
- package/build/rx/index.js +17 -0
- package/build/rx/types.d.ts +3 -0
- package/build/rx/types.js +1 -0
- package/build/types.d.ts +79 -0
- package/build/types.js +1 -0
- package/build/util.d.ts +5 -0
- package/build/util.js +10 -0
- package/build-deno/Abi/index.ts +475 -0
- package/build-deno/Abi/toLatestCompatible.ts +47 -0
- package/build-deno/Abi/toV1.ts +33 -0
- package/build-deno/Abi/toV2.ts +56 -0
- package/build-deno/Abi/toV3.ts +16 -0
- package/build-deno/Abi/toV4.ts +19 -0
- package/build-deno/README.md +3 -0
- package/build-deno/augment.ts +2 -0
- package/build-deno/base/Base.ts +50 -0
- package/build-deno/base/Blueprint.ts +88 -0
- package/build-deno/base/Code.ts +140 -0
- package/build-deno/base/Contract.ts +194 -0
- package/build-deno/base/index.ts +4 -0
- package/build-deno/base/mock.ts +46 -0
- package/build-deno/base/types.ts +38 -0
- package/build-deno/base/util.ts +54 -0
- package/build-deno/bundle.ts +6 -0
- package/build-deno/checkTypes.manual.ts +42 -0
- package/build-deno/index.ts +4 -0
- package/build-deno/mod.ts +2 -0
- package/build-deno/packageDetect.ts +9 -0
- package/build-deno/packageInfo.ts +3 -0
- package/build-deno/promise/index.ts +28 -0
- package/build-deno/promise/types.ts +5 -0
- package/build-deno/rx/index.ts +28 -0
- package/build-deno/rx/types.ts +5 -0
- package/build-deno/test/contracts/index.ts +18 -0
- package/build-deno/test/contracts/ink/index.ts +11 -0
- package/build-deno/test/contracts/ink/v0/accumulator.wasm +0 -0
- package/build-deno/test/contracts/ink/v0/adder.wasm +0 -0
- package/build-deno/test/contracts/ink/v0/delegator.wasm +0 -0
- package/build-deno/test/contracts/ink/v0/dns.wasm +0 -0
- package/build-deno/test/contracts/ink/v0/erc20.wasm +0 -0
- package/build-deno/test/contracts/ink/v0/erc721.wasm +0 -0
- package/build-deno/test/contracts/ink/v0/flipper.wasm +0 -0
- package/build-deno/test/contracts/ink/v0/incrementer.wasm +0 -0
- package/build-deno/test/contracts/ink/v0/index.ts +9 -0
- package/build-deno/test/contracts/ink/v0/multisig_plain.wasm +0 -0
- package/build-deno/test/contracts/ink/v0/subber.wasm +0 -0
- package/build-deno/test/contracts/ink/v0/trait-flipper.wasm +0 -0
- package/build-deno/test/contracts/ink/v1/index.ts +3 -0
- package/build-deno/test/contracts/ink/v2/index.ts +3 -0
- package/build-deno/test/contracts/ink/v3/index.ts +3 -0
- package/build-deno/test/contracts/ink/v4/erc20.wasm +0 -0
- package/build-deno/test/contracts/ink/v4/flipper.wasm +0 -0
- package/build-deno/test/contracts/ink/v4/index.ts +5 -0
- package/build-deno/test/contracts/ink/v5/erc20.wasm +0 -0
- package/build-deno/test/contracts/ink/v5/flipper.wasm +0 -0
- package/build-deno/test/contracts/ink/v5/index.ts +6 -0
- package/build-deno/test/contracts/ink/v6/erc20.polkavm +0 -0
- package/build-deno/test/contracts/ink/v6/index.ts +3 -0
- package/build-deno/test/contracts/solang/index.ts +5 -0
- package/build-deno/test/contracts/solang/v0/index.ts +2 -0
- package/build-deno/test/contracts/solang/v0/ints256.sol +13 -0
- package/build-deno/test/contracts/solang/v0/ints256.wasm +0 -0
- package/build-deno/test/contracts/user/index.ts +7 -0
- package/build-deno/test/contracts/user/v0/assetTransfer.wasm +0 -0
- package/build-deno/test/contracts/user/v0/enumExample.wasm +0 -0
- package/build-deno/test/contracts/user/v0/index.ts +5 -0
- package/build-deno/test/contracts/user/v3/index.ts +2 -0
- package/build-deno/test/contracts/user/v4/index.ts +2 -0
- package/build-deno/test/contracts/util.ts +12 -0
- package/build-deno/types.ts +95 -0
- package/build-deno/util.ts +18 -0
- package/build-tsc/Abi/index.d.ts +31 -0
- package/build-tsc/Abi/toLatestCompatible.d.ts +15 -0
- package/build-tsc/Abi/toV1.d.ts +3 -0
- package/build-tsc/Abi/toV2.d.ts +3 -0
- package/build-tsc/Abi/toV3.d.ts +3 -0
- package/build-tsc/Abi/toV4.d.ts +3 -0
- package/build-tsc/augment.d.ts +1 -0
- package/build-tsc/base/Base.d.ts +13 -0
- package/build-tsc/base/Blueprint.d.ts +24 -0
- package/build-tsc/base/Code.d.ts +22 -0
- package/build-tsc/base/Contract.d.ts +25 -0
- package/build-tsc/base/index.d.ts +3 -0
- package/build-tsc/base/mock.d.ts +3 -0
- package/build-tsc/base/types.d.ts +25 -0
- package/build-tsc/base/util.d.ts +16 -0
- package/build-tsc/bundle.d.ts +4 -0
- package/build-tsc/index.d.ts +2 -0
- package/build-tsc/packageDetect.d.ts +1 -0
- package/build-tsc/packageInfo.d.ts +6 -0
- package/build-tsc/promise/index.d.ts +13 -0
- package/build-tsc/promise/types.d.ts +3 -0
- package/build-tsc/rx/index.d.ts +13 -0
- package/build-tsc/rx/types.d.ts +3 -0
- package/build-tsc/types.d.ts +79 -0
- package/build-tsc/util.d.ts +5 -0
- package/build-tsc-cjs/Abi/index.js +363 -0
- package/build-tsc-cjs/Abi/toLatestCompatible.js +36 -0
- package/build-tsc-cjs/Abi/toV1.js +24 -0
- package/build-tsc-cjs/Abi/toV2.js +30 -0
- package/build-tsc-cjs/Abi/toV3.js +13 -0
- package/build-tsc-cjs/Abi/toV4.js +13 -0
- package/build-tsc-cjs/augment.js +3 -0
- package/build-tsc-cjs/base/Base.js +44 -0
- package/build-tsc-cjs/base/Blueprint.js +57 -0
- package/build-tsc-cjs/base/Code.js +80 -0
- package/build-tsc-cjs/base/Contract.js +133 -0
- package/build-tsc-cjs/base/index.js +14 -0
- package/build-tsc-cjs/base/mock.js +41 -0
- package/build-tsc-cjs/base/types.js +2 -0
- package/build-tsc-cjs/base/util.js +42 -0
- package/build-tsc-cjs/bundle.js +10 -0
- package/build-tsc-cjs/index.js +5 -0
- package/build-tsc-cjs/packageDetect.js +7 -0
- package/build-tsc-cjs/packageInfo.js +4 -0
- package/build-tsc-cjs/promise/index.js +23 -0
- package/build-tsc-cjs/promise/types.js +2 -0
- package/build-tsc-cjs/rx/index.js +23 -0
- package/build-tsc-cjs/rx/types.js +2 -0
- package/build-tsc-cjs/types.js +2 -0
- package/build-tsc-cjs/util.js +13 -0
- package/build-tsc-esm/Abi/index.js +359 -0
- package/build-tsc-esm/Abi/toLatestCompatible.js +30 -0
- package/build-tsc-esm/Abi/toV1.js +21 -0
- package/build-tsc-esm/Abi/toV2.js +27 -0
- package/build-tsc-esm/Abi/toV3.js +10 -0
- package/build-tsc-esm/Abi/toV4.js +10 -0
- package/build-tsc-esm/augment.js +1 -0
- package/build-tsc-esm/base/Base.js +40 -0
- package/build-tsc-esm/base/Blueprint.js +51 -0
- package/build-tsc-esm/base/Code.js +74 -0
- package/build-tsc-esm/base/Contract.js +127 -0
- package/build-tsc-esm/base/index.js +3 -0
- package/build-tsc-esm/base/mock.js +38 -0
- package/build-tsc-esm/base/types.js +1 -0
- package/build-tsc-esm/base/util.js +33 -0
- package/build-tsc-esm/bundle.js +4 -0
- package/build-tsc-esm/index.js +2 -0
- package/build-tsc-esm/packageDetect.js +5 -0
- package/build-tsc-esm/packageInfo.js +1 -0
- package/build-tsc-esm/promise/index.js +17 -0
- package/build-tsc-esm/promise/types.js +1 -0
- package/build-tsc-esm/rx/index.js +17 -0
- package/build-tsc-esm/rx/types.js +1 -0
- package/build-tsc-esm/types.js +1 -0
- package/build-tsc-esm/util.js +10 -0
- package/bundle-pezkuwi-api-contract.js +1 -1
- package/cjs/packageInfo.js +1 -1
- package/package.json +6 -6
- package/packageInfo.js +1 -1
- package/src/Abi/Abi.spec.ts +235 -0
- package/src/Abi/index.ts +477 -0
- package/src/Abi/toLatestCompatible.spec.ts +219 -0
- package/src/Abi/toLatestCompatible.ts +52 -0
- package/src/Abi/toV1.ts +35 -0
- package/src/Abi/toV2.ts +58 -0
- package/src/Abi/toV3.ts +18 -0
- package/src/Abi/toV4.ts +21 -0
- package/src/augment.ts +4 -0
- package/src/base/Base.ts +52 -0
- package/src/base/Blueprint.ts +90 -0
- package/src/base/Code.spec.ts +47 -0
- package/src/base/Code.ts +142 -0
- package/src/base/Contract.ts +197 -0
- package/src/base/index.ts +6 -0
- package/src/base/mock.ts +48 -0
- package/src/base/types.ts +40 -0
- package/src/base/util.ts +56 -0
- package/src/bundle.ts +10 -0
- package/src/checkTypes.manual.ts +45 -0
- package/src/index.ts +6 -0
- package/src/mod.ts +4 -0
- package/src/packageDetect.ts +13 -0
- package/src/packageInfo.ts +6 -0
- package/src/promise/index.ts +28 -0
- package/src/promise/types.ts +7 -0
- package/src/rx/index.ts +28 -0
- package/src/rx/types.ts +7 -0
- package/src/test/compare/ink_v0_delegator.test.json +47 -0
- package/src/test/compare/ink_v0_dns.test.json +232 -0
- package/src/test/compare/ink_v0_erc20.test.json +253 -0
- package/src/test/compare/ink_v0_erc721.test.json +415 -0
- package/src/test/compare/ink_v0_flipper.test.json +9 -0
- package/src/test/compare/ink_v0_flipperBundle.test.json +9 -0
- package/src/test/compare/ink_v0_incrementer.test.json +9 -0
- package/src/test/compare/ink_v0_multisigPlain.test.json +562 -0
- package/src/test/compare/ink_v1_flipper.test.json +9 -0
- package/src/test/compare/ink_v1_psp22.test.json +531 -0
- package/src/test/compare/ink_v2_erc20.test.json +205 -0
- package/src/test/compare/ink_v2_flipper.test.json +9 -0
- package/src/test/compare/ink_v3_flipper.test.json +9 -0
- package/src/test/compare/ink_v3_traitErc20.test.json +205 -0
- package/src/test/compare/ink_v4_erc20Contract.test.json +253 -0
- package/src/test/compare/ink_v4_erc20Metadata.test.json +253 -0
- package/src/test/compare/ink_v4_flipperContract.test.json +155 -0
- package/src/test/compare/ink_v4_flipperMetadata.test.json +155 -0
- package/src/test/compare/ink_v5_erc20.test.json +370 -0
- package/src/test/compare/ink_v5_erc20AnonymousTransferMetadata.test.json +370 -0
- package/src/test/compare/ink_v5_erc20Contract.test.json +370 -0
- package/src/test/compare/ink_v5_erc20Metadata.test.json +370 -0
- package/src/test/compare/ink_v5_flipperContract.test.json +174 -0
- package/src/test/compare/ink_v5_flipperMetadata.test.json +174 -0
- package/src/test/compare/ink_v6_erc20Contract.test.json +418 -0
- package/src/test/compare/ink_v6_erc20Metadata.test.json +418 -0
- package/src/test/compare/solang_v0_ints256.test.json +9 -0
- package/src/test/compare/user_v0_assetTransfer.test.json +54 -0
- package/src/test/compare/user_v0_enumExample.test.json +303 -0
- package/src/test/compare/user_v0_recursive.test.json +27 -0
- package/src/test/compare/user_v0_withString.test.json +260 -0
- package/src/test/compare/user_v3_ask.test.json +71 -0
- package/src/test/compare/user_v4_events.test.json +1328 -0
- package/src/test/contracts/index.ts +20 -0
- package/src/test/contracts/ink/index.ts +13 -0
- package/src/test/contracts/ink/v0/accumulator.wasm +0 -0
- package/src/test/contracts/ink/v0/adder.wasm +0 -0
- package/src/test/contracts/ink/v0/delegator.json +252 -0
- package/src/test/contracts/ink/v0/delegator.wasm +0 -0
- package/src/test/contracts/ink/v0/dns.json +713 -0
- package/src/test/contracts/ink/v0/dns.wasm +0 -0
- package/src/test/contracts/ink/v0/erc20.json +704 -0
- package/src/test/contracts/ink/v0/erc20.wasm +0 -0
- package/src/test/contracts/ink/v0/erc721.json +1197 -0
- package/src/test/contracts/ink/v0/erc721.wasm +0 -0
- package/src/test/contracts/ink/v0/flipper.contract.json +107 -0
- package/src/test/contracts/ink/v0/flipper.json +106 -0
- package/src/test/contracts/ink/v0/flipper.wasm +0 -0
- package/src/test/contracts/ink/v0/incrementer.json +108 -0
- package/src/test/contracts/ink/v0/incrementer.wasm +0 -0
- package/src/test/contracts/ink/v0/index.ts +11 -0
- package/src/test/contracts/ink/v0/multisig_plain.json +1466 -0
- package/src/test/contracts/ink/v0/multisig_plain.wasm +0 -0
- package/src/test/contracts/ink/v0/subber.wasm +0 -0
- package/src/test/contracts/ink/v0/trait-flipper.json +103 -0
- package/src/test/contracts/ink/v0/trait-flipper.wasm +0 -0
- package/src/test/contracts/ink/v1/flipper.contract.json +111 -0
- package/src/test/contracts/ink/v1/index.ts +6 -0
- package/src/test/contracts/ink/v1/psp22_minter_pauser.contract.json +1722 -0
- package/src/test/contracts/ink/v2/erc20.contract.json +630 -0
- package/src/test/contracts/ink/v2/flipper.contract.json +103 -0
- package/src/test/contracts/ink/v2/index.ts +5 -0
- package/src/test/contracts/ink/v3/flipper.contract.json +105 -0
- package/src/test/contracts/ink/v3/index.ts +6 -0
- package/src/test/contracts/ink/v3/trait_erc20.contract.json +631 -0
- package/src/test/contracts/ink/v4/erc20.contract.json +1 -0
- package/src/test/contracts/ink/v4/erc20.json +821 -0
- package/src/test/contracts/ink/v4/erc20.wasm +0 -0
- package/src/test/contracts/ink/v4/flipper.contract.json +1 -0
- package/src/test/contracts/ink/v4/flipper.json +396 -0
- package/src/test/contracts/ink/v4/flipper.wasm +0 -0
- package/src/test/contracts/ink/v4/index.ts +7 -0
- package/src/test/contracts/ink/v5/erc20.contract.json +1 -0
- package/src/test/contracts/ink/v5/erc20.json +1025 -0
- package/src/test/contracts/ink/v5/erc20.wasm +0 -0
- package/src/test/contracts/ink/v5/erc20_anonymous_transfer.json +1025 -0
- package/src/test/contracts/ink/v5/flipper.contract.json +1 -0
- package/src/test/contracts/ink/v5/flipper.json +420 -0
- package/src/test/contracts/ink/v5/flipper.wasm +0 -0
- package/src/test/contracts/ink/v5/index.ts +8 -0
- package/src/test/contracts/ink/v6/erc20.contract.json +1 -0
- package/src/test/contracts/ink/v6/erc20.json +1081 -0
- package/src/test/contracts/ink/v6/erc20.polkavm +0 -0
- package/src/test/contracts/ink/v6/index.ts +5 -0
- package/src/test/contracts/solang/index.ts +7 -0
- package/src/test/contracts/solang/v0/index.ts +4 -0
- package/src/test/contracts/solang/v0/ints256.json +113 -0
- package/src/test/contracts/solang/v0/ints256.sol +13 -0
- package/src/test/contracts/solang/v0/ints256.wasm +0 -0
- package/src/test/contracts/user/index.ts +9 -0
- package/src/test/contracts/user/v0/assetTransfer.json +299 -0
- package/src/test/contracts/user/v0/assetTransfer.wasm +0 -0
- package/src/test/contracts/user/v0/enumExample.json +528 -0
- package/src/test/contracts/user/v0/enumExample.wasm +0 -0
- package/src/test/contracts/user/v0/index.ts +7 -0
- package/src/test/contracts/user/v0/recursive.contract.json +1 -0
- package/src/test/contracts/user/v0/withString.json +777 -0
- package/src/test/contracts/user/v3/ask.json +550 -0
- package/src/test/contracts/user/v3/index.ts +4 -0
- package/src/test/contracts/user/v4/events.contract.json +2990 -0
- package/src/test/contracts/user/v4/index.ts +4 -0
- package/src/test/contracts/util.ts +14 -0
- package/src/types.ts +98 -0
- package/src/util.ts +20 -0
- package/tsconfig.build.json +22 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.spec.json +26 -0
- package/tsconfig.spec.tsbuildinfo +1 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { map } from 'rxjs';
|
|
2
|
+
import { SubmittableResult } from '@pezkuwi/api';
|
|
3
|
+
import { BN, BN_HUNDRED, BN_ONE, BN_ZERO, isUndefined, logger } from '@pezkuwi/util';
|
|
4
|
+
import { applyOnEvent } from '../util.js';
|
|
5
|
+
import { Base } from './Base.js';
|
|
6
|
+
import { convertWeight, withMeta } from './util.js';
|
|
7
|
+
const MAX_CALL_GAS = new BN(5_000_000_000_000).isub(BN_ONE);
|
|
8
|
+
const l = logger('Contract');
|
|
9
|
+
function createQuery(meta, fn) {
|
|
10
|
+
return withMeta(meta, (origin, options, ...params) => fn(origin, options, params));
|
|
11
|
+
}
|
|
12
|
+
function createTx(meta, fn) {
|
|
13
|
+
return withMeta(meta, (options, ...params) => fn(options, params));
|
|
14
|
+
}
|
|
15
|
+
export class ContractSubmittableResult extends SubmittableResult {
|
|
16
|
+
contractEvents;
|
|
17
|
+
constructor(result, contractEvents) {
|
|
18
|
+
super(result);
|
|
19
|
+
this.contractEvents = contractEvents;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class Contract extends Base {
|
|
23
|
+
/**
|
|
24
|
+
* @description The on-chain address for this contract
|
|
25
|
+
*/
|
|
26
|
+
address;
|
|
27
|
+
#query = {};
|
|
28
|
+
#tx = {};
|
|
29
|
+
constructor(api, abi, address, decorateMethod) {
|
|
30
|
+
super(api, abi, decorateMethod);
|
|
31
|
+
this.address = this.registry.createType(this._isRevive ? 'AccountId20' : 'AccountId', address);
|
|
32
|
+
this.abi.messages.forEach((m) => {
|
|
33
|
+
if (isUndefined(this.#tx[m.method])) {
|
|
34
|
+
this.#tx[m.method] = createTx(m, (o, p) => this.#exec(m, o, p));
|
|
35
|
+
}
|
|
36
|
+
if (isUndefined(this.#query[m.method])) {
|
|
37
|
+
this.#query[m.method] = createQuery(m, (f, o, p) => this.#read(m, o, p).send(f));
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
get query() {
|
|
42
|
+
return this.#query;
|
|
43
|
+
}
|
|
44
|
+
get tx() {
|
|
45
|
+
return this.#tx;
|
|
46
|
+
}
|
|
47
|
+
#getGas = (_gasLimit, isCall = false) => {
|
|
48
|
+
const weight = convertWeight(_gasLimit);
|
|
49
|
+
if (weight.v1Weight.gt(BN_ZERO)) {
|
|
50
|
+
return weight;
|
|
51
|
+
}
|
|
52
|
+
return convertWeight(isCall
|
|
53
|
+
? MAX_CALL_GAS
|
|
54
|
+
: convertWeight(this.api.consts.system.blockWeights
|
|
55
|
+
? this.api.consts.system.blockWeights.maxBlock
|
|
56
|
+
: this.api.consts.system['maximumBlockWeight']).v1Weight.muln(64).div(BN_HUNDRED));
|
|
57
|
+
};
|
|
58
|
+
#exec = (messageOrId, { gasLimit = BN_ZERO, storageDepositLimit = null, value = BN_ZERO }, params) => {
|
|
59
|
+
const palletTx = this._isRevive ? this.api.tx.revive : this.api.tx.contracts;
|
|
60
|
+
return palletTx.call(this.address, value,
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
62
|
+
// @ts-ignore jiggle v1 weights, metadata points to latest
|
|
63
|
+
this._isWeightV1
|
|
64
|
+
? convertWeight(gasLimit).v1Weight
|
|
65
|
+
: convertWeight(gasLimit).v2Weight, storageDepositLimit, this.abi.findMessage(messageOrId).toU8a(params)).withResultTransform((result) =>
|
|
66
|
+
// ContractEmitted is the current generation, ContractExecution is the previous generation
|
|
67
|
+
new ContractSubmittableResult(result, applyOnEvent(result, ['ContractEmitted', 'ContractExecution'], (records) => records
|
|
68
|
+
// Filter to only decode events emitted by this specific contract instance.
|
|
69
|
+
.filter((record) => {
|
|
70
|
+
try {
|
|
71
|
+
const contractAddress = record.event.data[0];
|
|
72
|
+
if (this.address.eq(contractAddress)) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
l.debug(`Skipping event from different contract ${contractAddress.toString()} (this contract: ${this.address.toString()})`);
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
l.warn(`Unable to extract contract address from event: ${error.message}`);
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
})
|
|
83
|
+
.map((record) => {
|
|
84
|
+
try {
|
|
85
|
+
return this.abi.decodeEvent(record);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
l.error(`Unable to decode contract event: ${error.message}`);
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
.filter((decoded) => !!decoded), this._isRevive)));
|
|
93
|
+
};
|
|
94
|
+
#read = (messageOrId, { gasLimit = BN_ZERO, storageDepositLimit = null, value = BN_ZERO }, params) => {
|
|
95
|
+
const message = this.abi.findMessage(messageOrId);
|
|
96
|
+
return {
|
|
97
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
98
|
+
send: this._decorateMethod((origin) => (this._isRevive
|
|
99
|
+
? this.api.rx.call.reviveApi.call
|
|
100
|
+
: this.api.rx.call.contractsApi.call)(origin, this.address, value,
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
102
|
+
// @ts-ignore jiggle v1 weights, metadata points to latest
|
|
103
|
+
this._isWeightV1
|
|
104
|
+
? this.#getGas(gasLimit, true).v1Weight
|
|
105
|
+
: this.#getGas(gasLimit, true).v2Weight, storageDepositLimit, message.toU8a(params)).pipe(map(({ debugMessage, gasConsumed, gasRequired, result, storageDeposit }) => ({
|
|
106
|
+
debugMessage,
|
|
107
|
+
gasConsumed,
|
|
108
|
+
gasRequired: gasRequired && !convertWeight(gasRequired).v1Weight.isZero()
|
|
109
|
+
? gasRequired
|
|
110
|
+
: gasConsumed,
|
|
111
|
+
output: result.isOk && message.returnType
|
|
112
|
+
? this.abi.registry.createTypeUnsafe(message.returnType.lookupName || message.returnType.type, [result.asOk.data.toU8a(true)], { isPedantic: true })
|
|
113
|
+
: null,
|
|
114
|
+
result,
|
|
115
|
+
storageDeposit
|
|
116
|
+
}))))
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
export function extendContract(type, decorateMethod) {
|
|
121
|
+
return class extends Contract {
|
|
122
|
+
static __ContractType = type;
|
|
123
|
+
constructor(api, abi, address) {
|
|
124
|
+
super(api, abi, address, decorateMethod);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { TypeRegistry } from '@pezkuwi/types';
|
|
2
|
+
const registry = new TypeRegistry();
|
|
3
|
+
const instantiateWithCode = () => {
|
|
4
|
+
throw new Error('mock');
|
|
5
|
+
};
|
|
6
|
+
instantiateWithCode.meta = { args: new Array(6) };
|
|
7
|
+
export const mockApi = {
|
|
8
|
+
call: {
|
|
9
|
+
contractsApi: {
|
|
10
|
+
call: () => {
|
|
11
|
+
throw new Error('mock');
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
isConnected: true,
|
|
16
|
+
registry,
|
|
17
|
+
tx: {
|
|
18
|
+
contracts: {
|
|
19
|
+
instantiateWithCode
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
export const mockReviveApi = {
|
|
24
|
+
call: {
|
|
25
|
+
reviveApi: {
|
|
26
|
+
call: () => {
|
|
27
|
+
throw new Error('mock');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
isConnected: true,
|
|
32
|
+
registry,
|
|
33
|
+
tx: {
|
|
34
|
+
revive: {
|
|
35
|
+
instantiateWithCode
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Bytes } from '@pezkuwi/types';
|
|
2
|
+
import { bnToBn, compactAddLength, u8aToU8a } from '@pezkuwi/util';
|
|
3
|
+
import { randomAsU8a } from '@pezkuwi/util-crypto';
|
|
4
|
+
export const EMPTY_SALT = new Uint8Array();
|
|
5
|
+
export function withMeta(meta, creator) {
|
|
6
|
+
creator.meta = meta;
|
|
7
|
+
return creator;
|
|
8
|
+
}
|
|
9
|
+
export function createBluePrintTx(meta, fn) {
|
|
10
|
+
return withMeta(meta, (options, ...params) => fn(options, params));
|
|
11
|
+
}
|
|
12
|
+
export function createBluePrintWithId(fn) {
|
|
13
|
+
return (constructorOrId, options, ...params) => fn(constructorOrId, options, params);
|
|
14
|
+
}
|
|
15
|
+
export function encodeSalt(salt = randomAsU8a()) {
|
|
16
|
+
return salt instanceof Bytes
|
|
17
|
+
? salt
|
|
18
|
+
: salt?.length
|
|
19
|
+
? compactAddLength(u8aToU8a(salt))
|
|
20
|
+
: EMPTY_SALT;
|
|
21
|
+
}
|
|
22
|
+
export function convertWeight(weight) {
|
|
23
|
+
const [refTime, proofSize] = isWeightV2(weight)
|
|
24
|
+
? [weight.refTime.toBn(), weight.proofSize.toBn()]
|
|
25
|
+
: [bnToBn(weight), undefined];
|
|
26
|
+
return {
|
|
27
|
+
v1Weight: refTime,
|
|
28
|
+
v2Weight: { proofSize, refTime }
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function isWeightV2(weight) {
|
|
32
|
+
return !!weight.proofSize;
|
|
33
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { packageInfo as apiInfo } from '@pezkuwi/api/packageInfo';
|
|
2
|
+
import { packageInfo as typesInfo } from '@pezkuwi/types/packageInfo';
|
|
3
|
+
import { detectPackage } from '@pezkuwi/util';
|
|
4
|
+
import { packageInfo } from './packageInfo.js';
|
|
5
|
+
detectPackage(packageInfo, null, [apiInfo, typesInfo]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const packageInfo = { name: '@pezkuwi/api-contract', path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto', type: 'esm', version: '16.5.8' };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { toPromiseMethod } from '@pezkuwi/api';
|
|
2
|
+
import { Blueprint, Code, Contract } from '../base/index.js';
|
|
3
|
+
export class BlueprintPromise extends Blueprint {
|
|
4
|
+
constructor(api, abi, codeHash) {
|
|
5
|
+
super(api, abi, codeHash, toPromiseMethod);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export class CodePromise extends Code {
|
|
9
|
+
constructor(api, abi, wasm) {
|
|
10
|
+
super(api, abi, wasm, toPromiseMethod);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class ContractPromise extends Contract {
|
|
14
|
+
constructor(api, abi, address) {
|
|
15
|
+
super(api, abi, address, toPromiseMethod);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { toRxMethod } from '@pezkuwi/api';
|
|
2
|
+
import { Blueprint, Code, Contract } from '../base/index.js';
|
|
3
|
+
export class BlueprintRx extends Blueprint {
|
|
4
|
+
constructor(api, abi, codeHash) {
|
|
5
|
+
super(api, abi, codeHash, toRxMethod);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export class CodeRx extends Code {
|
|
9
|
+
constructor(api, abi, wasm) {
|
|
10
|
+
super(api, abi, wasm, toRxMethod);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class ContractRx extends Contract {
|
|
14
|
+
constructor(api, abi, address) {
|
|
15
|
+
super(api, abi, address, toRxMethod);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function applyOnEvent(result, types, fn, isRevive) {
|
|
2
|
+
if (result.isInBlock || result.isFinalized) {
|
|
3
|
+
const section = isRevive ? 'revive' : 'contracts';
|
|
4
|
+
const records = result.filterRecords(section, types);
|
|
5
|
+
if (records.length) {
|
|
6
|
+
return fn(records);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
@@ -440,7 +440,7 @@
|
|
|
440
440
|
};
|
|
441
441
|
}
|
|
442
442
|
|
|
443
|
-
const packageInfo = { name: '@pezkuwi/api-contract', path: (({ url: (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('bundle-pezkuwi-api-contract.js', document.baseURI).href)) }) && (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('bundle-pezkuwi-api-contract.js', document.baseURI).href))) ? new URL((typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('bundle-pezkuwi-api-contract.js', document.baseURI).href))).pathname.substring(0, new URL((typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('bundle-pezkuwi-api-contract.js', document.baseURI).href))).pathname.lastIndexOf('/') + 1) : 'auto', type: 'esm', version: '16.5.
|
|
443
|
+
const packageInfo = { name: '@pezkuwi/api-contract', path: (({ url: (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('bundle-pezkuwi-api-contract.js', document.baseURI).href)) }) && (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('bundle-pezkuwi-api-contract.js', document.baseURI).href))) ? new URL((typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('bundle-pezkuwi-api-contract.js', document.baseURI).href))).pathname.substring(0, new URL((typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('bundle-pezkuwi-api-contract.js', document.baseURI).href))).pathname.lastIndexOf('/') + 1) : 'auto', type: 'esm', version: '16.5.8' };
|
|
444
444
|
|
|
445
445
|
function applyOnEvent(result, types, fn, isRevive) {
|
|
446
446
|
if (result.isInBlock || result.isFinalized) {
|
package/cjs/packageInfo.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.packageInfo = void 0;
|
|
4
|
-
exports.packageInfo = { name: '@pezkuwi/api-contract', path: typeof __dirname === 'string' ? __dirname : 'auto', type: 'cjs', version: '16.5.
|
|
4
|
+
exports.packageInfo = { name: '@pezkuwi/api-contract', path: typeof __dirname === 'string' ? __dirname : 'auto', type: 'cjs', version: '16.5.8' };
|
package/package.json
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"./cjs/packageDetect.js"
|
|
19
19
|
],
|
|
20
20
|
"type": "module",
|
|
21
|
-
"version": "16.5.
|
|
21
|
+
"version": "16.5.8",
|
|
22
22
|
"main": "./cjs/index.js",
|
|
23
23
|
"module": "./index.js",
|
|
24
24
|
"types": "./index.d.ts",
|
|
@@ -395,11 +395,11 @@
|
|
|
395
395
|
}
|
|
396
396
|
},
|
|
397
397
|
"dependencies": {
|
|
398
|
-
"@pezkuwi/api": "
|
|
399
|
-
"@pezkuwi/api-augment": "
|
|
400
|
-
"@pezkuwi/types": "
|
|
401
|
-
"@pezkuwi/types-codec": "
|
|
402
|
-
"@pezkuwi/types-create": "
|
|
398
|
+
"@pezkuwi/api": "workspace:*",
|
|
399
|
+
"@pezkuwi/api-augment": "workspace:*",
|
|
400
|
+
"@pezkuwi/types": "workspace:*",
|
|
401
|
+
"@pezkuwi/types-codec": "workspace:*",
|
|
402
|
+
"@pezkuwi/types-create": "workspace:*",
|
|
403
403
|
"@pezkuwi/util": "^14.0.1",
|
|
404
404
|
"@pezkuwi/util-crypto": "^14.0.1",
|
|
405
405
|
"rxjs": "^7.8.1",
|
package/packageInfo.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const packageInfo = { name: '@pezkuwi/api-contract', path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto', type: 'esm', version: '16.5.
|
|
1
|
+
export const packageInfo = { name: '@pezkuwi/api-contract', path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto', type: 'esm', version: '16.5.8' };
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
// Copyright 2017-2025 @pezkuwi/api-contract authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/// <reference types="@pezkuwi/dev-test/globals.d.ts" />
|
|
5
|
+
|
|
6
|
+
import type { Registry } from '@pezkuwi/types/types';
|
|
7
|
+
|
|
8
|
+
import fs from 'node:fs';
|
|
9
|
+
import process from 'node:process';
|
|
10
|
+
|
|
11
|
+
import { TypeDefInfo } from '@pezkuwi/types/types';
|
|
12
|
+
import rpcMetadata from '@pezkuwi/types-support/metadata/static-bizinikiwi-contracts-node';
|
|
13
|
+
import { blake2AsHex } from '@pezkuwi/util-crypto';
|
|
14
|
+
|
|
15
|
+
import { Metadata, TypeRegistry } from '../../../types/src/bundle.js';
|
|
16
|
+
import abis from '../test/contracts/index.js';
|
|
17
|
+
import { Abi } from './index.js';
|
|
18
|
+
|
|
19
|
+
interface SpecDef {
|
|
20
|
+
messages: {
|
|
21
|
+
label: string;
|
|
22
|
+
name: string[] | string
|
|
23
|
+
}[]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface JSONAbi {
|
|
27
|
+
source: {
|
|
28
|
+
compiler: string,
|
|
29
|
+
hash: string,
|
|
30
|
+
language: string,
|
|
31
|
+
wasm: string
|
|
32
|
+
},
|
|
33
|
+
spec: SpecDef;
|
|
34
|
+
V1: {
|
|
35
|
+
spec: SpecDef;
|
|
36
|
+
},
|
|
37
|
+
V2: {
|
|
38
|
+
spec: SpecDef;
|
|
39
|
+
},
|
|
40
|
+
V3: {
|
|
41
|
+
spec: SpecDef;
|
|
42
|
+
},
|
|
43
|
+
V4: {
|
|
44
|
+
spec: SpecDef;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function stringifyInfo (key: string, value: unknown): unknown {
|
|
49
|
+
return key === 'info' && typeof value === 'number'
|
|
50
|
+
? TypeDefInfo[value]
|
|
51
|
+
: value;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function stringifyJson (registry: Registry): string {
|
|
55
|
+
const defs = registry.lookup.types.map(({ id }) =>
|
|
56
|
+
registry.lookup.getTypeDef(id)
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
return JSON.stringify(defs, stringifyInfo, 2);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
describe('Abi', (): void => {
|
|
63
|
+
describe('ABI', (): void => {
|
|
64
|
+
Object.entries(abis).forEach(([abiName, _abi]) => {
|
|
65
|
+
const abi = _abi as unknown as JSONAbi;
|
|
66
|
+
|
|
67
|
+
it(`initializes from a contract ABI (${abiName})`, (): void => {
|
|
68
|
+
try {
|
|
69
|
+
const messageIds = (abi.V4 || abi.V3 || abi.V2 || abi.V1 || abi).spec.messages.map(({ label, name }) =>
|
|
70
|
+
label || (
|
|
71
|
+
Array.isArray(name)
|
|
72
|
+
? name.join('::')
|
|
73
|
+
: name
|
|
74
|
+
)
|
|
75
|
+
);
|
|
76
|
+
const inkAbi = new Abi(abis[abiName]);
|
|
77
|
+
|
|
78
|
+
expect(inkAbi.messages.map(({ identifier }) => identifier)).toEqual(messageIds);
|
|
79
|
+
} catch (error) {
|
|
80
|
+
console.error(error);
|
|
81
|
+
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
describe('TypeDef', (): void => {
|
|
89
|
+
for (const [abiName, abiJson] of Object.entries(abis)) {
|
|
90
|
+
it(`initializes from a contract ABI: ${abiName}`, (): void => {
|
|
91
|
+
const abi = new Abi(abiJson);
|
|
92
|
+
const registryJson = stringifyJson(abi.registry);
|
|
93
|
+
const cmpFile = new URL(`../test/compare/${abiName}.test.json`, import.meta.url);
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
expect(
|
|
97
|
+
JSON.parse(registryJson)
|
|
98
|
+
).toEqual(
|
|
99
|
+
JSON.parse(fs.readFileSync(cmpFile, 'utf-8'))
|
|
100
|
+
);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
if (process.env['GITHUB_REPOSITORY']) {
|
|
103
|
+
console.error(registryJson);
|
|
104
|
+
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
fs.writeFileSync(cmpFile, registryJson, { flag: 'w' });
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it('has the correct hash for the source', (): void => {
|
|
115
|
+
const abi = new Abi(abis['ink_v0_flipperBundle']);
|
|
116
|
+
const bundle = abis['ink_v0_flipperBundle'] as unknown as JSONAbi;
|
|
117
|
+
|
|
118
|
+
// manual
|
|
119
|
+
expect(bundle.source.hash).toEqual(blake2AsHex(bundle.source.wasm));
|
|
120
|
+
|
|
121
|
+
// the Codec hash
|
|
122
|
+
expect(bundle.source.hash).toEqual(abi.info.source.wasm.hash.toHex());
|
|
123
|
+
|
|
124
|
+
// the hash as per the actual Abi
|
|
125
|
+
expect(bundle.source.hash).toEqual(abi.info.source.wasmHash.toHex());
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
describe('Events', (): void => {
|
|
129
|
+
const registry = new TypeRegistry();
|
|
130
|
+
|
|
131
|
+
beforeAll((): void => {
|
|
132
|
+
const metadata = new Metadata(registry, rpcMetadata);
|
|
133
|
+
|
|
134
|
+
registry.setMetadata(metadata);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it('decoding <=ink!v4 event', (): void => {
|
|
138
|
+
const abiJson = abis['ink_v4_erc20Metadata'];
|
|
139
|
+
|
|
140
|
+
expect(abiJson).toBeDefined();
|
|
141
|
+
const abi = new Abi(abiJson);
|
|
142
|
+
|
|
143
|
+
const eventRecordHex =
|
|
144
|
+
'0x0001000000080360951b8baf569bca905a279c12d6ce17db7cdce23a42563870ef585129ce5dc64d010001d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d018eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4800505a4f7e9f4eb106000000000000000c0045726332303a3a5472616e7366657200000000000000000000000000000000da2d695d3b5a304e0039e7fc4419c34fa0c1f239189c99bb72a6484f1634782b2b00c7d40fe6d84d660f3e6bed90f218e022a0909f7e1a7ea35ada8b6e003564';
|
|
145
|
+
const record = registry.createType('EventRecord', eventRecordHex);
|
|
146
|
+
|
|
147
|
+
const decodedEvent = abi.decodeEvent(record);
|
|
148
|
+
|
|
149
|
+
expect(decodedEvent.event.args.length).toEqual(3);
|
|
150
|
+
expect(decodedEvent.args.length).toEqual(3);
|
|
151
|
+
expect(decodedEvent.event.identifier).toEqual('Transfer');
|
|
152
|
+
|
|
153
|
+
const decodedEventHuman = decodedEvent.event.args.reduce((prev, cur, index) => {
|
|
154
|
+
return {
|
|
155
|
+
...prev,
|
|
156
|
+
[cur.name]: decodedEvent.args[index].toHuman()
|
|
157
|
+
};
|
|
158
|
+
}, {});
|
|
159
|
+
|
|
160
|
+
const expectedEvent = {
|
|
161
|
+
from: '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY',
|
|
162
|
+
to: '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty',
|
|
163
|
+
value: '123.4567 MUnit'
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
expect(decodedEventHuman).toEqual(expectedEvent);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
it('decoding >=ink!v5 event', (): void => {
|
|
170
|
+
const abiJson = abis['ink_v5_erc20Metadata'];
|
|
171
|
+
|
|
172
|
+
expect(abiJson).toBeDefined();
|
|
173
|
+
const abi = new Abi(abiJson);
|
|
174
|
+
|
|
175
|
+
const eventRecordHex =
|
|
176
|
+
'0x00010000000803da17150e96b3955a4db6ad35ddeb495f722f9c1d84683113bfb096bf3faa30f2490101d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d018eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4800505a4f7e9f4eb106000000000000000cb5b61a3e6a21a16be4f044b517c28ac692492f73c5bfd3f60178ad98c767f4cbd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48';
|
|
177
|
+
const record = registry.createType('EventRecord', eventRecordHex);
|
|
178
|
+
|
|
179
|
+
const decodedEvent = abi.decodeEvent(record);
|
|
180
|
+
|
|
181
|
+
expect(decodedEvent.event.args.length).toEqual(3);
|
|
182
|
+
expect(decodedEvent.args.length).toEqual(3);
|
|
183
|
+
expect(decodedEvent.event.identifier).toEqual('erc20::erc20::Transfer');
|
|
184
|
+
|
|
185
|
+
const decodedEventHuman = decodedEvent.event.args.reduce((prev, cur, index) => {
|
|
186
|
+
return {
|
|
187
|
+
...prev,
|
|
188
|
+
[cur.name]: decodedEvent.args[index].toHuman()
|
|
189
|
+
};
|
|
190
|
+
}, {});
|
|
191
|
+
|
|
192
|
+
const expectedEvent = {
|
|
193
|
+
from: '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY',
|
|
194
|
+
to: '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty',
|
|
195
|
+
value: '123.4567 MUnit'
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
expect(decodedEventHuman).toEqual(expectedEvent);
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it('decoding >=ink!v5 anonymous event', (): void => {
|
|
202
|
+
const abiJson = abis['ink_v5_erc20AnonymousTransferMetadata'];
|
|
203
|
+
|
|
204
|
+
expect(abiJson).toBeDefined();
|
|
205
|
+
const abi = new Abi(abiJson);
|
|
206
|
+
|
|
207
|
+
expect(abi.events[0].identifier).toEqual('erc20::erc20::Transfer');
|
|
208
|
+
expect(abi.events[0].signatureTopic).toEqual(null);
|
|
209
|
+
|
|
210
|
+
const eventRecordWithAnonymousEventHex = '0x00010000000803538e726248a9c155911e7d99f4f474c3408630a2f6275dd501d4471c7067ad2c490101d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d018eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a4800505a4f7e9f4eb1060000000000000008d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48';
|
|
211
|
+
const record = registry.createType('EventRecord', eventRecordWithAnonymousEventHex);
|
|
212
|
+
|
|
213
|
+
const decodedEvent = abi.decodeEvent(record);
|
|
214
|
+
|
|
215
|
+
expect(decodedEvent.event.args.length).toEqual(3);
|
|
216
|
+
expect(decodedEvent.args.length).toEqual(3);
|
|
217
|
+
expect(decodedEvent.event.identifier).toEqual('erc20::erc20::Transfer');
|
|
218
|
+
|
|
219
|
+
const decodedEventHuman = decodedEvent.event.args.reduce((prev, cur, index) => {
|
|
220
|
+
return {
|
|
221
|
+
...prev,
|
|
222
|
+
[cur.name]: decodedEvent.args[index].toHuman()
|
|
223
|
+
};
|
|
224
|
+
}, {});
|
|
225
|
+
|
|
226
|
+
const expectedEvent = {
|
|
227
|
+
from: '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY',
|
|
228
|
+
to: '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty',
|
|
229
|
+
value: '123.4567 MUnit'
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
expect(decodedEventHuman).toEqual(expectedEvent);
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
});
|