@bitgo-beta/sdk-coin-dot 2.2.8-beta.166 → 2.2.8-beta.1660
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/dist/{src → cjs/src}/dot.d.ts +8 -19
- package/dist/cjs/src/dot.d.ts.map +1 -0
- package/dist/cjs/src/dot.js +623 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/index.js +6 -2
- package/dist/cjs/src/lib/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/addressInitializationBuilder.js +182 -0
- package/dist/{src → cjs/src}/lib/batchTransactionBuilder.d.ts +1 -0
- package/dist/cjs/src/lib/batchTransactionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/batchTransactionBuilder.js +229 -0
- package/dist/cjs/src/lib/claimBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/claimBuilder.js +117 -0
- package/dist/cjs/src/lib/errors.d.ts.map +1 -0
- package/dist/cjs/src/lib/errors.js +19 -0
- package/dist/{src → cjs/src}/lib/iface.d.ts +16 -13
- package/dist/cjs/src/lib/iface.d.ts.map +1 -0
- package/dist/cjs/src/lib/iface.js +128 -0
- package/dist/cjs/src/lib/iface_utils.d.ts.map +1 -0
- package/dist/cjs/src/lib/iface_utils.js +92 -0
- package/dist/{src → cjs/src}/lib/index.d.ts +2 -0
- package/dist/cjs/src/lib/index.d.ts.map +1 -0
- package/dist/cjs/src/lib/index.js +73 -0
- package/dist/{src → cjs/src}/lib/keyPair.d.ts +7 -0
- package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
- package/dist/cjs/src/lib/keyPair.js +117 -0
- package/dist/cjs/src/lib/nativeTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/nativeTransferBuilder.js +219 -0
- package/dist/cjs/src/lib/proxyBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/proxyBuilder.js +116 -0
- package/dist/cjs/src/lib/singletonRegistry.d.ts.map +1 -0
- package/dist/cjs/src/lib/singletonRegistry.js +20 -0
- package/dist/cjs/src/lib/stakingBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingBuilder.js +167 -0
- package/dist/{src → cjs/src}/lib/transaction.d.ts +0 -1
- package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/transaction.js +624 -0
- package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +0 -1
- package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilder.js +351 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.js +104 -0
- package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transferBuilder.js +11 -0
- package/dist/cjs/src/lib/txnSchema.d.ts.map +1 -0
- package/dist/cjs/src/lib/txnSchema.js +117 -0
- package/dist/cjs/src/lib/unnominateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/unnominateBuilder.js +48 -0
- package/dist/cjs/src/lib/unstakeBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/unstakeBuilder.js +87 -0
- package/dist/{src → cjs/src}/lib/utils.d.ts +10 -2
- package/dist/cjs/src/lib/utils.d.ts.map +1 -0
- package/dist/cjs/src/lib/utils.js +491 -0
- package/dist/cjs/src/lib/wasmParser.d.ts +57 -0
- package/dist/cjs/src/lib/wasmParser.d.ts.map +1 -0
- package/dist/cjs/src/lib/wasmParser.js +345 -0
- package/dist/cjs/src/lib/withdrawUnstakedBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/withdrawUnstakedBuilder.js +88 -0
- package/dist/cjs/src/register.d.ts.map +1 -0
- package/dist/cjs/src/register.js +11 -0
- package/dist/cjs/src/resources/index.d.ts +5 -0
- package/dist/cjs/src/resources/index.d.ts.map +1 -0
- package/dist/cjs/src/resources/index.js +21 -0
- package/dist/cjs/src/resources/mainnet.d.ts.map +1 -0
- package/dist/cjs/src/resources/mainnet.js +5 -0
- package/dist/cjs/src/resources/polkadotAssetHub.d.ts +2 -0
- package/dist/cjs/src/resources/polkadotAssetHub.d.ts.map +1 -0
- package/dist/cjs/src/resources/polkadotAssetHub.js +5 -0
- package/dist/cjs/src/resources/westend.d.ts.map +1 -0
- package/dist/cjs/src/resources/westend.js +5 -0
- package/dist/cjs/src/resources/westendAssetHub.d.ts +2 -0
- package/dist/cjs/src/resources/westendAssetHub.d.ts.map +1 -0
- package/dist/cjs/src/resources/westendAssetHub.js +5 -0
- package/dist/cjs/src/tdot.d.ts.map +1 -0
- package/dist/cjs/src/tdot.js +27 -0
- package/dist/cjs/test/fixtures.d.ts +283 -0
- package/dist/cjs/test/fixtures.d.ts.map +1 -0
- package/dist/cjs/test/fixtures.js +439 -0
- package/dist/cjs/test/resources/index.d.ts +141 -0
- package/dist/cjs/test/resources/index.d.ts.map +1 -0
- package/dist/cjs/test/resources/index.js +157 -0
- package/dist/cjs/test/resources/materialData.json +8 -0
- package/dist/cjs/test/resources/materialDataModified.json +8 -0
- package/dist/cjs/test/resources/testnet.d.ts +2 -0
- package/dist/cjs/test/resources/testnet.d.ts.map +1 -0
- package/dist/{src/resources/westend.js → cjs/test/resources/testnet.js} +3 -3
- package/dist/cjs/test/unit/address.d.ts +2 -0
- package/dist/cjs/test/unit/address.d.ts.map +1 -0
- package/dist/cjs/test/unit/address.js +45 -0
- package/dist/cjs/test/unit/dot.d.ts +2 -0
- package/dist/cjs/test/unit/dot.d.ts.map +1 -0
- package/dist/cjs/test/unit/dot.js +944 -0
- package/dist/cjs/test/unit/keypair.d.ts +2 -0
- package/dist/cjs/test/unit/keypair.d.ts.map +1 -0
- package/dist/cjs/test/unit/keypair.js +111 -0
- package/dist/cjs/test/unit/transaction.d.ts +2 -0
- package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction.js +269 -0
- package/dist/cjs/test/unit/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/addressInitializationBuilder.js +265 -0
- package/dist/cjs/test/unit/transactionBuilder/base.d.ts +8 -0
- package/dist/cjs/test/unit/transactionBuilder/base.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/base.js +233 -0
- package/dist/cjs/test/unit/transactionBuilder/batchTransactionBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/batchTransactionBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/batchTransactionBuilder.js +521 -0
- package/dist/cjs/test/unit/transactionBuilder/claimBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/claimBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/claimBuilder.js +129 -0
- package/dist/cjs/test/unit/transactionBuilder/proxyBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/proxyBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/proxyBuilder.js +88 -0
- package/dist/cjs/test/unit/transactionBuilder/singeltonRegistry.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/singeltonRegistry.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/singeltonRegistry.js +59 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingBuilder.js +235 -0
- package/dist/cjs/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transactionBuilderFactory.js +107 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +437 -0
- package/dist/cjs/test/unit/transactionBuilder/unnominateBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/unnominateBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/unnominateBuilder.js +97 -0
- package/dist/cjs/test/unit/transactionBuilder/unstakeBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/unstakeBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/unstakeBuilder.js +116 -0
- package/dist/cjs/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/withdrawUnstakedBuilder.js +115 -0
- package/dist/cjs/test/unit/utils.d.ts +2 -0
- package/dist/cjs/test/unit/utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/utils.js +117 -0
- package/dist/cjs/test/unit/wasmBuilderByteComparison.d.ts +22 -0
- package/dist/cjs/test/unit/wasmBuilderByteComparison.d.ts.map +1 -0
- package/dist/cjs/test/unit/wasmBuilderByteComparison.js +197 -0
- package/dist/cjs/test/unit/wasmParserExplanation.d.ts +15 -0
- package/dist/cjs/test/unit/wasmParserExplanation.d.ts.map +1 -0
- package/dist/cjs/test/unit/wasmParserExplanation.js +147 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/dot.d.ts +147 -0
- package/dist/esm/dot.d.ts.map +1 -0
- package/dist/esm/dot.js +583 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/lib/addressInitializationBuilder.d.ts +79 -0
- package/dist/esm/lib/addressInitializationBuilder.js +175 -0
- package/dist/esm/lib/batchTransactionBuilder.d.ts +62 -0
- package/dist/{src → esm}/lib/batchTransactionBuilder.d.ts.map +1 -1
- package/dist/esm/lib/batchTransactionBuilder.js +222 -0
- package/dist/esm/lib/claimBuilder.d.ts +58 -0
- package/dist/esm/lib/claimBuilder.js +110 -0
- package/dist/esm/lib/errors.d.ts +8 -0
- package/dist/esm/lib/errors.js +14 -0
- package/dist/esm/lib/iface.d.ts +337 -0
- package/dist/esm/lib/iface.d.ts.map +1 -0
- package/dist/esm/lib/iface.js +125 -0
- package/dist/esm/lib/iface_utils.d.ts +59 -0
- package/dist/esm/lib/iface_utils.js +83 -0
- package/dist/esm/lib/index.d.ts +21 -0
- package/dist/{src → esm}/lib/index.d.ts.map +1 -1
- package/dist/esm/lib/index.js +20 -0
- package/dist/esm/lib/keyPair.d.ts +38 -0
- package/dist/esm/lib/keyPair.d.ts.map +1 -0
- package/dist/esm/lib/keyPair.js +77 -0
- package/dist/esm/lib/nativeTransferBuilder.d.ts +84 -0
- package/dist/esm/lib/nativeTransferBuilder.js +212 -0
- package/dist/esm/lib/proxyBuilder.d.ts +54 -0
- package/dist/esm/lib/proxyBuilder.js +109 -0
- package/dist/esm/lib/singletonRegistry.d.ts +7 -0
- package/dist/esm/lib/singletonRegistry.js +16 -0
- package/dist/esm/lib/stakingBuilder.d.ts +66 -0
- package/dist/esm/lib/stakingBuilder.js +160 -0
- package/dist/esm/lib/transaction.d.ts +83 -0
- package/dist/esm/lib/transaction.d.ts.map +1 -0
- package/dist/esm/lib/transaction.js +584 -0
- package/dist/esm/lib/transactionBuilder.d.ts +131 -0
- package/dist/esm/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/esm/lib/transactionBuilder.js +311 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts +28 -0
- package/dist/esm/lib/transactionBuilderFactory.js +97 -0
- package/dist/esm/lib/transferBuilder.d.ts +11 -0
- package/dist/esm/lib/transferBuilder.js +7 -0
- package/dist/esm/lib/txnSchema.d.ts +15 -0
- package/dist/esm/lib/txnSchema.js +111 -0
- package/dist/esm/lib/unnominateBuilder.d.ts +24 -0
- package/dist/esm/lib/unnominateBuilder.js +44 -0
- package/dist/esm/lib/unstakeBuilder.d.ts +38 -0
- package/dist/esm/lib/unstakeBuilder.js +80 -0
- package/dist/esm/lib/utils.d.ts +261 -0
- package/dist/esm/lib/utils.d.ts.map +1 -0
- package/dist/esm/lib/utils.js +451 -0
- package/dist/esm/lib/wasmParser.d.ts +57 -0
- package/dist/esm/lib/wasmParser.d.ts.map +1 -0
- package/dist/esm/lib/wasmParser.js +341 -0
- package/dist/esm/lib/withdrawUnstakedBuilder.d.ts +38 -0
- package/dist/esm/lib/withdrawUnstakedBuilder.js +81 -0
- package/dist/esm/register.d.ts +3 -0
- package/dist/esm/register.js +7 -0
- package/dist/esm/resources/index.d.ts +5 -0
- package/dist/{src → esm}/resources/index.d.ts.map +1 -1
- package/dist/esm/resources/index.js +5 -0
- package/dist/esm/resources/mainnet.d.ts +2 -0
- package/dist/esm/resources/mainnet.js +2 -0
- package/dist/esm/resources/polkadotAssetHub.d.ts +2 -0
- package/dist/esm/resources/polkadotAssetHub.d.ts.map +1 -0
- package/dist/esm/resources/polkadotAssetHub.js +2 -0
- package/dist/esm/resources/westend.d.ts +2 -0
- package/dist/esm/resources/westend.js +2 -0
- package/dist/esm/resources/westendAssetHub.d.ts +2 -0
- package/dist/esm/resources/westendAssetHub.d.ts.map +1 -0
- package/dist/esm/resources/westendAssetHub.js +2 -0
- package/dist/esm/tdot.d.ts +12 -0
- package/dist/esm/tdot.js +23 -0
- package/package.json +42 -20
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -450
- package/dist/src/dot.d.ts.map +0 -1
- package/dist/src/dot.js +0 -562
- package/dist/src/lib/addressInitializationBuilder.js +0 -184
- package/dist/src/lib/batchTransactionBuilder.js +0 -220
- package/dist/src/lib/claimBuilder.js +0 -119
- package/dist/src/lib/errors.js +0 -19
- package/dist/src/lib/iface.d.ts.map +0 -1
- package/dist/src/lib/iface.js +0 -128
- package/dist/src/lib/iface_utils.js +0 -93
- package/dist/src/lib/index.js +0 -57
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -70
- package/dist/src/lib/nativeTransferBuilder.js +0 -221
- package/dist/src/lib/proxyBuilder.js +0 -118
- package/dist/src/lib/singletonRegistry.js +0 -20
- package/dist/src/lib/stakingBuilder.js +0 -169
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -590
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -337
- package/dist/src/lib/transactionBuilderFactory.js +0 -105
- package/dist/src/lib/transferBuilder.js +0 -11
- package/dist/src/lib/txnSchema.js +0 -117
- package/dist/src/lib/unnominateBuilder.js +0 -50
- package/dist/src/lib/unstakeBuilder.js +0 -89
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/utils.js +0 -458
- package/dist/src/lib/withdrawUnstakedBuilder.js +0 -90
- package/dist/src/register.js +0 -11
- package/dist/src/resources/index.d.ts +0 -3
- package/dist/src/resources/index.js +0 -15
- package/dist/src/resources/mainnet.js +0 -5
- package/dist/src/tdot.js +0 -27
- /package/dist/{src → cjs/src}/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/addressInitializationBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/claimBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/errors.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/iface_utils.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/nativeTransferBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/proxyBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/singletonRegistry.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/txnSchema.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/unnominateBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/unstakeBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/withdrawUnstakedBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/register.d.ts +0 -0
- /package/dist/{src → cjs/src}/resources/mainnet.d.ts +0 -0
- /package/dist/{src → cjs/src}/resources/westend.d.ts +0 -0
- /package/dist/{src → cjs/src}/tdot.d.ts +0 -0
- /package/dist/{src → esm}/index.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/addressInitializationBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/claimBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/errors.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/iface_utils.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/nativeTransferBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/proxyBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/singletonRegistry.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/transactionBuilderFactory.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/transferBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/txnSchema.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/unnominateBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/unstakeBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/withdrawUnstakedBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/register.d.ts.map +0 -0
- /package/dist/{src → esm}/resources/mainnet.d.ts.map +0 -0
- /package/dist/{src → esm}/resources/westend.d.ts.map +0 -0
- /package/dist/{src → esm}/tdot.d.ts.map +0 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './lib';
|
|
2
|
+
export * from './dot';
|
|
3
|
+
export * from './tdot';
|
|
4
|
+
export * from './register';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYic7XG5leHBvcnQgKiBmcm9tICcuL2RvdCc7XG5leHBvcnQgKiBmcm9tICcuL3Rkb3QnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3Rlcic7XG4iXX0=
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { BaseAddress, TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { DecodedSignedTx, DecodedSigningPayload, UnsignedTransaction } from '@substrate/txwrapper-core';
|
|
4
|
+
import { ProxyType } from './iface';
|
|
5
|
+
import { Transaction } from './transaction';
|
|
6
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
7
|
+
export declare class AddressInitializationBuilder extends TransactionBuilder {
|
|
8
|
+
protected _delegate: string;
|
|
9
|
+
protected _proxyType: ProxyType;
|
|
10
|
+
protected _delay: string;
|
|
11
|
+
protected _index: number;
|
|
12
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
13
|
+
/** @inheritDoc */
|
|
14
|
+
protected buildTransaction(): UnsignedTransaction;
|
|
15
|
+
/**
|
|
16
|
+
* Register a proxy account for the sender that is able to make calls on its behalf.
|
|
17
|
+
*
|
|
18
|
+
* @returns {UnsignedTransaction} an unsigned Dot transaction
|
|
19
|
+
*
|
|
20
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#proxy
|
|
21
|
+
*/
|
|
22
|
+
protected buildAddProxyTransaction(): UnsignedTransaction;
|
|
23
|
+
/**
|
|
24
|
+
* Spawn a receive address for the sender
|
|
25
|
+
*
|
|
26
|
+
* @return {UnsignedTransaction} an unsigned Dot transaction
|
|
27
|
+
*/
|
|
28
|
+
protected buildAnonymousProxyTransaction(): UnsignedTransaction;
|
|
29
|
+
protected get transactionType(): TransactionType;
|
|
30
|
+
/**
|
|
31
|
+
* The account to delegate auth to.
|
|
32
|
+
*
|
|
33
|
+
* @param {BaseAddress} owner
|
|
34
|
+
* @returns {AddressInitializationBuilder} This builder.
|
|
35
|
+
*
|
|
36
|
+
* @see https://wiki.polkadot.network/docs/learn-proxies#why-use-a-proxy
|
|
37
|
+
*/
|
|
38
|
+
owner(owner: BaseAddress): this;
|
|
39
|
+
/**
|
|
40
|
+
* Used for disambiguation if multiple calls are made in the same transaction
|
|
41
|
+
* Use 0 as a default
|
|
42
|
+
*
|
|
43
|
+
* @param {number} index
|
|
44
|
+
*
|
|
45
|
+
* @returns {AddressInitializationBuilder} This transfer builder.
|
|
46
|
+
*/
|
|
47
|
+
index(index: number): this;
|
|
48
|
+
/**
|
|
49
|
+
* The proxy type to add.
|
|
50
|
+
*
|
|
51
|
+
* @param {proxyType} proxyType
|
|
52
|
+
* @returns {AddressInitializationBuilder} This builder.
|
|
53
|
+
*
|
|
54
|
+
* @see https://wiki.polkadot.network/docs/learn-proxies#proxy-types
|
|
55
|
+
*/
|
|
56
|
+
type(proxyType: ProxyType): this;
|
|
57
|
+
/**
|
|
58
|
+
* The number of blocks that an announcement must be in place for.
|
|
59
|
+
* before the corresponding call may be dispatched.
|
|
60
|
+
* If zero, then no announcement is needed.
|
|
61
|
+
* TODO: move to the validity window method once it has been standardized
|
|
62
|
+
*
|
|
63
|
+
* @param {string} delay
|
|
64
|
+
* @returns {AddressInitializationBuilder} This transfer builder.
|
|
65
|
+
*
|
|
66
|
+
* @see https://wiki.polkadot.network/docs/learn-proxies#time-delayed-proxies
|
|
67
|
+
*/
|
|
68
|
+
delay(delay: string): this;
|
|
69
|
+
/** @inheritdoc */
|
|
70
|
+
validateDecodedTransaction(decodedTxn: DecodedSigningPayload | DecodedSignedTx): void;
|
|
71
|
+
/** @inheritdoc */
|
|
72
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
73
|
+
/** @inheritdoc */
|
|
74
|
+
validateTransaction(_: Transaction): void;
|
|
75
|
+
private validateFields;
|
|
76
|
+
private validateAddProxyFields;
|
|
77
|
+
private validateAnonymousProxyFields;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=addressInitializationBuilder.d.ts.map
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { InvalidTransactionError, TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { methods } from '@substrate/txwrapper-polkadot';
|
|
3
|
+
import BigNumber from 'bignumber.js';
|
|
4
|
+
import { MethodNames } from './iface';
|
|
5
|
+
import { getDelegateAddress } from './iface_utils';
|
|
6
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
7
|
+
import { AddressInitializationSchema, AnonymousAddressInitializationSchema } from './txnSchema';
|
|
8
|
+
import utils from './utils';
|
|
9
|
+
export class AddressInitializationBuilder extends TransactionBuilder {
|
|
10
|
+
constructor(_coinConfig) {
|
|
11
|
+
super(_coinConfig);
|
|
12
|
+
this._index = 0;
|
|
13
|
+
}
|
|
14
|
+
/** @inheritDoc */
|
|
15
|
+
buildTransaction() {
|
|
16
|
+
if (this._delegate) {
|
|
17
|
+
return this.buildAddProxyTransaction();
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
return this.buildAnonymousProxyTransaction();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Register a proxy account for the sender that is able to make calls on its behalf.
|
|
25
|
+
*
|
|
26
|
+
* @returns {UnsignedTransaction} an unsigned Dot transaction
|
|
27
|
+
*
|
|
28
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#proxy
|
|
29
|
+
*/
|
|
30
|
+
buildAddProxyTransaction() {
|
|
31
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
32
|
+
return methods.proxy.addProxy({
|
|
33
|
+
delegate: this._delegate,
|
|
34
|
+
proxyType: this._proxyType,
|
|
35
|
+
delay: this._delay,
|
|
36
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Spawn a receive address for the sender
|
|
40
|
+
*
|
|
41
|
+
* @return {UnsignedTransaction} an unsigned Dot transaction
|
|
42
|
+
*/
|
|
43
|
+
buildAnonymousProxyTransaction() {
|
|
44
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
45
|
+
return utils.pureProxy({
|
|
46
|
+
proxyType: this._proxyType,
|
|
47
|
+
index: this._index,
|
|
48
|
+
delay: parseInt(this._delay, 10),
|
|
49
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
50
|
+
}
|
|
51
|
+
get transactionType() {
|
|
52
|
+
return TransactionType.AddressInitialization;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The account to delegate auth to.
|
|
56
|
+
*
|
|
57
|
+
* @param {BaseAddress} owner
|
|
58
|
+
* @returns {AddressInitializationBuilder} This builder.
|
|
59
|
+
*
|
|
60
|
+
* @see https://wiki.polkadot.network/docs/learn-proxies#why-use-a-proxy
|
|
61
|
+
*/
|
|
62
|
+
owner(owner) {
|
|
63
|
+
this.validateAddress({ address: owner.address });
|
|
64
|
+
this._delegate = owner.address;
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Used for disambiguation if multiple calls are made in the same transaction
|
|
69
|
+
* Use 0 as a default
|
|
70
|
+
*
|
|
71
|
+
* @param {number} index
|
|
72
|
+
*
|
|
73
|
+
* @returns {AddressInitializationBuilder} This transfer builder.
|
|
74
|
+
*/
|
|
75
|
+
index(index) {
|
|
76
|
+
this.validateValue(new BigNumber(index));
|
|
77
|
+
this._index = index;
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The proxy type to add.
|
|
82
|
+
*
|
|
83
|
+
* @param {proxyType} proxyType
|
|
84
|
+
* @returns {AddressInitializationBuilder} This builder.
|
|
85
|
+
*
|
|
86
|
+
* @see https://wiki.polkadot.network/docs/learn-proxies#proxy-types
|
|
87
|
+
*/
|
|
88
|
+
type(proxyType) {
|
|
89
|
+
this._proxyType = proxyType;
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* The number of blocks that an announcement must be in place for.
|
|
94
|
+
* before the corresponding call may be dispatched.
|
|
95
|
+
* If zero, then no announcement is needed.
|
|
96
|
+
* TODO: move to the validity window method once it has been standardized
|
|
97
|
+
*
|
|
98
|
+
* @param {string} delay
|
|
99
|
+
* @returns {AddressInitializationBuilder} This transfer builder.
|
|
100
|
+
*
|
|
101
|
+
* @see https://wiki.polkadot.network/docs/learn-proxies#time-delayed-proxies
|
|
102
|
+
*/
|
|
103
|
+
delay(delay) {
|
|
104
|
+
this.validateValue(new BigNumber(parseInt(delay, 10)));
|
|
105
|
+
this._delay = delay;
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
/** @inheritdoc */
|
|
109
|
+
validateDecodedTransaction(decodedTxn) {
|
|
110
|
+
let validationResult;
|
|
111
|
+
if (decodedTxn.method?.name === MethodNames.AddProxy) {
|
|
112
|
+
const txMethod = decodedTxn.method.args;
|
|
113
|
+
validationResult = this.validateAddProxyFields(getDelegateAddress(txMethod), txMethod.proxyType, txMethod.delay);
|
|
114
|
+
}
|
|
115
|
+
else if (decodedTxn.method?.name === MethodNames.Anonymous || decodedTxn.method?.name === MethodNames.PureProxy) {
|
|
116
|
+
const txMethod = decodedTxn.method.args;
|
|
117
|
+
validationResult = this.validateAnonymousProxyFields(parseInt(txMethod.index, 10), txMethod.proxyType, txMethod.delay);
|
|
118
|
+
}
|
|
119
|
+
if (validationResult.error) {
|
|
120
|
+
throw new InvalidTransactionError(`Transaction validation failed: ${validationResult.error.message}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/** @inheritdoc */
|
|
124
|
+
fromImplementation(rawTransaction) {
|
|
125
|
+
const tx = super.fromImplementation(rawTransaction);
|
|
126
|
+
if (this._method?.name === MethodNames.AddProxy) {
|
|
127
|
+
const txMethod = this._method.args;
|
|
128
|
+
this.owner({ address: getDelegateAddress(txMethod) });
|
|
129
|
+
this.type(txMethod.proxyType);
|
|
130
|
+
this.delay(new BigNumber(txMethod.delay).toString());
|
|
131
|
+
}
|
|
132
|
+
else if (this._method?.name === MethodNames.Anonymous || this._method?.name === MethodNames.PureProxy) {
|
|
133
|
+
const txMethod = this._method.args;
|
|
134
|
+
this.index(new BigNumber(txMethod.index).toNumber());
|
|
135
|
+
this.type(txMethod.proxyType);
|
|
136
|
+
this.delay(new BigNumber(txMethod.delay).toString());
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
throw new InvalidTransactionError(`Invalid Transaction Type: ${this._method?.name}. Expected ${MethodNames.AddProxy} or ${MethodNames.Anonymous}`);
|
|
140
|
+
}
|
|
141
|
+
return tx;
|
|
142
|
+
}
|
|
143
|
+
/** @inheritdoc */
|
|
144
|
+
validateTransaction(_) {
|
|
145
|
+
super.validateTransaction(_);
|
|
146
|
+
this.validateFields();
|
|
147
|
+
}
|
|
148
|
+
validateFields() {
|
|
149
|
+
let validationResult;
|
|
150
|
+
if (this._delegate) {
|
|
151
|
+
validationResult = this.validateAddProxyFields(this._delegate, this._proxyType, this._delay);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
validationResult = this.validateAnonymousProxyFields(this._index, this._proxyType, this._delay);
|
|
155
|
+
}
|
|
156
|
+
if (validationResult.error) {
|
|
157
|
+
throw new InvalidTransactionError(`AddressInitialization Transaction validation failed: ${validationResult.error.message}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
validateAddProxyFields(delegate, proxyType, delay) {
|
|
161
|
+
return AddressInitializationSchema.validate({
|
|
162
|
+
delegate,
|
|
163
|
+
proxyType,
|
|
164
|
+
delay,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
validateAnonymousProxyFields(index, proxyType, delay) {
|
|
168
|
+
return AnonymousAddressInitializationSchema.validate({
|
|
169
|
+
proxyType,
|
|
170
|
+
index,
|
|
171
|
+
delay,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHN0YsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sU0FBUyxNQUFNLGNBQWMsQ0FBQztBQUVyQyxPQUFPLEVBQXVDLFdBQVcsRUFBYSxNQUFNLFNBQVMsQ0FBQztBQUN0RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLG9DQUFvQyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hHLE9BQU8sS0FBSyxNQUFNLFNBQVMsQ0FBQztBQUU1QixNQUFNLE9BQU8sNEJBQTZCLFNBQVEsa0JBQWtCO0lBTWxFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSFgsV0FBTSxHQUFHLENBQUMsQ0FBQztJQUlyQixDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsZ0JBQWdCO1FBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sd0JBQXdCO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzNDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FB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Q0FBQztJQUNMLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxLQUFhLEVBQUUsU0FBaUIsRUFBRSxLQUFhO1FBQ2xGLE9BQU8sb0NBQW9DLENBQUMsUUFBUSxDQUFDO1lBQ25ELFNBQVM7WUFDVCxLQUFLO1lBQ0wsS0FBSztTQUNOLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VBZGRyZXNzLCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVjb2RlZFNpZ25lZFR4LCBEZWNvZGVkU2lnbmluZ1BheWxvYWQsIFVuc2lnbmVkVHJhbnNhY3Rpb24gfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlJztcbmltcG9ydCB7IG1ldGhvZHMgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1wb2xrYWRvdCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnam9pJztcbmltcG9ydCB7IEFkZEFub255bW91c1Byb3h5QXJncywgQWRkUHJveHlBcmdzLCBNZXRob2ROYW1lcywgUHJveHlUeXBlIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBnZXREZWxlZ2F0ZUFkZHJlc3MgfSBmcm9tICcuL2lmYWNlX3V0aWxzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBBZGRyZXNzSW5pdGlhbGl6YXRpb25TY2hlbWEsIEFub255bW91c0FkZHJlc3NJbml0aWFsaXphdGlvblNjaGVtYSB9IGZyb20gJy4vdHhuU2NoZW1hJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIEFkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX2RlbGVnYXRlOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfcHJveHlUeXBlOiBQcm94eVR5cGU7XG4gIHByb3RlY3RlZCBfZGVsYXk6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9pbmRleCA9IDA7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBidWlsZFRyYW5zYWN0aW9uKCk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRBZGRQcm94eVRyYW5zYWN0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkQW5vbnltb3VzUHJveHlUcmFuc2FjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIHByb3h5IGFjY291bnQgZm9yIHRoZSBzZW5kZXIgdGhhdCBpcyBhYmxlIHRvIG1ha2UgY2FsbHMgb24gaXRzIGJlaGFsZi5cbiAgICpcbiAgICogQHJldHVybnMge1Vuc2lnbmVkVHJhbnNhY3Rpb259IGFuIHVuc2lnbmVkIERvdCB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vcG9sa2Fkb3QuanMub3JnL2RvY3Mvc3Vic3RyYXRlL2V4dHJpbnNpY3MvI3Byb3h5XG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRBZGRQcm94eVRyYW5zYWN0aW9uKCk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGJhc2VUeEluZm8gPSB0aGlzLmNyZWF0ZUJhc2VUeEluZm8oKTtcbiAgICByZXR1cm4gbWV0aG9kcy5wcm94eS5hZGRQcm94eShcbiAgICAgIHtcbiAgICAgICAgZGVsZWdhdGU6IHRoaXMuX2RlbGVnYXRlLFxuICAgICAgICBwcm94eVR5cGU6IHRoaXMuX3Byb3h5VHlwZSxcbiAgICAgICAgZGVsYXk6IHRoaXMuX2RlbGF5LFxuICAgICAgfSxcbiAgICAgIGJhc2VUeEluZm8uYmFzZVR4SW5mbyxcbiAgICAgIGJhc2VUeEluZm8ub3B0aW9uc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU3Bhd24gYSByZWNlaXZlIGFkZHJlc3MgZm9yIHRoZSBzZW5kZXJcbiAgICpcbiAgICogQHJldHVybiB7VW5zaWduZWRUcmFuc2FjdGlvbn0gYW4gdW5zaWduZWQgRG90IHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRBbm9ueW1vdXNQcm94eVRyYW5zYWN0aW9uKCk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGJhc2VUeEluZm8gPSB0aGlzLmNyZWF0ZUJhc2VUeEluZm8oKTtcbiAgICByZXR1cm4gdXRpbHMucHVyZVByb3h5KFxuICAgICAge1xuICAgICAgICBwcm94eVR5cGU6IHRoaXMuX3Byb3h5VHlwZSxcbiAgICAgICAgaW5kZXg6IHRoaXMuX2luZGV4LFxuICAgICAgICBkZWxheTogcGFyc2VJbnQodGhpcy5fZGVsYXksIDEwKSxcbiAgICAgIH0sXG4gICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICBiYXNlVHhJbmZvLm9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCB0byBkZWxlZ2F0ZSBhdXRoIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge0Jhc2VBZGRyZXNzfSBvd25lclxuICAgKiBAcmV0dXJucyB7QWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlcn0gVGhpcyBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd2lraS5wb2xrYWRvdC5uZXR3b3JrL2RvY3MvbGVhcm4tcHJveGllcyN3aHktdXNlLWEtcHJveHlcbiAgICovXG4gIG93bmVyKG93bmVyOiBCYXNlQWRkcmVzcyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogb3duZXIuYWRkcmVzcyB9KTtcbiAgICB0aGlzLl9kZWxlZ2F0ZSA9IG93bmVyLmFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBmb3IgZGlzYW1iaWd1YXRpb24gaWYgbXVsdGlwbGUgY2FsbHMgYXJlIG1hZGUgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb25cbiAgICogVXNlIDAgYXMgYSBkZWZhdWx0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKlxuICAgKiBAcmV0dXJucyB7QWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2ZlciBidWlsZGVyLlxuICAgKi9cbiAgaW5kZXgoaW5kZXg6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGluZGV4KSk7XG4gICAgdGhpcy5faW5kZXggPSBpbmRleDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHJveHkgdHlwZSB0byBhZGQuXG4gICAqXG4gICAqIEBwYXJhbSB7cHJveHlUeXBlfSBwcm94eVR5cGVcbiAgICogQHJldHVybnMge0FkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXJ9IFRoaXMgYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3dpa2kucG9sa2Fkb3QubmV0d29yay9kb2NzL2xlYXJuLXByb3hpZXMjcHJveHktdHlwZXNcbiAgICovXG4gIHR5cGUocHJveHlUeXBlOiBQcm94eVR5cGUpOiB0aGlzIHtcbiAgICB0aGlzLl9wcm94eVR5cGUgPSBwcm94eVR5cGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBhbiBhbm5vdW5jZW1lbnQgbXVzdCBiZSBpbiBwbGFjZSBmb3IuXG4gICAqIGJlZm9yZSB0aGUgY29ycmVzcG9uZGluZyBjYWxsIG1heSBiZSBkaXNwYXRjaGVkLlxuICAgKiBJZiB6ZXJvLCB0aGVuIG5vIGFubm91bmNlbWVudCBpcyBuZWVkZWQuXG4gICAqIFRPRE86IG1vdmUgdG8gdGhlIHZhbGlkaXR5IHdpbmRvdyBtZXRob2Qgb25jZSBpdCBoYXMgYmVlbiBzdGFuZGFyZGl6ZWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlbGF5XG4gICAqIEByZXR1cm5zIHtBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyfSBUaGlzIHRyYW5zZmVyIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93aWtpLnBvbGthZG90Lm5ldHdvcmsvZG9jcy9sZWFybi1wcm94aWVzI3RpbWUtZGVsYXllZC1wcm94aWVzXG4gICAqL1xuICBkZWxheShkZWxheTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIocGFyc2VJbnQoZGVsYXksIDEwKSkpO1xuICAgIHRoaXMuX2RlbGF5ID0gZGVsYXk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4bjogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4KTogdm9pZCB7XG4gICAgbGV0IHZhbGlkYXRpb25SZXN1bHQ7XG4gICAgaWYgKGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lID09PSBNZXRob2ROYW1lcy5BZGRQcm94eSkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgQWRkUHJveHlBcmdzO1xuICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMudmFsaWRhdGVBZGRQcm94eUZpZWxkcyhnZXREZWxlZ2F0ZUFkZHJlc3ModHhNZXRob2QpLCB0eE1ldGhvZC5wcm94eVR5cGUsIHR4TWV0aG9kLmRlbGF5KTtcbiAgICB9IGVsc2UgaWYgKGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lID09PSBNZXRob2ROYW1lcy5Bbm9ueW1vdXMgfHwgZGVjb2RlZFR4bi5tZXRob2Q/Lm5hbWUgPT09IE1ldGhvZE5hbWVzLlB1cmVQcm94eSkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgQWRkQW5vbnltb3VzUHJveHlBcmdzO1xuICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMudmFsaWRhdGVBbm9ueW1vdXNQcm94eUZpZWxkcyhcbiAgICAgICAgcGFyc2VJbnQodHhNZXRob2QuaW5kZXgsIDEwKSxcbiAgICAgICAgdHhNZXRob2QucHJveHlUeXBlLFxuICAgICAgICB0eE1ldGhvZC5kZWxheVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBzdXBlci5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGlmICh0aGlzLl9tZXRob2Q/Lm5hbWUgPT09IE1ldGhvZE5hbWVzLkFkZFByb3h5KSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IHRoaXMuX21ldGhvZC5hcmdzIGFzIEFkZFByb3h5QXJncztcbiAgICAgIHRoaXMub3duZXIoeyBhZGRyZXNzOiBnZXREZWxlZ2F0ZUFkZHJlc3ModHhNZXRob2QpIH0pO1xuICAgICAgdGhpcy50eXBlKHR4TWV0aG9kLnByb3h5VHlwZSk7XG4gICAgICB0aGlzLmRlbGF5KG5ldyBCaWdOdW1iZXIodHhNZXRob2QuZGVsYXkpLnRvU3RyaW5nKCkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fbWV0aG9kPy5uYW1lID09PSBNZXRob2ROYW1lcy5Bbm9ueW1vdXMgfHwgdGhpcy5fbWV0aG9kPy5uYW1lID09PSBNZXRob2ROYW1lcy5QdXJlUHJveHkpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gdGhpcy5fbWV0aG9kLmFyZ3MgYXMgQWRkQW5vbnltb3VzUHJveHlBcmdzO1xuICAgICAgdGhpcy5pbmRleChuZXcgQmlnTnVtYmVyKHR4TWV0aG9kLmluZGV4KS50b051bWJlcigpKTtcbiAgICAgIHRoaXMudHlwZSh0eE1ldGhvZC5wcm94eVR5cGUpO1xuICAgICAgdGhpcy5kZWxheShuZXcgQmlnTnVtYmVyKHR4TWV0aG9kLmRlbGF5KS50b1N0cmluZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgSW52YWxpZCBUcmFuc2FjdGlvbiBUeXBlOiAke3RoaXMuX21ldGhvZD8ubmFtZX0uIEV4cGVjdGVkICR7TWV0aG9kTmFtZXMuQWRkUHJveHl9IG9yICR7TWV0aG9kTmFtZXMuQW5vbnltb3VzfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKF86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIudmFsaWRhdGVUcmFuc2FjdGlvbihfKTtcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRzKCk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRmllbGRzKCk6IHZvaWQge1xuICAgIGxldCB2YWxpZGF0aW9uUmVzdWx0OiBWYWxpZGF0aW9uUmVzdWx0O1xuICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSkge1xuICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMudmFsaWRhdGVBZGRQcm94eUZpZWxkcyh0aGlzLl9kZWxlZ2F0ZSwgdGhpcy5fcHJveHlUeXBlLCB0aGlzLl9kZWxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSB0aGlzLnZhbGlkYXRlQW5vbnltb3VzUHJveHlGaWVsZHModGhpcy5faW5kZXgsIHRoaXMuX3Byb3h5VHlwZSwgdGhpcy5fZGVsYXkpO1xuICAgIH1cbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgQWRkcmVzc0luaXRpYWxpemF0aW9uIFRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVBZGRQcm94eUZpZWxkcyhkZWxlZ2F0ZTogc3RyaW5nLCBwcm94eVR5cGU6IHN0cmluZywgZGVsYXk6IHN0cmluZyk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIHJldHVybiBBZGRyZXNzSW5pdGlhbGl6YXRpb25TY2hlbWEudmFsaWRhdGUoe1xuICAgICAgZGVsZWdhdGUsXG4gICAgICBwcm94eVR5cGUsXG4gICAgICBkZWxheSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVBbm9ueW1vdXNQcm94eUZpZWxkcyhpbmRleDogbnVtYmVyLCBwcm94eVR5cGU6IHN0cmluZywgZGVsYXk6IHN0cmluZyk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIHJldHVybiBBbm9ueW1vdXNBZGRyZXNzSW5pdGlhbGl6YXRpb25TY2hlbWEudmFsaWRhdGUoe1xuICAgICAgcHJveHlUeXBlLFxuICAgICAgaW5kZXgsXG4gICAgICBkZWxheSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { DecodedSignedTx, DecodedSigningPayload, UnsignedTransaction } from '@substrate/txwrapper-core';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
6
|
+
export declare class BatchTransactionBuilder extends TransactionBuilder {
|
|
7
|
+
protected _calls: string[];
|
|
8
|
+
protected _type: TransactionType;
|
|
9
|
+
private _atomic;
|
|
10
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
11
|
+
/** @inheritDoc */
|
|
12
|
+
protected buildTransaction(): UnsignedTransaction;
|
|
13
|
+
/**
|
|
14
|
+
* Build a transaction which batches together multiple transactions.
|
|
15
|
+
* The transactions which are batched together are passed in as an array of hex strings
|
|
16
|
+
* which are composed of the method to call and the arguments to pass into the method.
|
|
17
|
+
*
|
|
18
|
+
* @returns {UnsignedTransaction}
|
|
19
|
+
*
|
|
20
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#batchcalls-veccall
|
|
21
|
+
*/
|
|
22
|
+
protected buildBatchTransaction(): UnsignedTransaction;
|
|
23
|
+
protected get transactionType(): TransactionType;
|
|
24
|
+
/**
|
|
25
|
+
* Set multiple unsigned transactions to be batched and broadcast as a single transaction
|
|
26
|
+
*
|
|
27
|
+
* @param {BatchCall[]} calls unsigned transactions
|
|
28
|
+
* @returns {BatchTransactionBuilder} This batch transaction builder.
|
|
29
|
+
*/
|
|
30
|
+
calls(calls: string[]): this;
|
|
31
|
+
/**
|
|
32
|
+
* If true when a batched call fails the entire transactions is rolled back, if false no roll back
|
|
33
|
+
* is performed and the effects of any successful call prior to the error remain.
|
|
34
|
+
*
|
|
35
|
+
* @param atomic true if calls must succeed atomically, false otherwise.
|
|
36
|
+
*/
|
|
37
|
+
atomic(atomic: boolean): this;
|
|
38
|
+
/** @inheritdoc */
|
|
39
|
+
validateDecodedTransaction(decodedTxn: DecodedSigningPayload | DecodedSignedTx): void;
|
|
40
|
+
/** @inheritdoc */
|
|
41
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
42
|
+
/** @inheritdoc */
|
|
43
|
+
validateTransaction(_: Transaction): void;
|
|
44
|
+
/**
|
|
45
|
+
* Validate list of unsigned transactions added to batch
|
|
46
|
+
*
|
|
47
|
+
* @param {string[]} calls
|
|
48
|
+
*
|
|
49
|
+
*/
|
|
50
|
+
validateCalls(calls: string[]): void;
|
|
51
|
+
private validateFields;
|
|
52
|
+
private validateBatchTransactionFields;
|
|
53
|
+
private getPureProxyCall;
|
|
54
|
+
private getBondCall;
|
|
55
|
+
private getUnbondCall;
|
|
56
|
+
private getPayee;
|
|
57
|
+
private getAddProxyCall;
|
|
58
|
+
private getBondExtraCall;
|
|
59
|
+
private getRemoveProxyCall;
|
|
60
|
+
private getChillCall;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=batchTransactionBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batchTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/batchTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,eAAe,EAEhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"batchTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/batchTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,eAAe,EAEhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAuBxG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D,qBAAa,uBAAwB,SAAQ,kBAAkB;IAC7D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC;IACjC,OAAO,CAAC,OAAO,CAAS;gBAEZ,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAIjD;;;;;;;;OAQG;IACH,SAAS,CAAC,qBAAqB,IAAI,mBAAmB;IAqBtD,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAM5B;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAK7B,kBAAkB;IAClB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,GAAG,IAAI;IAQrF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IA6CjE,kBAAkB;IAClB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAKzC;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IASpC,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,8BAA8B;IAMtC,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,YAAY;CAKrB"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { BuildTransactionError, InvalidTransactionError, NotImplementedError, TransactionType, toUint8Array, } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { methods } from '@substrate/txwrapper-polkadot';
|
|
3
|
+
import { MethodNames, SectionNames, } from './iface';
|
|
4
|
+
import { getDelegateAddress, isStakeBatchCallPayeeStaked, isStakeBatchCallPayeeStash, isStakeBatchCallPayeeController, isStakeBatchCallPayeeAccount, } from './iface_utils';
|
|
5
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
6
|
+
import { BatchTransactionSchema } from './txnSchema';
|
|
7
|
+
import utils from './utils';
|
|
8
|
+
export class BatchTransactionBuilder extends TransactionBuilder {
|
|
9
|
+
constructor(_coinConfig) {
|
|
10
|
+
super(_coinConfig);
|
|
11
|
+
this._atomic = false;
|
|
12
|
+
}
|
|
13
|
+
/** @inheritDoc */
|
|
14
|
+
buildTransaction() {
|
|
15
|
+
return this.buildBatchTransaction();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Build a transaction which batches together multiple transactions.
|
|
19
|
+
* The transactions which are batched together are passed in as an array of hex strings
|
|
20
|
+
* which are composed of the method to call and the arguments to pass into the method.
|
|
21
|
+
*
|
|
22
|
+
* @returns {UnsignedTransaction}
|
|
23
|
+
*
|
|
24
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#batchcalls-veccall
|
|
25
|
+
*/
|
|
26
|
+
buildBatchTransaction() {
|
|
27
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
28
|
+
if (this._atomic) {
|
|
29
|
+
return methods.utility.batchAll({
|
|
30
|
+
calls: this._calls,
|
|
31
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return methods.utility.batch({
|
|
35
|
+
calls: this._calls,
|
|
36
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
get transactionType() {
|
|
40
|
+
return TransactionType.Batch;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Set multiple unsigned transactions to be batched and broadcast as a single transaction
|
|
44
|
+
*
|
|
45
|
+
* @param {BatchCall[]} calls unsigned transactions
|
|
46
|
+
* @returns {BatchTransactionBuilder} This batch transaction builder.
|
|
47
|
+
*/
|
|
48
|
+
calls(calls) {
|
|
49
|
+
this.validateCalls(calls);
|
|
50
|
+
this._calls = calls;
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* If true when a batched call fails the entire transactions is rolled back, if false no roll back
|
|
55
|
+
* is performed and the effects of any successful call prior to the error remain.
|
|
56
|
+
*
|
|
57
|
+
* @param atomic true if calls must succeed atomically, false otherwise.
|
|
58
|
+
*/
|
|
59
|
+
atomic(atomic) {
|
|
60
|
+
this._atomic = atomic;
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
/** @inheritdoc */
|
|
64
|
+
validateDecodedTransaction(decodedTxn) {
|
|
65
|
+
const txMethod = decodedTxn.method.args;
|
|
66
|
+
const validationResult = this.validateBatchTransactionFields(txMethod.calls);
|
|
67
|
+
if (validationResult.error) {
|
|
68
|
+
throw new InvalidTransactionError(`Transaction validation failed: ${validationResult.error.message}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** @inheritdoc */
|
|
72
|
+
fromImplementation(rawTransaction) {
|
|
73
|
+
const tx = super.fromImplementation(rawTransaction);
|
|
74
|
+
if (this._method?.name === MethodNames.Batch || this._method?.name === MethodNames.BatchAll) {
|
|
75
|
+
if (this._method?.name === MethodNames.BatchAll) {
|
|
76
|
+
this.atomic(true);
|
|
77
|
+
}
|
|
78
|
+
const txMethod = this._method.args;
|
|
79
|
+
if (!txMethod.calls) {
|
|
80
|
+
throw new InvalidTransactionError('failed to decode calls from batch transaction');
|
|
81
|
+
}
|
|
82
|
+
const callsToBatch = [];
|
|
83
|
+
txMethod.calls.forEach((call) => {
|
|
84
|
+
const method = call.callIndex;
|
|
85
|
+
const decodedMethod = toUint8Array(utils.stripHexPrefix(method));
|
|
86
|
+
const decodedCall = this._registry.findMetaCall(decodedMethod);
|
|
87
|
+
if (decodedCall.section === SectionNames.Proxy &&
|
|
88
|
+
(decodedCall.method === MethodNames.Anonymous || decodedCall.method === MethodNames.PureProxy)) {
|
|
89
|
+
callsToBatch.push(this.getPureProxyCall(call.args));
|
|
90
|
+
}
|
|
91
|
+
else if (decodedCall.section === SectionNames.Proxy && decodedCall.method === MethodNames.AddProxy) {
|
|
92
|
+
callsToBatch.push(this.getAddProxyCall(call.args));
|
|
93
|
+
}
|
|
94
|
+
else if (decodedCall.section === SectionNames.Staking && decodedCall.method === MethodNames.BondExtra) {
|
|
95
|
+
callsToBatch.push(this.getBondExtraCall(call.args));
|
|
96
|
+
}
|
|
97
|
+
else if (decodedCall.section === SectionNames.Staking && decodedCall.method === MethodNames.Bond) {
|
|
98
|
+
callsToBatch.push(this.getBondCall(call.args));
|
|
99
|
+
}
|
|
100
|
+
else if (decodedCall.section === SectionNames.Staking && decodedCall.method === MethodNames.Unbond) {
|
|
101
|
+
callsToBatch.push(this.getUnbondCall(call.args));
|
|
102
|
+
}
|
|
103
|
+
else if (decodedCall.section === SectionNames.Staking && decodedCall.method === MethodNames.Chill) {
|
|
104
|
+
callsToBatch.push(this.getChillCall());
|
|
105
|
+
}
|
|
106
|
+
else if (decodedCall.section === SectionNames.Proxy && decodedCall.method === MethodNames.RemoveProxy) {
|
|
107
|
+
callsToBatch.push(this.getRemoveProxyCall(call.args));
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
throw new NotImplementedError(`batching of transaction with index ${method} unsupported`);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
this.calls(callsToBatch);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
throw new InvalidTransactionError(`Invalid Transaction Type: ${this._method?.name}. Expected ${MethodNames.Batch}`);
|
|
117
|
+
}
|
|
118
|
+
return tx;
|
|
119
|
+
}
|
|
120
|
+
/** @inheritdoc */
|
|
121
|
+
validateTransaction(_) {
|
|
122
|
+
super.validateTransaction(_);
|
|
123
|
+
this.validateFields();
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Validate list of unsigned transactions added to batch
|
|
127
|
+
*
|
|
128
|
+
* @param {string[]} calls
|
|
129
|
+
*
|
|
130
|
+
*/
|
|
131
|
+
validateCalls(calls) {
|
|
132
|
+
calls.forEach((call) => {
|
|
133
|
+
if (call.slice(0, 2) !== '0x') {
|
|
134
|
+
// example: '0x160400000000000000'
|
|
135
|
+
throw new BuildTransactionError('call in string format must be hex format of a method and its arguments');
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
validateFields() {
|
|
140
|
+
const validationResult = this.validateBatchTransactionFields(this._calls);
|
|
141
|
+
if (validationResult.error) {
|
|
142
|
+
throw new InvalidTransactionError(`AddressInitialization Transaction validation failed: ${validationResult.error.message}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
validateBatchTransactionFields(calls) {
|
|
146
|
+
return BatchTransactionSchema.validate({
|
|
147
|
+
calls,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
getPureProxyCall(args) {
|
|
151
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
152
|
+
const unsigned = utils.pureProxy({
|
|
153
|
+
proxyType: args.proxy_type,
|
|
154
|
+
index: args.index,
|
|
155
|
+
delay: args.delay,
|
|
156
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
157
|
+
return unsigned.method;
|
|
158
|
+
}
|
|
159
|
+
getBondCall(args) {
|
|
160
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
161
|
+
const unsigned = methods.staking.bond({
|
|
162
|
+
value: args.value,
|
|
163
|
+
payee: this.getPayee(args.payee),
|
|
164
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
165
|
+
return unsigned.method;
|
|
166
|
+
}
|
|
167
|
+
getUnbondCall(args) {
|
|
168
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
169
|
+
const unsigned = methods.staking.unbond({
|
|
170
|
+
value: args.value,
|
|
171
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
172
|
+
return unsigned.method;
|
|
173
|
+
}
|
|
174
|
+
getPayee(payee) {
|
|
175
|
+
if (isStakeBatchCallPayeeStash(payee)) {
|
|
176
|
+
return 'Stash';
|
|
177
|
+
}
|
|
178
|
+
else if (isStakeBatchCallPayeeController(payee)) {
|
|
179
|
+
return 'Controller';
|
|
180
|
+
}
|
|
181
|
+
else if (isStakeBatchCallPayeeAccount(payee)) {
|
|
182
|
+
return { Account: payee.account };
|
|
183
|
+
}
|
|
184
|
+
else if (isStakeBatchCallPayeeStaked(payee)) {
|
|
185
|
+
return 'Staked';
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
throw new Error(`Invalid payee: ${payee}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
getAddProxyCall(args) {
|
|
192
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
193
|
+
const unsigned = methods.proxy.addProxy({
|
|
194
|
+
delegate: getDelegateAddress(args),
|
|
195
|
+
proxyType: args.proxy_type,
|
|
196
|
+
delay: args.delay,
|
|
197
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
198
|
+
return unsigned.method;
|
|
199
|
+
}
|
|
200
|
+
getBondExtraCall(args) {
|
|
201
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
202
|
+
const unsigned = methods.staking.bondExtra({
|
|
203
|
+
maxAdditional: args.max_additional,
|
|
204
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
205
|
+
return unsigned.method;
|
|
206
|
+
}
|
|
207
|
+
getRemoveProxyCall(args) {
|
|
208
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
209
|
+
const unsigned = methods.proxy.removeProxy({
|
|
210
|
+
delegate: getDelegateAddress(args),
|
|
211
|
+
proxyType: args.proxy_type,
|
|
212
|
+
delay: args.delay,
|
|
213
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
214
|
+
return unsigned.method;
|
|
215
|
+
}
|
|
216
|
+
getChillCall() {
|
|
217
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
218
|
+
const unsigned = methods.staking.chill({}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
219
|
+
return unsigned.method;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hUcmFuc2FjdGlvbkJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2JhdGNoVHJhbnNhY3Rpb25CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsWUFBWSxHQUNiLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXhELE9BQU8sRUFLTCxXQUFXLEVBQ1gsWUFBWSxHQU1iLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsMkJBQTJCLEVBQzNCLDBCQUEwQixFQUMxQiwrQkFBK0IsRUFDL0IsNEJBQTRCLEdBQzdCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEtBQUssTUFBTSxTQUFTLENBQUM7QUFFNUIsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGtCQUFrQjtJQUs3RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUhiLFlBQU8sR0FBRyxLQUFLLENBQUM7SUFJeEIsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGdCQUFnQjtRQUN4QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLHFCQUFxQjtRQUM3QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUM3QjtnQkFDRSxL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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQnVpbGRUcmFuc2FjdGlvbkVycm9yLFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgTm90SW1wbGVtZW50ZWRFcnJvcixcbiAgVHJhbnNhY3Rpb25UeXBlLFxuICB0b1VpbnQ4QXJyYXksXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IERlY29kZWRTaWduZWRUeCwgRGVjb2RlZFNpZ25pbmdQYXlsb2FkLCBVbnNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZSc7XG5pbXBvcnQgeyBtZXRob2RzIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJ2pvaSc7XG5pbXBvcnQge1xuICBBZGRBbm9ueW1vdXNQcm94eUJhdGNoQ2FsbEFyZ3MsXG4gIEFkZFByb3h5QmF0Y2hDYWxsQXJncyxcbiAgQmF0Y2hDYWxsT2JqZWN0LFxuICBCYXRjaEFyZ3MsXG4gIE1ldGhvZE5hbWVzLFxuICBTZWN0aW9uTmFtZXMsXG4gIFN0YWtlQXJnc1BheWVlLFxuICBTdGFrZUJhdGNoQ2FsbEFyZ3MsXG4gIFN0YWtlQmF0Y2hDYWxsUGF5ZWUsXG4gIFVuYm9uZENhbGxBcmdzLFxuICBTdGFrZU1vcmVDYWxsQXJncyxcbn0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQge1xuICBnZXREZWxlZ2F0ZUFkZHJlc3MsXG4gIGlzU3Rha2VCYXRjaENhbGxQYXllZVN0YWtlZCxcbiAgaXNTdGFrZUJhdGNoQ2FsbFBheWVlU3Rhc2gsXG4gIGlzU3Rha2VCYXRjaENhbGxQYXllZUNvbnRyb2xsZXIsXG4gIGlzU3Rha2VCYXRjaENhbGxQYXllZUFjY291bnQsXG59IGZyb20gJy4vaWZhY2VfdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEJhdGNoVHJhbnNhY3Rpb25TY2hlbWEgfSBmcm9tICcuL3R4blNjaGVtYSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBCYXRjaFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfY2FsbHM6IHN0cmluZ1tdO1xuICBwcm90ZWN0ZWQgX3R5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgcHJpdmF0ZSBfYXRvbWljID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBidWlsZFRyYW5zYWN0aW9uKCk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQmF0Y2hUcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgdHJhbnNhY3Rpb24gd2hpY2ggYmF0Y2hlcyB0b2dldGhlciBtdWx0aXBsZSB0cmFuc2FjdGlvbnMuXG4gICAqIFRoZSB0cmFuc2FjdGlvbnMgd2hpY2ggYXJlIGJhdGNoZWQgdG9nZXRoZXIgYXJlIHBhc3NlZCBpbiBhcyBhbiBhcnJheSBvZiBoZXggc3RyaW5nc1xuICAgKiB3aGljaCBhcmUgY29tcG9zZWQgb2YgdGhlIG1ldGhvZCB0byBjYWxsIGFuZCB0aGUgYXJndW1lbnRzIHRvIHBhc3MgaW50byB0aGUgbWV0aG9kLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VW5zaWduZWRUcmFuc2FjdGlvbn1cbiAgICpcbiAgICogQHNlZSBodHRwczovL3BvbGthZG90LmpzLm9yZy9kb2NzL3N1YnN0cmF0ZS9leHRyaW5zaWNzLyNiYXRjaGNhbGxzLXZlY2NhbGxcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEJhdGNoVHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgYmFzZVR4SW5mbyA9IHRoaXMuY3JlYXRlQmFzZVR4SW5mbygpO1xuICAgIGlmICh0aGlzLl9hdG9taWMpIHtcbiAgICAgIHJldHVybiBtZXRob2RzLnV0aWxpdHkuYmF0Y2hBbGwoXG4gICAgICAgIHtcbiAgICAgICAgICBjYWxsczogdGhpcy5fY2FsbHMsXG4gICAgICAgIH0sXG4gICAgICAgIGJhc2VUeEluZm8uYmFzZVR4SW5mbyxcbiAgICAgICAgYmFzZVR4SW5mby5vcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWV0aG9kcy51dGlsaXR5LmJhdGNoKFxuICAgICAgICB7XG4gICAgICAgICAgY2FsbHM6IHRoaXMuX2NhbGxzLFxuICAgICAgICB9LFxuICAgICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICAgIGJhc2VUeEluZm8ub3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQmF0Y2g7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG11bHRpcGxlIHVuc2lnbmVkIHRyYW5zYWN0aW9ucyB0byBiZSBiYXRjaGVkIGFuZCBicm9hZGNhc3QgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtCYXRjaENhbGxbXX0gY2FsbHMgdW5zaWduZWQgdHJhbnNhY3Rpb25zXG4gICAqIEByZXR1cm5zIHtCYXRjaFRyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyBiYXRjaCB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKi9cbiAgY2FsbHMoY2FsbHM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUNhbGxzKGNhbGxzKTtcbiAgICB0aGlzLl9jYWxscyA9IGNhbGxzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRydWUgd2hlbiBhIGJhdGNoZWQgY2FsbCBmYWlscyB0aGUgZW50aXJlIHRyYW5zYWN0aW9ucyBpcyByb2xsZWQgYmFjaywgaWYgZmFsc2Ugbm8gcm9sbCBiYWNrXG4gICAqIGlzIHBlcmZvcm1lZCBhbmQgdGhlIGVmZmVjdHMgb2YgYW55IHN1Y2Nlc3NmdWwgY2FsbCBwcmlvciB0byB0aGUgZXJyb3IgcmVtYWluLlxuICAgKlxuICAgKiBAcGFyYW0gYXRvbWljIHRydWUgaWYgY2FsbHMgbXVzdCBzdWNjZWVkIGF0b21pY2FsbHksIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGF0b21pYyhhdG9taWM6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICB0aGlzLl9hdG9taWMgPSBhdG9taWM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4bjogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4KTogdm9pZCB7XG4gICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgQmF0Y2hBcmdzO1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB0aGlzLnZhbGlkYXRlQmF0Y2hUcmFuc2FjdGlvbkZpZWxkcyh0eE1ldGhvZC5jYWxscyk7XG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBzdXBlci5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGlmICh0aGlzLl9tZXRob2Q/Lm5hbWUgPT09IE1ldGhvZE5hbWVzLkJhdGNoIHx8IHRoaXMuX21ldGhvZD8ubmFtZSA9PT0gTWV0aG9kTmFtZXMuQmF0Y2hBbGwpIHtcbiAgICAgIGlmICh0aGlzLl9tZXRob2Q/Lm5hbWUgPT09IE1ldGhvZE5hbWVzLkJhdGNoQWxsKSB7XG4gICAgICAgIHRoaXMuYXRvbWljKHRydWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgdHhNZXRob2QgPSB0aGlzLl9tZXRob2QuYXJncyBhcyBCYXRjaEFyZ3M7XG4gICAgICBpZiAoIXR4TWV0aG9kLmNhbGxzKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignZmFpbGVkIHRvIGRlY29kZSBjYWxscyBmcm9tIGJhdGNoIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBjYWxsc1RvQmF0Y2g6IHN0cmluZ1tdID0gW107XG4gICAgICB0eE1ldGhvZC5jYWxscy5mb3JFYWNoKChjYWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IChjYWxsIGFzIEJhdGNoQ2FsbE9iamVjdCkuY2FsbEluZGV4O1xuICAgICAgICBjb25zdCBkZWNvZGVkTWV0aG9kID0gdG9VaW50OEFycmF5KHV0aWxzLnN0cmlwSGV4UHJlZml4KG1ldGhvZCkpO1xuICAgICAgICBjb25zdCBkZWNvZGVkQ2FsbCA9IHRoaXMuX3JlZ2lzdHJ5LmZpbmRNZXRhQ2FsbChkZWNvZGVkTWV0aG9kKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRlY29kZWRDYWxsLnNlY3Rpb24gPT09IFNlY3Rpb25OYW1lcy5Qcm94eSAmJlxuICAgICAgICAgIChkZWNvZGVkQ2FsbC5tZXRob2QgPT09IE1ldGhvZE5hbWVzLkFub255bW91cyB8fCBkZWNvZGVkQ2FsbC5tZXRob2QgPT09IE1ldGhvZE5hbWVzLlB1cmVQcm94eSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FsbHNUb0JhdGNoLnB1c2godGhpcy5nZXRQdXJlUHJveHlDYWxsKGNhbGwuYXJncyBhcyBBZGRBbm9ueW1vdXNQcm94eUJhdGNoQ2FsbEFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIGlmIChkZWNvZGVkQ2FsbC5zZWN0aW9uID09PSBTZWN0aW9uTmFtZXMuUHJveHkgJiYgZGVjb2RlZENhbGwubWV0aG9kID09PSBNZXRob2ROYW1lcy5BZGRQcm94eSkge1xuICAgICAgICAgIGNhbGxzVG9CYXRjaC5wdXNoKHRoaXMuZ2V0QWRkUHJveHlDYWxsKGNhbGwuYXJncyBhcyBBZGRQcm94eUJhdGNoQ2FsbEFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIGlmIChkZWNvZGVkQ2FsbC5zZWN0aW9uID09PSBTZWN0aW9uTmFtZXMuU3Rha2luZyAmJiBkZWNvZGVkQ2FsbC5tZXRob2QgPT09IE1ldGhvZE5hbWVzLkJvbmRFeHRyYSkge1xuICAgICAgICAgIGNhbGxzVG9CYXRjaC5wdXNoKHRoaXMuZ2V0Qm9uZEV4dHJhQ2FsbChjYWxsLmFyZ3MgYXMgU3Rha2VNb3JlQ2FsbEFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIGlmIChkZWNvZGVkQ2FsbC5zZWN0aW9uID09PSBTZWN0aW9uTmFtZXMuU3Rha2luZyAmJiBkZWNvZGVkQ2FsbC5tZXRob2QgPT09IE1ldGhvZE5hbWVzLkJvbmQpIHtcbiAgICAgICAgICBjYWxsc1RvQmF0Y2gucHVzaCh0aGlzLmdldEJvbmRDYWxsKGNhbGwuYXJncyBhcyBTdGFrZUJhdGNoQ2FsbEFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIGlmIChkZWNvZGVkQ2FsbC5zZWN0aW9uID09PSBTZWN0aW9uTmFtZXMuU3Rha2luZyAmJiBkZWNvZGVkQ2FsbC5tZXRob2QgPT09IE1ldGhvZE5hbWVzLlVuYm9uZCkge1xuICAgICAgICAgIGNhbGxzVG9CYXRjaC5wdXNoKHRoaXMuZ2V0VW5ib25kQ2FsbChjYWxsLmFyZ3MgYXMgVW5ib25kQ2FsbEFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIGlmIChkZWNvZGVkQ2FsbC5zZWN0aW9uID09PSBTZWN0aW9uTmFtZXMuU3Rha2luZyAmJiBkZWNvZGVkQ2FsbC5tZXRob2QgPT09IE1ldGhvZE5hbWVzLkNoaWxsKSB7XG4gICAgICAgICAgY2FsbHNUb0JhdGNoLnB1c2godGhpcy5nZXRDaGlsbENhbGwoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVjb2RlZENhbGwuc2VjdGlvbiA9PT0gU2VjdGlvbk5hbWVzLlByb3h5ICYmIGRlY29kZWRDYWxsLm1ldGhvZCA9PT0gTWV0aG9kTmFtZXMuUmVtb3ZlUHJveHkpIHtcbiAgICAgICAgICBjYWxsc1RvQmF0Y2gucHVzaCh0aGlzLmdldFJlbW92ZVByb3h5Q2FsbChjYWxsLmFyZ3MgYXMgQWRkUHJveHlCYXRjaENhbGxBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoYGJhdGNoaW5nIG9mIHRyYW5zYWN0aW9uIHdpdGggaW5kZXggJHttZXRob2R9IHVuc3VwcG9ydGVkYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jYWxscyhjYWxsc1RvQmF0Y2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIFRyYW5zYWN0aW9uIFR5cGU6ICR7dGhpcy5fbWV0aG9kPy5uYW1lfS4gRXhwZWN0ZWQgJHtNZXRob2ROYW1lcy5CYXRjaH1gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbihfOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24oXyk7XG4gICAgdGhpcy52YWxpZGF0ZUZpZWxkcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGxpc3Qgb2YgdW5zaWduZWQgdHJhbnNhY3Rpb25zIGFkZGVkIHRvIGJhdGNoXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGNhbGxzXG4gICAqXG4gICAqL1xuICB2YWxpZGF0ZUNhbGxzKGNhbGxzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNhbGxzLmZvckVhY2goKGNhbGwpID0+IHtcbiAgICAgIGlmIChjYWxsLnNsaWNlKDAsIDIpICE9PSAnMHgnKSB7XG4gICAgICAgIC8vIGV4YW1wbGU6ICcweDE2MDQwMDAwMDAwMDAwMDAwMCdcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignY2FsbCBpbiBzdHJpbmcgZm9ybWF0IG11c3QgYmUgaGV4IGZvcm1hdCBvZiBhIG1ldGhvZCBhbmQgaXRzIGFyZ3VtZW50cycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZpZWxkcygpOiB2b2lkIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdGhpcy52YWxpZGF0ZUJhdGNoVHJhbnNhY3Rpb25GaWVsZHModGhpcy5fY2FsbHMpO1xuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBBZGRyZXNzSW5pdGlhbGl6YXRpb24gVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUJhdGNoVHJhbnNhY3Rpb25GaWVsZHMoY2FsbHM6IChzdHJpbmcgfCBCYXRjaENhbGxPYmplY3QpW10pOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gQmF0Y2hUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh7XG4gICAgICBjYWxscyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHVyZVByb3h5Q2FsbChhcmdzOiBBZGRBbm9ueW1vdXNQcm94eUJhdGNoQ2FsbEFyZ3MpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VUeEluZm8gPSB0aGlzLmNyZWF0ZUJhc2VUeEluZm8oKTtcbiAgICBjb25zdCB1bnNpZ25lZCA9IHV0aWxzLnB1cmVQcm94eShcbiAgICAgIHtcbiAgICAgICAgcHJveHlUeXBlOiBhcmdzLnByb3h5X3R5cGUsXG4gICAgICAgIGluZGV4OiBhcmdzLmluZGV4LFxuICAgICAgICBkZWxheTogYXJncy5kZWxheSxcbiAgICAgIH0sXG4gICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICBiYXNlVHhJbmZvLm9wdGlvbnNcbiAgICApO1xuICAgIHJldHVybiB1bnNpZ25lZC5tZXRob2Q7XG4gIH1cblxuICBwcml2YXRlIGdldEJvbmRDYWxsKGFyZ3M6IFN0YWtlQmF0Y2hDYWxsQXJncyk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZVR4SW5mbyA9IHRoaXMuY3JlYXRlQmFzZVR4SW5mbygpO1xuICAgIGNvbnN0IHVuc2lnbmVkID0gbWV0aG9kcy5zdGFraW5nLmJvbmQoXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICBwYXllZTogdGhpcy5nZXRQYXllZShhcmdzLnBheWVlKSxcbiAgICAgIH0sXG4gICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICBiYXNlVHhJbmZvLm9wdGlvbnNcbiAgICApO1xuICAgIHJldHVybiB1bnNpZ25lZC5tZXRob2Q7XG4gIH1cblxuICBwcml2YXRlIGdldFVuYm9uZENhbGwoYXJnczogVW5ib25kQ2FsbEFyZ3MpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VUeEluZm8gPSB0aGlzLmNyZWF0ZUJhc2VUeEluZm8oKTtcbiAgICBjb25zdCB1bnNpZ25lZCA9IG1ldGhvZHMuc3Rha2luZy51bmJvbmQoXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgfSxcbiAgICAgIGJhc2VUeEluZm8uYmFzZVR4SW5mbyxcbiAgICAgIGJhc2VUeEluZm8ub3B0aW9uc1xuICAgICk7XG4gICAgcmV0dXJuIHVuc2lnbmVkLm1ldGhvZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGF5ZWUocGF5ZWU6IFN0YWtlQmF0Y2hDYWxsUGF5ZWUpOiBTdGFrZUFyZ3NQYXllZSB7XG4gICAgaWYgKGlzU3Rha2VCYXRjaENhbGxQYXllZVN0YXNoKHBheWVlKSkge1xuICAgICAgcmV0dXJuICdTdGFzaCc7XG4gICAgfSBlbHNlIGlmIChpc1N0YWtlQmF0Y2hDYWxsUGF5ZWVDb250cm9sbGVyKHBheWVlKSkge1xuICAgICAgcmV0dXJuICdDb250cm9sbGVyJztcbiAgICB9IGVsc2UgaWYgKGlzU3Rha2VCYXRjaENhbGxQYXllZUFjY291bnQocGF5ZWUpKSB7XG4gICAgICByZXR1cm4geyBBY2NvdW50OiBwYXllZS5hY2NvdW50IH07XG4gICAgfSBlbHNlIGlmIChpc1N0YWtlQmF0Y2hDYWxsUGF5ZWVTdGFrZWQocGF5ZWUpKSB7XG4gICAgICByZXR1cm4gJ1N0YWtlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYXllZTogJHtwYXllZX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFkZFByb3h5Q2FsbChhcmdzOiBBZGRQcm94eUJhdGNoQ2FsbEFyZ3MpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VUeEluZm8gPSB0aGlzLmNyZWF0ZUJhc2VUeEluZm8oKTtcbiAgICBjb25zdCB1bnNpZ25lZCA9IG1ldGhvZHMucHJveHkuYWRkUHJveHkoXG4gICAgICB7XG4gICAgICAgIGRlbGVnYXRlOiBnZXREZWxlZ2F0ZUFkZHJlc3MoYXJncyksXG4gICAgICAgIHByb3h5VHlwZTogYXJncy5wcm94eV90eXBlLFxuICAgICAgICBkZWxheTogYXJncy5kZWxheSxcbiAgICAgIH0sXG4gICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICBiYXNlVHhJbmZvLm9wdGlvbnNcbiAgICApO1xuICAgIHJldHVybiB1bnNpZ25lZC5tZXRob2Q7XG4gIH1cblxuICBwcml2YXRlIGdldEJvbmRFeHRyYUNhbGwoYXJnczogU3Rha2VNb3JlQ2FsbEFyZ3MpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VUeEluZm8gPSB0aGlzLmNyZWF0ZUJhc2VUeEluZm8oKTtcbiAgICBjb25zdCB1bnNpZ25lZCA9IG1ldGhvZHMuc3Rha2luZy5ib25kRXh0cmEoXG4gICAgICB7XG4gICAgICAgIG1heEFkZGl0aW9uYWw6IGFyZ3MubWF4X2FkZGl0aW9uYWwsXG4gICAgICB9LFxuICAgICAgYmFzZVR4SW5mby5iYXNlVHhJbmZvLFxuICAgICAgYmFzZVR4SW5mby5vcHRpb25zXG4gICAgKTtcbiAgICByZXR1cm4gdW5zaWduZWQubWV0aG9kO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW1vdmVQcm94eUNhbGwoYXJnczogQWRkUHJveHlCYXRjaENhbGxBcmdzKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVHhJbmZvID0gdGhpcy5jcmVhdGVCYXNlVHhJbmZvKCk7XG4gICAgY29uc3QgdW5zaWduZWQgPSBtZXRob2RzLnByb3h5LnJlbW92ZVByb3h5KFxuICAgICAge1xuICAgICAgICBkZWxlZ2F0ZTogZ2V0RGVsZWdhdGVBZGRyZXNzKGFyZ3MpLFxuICAgICAgICBwcm94eVR5cGU6IGFyZ3MucHJveHlfdHlwZSxcbiAgICAgICAgZGVsYXk6IGFyZ3MuZGVsYXksXG4gICAgICB9LFxuICAgICAgYmFzZVR4SW5mby5iYXNlVHhJbmZvLFxuICAgICAgYmFzZVR4SW5mby5vcHRpb25zXG4gICAgKTtcbiAgICByZXR1cm4gdW5zaWduZWQubWV0aG9kO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDaGlsbENhbGwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVHhJbmZvID0gdGhpcy5jcmVhdGVCYXNlVHhJbmZvKCk7XG4gICAgY29uc3QgdW5zaWduZWQgPSBtZXRob2RzLnN0YWtpbmcuY2hpbGwoe30sIGJhc2VUeEluZm8uYmFzZVR4SW5mbywgYmFzZVR4SW5mby5vcHRpb25zKTtcbiAgICByZXR1cm4gdW5zaWduZWQubWV0aG9kO1xuICB9XG59XG4iXX0=
|