@bitgo-beta/sdk-coin-polyx 1.0.1-beta.13 → 1.0.1-beta.1300
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/baseBuilder.d.ts +24 -0
- package/dist/src/lib/baseBuilder.d.ts.map +1 -0
- package/dist/src/lib/baseBuilder.js +31 -0
- package/dist/src/lib/batchStakingBuilder.d.ts +79 -0
- package/dist/src/lib/batchStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/batchStakingBuilder.js +302 -0
- package/dist/src/lib/batchUnstakingBuilder.d.ts +39 -0
- package/dist/src/lib/batchUnstakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/batchUnstakingBuilder.js +129 -0
- package/dist/src/lib/bondExtraBuilder.d.ts +37 -0
- package/dist/src/lib/bondExtraBuilder.d.ts.map +1 -0
- package/dist/src/lib/bondExtraBuilder.js +103 -0
- package/dist/src/lib/constants.d.ts +21 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +24 -0
- package/dist/src/lib/hexTokenTransferBuilder.d.ts +24 -0
- package/dist/src/lib/hexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/hexTokenTransferBuilder.js +46 -0
- package/dist/src/lib/hexTransferBuilder.d.ts +28 -0
- package/dist/src/lib/hexTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/hexTransferBuilder.js +51 -0
- package/dist/src/lib/iface.d.ts +252 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +48 -1
- package/dist/src/lib/index.d.ts +40 -7
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +86 -36
- package/dist/src/lib/nominateBuilder.d.ts +18 -0
- package/dist/src/lib/nominateBuilder.d.ts.map +1 -0
- package/dist/src/lib/nominateBuilder.js +101 -0
- package/dist/src/lib/preApproveAssetBuilder.d.ts +33 -0
- package/dist/src/lib/preApproveAssetBuilder.d.ts.map +1 -0
- package/dist/src/lib/preApproveAssetBuilder.js +77 -0
- package/dist/src/lib/registerDidWithCDDBuilder.d.ts +34 -0
- package/dist/src/lib/registerDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/src/lib/registerDidWithCDDBuilder.js +86 -0
- package/dist/src/lib/rejectInstructionBuilder.d.ts +29 -0
- package/dist/src/lib/rejectInstructionBuilder.d.ts.map +1 -0
- package/dist/src/lib/rejectInstructionBuilder.js +89 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts +64 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +167 -0
- package/dist/src/lib/transaction.d.ts +26 -4
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +201 -7
- package/dist/src/lib/transactionBuilderFactory.d.ts +67 -5
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +323 -8
- package/dist/src/lib/transferBuilder.d.ts +51 -3
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +111 -3
- package/dist/src/lib/txnSchema.d.ts +70 -0
- package/dist/src/lib/txnSchema.d.ts.map +1 -0
- package/dist/src/lib/txnSchema.js +244 -0
- package/dist/src/lib/unbondBuilder.d.ts +37 -0
- package/dist/src/lib/unbondBuilder.d.ts.map +1 -0
- package/dist/src/lib/unbondBuilder.js +100 -0
- package/dist/src/lib/utils.d.ts +44 -14
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +95 -20
- package/dist/src/lib/v8BatchStakingBuilder.d.ts +85 -0
- package/dist/src/lib/v8BatchStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8BatchStakingBuilder.js +266 -0
- package/dist/src/lib/v8BatchUnstakingBuilder.d.ts +11 -0
- package/dist/src/lib/v8BatchUnstakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8BatchUnstakingBuilder.js +21 -0
- package/dist/src/lib/v8BondExtraBuilder.d.ts +11 -0
- package/dist/src/lib/v8BondExtraBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8BondExtraBuilder.js +21 -0
- package/dist/src/lib/v8HexTokenTransferBuilder.d.ts +20 -0
- package/dist/src/lib/v8HexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8HexTokenTransferBuilder.js +42 -0
- package/dist/src/lib/v8HexTransferBuilder.d.ts +11 -0
- package/dist/src/lib/v8HexTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8HexTransferBuilder.js +21 -0
- package/dist/src/lib/v8NominateBuilder.d.ts +11 -0
- package/dist/src/lib/v8NominateBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8NominateBuilder.js +21 -0
- package/dist/src/lib/v8PreApproveAssetBuilder.d.ts +11 -0
- package/dist/src/lib/v8PreApproveAssetBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8PreApproveAssetBuilder.js +21 -0
- package/dist/src/lib/v8RegisterDidBuilder.d.ts +47 -0
- package/dist/src/lib/v8RegisterDidBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8RegisterDidBuilder.js +96 -0
- package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts +11 -0
- package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8RegisterDidWithCDDBuilder.js +21 -0
- package/dist/src/lib/v8TokenTransferBuilder.d.ts +24 -0
- package/dist/src/lib/v8TokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8TokenTransferBuilder.js +101 -0
- package/dist/src/lib/v8TransferBuilder.d.ts +11 -0
- package/dist/src/lib/v8TransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8TransferBuilder.js +21 -0
- package/dist/src/lib/v8UnbondBuilder.d.ts +11 -0
- package/dist/src/lib/v8UnbondBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8UnbondBuilder.js +21 -0
- package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts +11 -0
- package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8WithdrawUnbondedBuilder.js +21 -0
- package/dist/src/lib/withdrawUnbondedBuilder.d.ts +35 -0
- package/dist/src/lib/withdrawUnbondedBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawUnbondedBuilder.js +91 -0
- package/dist/src/polyx.d.ts +51 -9
- package/dist/src/polyx.d.ts.map +1 -1
- package/dist/src/polyx.js +296 -16
- package/dist/src/polyxToken.d.ts +20 -0
- package/dist/src/polyxToken.d.ts.map +1 -0
- package/dist/src/polyxToken.js +55 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/resources/index.d.ts +5 -0
- package/dist/src/resources/index.d.ts.map +1 -0
- package/dist/src/resources/index.js +21 -0
- package/dist/src/resources/mainnet.d.ts +13 -0
- package/dist/src/resources/mainnet.d.ts.map +1 -0
- package/dist/src/resources/mainnet.js +16 -0
- package/dist/src/resources/mainnetV8.d.ts +13 -0
- package/dist/src/resources/mainnetV8.d.ts.map +1 -0
- package/dist/src/resources/mainnetV8.js +24 -0
- package/dist/src/resources/testnet.d.ts +13 -0
- package/dist/src/resources/testnet.d.ts.map +1 -0
- package/dist/src/resources/testnet.js +16 -0
- package/dist/src/resources/testnetV8.d.ts +13 -0
- package/dist/src/resources/testnetV8.d.ts.map +1 -0
- package/dist/src/resources/testnetV8.js +16 -0
- package/dist/src/tpolyx.d.ts +7 -0
- package/dist/src/tpolyx.d.ts.map +1 -1
- package/dist/src/tpolyx.js +11 -1
- package/dist/test/integration/index.d.ts +1 -0
- package/dist/test/integration/index.d.ts.map +1 -0
- package/dist/test/integration/index.js +1 -0
- package/dist/test/resources/index.d.ts +139 -0
- package/dist/test/resources/index.d.ts.map +1 -0
- package/dist/test/resources/index.js +150 -0
- package/dist/test/resources/mainnet.d.ts +2 -0
- package/dist/test/resources/mainnet.d.ts.map +1 -0
- package/dist/test/resources/mainnet.js +5 -0
- package/dist/test/resources/materialData.json +8 -0
- package/dist/test/resources/materialDataModified.json +8 -0
- package/dist/test/resources/testnet.d.ts +2 -0
- package/dist/test/resources/testnet.d.ts.map +1 -0
- package/dist/test/resources/testnet.js +5 -0
- package/dist/test/resources/wrwUsers.d.ts +19 -0
- package/dist/test/resources/wrwUsers.d.ts.map +1 -0
- package/dist/test/resources/wrwUsers.js +60 -0
- package/dist/test/unit/polyx.d.ts +2 -0
- package/dist/test/unit/polyx.d.ts.map +1 -0
- package/dist/test/unit/polyx.js +603 -0
- package/dist/test/unit/transactionBuilder/base.d.ts +4 -0
- package/dist/test/unit/transactionBuilder/base.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/base.js +245 -0
- package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/batchStakingBuilder.js +309 -0
- package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.js +159 -0
- package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/bondExtraBuilder.js +158 -0
- package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.js +261 -0
- package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/hexTransferBuilder.js +389 -0
- package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/nominateBuilder.js +226 -0
- package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.js +115 -0
- package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.js +302 -0
- package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.js +128 -0
- package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/singletonRegistry.js +59 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +140 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +240 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +326 -0
- package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unbondBuilder.js +144 -0
- package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.js +252 -0
- package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.js +90 -0
- package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.js +62 -0
- package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.js +45 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.js +87 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.js +45 -0
- package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.js +114 -0
- package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8TransferBuilder.js +107 -0
- package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.js +138 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +143 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +20 -10
- package/.eslintignore +0 -4
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -0
- package/dist/src/lib/keyPair.d.ts +0 -12
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -24
- package/dist/src/lib/transactionBuilder.d.ts +0 -43
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -78
package/dist/src/lib/utils.js
CHANGED
|
@@ -1,33 +1,108 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Utils = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const abstract_substrate_1 = require("@bitgo-beta/abstract-substrate");
|
|
5
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
6
|
+
const resources_1 = require("../resources");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
class Utils extends abstract_substrate_1.Utils {
|
|
9
|
+
/**
|
|
10
|
+
* Get the appropriate address format based on network type
|
|
11
|
+
* Returns 12 for mainnet and 42 for testnet
|
|
12
|
+
*
|
|
13
|
+
* @param coinName The name of the coin
|
|
14
|
+
* @returns The address format to use
|
|
15
|
+
*/
|
|
16
|
+
getAddressFormat(coinName) {
|
|
17
|
+
const isMainnet = coinName.toLowerCase() === 'polyx';
|
|
18
|
+
return isMainnet ? 12 : 42;
|
|
8
19
|
}
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Checks if a string is a valid Polymesh DID (Decentralized Identifier)
|
|
22
|
+
* DIDs are 32-byte hex strings (0x prefix + 64 hex characters)
|
|
23
|
+
*
|
|
24
|
+
* @param {string} did - The string to validate
|
|
25
|
+
* @returns {boolean} true if valid DID format, false otherwise
|
|
26
|
+
*/
|
|
27
|
+
isValidDid(did) {
|
|
28
|
+
return constants_1.POLYX_DID_REGEX.test(did);
|
|
12
29
|
}
|
|
13
|
-
/**
|
|
14
|
-
|
|
15
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Encode a memo string using the NEW Polymesh format:
|
|
32
|
+
* UTF-8 bytes right-padded with 0x00 to 32 bytes, returned as a 0x-prefixed hex string.
|
|
33
|
+
*
|
|
34
|
+
* @param text The intended memo string
|
|
35
|
+
* @returns 0x-prefixed 66-character hex string representing the 32-byte encoded memo
|
|
36
|
+
*/
|
|
37
|
+
encodeMemoNew(text) {
|
|
38
|
+
const bytes = Buffer.from(text, 'utf8');
|
|
39
|
+
if (bytes.length > constants_1.MEMO_MAX_BYTES) {
|
|
40
|
+
throw new Error(`Memo exceeds maximum length of ${constants_1.MEMO_MAX_BYTES} bytes (got ${bytes.length} bytes)`);
|
|
41
|
+
}
|
|
42
|
+
const textHex = bytes.toString('hex');
|
|
43
|
+
return `0x${textHex.padEnd(64, '0')}`;
|
|
16
44
|
}
|
|
17
|
-
/**
|
|
18
|
-
|
|
19
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Detect whether a decoded 32-byte memo (0x-prefixed hex from txwrapper decode()) uses NEW encoding.
|
|
47
|
+
*
|
|
48
|
+
* Detection rules (see problem.md):
|
|
49
|
+
* - Any 0x00 byte → NEW (null right-padding)
|
|
50
|
+
* - All 0x30 bytes → OLD (memo "0" in ASCII-left-padded form)
|
|
51
|
+
* - Leading 0x30 bytes then non-0x30 content → OLD (ASCII '0' left-padding)
|
|
52
|
+
* - Otherwise → NEW (content at byte 0, full 32-byte memo, or no ASCII pad)
|
|
53
|
+
*
|
|
54
|
+
* @param memo 0x-prefixed 66-char hex string as returned by txwrapper decode()
|
|
55
|
+
*/
|
|
56
|
+
isNewMemoEncoding(memo) {
|
|
57
|
+
if (!constants_1.MEMO_HEX_REGEX.test(memo))
|
|
58
|
+
return false;
|
|
59
|
+
const bytes = Buffer.from(memo.slice(2), 'hex');
|
|
60
|
+
if (bytes.some((b) => b === 0x00))
|
|
61
|
+
return true;
|
|
62
|
+
if (bytes.every((b) => b === 0x30))
|
|
63
|
+
return false;
|
|
64
|
+
let leadingAsciiZeros = 0;
|
|
65
|
+
while (leadingAsciiZeros < bytes.length && bytes[leadingAsciiZeros] === 0x30) {
|
|
66
|
+
leadingAsciiZeros++;
|
|
67
|
+
}
|
|
68
|
+
if (leadingAsciiZeros > 0 && leadingAsciiZeros < bytes.length)
|
|
69
|
+
return false;
|
|
70
|
+
return true;
|
|
20
71
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
throw new Error('Method not implemented.');
|
|
72
|
+
getMaterial(networkType) {
|
|
73
|
+
return (networkType === statics_1.NetworkType.MAINNET ? resources_1.mainnetMaterial : resources_1.testnetMaterial);
|
|
24
74
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
75
|
+
getV8Material(networkType) {
|
|
76
|
+
return (networkType === statics_1.NetworkType.MAINNET
|
|
77
|
+
? resources_1.mainnetV8Material
|
|
78
|
+
: resources_1.testnetV8Material);
|
|
79
|
+
}
|
|
80
|
+
decodeMethodName(call, registry) {
|
|
81
|
+
// Handle both callIndex and method formats
|
|
82
|
+
const callWithIndex = call;
|
|
83
|
+
const methodIdentifier = callWithIndex.callIndex || call.method;
|
|
84
|
+
if (typeof methodIdentifier === 'string') {
|
|
85
|
+
// Check if it looks like a hex callIndex
|
|
86
|
+
if (methodIdentifier.startsWith('0x') && methodIdentifier.length > 2) {
|
|
87
|
+
try {
|
|
88
|
+
const decodedCall = registry.findMetaCall(new Uint8Array(Buffer.from(methodIdentifier.replace('0x', ''), 'hex')));
|
|
89
|
+
return decodedCall.method;
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
// Fallback: assume it's already the method name
|
|
93
|
+
return methodIdentifier;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// Already a simple method name
|
|
98
|
+
return methodIdentifier;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Fallback
|
|
102
|
+
return String(methodIdentifier);
|
|
28
103
|
}
|
|
29
104
|
}
|
|
30
105
|
exports.Utils = Utils;
|
|
31
106
|
const utils = new Utils();
|
|
32
107
|
exports.default = utils;
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVFQUFvRjtBQUNwRixpREFBa0Q7QUFFbEQsNENBQXNHO0FBRXRHLDJDQUE4RTtBQUU5RSxNQUFhLEtBQU0sU0FBUSwwQkFBYztJQUN2Qzs7Ozs7O09BTUc7SUFDSCxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUMvQixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDO1FBQ3JELE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsVUFBVSxDQUFDLEdBQVc7UUFDcEIsT0FBTywyQkFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsYUFBYSxDQUFDLElBQVk7UUFDeEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLDBCQUFjLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQywwQkFBYyxlQUFlLEtBQUssQ0FBQyxNQUFNLFNBQVMsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsaUJBQWlCLENBQUMsSUFBWTtRQUM1QixJQUFJLENBQUMsMEJBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFN0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQy9DLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRWpELElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLE9BQU8saUJBQWlCLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM3RSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLGlCQUFpQixHQUFHLENBQUMsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsTUFBTTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTVFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVcsQ0FBQyxXQUF3QjtRQUNsQyxPQUFPLENBQUMsV0FBVyxLQUFLLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQywyQkFBZSxDQUFDLENBQUMsQ0FBQywyQkFBZSxDQUFrQyxDQUFDO0lBQ3BILENBQUM7SUFFRCxhQUFhLENBQUMsV0FBd0I7UUFDcEMsT0FBTyxDQUFDLFdBQVcsS0FBSyxxQkFBVyxDQUFDLE9BQU87WUFDekMsQ0FBQyxDQUFDLDZCQUFpQjtZQUNuQixDQUFDLENBQUMsNkJBQWlCLENBQWtDLENBQUM7SUFDMUQsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQXFCLEVBQUUsUUFBc0I7UUFDNUQsMkNBQTJDO1FBQzNDLE1BQU0sYUFBYSxHQUFHLElBQWdELENBQUM7UUFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFaEUsSUFBSSxPQUFPLGdCQUFnQixLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pDLHlDQUF5QztZQUN6QyxJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLElBQUksQ0FBQztvQkFDSCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUN2QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FDdkUsQ0FBQztvQkFDRixPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUM7Z0JBQzVCLENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxnREFBZ0Q7b0JBQ2hELE9BQU8sZ0JBQWdCLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sK0JBQStCO2dCQUMvQixPQUFPLGdCQUFnQixDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO1FBRUQsV0FBVztRQUNYLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBeEdELHNCQXdHQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXRpbHMgYXMgU3Vic3RyYXRlVXRpbHMsIEludGVyZmFjZSB9IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LXN1YnN0cmF0ZSc7XG5pbXBvcnQgeyBOZXR3b3JrVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHlwZVJlZ2lzdHJ5IH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZS9saWIvdHlwZXMnO1xuaW1wb3J0IHsgbWFpbm5ldE1hdGVyaWFsLCB0ZXN0bmV0TWF0ZXJpYWwsIG1haW5uZXRWOE1hdGVyaWFsLCB0ZXN0bmV0VjhNYXRlcmlhbCB9IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBCYXRjaENhbGxPYmplY3QgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IE1FTU9fSEVYX1JFR0VYLCBNRU1PX01BWF9CWVRFUywgUE9MWVhfRElEX1JFR0VYIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgZXh0ZW5kcyBTdWJzdHJhdGVVdGlscyB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGFwcHJvcHJpYXRlIGFkZHJlc3MgZm9ybWF0IGJhc2VkIG9uIG5ldHdvcmsgdHlwZVxuICAgKiBSZXR1cm5zIDEyIGZvciBtYWlubmV0IGFuZCA0MiBmb3IgdGVzdG5ldFxuICAgKlxuICAgKiBAcGFyYW0gY29pbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvaW5cbiAgICogQHJldHVybnMgVGhlIGFkZHJlc3MgZm9ybWF0IHRvIHVzZVxuICAgKi9cbiAgZ2V0QWRkcmVzc0Zvcm1hdChjb2luTmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBpc01haW5uZXQgPSBjb2luTmFtZS50b0xvd2VyQ2FzZSgpID09PSAncG9seXgnO1xuICAgIHJldHVybiBpc01haW5uZXQgPyAxMiA6IDQyO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHN0cmluZyBpcyBhIHZhbGlkIFBvbHltZXNoIERJRCAoRGVjZW50cmFsaXplZCBJZGVudGlmaWVyKVxuICAgKiBESURzIGFyZSAzMi1ieXRlIGhleCBzdHJpbmdzICgweCBwcmVmaXggKyA2NCBoZXggY2hhcmFjdGVycylcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpZCAtIFRoZSBzdHJpbmcgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdmFsaWQgRElEIGZvcm1hdCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBpc1ZhbGlkRGlkKGRpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFBPTFlYX0RJRF9SRUdFWC50ZXN0KGRpZCk7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlIGEgbWVtbyBzdHJpbmcgdXNpbmcgdGhlIE5FVyBQb2x5bWVzaCBmb3JtYXQ6XG4gICAqIFVURi04IGJ5dGVzIHJpZ2h0LXBhZGRlZCB3aXRoIDB4MDAgdG8gMzIgYnl0ZXMsIHJldHVybmVkIGFzIGEgMHgtcHJlZml4ZWQgaGV4IHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHRleHQgVGhlIGludGVuZGVkIG1lbW8gc3RyaW5nXG4gICAqIEByZXR1cm5zIDB4LXByZWZpeGVkIDY2LWNoYXJhY3RlciBoZXggc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgMzItYnl0ZSBlbmNvZGVkIG1lbW9cbiAgICovXG4gIGVuY29kZU1lbW9OZXcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5mcm9tKHRleHQsICd1dGY4Jyk7XG4gICAgaWYgKGJ5dGVzLmxlbmd0aCA+IE1FTU9fTUFYX0JZVEVTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1lbW8gZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAke01FTU9fTUFYX0JZVEVTfSBieXRlcyAoZ290ICR7Ynl0ZXMubGVuZ3RofSBieXRlcylgKTtcbiAgICB9XG4gICAgY29uc3QgdGV4dEhleCA9IGJ5dGVzLnRvU3RyaW5nKCdoZXgnKTtcbiAgICByZXR1cm4gYDB4JHt0ZXh0SGV4LnBhZEVuZCg2NCwgJzAnKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCB3aGV0aGVyIGEgZGVjb2RlZCAzMi1ieXRlIG1lbW8gKDB4LXByZWZpeGVkIGhleCBmcm9tIHR4d3JhcHBlciBkZWNvZGUoKSkgdXNlcyBORVcgZW5jb2RpbmcuXG4gICAqXG4gICAqIERldGVjdGlvbiBydWxlcyAoc2VlIHByb2JsZW0ubWQpOlxuICAgKiAtIEFueSAweDAwIGJ5dGUg4oaSIE5FVyAobnVsbCByaWdodC1wYWRkaW5nKVxuICAgKiAtIEFsbCAweDMwIGJ5dGVzIOKGkiBPTEQgKG1lbW8gXCIwXCIgaW4gQVNDSUktbGVmdC1wYWRkZWQgZm9ybSlcbiAgICogLSBMZWFkaW5nIDB4MzAgYnl0ZXMgdGhlbiBub24tMHgzMCBjb250ZW50IOKGkiBPTEQgKEFTQ0lJICcwJyBsZWZ0LXBhZGRpbmcpXG4gICAqIC0gT3RoZXJ3aXNlIOKGkiBORVcgKGNvbnRlbnQgYXQgYnl0ZSAwLCBmdWxsIDMyLWJ5dGUgbWVtbywgb3Igbm8gQVNDSUkgcGFkKVxuICAgKlxuICAgKiBAcGFyYW0gbWVtbyAweC1wcmVmaXhlZCA2Ni1jaGFyIGhleCBzdHJpbmcgYXMgcmV0dXJuZWQgYnkgdHh3cmFwcGVyIGRlY29kZSgpXG4gICAqL1xuICBpc05ld01lbW9FbmNvZGluZyhtZW1vOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIU1FTU9fSEVYX1JFR0VYLnRlc3QobWVtbykpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IGJ5dGVzID0gQnVmZmVyLmZyb20obWVtby5zbGljZSgyKSwgJ2hleCcpO1xuXG4gICAgaWYgKGJ5dGVzLnNvbWUoKGIpID0+IGIgPT09IDB4MDApKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoYnl0ZXMuZXZlcnkoKGIpID0+IGIgPT09IDB4MzApKSByZXR1cm4gZmFsc2U7XG5cbiAgICBsZXQgbGVhZGluZ0FzY2lpWmVyb3MgPSAwO1xuICAgIHdoaWxlIChsZWFkaW5nQXNjaWlaZXJvcyA8IGJ5dGVzLmxlbmd0aCAmJiBieXRlc1tsZWFkaW5nQXNjaWlaZXJvc10gPT09IDB4MzApIHtcbiAgICAgIGxlYWRpbmdBc2NpaVplcm9zKys7XG4gICAgfVxuICAgIGlmIChsZWFkaW5nQXNjaWlaZXJvcyA+IDAgJiYgbGVhZGluZ0FzY2lpWmVyb3MgPCBieXRlcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZ2V0TWF0ZXJpYWwobmV0d29ya1R5cGU6IE5ldHdvcmtUeXBlKTogSW50ZXJmYWNlLk1hdGVyaWFsIHtcbiAgICByZXR1cm4gKG5ldHdvcmtUeXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUID8gbWFpbm5ldE1hdGVyaWFsIDogdGVzdG5ldE1hdGVyaWFsKSBhcyB1bmtub3duIGFzIEludGVyZmFjZS5NYXRlcmlhbDtcbiAgfVxuXG4gIGdldFY4TWF0ZXJpYWwobmV0d29ya1R5cGU6IE5ldHdvcmtUeXBlKTogSW50ZXJmYWNlLk1hdGVyaWFsIHtcbiAgICByZXR1cm4gKG5ldHdvcmtUeXBlID09PSBOZXR3b3JrVHlwZS5NQUlOTkVUXG4gICAgICA/IG1haW5uZXRWOE1hdGVyaWFsXG4gICAgICA6IHRlc3RuZXRWOE1hdGVyaWFsKSBhcyB1bmtub3duIGFzIEludGVyZmFjZS5NYXRlcmlhbDtcbiAgfVxuXG4gIGRlY29kZU1ldGhvZE5hbWUoY2FsbDogQmF0Y2hDYWxsT2JqZWN0LCByZWdpc3RyeTogVHlwZVJlZ2lzdHJ5KTogc3RyaW5nIHtcbiAgICAvLyBIYW5kbGUgYm90aCBjYWxsSW5kZXggYW5kIG1ldGhvZCBmb3JtYXRzXG4gICAgY29uc3QgY2FsbFdpdGhJbmRleCA9IGNhbGwgYXMgQmF0Y2hDYWxsT2JqZWN0ICYgeyBjYWxsSW5kZXg/OiBzdHJpbmcgfTtcbiAgICBjb25zdCBtZXRob2RJZGVudGlmaWVyID0gY2FsbFdpdGhJbmRleC5jYWxsSW5kZXggfHwgY2FsbC5tZXRob2Q7XG5cbiAgICBpZiAodHlwZW9mIG1ldGhvZElkZW50aWZpZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBDaGVjayBpZiBpdCBsb29rcyBsaWtlIGEgaGV4IGNhbGxJbmRleFxuICAgICAgaWYgKG1ldGhvZElkZW50aWZpZXIuc3RhcnRzV2l0aCgnMHgnKSAmJiBtZXRob2RJZGVudGlmaWVyLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkQ2FsbCA9IHJlZ2lzdHJ5LmZpbmRNZXRhQ2FsbChcbiAgICAgICAgICAgIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKG1ldGhvZElkZW50aWZpZXIucmVwbGFjZSgnMHgnLCAnJyksICdoZXgnKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBkZWNvZGVkQ2FsbC5tZXRob2Q7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBGYWxsYmFjazogYXNzdW1lIGl0J3MgYWxyZWFkeSB0aGUgbWV0aG9kIG5hbWVcbiAgICAgICAgICByZXR1cm4gbWV0aG9kSWRlbnRpZmllcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWxyZWFkeSBhIHNpbXBsZSBtZXRob2QgbmFtZVxuICAgICAgICByZXR1cm4gbWV0aG9kSWRlbnRpZmllcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGYWxsYmFja1xuICAgIHJldHVybiBTdHJpbmcobWV0aG9kSWRlbnRpZmllcik7XG4gIH1cbn1cblxuY29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoKTtcbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Transaction } from './transaction';
|
|
2
|
+
import { PolyxBaseBuilder } from './baseBuilder';
|
|
3
|
+
import { DecodedSignedTx, DecodedSigningPayload, UnsignedTransaction } from '@substrate/txwrapper-core';
|
|
4
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
5
|
+
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
6
|
+
import { NominateArgs, V8BondArgs } from './iface';
|
|
7
|
+
/**
|
|
8
|
+
* Polymesh v8 batch staking builder.
|
|
9
|
+
*
|
|
10
|
+
* Polymesh v8 changed `staking.bond` from `bond(controller, value, payee)` to `bond(value, payee)`
|
|
11
|
+
* — the stash account is its own controller, so no `controller` leg is encoded. This builder
|
|
12
|
+
* constructs `utility.batchAll([bond, nominate])` with the 2-arg bond call against v8 chain
|
|
13
|
+
* metadata (v8 specVersion / txVersion).
|
|
14
|
+
*
|
|
15
|
+
* Behaviour is otherwise identical to the v7 {@link BatchStakingBuilder}, which is retained as the
|
|
16
|
+
* `[CLEANUP-V8-OLD]` rollback path.
|
|
17
|
+
*/
|
|
18
|
+
export declare class V8BatchStakingBuilder extends PolyxBaseBuilder {
|
|
19
|
+
protected _amount: string;
|
|
20
|
+
protected _payee: string | {
|
|
21
|
+
Account: string;
|
|
22
|
+
};
|
|
23
|
+
protected _validators: string[];
|
|
24
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
25
|
+
protected get transactionType(): TransactionType;
|
|
26
|
+
/**
|
|
27
|
+
* Build a batch transaction that combines bond and nominate operations
|
|
28
|
+
* Both operations are required and always atomic (using batchAll)
|
|
29
|
+
*/
|
|
30
|
+
protected buildTransaction(): UnsignedTransaction;
|
|
31
|
+
/**
|
|
32
|
+
* Set the staking amount for bond
|
|
33
|
+
*/
|
|
34
|
+
amount(amount: string): this;
|
|
35
|
+
/**
|
|
36
|
+
* Get the staking amount
|
|
37
|
+
*/
|
|
38
|
+
getAmount(): string;
|
|
39
|
+
/**
|
|
40
|
+
* Set the rewards destination for bond ('Staked', 'Stash','Controller', or { Account: string })
|
|
41
|
+
*/
|
|
42
|
+
payee(payee: string | {
|
|
43
|
+
Account: string;
|
|
44
|
+
}): this;
|
|
45
|
+
/**
|
|
46
|
+
* Get the payee
|
|
47
|
+
*/
|
|
48
|
+
getPayee(): string | {
|
|
49
|
+
Account: string;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Set the validators to nominate
|
|
53
|
+
*/
|
|
54
|
+
validators(validators: string[]): this;
|
|
55
|
+
/**
|
|
56
|
+
* Get the validators to nominate
|
|
57
|
+
*/
|
|
58
|
+
getValidators(): string[];
|
|
59
|
+
/** @inheritdoc */
|
|
60
|
+
validateDecodedTransaction(decodedTxn: DecodedSigningPayload | DecodedSignedTx): void;
|
|
61
|
+
/**
|
|
62
|
+
* Normalize a decoded payee value into the construction-side shape.
|
|
63
|
+
*/
|
|
64
|
+
private normalizePayee;
|
|
65
|
+
/**
|
|
66
|
+
* Validate v8 bond arguments (no controller)
|
|
67
|
+
*/
|
|
68
|
+
private validateBondArgs;
|
|
69
|
+
/**
|
|
70
|
+
* Validate nominate arguments
|
|
71
|
+
*/
|
|
72
|
+
private validateNominateArgs;
|
|
73
|
+
/** @inheritdoc */
|
|
74
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
75
|
+
/** @inheritdoc */
|
|
76
|
+
validateTransaction(tx: Transaction): void;
|
|
77
|
+
/**
|
|
78
|
+
* Validate the builder fields
|
|
79
|
+
*/
|
|
80
|
+
private validateFields;
|
|
81
|
+
testValidateFields(): void;
|
|
82
|
+
testValidateBondArgs(args: V8BondArgs): void;
|
|
83
|
+
testValidateNominateArgs(args: NominateArgs): void;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=v8BatchStakingBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v8BatchStakingBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/v8BatchStakingBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAExG,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAA2B,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EAAa,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAc9D;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,SAAQ,gBAAgB;IAEzD,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAG/C,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,CAAM;gBAEzB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;OAGG;IACH,SAAS,CAAC,gBAAgB,IAAI,mBAAmB;IA0CjD;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAM5B;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAKhD;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;IAIxC;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IAQtC;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB,kBAAkB;IAClB,0BAA0B,CAAC,UAAU,EAAE,qBAAqB,GAAG,eAAe,GAAG,IAAI;IA0CrF;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoB5B,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IA0CjE,kBAAkB;IAClB,mBAAmB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAK1C;;OAEG;IACH,OAAO,CAAC,cAAc;IAiBtB,kBAAkB,IAAI,IAAI;IAInB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAI5C,wBAAwB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;CAG1D"}
|
|
@@ -0,0 +1,266 @@
|
|
|
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.V8BatchStakingBuilder = void 0;
|
|
7
|
+
const baseBuilder_1 = require("./baseBuilder");
|
|
8
|
+
const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
|
|
9
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
|
+
const txnSchema_1 = require("./txnSchema");
|
|
11
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
12
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
13
|
+
/**
|
|
14
|
+
* Polymesh v8 batch staking builder.
|
|
15
|
+
*
|
|
16
|
+
* Polymesh v8 changed `staking.bond` from `bond(controller, value, payee)` to `bond(value, payee)`
|
|
17
|
+
* — the stash account is its own controller, so no `controller` leg is encoded. This builder
|
|
18
|
+
* constructs `utility.batchAll([bond, nominate])` with the 2-arg bond call against v8 chain
|
|
19
|
+
* metadata (v8 specVersion / txVersion).
|
|
20
|
+
*
|
|
21
|
+
* Behaviour is otherwise identical to the v7 {@link BatchStakingBuilder}, which is retained as the
|
|
22
|
+
* `[CLEANUP-V8-OLD]` rollback path.
|
|
23
|
+
*/
|
|
24
|
+
class V8BatchStakingBuilder extends baseBuilder_1.PolyxBaseBuilder {
|
|
25
|
+
constructor(_coinConfig) {
|
|
26
|
+
super(_coinConfig);
|
|
27
|
+
// For nominate operation
|
|
28
|
+
this._validators = [];
|
|
29
|
+
this.material(utils_1.default.getV8Material(_coinConfig.network.type));
|
|
30
|
+
}
|
|
31
|
+
get transactionType() {
|
|
32
|
+
return sdk_core_1.TransactionType.Batch;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Build a batch transaction that combines bond and nominate operations
|
|
36
|
+
* Both operations are required and always atomic (using batchAll)
|
|
37
|
+
*/
|
|
38
|
+
buildTransaction() {
|
|
39
|
+
// Ensure both bond and nominate operations are included
|
|
40
|
+
if (!this._amount || this._validators.length === 0) {
|
|
41
|
+
throw new sdk_core_1.InvalidTransactionError('Batch transaction must include both bond and nominate operations');
|
|
42
|
+
}
|
|
43
|
+
const baseTxInfo = this.createBaseTxInfo();
|
|
44
|
+
// Create the individual calls
|
|
45
|
+
const calls = [];
|
|
46
|
+
// Add bond call — v8 bond takes only { value, payee } (no controller)
|
|
47
|
+
const bondCall = txwrapper_polkadot_1.methods.staking.bond({
|
|
48
|
+
value: this._amount,
|
|
49
|
+
payee: this._payee || 'Staked',
|
|
50
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
51
|
+
calls.push(bondCall.method);
|
|
52
|
+
// Add nominate call
|
|
53
|
+
const nominateCall = txwrapper_polkadot_1.methods.staking.nominate({
|
|
54
|
+
targets: this._validators,
|
|
55
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
56
|
+
calls.push(nominateCall.method);
|
|
57
|
+
// Always use batchAll (atomic)
|
|
58
|
+
return txwrapper_polkadot_1.methods.utility.batchAll({
|
|
59
|
+
calls,
|
|
60
|
+
}, baseTxInfo.baseTxInfo, baseTxInfo.options);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Set the staking amount for bond
|
|
64
|
+
*/
|
|
65
|
+
amount(amount) {
|
|
66
|
+
this.validateValue(new bignumber_js_1.default(amount));
|
|
67
|
+
this._amount = amount;
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get the staking amount
|
|
72
|
+
*/
|
|
73
|
+
getAmount() {
|
|
74
|
+
return this._amount;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Set the rewards destination for bond ('Staked', 'Stash','Controller', or { Account: string })
|
|
78
|
+
*/
|
|
79
|
+
payee(payee) {
|
|
80
|
+
this._payee = payee;
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get the payee
|
|
85
|
+
*/
|
|
86
|
+
getPayee() {
|
|
87
|
+
return this._payee;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Set the validators to nominate
|
|
91
|
+
*/
|
|
92
|
+
validators(validators) {
|
|
93
|
+
for (const address of validators) {
|
|
94
|
+
this.validateAddress({ address });
|
|
95
|
+
}
|
|
96
|
+
this._validators = validators;
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get the validators to nominate
|
|
101
|
+
*/
|
|
102
|
+
getValidators() {
|
|
103
|
+
return this._validators;
|
|
104
|
+
}
|
|
105
|
+
/** @inheritdoc */
|
|
106
|
+
validateDecodedTransaction(decodedTxn) {
|
|
107
|
+
const methodName = decodedTxn.method?.name;
|
|
108
|
+
// batch bond and nominate
|
|
109
|
+
if (methodName === 'batchAll') {
|
|
110
|
+
const txMethod = decodedTxn.method.args;
|
|
111
|
+
const calls = txMethod.calls;
|
|
112
|
+
if (calls.length !== 2) {
|
|
113
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid batch staking transaction: expected 2 calls but got ${calls.length}`);
|
|
114
|
+
}
|
|
115
|
+
// Check that first call is bond
|
|
116
|
+
const firstCallMethod = utils_1.default.decodeMethodName(calls[0], this._registry);
|
|
117
|
+
if (firstCallMethod !== 'bond') {
|
|
118
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid batch staking transaction: first call should be bond but got ${firstCallMethod}`);
|
|
119
|
+
}
|
|
120
|
+
// Check that second call is nominate
|
|
121
|
+
const secondCallMethod = utils_1.default.decodeMethodName(calls[1], this._registry);
|
|
122
|
+
if (secondCallMethod !== 'nominate') {
|
|
123
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid batch staking transaction: second call should be nominate but got ${secondCallMethod}`);
|
|
124
|
+
}
|
|
125
|
+
// Validate bond arguments
|
|
126
|
+
const bondArgs = calls[0].args;
|
|
127
|
+
this.validateBondArgs(bondArgs);
|
|
128
|
+
// Validate nominate arguments
|
|
129
|
+
const nominateArgs = calls[1].args;
|
|
130
|
+
this.validateNominateArgs(nominateArgs);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid transaction type: ${methodName}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Normalize a decoded payee value into the construction-side shape.
|
|
138
|
+
*/
|
|
139
|
+
normalizePayee(payeeValue) {
|
|
140
|
+
let normalizedPayee = payeeValue;
|
|
141
|
+
if (typeof payeeValue === 'object' && payeeValue !== null) {
|
|
142
|
+
const decodedPayee = payeeValue;
|
|
143
|
+
if (decodedPayee.staked !== undefined) {
|
|
144
|
+
normalizedPayee = 'Staked';
|
|
145
|
+
}
|
|
146
|
+
else if (decodedPayee.stash !== undefined) {
|
|
147
|
+
normalizedPayee = 'Stash';
|
|
148
|
+
}
|
|
149
|
+
else if (decodedPayee.controller !== undefined) {
|
|
150
|
+
normalizedPayee = 'Controller';
|
|
151
|
+
}
|
|
152
|
+
else if (decodedPayee.account) {
|
|
153
|
+
normalizedPayee = { Account: decodedPayee.account };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return normalizedPayee;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Validate v8 bond arguments (no controller)
|
|
160
|
+
*/
|
|
161
|
+
validateBondArgs(args) {
|
|
162
|
+
// Handle both string and number formats for value
|
|
163
|
+
const amountValue = args.value;
|
|
164
|
+
const valueString = typeof amountValue === 'string' ? amountValue : amountValue.toString();
|
|
165
|
+
const normalizedPayee = this.normalizePayee(args.payee);
|
|
166
|
+
const validationResult = txnSchema_1.V8BatchTransactionSchema.validateBond({
|
|
167
|
+
value: valueString,
|
|
168
|
+
payee: normalizedPayee,
|
|
169
|
+
});
|
|
170
|
+
if (validationResult.error) {
|
|
171
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid bond args: ${validationResult.error.message}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Validate nominate arguments
|
|
176
|
+
*/
|
|
177
|
+
validateNominateArgs(args) {
|
|
178
|
+
// Handle both string and object formats for targets
|
|
179
|
+
const targetAddresses = args.targets.map((target) => {
|
|
180
|
+
if (typeof target === 'string') {
|
|
181
|
+
return target;
|
|
182
|
+
}
|
|
183
|
+
else if (target && typeof target === 'object' && 'id' in target) {
|
|
184
|
+
return target.id;
|
|
185
|
+
}
|
|
186
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid target format: ${JSON.stringify(target)}`);
|
|
187
|
+
});
|
|
188
|
+
const validationResult = txnSchema_1.V8BatchTransactionSchema.validateNominate({
|
|
189
|
+
validators: targetAddresses,
|
|
190
|
+
});
|
|
191
|
+
if (validationResult.error) {
|
|
192
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid nominate args: ${validationResult.error.message}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/** @inheritdoc */
|
|
196
|
+
fromImplementation(rawTransaction) {
|
|
197
|
+
const tx = super.fromImplementation(rawTransaction);
|
|
198
|
+
// Check if the transaction is a batch transaction
|
|
199
|
+
if (this._method?.name !== 'batchAll') {
|
|
200
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid Transaction Type: ${this._method?.name}. Expected batchAll`);
|
|
201
|
+
}
|
|
202
|
+
if (this._method) {
|
|
203
|
+
const txMethod = this._method.args;
|
|
204
|
+
for (const call of txMethod.calls) {
|
|
205
|
+
const callMethod = utils_1.default.decodeMethodName(call, this._registry);
|
|
206
|
+
if (callMethod === 'bond') {
|
|
207
|
+
const bondArgs = call.args;
|
|
208
|
+
// Handle both string and number formats for value
|
|
209
|
+
const amountValue = bondArgs.value;
|
|
210
|
+
const valueString = typeof amountValue === 'string' ? amountValue : amountValue.toString();
|
|
211
|
+
this.amount(valueString);
|
|
212
|
+
// Handle different payee formats
|
|
213
|
+
this.payee(this.normalizePayee(bondArgs.payee));
|
|
214
|
+
}
|
|
215
|
+
else if (callMethod === 'nominate') {
|
|
216
|
+
const nominateArgs = call.args;
|
|
217
|
+
// Handle both string and object formats for targets
|
|
218
|
+
const targetAddresses = nominateArgs.targets.map((target) => {
|
|
219
|
+
if (typeof target === 'string') {
|
|
220
|
+
return target;
|
|
221
|
+
}
|
|
222
|
+
else if (target && typeof target === 'object' && 'id' in target) {
|
|
223
|
+
return target.id;
|
|
224
|
+
}
|
|
225
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid target format: ${JSON.stringify(target)}`);
|
|
226
|
+
});
|
|
227
|
+
this.validators(targetAddresses);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return tx;
|
|
232
|
+
}
|
|
233
|
+
/** @inheritdoc */
|
|
234
|
+
validateTransaction(tx) {
|
|
235
|
+
super.validateTransaction(tx);
|
|
236
|
+
this.validateFields();
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Validate the builder fields
|
|
240
|
+
*/
|
|
241
|
+
validateFields() {
|
|
242
|
+
// Ensure both bond and nominate operations are included
|
|
243
|
+
if (!this._amount || this._validators.length === 0) {
|
|
244
|
+
throw new sdk_core_1.InvalidTransactionError('Batch transaction must include both bond and nominate operations');
|
|
245
|
+
}
|
|
246
|
+
const validationResult = txnSchema_1.V8BatchTransactionSchema.validate({
|
|
247
|
+
amount: this._amount,
|
|
248
|
+
payee: this._payee,
|
|
249
|
+
validators: this._validators,
|
|
250
|
+
});
|
|
251
|
+
if (validationResult.error) {
|
|
252
|
+
throw new sdk_core_1.InvalidTransactionError(`Invalid transaction: ${validationResult.error.message}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
testValidateFields() {
|
|
256
|
+
this.validateFields();
|
|
257
|
+
}
|
|
258
|
+
testValidateBondArgs(args) {
|
|
259
|
+
return this.validateBondArgs(args);
|
|
260
|
+
}
|
|
261
|
+
testValidateNominateArgs(args) {
|
|
262
|
+
return this.validateNominateArgs(args);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
exports.V8BatchStakingBuilder = V8BatchStakingBuilder;
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhCYXRjaFN0YWtpbmdCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi92OEJhdGNoU3Rha2luZ0J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsK0NBQWlEO0FBRWpELHNFQUF3RDtBQUV4RCxtREFBZ0Y7QUFDaEYsMkNBQXVEO0FBQ3ZELG9EQUE0QjtBQUU1QixnRUFBcUM7QUFhckM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEscUJBQXNCLFNBQVEsOEJBQWdCO0lBUXpELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBSnJCLHlCQUF5QjtRQUNmLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBSW5DLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDTyxnQkFBZ0I7UUFDeEIsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUUzQyw4QkFBOEI7UUFDOUIsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBRTNCLHNFQUFzRTtRQUN0RSxNQUFNLFFBQVEsR0FBRyw0QkFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ25DO1lBQ0UsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ25CLEtBQUssRUFBRSxJQUFJLENB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LENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYztRQUNwQix3REFBd0Q7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLGtDQUF1QixDQUFDLGtFQUFrRSxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsb0NBQXdCLENBQUMsUUFBUSxDQUFDO1lBQ3pELE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNwQixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzdCLENBQUMsQ0FBQztRQUVILElBQUksZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLGtDQUF1QixDQUFDLHdCQUF3QixnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM5RixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLG9CQUFvQixDQUFDLElBQWdCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSx3QkFBd0IsQ0FBQyxJQUFrQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUExU0Qsc0RBMFNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFBvbHl4QmFzZUJ1aWxkZXIgfSBmcm9tICcuL2Jhc2VCdWlsZGVyJztcbmltcG9ydCB7IERlY29kZWRTaWduZWRUeCwgRGVjb2RlZFNpZ25pbmdQYXlsb2FkLCBVbnNpZ25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZSc7XG5pbXBvcnQgeyBtZXRob2RzIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFY4QmF0Y2hUcmFuc2FjdGlvblNjaGVtYSB9IGZyb20gJy4vdHhuU2NoZW1hJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEJhdGNoQXJncywgTm9taW5hdGVBcmdzLCBWOEJvbmRBcmdzIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIGRlY29kZWQgdHJhbnNhY3Rpb24gZm9ybWF0c1xuaW50ZXJmYWNlIERlY29kZWRQYXllZSB7XG4gIHN0YWtlZD86IG51bGw7XG4gIHN0YXNoPzogbnVsbDtcbiAgY29udHJvbGxlcj86IG51bGw7XG4gIGFjY291bnQ/OiBzdHJpbmc7XG59XG5cbnR5cGUgUGF5ZWVWYWx1ZSA9IHN0cmluZyB8IERlY29kZWRQYXllZTtcbnR5cGUgQW1vdW50VmFsdWUgPSBzdHJpbmcgfCBudW1iZXI7XG5cbi8qKlxuICogUG9seW1lc2ggdjggYmF0Y2ggc3Rha2luZyBidWlsZGVyLlxuICpcbiAqIFBvbHltZXNoIHY4IGNoYW5nZWQgYHN0YWtpbmcuYm9uZGAgZnJvbSBgYm9uZChjb250cm9sbGVyLCB2YWx1ZSwgcGF5ZWUpYCB0byBgYm9uZCh2YWx1ZSwgcGF5ZWUpYFxuICog4oCUIHRoZSBzdGFzaCBhY2NvdW50IGlzIGl0cyBvd24gY29udHJvbGxlciwgc28gbm8gYGNvbnRyb2xsZXJgIGxlZyBpcyBlbmNvZGVkLiBUaGlzIGJ1aWxkZXJcbiAqIGNvbnN0cnVjdHMgYHV0aWxpdHkuYmF0Y2hBbGwoW2JvbmQsIG5vbWluYXRlXSlgIHdpdGggdGhlIDItYXJnIGJvbmQgY2FsbCBhZ2FpbnN0IHY4IGNoYWluXG4gKiBtZXRhZGF0YSAodjggc3BlY1ZlcnNpb24gLyB0eFZlcnNpb24pLlxuICpcbiAqIEJlaGF2aW91ciBpcyBvdGhlcndpc2UgaWRlbnRpY2FsIHRvIHRoZSB2NyB7QGxpbmsgQmF0Y2hTdGFraW5nQnVpbGRlcn0sIHdoaWNoIGlzIHJldGFpbmVkIGFzIHRoZVxuICogYFtDTEVBTlVQLVY4LU9MRF1gIHJvbGxiYWNrIHBhdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBWOEJhdGNoU3Rha2luZ0J1aWxkZXIgZXh0ZW5kcyBQb2x5eEJhc2VCdWlsZGVyIHtcbiAgLy8gRm9yIGJvbmQgb3BlcmF0aW9uXG4gIHByb3RlY3RlZCBfYW1vdW50OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfcGF5ZWU6IHN0cmluZyB8IHsgQWNjb3VudDogc3RyaW5nIH07XG5cbiAgLy8gRm9yIG5vbWluYXRlIG9wZXJhdGlvblxuICBwcm90ZWN0ZWQgX3ZhbGlkYXRvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMubWF0ZXJpYWwodXRpbHMuZ2V0VjhNYXRlcmlhbChfY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5CYXRjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGJhdGNoIHRyYW5zYWN0aW9uIHRoYXQgY29tYmluZXMgYm9uZCBhbmQgbm9taW5hdGUgb3BlcmF0aW9uc1xuICAgKiBCb3RoIG9wZXJhdGlvbnMgYXJlIHJlcXVpcmVkIGFuZCBhbHdheXMgYXRvbWljICh1c2luZyBiYXRjaEFsbClcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZFRyYW5zYWN0aW9uKCk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICAgIC8vIEVuc3VyZSBib3RoIGJvbmQgYW5kIG5vbWluYXRlIG9wZXJhdGlvbnMgYXJlIGluY2x1ZGVkXG4gICAgaWYgKCF0aGlzLl9hbW91bnQgfHwgdGhpcy5fdmFsaWRhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignQmF0Y2ggdHJhbnNhY3Rpb24gbXVzdCBpbmNsdWRlIGJvdGggYm9uZCBhbmQgbm9taW5hdGUgb3BlcmF0aW9ucycpO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VUeEluZm8gPSB0aGlzLmNyZWF0ZUJhc2VUeEluZm8oKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgaW5kaXZpZHVhbCBjYWxsc1xuICAgIGNvbnN0IGNhbGxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gQWRkIGJvbmQgY2FsbCDigJQgdjggYm9uZCB0YWtlcyBvbmx5IHsgdmFsdWUsIHBheWVlIH0gKG5vIGNvbnRyb2xsZXIpXG4gICAgY29uc3QgYm9uZENhbGwgPSBtZXRob2RzLnN0YWtpbmcuYm9uZChcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHRoaXMuX2Ftb3VudCxcbiAgICAgICAgcGF5ZWU6IHRoaXMuX3BheWVlIHx8ICdTdGFrZWQnLFxuICAgICAgfSBhcyB1bmtub3duIGFzIHsgY29udHJvbGxlcjogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyBwYXllZTogc3RyaW5nIHwgeyBBY2NvdW50OiBzdHJpbmcgfSB9LFxuICAgICAgYmFzZVR4SW5mby5iYXNlVHhJbmZvLFxuICAgICAgYmFzZVR4SW5mby5vcHRpb25zXG4gICAgKTtcbiAgICBjYWxscy5wdXNoKGJvbmRDYWxsLm1ldGhvZCk7XG5cbiAgICAvLyBBZGQgbm9taW5hdGUgY2FsbFxuICAgIGNvbnN0IG5vbWluYXRlQ2FsbCA9IG1ldGhvZHMuc3Rha2luZy5ub21pbmF0ZShcbiAgICAgIHtcbiAgICAgICAgdGFyZ2V0czogdGhpcy5fdmFsaWRhdG9ycyxcbiAgICAgIH0sXG4gICAgICBiYXNlVHhJbmZvLmJhc2VUeEluZm8sXG4gICAgICBiYXNlVHhJbmZvLm9wdGlvbnNcbiAgICApO1xuICAgIGNhbGxzLnB1c2gobm9taW5hdGVDYWxsLm1ldGhvZCk7XG5cbiAgICAvLyBBbHdheXMgdXNlIGJhdGNoQWxsIChhdG9taWMpXG4gICAgcmV0dXJuIG1ldGhvZHMudXRpbGl0eS5iYXRjaEFsbChcbiAgICAgIHtcbiAgICAgICAgY2FsbHMsXG4gICAgICB9LFxuICAgICAgYmFzZVR4SW5mby5iYXNlVHhJbmZvLFxuICAgICAgYmFzZVR4SW5mby5vcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN0YWtpbmcgYW1vdW50IGZvciBib25kXG4gICAqL1xuICBhbW91bnQoYW1vdW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUobmV3IEJpZ051bWJlcihhbW91bnQpKTtcbiAgICB0aGlzLl9hbW91bnQgPSBhbW91bnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGFraW5nIGFtb3VudFxuICAgKi9cbiAgZ2V0QW1vdW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Ftb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHJld2FyZHMgZGVzdGluYXRpb24gZm9yIGJvbmQgKCdTdGFrZWQnLCAnU3Rhc2gnLCdDb250cm9sbGVyJywgb3IgeyBBY2NvdW50OiBzdHJpbmcgfSlcbiAgICovXG4gIHBheWVlKHBheWVlOiBzdHJpbmcgfCB7IEFjY291bnQ6IHN0cmluZyB9KTogdGhpcyB7XG4gICAgdGhpcy5fcGF5ZWUgPSBwYXllZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBheWVlXG4gICAqL1xuICBnZXRQYXllZSgpOiBzdHJpbmcgfCB7IEFjY291bnQ6IHN0cmluZyB9IHtcbiAgICByZXR1cm4gdGhpcy5fcGF5ZWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB2YWxpZGF0b3JzIHRvIG5vbWluYXRlXG4gICAqL1xuICB2YWxpZGF0b3JzKHZhbGlkYXRvcnM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgZm9yIChjb25zdCBhZGRyZXNzIG9mIHZhbGlkYXRvcnMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB9XG4gICAgdGhpcy5fdmFsaWRhdG9ycyA9IHZhbGlkYXRvcnM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWxpZGF0b3JzIHRvIG5vbWluYXRlXG4gICAqL1xuICBnZXRWYWxpZGF0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9ycztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZURlY29kZWRUcmFuc2FjdGlvbihkZWNvZGVkVHhuOiBEZWNvZGVkU2lnbmluZ1BheWxvYWQgfCBEZWNvZGVkU2lnbmVkVHgpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gZGVjb2RlZFR4bi5tZXRob2Q/Lm5hbWUgYXMgc3RyaW5nO1xuXG4gICAgLy8gYmF0Y2ggYm9uZCBhbmQgbm9taW5hdGVcbiAgICBpZiAobWV0aG9kTmFtZSA9PT0gJ2JhdGNoQWxsJykge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgQmF0Y2hBcmdzO1xuICAgICAgY29uc3QgY2FsbHMgPSB0eE1ldGhvZC5jYWxscztcblxuICAgICAgaWYgKGNhbGxzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgYmF0Y2ggc3Rha2luZyB0cmFuc2FjdGlvbjogZXhwZWN0ZWQgMiBjYWxscyBidXQgZ290ICR7Y2FsbHMubGVuZ3RofWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgdGhhdCBmaXJzdCBjYWxsIGlzIGJvbmRcbiAgICAgIGNvbnN0IGZpcnN0Q2FsbE1ldGhvZCA9IHV0aWxzLmRlY29kZU1ldGhvZE5hbWUoY2FsbHNbMF0sIHRoaXMuX3JlZ2lzdHJ5KTtcbiAgICAgIGlmIChmaXJzdENhbGxNZXRob2QgIT09ICdib25kJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgYmF0Y2ggc3Rha2luZyB0cmFuc2FjdGlvbjogZmlyc3QgY2FsbCBzaG91bGQgYmUgYm9uZCBidXQgZ290ICR7Zmlyc3RDYWxsTWV0aG9kfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgdGhhdCBzZWNvbmQgY2FsbCBpcyBub21pbmF0ZVxuICAgICAgY29uc3Qgc2Vjb25kQ2FsbE1ldGhvZCA9IHV0aWxzLmRlY29kZU1ldGhvZE5hbWUoY2FsbHNbMV0sIHRoaXMuX3JlZ2lzdHJ5KTtcbiAgICAgIGlmIChzZWNvbmRDYWxsTWV0aG9kICE9PSAnbm9taW5hdGUnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBiYXRjaCBzdGFraW5nIHRyYW5zYWN0aW9uOiBzZWNvbmQgY2FsbCBzaG91bGQgYmUgbm9taW5hdGUgYnV0IGdvdCAke3NlY29uZENhbGxNZXRob2R9YFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBib25kIGFyZ3VtZW50c1xuICAgICAgY29uc3QgYm9uZEFyZ3MgPSBjYWxsc1swXS5hcmdzIGFzIHVua25vd24gYXMgVjhCb25kQXJncztcbiAgICAgIHRoaXMudmFsaWRhdGVCb25kQXJncyhib25kQXJncyk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIG5vbWluYXRlIGFyZ3VtZW50c1xuICAgICAgY29uc3Qgbm9taW5hdGVBcmdzID0gY2FsbHNbMV0uYXJncyBhcyB1bmtub3duIGFzIE5vbWluYXRlQXJncztcbiAgICAgIHRoaXMudmFsaWRhdGVOb21pbmF0ZUFyZ3Mobm9taW5hdGVBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHRyYW5zYWN0aW9uIHR5cGU6ICR7bWV0aG9kTmFtZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIGEgZGVjb2RlZCBwYXllZSB2YWx1ZSBpbnRvIHRoZSBjb25zdHJ1Y3Rpb24tc2lkZSBzaGFwZS5cbiAgICovXG4gIHByaXZhdGUgbm9ybWFsaXplUGF5ZWUocGF5ZWVWYWx1ZTogUGF5ZWVWYWx1ZSk6IHN0cmluZyB8IHsgQWNjb3VudDogc3RyaW5nIH0ge1xuICAgIGxldCBub3JtYWxpemVkUGF5ZWU6IHN0cmluZyB8IHsgQWNjb3VudDogc3RyaW5nIH0gPSBwYXllZVZhbHVlIGFzIHN0cmluZztcbiAgICBpZiAodHlwZW9mIHBheWVlVmFsdWUgPT09ICdvYmplY3QnICYmIHBheWVlVmFsdWUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGRlY29kZWRQYXllZSA9IHBheWVlVmFsdWUgYXMgRGVjb2RlZFBheWVlO1xuICAgICAgaWYgKGRlY29kZWRQYXllZS5zdGFrZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub3JtYWxpemVkUGF5ZWUgPSAnU3Rha2VkJztcbiAgICAgIH0gZWxzZSBpZiAoZGVjb2RlZFBheWVlLnN0YXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbm9ybWFsaXplZFBheWVlID0gJ1N0YXNoJztcbiAgICAgIH0gZWxzZSBpZiAoZGVjb2RlZFBheWVlLmNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub3JtYWxpemVkUGF5ZWUgPSAnQ29udHJvbGxlcic7XG4gICAgICB9IGVsc2UgaWYgKGRlY29kZWRQYXllZS5hY2NvdW50KSB7XG4gICAgICAgIG5vcm1hbGl6ZWRQYXllZSA9IHsgQWNjb3VudDogZGVjb2RlZFBheWVlLmFjY291bnQgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXllZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB2OCBib25kIGFyZ3VtZW50cyAobm8gY29udHJvbGxlcilcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVCb25kQXJncyhhcmdzOiBWOEJvbmRBcmdzKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGJvdGggc3RyaW5nIGFuZCBudW1iZXIgZm9ybWF0cyBmb3IgdmFsdWVcbiAgICBjb25zdCBhbW91bnRWYWx1ZSA9IGFyZ3MudmFsdWUgYXMgQW1vdW50VmFsdWU7XG4gICAgY29uc3QgdmFsdWVTdHJpbmcgPSB0eXBlb2YgYW1vdW50VmFsdWUgPT09ICdzdHJpbmcnID8gYW1vdW50VmFsdWUgOiBhbW91bnRWYWx1ZS50b1N0cmluZygpO1xuXG4gICAgY29uc3Qgbm9ybWFsaXplZFBheWVlID0gdGhpcy5ub3JtYWxpemVQYXllZShhcmdzLnBheWVlIGFzIFBheWVlVmFsdWUpO1xuXG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IFY4QmF0Y2hUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZUJvbmQoe1xuICAgICAgdmFsdWU6IHZhbHVlU3RyaW5nLFxuICAgICAgcGF5ZWU6IG5vcm1hbGl6ZWRQYXllZSxcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgYm9uZCBhcmdzOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgbm9taW5hdGUgYXJndW1lbnRzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTm9taW5hdGVBcmdzKGFyZ3M6IE5vbWluYXRlQXJncyk6IHZvaWQge1xuICAgIC8vIEhhbmRsZSBib3RoIHN0cmluZyBhbmQgb2JqZWN0IGZvcm1hdHMgZm9yIHRhcmdldHNcbiAgICBjb25zdCB0YXJnZXRBZGRyZXNzZXMgPSBhcmdzLnRhcmdldHMubWFwKCh0YXJnZXQpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgJiYgJ2lkJyBpbiB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuICh0YXJnZXQgYXMgeyBpZDogc3RyaW5nIH0pLmlkO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHRhcmdldCBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0KX1gKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBWOEJhdGNoVHJhbnNhY3Rpb25TY2hlbWEudmFsaWRhdGVOb21pbmF0ZSh7XG4gICAgICB2YWxpZGF0b3JzOiB0YXJnZXRBZGRyZXNzZXMsXG4gICAgfSk7XG5cbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIG5vbWluYXRlIGFyZ3M6ICR7dmFsaWRhdGlvblJlc3VsdC5lcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBzdXBlci5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIGEgYmF0Y2ggdHJhbnNhY3Rpb25cbiAgICBpZiAoKHRoaXMuX21ldGhvZD8ubmFtZSBhcyBzdHJpbmcpICE9PSAnYmF0Y2hBbGwnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgVHJhbnNhY3Rpb24gVHlwZTogJHt0aGlzLl9tZXRob2Q/Lm5hbWV9LiBFeHBlY3RlZCBiYXRjaEFsbGApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9tZXRob2QpIHtcbiAgICAgIGNvbnN0IHR4TWV0aG9kID0gdGhpcy5fbWV0aG9kLmFyZ3MgYXMgdW5rbm93biBhcyBCYXRjaEFyZ3M7XG5cbiAgICAgIGZvciAoY29uc3QgY2FsbCBvZiB0eE1ldGhvZC5jYWxscykge1xuICAgICAgICBjb25zdCBjYWxsTWV0aG9kID0gdXRpbHMuZGVjb2RlTWV0aG9kTmFtZShjYWxsLCB0aGlzLl9yZWdpc3RyeSk7XG4gICAgICAgIGlmIChjYWxsTWV0aG9kID09PSAnYm9uZCcpIHtcbiAgICAgICAgICBjb25zdCBib25kQXJncyA9IGNhbGwuYXJncyBhcyB1bmtub3duIGFzIFY4Qm9uZEFyZ3M7XG4gICAgICAgICAgLy8gSGFuZGxlIGJvdGggc3RyaW5nIGFuZCBudW1iZXIgZm9ybWF0cyBmb3IgdmFsdWVcbiAgICAgICAgICBjb25zdCBhbW91bnRWYWx1ZSA9IGJvbmRBcmdzLnZhbHVlIGFzIEFtb3VudFZhbHVlO1xuICAgICAgICAgIGNvbnN0IHZhbHVlU3RyaW5nID0gdHlwZW9mIGFtb3VudFZhbHVlID09PSAnc3RyaW5nJyA/IGFtb3VudFZhbHVlIDogYW1vdW50VmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICB0aGlzLmFtb3VudCh2YWx1ZVN0cmluZyk7XG5cbiAgICAgICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IHBheWVlIGZvcm1hdHNcbiAgICAgICAgICB0aGlzLnBheWVlKHRoaXMubm9ybWFsaXplUGF5ZWUoYm9uZEFyZ3MucGF5ZWUgYXMgUGF5ZWVWYWx1ZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGNhbGxNZXRob2QgPT09ICdub21pbmF0ZScpIHtcbiAgICAgICAgICBjb25zdCBub21pbmF0ZUFyZ3MgPSBjYWxsLmFyZ3MgYXMgdW5rbm93biBhcyBOb21pbmF0ZUFyZ3M7XG5cbiAgICAgICAgICAvLyBIYW5kbGUgYm90aCBzdHJpbmcgYW5kIG9iamVjdCBmb3JtYXRzIGZvciB0YXJnZXRzXG4gICAgICAgICAgY29uc3QgdGFyZ2V0QWRkcmVzc2VzID0gbm9taW5hdGVBcmdzLnRhcmdldHMubWFwKCh0YXJnZXQpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgJiYgJ2lkJyBpbiB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICh0YXJnZXQgYXMgeyBpZDogc3RyaW5nIH0pLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHRhcmdldCBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0KX1gKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRvcnModGFyZ2V0QWRkcmVzc2VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0eDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24odHgpO1xuICAgIHRoaXMudmFsaWRhdGVGaWVsZHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgYnVpbGRlciBmaWVsZHNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVGaWVsZHMoKTogdm9pZCB7XG4gICAgLy8gRW5zdXJlIGJvdGggYm9uZCBhbmQgbm9taW5hdGUgb3BlcmF0aW9ucyBhcmUgaW5jbHVkZWRcbiAgICBpZiAoIXRoaXMuX2Ftb3VudCB8fCB0aGlzLl92YWxpZGF0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdCYXRjaCB0cmFuc2FjdGlvbiBtdXN0IGluY2x1ZGUgYm90aCBib25kIGFuZCBub21pbmF0ZSBvcGVyYXRpb25zJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IFY4QmF0Y2hUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh7XG4gICAgICBhbW91bnQ6IHRoaXMuX2Ftb3VudCxcbiAgICAgIHBheWVlOiB0aGlzLl9wYXllZSxcbiAgICAgIHZhbGlkYXRvcnM6IHRoaXMuX3ZhbGlkYXRvcnMsXG4gICAgfSk7XG5cbiAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHRyYW5zYWN0aW9uOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICB0ZXN0VmFsaWRhdGVGaWVsZHMoKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZUZpZWxkcygpO1xuICB9XG5cbiAgcHVibGljIHRlc3RWYWxpZGF0ZUJvbmRBcmdzKGFyZ3M6IFY4Qm9uZEFyZ3MpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUJvbmRBcmdzKGFyZ3MpO1xuICB9XG5cbiAgcHVibGljIHRlc3RWYWxpZGF0ZU5vbWluYXRlQXJncyhhcmdzOiBOb21pbmF0ZUFyZ3MpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZU5vbWluYXRlQXJncyhhcmdzKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
+
import { BatchUnstakingBuilder } from './batchUnstakingBuilder';
|
|
3
|
+
/**
|
|
4
|
+
* Builds a `utility.batchAll([chill, unbond])` unstaking transaction against Polymesh v8 chain
|
|
5
|
+
* metadata. chill/unbond are unchanged between v7 and v8; only the material (specVersion /
|
|
6
|
+
* txVersion) differs from {@link BatchUnstakingBuilder}.
|
|
7
|
+
*/
|
|
8
|
+
export declare class V8BatchUnstakingBuilder extends BatchUnstakingBuilder {
|
|
9
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=v8BatchUnstakingBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v8BatchUnstakingBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/v8BatchUnstakingBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhE;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,qBAAqB;gBACpD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;CAI9C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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.V8BatchUnstakingBuilder = void 0;
|
|
7
|
+
const batchUnstakingBuilder_1 = require("./batchUnstakingBuilder");
|
|
8
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
9
|
+
/**
|
|
10
|
+
* Builds a `utility.batchAll([chill, unbond])` unstaking transaction against Polymesh v8 chain
|
|
11
|
+
* metadata. chill/unbond are unchanged between v7 and v8; only the material (specVersion /
|
|
12
|
+
* txVersion) differs from {@link BatchUnstakingBuilder}.
|
|
13
|
+
*/
|
|
14
|
+
class V8BatchUnstakingBuilder extends batchUnstakingBuilder_1.BatchUnstakingBuilder {
|
|
15
|
+
constructor(_coinConfig) {
|
|
16
|
+
super(_coinConfig);
|
|
17
|
+
this.material(utils_1.default.getV8Material(_coinConfig.network.type));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.V8BatchUnstakingBuilder = V8BatchUnstakingBuilder;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhCYXRjaFVuc3Rha2luZ0J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Y4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLG1FQUFnRTtBQUNoRSxvREFBNEI7QUFFNUI7Ozs7R0FJRztBQUNILE1BQWEsdUJBQXdCLFNBQVEsNkNBQXFCO0lBQ2hFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBSyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGO0FBTEQsMERBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCYXRjaFVuc3Rha2luZ0J1aWxkZXIgfSBmcm9tICcuL2JhdGNoVW5zdGFraW5nQnVpbGRlcic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQnVpbGRzIGEgYHV0aWxpdHkuYmF0Y2hBbGwoW2NoaWxsLCB1bmJvbmRdKWAgdW5zdGFraW5nIHRyYW5zYWN0aW9uIGFnYWluc3QgUG9seW1lc2ggdjggY2hhaW5cbiAqIG1ldGFkYXRhLiBjaGlsbC91bmJvbmQgYXJlIHVuY2hhbmdlZCBiZXR3ZWVuIHY3IGFuZCB2ODsgb25seSB0aGUgbWF0ZXJpYWwgKHNwZWNWZXJzaW9uIC9cbiAqIHR4VmVyc2lvbikgZGlmZmVycyBmcm9tIHtAbGluayBCYXRjaFVuc3Rha2luZ0J1aWxkZXJ9LlxuICovXG5leHBvcnQgY2xhc3MgVjhCYXRjaFVuc3Rha2luZ0J1aWxkZXIgZXh0ZW5kcyBCYXRjaFVuc3Rha2luZ0J1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5tYXRlcmlhbCh1dGlscy5nZXRWOE1hdGVyaWFsKF9jb2luQ29uZmlnLm5ldHdvcmsudHlwZSkpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
+
import { BondExtraBuilder } from './bondExtraBuilder';
|
|
3
|
+
/**
|
|
4
|
+
* Builds a staking.bondExtra transaction against Polymesh v8 chain metadata. bondExtra is
|
|
5
|
+
* unchanged between v7 and v8 (`bondExtra(maxAdditional)`); only the material (specVersion /
|
|
6
|
+
* txVersion) differs from {@link BondExtraBuilder}.
|
|
7
|
+
*/
|
|
8
|
+
export declare class V8BondExtraBuilder extends BondExtraBuilder {
|
|
9
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=v8BondExtraBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v8BondExtraBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/v8BondExtraBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,gBAAgB;gBAC1C,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;CAI9C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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.V8BondExtraBuilder = void 0;
|
|
7
|
+
const bondExtraBuilder_1 = require("./bondExtraBuilder");
|
|
8
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
9
|
+
/**
|
|
10
|
+
* Builds a staking.bondExtra transaction against Polymesh v8 chain metadata. bondExtra is
|
|
11
|
+
* unchanged between v7 and v8 (`bondExtra(maxAdditional)`); only the material (specVersion /
|
|
12
|
+
* txVersion) differs from {@link BondExtraBuilder}.
|
|
13
|
+
*/
|
|
14
|
+
class V8BondExtraBuilder extends bondExtraBuilder_1.BondExtraBuilder {
|
|
15
|
+
constructor(_coinConfig) {
|
|
16
|
+
super(_coinConfig);
|
|
17
|
+
this.material(utils_1.default.getV8Material(_coinConfig.network.type));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.V8BondExtraBuilder = V8BondExtraBuilder;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhCb25kRXh0cmFCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi92OEJvbmRFeHRyYUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EseURBQXNEO0FBQ3RELG9EQUE0QjtBQUU1Qjs7OztHQUlHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxtQ0FBZ0I7SUFDdEQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0NBQ0Y7QUFMRCxnREFLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJvbmRFeHRyYUJ1aWxkZXIgfSBmcm9tICcuL2JvbmRFeHRyYUJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIEJ1aWxkcyBhIHN0YWtpbmcuYm9uZEV4dHJhIHRyYW5zYWN0aW9uIGFnYWluc3QgUG9seW1lc2ggdjggY2hhaW4gbWV0YWRhdGEuIGJvbmRFeHRyYSBpc1xuICogdW5jaGFuZ2VkIGJldHdlZW4gdjcgYW5kIHY4IChgYm9uZEV4dHJhKG1heEFkZGl0aW9uYWwpYCk7IG9ubHkgdGhlIG1hdGVyaWFsIChzcGVjVmVyc2lvbiAvXG4gKiB0eFZlcnNpb24pIGRpZmZlcnMgZnJvbSB7QGxpbmsgQm9uZEV4dHJhQnVpbGRlcn0uXG4gKi9cbmV4cG9ydCBjbGFzcyBWOEJvbmRFeHRyYUJ1aWxkZXIgZXh0ZW5kcyBCb25kRXh0cmFCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMubWF0ZXJpYWwodXRpbHMuZ2V0VjhNYXRlcmlhbChfY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUpKTtcbiAgfVxufVxuIl19
|