@bitgo-beta/sdk-coin-tao 1.0.1-alpha.26 → 1.0.1-alpha.28
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/lib/stakingBuilder.d.ts +63 -0
- package/dist/src/lib/stakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/stakingBuilder.js +133 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +4 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +15 -1
- package/dist/src/lib/unstakeBuilder.d.ts +66 -0
- package/dist/src/lib/unstakeBuilder.d.ts.map +1 -0
- package/dist/src/lib/unstakeBuilder.js +136 -0
- package/dist/src/resources/testnet.js +2 -2
- package/package.json +8 -7
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
+
import { UnsignedTransaction, DecodedSignedTx, DecodedSigningPayload } from '@substrate/txwrapper-core';
|
|
3
|
+
import { TransactionType, BaseAddress } from '@bitgo-beta/sdk-core';
|
|
4
|
+
import { Transaction, TransactionBuilder } from '@bitgo-beta/abstract-substrate';
|
|
5
|
+
export declare class StakingBuilder extends TransactionBuilder {
|
|
6
|
+
protected _amount: number;
|
|
7
|
+
protected _hotkey: string;
|
|
8
|
+
protected _netuid: number;
|
|
9
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
10
|
+
/**
|
|
11
|
+
* Construct a transaction to stake
|
|
12
|
+
* @returns {UnsignedTransaction} an unsigned stake TAO transaction
|
|
13
|
+
*
|
|
14
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#staking
|
|
15
|
+
*/
|
|
16
|
+
protected buildTransaction(): UnsignedTransaction;
|
|
17
|
+
/** @inheritdoc */
|
|
18
|
+
protected get transactionType(): TransactionType;
|
|
19
|
+
/**
|
|
20
|
+
* Set the amount to stake
|
|
21
|
+
* @param {number} amount to stake
|
|
22
|
+
* @returns {StakingBuilder} This staking builder.
|
|
23
|
+
*
|
|
24
|
+
* @see https://wiki.polkadot.network/docs/learn-nominator#required-minimum-stake
|
|
25
|
+
*/
|
|
26
|
+
amount(amount: number): this;
|
|
27
|
+
/**
|
|
28
|
+
* Set the validator hot key address
|
|
29
|
+
* @param {string} hotkey address of validator
|
|
30
|
+
* @returns {StakingBuilder} This staking builder.
|
|
31
|
+
*
|
|
32
|
+
* @see https://wiki.polkadot.network/docs/learn-staking#accounts
|
|
33
|
+
*/
|
|
34
|
+
hotkey({ address }: BaseAddress): this;
|
|
35
|
+
/**
|
|
36
|
+
* Set netuid of the subnet (root network is 0)
|
|
37
|
+
* @param {number} netuid of subnet
|
|
38
|
+
* @returns {StakingBuilder} This staking builder.
|
|
39
|
+
*/
|
|
40
|
+
netuid(netuid: number): this;
|
|
41
|
+
/** @inheritdoc */
|
|
42
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
43
|
+
/** @inheritdoc */
|
|
44
|
+
validateTransaction(_: Transaction): void;
|
|
45
|
+
/**
|
|
46
|
+
* Helper method to validate whether stake params have the correct type and format
|
|
47
|
+
* @param {number} amountStaked amount to stake
|
|
48
|
+
* @param {string} hotkey hotkey address of the validator
|
|
49
|
+
* @param {number} netuid netuid of the subnet
|
|
50
|
+
*/
|
|
51
|
+
private validateFields;
|
|
52
|
+
/** @inheritdoc */
|
|
53
|
+
validateDecodedTransaction(decodedTxn: DecodedSigningPayload | DecodedSignedTx, rawTransaction: string): void;
|
|
54
|
+
/**
|
|
55
|
+
* Construct a transaction to stake
|
|
56
|
+
*
|
|
57
|
+
* @param {Interface.AddStakeArgs} Stake arguments to be passed to the addStake method
|
|
58
|
+
* @param {Interface.CreateBaseTxInfo} Base txn info required to construct the addStake txn
|
|
59
|
+
* @returns {UnsignedTransaction} an unsigned stake TAO transaction
|
|
60
|
+
*/
|
|
61
|
+
private addStake;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=stakingBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stakingBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/stakingBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAgB,mBAAmB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEtH,OAAO,EAA2B,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAqB,MAAM,gCAAgC,CAAC;AAEpG,qBAAa,cAAe,SAAQ,kBAAkB;IACpD,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;;OAKG;IACH,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAYjD,kBAAkB;IAClB,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM5B;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,GAAG,IAAI;IAMtC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAajE,kBAAkB;IAClB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAKzC;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IActB,kBAAkB;IAClB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAa7G;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;CAajB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.StakingBuilder = void 0;
|
|
7
|
+
const txwrapper_core_1 = require("@substrate/txwrapper-core");
|
|
8
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
|
+
const abstract_substrate_1 = require("@bitgo-beta/abstract-substrate");
|
|
11
|
+
class StakingBuilder extends abstract_substrate_1.TransactionBuilder {
|
|
12
|
+
constructor(_coinConfig) {
|
|
13
|
+
super(_coinConfig);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Construct a transaction to stake
|
|
17
|
+
* @returns {UnsignedTransaction} an unsigned stake TAO transaction
|
|
18
|
+
*
|
|
19
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#staking
|
|
20
|
+
*/
|
|
21
|
+
buildTransaction() {
|
|
22
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
23
|
+
return this.addStake({
|
|
24
|
+
amountStaked: this._amount,
|
|
25
|
+
hotkey: this._hotkey,
|
|
26
|
+
netuid: this._netuid,
|
|
27
|
+
}, baseTxInfo);
|
|
28
|
+
}
|
|
29
|
+
/** @inheritdoc */
|
|
30
|
+
get transactionType() {
|
|
31
|
+
return sdk_core_1.TransactionType.StakingActivate;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Set the amount to stake
|
|
35
|
+
* @param {number} amount to stake
|
|
36
|
+
* @returns {StakingBuilder} This staking builder.
|
|
37
|
+
*
|
|
38
|
+
* @see https://wiki.polkadot.network/docs/learn-nominator#required-minimum-stake
|
|
39
|
+
*/
|
|
40
|
+
amount(amount) {
|
|
41
|
+
this.validateValue(new bignumber_js_1.default(amount));
|
|
42
|
+
this._amount = amount;
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Set the validator hot key address
|
|
47
|
+
* @param {string} hotkey address of validator
|
|
48
|
+
* @returns {StakingBuilder} This staking builder.
|
|
49
|
+
*
|
|
50
|
+
* @see https://wiki.polkadot.network/docs/learn-staking#accounts
|
|
51
|
+
*/
|
|
52
|
+
hotkey({ address }) {
|
|
53
|
+
this.validateAddress({ address });
|
|
54
|
+
this._hotkey = address;
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Set netuid of the subnet (root network is 0)
|
|
59
|
+
* @param {number} netuid of subnet
|
|
60
|
+
* @returns {StakingBuilder} This staking builder.
|
|
61
|
+
*/
|
|
62
|
+
netuid(netuid) {
|
|
63
|
+
this._netuid = netuid;
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
/** @inheritdoc */
|
|
67
|
+
fromImplementation(rawTransaction) {
|
|
68
|
+
const tx = super.fromImplementation(rawTransaction);
|
|
69
|
+
if (this._method?.name === abstract_substrate_1.Interface.MethodNames.AddStake) {
|
|
70
|
+
const txMethod = this._method.args;
|
|
71
|
+
this.amount(txMethod.amountStaked);
|
|
72
|
+
this.hotkey({ address: txMethod.hotkey });
|
|
73
|
+
this.netuid(txMethod.netuid);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid Transaction Type: ${this._method?.name}. Expected addStake`);
|
|
77
|
+
}
|
|
78
|
+
return tx;
|
|
79
|
+
}
|
|
80
|
+
/** @inheritdoc */
|
|
81
|
+
validateTransaction(_) {
|
|
82
|
+
super.validateTransaction(_);
|
|
83
|
+
this.validateFields(this._amount, this._hotkey, this._netuid);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Helper method to validate whether stake params have the correct type and format
|
|
87
|
+
* @param {number} amountStaked amount to stake
|
|
88
|
+
* @param {string} hotkey hotkey address of the validator
|
|
89
|
+
* @param {number} netuid netuid of the subnet
|
|
90
|
+
*/
|
|
91
|
+
validateFields(amountStaked, hotkey, netuid) {
|
|
92
|
+
const validationResult = abstract_substrate_1.Schema.StakeTransactionSchema.validate({
|
|
93
|
+
amountStaked,
|
|
94
|
+
hotkey,
|
|
95
|
+
netuid,
|
|
96
|
+
});
|
|
97
|
+
if (validationResult.error) {
|
|
98
|
+
throw new sdk_core_1.InvalidTransactionError(`Stake Builder Transaction validation failed: ${validationResult.error.message}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** @inheritdoc */
|
|
102
|
+
validateDecodedTransaction(decodedTxn, rawTransaction) {
|
|
103
|
+
if (decodedTxn.method?.name === abstract_substrate_1.Interface.MethodNames.AddStake) {
|
|
104
|
+
const txMethod = decodedTxn.method.args;
|
|
105
|
+
const amountStaked = txMethod.amountStaked;
|
|
106
|
+
const hotkey = txMethod.hotkey;
|
|
107
|
+
const netuid = txMethod.netuid;
|
|
108
|
+
const validationResult = abstract_substrate_1.Schema.StakeTransactionSchema.validate({ amountStaked, hotkey, netuid });
|
|
109
|
+
if (validationResult.error) {
|
|
110
|
+
throw new sdk_core_1.InvalidTransactionError(`Transfer Transaction validation failed: ${validationResult.error.message}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Construct a transaction to stake
|
|
116
|
+
*
|
|
117
|
+
* @param {Interface.AddStakeArgs} Stake arguments to be passed to the addStake method
|
|
118
|
+
* @param {Interface.CreateBaseTxInfo} Base txn info required to construct the addStake txn
|
|
119
|
+
* @returns {UnsignedTransaction} an unsigned stake TAO transaction
|
|
120
|
+
*/
|
|
121
|
+
addStake(args, info) {
|
|
122
|
+
return (0, txwrapper_core_1.defineMethod)({
|
|
123
|
+
method: {
|
|
124
|
+
args,
|
|
125
|
+
name: 'addStake',
|
|
126
|
+
pallet: 'subtensorModule',
|
|
127
|
+
},
|
|
128
|
+
...info.baseTxInfo,
|
|
129
|
+
}, info.options);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.StakingBuilder = StakingBuilder;
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3N0YWtpbmdCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDhEQUFzSDtBQUN0SCxnRUFBcUM7QUFDckMsbURBQTZGO0FBQzdGLHVFQUFvRztBQUVwRyxNQUFhLGNBQWUsU0FBUSx1Q0FBa0I7SUFLcEQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sZ0JBQWdCO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FDbEI7WUFDRSxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztTQUNyQixFQUNELFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLHNCQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQWU7UUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUM7SUFDZCxD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aUI7YUFDMUI7WUFDRCxHQUFHLElBQUksQ0FBQyxVQUFVO1NBQ25CLEVBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBOUlELHdDQThJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IGRlZmluZU1ldGhvZCwgVW5zaWduZWRUcmFuc2FjdGlvbiwgRGVjb2RlZFNpZ25lZFR4LCBEZWNvZGVkU2lnbmluZ1BheWxvYWQgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUsIEJhc2VBZGRyZXNzIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uQnVpbGRlciwgSW50ZXJmYWNlLCBTY2hlbWEgfSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1zdWJzdHJhdGUnO1xuXG5leHBvcnQgY2xhc3MgU3Rha2luZ0J1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX2Ftb3VudDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2hvdGtleTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX25ldHVpZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSB0cmFuc2FjdGlvbiB0byBzdGFrZVxuICAgKiBAcmV0dXJucyB7VW5zaWduZWRUcmFuc2FjdGlvbn0gYW4gdW5zaWduZWQgc3Rha2UgVEFPIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9wb2xrYWRvdC5qcy5vcmcvZG9jcy9zdWJzdHJhdGUvZXh0cmluc2ljcy8jc3Rha2luZ1xuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkVHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgYmFzZVR4SW5mbyA9IHRoaXMuY3JlYXRlQmFzZVR4SW5mbygpO1xuICAgIHJldHVybiB0aGlzLmFkZFN0YWtlKFxuICAgICAge1xuICAgICAgICBhbW91bnRTdGFrZWQ6IHRoaXMuX2Ftb3VudCxcbiAgICAgICAgaG90a2V5OiB0aGlzLl9ob3RrZXksXG4gICAgICAgIG5ldHVpZDogdGhpcy5fbmV0dWlkLFxuICAgICAgfSxcbiAgICAgIGJhc2VUeEluZm9cbiAgICApO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBhbW91bnQgdG8gc3Rha2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCB0byBzdGFrZVxuICAgKiBAcmV0dXJucyB7U3Rha2luZ0J1aWxkZXJ9IFRoaXMgc3Rha2luZyBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd2lraS5wb2xrYWRvdC5uZXR3b3JrL2RvY3MvbGVhcm4tbm9taW5hdG9yI3JlcXVpcmVkLW1pbmltdW0tc3Rha2VcbiAgICovXG4gIGFtb3VudChhbW91bnQ6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGFtb3VudCkpO1xuICAgIHRoaXMuX2Ftb3VudCA9IGFtb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbGlkYXRvciBob3Qga2V5IGFkZHJlc3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhvdGtleSBhZGRyZXNzIG9mIHZhbGlkYXRvclxuICAgKiBAcmV0dXJucyB7U3Rha2luZ0J1aWxkZXJ9IFRoaXMgc3Rha2luZyBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd2lraS5wb2xrYWRvdC5uZXR3b3JrL2RvY3MvbGVhcm4tc3Rha2luZyNhY2NvdW50c1xuICAgKi9cbiAgaG90a2V5KHsgYWRkcmVzcyB9OiBCYXNlQWRkcmVzcyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB0aGlzLl9ob3RrZXkgPSBhZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBuZXR1aWQgb2YgdGhlIHN1Ym5ldCAocm9vdCBuZXR3b3JrIGlzIDApXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXR1aWQgb2Ygc3VibmV0XG4gICAqIEByZXR1cm5zIHtTdGFraW5nQnVpbGRlcn0gVGhpcyBzdGFraW5nIGJ1aWxkZXIuXG4gICAqL1xuICBuZXR1aWQobmV0dWlkOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLl9uZXR1aWQgPSBuZXR1aWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gc3VwZXIuZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICBpZiAodGhpcy5fbWV0aG9kPy5uYW1lID09PSBJbnRlcmZhY2UuTWV0aG9kTmFtZXMuQWRkU3Rha2UpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gdGhpcy5fbWV0aG9kLmFyZ3MgYXMgSW50ZXJmYWNlLkFkZFN0YWtlQXJncztcbiAgICAgIHRoaXMuYW1vdW50KHR4TWV0aG9kLmFtb3VudFN0YWtlZCk7XG4gICAgICB0aGlzLmhvdGtleSh7IGFkZHJlc3M6IHR4TWV0aG9kLmhvdGtleSB9KTtcbiAgICAgIHRoaXMubmV0dWlkKHR4TWV0aG9kLm5ldHVpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBUcmFuc2FjdGlvbiBUeXBlOiAke3RoaXMuX21ldGhvZD8ubmFtZX0uIEV4cGVjdGVkIGFkZFN0YWtlYCk7XG4gICAgfVxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKF86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIudmFsaWRhdGVUcmFuc2FjdGlvbihfKTtcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRzKHRoaXMuX2Ftb3VudCwgdGhpcy5faG90a2V5LCB0aGlzLl9uZXR1aWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gdmFsaWRhdGUgd2hldGhlciBzdGFrZSBwYXJhbXMgaGF2ZSB0aGUgY29ycmVjdCB0eXBlIGFuZCBmb3JtYXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudFN0YWtlZCBhbW91bnQgdG8gc3Rha2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhvdGtleSBob3RrZXkgYWRkcmVzcyBvZiB0aGUgdmFsaWRhdG9yXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXR1aWQgbmV0dWlkIG9mIHRoZSBzdWJuZXRcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVGaWVsZHMoYW1vdW50U3Rha2VkOiBudW1iZXIsIGhvdGtleTogc3RyaW5nLCBuZXR1aWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBTY2hlbWEuU3Rha2VUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh7XG4gICAgICBhbW91bnRTdGFrZWQsXG4gICAgICBob3RrZXksXG4gICAgICBuZXR1aWQsXG4gICAgfSk7XG5cbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgU3Rha2UgQnVpbGRlciBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4bjogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4LCByYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lID09PSBJbnRlcmZhY2UuTWV0aG9kTmFtZXMuQWRkU3Rha2UpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4bi5tZXRob2QuYXJncyBhcyB1bmtub3duIGFzIEludGVyZmFjZS5BZGRTdGFrZUFyZ3M7XG4gICAgICBjb25zdCBhbW91bnRTdGFrZWQgPSB0eE1ldGhvZC5hbW91bnRTdGFrZWQ7XG4gICAgICBjb25zdCBob3RrZXkgPSB0eE1ldGhvZC5ob3RrZXk7XG4gICAgICBjb25zdCBuZXR1aWQgPSB0eE1ldGhvZC5uZXR1aWQ7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gU2NoZW1hLlN0YWtlVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGUoeyBhbW91bnRTdGFrZWQsIGhvdGtleSwgbmV0dWlkIH0pO1xuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBUcmFuc2ZlciBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIHRyYW5zYWN0aW9uIHRvIHN0YWtlXG4gICAqXG4gICAqIEBwYXJhbSB7SW50ZXJmYWNlLkFkZFN0YWtlQXJnc30gU3Rha2UgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgYWRkU3Rha2UgbWV0aG9kXG4gICAqIEBwYXJhbSB7SW50ZXJmYWNlLkNyZWF0ZUJhc2VUeEluZm99IEJhc2UgdHhuIGluZm8gcmVxdWlyZWQgdG8gY29uc3RydWN0IHRoZSBhZGRTdGFrZSB0eG5cbiAgICogQHJldHVybnMge1Vuc2lnbmVkVHJhbnNhY3Rpb259IGFuIHVuc2lnbmVkIHN0YWtlIFRBTyB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhZGRTdGFrZShhcmdzOiBJbnRlcmZhY2UuQWRkU3Rha2VBcmdzLCBpbmZvOiBJbnRlcmZhY2UuQ3JlYXRlQmFzZVR4SW5mbyk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiBkZWZpbmVNZXRob2QoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDoge1xuICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgbmFtZTogJ2FkZFN0YWtlJyxcbiAgICAgICAgICBwYWxsZXQ6ICdzdWJ0ZW5zb3JNb2R1bGUnLFxuICAgICAgICB9LFxuICAgICAgICAuLi5pbmZvLmJhc2VUeEluZm8sXG4gICAgICB9LFxuICAgICAgaW5mby5vcHRpb25zXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -2,10 +2,14 @@ import { BaseTransactionBuilderFactory } from '@bitgo-beta/sdk-core';
|
|
|
2
2
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
3
|
import { TransactionBuilder, Interface } from './';
|
|
4
4
|
import { TransferBuilder } from './transferBuilder';
|
|
5
|
+
import { StakingBuilder } from './stakingBuilder';
|
|
6
|
+
import { UnstakeBuilder } from './unstakeBuilder';
|
|
5
7
|
export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
|
|
6
8
|
protected _material: Interface.Material;
|
|
7
9
|
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
8
10
|
getTransferBuilder(): TransferBuilder;
|
|
11
|
+
getStakingBuilder(): StakingBuilder;
|
|
12
|
+
getUnstakingBuilder(): UnstakeBuilder;
|
|
9
13
|
getWalletInitializationBuilder(): void;
|
|
10
14
|
from(rawTxn: string): TransactionBuilder;
|
|
11
15
|
material(material: Interface.Material): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAqC,MAAM,sBAAsB,CAAC;AACxG,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAqB,kBAAkB,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAqC,MAAM,sBAAsB,CAAC;AACxG,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAqB,kBAAkB,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,qBAAa,yBAA0B,SAAQ,6BAA6B;IAC1E,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC;gBAE5B,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,kBAAkB,IAAI,eAAe;IAIrC,iBAAiB,IAAI,cAAc;IAInC,mBAAmB,IAAI,cAAc;IAIrC,8BAA8B,IAAI,IAAI;IAItC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAMxC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,GAAG,IAAI;IAK5C,OAAO,CAAC,UAAU;CAkBnB"}
|
|
@@ -9,6 +9,8 @@ const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
|
|
|
9
9
|
const _1 = require("./");
|
|
10
10
|
const transferBuilder_1 = require("./transferBuilder");
|
|
11
11
|
const utils_1 = __importDefault(require("./utils"));
|
|
12
|
+
const stakingBuilder_1 = require("./stakingBuilder");
|
|
13
|
+
const unstakeBuilder_1 = require("./unstakeBuilder");
|
|
12
14
|
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
13
15
|
constructor(_coinConfig) {
|
|
14
16
|
super(_coinConfig);
|
|
@@ -17,6 +19,12 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
17
19
|
getTransferBuilder() {
|
|
18
20
|
return new transferBuilder_1.TransferBuilder(this._coinConfig).material(this._material);
|
|
19
21
|
}
|
|
22
|
+
getStakingBuilder() {
|
|
23
|
+
return new stakingBuilder_1.StakingBuilder(this._coinConfig).material(this._material);
|
|
24
|
+
}
|
|
25
|
+
getUnstakingBuilder() {
|
|
26
|
+
return new unstakeBuilder_1.UnstakeBuilder(this._coinConfig).material(this._material);
|
|
27
|
+
}
|
|
20
28
|
getWalletInitializationBuilder() {
|
|
21
29
|
throw new sdk_core_1.NotImplementedError(`walletInitialization for ${this._coinConfig.name} not implemented`);
|
|
22
30
|
}
|
|
@@ -39,10 +47,16 @@ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory
|
|
|
39
47
|
if (methodName === _1.Interface.MethodNames.TransferKeepAlive || methodName === _1.Interface.MethodNames.TransferAll) {
|
|
40
48
|
return this.getTransferBuilder();
|
|
41
49
|
}
|
|
50
|
+
else if (methodName === _1.Interface.MethodNames.AddStake) {
|
|
51
|
+
return this.getStakingBuilder();
|
|
52
|
+
}
|
|
53
|
+
else if (methodName === _1.Interface.MethodNames.RemoveStake) {
|
|
54
|
+
return this.getUnstakingBuilder();
|
|
55
|
+
}
|
|
42
56
|
else {
|
|
43
57
|
throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
|
|
44
58
|
}
|
|
45
59
|
}
|
|
46
60
|
}
|
|
47
61
|
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBd0c7QUFFeEcsc0VBQXVEO0FBQ3ZELHlCQUFzRTtBQUN0RSx1REFBb0Q7QUFDcEQsb0RBQTRCO0FBQzVCLHFEQUFrRDtBQUNsRCxxREFBa0Q7QUFFbEQsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFHMUUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLCtCQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixPQUFPLElBQUksK0JBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsOEJBQThCO1FBQzVCLE1BQU0sSUFBSSw4QkFBbUIsQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFjO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQTRCO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLFVBQVUsQ0FBQyxNQUFjO1FBQy9CLE1BQU0sUUFBUSxHQUFHLG9CQUFpQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0QsTUFBTSxVQUFVLEdBQUcsSUFBQSwyQkFBTSxFQUFDLE1BQU0sRUFBRTtZQUNoQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRO1lBQ3BDLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1FBQzNDLElBQUksVUFBVSxLQUFLLFlBQVMsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLElBQUksVUFBVSxLQUFLLFlBQVMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0csT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNuQyxDQUFDO2FBQU0sSUFBSSxVQUFVLEtBQUssWUFBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6RCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2xDLENBQUM7YUFBTSxJQUFJLFVBQVUsS0FBSyxZQUFTLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksdUJBQVksQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFyREQsOERBcURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIE5vdEltcGxlbWVudGVkRXJyb3IsIE5vdFN1cHBvcnRlZCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90JztcbmltcG9ydCB7IFNpbmdsZXRvblJlZ2lzdHJ5LCBUcmFuc2FjdGlvbkJ1aWxkZXIsIEludGVyZmFjZSB9IGZyb20gJy4vJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFN0YWtpbmdCdWlsZGVyIH0gZnJvbSAnLi9zdGFraW5nQnVpbGRlcic7XG5pbXBvcnQgeyBVbnN0YWtlQnVpbGRlciB9IGZyb20gJy4vdW5zdGFrZUJ1aWxkZXInO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgcHJvdGVjdGVkIF9tYXRlcmlhbDogSW50ZXJmYWNlLk1hdGVyaWFsO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl9tYXRlcmlhbCA9IHV0aWxzLmdldE1hdGVyaWFsKF9jb2luQ29uZmlnLm5ldHdvcmsudHlwZSk7XG4gIH1cblxuICBnZXRUcmFuc2ZlckJ1aWxkZXIoKTogVHJhbnNmZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zZmVyQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKS5tYXRlcmlhbCh0aGlzLl9tYXRlcmlhbCk7XG4gIH1cblxuICBnZXRTdGFraW5nQnVpbGRlcigpOiBTdGFraW5nQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBTdGFraW5nQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKS5tYXRlcmlhbCh0aGlzLl9tYXRlcmlhbCk7XG4gIH1cblxuICBnZXRVbnN0YWtpbmdCdWlsZGVyKCk6IFVuc3Rha2VCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFVuc3Rha2VCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpLm1hdGVyaWFsKHRoaXMuX21hdGVyaWFsKTtcbiAgfVxuXG4gIGdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcihgd2FsbGV0SW5pdGlhbGl6YXRpb24gZm9yICR7dGhpcy5fY29pbkNvbmZpZy5uYW1lfSBub3QgaW1wbGVtZW50ZWRgKTtcbiAgfVxuXG4gIGZyb20ocmF3VHhuOiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXIocmF3VHhuKTtcbiAgICBidWlsZGVyLmZyb20ocmF3VHhuKTtcbiAgICByZXR1cm4gYnVpbGRlcjtcbiAgfVxuXG4gIG1hdGVyaWFsKG1hdGVyaWFsOiBJbnRlcmZhY2UuTWF0ZXJpYWwpOiB0aGlzIHtcbiAgICB0aGlzLl9tYXRlcmlhbCA9IG1hdGVyaWFsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWlsZGVyKHJhd1R4bjogc3RyaW5nKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICBjb25zdCByZWdpc3RyeSA9IFNpbmdsZXRvblJlZ2lzdHJ5LmdldEluc3RhbmNlKHRoaXMuX21hdGVyaWFsKTtcbiAgICBjb25zdCBkZWNvZGVkVHhuID0gZGVjb2RlKHJhd1R4biwge1xuICAgICAgbWV0YWRhdGFScGM6IHRoaXMuX21hdGVyaWFsLm1ldGFkYXRhLFxuICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LFxuICAgIH0pO1xuXG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lO1xuICAgIGlmIChtZXRob2ROYW1lID09PSBJbnRlcmZhY2UuTWV0aG9kTmFtZXMuVHJhbnNmZXJLZWVwQWxpdmUgfHwgbWV0aG9kTmFtZSA9PT0gSW50ZXJmYWNlLk1ldGhvZE5hbWVzLlRyYW5zZmVyQWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09IEludGVyZmFjZS5NZXRob2ROYW1lcy5BZGRTdGFrZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3Rha2luZ0J1aWxkZXIoKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09IEludGVyZmFjZS5NZXRob2ROYW1lcy5SZW1vdmVTdGFrZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VW5zdGFraW5nQnVpbGRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
+
import { UnsignedTransaction, DecodedSignedTx, DecodedSigningPayload } from '@substrate/txwrapper-core';
|
|
3
|
+
import { TransactionType, BaseAddress } from '@bitgo-beta/sdk-core';
|
|
4
|
+
import { Transaction, TransactionBuilder } from '@bitgo-beta/abstract-substrate';
|
|
5
|
+
export declare class UnstakeBuilder extends TransactionBuilder {
|
|
6
|
+
protected _amount: number;
|
|
7
|
+
protected _hotkey: string;
|
|
8
|
+
protected _netuid: number;
|
|
9
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
10
|
+
/**
|
|
11
|
+
* Construct a transaction to unstake
|
|
12
|
+
*
|
|
13
|
+
* @returns {UnsignedTransaction} an unsigned unstake TAO transaction
|
|
14
|
+
*
|
|
15
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#staking
|
|
16
|
+
*/
|
|
17
|
+
protected buildTransaction(): UnsignedTransaction;
|
|
18
|
+
/** @inheritdoc */
|
|
19
|
+
protected get transactionType(): TransactionType;
|
|
20
|
+
/**
|
|
21
|
+
* The amount to unstake.
|
|
22
|
+
*
|
|
23
|
+
* @param {number} amount to unstake
|
|
24
|
+
* @returns {UnstakeBuilder} This unstaking builder.
|
|
25
|
+
*
|
|
26
|
+
* @see https://wiki.polkadot.network/docs/learn-nominator#required-minimum-stake
|
|
27
|
+
*/
|
|
28
|
+
amount(amount: number): this;
|
|
29
|
+
/**
|
|
30
|
+
* The controller of the staked amount.
|
|
31
|
+
*
|
|
32
|
+
* @param {string} hotkey address of validator
|
|
33
|
+
* @returns {UnstakeBuilder} This unstaking builder.
|
|
34
|
+
*
|
|
35
|
+
* @see https://wiki.polkadot.network/docs/learn-staking#accounts
|
|
36
|
+
*/
|
|
37
|
+
hotkey({ address }: BaseAddress): this;
|
|
38
|
+
/**
|
|
39
|
+
* Netuid of the subnet (root network is 0)
|
|
40
|
+
* @param {number} netuid
|
|
41
|
+
* @returns {UnstakeBuilder} This unstaking builder
|
|
42
|
+
*/
|
|
43
|
+
netuid(netuid: number): this;
|
|
44
|
+
/** @inheritdoc */
|
|
45
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
46
|
+
/** @inheritdoc */
|
|
47
|
+
validateTransaction(_: Transaction): void;
|
|
48
|
+
/**
|
|
49
|
+
* Helper method to validate whether unstake params have the correct type and format
|
|
50
|
+
* @param {number} amountUnstaked amount to unstake
|
|
51
|
+
* @param {string} hotkey hotkey address of the validator
|
|
52
|
+
* @param {number} netuid netuid of the subnet
|
|
53
|
+
*/
|
|
54
|
+
private validateFields;
|
|
55
|
+
/** @inheritdoc */
|
|
56
|
+
validateDecodedTransaction(decodedTxn: DecodedSigningPayload | DecodedSignedTx, rawTransaction: string): void;
|
|
57
|
+
/**
|
|
58
|
+
* Construct a transaction to unstake
|
|
59
|
+
*
|
|
60
|
+
* @param {Interface.RemoveStakeArgs} RemoveStake arguments to be passed to the addStake method
|
|
61
|
+
* @param {Interface.CreateBaseTxInfo} Base txn info required to construct the removeStake txn
|
|
62
|
+
* @returns {UnsignedTransaction} an unsigned unstake TAO transaction
|
|
63
|
+
*/
|
|
64
|
+
private removeStake;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=unstakeBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unstakeBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/unstakeBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAgB,mBAAmB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEtH,OAAO,EAA2B,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAqB,MAAM,gCAAgC,CAAC;AAEpG,qBAAa,cAAe,SAAQ,kBAAkB;IACpD,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;;;OAMG;IACH,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAYjD,kBAAkB;IAClB,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM5B;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,GAAG,IAAI;IAMtC;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK5B,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAajE,kBAAkB;IAClB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAKzC;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IActB,kBAAkB;IAClB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAa7G;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;CAapB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.UnstakeBuilder = void 0;
|
|
7
|
+
const txwrapper_core_1 = require("@substrate/txwrapper-core");
|
|
8
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
|
+
const abstract_substrate_1 = require("@bitgo-beta/abstract-substrate");
|
|
11
|
+
class UnstakeBuilder extends abstract_substrate_1.TransactionBuilder {
|
|
12
|
+
constructor(_coinConfig) {
|
|
13
|
+
super(_coinConfig);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Construct a transaction to unstake
|
|
17
|
+
*
|
|
18
|
+
* @returns {UnsignedTransaction} an unsigned unstake TAO transaction
|
|
19
|
+
*
|
|
20
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#staking
|
|
21
|
+
*/
|
|
22
|
+
buildTransaction() {
|
|
23
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
24
|
+
return this.removeStake({
|
|
25
|
+
amountUnstaked: this._amount,
|
|
26
|
+
hotkey: this._hotkey,
|
|
27
|
+
netuid: this._netuid,
|
|
28
|
+
}, baseTxInfo);
|
|
29
|
+
}
|
|
30
|
+
/** @inheritdoc */
|
|
31
|
+
get transactionType() {
|
|
32
|
+
return sdk_core_1.TransactionType.StakingDeactivate;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The amount to unstake.
|
|
36
|
+
*
|
|
37
|
+
* @param {number} amount to unstake
|
|
38
|
+
* @returns {UnstakeBuilder} This unstaking builder.
|
|
39
|
+
*
|
|
40
|
+
* @see https://wiki.polkadot.network/docs/learn-nominator#required-minimum-stake
|
|
41
|
+
*/
|
|
42
|
+
amount(amount) {
|
|
43
|
+
this.validateValue(new bignumber_js_1.default(amount));
|
|
44
|
+
this._amount = amount;
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The controller of the staked amount.
|
|
49
|
+
*
|
|
50
|
+
* @param {string} hotkey address of validator
|
|
51
|
+
* @returns {UnstakeBuilder} This unstaking builder.
|
|
52
|
+
*
|
|
53
|
+
* @see https://wiki.polkadot.network/docs/learn-staking#accounts
|
|
54
|
+
*/
|
|
55
|
+
hotkey({ address }) {
|
|
56
|
+
this.validateAddress({ address });
|
|
57
|
+
this._hotkey = address;
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Netuid of the subnet (root network is 0)
|
|
62
|
+
* @param {number} netuid
|
|
63
|
+
* @returns {UnstakeBuilder} This unstaking builder
|
|
64
|
+
*/
|
|
65
|
+
netuid(netuid) {
|
|
66
|
+
this._netuid = netuid;
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
/** @inheritdoc */
|
|
70
|
+
fromImplementation(rawTransaction) {
|
|
71
|
+
const tx = super.fromImplementation(rawTransaction);
|
|
72
|
+
if (this._method?.name === abstract_substrate_1.Interface.MethodNames.RemoveStake) {
|
|
73
|
+
const txMethod = this._method.args;
|
|
74
|
+
this.amount(txMethod.amountUnstaked);
|
|
75
|
+
this.hotkey({ address: txMethod.hotkey });
|
|
76
|
+
this.netuid(txMethod.netuid);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid Transaction Type: ${this._method?.name}. Expected addStake`);
|
|
80
|
+
}
|
|
81
|
+
return tx;
|
|
82
|
+
}
|
|
83
|
+
/** @inheritdoc */
|
|
84
|
+
validateTransaction(_) {
|
|
85
|
+
super.validateTransaction(_);
|
|
86
|
+
this.validateFields(this._amount, this._hotkey, this._netuid);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Helper method to validate whether unstake params have the correct type and format
|
|
90
|
+
* @param {number} amountUnstaked amount to unstake
|
|
91
|
+
* @param {string} hotkey hotkey address of the validator
|
|
92
|
+
* @param {number} netuid netuid of the subnet
|
|
93
|
+
*/
|
|
94
|
+
validateFields(amountUnstaked, hotkey, netuid) {
|
|
95
|
+
const validationResult = abstract_substrate_1.Schema.UnstakeTransactionSchema.validate({
|
|
96
|
+
amountUnstaked,
|
|
97
|
+
hotkey,
|
|
98
|
+
netuid,
|
|
99
|
+
});
|
|
100
|
+
if (validationResult.error) {
|
|
101
|
+
throw new sdk_core_1.InvalidTransactionError(`UnStake Builder Transaction validation failed: ${validationResult.error.message}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/** @inheritdoc */
|
|
105
|
+
validateDecodedTransaction(decodedTxn, rawTransaction) {
|
|
106
|
+
if (decodedTxn.method?.name === abstract_substrate_1.Interface.MethodNames.RemoveStake) {
|
|
107
|
+
const txMethod = decodedTxn.method.args;
|
|
108
|
+
const amountUnstaked = txMethod.amountUnstaked;
|
|
109
|
+
const hotkey = txMethod.hotkey;
|
|
110
|
+
const netuid = txMethod.netuid;
|
|
111
|
+
const validationResult = abstract_substrate_1.Schema.UnstakeTransactionSchema.validate({ amountUnstaked, hotkey, netuid });
|
|
112
|
+
if (validationResult.error) {
|
|
113
|
+
throw new sdk_core_1.InvalidTransactionError(`Transfer Transaction validation failed: ${validationResult.error.message}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Construct a transaction to unstake
|
|
119
|
+
*
|
|
120
|
+
* @param {Interface.RemoveStakeArgs} RemoveStake arguments to be passed to the addStake method
|
|
121
|
+
* @param {Interface.CreateBaseTxInfo} Base txn info required to construct the removeStake txn
|
|
122
|
+
* @returns {UnsignedTransaction} an unsigned unstake TAO transaction
|
|
123
|
+
*/
|
|
124
|
+
removeStake(args, info) {
|
|
125
|
+
return (0, txwrapper_core_1.defineMethod)({
|
|
126
|
+
method: {
|
|
127
|
+
args,
|
|
128
|
+
name: 'removeStake',
|
|
129
|
+
pallet: 'subtensorModule',
|
|
130
|
+
},
|
|
131
|
+
...info.baseTxInfo,
|
|
132
|
+
}, info.options);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.UnstakeBuilder = UnstakeBuilder;
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5zdGFrZUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Vuc3Rha2VCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDhEQUFzSDtBQUN0SCxnRUFBcUM7QUFDckMsbURBQTZGO0FBQzdGLHVFQUFvRztBQUVwRyxNQUFhLGNBQWUsU0FBUSx1Q0FBa0I7SUFLcEQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLGdCQUFnQjtRQUN4QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQ3JCO1lBQ0UsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQzVCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNwQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDckIsRUFDRCxVQUFVLENBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxpQkFBaUIsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxNQUFjO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxzQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBZTtRQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQztJ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LGlCQUFpQjthQUMxQjtZQUNELEdBQUcsSUFBSSxDQUFDLFVBQVU7U0FDbkIsRUFDRCxJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFqSkQsd0NBaUpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgZGVmaW5lTWV0aG9kLCBVbnNpZ25lZFRyYW5zYWN0aW9uLCBEZWNvZGVkU2lnbmVkVHgsIERlY29kZWRTaWduaW5nUGF5bG9hZCB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLWNvcmUnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSwgQmFzZUFkZHJlc3MgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25CdWlsZGVyLCBJbnRlcmZhY2UsIFNjaGVtYSB9IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LXN1YnN0cmF0ZSc7XG5cbmV4cG9ydCBjbGFzcyBVbnN0YWtlQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfYW1vdW50OiBudW1iZXI7XG4gIHByb3RlY3RlZCBfaG90a2V5OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfbmV0dWlkOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIHRyYW5zYWN0aW9uIHRvIHVuc3Rha2VcbiAgICpcbiAgICogQHJldHVybnMge1Vuc2lnbmVkVHJhbnNhY3Rpb259IGFuIHVuc2lnbmVkIHVuc3Rha2UgVEFPIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9wb2xrYWRvdC5qcy5vcmcvZG9jcy9zdWJzdHJhdGUvZXh0cmluc2ljcy8jc3Rha2luZ1xuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkVHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgYmFzZVR4SW5mbyA9IHRoaXMuY3JlYXRlQmFzZVR4SW5mbygpO1xuICAgIHJldHVybiB0aGlzLnJlbW92ZVN0YWtlKFxuICAgICAge1xuICAgICAgICBhbW91bnRVbnN0YWtlZDogdGhpcy5fYW1vdW50LFxuICAgICAgICBob3RrZXk6IHRoaXMuX2hvdGtleSxcbiAgICAgICAgbmV0dWlkOiB0aGlzLl9uZXR1aWQsXG4gICAgICB9LFxuICAgICAgYmFzZVR4SW5mb1xuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdEZWFjdGl2YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgdG8gdW5zdGFrZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCB0byB1bnN0YWtlXG4gICAqIEByZXR1cm5zIHtVbnN0YWtlQnVpbGRlcn0gVGhpcyB1bnN0YWtpbmcgYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3dpa2kucG9sa2Fkb3QubmV0d29yay9kb2NzL2xlYXJuLW5vbWluYXRvciNyZXF1aXJlZC1taW5pbXVtLXN0YWtlXG4gICAqL1xuICBhbW91bnQoYW1vdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihhbW91bnQpKTtcbiAgICB0aGlzLl9hbW91bnQgPSBhbW91bnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRyb2xsZXIgb2YgdGhlIHN0YWtlZCBhbW91bnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBob3RrZXkgYWRkcmVzcyBvZiB2YWxpZGF0b3JcbiAgICogQHJldHVybnMge1Vuc3Rha2VCdWlsZGVyfSBUaGlzIHVuc3Rha2luZyBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd2lraS5wb2xrYWRvdC5uZXR3b3JrL2RvY3MvbGVhcm4tc3Rha2luZyNhY2NvdW50c1xuICAgKi9cbiAgaG90a2V5KHsgYWRkcmVzcyB9OiBCYXNlQWRkcmVzcyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB0aGlzLl9ob3RrZXkgPSBhZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE5ldHVpZCBvZiB0aGUgc3VibmV0IChyb290IG5ldHdvcmsgaXMgMClcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5ldHVpZFxuICAgKiBAcmV0dXJucyB7VW5zdGFrZUJ1aWxkZXJ9IFRoaXMgdW5zdGFraW5nIGJ1aWxkZXJcbiAgICovXG4gIG5ldHVpZChuZXR1aWQ6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuX25ldHVpZCA9IG5ldHVpZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBzdXBlci5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGlmICh0aGlzLl9tZXRob2Q/Lm5hbWUgPT09IEludGVyZmFjZS5NZXRob2ROYW1lcy5SZW1vdmVTdGFrZSkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSB0aGlzLl9tZXRob2QuYXJncyBhcyBJbnRlcmZhY2UuUmVtb3ZlU3Rha2VBcmdzO1xuICAgICAgdGhpcy5hbW91bnQodHhNZXRob2QuYW1vdW50VW5zdGFrZWQpO1xuICAgICAgdGhpcy5ob3RrZXkoeyBhZGRyZXNzOiB0eE1ldGhvZC5ob3RrZXkgfSk7XG4gICAgICB0aGlzLm5ldHVpZCh0eE1ldGhvZC5uZXR1aWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgVHJhbnNhY3Rpb24gVHlwZTogJHt0aGlzLl9tZXRob2Q/Lm5hbWV9LiBFeHBlY3RlZCBhZGRTdGFrZWApO1xuICAgIH1cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbihfOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24oXyk7XG4gICAgdGhpcy52YWxpZGF0ZUZpZWxkcyh0aGlzLl9hbW91bnQsIHRoaXMuX2hvdGtleSwgdGhpcy5fbmV0dWlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIHZhbGlkYXRlIHdoZXRoZXIgdW5zdGFrZSBwYXJhbXMgaGF2ZSB0aGUgY29ycmVjdCB0eXBlIGFuZCBmb3JtYXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudFVuc3Rha2VkIGFtb3VudCB0byB1bnN0YWtlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBob3RrZXkgaG90a2V5IGFkZHJlc3Mgb2YgdGhlIHZhbGlkYXRvclxuICAgKiBAcGFyYW0ge251bWJlcn0gbmV0dWlkIG5ldHVpZCBvZiB0aGUgc3VibmV0XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRmllbGRzKGFtb3VudFVuc3Rha2VkOiBudW1iZXIsIGhvdGtleTogc3RyaW5nLCBuZXR1aWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBTY2hlbWEuVW5zdGFrZVRyYW5zYWN0aW9uU2NoZW1hLnZhbGlkYXRlKHtcbiAgICAgIGFtb3VudFVuc3Rha2VkLFxuICAgICAgaG90a2V5LFxuICAgICAgbmV0dWlkLFxuICAgIH0pO1xuXG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYFVuU3Rha2UgQnVpbGRlciBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4bjogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4LCByYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lID09PSBJbnRlcmZhY2UuTWV0aG9kTmFtZXMuUmVtb3ZlU3Rha2UpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4bi5tZXRob2QuYXJncyBhcyB1bmtub3duIGFzIEludGVyZmFjZS5SZW1vdmVTdGFrZUFyZ3M7XG4gICAgICBjb25zdCBhbW91bnRVbnN0YWtlZCA9IHR4TWV0aG9kLmFtb3VudFVuc3Rha2VkO1xuICAgICAgY29uc3QgaG90a2V5ID0gdHhNZXRob2QuaG90a2V5O1xuICAgICAgY29uc3QgbmV0dWlkID0gdHhNZXRob2QubmV0dWlkO1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IFNjaGVtYS5VbnN0YWtlVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGUoeyBhbW91bnRVbnN0YWtlZCwgaG90a2V5LCBuZXR1aWQgfSk7XG4gICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYFRyYW5zZmVyIFRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgdHJhbnNhY3Rpb24gdG8gdW5zdGFrZVxuICAgKlxuICAgKiBAcGFyYW0ge0ludGVyZmFjZS5SZW1vdmVTdGFrZUFyZ3N9IFJlbW92ZVN0YWtlIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIGFkZFN0YWtlIG1ldGhvZFxuICAgKiBAcGFyYW0ge0ludGVyZmFjZS5DcmVhdGVCYXNlVHhJbmZvfSBCYXNlIHR4biBpbmZvIHJlcXVpcmVkIHRvIGNvbnN0cnVjdCB0aGUgcmVtb3ZlU3Rha2UgdHhuXG4gICAqIEByZXR1cm5zIHtVbnNpZ25lZFRyYW5zYWN0aW9ufSBhbiB1bnNpZ25lZCB1bnN0YWtlIFRBTyB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSByZW1vdmVTdGFrZShhcmdzOiBJbnRlcmZhY2UuUmVtb3ZlU3Rha2VBcmdzLCBpbmZvOiBJbnRlcmZhY2UuQ3JlYXRlQmFzZVR4SW5mbyk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiBkZWZpbmVNZXRob2QoXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDoge1xuICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgbmFtZTogJ3JlbW92ZVN0YWtlJyxcbiAgICAgICAgICBwYWxsZXQ6ICdzdWJ0ZW5zb3JNb2R1bGUnLFxuICAgICAgICB9LFxuICAgICAgICAuLi5pbmZvLmJhc2VUeEluZm8sXG4gICAgICB9LFxuICAgICAgaW5mby5vcHRpb25zXG4gICAgKTtcbiAgfVxufVxuIl19
|