@bitgo-beta/sdk-coin-dot 1.0.1
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 +24 -0
- package/LICENSE +191 -0
- package/README.md +30 -0
- package/dist/src/dot.d.ts +147 -0
- package/dist/src/dot.d.ts.map +1 -0
- package/dist/src/dot.js +355 -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 +204 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +40 -0
- package/dist/src/lib/index.d.ts +18 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +55 -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/nativeTransferBuilder.d.ts +81 -0
- package/dist/src/lib/nativeTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/nativeTransferBuilder.js +213 -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 +410 -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 +95 -0
- package/dist/src/lib/transferBuilder.d.ts +11 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +11 -0
- package/dist/src/lib/txnSchema.d.ts +15 -0
- package/dist/src/lib/txnSchema.d.ts.map +1 -0
- package/dist/src/lib/txnSchema.js +107 -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 +146 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +287 -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 +65 -0
|
@@ -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-beta/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBNkY7QUFHN0Ysc0VBQXdEO0FBQ3hELGdFQUFxQztBQUVyQyxtQ0FBc0Y7QUFFdEYsNkRBQTBEO0FBQzFELDJDQUFnRztBQUVoRyxNQUFhLDRCQUE2QixTQUFRLHVDQUFrQjtJQU1sRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUhYLFdBQU0sR0FBRyxDQUFDLENBQUM7SUFJckIsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGdCQUFnQjtRQUN4QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUN4QzthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztTQUM5QztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDTyx3QkFBd0I7UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsT0FBTyw0QkFBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzNCO1lBQ0UsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3hCLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMxQixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDbkIsRUFDRCxVQUFVLENBQUMsVUFBVSxFQUNyQixVQUFVLENBQUMsT0FBTyxDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDTyw4QkFBOEI7UUFDdEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsT0FBTyw0QkFBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENB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LENBQUMsU0FBUyxFQUFFO1lBQ2xCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlGO2FBQU07WUFDTCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNqRztRQUNELElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FDL0Isd0RBQXdELGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDekYsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxLQUFhO1FBQy9FLE9BQU8sdUNBQTJCLENBQUMsUUFBUSxDQUFDO1lBQzFDLFFBQVE7WUFDUixTQUFTO1lBQ1QsS0FBSztTQUNOLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxLQUFhLEVBQUUsU0FBaUIsRUFBRSxLQUFhO1FBQ2xGLE9BQU8sZ0RBQW9DLENBQUMsUUFBUSxDQUFDO1lBQ25ELFNBQVM7WUFDVCxLQUFLO1lBQ0wsS0FBSztTQUNOLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxNRCxvRUFrTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQWRkcmVzcywgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IERlY29kZWRTaWduZWRUeCwgRGVjb2RlZFNpZ25pbmdQYXlsb2FkLCBVbnNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZSc7XG5pbXBvcnQgeyBtZXRob2RzIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJ2pvaSc7XG5pbXBvcnQgeyBBZGRBbm9ueW1vdXNQcm94eUFyZ3MsIEFkZFByb3h5QXJncywgTWV0aG9kTmFtZXMsIFByb3h5VHlwZSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEFkZHJlc3NJbml0aWFsaXphdGlvblNjaGVtYSwgQW5vbnltb3VzQWRkcmVzc0luaXRpYWxpemF0aW9uU2NoZW1hIH0gZnJvbSAnLi90eG5TY2hlbWEnO1xuXG5leHBvcnQgY2xhc3MgQWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfZGVsZWdhdGU6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9wcm94eVR5cGU6IFByb3h5VHlwZTtcbiAgcHJvdGVjdGVkIF9kZWxheTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX2luZGV4ID0gMDtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkVHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgaWYgKHRoaXMuX2RlbGVnYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZEFkZFByb3h5VHJhbnNhY3Rpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRBbm9ueW1vdXNQcm94eVRyYW5zYWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgcHJveHkgYWNjb3VudCBmb3IgdGhlIHNlbmRlciB0aGF0IGlzIGFibGUgdG8gbWFrZSBjYWxscyBvbiBpdHMgYmVoYWxmLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VW5zaWduZWRUcmFuc2FjdGlvbn0gYW4gdW5zaWduZWQgRG90IHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9wb2xrYWRvdC5qcy5vcmcvZG9jcy9zdWJzdHJhdGUvZXh0cmluc2ljcy8jcHJveHlcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEFkZFByb3h5VHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgYmFzZVR4SW5mbyA9IHRoaXMuY3JlYXRlQmFzZVR4SW5mbygpO1xuICAgIHJldHVybiBtZXRob2RzLnByb3h5LmFkZFByb3h5KFxuICAgICAge1xuICAgICAgICBkZWxlZ2F0ZTogdGhpcy5fZGVsZWdhdGUsXG4gICAgICAgIHByb3h5VHlwZTogdGhpcy5fcHJveHlUeXBlLFxuICAgICAgICBkZWxheTogdGhpcy5fZGVsYXksXG4gICAgICB9LFxuICAgICAgYmFzZVR4SW5mby5iYXNlVHhJbmZvLFxuICAgICAgYmFzZVR4SW5mby5vcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGF3biBhIHJlY2VpdmUgYWRkcmVzcyBmb3IgdGhlIHNlbmRlclxuICAgKlxuICAgKiBAcmV0dXJuIHtVbnNpZ25lZFRyYW5zYWN0aW9ufSBhbiB1bnNpZ25lZCBEb3QgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEFub255bW91c1Byb3h5VHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgYmFzZVR4SW5mbyA9IHRoaXMuY3JlYXRlQmFzZVR4SW5mbygpO1xuICAgIHJldHVybiBtZXRob2RzLnByb3h5LmFub255bW91cyhcbiAgICAgIHtcbiAgICAgICAgcHJveHlUeXBlOiB0aGlzLl9wcm94eVR5cGUsXG4gICAgICAgIGluZGV4OiB0aGlzLl9pbmRleCxcbiAgICAgICAgZGVsYXk6IHBhcnNlSW50KHRoaXMuX2RlbGF5LCAxMCksXG4gICAgICB9LFxuICAgICAgYmFzZVR4SW5mby5iYXNlVHhJbmZvLFxuICAgICAgYmFzZVR4SW5mby5vcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5BZGRyZXNzSW5pdGlhbGl6YXRpb247XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFjY291bnQgdG8gZGVsZWdhdGUgYXV0aCB0by5cbiAgICpcbiAgICogQHBhcmFtIHtCYXNlQWRkcmVzc30gb3duZXJcbiAgICogQHJldHVybnMge0FkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXJ9IFRoaXMgYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3dpa2kucG9sa2Fkb3QubmV0d29yay9kb2NzL2xlYXJuLXByb3hpZXMjd2h5LXVzZS1hLXByb3h5XG4gICAqL1xuICBvd25lcihvd25lcjogQmFzZUFkZHJlc3MpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6IG93bmVyLmFkZHJlc3MgfSk7XG4gICAgdGhpcy5fZGVsZWdhdGUgPSBvd25lci5hZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgZm9yIGRpc2FtYmlndWF0aW9uIGlmIG11bHRpcGxlIGNhbGxzIGFyZSBtYWRlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uXG4gICAqIFVzZSAwIGFzIGEgZGVmYXVsdFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICpcbiAgICogQHJldHVybnMge0FkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNmZXIgYnVpbGRlci5cbiAgICovXG4gIGluZGV4KGluZGV4OiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihpbmRleCkpO1xuICAgIHRoaXMuX2luZGV4ID0gaW5kZXg7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHByb3h5IHR5cGUgdG8gYWRkLlxuICAgKlxuICAgKiBAcGFyYW0ge3Byb3h5VHlwZX0gcHJveHlUeXBlXG4gICAqIEByZXR1cm5zIHtBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyfSBUaGlzIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93aWtpLnBvbGthZG90Lm5ldHdvcmsvZG9jcy9sZWFybi1wcm94aWVzI3Byb3h5LXR5cGVzXG4gICAqL1xuICB0eXBlKHByb3h5VHlwZTogUHJveHlUeXBlKTogdGhpcyB7XG4gICAgdGhpcy5fcHJveHlUeXBlID0gcHJveHlUeXBlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgYmxvY2tzIHRoYXQgYW4gYW5ub3VuY2VtZW50IG11c3QgYmUgaW4gcGxhY2UgZm9yLlxuICAgKiBiZWZvcmUgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbCBtYXkgYmUgZGlzcGF0Y2hlZC5cbiAgICogSWYgemVybywgdGhlbiBubyBhbm5vdW5jZW1lbnQgaXMgbmVlZGVkLlxuICAgKiBUT0RPOiBtb3ZlIHRvIHRoZSB2YWxpZGl0eSB3aW5kb3cgbWV0aG9kIG9uY2UgaXQgaGFzIGJlZW4gc3RhbmRhcmRpemVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZWxheVxuICAgKiBAcmV0dXJucyB7QWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2ZlciBidWlsZGVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd2lraS5wb2xrYWRvdC5uZXR3b3JrL2RvY3MvbGVhcm4tcHJveGllcyN0aW1lLWRlbGF5ZWQtcHJveGllc1xuICAgKi9cbiAgZGVsYXkoZGVsYXk6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWYWx1ZShuZXcgQmlnTnVtYmVyKHBhcnNlSW50KGRlbGF5LCAxMCkpKTtcbiAgICB0aGlzLl9kZWxheSA9IGRlbGF5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uKGRlY29kZWRUeG46IERlY29kZWRTaWduaW5nUGF5bG9hZCB8IERlY29kZWRTaWduZWRUeCk6IHZvaWQge1xuICAgIGxldCB2YWxpZGF0aW9uUmVzdWx0O1xuICAgIGlmIChkZWNvZGVkVHhuLm1ldGhvZD8ubmFtZSA9PT0gTWV0aG9kTmFtZXMuQWRkUHJveHkpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gZGVjb2RlZFR4bi5tZXRob2QuYXJncyBhcyB1bmtub3duIGFzIEFkZFByb3h5QXJncztcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSB0aGlzLnZhbGlkYXRlQWRkUHJveHlGaWVsZHModHhNZXRob2QuZGVsZWdhdGUsIHR4TWV0aG9kLnByb3h5VHlwZSwgdHhNZXRob2QuZGVsYXkpO1xuICAgIH0gZWxzZSBpZiAoZGVjb2RlZFR4bi5tZXRob2Q/Lm5hbWUgPT09IE1ldGhvZE5hbWVzLkFub255bW91cykge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgQWRkQW5vbnltb3VzUHJveHlBcmdzO1xuICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMudmFsaWRhdGVBbm9ueW1vdXNQcm94eUZpZWxkcyhcbiAgICAgICAgcGFyc2VJbnQodHhNZXRob2QuaW5kZXgsIDEwKSxcbiAgICAgICAgdHhNZXRob2QucHJveHlUeXBlLFxuICAgICAgICB0eE1ldGhvZC5kZWxheVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBzdXBlci5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGlmICh0aGlzLl9tZXRob2Q/Lm5hbWUgPT09IE1ldGhvZE5hbWVzLkFkZFByb3h5KSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IHRoaXMuX21ldGhvZC5hcmdzIGFzIEFkZFByb3h5QXJncztcbiAgICAgIHRoaXMub3duZXIoeyBhZGRyZXNzOiB0eE1ldGhvZC5kZWxlZ2F0ZSB9KTtcbiAgICAgIHRoaXMudHlwZSh0eE1ldGhvZC5wcm94eVR5cGUpO1xuICAgICAgdGhpcy5kZWxheShuZXcgQmlnTnVtYmVyKHR4TWV0aG9kLmRlbGF5KS50b1N0cmluZygpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX21ldGhvZD8ubmFtZSA9PT0gTWV0aG9kTmFtZXMuQW5vbnltb3VzKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IHRoaXMuX21ldGhvZC5hcmdzIGFzIEFkZEFub255bW91c1Byb3h5QXJncztcbiAgICAgIHRoaXMuaW5kZXgobmV3IEJpZ051bWJlcih0eE1ldGhvZC5pbmRleCkudG9OdW1iZXIoKSk7XG4gICAgICB0aGlzLnR5cGUodHhNZXRob2QucHJveHlUeXBlKTtcbiAgICAgIHRoaXMuZGVsYXkobmV3IEJpZ051bWJlcih0eE1ldGhvZC5kZWxheSkudG9TdHJpbmcoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEludmFsaWQgVHJhbnNhY3Rpb24gVHlwZTogJHt0aGlzLl9tZXRob2Q/Lm5hbWV9LiBFeHBlY3RlZCAke01ldGhvZE5hbWVzLkFkZFByb3h5fSBvciAke01ldGhvZE5hbWVzLkFub255bW91c31gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbihfOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24oXyk7XG4gICAgdGhpcy52YWxpZGF0ZUZpZWxkcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZpZWxkcygpOiB2b2lkIHtcbiAgICBsZXQgdmFsaWRhdGlvblJlc3VsdDogVmFsaWRhdGlvblJlc3VsdDtcbiAgICBpZiAodGhpcy5fZGVsZWdhdGUpIHtcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSB0aGlzLnZhbGlkYXRlQWRkUHJveHlGaWVsZHModGhpcy5fZGVsZWdhdGUsIHRoaXMuX3Byb3h5VHlwZSwgdGhpcy5fZGVsYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZGF0aW9uUmVzdWx0ID0gdGhpcy52YWxpZGF0ZUFub255bW91c1Byb3h5RmllbGRzKHRoaXMuX2luZGV4LCB0aGlzLl9wcm94eVR5cGUsIHRoaXMuX2RlbGF5KTtcbiAgICB9XG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEFkZHJlc3NJbml0aWFsaXphdGlvbiBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQWRkUHJveHlGaWVsZHMoZGVsZWdhdGU6IHN0cmluZywgcHJveHlUeXBlOiBzdHJpbmcsIGRlbGF5OiBzdHJpbmcpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gQWRkcmVzc0luaXRpYWxpemF0aW9uU2NoZW1hLnZhbGlkYXRlKHtcbiAgICAgIGRlbGVnYXRlLFxuICAgICAgcHJveHlUeXBlLFxuICAgICAgZGVsYXksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQW5vbnltb3VzUHJveHlGaWVsZHMoaW5kZXg6IG51bWJlciwgcHJveHlUeXBlOiBzdHJpbmcsIGRlbGF5OiBzdHJpbmcpOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4gQW5vbnltb3VzQWRkcmVzc0luaXRpYWxpemF0aW9uU2NoZW1hLnZhbGlkYXRlKHtcbiAgICAgIHByb3h5VHlwZSxcbiAgICAgIGluZGV4LFxuICAgICAgZGVsYXksXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { DecodedSignedTx, DecodedSigningPayload, UnsignedTransaction } from '@substrate/txwrapper-core';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
6
|
+
export declare class BatchTransactionBuilder extends TransactionBuilder {
|
|
7
|
+
protected _calls: string[];
|
|
8
|
+
protected _type: TransactionType;
|
|
9
|
+
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,sBAAsB,CAAC;AAC5H,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,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-beta/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hUcmFuc2FjdGlvbkJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2JhdGNoVHJhbnNhY3Rpb25CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUE0SDtBQUc1SCxzRUFBd0Q7QUFFeEQsbUNBQWtFO0FBRWxFLDZEQUEwRDtBQUMxRCwyQ0FBcUQ7QUFFckQsTUFBYSx1QkFBd0IsU0FBUSx1Q0FBa0I7SUFJN0QsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGdCQUFnQjtRQUN4QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLHFCQUFxQjtRQUM3QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMzQyxPQUFPLDRCQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FDMUI7WUFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDbkIsRUFDRCxVQUFVLENBQUMsVUFBVSxFQUNyQixVQUFVLENBQUMsT0FBTyxDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxLQUFlO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDBCQUEwQixDQUFDLFVBQW1EO1FBQzVFLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBNEIsQ0FBQztRQUNoRSxNQUFNLGdCQUFnQixH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TUFBQSxVQUFVLENBQUMsSUFBSSwwQ0FBRSxVQUFVO1lBQ3RDLEtBQUssRUFBRSxNQUFBLFVBQVUsQ0FBQyxJQUFJLDBDQUFFLEtBQUs7WUFDN0IsS0FBSyxFQUFFLE1BQUEsVUFBVSxDQUFDLElBQUksMENBQUUsS0FBSztTQUM5QixFQUNELFVBQVUsQ0FBQyxVQUFVLEVBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQ25CLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBcklELDBEQXFJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IERlY29kZWRTaWduZWRUeCwgRGVjb2RlZFNpZ25pbmdQYXlsb2FkLCBVbnNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZSc7XG5pbXBvcnQgeyBtZXRob2RzIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJ2pvaSc7XG5pbXBvcnQgeyBCYXRjaENhbGxPYmplY3QsIEJhdGNoQXJncywgTWV0aG9kTmFtZXMgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBCYXRjaFRyYW5zYWN0aW9uU2NoZW1hIH0gZnJvbSAnLi90eG5TY2hlbWEnO1xuXG5leHBvcnQgY2xhc3MgQmF0Y2hUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX2NhbGxzOiBzdHJpbmdbXTtcbiAgcHJvdGVjdGVkIF90eXBlOiBUcmFuc2FjdGlvblR5cGU7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBidWlsZFRyYW5zYWN0aW9uKCk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQmF0Y2hUcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgdHJhbnNhY3Rpb24gd2hpY2ggYmF0Y2hlcyB0b2dldGhlciBtdWx0aXBsZSB0cmFuc2FjdGlvbnMuXG4gICAqIFRoZSB0cmFuc2FjdGlvbnMgd2hpY2ggYXJlIGJhdGNoZWQgdG9nZXRoZXIgYXJlIHBhc3NlZCBpbiBhcyBhbiBhcnJheSBvZiBoZXggc3RyaW5nc1xuICAgKiB3aGljaCBhcmUgY29tcG9zZWQgb2YgdGhlIG1ldGhvZCB0byBjYWxsIGFuZCB0aGUgYXJndW1lbnRzIHRvIHBhc3MgaW50byB0aGUgbWV0aG9kLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VW5zaWduZWRUcmFuc2FjdGlvbn1cbiAgICpcbiAgICogQHNlZSBodHRwczovL3BvbGthZG90LmpzLm9yZy9kb2NzL3N1YnN0cmF0ZS9leHRyaW5zaWNzLyNiYXRjaGNhbGxzLXZlY2NhbGxcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEJhdGNoVHJhbnNhY3Rpb24oKTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgYmFzZVR4SW5mbyA9IHRoaXMuY3JlYXRlQmFzZVR4SW5mbygpO1xuICAgIHJldHVybiBtZXRob2RzLnV0aWxpdHkuYmF0Y2goXG4gICAgICB7XG4gICAgICAgIGNhbGxzOiB0aGlzLl9jYWxscyxcbiAgICAgIH0sXG4gICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICBiYXNlVHhJbmZvLm9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkJhdGNoO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBtdWx0aXBsZSB1bnNpZ25lZCB0cmFuc2FjdGlvbnMgdG8gYmUgYmF0Y2hlZCBhbmQgYnJvYWRjYXN0IGFzIGEgc2luZ2xlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7QmF0Y2hDYWxsW119IGNhbGxzIHVuc2lnbmVkIHRyYW5zYWN0aW9uc1xuICAgKiBAcmV0dXJucyB7QmF0Y2hUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgYmF0Y2ggdHJhbnNhY3Rpb24gYnVpbGRlci5cbiAgICovXG4gIGNhbGxzKGNhbGxzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVDYWxscyhjYWxscyk7XG4gICAgdGhpcy5fY2FsbHMgPSBjYWxscztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZURlY29kZWRUcmFuc2FjdGlvbihkZWNvZGVkVHhuOiBEZWNvZGVkU2lnbmluZ1BheWxvYWQgfCBEZWNvZGVkU2lnbmVkVHgpOiB2b2lkIHtcbiAgICBjb25zdCB0eE1ldGhvZCA9IGRlY29kZWRUeG4ubWV0aG9kLmFyZ3MgYXMgdW5rbm93biBhcyBCYXRjaEFyZ3M7XG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHRoaXMudmFsaWRhdGVCYXRjaFRyYW5zYWN0aW9uRmllbGRzKHR4TWV0aG9kLmNhbGxzKTtcbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eCA9IHN1cGVyLmZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgaWYgKHRoaXMuX21ldGhvZD8ubmFtZSA9PT0gTWV0aG9kTmFtZXMuQmF0Y2gpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gdGhpcy5fbWV0aG9kLmFyZ3MgYXMgQmF0Y2hBcmdzO1xuICAgICAgaWYgKCF0eE1ldGhvZC5jYWxscykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ2ZhaWxlZCB0byBkZWNvZGUgY2FsbHMgZnJvbSBiYXRjaCB0cmFuc2FjdGlvbicpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FsbHNUb0JhdGNoOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgdHhNZXRob2QuY2FsbHMuZm9yRWFjaCgoY2FsbCkgPT4ge1xuICAgICAgICBjb25zdCBtZXRob2QgPSAoY2FsbCBhcyBCYXRjaENhbGxPYmplY3QpLmNhbGxJbmRleDtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJzB4MTYwNCcpIHtcbiAgICAgICAgICBjYWxsc1RvQmF0Y2gucHVzaCh0aGlzLmdldEFub255bW91c1Byb3h5Q2FsbChjYWxsIGFzIEJhdGNoQ2FsbE9iamVjdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKGBiYXRjaGluZyBvZiB0cmFuc2FjdGlvbnMgd2l0aCBpbmRleCAke21ldGhvZH0gdW5zdXBwb3J0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNhbGxzKGNhbGxzVG9CYXRjaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEludmFsaWQgVHJhbnNhY3Rpb24gVHlwZTogJHt0aGlzLl9tZXRob2Q/Lm5hbWV9LiBFeHBlY3RlZCAke01ldGhvZE5hbWVzLkJhdGNofWBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKF86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIudmFsaWRhdGVUcmFuc2FjdGlvbihfKTtcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRzKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgbGlzdCBvZiB1bnNpZ25lZCB0cmFuc2FjdGlvbnMgYWRkZWQgdG8gYmF0Y2hcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gY2FsbHNcbiAgICpcbiAgICovXG4gIHZhbGlkYXRlQ2FsbHMoY2FsbHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY2FsbHMuZm9yRWFjaCgoY2FsbCkgPT4ge1xuICAgICAgaWYgKGNhbGwuc2xpY2UoMCwgMikgIT09ICcweCcpIHtcbiAgICAgICAgLy8gZXhhbXBsZTogJzB4MTYwNDAwMDAwMDAwMDAwMDAwJ1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdjYWxsIGluIHN0cmluZyBmb3JtYXQgbXVzdCBiZSBoZXggZm9ybWF0IG9mIGEgbWV0aG9kIGFuZCBpdHMgYXJndW1lbnRzJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRmllbGRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB0aGlzLnZhbGlkYXRlQmF0Y2hUcmFuc2FjdGlvbkZpZWxkcyh0aGlzLl9jYWxscyk7XG4gICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEFkZHJlc3NJbml0aWFsaXphdGlvbiBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQmF0Y2hUcmFuc2FjdGlvbkZpZWxkcyhjYWxsczogKHN0cmluZyB8IEJhdGNoQ2FsbE9iamVjdClbXSk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIHJldHVybiBCYXRjaFRyYW5zYWN0aW9uU2NoZW1hLnZhbGlkYXRlKHtcbiAgICAgIGNhbGxzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbm9ueW1vdXNQcm94eUNhbGwoY2FsbE9iamVjdDogQmF0Y2hDYWxsT2JqZWN0KTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVHhJbmZvID0gdGhpcy5jcmVhdGVCYXNlVHhJbmZvKCk7XG4gICAgY29uc3QgdW5zaWduZWQgPSBtZXRob2RzLnByb3h5LmFub255bW91cyhcbiAgICAgIHtcbiAgICAgICAgcHJveHlUeXBlOiBjYWxsT2JqZWN0LmFyZ3M/LnByb3h5X3R5cGUsXG4gICAgICAgIGluZGV4OiBjYWxsT2JqZWN0LmFyZ3M/LmluZGV4LFxuICAgICAgICBkZWxheTogY2FsbE9iamVjdC5hcmdzPy5kZWxheSxcbiAgICAgIH0sXG4gICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICBiYXNlVHhJbmZvLm9wdGlvbnNcbiAgICApO1xuICAgIHJldHVybiB1bnNpZ25lZC5tZXRob2Q7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { BaseAddress, TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { DecodedSignedTx, DecodedSigningPayload, UnsignedTransaction } from '@substrate/txwrapper-core';
|
|
4
|
+
import { 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,sBAAsB,CAAC;AAC5G,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
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.ClaimBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/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
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
14
|
+
class ClaimBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
15
|
+
constructor(_coinConfig) {
|
|
16
|
+
super(_coinConfig);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* Pay out all the stakers behind a single validator for a single era.
|
|
21
|
+
* Any account can create this transaction.
|
|
22
|
+
*
|
|
23
|
+
* @returns {UnsignedTransaction} an unsigned Dot transaction
|
|
24
|
+
*
|
|
25
|
+
* @see https://polkadot.js.org/docs/substrate/extrinsics/#payoutstakersvalidator_stash-accountid32-era-u32
|
|
26
|
+
*/
|
|
27
|
+
buildTransaction() {
|
|
28
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
29
|
+
return txwrapper_polkadot_1.methods.staking.payoutStakers({
|
|
30
|
+
validatorStash: this._validatorStash,
|
|
31
|
+
era: this._claimEra,
|
|
32
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the transaction type.
|
|
36
|
+
*/
|
|
37
|
+
get transactionType() {
|
|
38
|
+
return sdk_core_1.TransactionType.StakingClaim;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
*
|
|
42
|
+
* The stash account of the validator.
|
|
43
|
+
*
|
|
44
|
+
* @param {string} validatorStash
|
|
45
|
+
* @returns {ClaimBuilder} This claim builder.
|
|
46
|
+
*
|
|
47
|
+
*/
|
|
48
|
+
validatorStash(validatorStash) {
|
|
49
|
+
this.validateAddress(validatorStash);
|
|
50
|
+
this._validatorStash = validatorStash.address;
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The era to claim.
|
|
55
|
+
*
|
|
56
|
+
* @param {string} claimEra
|
|
57
|
+
* @returns {ClaimBuilder} This claim builder.
|
|
58
|
+
*
|
|
59
|
+
*/
|
|
60
|
+
claimEra(claimEra) {
|
|
61
|
+
this.validateValue(new bignumber_js_1.default(claimEra));
|
|
62
|
+
this._claimEra = claimEra;
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
/** @inheritdoc */
|
|
66
|
+
validateDecodedTransaction(decodedTxn) {
|
|
67
|
+
var _a;
|
|
68
|
+
if (((_a = decodedTxn.method) === null || _a === void 0 ? void 0 : _a.name) === iface_1.MethodNames.PayoutStakers) {
|
|
69
|
+
const txMethod = decodedTxn.method.args;
|
|
70
|
+
const claimEra = txMethod.era;
|
|
71
|
+
const validatorStash = txMethod.validatorStash;
|
|
72
|
+
const validationResult = txnSchema_1.ClaimTransactionSchema.validate({ claimEra, validatorStash });
|
|
73
|
+
if (validationResult.error) {
|
|
74
|
+
throw new sdk_core_1.InvalidTransactionError(`Claim Transaction validation failed: ${validationResult.error.message}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** @inheritdoc */
|
|
79
|
+
fromImplementation(rawTransaction) {
|
|
80
|
+
var _a, _b;
|
|
81
|
+
const tx = super.fromImplementation(rawTransaction);
|
|
82
|
+
if (((_a = this._method) === null || _a === void 0 ? void 0 : _a.name) === iface_1.MethodNames.PayoutStakers) {
|
|
83
|
+
const txMethod = this._method.args;
|
|
84
|
+
this.validatorStash({
|
|
85
|
+
address: utils_1.default.decodeDotAddress(txMethod.validatorStash, utils_1.default.getAddressFormat(this._coinConfig.name)),
|
|
86
|
+
});
|
|
87
|
+
this.claimEra(txMethod.era);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid Transaction Type: ${(_b = this._method) === null || _b === void 0 ? void 0 : _b.name}. Expected payoutStakers`);
|
|
91
|
+
}
|
|
92
|
+
return tx;
|
|
93
|
+
}
|
|
94
|
+
/** @inheritdoc */
|
|
95
|
+
validateTransaction(_) {
|
|
96
|
+
super.validateTransaction(_);
|
|
97
|
+
this.validateFields(this._claimEra, this._validatorStash);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
*
|
|
101
|
+
* The stash account of the validator.
|
|
102
|
+
*
|
|
103
|
+
* @param {string} claimEra
|
|
104
|
+
* @param {string} validatorStash
|
|
105
|
+
* @throws {Error} If the expected fields are not valid.
|
|
106
|
+
*
|
|
107
|
+
*/
|
|
108
|
+
validateFields(claimEra, validatorStash) {
|
|
109
|
+
const validationResult = txnSchema_1.ClaimTransactionSchema.validate({
|
|
110
|
+
claimEra,
|
|
111
|
+
validatorStash,
|
|
112
|
+
});
|
|
113
|
+
if (validationResult.error) {
|
|
114
|
+
throw new sdk_core_1.InvalidTransactionError(`Claim Builder Transaction validation failed: ${validationResult.error.message}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.ClaimBuilder = ClaimBuilder;
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhaW1CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jbGFpbUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQTRHO0FBRzVHLHNFQUF3RDtBQUN4RCxnRUFBcUM7QUFDckMsbUNBQWlEO0FBRWpELDZEQUEwRDtBQUMxRCwyQ0FBcUQ7QUFDckQsb0RBQTRCO0FBRTVCLE1BQWEsWUFBYSxTQUFRLHVDQUFrQjtJQUlsRCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDTyxnQkFBZ0I7UUFDeEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsT0FBTyw0QkFBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQ2xDO1lBQ0UsY0FBYyxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3BDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUztTQUNwQixFQUNELFVBQVUsQ0FBQyxVQUFVLEVBQ3JCLFVBQVUsQ0FBQyxPQUFPLENBQ25CLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLFlBQVksQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILGNBQWMsQ0FBQyxjQUEyQjtRQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxRQUFRLENBQUMsUUFBZ0I7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLHNCQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsMEJBQTBCLENBQUMsVUFBbUQ7O1FBQzVFLElBQUksQ0FBQSxNQUFBLFVBQVUsQ0FBQyxNQUFNLDBDQUFFLElBQUksTUFBSyxtQkFBVyxDQUFDLGFBQWEsRUFBRTtZQUN6RCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQTRCLENBQUM7WUFDaEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQztZQUM5QixNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO1lBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsa0NBQXNCLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDdkYsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyx3Q0FBd0MsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDN0c7U0FDRjtJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxjQUFzQjs7UUFDakQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLElBQUksTUFBSyxtQkFBVyxDQUFDLGFBQWEsRUFBRTtZQUNwRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQWlCLENBQUM7WUFDaEQsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDbEIsT0FBTyxFQUFFLGVBQUssQ0FBQyxnQkFBZ0IsQ0FDN0IsUUFBUSxDQUFDLGNBQWMsRUFDdkIsZUFBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBcUIsQ0FBQyxDQUMvRDthQUNGLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzdCO2FBQU07WUFDTCxNQUFNLElBQUksa0NBQXVCLENBQUMsNkJBQTZCLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsSUFBSSwwQkFBMEIsQ0FBQyxDQUFDO1NBQzlHO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLG1CQUFtQixDQUFDLENBQWM7UUFDaEMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssY0FBYyxDQUFDLFFBQWdCLEVBQUUsY0FBc0I7UUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxrQ0FBc0IsQ0FBQyxRQUFRLENBQUM7WUFDdkQsUUFBUTtZQUNSLGNBQWM7U0FDZixDQUFDLENBQUM7UUFFSCxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRTtZQUMxQixNQUFNLElBQUksa0NBQXVCLENBQy9CLGdEQUFnRCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQ2pGLENBQUM7U0FDSDtJQUNILENBQUM7Q0FDRjtBQXpIRCxvQ0F5SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQWRkcmVzcywgRG90QXNzZXRUeXBlcywgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IERlY29kZWRTaWduZWRUeCwgRGVjb2RlZFNpZ25pbmdQYXlsb2FkLCBVbnNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZSc7XG5pbXBvcnQgeyBtZXRob2RzIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQ2xhaW1BcmdzLCBNZXRob2ROYW1lcyB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IENsYWltVHJhbnNhY3Rpb25TY2hlbWEgfSBmcm9tICcuL3R4blNjaGVtYSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBDbGFpbUJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3ZhbGlkYXRvclN0YXNoOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfY2xhaW1FcmE6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogUGF5IG91dCBhbGwgdGhlIHN0YWtlcnMgYmVoaW5kIGEgc2luZ2xlIHZhbGlkYXRvciBmb3IgYSBzaW5nbGUgZXJhLlxuICAgKiBBbnkgYWNjb3VudCBjYW4gY3JlYXRlIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtVbnNpZ25lZFRyYW5zYWN0aW9ufSBhbiB1bnNpZ25lZCBEb3QgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHNlZSBodHRwczovL3BvbGthZG90LmpzLm9yZy9kb2NzL3N1YnN0cmF0ZS9leHRyaW5zaWNzLyNwYXlvdXRzdGFrZXJzdmFsaWRhdG9yX3N0YXNoLWFjY291bnRpZDMyLWVyYS11MzJcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZFRyYW5zYWN0aW9uKCk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGJhc2VUeEluZm8gPSB0aGlzLmNyZWF0ZUJhc2VUeEluZm8oKTtcbiAgICByZXR1cm4gbWV0aG9kcy5zdGFraW5nLnBheW91dFN0YWtlcnMoXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRvclN0YXNoOiB0aGlzLl92YWxpZGF0b3JTdGFzaCxcbiAgICAgICAgZXJhOiB0aGlzLl9jbGFpbUVyYSxcbiAgICAgIH0sXG4gICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICBiYXNlVHhJbmZvLm9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVGhlIHN0YXNoIGFjY291bnQgb2YgdGhlIHZhbGlkYXRvci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbGlkYXRvclN0YXNoXG4gICAqIEByZXR1cm5zIHtDbGFpbUJ1aWxkZXJ9IFRoaXMgY2xhaW0gYnVpbGRlci5cbiAgICpcbiAgICovXG4gIHZhbGlkYXRvclN0YXNoKHZhbGlkYXRvclN0YXNoOiBCYXNlQWRkcmVzcyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHZhbGlkYXRvclN0YXNoKTtcbiAgICB0aGlzLl92YWxpZGF0b3JTdGFzaCA9IHZhbGlkYXRvclN0YXNoLmFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGVyYSB0byBjbGFpbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYWltRXJhXG4gICAqIEByZXR1cm5zIHtDbGFpbUJ1aWxkZXJ9IFRoaXMgY2xhaW0gYnVpbGRlci5cbiAgICpcbiAgICovXG4gIGNsYWltRXJhKGNsYWltRXJhOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihjbGFpbUVyYSkpO1xuICAgIHRoaXMuX2NsYWltRXJhID0gY2xhaW1FcmE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVEZWNvZGVkVHJhbnNhY3Rpb24oZGVjb2RlZFR4bjogRGVjb2RlZFNpZ25pbmdQYXlsb2FkIHwgRGVjb2RlZFNpZ25lZFR4KTogdm9pZCB7XG4gICAgaWYgKGRlY29kZWRUeG4ubWV0aG9kPy5uYW1lID09PSBNZXRob2ROYW1lcy5QYXlvdXRTdGFrZXJzKSB7XG4gICAgICBjb25zdCB0eE1ldGhvZCA9IGRlY29kZWRUeG4ubWV0aG9kLmFyZ3MgYXMgdW5rbm93biBhcyBDbGFpbUFyZ3M7XG4gICAgICBjb25zdCBjbGFpbUVyYSA9IHR4TWV0aG9kLmVyYTtcbiAgICAgIGNvbnN0IHZhbGlkYXRvclN0YXNoID0gdHhNZXRob2QudmFsaWRhdG9yU3Rhc2g7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gQ2xhaW1UcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh7IGNsYWltRXJhLCB2YWxpZGF0b3JTdGFzaCB9KTtcbiAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgQ2xhaW0gVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBzdXBlci5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGlmICh0aGlzLl9tZXRob2Q/Lm5hbWUgPT09IE1ldGhvZE5hbWVzLlBheW91dFN0YWtlcnMpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gdGhpcy5fbWV0aG9kLmFyZ3MgYXMgQ2xhaW1BcmdzO1xuICAgICAgdGhpcy52YWxpZGF0b3JTdGFzaCh7XG4gICAgICAgIGFkZHJlc3M6IHV0aWxzLmRlY29kZURvdEFkZHJlc3MoXG4gICAgICAgICAgdHhNZXRob2QudmFsaWRhdG9yU3Rhc2gsXG4gICAgICAgICAgdXRpbHMuZ2V0QWRkcmVzc0Zvcm1hdCh0aGlzLl9jb2luQ29uZmlnLm5hbWUgYXMgRG90QXNzZXRUeXBlcylcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jbGFpbUVyYSh0eE1ldGhvZC5lcmEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgVHJhbnNhY3Rpb24gVHlwZTogJHt0aGlzLl9tZXRob2Q/Lm5hbWV9LiBFeHBlY3RlZCBwYXlvdXRTdGFrZXJzYCk7XG4gICAgfVxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKF86IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIudmFsaWRhdGVUcmFuc2FjdGlvbihfKTtcbiAgICB0aGlzLnZhbGlkYXRlRmllbGRzKHRoaXMuX2NsYWltRXJhLCB0aGlzLl92YWxpZGF0b3JTdGFzaCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVGhlIHN0YXNoIGFjY291bnQgb2YgdGhlIHZhbGlkYXRvci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYWltRXJhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWxpZGF0b3JTdGFzaFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGV4cGVjdGVkIGZpZWxkcyBhcmUgbm90IHZhbGlkLlxuICAgKlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZpZWxkcyhjbGFpbUVyYTogc3RyaW5nLCB2YWxpZGF0b3JTdGFzaDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IENsYWltVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGUoe1xuICAgICAgY2xhaW1FcmEsXG4gICAgICB2YWxpZGF0b3JTdGFzaCxcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBDbGFpbSBCdWlsZGVyIFRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BuildTransactionError } from '@bitgo-beta/sdk-core';
|
|
2
|
+
export declare class AddressValidationError extends BuildTransactionError {
|
|
3
|
+
constructor(malformedAddress: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class InvalidFeeError extends BuildTransactionError {
|
|
6
|
+
constructor(type?: string, expectedType?: string);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,qBAAa,sBAAuB,SAAQ,qBAAqB;gBACnD,gBAAgB,EAAE,MAAM;CAIrC;AAED,qBAAa,eAAgB,SAAQ,qBAAqB;gBAC5C,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;CAIjD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InvalidFeeError = exports.AddressValidationError = void 0;
|
|
4
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
5
|
+
class AddressValidationError extends sdk_core_1.BuildTransactionError {
|
|
6
|
+
constructor(malformedAddress) {
|
|
7
|
+
super(`The address '${malformedAddress}' is not a well-formed dot address`);
|
|
8
|
+
this.name = AddressValidationError.name;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.AddressValidationError = AddressValidationError;
|
|
12
|
+
class InvalidFeeError extends sdk_core_1.BuildTransactionError {
|
|
13
|
+
constructor(type, expectedType) {
|
|
14
|
+
super(`The specified type: "${type}" is not valid. Please provide the type: "${expectedType}"`);
|
|
15
|
+
this.name = InvalidFeeError.name;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.InvalidFeeError = InvalidFeeError;
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQTZEO0FBRTdELE1BQWEsc0JBQXVCLFNBQVEsZ0NBQXFCO0lBQy9ELFlBQVksZ0JBQXdCO1FBQ2xDLEtBQUssQ0FBQyxnQkFBZ0IsZ0JBQWdCLG9DQUFvQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7SUFDMUMsQ0FBQztDQUNGO0FBTEQsd0RBS0M7QUFFRCxNQUFhLGVBQWdCLFNBQVEsZ0NBQXFCO0lBQ3hELFlBQVksSUFBYSxFQUFFLFlBQXFCO1FBQzlDLEtBQUssQ0FBQyx3QkFBd0IsSUFBSSw2Q0FBNkMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBTEQsMENBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBBZGRyZXNzVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgQnVpbGRUcmFuc2FjdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IobWFsZm9ybWVkQWRkcmVzczogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFRoZSBhZGRyZXNzICcke21hbGZvcm1lZEFkZHJlc3N9JyBpcyBub3QgYSB3ZWxsLWZvcm1lZCBkb3QgYWRkcmVzc2ApO1xuICAgIHRoaXMubmFtZSA9IEFkZHJlc3NWYWxpZGF0aW9uRXJyb3IubmFtZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEZlZUVycm9yIGV4dGVuZHMgQnVpbGRUcmFuc2FjdGlvbkVycm9yIHtcbiAgY29uc3RydWN0b3IodHlwZT86IHN0cmluZywgZXhwZWN0ZWRUeXBlPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFRoZSBzcGVjaWZpZWQgdHlwZTogXCIke3R5cGV9XCIgaXMgbm90IHZhbGlkLiBQbGVhc2UgcHJvdmlkZSB0aGUgdHlwZTogXCIke2V4cGVjdGVkVHlwZX1cImApO1xuICAgIHRoaXMubmFtZSA9IEludmFsaWRGZWVFcnJvci5uYW1lO1xuICB9XG59XG4iXX0=
|