@bitgo/sdk-coin-dot 1.0.1-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +5 -0
- package/.mocharc.yml +8 -0
- package/CHANGELOG.md +8 -0
- package/LICENSE +191 -0
- package/README.md +30 -0
- package/dist/src/dot.d.ts +104 -0
- package/dist/src/dot.d.ts.map +1 -0
- package/dist/src/dot.js +230 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +16 -0
- package/dist/src/lib/addressInitializationBuilder.d.ts +79 -0
- package/dist/src/lib/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/src/lib/addressInitializationBuilder.js +182 -0
- package/dist/src/lib/batchTransactionBuilder.d.ts +47 -0
- package/dist/src/lib/batchTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/batchTransactionBuilder.js +122 -0
- package/dist/src/lib/claimBuilder.d.ts +58 -0
- package/dist/src/lib/claimBuilder.d.ts.map +1 -0
- package/dist/src/lib/claimBuilder.js +119 -0
- package/dist/src/lib/errors.d.ts +8 -0
- package/dist/src/lib/errors.d.ts.map +1 -0
- package/dist/src/lib/errors.js +19 -0
- package/dist/src/lib/iface.d.ts +194 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +39 -0
- package/dist/src/lib/index.d.ts +17 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +53 -0
- package/dist/src/lib/keyPair.d.ts +31 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +70 -0
- package/dist/src/lib/singletonRegistry.d.ts +7 -0
- package/dist/src/lib/singletonRegistry.d.ts.map +1 -0
- package/dist/src/lib/singletonRegistry.js +20 -0
- package/dist/src/lib/stakingBuilder.d.ts +58 -0
- package/dist/src/lib/stakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/stakingBuilder.js +139 -0
- package/dist/src/lib/transaction.d.ts +65 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +396 -0
- package/dist/src/lib/transactionBuilder.d.ts +131 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +332 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +26 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +93 -0
- package/dist/src/lib/transferBuilder.d.ts +71 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +177 -0
- package/dist/src/lib/txnSchema.d.ts +14 -0
- package/dist/src/lib/txnSchema.d.ts.map +1 -0
- package/dist/src/lib/txnSchema.js +104 -0
- package/dist/src/lib/unnominateBuilder.d.ts +24 -0
- package/dist/src/lib/unnominateBuilder.d.ts.map +1 -0
- package/dist/src/lib/unnominateBuilder.js +50 -0
- package/dist/src/lib/unstakeBuilder.d.ts +38 -0
- package/dist/src/lib/unstakeBuilder.d.ts.map +1 -0
- package/dist/src/lib/unstakeBuilder.js +89 -0
- package/dist/src/lib/utils.d.ts +145 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +283 -0
- package/dist/src/lib/withdrawUnstakedBuilder.d.ts +38 -0
- package/dist/src/lib/withdrawUnstakedBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawUnstakedBuilder.js +90 -0
- package/dist/src/tdot.d.ts +12 -0
- package/dist/src/tdot.d.ts.map +1 -0
- package/dist/src/tdot.js +27 -0
- package/package.json +66 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { BaseAddress, TransactionType } from '@bitgo/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo/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 @@
|
|
|
1
|
+
{"version":3,"file":"addressInitializationBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/addressInitializationBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA2B,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIxG,OAAO,EAAoD,SAAS,EAAE,MAAM,SAAS,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,4BAA6B,SAAQ,kBAAkB;IAClE,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC;IAChC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,MAAM,SAAK;gBAET,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAQjD;;;;;;OAMG;IACH,SAAS,CAAC,wBAAwB,IAAI,mBAAmB;IAazD;;;;OAIG;IACH,SAAS,CAAC,8BAA8B,IAAI,mBAAmB;IAa/D,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAM/B;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM1B;;;;;;;OAOG;IACH,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAKhC;;;;;;;;;;OAUG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM1B,kBAAkB;IAClB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,GAAG,IAAI;IAkBrF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAoBjE,kBAAkB;IAClB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAKzC,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,4BAA4B;CAOrC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
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.AddressInitializationBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
8
|
+
const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
|
|
9
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
10
|
+
const iface_1 = require("./iface");
|
|
11
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
12
|
+
const txnSchema_1 = require("./txnSchema");
|
|
13
|
+
class AddressInitializationBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
14
|
+
constructor(_coinConfig) {
|
|
15
|
+
super(_coinConfig);
|
|
16
|
+
this._index = 0;
|
|
17
|
+
}
|
|
18
|
+
/** @inheritDoc */
|
|
19
|
+
buildTransaction() {
|
|
20
|
+
if (this._delegate) {
|
|
21
|
+
return this.buildAddProxyTransaction();
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return this.buildAnonymousProxyTransaction();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Register a proxy account for the sender that is able to make calls on its behalf.
|
|
29
|
+
*
|
|
30
|
+
* @returns {UnsignedTransaction} an unsigned Dot transaction
|
|
31
|
+
*
|
|
32
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#proxy
|
|
33
|
+
*/
|
|
34
|
+
buildAddProxyTransaction() {
|
|
35
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
36
|
+
return txwrapper_polkadot_1.methods.proxy.addProxy({
|
|
37
|
+
delegate: this._delegate,
|
|
38
|
+
proxyType: this._proxyType,
|
|
39
|
+
delay: this._delay,
|
|
40
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Spawn a receive address for the sender
|
|
44
|
+
*
|
|
45
|
+
* @return {UnsignedTransaction} an unsigned Dot transaction
|
|
46
|
+
*/
|
|
47
|
+
buildAnonymousProxyTransaction() {
|
|
48
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
49
|
+
return txwrapper_polkadot_1.methods.proxy.anonymous({
|
|
50
|
+
proxyType: this._proxyType,
|
|
51
|
+
index: this._index,
|
|
52
|
+
delay: parseInt(this._delay, 10),
|
|
53
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
54
|
+
}
|
|
55
|
+
get transactionType() {
|
|
56
|
+
return sdk_core_1.TransactionType.AddressInitialization;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The account to delegate auth to.
|
|
60
|
+
*
|
|
61
|
+
* @param {BaseAddress} owner
|
|
62
|
+
* @returns {AddressInitializationBuilder} This builder.
|
|
63
|
+
*
|
|
64
|
+
* @see https://wiki.polkadot.network/docs/learn-proxies#why-use-a-proxy
|
|
65
|
+
*/
|
|
66
|
+
owner(owner) {
|
|
67
|
+
this.validateAddress({ address: owner.address });
|
|
68
|
+
this._delegate = owner.address;
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Used for disambiguation if multiple calls are made in the same transaction
|
|
73
|
+
* Use 0 as a default
|
|
74
|
+
*
|
|
75
|
+
* @param {number} index
|
|
76
|
+
*
|
|
77
|
+
* @returns {AddressInitializationBuilder} This transfer builder.
|
|
78
|
+
*/
|
|
79
|
+
index(index) {
|
|
80
|
+
this.validateValue(new bignumber_js_1.default(index));
|
|
81
|
+
this._index = index;
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The proxy type to add.
|
|
86
|
+
*
|
|
87
|
+
* @param {proxyType} proxyType
|
|
88
|
+
* @returns {AddressInitializationBuilder} This builder.
|
|
89
|
+
*
|
|
90
|
+
* @see https://wiki.polkadot.network/docs/learn-proxies#proxy-types
|
|
91
|
+
*/
|
|
92
|
+
type(proxyType) {
|
|
93
|
+
this._proxyType = proxyType;
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The number of blocks that an announcement must be in place for.
|
|
98
|
+
* before the corresponding call may be dispatched.
|
|
99
|
+
* If zero, then no announcement is needed.
|
|
100
|
+
* TODO: move to the validity window method once it has been standardized
|
|
101
|
+
*
|
|
102
|
+
* @param {string} delay
|
|
103
|
+
* @returns {AddressInitializationBuilder} This transfer builder.
|
|
104
|
+
*
|
|
105
|
+
* @see https://wiki.polkadot.network/docs/learn-proxies#time-delayed-proxies
|
|
106
|
+
*/
|
|
107
|
+
delay(delay) {
|
|
108
|
+
this.validateValue(new bignumber_js_1.default(parseInt(delay, 10)));
|
|
109
|
+
this._delay = delay;
|
|
110
|
+
return this;
|
|
111
|
+
}
|
|
112
|
+
/** @inheritdoc */
|
|
113
|
+
validateDecodedTransaction(decodedTxn) {
|
|
114
|
+
var _a, _b;
|
|
115
|
+
let validationResult;
|
|
116
|
+
if (((_a = decodedTxn.method) === null || _a === void 0 ? void 0 : _a.name) === iface_1.MethodNames.AddProxy) {
|
|
117
|
+
const txMethod = decodedTxn.method.args;
|
|
118
|
+
validationResult = this.validateAddProxyFields(txMethod.delegate, txMethod.proxyType, txMethod.delay);
|
|
119
|
+
}
|
|
120
|
+
else if (((_b = decodedTxn.method) === null || _b === void 0 ? void 0 : _b.name) === iface_1.MethodNames.Anonymous) {
|
|
121
|
+
const txMethod = decodedTxn.method.args;
|
|
122
|
+
validationResult = this.validateAnonymousProxyFields(parseInt(txMethod.index, 10), txMethod.proxyType, txMethod.delay);
|
|
123
|
+
}
|
|
124
|
+
if (validationResult.error) {
|
|
125
|
+
throw new sdk_core_1.InvalidTransactionError(`Transaction validation failed: ${validationResult.error.message}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** @inheritdoc */
|
|
129
|
+
fromImplementation(rawTransaction) {
|
|
130
|
+
var _a, _b, _c;
|
|
131
|
+
const tx = super.fromImplementation(rawTransaction);
|
|
132
|
+
if (((_a = this._method) === null || _a === void 0 ? void 0 : _a.name) === iface_1.MethodNames.AddProxy) {
|
|
133
|
+
const txMethod = this._method.args;
|
|
134
|
+
this.owner({ address: txMethod.delegate });
|
|
135
|
+
this.type(txMethod.proxyType);
|
|
136
|
+
this.delay(new bignumber_js_1.default(txMethod.delay).toString());
|
|
137
|
+
}
|
|
138
|
+
else if (((_b = this._method) === null || _b === void 0 ? void 0 : _b.name) === iface_1.MethodNames.Anonymous) {
|
|
139
|
+
const txMethod = this._method.args;
|
|
140
|
+
this.index(new bignumber_js_1.default(txMethod.index).toNumber());
|
|
141
|
+
this.type(txMethod.proxyType);
|
|
142
|
+
this.delay(new bignumber_js_1.default(txMethod.delay).toString());
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid Transaction Type: ${(_c = this._method) === null || _c === void 0 ? void 0 : _c.name}. Expected ${iface_1.MethodNames.AddProxy} or ${iface_1.MethodNames.Anonymous}`);
|
|
146
|
+
}
|
|
147
|
+
return tx;
|
|
148
|
+
}
|
|
149
|
+
/** @inheritdoc */
|
|
150
|
+
validateTransaction(_) {
|
|
151
|
+
super.validateTransaction(_);
|
|
152
|
+
this.validateFields();
|
|
153
|
+
}
|
|
154
|
+
validateFields() {
|
|
155
|
+
let validationResult;
|
|
156
|
+
if (this._delegate) {
|
|
157
|
+
validationResult = this.validateAddProxyFields(this._delegate, this._proxyType, this._delay);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
validationResult = this.validateAnonymousProxyFields(this._index, this._proxyType, this._delay);
|
|
161
|
+
}
|
|
162
|
+
if (validationResult.error) {
|
|
163
|
+
throw new sdk_core_1.InvalidTransactionError(`AddressInitialization Transaction validation failed: ${validationResult.error.message}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
validateAddProxyFields(delegate, proxyType, delay) {
|
|
167
|
+
return txnSchema_1.AddressInitializationSchema.validate({
|
|
168
|
+
delegate,
|
|
169
|
+
proxyType,
|
|
170
|
+
delay,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
validateAnonymousProxyFields(index, proxyType, delay) {
|
|
174
|
+
return txnSchema_1.AnonymousAddressInitializationSchema.validate({
|
|
175
|
+
proxyType,
|
|
176
|
+
index,
|
|
177
|
+
delay,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.AddressInitializationBuilder = AddressInitializationBuilder;
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4Q0FBd0Y7QUFHeEYsc0VBQXdEO0FBQ3hELGdFQUFxQztBQUVyQyxtQ0FBc0Y7QUFFdEYsNkRBQTBEO0FBQzFELDJDQUFnRztBQUVoRyxNQUFhLDRCQUE2QixTQUFRLHVDQUFrQjtJQU1sRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUhYLFdBQU0sR0FBRyxDQUFDLENBQUM7SUFJckIsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGdCQUFnQjtRQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUN4QzthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztTQUM5QztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDTyx3QkFBd0I7UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsT0FBTyw0QkFBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzNCO1lBQ0UsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3hCLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMxQixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDbkIsRUFDRCxVQUFVLENBQUMsVUFBVSxFQUNyQixVQUFVLENBQUMsT0FBTyxDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDTyw4QkFBOEI7UUFDdEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsT0FBTyw0QkFBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENB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LENBQUMsU0FBUyxFQUFFO1lBQ2xCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlGO2FBQU07WUFDTCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqRztRQUNELElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FDL0Isd0RBQXdELGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDekYsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxLQUFhO1FBQy9FLE9BQU8sdUNBQTJCLENBQUMsUUFBUSxDQUFDO1lBQzFDLFFBQVE7WUFDUixTQUFTO1lBQ1QsS0FBSztTQUNOLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxLQUFhLEVBQUUsU0FBaUIsRUFBRSxLQUFhO1FBQ2xGLE9BQU8sZ0RBQW9DLENBQUMsUUFBUSxDQUFDO1lBQ25ELFNBQVM7WUFDVCxLQUFLO1lBQ0wsS0FBSztTQUNOLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxNRCxvRUFrTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQWRkcmVzcywgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVjb2RlZFNpZ25lZFR4LCBEZWNvZGVkU2lnbmluZ1BheWxvYWQsIFVuc2lnbmVkVHJhbnNhY3Rpb24gfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlJztcbmltcG9ydCB7IG1ldGhvZHMgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1wb2xrYWRvdCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnam9pJztcbmltcG9ydCB7IEFkZEFub255bW91c1Byb3h5QXJncywgQWRkUHJveHlBcmdzLCBNZXRob2ROYW1lcywgUHJveHlUeXBlIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgQWRkcmVzc0luaXRpYWxpemF0aW9uU2NoZW1hLCBBbm9ueW1vdXNBZGRyZXNzSW5pdGlhbGl6YXRpb25TY2hlbWEgfSBmcm9tICcuL3R4blNjaGVtYSc7XG5cbmV4cG9ydCBjbGFzcyBBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF9kZWxlZ2F0ZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3Byb3h5VHlwZTogUHJveHlUeXBlO1xuICBwcm90ZWN0ZWQgX2RlbGF5OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfaW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgYnVpbGRUcmFuc2FjdGlvbigpOiBVbnNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgICBpZiAodGhpcy5fZGVsZWdhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkQWRkUHJveHlUcmFuc2FjdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZEFub255bW91c1Byb3h5VHJhbnNhY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBwcm94eSBhY2NvdW50IGZvciB0aGUgc2VuZGVyIHRoYXQgaXMgYWJsZSB0byBtYWtlIGNhbGxzIG9uIGl0cyBiZWhhbGYuXG4gICAqXG4gICAqIEByZXR1cm5zIHtVbnNpZ25lZFRyYW5zYWN0aW9ufSBhbiB1bnNpZ25lZCBEb3QgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHNlZSBodHRwczovL3BvbGthZG90LmpzLm9yZy9kb2NzL3N1YnN0cmF0ZS9leHRyaW5zaWNzLyNwcm94eVxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkQWRkUHJveHlUcmFuc2FjdGlvbigpOiBVbnNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBiYXNlVHhJbmZvID0gdGhpcy5jcmVhdGVCYXNlVHhJbmZvKCk7XG4gICAgcmV0dXJuIG1ldGhvZHMucHJveHkuYWRkUHJveHkoXG4gICAgICB7XG4gICAgICAgIGRlbGVnYXRlOiB0aGlzLl9kZWxlZ2F0ZSxcbiAgICAgICAgcHJveHlUeXBlOiB0aGlzLl9wcm94eVR5cGUsXG4gICAgICAgIGRlbGF5OiB0aGlzLl9kZWxheSxcbiAgICAgIH0sXG4gICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICBiYXNlVHhJbmZvLm9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwYXduIGEgcmVjZWl2ZSBhZGRyZXNzIGZvciB0aGUgc2VuZGVyXG4gICAqXG4gICAqIEByZXR1cm4ge1Vuc2lnbmVkVHJhbnNhY3Rpb259IGFuIHVuc2lnbmVkIERvdCB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkQW5vbnltb3VzUHJveHlUcmFuc2FjdGlvbigpOiBVbnNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBiYXNlVHhJbmZvID0gdGhpcy5jcmVhdGVCYXNlVHhJbmZvKCk7XG4gICAgcmV0dXJuIG1ldGhvZHMucHJveHkuYW5vbnltb3VzKFxuICAgICAge1xuICAgICAgICBwcm94eVR5cGU6IHRoaXMuX3Byb3h5VHlwZSxcbiAgICAgICAgaW5kZXg6IHRoaXMuX2luZGV4LFxuICAgICAgICBkZWxheTogcGFyc2VJbnQodGhpcy5fZGVsYXksIDEwKSxcbiAgICAgIH0sXG4gICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICBiYXNlVHhJbmZvLm9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCB0byBkZWxlZ2F0ZSBhdXRoIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge0Jhc2VBZGRyZXNzfSBvd25lclxuICAgKiBAcmV0dXJucyB7QWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlcn0gVGhpcyBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd2lraS5wb2xrYWRvdC5uZXR3b3JrL2RvY3MvbGVhcm4tcHJveGllcyN3aHktdXNlLWEtcHJveHlcbiAgICovXG4gIG93bmVyKG93bmVyOiBCYXNlQWRkcmVzcyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogb3duZXIuYWRkcmVzcyB9KTtcbiAgICB0aGlzLl9kZWxlZ2F0ZSA9IG93bmVyLmFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBmb3IgZGlzYW1iaWd1YXRpb24gaWYgbXVsdGlwbGUgY2FsbHMgYXJlIG1hZGUgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb25cbiAgICogVXNlIDAgYXMgYSBkZWZhdWx0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKlxuICAgKiBAcmV0dXJucyB7QWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2ZlciBidWlsZGVyLlxuICAgKi9cbiAgaW5kZXgoaW5kZXg6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKGluZGV4KSk7XG4gICAgdGhpcy5faW5kZXggPSBpbmRleDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHJveHkgdHlwZSB0byBhZGQuXG4gICAqXG4gICAqIEBwYXJhbSB7cHJveHlUeXBlfSBwcm94eVR5cGVcbiAgICogQHJldHVybnMge0FkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXJ9IFRoaXMgYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3dpa2kucG9sa2Fkb3QubmV0d29yay9kb2NzL2xlYXJuLXByb3hpZXMjcHJveHktdHlwZXNcbiAgICovXG4gIHR5cGUocHJveHlUeXBlOiBQcm94eVR5cGUpOiB0aGlzIHtcbiAgICB0aGlzLl9wcm94eVR5cGUgPSBwcm94eVR5cGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBhbiBhbm5vdW5jZW1lbnQgbXVzdCBiZSBpbiBwbGFjZSBmb3IuXG4gICAqIGJlZm9yZSB0aGUgY29ycmVzcG9uZGluZyBjYWxsIG1heSBiZSBkaXNwYXRjaGVkLlxuICAgKiBJZiB6ZXJvLCB0aGVuIG5vIGFubm91bmNlbWVudCBpcyBuZWVkZWQuXG4gICAqIFRPRE86IG1vdmUgdG8gdGhlIHZhbGlkaXR5IHdpbmRvdyBtZXRob2Qgb25jZSBpdCBoYXMgYmVlbiBzdGFuZGFyZGl6ZWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRlbGF5XG4gICAqIEByZXR1cm5zIHtBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyfSBUaGlzIHRyYW5zZmVyIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93aWtpLnBvbGthZG90Lm5ldHdvcmsvZG9jcy9sZWFybi1wcm94aWVzI3RpbWUtZGVsYXllZC1wcm94aWVzXG4gICAqL1xuICBkZWxheShkZWxheTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIocGFyc2VJbnQoZGVsYXksIDEwKSkpO1xuICAgIHRoaXMuX2RlbGF5ID0gZGVsYXk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4bjogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4KTogdm9pZCB7XG4gICAgbGV0IHZhbGlkYXRpb25SZXN1bHQ7XG4gICAgaWYgKGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lID09PSBNZXRob2ROYW1lcy5BZGRQcm94eSkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgQWRkUHJveHlBcmdzO1xuICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMudmFsaWRhdGVBZGRQcm94eUZpZWxkcyh0eE1ldGhvZC5kZWxlZ2F0ZSwgdHhNZXRob2QucHJveHlUeXBlLCB0eE1ldGhvZC5kZWxheSk7XG4gICAgfSBlbHNlIGlmIChkZWNvZGVkVHhuLm1ldGhvZD8ubmFtZSA9PT0gTWV0aG9kTmFtZXMuQW5vbnltb3VzKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IGRlY29kZWRUeG4ubWV0aG9kLmFyZ3MgYXMgdW5rbm93biBhcyBBZGRBbm9ueW1vdXNQcm94eUFyZ3M7XG4gICAgICB2YWxpZGF0aW9uUmVzdWx0ID0gdGhpcy52YWxpZGF0ZUFub255bW91c1Byb3h5RmllbGRzKFxuICAgICAgICBwYXJzZUludCh0eE1ldGhvZC5pbmRleCwgMTApLFxuICAgICAgICB0eE1ldGhvZC5wcm94eVR5cGUsXG4gICAgICAgIHR4TWV0aG9kLmRlbGF5XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eCA9IHN1cGVyLmZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgaWYgKHRoaXMuX21ldGhvZD8ubmFtZSA9PT0gTWV0aG9kTmFtZXMuQWRkUHJveHkpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gdGhpcy5fbWV0aG9kLmFyZ3MgYXMgQWRkUHJveHlBcmdzO1xuICAgICAgdGhpcy5vd25lcih7IGFkZHJlc3M6IHR4TWV0aG9kLmRlbGVnYXRlIH0pO1xuICAgICAgdGhpcy50eXBlKHR4TWV0aG9kLnByb3h5VHlwZSk7XG4gICAgICB0aGlzLmRlbGF5KG5ldyBCaWdOdW1iZXIodHhNZXRob2QuZGVsYXkpLnRvU3RyaW5nKCkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fbWV0aG9kPy5uYW1lID09PSBNZXRob2ROYW1lcy5Bbm9ueW1vdXMpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gdGhpcy5fbWV0aG9kLmFyZ3MgYXMgQWRkQW5vbnltb3VzUHJveHlBcmdzO1xuICAgICAgdGhpcy5pbmRleChuZXcgQmlnTnVtYmVyKHR4TWV0aG9kLmluZGV4KS50b051bWJlcigpKTtcbiAgICAgIHRoaXMudHlwZSh0eE1ldGhvZC5wcm94eVR5cGUpO1xuICAgICAgdGhpcy5kZWxheShuZXcgQmlnTnVtYmVyKHR4TWV0aG9kLmRlbGF5KS50b1N0cmluZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgSW52YWxpZCBUcmFuc2FjdGlvbiBUeXBlOiAke3RoaXMuX21ldGhvZD8ubmFtZX0uIEV4cGVjdGVkICR7TWV0aG9kTmFtZXMuQWRkUHJveHl9IG9yICR7TWV0aG9kTmFtZXMuQW5vbnltb3VzfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKF86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIudmFsaWRhdGVUcmFuc2FjdGlvbihfKTtcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRzKCk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRmllbGRzKCk6IHZvaWQge1xuICAgIGxldCB2YWxpZGF0aW9uUmVzdWx0OiBWYWxpZGF0aW9uUmVzdWx0O1xuICAgIGlmICh0aGlzLl9kZWxlZ2F0ZSkge1xuICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMudmFsaWRhdGVBZGRQcm94eUZpZWxkcyh0aGlzLl9kZWxlZ2F0ZSwgdGhpcy5fcHJveHlUeXBlLCB0aGlzLl9kZWxheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSB0aGlzLnZhbGlkYXRlQW5vbnltb3VzUHJveHlGaWVsZHModGhpcy5faW5kZXgsIHRoaXMuX3Byb3h5VHlwZSwgdGhpcy5fZGVsYXkpO1xuICAgIH1cbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgQWRkcmVzc0luaXRpYWxpemF0aW9uIFRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVBZGRQcm94eUZpZWxkcyhkZWxlZ2F0ZTogc3RyaW5nLCBwcm94eVR5cGU6IHN0cmluZywgZGVsYXk6IHN0cmluZyk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIHJldHVybiBBZGRyZXNzSW5pdGlhbGl6YXRpb25TY2hlbWEudmFsaWRhdGUoe1xuICAgICAgZGVsZWdhdGUsXG4gICAgICBwcm94eVR5cGUsXG4gICAgICBkZWxheSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVBbm9ueW1vdXNQcm94eUZpZWxkcyhpbmRleDogbnVtYmVyLCBwcm94eVR5cGU6IHN0cmluZywgZGVsYXk6IHN0cmluZyk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIHJldHVybiBBbm9ueW1vdXNBZGRyZXNzSW5pdGlhbGl6YXRpb25TY2hlbWEudmFsaWRhdGUoe1xuICAgICAgcHJveHlUeXBlLFxuICAgICAgaW5kZXgsXG4gICAgICBkZWxheSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { TransactionType } from '@bitgo/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo/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
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
10
|
+
/** @inheritDoc */
|
|
11
|
+
protected buildTransaction(): UnsignedTransaction;
|
|
12
|
+
/**
|
|
13
|
+
* Build a transaction which batches together multiple transactions.
|
|
14
|
+
* The transactions which are batched together are passed in as an array of hex strings
|
|
15
|
+
* which are composed of the method to call and the arguments to pass into the method.
|
|
16
|
+
*
|
|
17
|
+
* @returns {UnsignedTransaction}
|
|
18
|
+
*
|
|
19
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#batchcalls-veccall
|
|
20
|
+
*/
|
|
21
|
+
protected buildBatchTransaction(): UnsignedTransaction;
|
|
22
|
+
protected get transactionType(): TransactionType;
|
|
23
|
+
/**
|
|
24
|
+
* Set multiple unsigned transactions to be batched and broadcast as a single transaction
|
|
25
|
+
*
|
|
26
|
+
* @param {BatchCall[]} calls unsigned transactions
|
|
27
|
+
* @returns {BatchTransactionBuilder} This batch transaction builder.
|
|
28
|
+
*/
|
|
29
|
+
calls(calls: string[]): this;
|
|
30
|
+
/** @inheritdoc */
|
|
31
|
+
validateDecodedTransaction(decodedTxn: DecodedSigningPayload | DecodedSignedTx): void;
|
|
32
|
+
/** @inheritdoc */
|
|
33
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
34
|
+
/** @inheritdoc */
|
|
35
|
+
validateTransaction(_: Transaction): void;
|
|
36
|
+
/**
|
|
37
|
+
* Validate list of unsigned transactions added to batch
|
|
38
|
+
*
|
|
39
|
+
* @param {string[]} calls
|
|
40
|
+
*
|
|
41
|
+
*/
|
|
42
|
+
validateCalls(calls: string[]): void;
|
|
43
|
+
private validateFields;
|
|
44
|
+
private validateBatchTransactionFields;
|
|
45
|
+
private getAnonymousProxyCall;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=batchTransactionBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batchTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/batchTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvH,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIxG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,uBAAwB,SAAQ,kBAAkB;IAC7D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC;gBAErB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAIjD;;;;;;;;OAQG;IACH,SAAS,CAAC,qBAAqB,IAAI,mBAAmB;IAWtD,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAM5B,kBAAkB;IAClB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,GAAG,IAAI;IAQrF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAyBjE,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,qBAAqB;CAa9B"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BatchTransactionBuilder = void 0;
|
|
4
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
5
|
+
const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
|
|
6
|
+
const iface_1 = require("./iface");
|
|
7
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
8
|
+
const txnSchema_1 = require("./txnSchema");
|
|
9
|
+
class BatchTransactionBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
10
|
+
constructor(_coinConfig) {
|
|
11
|
+
super(_coinConfig);
|
|
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
|
+
return txwrapper_polkadot_1.methods.utility.batch({
|
|
29
|
+
calls: this._calls,
|
|
30
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
31
|
+
}
|
|
32
|
+
get transactionType() {
|
|
33
|
+
return sdk_core_1.TransactionType.Batch;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Set multiple unsigned transactions to be batched and broadcast as a single transaction
|
|
37
|
+
*
|
|
38
|
+
* @param {BatchCall[]} calls unsigned transactions
|
|
39
|
+
* @returns {BatchTransactionBuilder} This batch transaction builder.
|
|
40
|
+
*/
|
|
41
|
+
calls(calls) {
|
|
42
|
+
this.validateCalls(calls);
|
|
43
|
+
this._calls = calls;
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
/** @inheritdoc */
|
|
47
|
+
validateDecodedTransaction(decodedTxn) {
|
|
48
|
+
const txMethod = decodedTxn.method.args;
|
|
49
|
+
const validationResult = this.validateBatchTransactionFields(txMethod.calls);
|
|
50
|
+
if (validationResult.error) {
|
|
51
|
+
throw new sdk_core_1.InvalidTransactionError(`Transaction validation failed: ${validationResult.error.message}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** @inheritdoc */
|
|
55
|
+
fromImplementation(rawTransaction) {
|
|
56
|
+
var _a, _b;
|
|
57
|
+
const tx = super.fromImplementation(rawTransaction);
|
|
58
|
+
if (((_a = this._method) === null || _a === void 0 ? void 0 : _a.name) === iface_1.MethodNames.Batch) {
|
|
59
|
+
const txMethod = this._method.args;
|
|
60
|
+
if (!txMethod.calls) {
|
|
61
|
+
throw new sdk_core_1.InvalidTransactionError('failed to decode calls from batch transaction');
|
|
62
|
+
}
|
|
63
|
+
const callsToBatch = [];
|
|
64
|
+
txMethod.calls.forEach((call) => {
|
|
65
|
+
const method = call.callIndex;
|
|
66
|
+
if (method === '0x1604') {
|
|
67
|
+
callsToBatch.push(this.getAnonymousProxyCall(call));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
throw new sdk_core_1.NotImplementedError(`batching of transactions with index ${method} unsupported`);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
this.calls(callsToBatch);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid Transaction Type: ${(_b = this._method) === null || _b === void 0 ? void 0 : _b.name}. Expected ${iface_1.MethodNames.Batch}`);
|
|
77
|
+
}
|
|
78
|
+
return tx;
|
|
79
|
+
}
|
|
80
|
+
/** @inheritdoc */
|
|
81
|
+
validateTransaction(_) {
|
|
82
|
+
super.validateTransaction(_);
|
|
83
|
+
this.validateFields();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Validate list of unsigned transactions added to batch
|
|
87
|
+
*
|
|
88
|
+
* @param {string[]} calls
|
|
89
|
+
*
|
|
90
|
+
*/
|
|
91
|
+
validateCalls(calls) {
|
|
92
|
+
calls.forEach((call) => {
|
|
93
|
+
if (call.slice(0, 2) !== '0x') {
|
|
94
|
+
// example: '0x160400000000000000'
|
|
95
|
+
throw new sdk_core_1.BuildTransactionError('call in string format must be hex format of a method and its arguments');
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
validateFields() {
|
|
100
|
+
const validationResult = this.validateBatchTransactionFields(this._calls);
|
|
101
|
+
if (validationResult.error) {
|
|
102
|
+
throw new sdk_core_1.InvalidTransactionError(`AddressInitialization Transaction validation failed: ${validationResult.error.message}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
validateBatchTransactionFields(calls) {
|
|
106
|
+
return txnSchema_1.BatchTransactionSchema.validate({
|
|
107
|
+
calls,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
getAnonymousProxyCall(callObject) {
|
|
111
|
+
var _a, _b, _c;
|
|
112
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
113
|
+
const unsigned = txwrapper_polkadot_1.methods.proxy.anonymous({
|
|
114
|
+
proxyType: (_a = callObject.args) === null || _a === void 0 ? void 0 : _a.proxy_type,
|
|
115
|
+
index: (_b = callObject.args) === null || _b === void 0 ? void 0 : _b.index,
|
|
116
|
+
delay: (_c = callObject.args) === null || _c === void 0 ? void 0 : _c.delay,
|
|
117
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
118
|
+
return unsigned.method;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.BatchTransactionBuilder = BatchTransactionBuilder;
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hUcmFuc2FjdGlvbkJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2JhdGNoVHJhbnNhY3Rpb25CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhDQUF1SDtBQUd2SCxzRUFBd0Q7QUFFeEQsbUNBQWtFO0FBRWxFLDZEQUEwRDtBQUMxRCwyQ0FBcUQ7QUFFckQsTUFBYSx1QkFBd0IsU0FBUSx1Q0FBa0I7SUFJN0QsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGdCQUFnQjtRQUN4QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLHFCQUFxQjtRQUM3QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMzQyxPQUFPLDRCQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FDMUI7WUFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDbkIsRUFDRCxVQUFVLENBQUMsVUFBVSxFQUNyQixVQUFVLENBQUMsT0FBTyxDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxLQUFlO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDBCQUEwQixDQUFDLFVBQW1EO1FBQzVFLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBNEIsQ0FBQztRQUNoRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0UsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7WUFDMUIsTUFBTSxJQUFJLGtDQUF1QixDQUFDLGtDQUFrQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUN2RztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxjQUFzQjs7UUFDakQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLElBQUksTUFBSyxtQkFBVyxDQUFDLEtBQUssRUFBRTtZQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQWlCLENBQUM7WUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7Z0JBQ25CLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO2FBQ3BGO1lBQ0QsTUFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1lBQ2xDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzlCLE1BQU0sTUFBTSxHQUFJLElBQXdCLENBQUMsU0FBUyxDQUFDO2dCQUNuRCxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUU7b0JBQ3ZCLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQXVCLENBQUMsQ0FBQyxDQUFDO2lCQUN4RTtxQkFBTTtvQkFDTCxNQUFNLElBQUksOEJBQW1CLENBQUMsdUNBQXVDLE1BQU0sY0FBYyxDQUFDLENBQUM7aUJBQzVGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzFCO2FBQU07WUFDTCxNQUFNLElBQUksa0NBQXVCLENBQy9CLDZCQUE2QixNQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLElBQUksY0FBYyxtQkFBVyxDQUFDLEtBQUssRUFBRSxDQUNqRixDQUFDO1NBQ0g7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsbUJBQW1CLENBQUMsQ0FBYztRQUNoQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGFBQWEsQ0FBQyxLQUFlO1FBQzNCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDN0Isa0NBQWtDO2dCQUNsQyxNQUFNLElBQUksZ0NBQXFCLENBQUMsd0VBQXdFLENBQUMsQ0FBQzthQUMzRztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFFLElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FDL0Isd0RBQXdELGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDekYsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLDhCQUE4QixDQUFDLEtBQW1DO1FBQ3hFLE9BQU8sa0NBQXNCLENBQUMsUUFBUSxDQUFDO1lBQ3JDLEtBQUs7U0FDTixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8scUJBQXFCLENBQUMsVUFBMkI7O1FBQ3ZELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLDRCQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDdEM7WUFDRSxTQUFTLEVBQUUsTUFBQSxVQUFVLENBQUMsSUFBSSwwQ0FBRSxVQUFVO1lBQ3RDLEtBQUssRUFBRSxNQUFBLFVBQVUsQ0FBQyxJQUFJLDBDQUFFLEtBQUs7WUFDN0IsS0FBSyxFQUFFLE1BQUEsVUFBVSxDQUFDLElBQUksMENBQUUsS0FBSztTQUM5QixFQUNELFVBQVUsQ0FBQyxVQUFVLEVBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQ25CLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBcklELDBEQXFJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVjb2RlZFNpZ25lZFR4LCBEZWNvZGVkU2lnbmluZ1BheWxvYWQsIFVuc2lnbmVkVHJhbnNhY3Rpb24gfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlJztcbmltcG9ydCB7IG1ldGhvZHMgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1wb2xrYWRvdCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnam9pJztcbmltcG9ydCB7IEJhdGNoQ2FsbE9iamVjdCwgQmF0Y2hBcmdzLCBNZXRob2ROYW1lcyB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEJhdGNoVHJhbnNhY3Rpb25TY2hlbWEgfSBmcm9tICcuL3R4blNjaGVtYSc7XG5cbmV4cG9ydCBjbGFzcyBCYXRjaFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfY2FsbHM6IHN0cmluZ1tdO1xuICBwcm90ZWN0ZWQgX3R5cGU6IFRyYW5zYWN0aW9uVHlwZTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkVHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRCYXRjaFRyYW5zYWN0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSB0cmFuc2FjdGlvbiB3aGljaCBiYXRjaGVzIHRvZ2V0aGVyIG11bHRpcGxlIHRyYW5zYWN0aW9ucy5cbiAgICogVGhlIHRyYW5zYWN0aW9ucyB3aGljaCBhcmUgYmF0Y2hlZCB0b2dldGhlciBhcmUgcGFzc2VkIGluIGFzIGFuIGFycmF5IG9mIGhleCBzdHJpbmdzXG4gICAqIHdoaWNoIGFyZSBjb21wb3NlZCBvZiB0aGUgbWV0aG9kIHRvIGNhbGwgYW5kIHRoZSBhcmd1bWVudHMgdG8gcGFzcyBpbnRvIHRoZSBtZXRob2QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtVbnNpZ25lZFRyYW5zYWN0aW9ufVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vcG9sa2Fkb3QuanMub3JnL2RvY3Mvc3Vic3RyYXRlL2V4dHJpbnNpY3MvI2JhdGNoY2FsbHMtdmVjY2FsbFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkQmF0Y2hUcmFuc2FjdGlvbigpOiBVbnNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBiYXNlVHhJbmZvID0gdGhpcy5jcmVhdGVCYXNlVHhJbmZvKCk7XG4gICAgcmV0dXJuIG1ldGhvZHMudXRpbGl0eS5iYXRjaChcbiAgICAgIHtcbiAgICAgICAgY2FsbHM6IHRoaXMuX2NhbGxzLFxuICAgICAgfSxcbiAgICAgIGJhc2VUeEluZm8uYmFzZVR4SW5mbyxcbiAgICAgIGJhc2VUeEluZm8ub3B0aW9uc1xuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQmF0Y2g7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG11bHRpcGxlIHVuc2lnbmVkIHRyYW5zYWN0aW9ucyB0byBiZSBiYXRjaGVkIGFuZCBicm9hZGNhc3QgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtCYXRjaENhbGxbXX0gY2FsbHMgdW5zaWduZWQgdHJhbnNhY3Rpb25zXG4gICAqIEByZXR1cm5zIHtCYXRjaFRyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyBiYXRjaCB0cmFuc2FjdGlvbiBidWlsZGVyLlxuICAgKi9cbiAgY2FsbHMoY2FsbHM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUNhbGxzKGNhbGxzKTtcbiAgICB0aGlzLl9jYWxscyA9IGNhbGxzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uKGRlY29kZWRUeG46IERlY29kZWRTaWduaW5nUGF5bG9hZCB8IERlY29kZWRTaWduZWRUeCk6IHZvaWQge1xuICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4bi5tZXRob2QuYXJncyBhcyB1bmtub3duIGFzIEJhdGNoQXJncztcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdGhpcy52YWxpZGF0ZUJhdGNoVHJhbnNhY3Rpb25GaWVsZHModHhNZXRob2QuY2FsbHMpO1xuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYFRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gc3VwZXIuZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICBpZiAodGhpcy5fbWV0aG9kPy5uYW1lID09PSBNZXRob2ROYW1lcy5CYXRjaCkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSB0aGlzLl9tZXRob2QuYXJncyBhcyBCYXRjaEFyZ3M7XG4gICAgICBpZiAoIXR4TWV0aG9kLmNhbGxzKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignZmFpbGVkIHRvIGRlY29kZSBjYWxscyBmcm9tIGJhdGNoIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBjYWxsc1RvQmF0Y2g6IHN0cmluZ1tdID0gW107XG4gICAgICB0eE1ldGhvZC5jYWxscy5mb3JFYWNoKChjYWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IChjYWxsIGFzIEJhdGNoQ2FsbE9iamVjdCkuY2FsbEluZGV4O1xuICAgICAgICBpZiAobWV0aG9kID09PSAnMHgxNjA0Jykge1xuICAgICAgICAgIGNhbGxzVG9CYXRjaC5wdXNoKHRoaXMuZ2V0QW5vbnltb3VzUHJveHlDYWxsKGNhbGwgYXMgQmF0Y2hDYWxsT2JqZWN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoYGJhdGNoaW5nIG9mIHRyYW5zYWN0aW9ucyB3aXRoIGluZGV4ICR7bWV0aG9kfSB1bnN1cHBvcnRlZGApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FsbHMoY2FsbHNUb0JhdGNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgSW52YWxpZCBUcmFuc2FjdGlvbiBUeXBlOiAke3RoaXMuX21ldGhvZD8ubmFtZX0uIEV4cGVjdGVkICR7TWV0aG9kTmFtZXMuQmF0Y2h9YFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24oXzogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci52YWxpZGF0ZVRyYW5zYWN0aW9uKF8pO1xuICAgIHRoaXMudmFsaWRhdGVGaWVsZHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBsaXN0IG9mIHVuc2lnbmVkIHRyYW5zYWN0aW9ucyBhZGRlZCB0byBiYXRjaFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBjYWxsc1xuICAgKlxuICAgKi9cbiAgdmFsaWRhdGVDYWxscyhjYWxsczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjYWxscy5mb3JFYWNoKChjYWxsKSA9PiB7XG4gICAgICBpZiAoY2FsbC5zbGljZSgwLCAyKSAhPT0gJzB4Jykge1xuICAgICAgICAvLyBleGFtcGxlOiAnMHgxNjA0MDAwMDAwMDAwMDAwMDAnXG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2NhbGwgaW4gc3RyaW5nIGZvcm1hdCBtdXN0IGJlIGhleCBmb3JtYXQgb2YgYSBtZXRob2QgYW5kIGl0cyBhcmd1bWVudHMnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVGaWVsZHMoKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMudmFsaWRhdGVCYXRjaFRyYW5zYWN0aW9uRmllbGRzKHRoaXMuX2NhbGxzKTtcbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgQWRkcmVzc0luaXRpYWxpemF0aW9uIFRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVCYXRjaFRyYW5zYWN0aW9uRmllbGRzKGNhbGxzOiAoc3RyaW5nIHwgQmF0Y2hDYWxsT2JqZWN0KVtdKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIEJhdGNoVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGUoe1xuICAgICAgY2FsbHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFub255bW91c1Byb3h5Q2FsbChjYWxsT2JqZWN0OiBCYXRjaENhbGxPYmplY3QpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VUeEluZm8gPSB0aGlzLmNyZWF0ZUJhc2VUeEluZm8oKTtcbiAgICBjb25zdCB1bnNpZ25lZCA9IG1ldGhvZHMucHJveHkuYW5vbnltb3VzKFxuICAgICAge1xuICAgICAgICBwcm94eVR5cGU6IGNhbGxPYmplY3QuYXJncz8ucHJveHlfdHlwZSxcbiAgICAgICAgaW5kZXg6IGNhbGxPYmplY3QuYXJncz8uaW5kZXgsXG4gICAgICAgIGRlbGF5OiBjYWxsT2JqZWN0LmFyZ3M/LmRlbGF5LFxuICAgICAgfSxcbiAgICAgIGJhc2VUeEluZm8uYmFzZVR4SW5mbyxcbiAgICAgIGJhc2VUeEluZm8ub3B0aW9uc1xuICAgICk7XG4gICAgcmV0dXJuIHVuc2lnbmVkLm1ldGhvZDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { BaseAddress, TransactionType } from '@bitgo/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
3
|
+
import { DecodedSignedTx, DecodedSigningPayload, UnsignedTransaction } from '@substrate/txwrapper-core';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
6
|
+
export declare class ClaimBuilder extends TransactionBuilder {
|
|
7
|
+
protected _validatorStash: string;
|
|
8
|
+
protected _claimEra: string;
|
|
9
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* Pay out all the stakers behind a single validator for a single era.
|
|
13
|
+
* Any account can create this transaction.
|
|
14
|
+
*
|
|
15
|
+
* @returns {UnsignedTransaction} an unsigned Dot transaction
|
|
16
|
+
*
|
|
17
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#payoutstakersvalidator_stash-accountid32-era-u32
|
|
18
|
+
*/
|
|
19
|
+
protected buildTransaction(): UnsignedTransaction;
|
|
20
|
+
/**
|
|
21
|
+
* Get the transaction type.
|
|
22
|
+
*/
|
|
23
|
+
protected get transactionType(): TransactionType;
|
|
24
|
+
/**
|
|
25
|
+
*
|
|
26
|
+
* The stash account of the validator.
|
|
27
|
+
*
|
|
28
|
+
* @param {string} validatorStash
|
|
29
|
+
* @returns {ClaimBuilder} This claim builder.
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
validatorStash(validatorStash: BaseAddress): this;
|
|
33
|
+
/**
|
|
34
|
+
* The era to claim.
|
|
35
|
+
*
|
|
36
|
+
* @param {string} claimEra
|
|
37
|
+
* @returns {ClaimBuilder} This claim builder.
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
claimEra(claimEra: string): this;
|
|
41
|
+
/** @inheritdoc */
|
|
42
|
+
validateDecodedTransaction(decodedTxn: DecodedSigningPayload | DecodedSignedTx): void;
|
|
43
|
+
/** @inheritdoc */
|
|
44
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
45
|
+
/** @inheritdoc */
|
|
46
|
+
validateTransaction(_: Transaction): void;
|
|
47
|
+
/**
|
|
48
|
+
*
|
|
49
|
+
* The stash account of the validator.
|
|
50
|
+
*
|
|
51
|
+
* @param {string} claimEra
|
|
52
|
+
* @param {string} validatorStash
|
|
53
|
+
* @throws {Error} If the expected fields are not valid.
|
|
54
|
+
*
|
|
55
|
+
*/
|
|
56
|
+
private validateFields;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=claimBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claimBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/claimBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA0C,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIxG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D,qBAAa,YAAa,SAAQ,kBAAkB;IAClD,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEhB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;;;;;OAQG;IACH,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IAYjD;;OAEG;IACH,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;;;OAOG;IACH,cAAc,CAAC,cAAc,EAAE,WAAW,GAAG,IAAI;IAMjD;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMhC,kBAAkB;IAClB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,GAAG,IAAI;IAYrF,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAiBjE,kBAAkB;IAClB,mBAAmB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI;IAKzC;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;CAYvB"}
|