@bitgo-beta/sdk-coin-vet 1.0.1-beta.32 → 1.0.1-beta.320
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/.mocharc.yml +1 -1
- package/CHANGELOG.md +150 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/lib/constants.d.ts +11 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +13 -3
- package/dist/src/lib/iface.d.ts +28 -1
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +18 -3
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +35 -5
- package/dist/src/lib/transaction/addressInitializationTransaction.d.ts +31 -0
- package/dist/src/lib/transaction/addressInitializationTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/addressInitializationTransaction.js +170 -0
- package/dist/src/lib/transaction/burnNftTransaction.d.ts +26 -0
- package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/burnNftTransaction.js +124 -0
- package/dist/src/lib/transaction/claimRewards.d.ts +58 -0
- package/dist/src/lib/transaction/claimRewards.d.ts.map +1 -0
- package/dist/src/lib/transaction/claimRewards.js +242 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts +26 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -0
- package/dist/src/lib/transaction/exitDelegation.js +124 -0
- package/dist/src/lib/transaction/flushTokenTransaction.d.ts +20 -0
- package/dist/src/lib/transaction/flushTokenTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/flushTokenTransaction.js +98 -0
- package/dist/src/lib/transaction/nftTransaction.d.ts +17 -0
- package/dist/src/lib/transaction/nftTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/nftTransaction.js +108 -0
- package/dist/src/lib/transaction/stakingTransaction.d.ts +21 -0
- package/dist/src/lib/transaction/stakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/stakingTransaction.js +136 -0
- package/dist/src/lib/transaction/tokenTransaction.d.ts +14 -0
- package/dist/src/lib/transaction/tokenTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/tokenTransaction.js +95 -0
- package/dist/src/lib/transaction/transaction.d.ts +106 -0
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/transaction.js +468 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts +78 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.js +158 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts +65 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.js +130 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts +57 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +145 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +65 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +132 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts +66 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.js +129 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts +23 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.js +93 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts +72 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.js +129 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts +21 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.js +70 -0
- package/dist/src/lib/{transactionBuilder.d.ts → transactionBuilder/transactionBuilder.d.ts} +29 -18
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/transactionBuilder.js +155 -0
- package/dist/src/lib/{transferBuilder.d.ts → transactionBuilder/transferBuilder.d.ts} +4 -2
- package/dist/src/lib/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/transferBuilder.js +45 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +64 -5
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +140 -5
- package/dist/src/lib/types.d.ts +15 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +3 -0
- package/dist/src/lib/utils.d.ts +19 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +110 -3
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +9 -1
- package/dist/src/vet.d.ts +15 -4
- package/dist/src/vet.d.ts.map +1 -1
- package/dist/src/vet.js +154 -7
- package/dist/src/vetNFTCollection.d.ts +18 -0
- package/dist/src/vetNFTCollection.d.ts.map +1 -0
- package/dist/src/vetNFTCollection.js +52 -0
- package/dist/src/vetToken.d.ts +19 -0
- package/dist/src/vetToken.d.ts.map +1 -0
- package/dist/src/vetToken.js +52 -0
- package/package.json +14 -9
- package/dist/src/lib/transaction.d.ts +0 -8
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -17
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -78
- package/dist/src/lib/transferBuilder.d.ts.map +0 -1
- package/dist/src/lib/transferBuilder.js +0 -15
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
+
import { Transaction as VetTransaction } from '@vechain/sdk-core';
|
|
3
|
+
import { Transaction } from './transaction';
|
|
4
|
+
import { VetTransactionData } from '../iface';
|
|
5
|
+
export declare class BurnNftTransaction extends Transaction {
|
|
6
|
+
private _tokenId;
|
|
7
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
8
|
+
get tokenId(): string;
|
|
9
|
+
set tokenId(id: string);
|
|
10
|
+
/** @inheritdoc */
|
|
11
|
+
build(): Promise<void>;
|
|
12
|
+
/** @inheritdoc */
|
|
13
|
+
buildClauses(): void;
|
|
14
|
+
/**
|
|
15
|
+
* Generates the transaction data for burning NFT by encoding the burn method call.
|
|
16
|
+
*
|
|
17
|
+
* @private
|
|
18
|
+
* @returns {string} The encoded transaction data as a hex string
|
|
19
|
+
*/
|
|
20
|
+
private getBurnNftData;
|
|
21
|
+
/** @inheritdoc */
|
|
22
|
+
toJson(): VetTransactionData;
|
|
23
|
+
/** @inheritdoc */
|
|
24
|
+
fromDeserializedSignedTransaction(signedTx: VetTransaction): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=burnNftTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"burnNftTransaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/burnNftTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,IAAI,cAAc,EAAa,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAK9C,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAS;gBAEb,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,EAAE,EAAE,MAAM,EAErB;IAED,kBAAkB;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,kBAAkB;IAClB,YAAY,IAAI,IAAI;IAcpB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAWtB,kBAAkB;IAClB,MAAM,IAAI,kBAAkB;IAkB5B,kBAAkB;IAClB,iCAAiC,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAmDlE"}
|
|
@@ -0,0 +1,124 @@
|
|
|
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.BurnNftTransaction = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const sdk_core_2 = require("@vechain/sdk-core");
|
|
9
|
+
const transaction_1 = require("./transaction");
|
|
10
|
+
const constants_1 = require("../constants");
|
|
11
|
+
const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
|
|
12
|
+
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
13
|
+
class BurnNftTransaction extends transaction_1.Transaction {
|
|
14
|
+
constructor(_coinConfig) {
|
|
15
|
+
super(_coinConfig);
|
|
16
|
+
this._type = sdk_core_1.TransactionType.StakingWithdraw;
|
|
17
|
+
}
|
|
18
|
+
get tokenId() {
|
|
19
|
+
return this._tokenId;
|
|
20
|
+
}
|
|
21
|
+
set tokenId(id) {
|
|
22
|
+
this._tokenId = id;
|
|
23
|
+
}
|
|
24
|
+
/** @inheritdoc */
|
|
25
|
+
async build() {
|
|
26
|
+
this.buildClauses();
|
|
27
|
+
await this.buildRawTransaction();
|
|
28
|
+
this.generateTxnIdAndSetSender();
|
|
29
|
+
this.loadInputsAndOutputs();
|
|
30
|
+
}
|
|
31
|
+
/** @inheritdoc */
|
|
32
|
+
buildClauses() {
|
|
33
|
+
if (!this._contract || !this._tokenId) {
|
|
34
|
+
throw new sdk_core_1.InvalidTransactionError('Missing required burn NFT parameters');
|
|
35
|
+
}
|
|
36
|
+
this._clauses = [
|
|
37
|
+
{
|
|
38
|
+
to: this._contract,
|
|
39
|
+
value: '0x0',
|
|
40
|
+
data: this._transactionData || this.getBurnNftData(),
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Generates the transaction data for burning NFT by encoding the burn method call.
|
|
46
|
+
*
|
|
47
|
+
* @private
|
|
48
|
+
* @returns {string} The encoded transaction data as a hex string
|
|
49
|
+
*/
|
|
50
|
+
getBurnNftData() {
|
|
51
|
+
const methodName = 'burn';
|
|
52
|
+
const types = ['uint256'];
|
|
53
|
+
const params = [this._tokenId];
|
|
54
|
+
const method = ethereumjs_abi_1.default.methodID(methodName, types);
|
|
55
|
+
const args = ethereumjs_abi_1.default.rawEncode(types, params);
|
|
56
|
+
return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
|
|
57
|
+
}
|
|
58
|
+
/** @inheritdoc */
|
|
59
|
+
toJson() {
|
|
60
|
+
const json = {
|
|
61
|
+
id: this.id,
|
|
62
|
+
chainTag: this.chainTag,
|
|
63
|
+
blockRef: this.blockRef,
|
|
64
|
+
expiration: this.expiration,
|
|
65
|
+
gasPriceCoef: this.gasPriceCoef,
|
|
66
|
+
gas: this.gas,
|
|
67
|
+
dependsOn: this.dependsOn,
|
|
68
|
+
nonce: this.nonce,
|
|
69
|
+
data: this.transactionData || this.getBurnNftData(),
|
|
70
|
+
value: '0',
|
|
71
|
+
sender: this.sender,
|
|
72
|
+
to: this.contract,
|
|
73
|
+
};
|
|
74
|
+
return json;
|
|
75
|
+
}
|
|
76
|
+
/** @inheritdoc */
|
|
77
|
+
fromDeserializedSignedTransaction(signedTx) {
|
|
78
|
+
try {
|
|
79
|
+
if (!signedTx || !signedTx.body) {
|
|
80
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid transaction: missing transaction body');
|
|
81
|
+
}
|
|
82
|
+
// Store the raw transaction
|
|
83
|
+
this.rawTransaction = signedTx;
|
|
84
|
+
// Set transaction body properties
|
|
85
|
+
const body = signedTx.body;
|
|
86
|
+
this.chainTag = typeof body.chainTag === 'number' ? body.chainTag : 0;
|
|
87
|
+
this.blockRef = body.blockRef || '0x0';
|
|
88
|
+
this.expiration = typeof body.expiration === 'number' ? body.expiration : 64;
|
|
89
|
+
this.clauses = body.clauses || [];
|
|
90
|
+
this.gasPriceCoef = typeof body.gasPriceCoef === 'number' ? body.gasPriceCoef : 128;
|
|
91
|
+
this.gas = typeof body.gas === 'number' ? body.gas : Number(body.gas) || 0;
|
|
92
|
+
this.dependsOn = body.dependsOn || null;
|
|
93
|
+
this.nonce = String(body.nonce);
|
|
94
|
+
// Set data from clauses
|
|
95
|
+
this.contract = body.clauses[0]?.to || '0x0';
|
|
96
|
+
this.transactionData = body.clauses[0]?.data || '0x0';
|
|
97
|
+
this.type = sdk_core_1.TransactionType.StakingWithdraw;
|
|
98
|
+
// Extract tokenId from transaction data
|
|
99
|
+
if (this.transactionData.startsWith(constants_1.BURN_NFT_METHOD_ID)) {
|
|
100
|
+
const tokenIdHex = this.transactionData.slice(constants_1.BURN_NFT_METHOD_ID.length);
|
|
101
|
+
// Convert hex to decimal
|
|
102
|
+
this.tokenId = parseInt(tokenIdHex, 16).toString();
|
|
103
|
+
}
|
|
104
|
+
// Set sender address
|
|
105
|
+
if (signedTx.signature && signedTx.origin) {
|
|
106
|
+
this.sender = signedTx.origin.toString().toLowerCase();
|
|
107
|
+
}
|
|
108
|
+
// Set signatures if present
|
|
109
|
+
if (signedTx.signature) {
|
|
110
|
+
// First signature is sender's signature
|
|
111
|
+
this.senderSignature = Buffer.from(signedTx.signature.slice(0, sdk_core_2.Secp256k1.SIGNATURE_LENGTH));
|
|
112
|
+
// If there's additional signature data, it's the fee payer's signature
|
|
113
|
+
if (signedTx.signature.length > sdk_core_2.Secp256k1.SIGNATURE_LENGTH) {
|
|
114
|
+
this.feePayerSignature = Buffer.from(signedTx.signature.slice(sdk_core_2.Secp256k1.SIGNATURE_LENGTH));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
throw new sdk_core_1.InvalidTransactionError(`Failed to deserialize transaction: ${e.message}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.BurnNftTransaction = BurnNftTransaction;
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVybk5mdFRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbi9idXJuTmZ0VHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQWdGO0FBRWhGLGdEQUE2RTtBQUM3RSwrQ0FBNEM7QUFFNUMsNENBQWtEO0FBQ2xELG9FQUF5QztBQUN6QyxxREFBK0M7QUFFL0MsTUFBYSxrQkFBbUIsU0FBUSx5QkFBVztJQUdqRCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsZUFBZSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEVBQVU7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixLQUFLLENBQUMsS0FBSztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2Q7Z0JBQ0UsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUNsQixLQUFLLEVBQUUsS0FB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SyxDQUFDLENBQUMsRUFBRSxvQkFBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFFNUYsdUVBQXVFO2dCQUN2RSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLG9CQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsb0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzdGLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksa0NBQXVCLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUEvSEQsZ0RBK0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlLCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIGFzIFZldFRyYW5zYWN0aW9uLCBTZWNwMjU2azEgfSBmcm9tICdAdmVjaGFpbi9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVmV0VHJhbnNhY3Rpb25EYXRhIH0gZnJvbSAnLi4vaWZhY2UnO1xuaW1wb3J0IHsgQlVSTl9ORlRfTUVUSE9EX0lEIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCBFdGhlcmV1bUFiaSBmcm9tICdldGhlcmV1bWpzLWFiaSc7XG5pbXBvcnQgeyBhZGRIZXhQcmVmaXggfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuXG5leHBvcnQgY2xhc3MgQnVybk5mdFRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF90b2tlbklkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3O1xuICB9XG5cbiAgZ2V0IHRva2VuSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5JZDtcbiAgfVxuXG4gIHNldCB0b2tlbklkKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90b2tlbklkID0gaWQ7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYXN5bmMgYnVpbGQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5idWlsZENsYXVzZXMoKTtcbiAgICBhd2FpdCB0aGlzLmJ1aWxkUmF3VHJhbnNhY3Rpb24oKTtcbiAgICB0aGlzLmdlbmVyYXRlVHhuSWRBbmRTZXRTZW5kZXIoKTtcbiAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYnVpbGRDbGF1c2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY29udHJhY3QgfHwgIXRoaXMuX3Rva2VuSWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyByZXF1aXJlZCBidXJuIE5GVCBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2xhdXNlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgdG86IHRoaXMuX2NvbnRyYWN0LFxuICAgICAgICB2YWx1ZTogJzB4MCcsXG4gICAgICAgIGRhdGE6IHRoaXMuX3RyYW5zYWN0aW9uRGF0YSB8fCB0aGlzLmdldEJ1cm5OZnREYXRhKCksXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSB0cmFuc2FjdGlvbiBkYXRhIGZvciBidXJuaW5nIE5GVCBieSBlbmNvZGluZyB0aGUgYnVybiBtZXRob2QgY2FsbC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdHJhbnNhY3Rpb24gZGF0YSBhcyBhIGhleCBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgZ2V0QnVybk5mdERhdGEoKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gJ2J1cm4nO1xuICAgIGNvbnN0IHR5cGVzID0gWyd1aW50MjU2J107XG4gICAgY29uc3QgcGFyYW1zID0gW3RoaXMuX3Rva2VuSWRdO1xuXG4gICAgY29uc3QgbWV0aG9kID0gRXRoZXJldW1BYmkubWV0aG9kSUQobWV0aG9kTmFtZSwgdHlwZXMpO1xuICAgIGNvbnN0IGFyZ3MgPSBFdGhlcmV1bUFiaS5yYXdFbmNvZGUodHlwZXMsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gYWRkSGV4UHJlZml4KEJ1ZmZlci5jb25jYXQoW21ldGhvZCwgYXJnc10pLnRvU3RyaW5nKCdoZXgnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFZldFRyYW5zYWN0aW9uRGF0YSB7XG4gICAgY29uc3QganNvbjogVmV0VHJhbnNhY3Rpb25EYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBjaGFpblRhZzogdGhpcy5jaGFpblRhZyxcbiAgICAgIGJsb2NrUmVmOiB0aGlzLmJsb2NrUmVmLFxuICAgICAgZXhwaXJhdGlvbjogdGhpcy5leHBpcmF0aW9uLFxuICAgICAgZ2FzUHJpY2VDb2VmOiB0aGlzLmdhc1ByaWNlQ29lZixcbiAgICAgIGdhczogdGhpcy5nYXMsXG4gICAgICBkZXBlbmRzT246IHRoaXMuZGVwZW5kc09uLFxuICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXG4gICAgICBkYXRhOiB0aGlzLnRyYW5zYWN0aW9uRGF0YSB8fCB0aGlzLmdldEJ1cm5OZnREYXRhKCksXG4gICAgICB2YWx1ZTogJzAnLFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIHRvOiB0aGlzLmNvbnRyYWN0LFxuICAgIH07XG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4OiBWZXRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXNpZ25lZFR4IHx8ICFzaWduZWRUeC5ib2R5KSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyB0cmFuc2FjdGlvbiBib2R5Jyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0b3JlIHRoZSByYXcgdHJhbnNhY3Rpb25cbiAgICAgIHRoaXMucmF3VHJhbnNhY3Rpb24gPSBzaWduZWRUeDtcblxuICAgICAgLy8gU2V0IHRyYW5zYWN0aW9uIGJvZHkgcHJvcGVydGllc1xuICAgICAgY29uc3QgYm9keSA9IHNpZ25lZFR4LmJvZHk7XG4gICAgICB0aGlzLmNoYWluVGFnID0gdHlwZW9mIGJvZHkuY2hhaW5UYWcgPT09ICdudW1iZXInID8gYm9keS5jaGFpblRhZyA6IDA7XG4gICAgICB0aGlzLmJsb2NrUmVmID0gYm9keS5ibG9ja1JlZiB8fCAnMHgwJztcbiAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IHR5cGVvZiBib2R5LmV4cGlyYXRpb24gPT09ICdudW1iZXInID8gYm9keS5leHBpcmF0aW9uIDogNjQ7XG4gICAgICB0aGlzLmNsYXVzZXMgPSBib2R5LmNsYXVzZXMgfHwgW107XG4gICAgICB0aGlzLmdhc1ByaWNlQ29lZiA9IHR5cGVvZiBib2R5Lmdhc1ByaWNlQ29lZiA9PT0gJ251bWJlcicgPyBib2R5Lmdhc1ByaWNlQ29lZiA6IDEyODtcbiAgICAgIHRoaXMuZ2FzID0gdHlwZW9mIGJvZHkuZ2FzID09PSAnbnVtYmVyJyA/IGJvZHkuZ2FzIDogTnVtYmVyKGJvZHkuZ2FzKSB8fCAwO1xuICAgICAgdGhpcy5kZXBlbmRzT24gPSBib2R5LmRlcGVuZHNPbiB8fCBudWxsO1xuICAgICAgdGhpcy5ub25jZSA9IFN0cmluZyhib2R5Lm5vbmNlKTtcblxuICAgICAgLy8gU2V0IGRhdGEgZnJvbSBjbGF1c2VzXG4gICAgICB0aGlzLmNvbnRyYWN0ID0gYm9keS5jbGF1c2VzWzBdPy50byB8fCAnMHgwJztcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25EYXRhID0gYm9keS5jbGF1c2VzWzBdPy5kYXRhIHx8ICcweDAnO1xuICAgICAgdGhpcy50eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdztcblxuICAgICAgLy8gRXh0cmFjdCB0b2tlbklkIGZyb20gdHJhbnNhY3Rpb24gZGF0YVxuICAgICAgaWYgKHRoaXMudHJhbnNhY3Rpb25EYXRhLnN0YXJ0c1dpdGgoQlVSTl9ORlRfTUVUSE9EX0lEKSkge1xuICAgICAgICBjb25zdCB0b2tlbklkSGV4ID0gdGhpcy50cmFuc2FjdGlvbkRhdGEuc2xpY2UoQlVSTl9ORlRfTUVUSE9EX0lELmxlbmd0aCk7XG4gICAgICAgIC8vIENvbnZlcnQgaGV4IHRvIGRlY2ltYWxcbiAgICAgICAgdGhpcy50b2tlbklkID0gcGFyc2VJbnQodG9rZW5JZEhleCwgMTYpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBzZW5kZXIgYWRkcmVzc1xuICAgICAgaWYgKHNpZ25lZFR4LnNpZ25hdHVyZSAmJiBzaWduZWRUeC5vcmlnaW4pIHtcbiAgICAgICAgdGhpcy5zZW5kZXIgPSBzaWduZWRUeC5vcmlnaW4udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgc2lnbmF0dXJlcyBpZiBwcmVzZW50XG4gICAgICBpZiAoc2lnbmVkVHguc2lnbmF0dXJlKSB7XG4gICAgICAgIC8vIEZpcnN0IHNpZ25hdHVyZSBpcyBzZW5kZXIncyBzaWduYXR1cmVcbiAgICAgICAgdGhpcy5zZW5kZXJTaWduYXR1cmUgPSBCdWZmZXIuZnJvbShzaWduZWRUeC5zaWduYXR1cmUuc2xpY2UoMCwgU2VjcDI1NmsxLlNJR05BVFVSRV9MRU5HVEgpKTtcblxuICAgICAgICAvLyBJZiB0aGVyZSdzIGFkZGl0aW9uYWwgc2lnbmF0dXJlIGRhdGEsIGl0J3MgdGhlIGZlZSBwYXllcidzIHNpZ25hdHVyZVxuICAgICAgICBpZiAoc2lnbmVkVHguc2lnbmF0dXJlLmxlbmd0aCA+IFNlY3AyNTZrMS5TSUdOQVRVUkVfTEVOR1RIKSB7XG4gICAgICAgICAgdGhpcy5mZWVQYXllclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHNpZ25lZFR4LnNpZ25hdHVyZS5zbGljZShTZWNwMjU2azEuU0lHTkFUVVJFX0xFTkdUSCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBGYWlsZWQgdG8gZGVzZXJpYWxpemUgdHJhbnNhY3Rpb246ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { TransactionRecipient } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { Transaction as VetTransaction, TransactionClause } from '@vechain/sdk-core';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
import { VetTransactionData } from '../iface';
|
|
6
|
+
import { ClaimRewardsData } from '../types';
|
|
7
|
+
export declare class ClaimRewardsTransaction extends Transaction {
|
|
8
|
+
private _claimRewardsData;
|
|
9
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
10
|
+
get claimRewardsData(): ClaimRewardsData;
|
|
11
|
+
set claimRewardsData(data: ClaimRewardsData);
|
|
12
|
+
/** @inheritdoc */
|
|
13
|
+
build(): Promise<void>;
|
|
14
|
+
get clauses(): TransactionClause[];
|
|
15
|
+
set clauses(clauses: TransactionClause[]);
|
|
16
|
+
get recipients(): TransactionRecipient[];
|
|
17
|
+
set recipients(recipients: TransactionRecipient[]);
|
|
18
|
+
/** @inheritdoc */
|
|
19
|
+
buildClauses(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Get the delegation contract address to use for claims
|
|
22
|
+
* Uses the address from claimRewardsData if provided, otherwise falls back to default
|
|
23
|
+
*/
|
|
24
|
+
private getDelegationAddress;
|
|
25
|
+
/**
|
|
26
|
+
* Build clause for claiming base rewards
|
|
27
|
+
*/
|
|
28
|
+
private buildClaimBaseRewardsClause;
|
|
29
|
+
/**
|
|
30
|
+
* Build clause for claiming staking rewards
|
|
31
|
+
*/
|
|
32
|
+
private buildClaimStakingRewardsClause;
|
|
33
|
+
/**
|
|
34
|
+
* Encode the claim rewards method call data
|
|
35
|
+
*/
|
|
36
|
+
private encodeClaimRewardsMethod;
|
|
37
|
+
/** @inheritdoc */
|
|
38
|
+
toJson(): VetTransactionData;
|
|
39
|
+
/** @inheritdoc */
|
|
40
|
+
fromDeserializedSignedTransaction(signedTx: VetTransaction): void;
|
|
41
|
+
/**
|
|
42
|
+
* Parse claim rewards data from transaction clauses
|
|
43
|
+
*/
|
|
44
|
+
private parseClaimRewardsDataFromClauses;
|
|
45
|
+
/**
|
|
46
|
+
* Parse validator and delegator addresses from claim rewards method data.
|
|
47
|
+
*
|
|
48
|
+
* The method data follows Ethereum ABI encoding where each parameter occupies 32 bytes (64 hex chars).
|
|
49
|
+
* After the 4-byte method ID, the parameters are laid out as:
|
|
50
|
+
* - Bytes 0-31 (chars 0-63): First address parameter (validator) - right-padded, actual address in bytes 12-31
|
|
51
|
+
* - Bytes 32-63 (chars 64-127): Second address parameter (delegator) - right-padded, actual address in bytes 44-63
|
|
52
|
+
*
|
|
53
|
+
* @param data The encoded method call data including method ID and parameters
|
|
54
|
+
* @returns Object containing the extracted validator and delegator addresses
|
|
55
|
+
*/
|
|
56
|
+
private parseAddressesFromClaimData;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=claimRewards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claimRewards.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/claimRewards.ts"],"names":[],"mappings":"AAEA,OAAO,EAA4C,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,IAAI,cAAc,EAAa,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAO5C,qBAAa,uBAAwB,SAAQ,WAAW;IACtD,OAAO,CAAC,iBAAiB,CAAmB;gBAEhC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,IAAI,gBAAgB,IAAI,gBAAgB,CAEvC;IAED,IAAI,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,EAE1C;IAED,kBAAkB;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,IAAI,OAAO,IAAI,iBAAiB,EAAE,CAEjC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAEvC;IAED,IAAI,UAAU,IAAI,oBAAoB,EAAE,CAEvC;IAED,IAAI,UAAU,CAAC,UAAU,EAAE,oBAAoB,EAAE,EAEhD;IAED,kBAAkB;IAClB,YAAY,IAAI,IAAI;IA6BpB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAcnC;;OAEG;IACH,OAAO,CAAC,8BAA8B;IActC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAWhC,kBAAkB;IAClB,MAAM,IAAI,kBAAkB;IAkB5B,kBAAkB;IAClB,iCAAiC,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IA+CjE;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAuDxC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,2BAA2B;CAiBpC"}
|
|
@@ -0,0 +1,242 @@
|
|
|
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.ClaimRewardsTransaction = void 0;
|
|
7
|
+
const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
|
|
8
|
+
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
9
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
|
+
const sdk_core_2 = require("@vechain/sdk-core");
|
|
11
|
+
const transaction_1 = require("./transaction");
|
|
12
|
+
const constants_1 = require("../constants");
|
|
13
|
+
class ClaimRewardsTransaction extends transaction_1.Transaction {
|
|
14
|
+
constructor(_coinConfig) {
|
|
15
|
+
super(_coinConfig);
|
|
16
|
+
this._type = sdk_core_1.TransactionType.StakingClaim;
|
|
17
|
+
}
|
|
18
|
+
get claimRewardsData() {
|
|
19
|
+
return this._claimRewardsData;
|
|
20
|
+
}
|
|
21
|
+
set claimRewardsData(data) {
|
|
22
|
+
this._claimRewardsData = data;
|
|
23
|
+
}
|
|
24
|
+
/** @inheritdoc */
|
|
25
|
+
async build() {
|
|
26
|
+
this.buildClauses();
|
|
27
|
+
await this.buildRawTransaction();
|
|
28
|
+
this.generateTxnIdAndSetSender();
|
|
29
|
+
this.loadInputsAndOutputs();
|
|
30
|
+
}
|
|
31
|
+
get clauses() {
|
|
32
|
+
return this._clauses;
|
|
33
|
+
}
|
|
34
|
+
set clauses(clauses) {
|
|
35
|
+
this._clauses = clauses;
|
|
36
|
+
}
|
|
37
|
+
get recipients() {
|
|
38
|
+
return this._recipients;
|
|
39
|
+
}
|
|
40
|
+
set recipients(recipients) {
|
|
41
|
+
this._recipients = recipients;
|
|
42
|
+
}
|
|
43
|
+
/** @inheritdoc */
|
|
44
|
+
buildClauses() {
|
|
45
|
+
if (!this._claimRewardsData) {
|
|
46
|
+
throw new sdk_core_1.InvalidTransactionError('Missing claim rewards data');
|
|
47
|
+
}
|
|
48
|
+
const clauses = [];
|
|
49
|
+
// Add clause for claiming base rewards if requested
|
|
50
|
+
const shouldClaimBaseRewards = this.claimRewardsData.claimBaseRewards !== false; // Default true
|
|
51
|
+
if (shouldClaimBaseRewards) {
|
|
52
|
+
clauses.push(this.buildClaimBaseRewardsClause());
|
|
53
|
+
}
|
|
54
|
+
// Add clause for claiming staking rewards if requested
|
|
55
|
+
const shouldClaimStakingRewards = this.claimRewardsData.claimStakingRewards !== false; // Default true
|
|
56
|
+
if (shouldClaimStakingRewards) {
|
|
57
|
+
clauses.push(this.buildClaimStakingRewardsClause());
|
|
58
|
+
}
|
|
59
|
+
if (clauses.length === 0) {
|
|
60
|
+
throw new sdk_core_1.InvalidTransactionError('At least one type of rewards must be claimed');
|
|
61
|
+
}
|
|
62
|
+
this.clauses = clauses;
|
|
63
|
+
// Set recipients as empty since claim rewards doesn't send value
|
|
64
|
+
this.recipients = [];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the delegation contract address to use for claims
|
|
68
|
+
* Uses the address from claimRewardsData if provided, otherwise falls back to default
|
|
69
|
+
*/
|
|
70
|
+
getDelegationAddress() {
|
|
71
|
+
return this._claimRewardsData.delegationContractAddress || constants_1.STARGATE_DELEGATION_ADDRESS;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Build clause for claiming base rewards
|
|
75
|
+
*/
|
|
76
|
+
buildClaimBaseRewardsClause() {
|
|
77
|
+
const methodData = this.encodeClaimRewardsMethod(constants_1.CLAIM_BASE_REWARDS_METHOD_ID, this._claimRewardsData.validatorAddress, this._claimRewardsData.delegatorAddress);
|
|
78
|
+
return {
|
|
79
|
+
to: this.getDelegationAddress(),
|
|
80
|
+
value: '0x0',
|
|
81
|
+
data: methodData,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Build clause for claiming staking rewards
|
|
86
|
+
*/
|
|
87
|
+
buildClaimStakingRewardsClause() {
|
|
88
|
+
const methodData = this.encodeClaimRewardsMethod(constants_1.CLAIM_STAKING_REWARDS_METHOD_ID, this._claimRewardsData.validatorAddress, this._claimRewardsData.delegatorAddress);
|
|
89
|
+
return {
|
|
90
|
+
to: this.getDelegationAddress(),
|
|
91
|
+
value: '0x0',
|
|
92
|
+
data: methodData,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Encode the claim rewards method call data
|
|
97
|
+
*/
|
|
98
|
+
encodeClaimRewardsMethod(methodId, validatorAddress, delegatorAddress) {
|
|
99
|
+
const methodName = methodId === constants_1.CLAIM_BASE_REWARDS_METHOD_ID ? 'claimBaseRewards' : 'claimStakingRewards';
|
|
100
|
+
const types = ['address', 'address'];
|
|
101
|
+
const params = [validatorAddress, delegatorAddress];
|
|
102
|
+
const method = ethereumjs_abi_1.default.methodID(methodName, types);
|
|
103
|
+
const args = ethereumjs_abi_1.default.rawEncode(types, params);
|
|
104
|
+
return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
|
|
105
|
+
}
|
|
106
|
+
/** @inheritdoc */
|
|
107
|
+
toJson() {
|
|
108
|
+
const json = {
|
|
109
|
+
id: this.id,
|
|
110
|
+
chainTag: this.chainTag,
|
|
111
|
+
blockRef: this.blockRef,
|
|
112
|
+
expiration: this.expiration,
|
|
113
|
+
gasPriceCoef: this.gasPriceCoef,
|
|
114
|
+
gas: this.gas,
|
|
115
|
+
dependsOn: this.dependsOn,
|
|
116
|
+
nonce: this.nonce,
|
|
117
|
+
sender: this.sender,
|
|
118
|
+
feePayer: this.feePayerAddress,
|
|
119
|
+
recipients: this.recipients,
|
|
120
|
+
claimRewardsData: this._claimRewardsData,
|
|
121
|
+
};
|
|
122
|
+
return json;
|
|
123
|
+
}
|
|
124
|
+
/** @inheritdoc */
|
|
125
|
+
fromDeserializedSignedTransaction(signedTx) {
|
|
126
|
+
try {
|
|
127
|
+
if (!signedTx || !signedTx.body) {
|
|
128
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid transaction: missing transaction body');
|
|
129
|
+
}
|
|
130
|
+
// Store the raw transaction
|
|
131
|
+
this.rawTransaction = signedTx;
|
|
132
|
+
// Set transaction body properties
|
|
133
|
+
const body = signedTx.body;
|
|
134
|
+
this.chainTag = typeof body.chainTag === 'number' ? body.chainTag : 0;
|
|
135
|
+
this.blockRef = body.blockRef || '0x0';
|
|
136
|
+
this.expiration = typeof body.expiration === 'number' ? body.expiration : 64;
|
|
137
|
+
this.clauses = body.clauses || [];
|
|
138
|
+
this.gasPriceCoef = typeof body.gasPriceCoef === 'number' ? body.gasPriceCoef : 128;
|
|
139
|
+
this.gas = typeof body.gas === 'number' ? body.gas : Number(body.gas) || 0;
|
|
140
|
+
this.dependsOn = body.dependsOn || null;
|
|
141
|
+
this.nonce = String(body.nonce);
|
|
142
|
+
// Parse claim rewards data from clauses
|
|
143
|
+
this.parseClaimRewardsDataFromClauses(body.clauses);
|
|
144
|
+
// Set recipients as empty for claim rewards
|
|
145
|
+
this.recipients = [];
|
|
146
|
+
this.loadInputsAndOutputs();
|
|
147
|
+
// Set sender address
|
|
148
|
+
if (signedTx.signature && signedTx.origin) {
|
|
149
|
+
this.sender = signedTx.origin.toString().toLowerCase();
|
|
150
|
+
}
|
|
151
|
+
// Set signatures if present
|
|
152
|
+
if (signedTx.signature) {
|
|
153
|
+
// First signature is sender's signature
|
|
154
|
+
this.senderSignature = Buffer.from(signedTx.signature.slice(0, sdk_core_2.Secp256k1.SIGNATURE_LENGTH));
|
|
155
|
+
// If there's additional signature data, it's the fee payer's signature
|
|
156
|
+
if (signedTx.signature.length > sdk_core_2.Secp256k1.SIGNATURE_LENGTH) {
|
|
157
|
+
this.feePayerSignature = Buffer.from(signedTx.signature.slice(sdk_core_2.Secp256k1.SIGNATURE_LENGTH));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
throw new sdk_core_1.InvalidTransactionError(`Failed to deserialize transaction: ${e.message}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Parse claim rewards data from transaction clauses
|
|
167
|
+
*/
|
|
168
|
+
parseClaimRewardsDataFromClauses(clauses) {
|
|
169
|
+
if (!clauses || clauses.length === 0) {
|
|
170
|
+
throw new sdk_core_1.InvalidTransactionError('No clauses found in transaction');
|
|
171
|
+
}
|
|
172
|
+
let claimBaseRewards = false;
|
|
173
|
+
let claimStakingRewards = false;
|
|
174
|
+
let validatorAddress = '';
|
|
175
|
+
let delegatorAddress = '';
|
|
176
|
+
let delegationContractAddress = '';
|
|
177
|
+
for (const clause of clauses) {
|
|
178
|
+
// Check if this is a claim rewards clause by looking at the method ID in data
|
|
179
|
+
if (clause.data &&
|
|
180
|
+
(clause.data.startsWith(constants_1.CLAIM_BASE_REWARDS_METHOD_ID) ||
|
|
181
|
+
clause.data.startsWith(constants_1.CLAIM_STAKING_REWARDS_METHOD_ID))) {
|
|
182
|
+
// Store the contract address (could be different from default)
|
|
183
|
+
if (!delegationContractAddress) {
|
|
184
|
+
delegationContractAddress = clause.to || '';
|
|
185
|
+
}
|
|
186
|
+
if (clause.data.startsWith(constants_1.CLAIM_BASE_REWARDS_METHOD_ID)) {
|
|
187
|
+
claimBaseRewards = true;
|
|
188
|
+
if (!validatorAddress || !delegatorAddress) {
|
|
189
|
+
const addresses = this.parseAddressesFromClaimData(clause.data);
|
|
190
|
+
validatorAddress = addresses.validator;
|
|
191
|
+
delegatorAddress = addresses.delegator;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else if (clause.data.startsWith(constants_1.CLAIM_STAKING_REWARDS_METHOD_ID)) {
|
|
195
|
+
claimStakingRewards = true;
|
|
196
|
+
if (!validatorAddress || !delegatorAddress) {
|
|
197
|
+
const addresses = this.parseAddressesFromClaimData(clause.data);
|
|
198
|
+
validatorAddress = addresses.validator;
|
|
199
|
+
delegatorAddress = addresses.delegator;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (!claimBaseRewards && !claimStakingRewards) {
|
|
205
|
+
throw new sdk_core_1.InvalidTransactionError('Transaction does not contain claim rewards clauses');
|
|
206
|
+
}
|
|
207
|
+
this._claimRewardsData = {
|
|
208
|
+
validatorAddress,
|
|
209
|
+
delegatorAddress,
|
|
210
|
+
delegationContractAddress: delegationContractAddress !== constants_1.STARGATE_DELEGATION_ADDRESS ? delegationContractAddress : undefined,
|
|
211
|
+
claimBaseRewards,
|
|
212
|
+
claimStakingRewards,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Parse validator and delegator addresses from claim rewards method data.
|
|
217
|
+
*
|
|
218
|
+
* The method data follows Ethereum ABI encoding where each parameter occupies 32 bytes (64 hex chars).
|
|
219
|
+
* After the 4-byte method ID, the parameters are laid out as:
|
|
220
|
+
* - Bytes 0-31 (chars 0-63): First address parameter (validator) - right-padded, actual address in bytes 12-31
|
|
221
|
+
* - Bytes 32-63 (chars 64-127): Second address parameter (delegator) - right-padded, actual address in bytes 44-63
|
|
222
|
+
*
|
|
223
|
+
* @param data The encoded method call data including method ID and parameters
|
|
224
|
+
* @returns Object containing the extracted validator and delegator addresses
|
|
225
|
+
*/
|
|
226
|
+
parseAddressesFromClaimData(data) {
|
|
227
|
+
// Remove method ID (first 10 characters: '0x' + 4-byte method ID)
|
|
228
|
+
const methodData = data.slice(10);
|
|
229
|
+
// Extract validator address from first parameter (bytes 12-31 of first 32-byte slot)
|
|
230
|
+
// Slice 24-64: Skip first 12 bytes of padding (24 hex chars), take next 20 bytes (40 hex chars)
|
|
231
|
+
const validatorAddress = '0x' + methodData.slice(24, 64);
|
|
232
|
+
// Extract delegator address from second parameter (bytes 44-63 of second 32-byte slot)
|
|
233
|
+
// Slice 88-128: Skip to second slot + 12 bytes padding (88 hex chars), take next 20 bytes (40 hex chars)
|
|
234
|
+
const delegatorAddress = '0x' + methodData.slice(88, 128);
|
|
235
|
+
return {
|
|
236
|
+
validator: validatorAddress,
|
|
237
|
+
delegator: delegatorAddress,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
exports.ClaimRewardsTransaction = ClaimRewardsTransaction;
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhaW1SZXdhcmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbi9jbGFpbVJld2FyZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0VBQXlDO0FBQ3pDLHFEQUErQztBQUMvQyxtREFBc0c7QUFFdEcsZ0RBQWdHO0FBQ2hHLCtDQUE0QztBQUc1Qyw0Q0FJc0I7QUFFdEIsTUFBYSx1QkFBd0IsU0FBUSx5QkFBVztJQUd0RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsWUFBWSxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFzQjtRQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsS0FBSyxDQUFDLEtBQUs7UUFDVCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUE0QjtRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxVQUFrQztRQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFlBQVk7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUF3QixFQUFFLENBQUM7UUFFeEMsb0RBQW9EO1FBQ3BELE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixLQUFLLEtBQUssQ0FBQyxDQUFDLGVBQWU7UUFDaEcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsdURBQXVEO1FBQ3ZELE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixLQUFLLEtBQUssQ0FBQyxDQUFDLGVBQWU7UUFDdEcsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUV2QixpRUFBaUU7UUFDakUsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLG9CQUFvQjtRQUMxQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsSUFBSSx1Q0FBMkIsQ0FBQztJQUN6RixDQUFDO0lBRUQ7O09BRUc7SUFDSywyQkFBMkI7UUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUM5Qyx3Q0FBNEIsRUFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixFQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQ3hDLENBQUM7UUFFRixPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUMvQixLQUFLLEVBQUUsS0FBSztZQUNaLElBQUksRUFBRSxVQUFVO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyw4QkFBOEI7UUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUM5QywyQ0FBK0IsRUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixFQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQ3hDLENBQUM7UUFFRixPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUMvQixLQUFLLEVBQUUsS0FBSztZQUNaLElBQUksRUFBRSxVQUFVO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyx3QkFBd0IsQ0FBQyxRQUFnQixFQUFFLGdCQUF3QixFQUFFLGdCQUF3QjtRQUNuRyxNQUFNLFVBQVUsR0FBRyxRQUFRLEtBQUssd0NBQTRCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztRQUMxRyxNQUFNLEtBQUssR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFcEQsTUFBTSxNQUFNLEdBQUcsd0JBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLHdCQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVsRCxPQUFPLElBQUEsOEJBQVksRUFBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixNQUFNO1FBQ0osTUFBTSxJQUFJLEdBQXVCO1lBQy9CLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDOUIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7U0FDekMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQ0FBaUMsQ0FBQyxRQUF3QjtRQUN4RCxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksa0NBQXVCLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUNyRixDQUFDO1lBRUQsNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1lBRS9CLGtDQUFrQztZQUNsQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNwRixJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUM7WUFDeEMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRWhDLHdDQUF3QztZQUN4QyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXBELDRDQUE0QztZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUU1QixxQkFBcUI7WUFDckIsSUFBSSxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pELENBQUM7WUFFRCw0QkFBNEI7WUFDNUIsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3ZCLHdDQUF3QztnQkFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxvQkFBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFFNUYsdUVBQXVFO2dCQUN2RSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLG9CQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsb0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzdGLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksa0NBQXVCLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQ0FBZ0MsQ0FBQyxPQUE0QjtRQUNuRSxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLGtDQUF1QixDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUkseUJBQXlCLEdBQUcsRUFBRSxDQUFDO1FBRW5DLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDN0IsOEVBQThFO1lBQzlFLElBQ0UsTUFBTSxDQUFDLElBQUk7Z0JBQ1gsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx3Q0FBNEIsQ0FBQztvQkFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsMkNBQStCLENBQUMsQ0FBQyxFQUMxRCxDQUFDO2dCQUNELCtEQUErRDtnQkFDL0QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7b0JBQy9CLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUM5QyxDQUFDO2dCQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsd0NBQTRCLENBQUMsRUFBRSxDQUFDO29CQUN6RCxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7d0JBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2hFLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7d0JBQ3ZDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7b0JBQ3pDLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLDJDQUErQixDQUFDLEVBQUUsQ0FBQztvQkFDbkUsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO29CQUMzQixJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO3dCQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNoRSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO3dCQUN2QyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO29CQUN6QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDOUMsTUFBTSxJQUFJLGtDQUF1QixDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDMUYsQ0FBQztRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUN2QixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLHlCQUF5QixFQUN2Qix5QkFBeUIsS0FBSyx1Q0FBMkIsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbkcsZ0JBQWdCO1lBQ2hCLG1CQUFtQjtTQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSywyQkFBMkIsQ0FBQyxJQUFZO1FBQzlDLGtFQUFrRTtRQUNsRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWxDLHFGQUFxRjtRQUNyRixnR0FBZ0c7UUFDaEcsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFekQsdUZBQXVGO1FBQ3ZGLHlHQUF5RztRQUN6RyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUUxRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLGdCQUFnQjtZQUMzQixTQUFTLEVBQUUsZ0JBQWdCO1NBQzVCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF2UkQsMERBdVJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV0aGVyZXVtQWJpIGZyb20gJ2V0aGVyZXVtanMtYWJpJztcbmltcG9ydCB7IGFkZEhleFByZWZpeCB9IGZyb20gJ2V0aGVyZXVtanMtdXRpbCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUsIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblJlY2lwaWVudCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIGFzIFZldFRyYW5zYWN0aW9uLCBTZWNwMjU2azEsIFRyYW5zYWN0aW9uQ2xhdXNlIH0gZnJvbSAnQHZlY2hhaW4vc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFZldFRyYW5zYWN0aW9uRGF0YSB9IGZyb20gJy4uL2lmYWNlJztcbmltcG9ydCB7IENsYWltUmV3YXJkc0RhdGEgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1xuICBDTEFJTV9CQVNFX1JFV0FSRFNfTUVUSE9EX0lELFxuICBDTEFJTV9TVEFLSU5HX1JFV0FSRFNfTUVUSE9EX0lELFxuICBTVEFSR0FURV9ERUxFR0FUSU9OX0FERFJFU1MsXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBDbGFpbVJld2FyZHNUcmFuc2FjdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfY2xhaW1SZXdhcmRzRGF0YTogQ2xhaW1SZXdhcmRzRGF0YTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQ2xhaW07XG4gIH1cblxuICBnZXQgY2xhaW1SZXdhcmRzRGF0YSgpOiBDbGFpbVJld2FyZHNEYXRhIHtcbiAgICByZXR1cm4gdGhpcy5fY2xhaW1SZXdhcmRzRGF0YTtcbiAgfVxuXG4gIHNldCBjbGFpbVJld2FyZHNEYXRhKGRhdGE6IENsYWltUmV3YXJkc0RhdGEpIHtcbiAgICB0aGlzLl9jbGFpbVJld2FyZHNEYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmJ1aWxkQ2xhdXNlcygpO1xuICAgIGF3YWl0IHRoaXMuYnVpbGRSYXdUcmFuc2FjdGlvbigpO1xuICAgIHRoaXMuZ2VuZXJhdGVUeG5JZEFuZFNldFNlbmRlcigpO1xuICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgfVxuXG4gIGdldCBjbGF1c2VzKCk6IFRyYW5zYWN0aW9uQ2xhdXNlW10ge1xuICAgIHJldHVybiB0aGlzLl9jbGF1c2VzO1xuICB9XG5cbiAgc2V0IGNsYXVzZXMoY2xhdXNlczogVHJhbnNhY3Rpb25DbGF1c2VbXSkge1xuICAgIHRoaXMuX2NsYXVzZXMgPSBjbGF1c2VzO1xuICB9XG5cbiAgZ2V0IHJlY2lwaWVudHMoKTogVHJhbnNhY3Rpb25SZWNpcGllbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlY2lwaWVudHM7XG4gIH1cblxuICBzZXQgcmVjaXBpZW50cyhyZWNpcGllbnRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdKSB7XG4gICAgdGhpcy5fcmVjaXBpZW50cyA9IHJlY2lwaWVudHM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYnVpbGRDbGF1c2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fY2xhaW1SZXdhcmRzRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIGNsYWltIHJld2FyZHMgZGF0YScpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXVzZXM6IFRyYW5zYWN0aW9uQ2xhdXNlW10gPSBbXTtcblxuICAgIC8vIEFkZCBjbGF1c2UgZm9yIGNsYWltaW5nIGJhc2UgcmV3YXJkcyBpZiByZXF1ZXN0ZWRcbiAgICBjb25zdCBzaG91bGRDbGFpbUJhc2VSZXdhcmRzID0gdGhpcy5jbGFpbVJld2FyZHNEYXRhLmNsYWltQmFzZVJld2FyZHMgIT09IGZhbHNlOyAvLyBEZWZhdWx0IHRydWVcbiAgICBpZiAoc2hvdWxkQ2xhaW1CYXNlUmV3YXJkcykge1xuICAgICAgY2xhdXNlcy5wdXNoKHRoaXMuYnVpbGRDbGFpbUJhc2VSZXdhcmRzQ2xhdXNlKCkpO1xuICAgIH1cblxuICAgIC8vIEFkZCBjbGF1c2UgZm9yIGNsYWltaW5nIHN0YWtpbmcgcmV3YXJkcyBpZiByZXF1ZXN0ZWRcbiAgICBjb25zdCBzaG91bGRDbGFpbVN0YWtpbmdSZXdhcmRzID0gdGhpcy5jbGFpbVJld2FyZHNEYXRhLmNsYWltU3Rha2luZ1Jld2FyZHMgIT09IGZhbHNlOyAvLyBEZWZhdWx0IHRydWVcbiAgICBpZiAoc2hvdWxkQ2xhaW1TdGFraW5nUmV3YXJkcykge1xuICAgICAgY2xhdXNlcy5wdXNoKHRoaXMuYnVpbGRDbGFpbVN0YWtpbmdSZXdhcmRzQ2xhdXNlKCkpO1xuICAgIH1cblxuICAgIGlmIChjbGF1c2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdBdCBsZWFzdCBvbmUgdHlwZSBvZiByZXdhcmRzIG11c3QgYmUgY2xhaW1lZCcpO1xuICAgIH1cblxuICAgIHRoaXMuY2xhdXNlcyA9IGNsYXVzZXM7XG5cbiAgICAvLyBTZXQgcmVjaXBpZW50cyBhcyBlbXB0eSBzaW5jZSBjbGFpbSByZXdhcmRzIGRvZXNuJ3Qgc2VuZCB2YWx1ZVxuICAgIHRoaXMucmVjaXBpZW50cyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVsZWdhdGlvbiBjb250cmFjdCBhZGRyZXNzIHRvIHVzZSBmb3IgY2xhaW1zXG4gICAqIFVzZXMgdGhlIGFkZHJlc3MgZnJvbSBjbGFpbVJld2FyZHNEYXRhIGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBkZWZhdWx0XG4gICAqL1xuICBwcml2YXRlIGdldERlbGVnYXRpb25BZGRyZXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NsYWltUmV3YXJkc0RhdGEuZGVsZWdhdGlvbkNvbnRyYWN0QWRkcmVzcyB8fCBTVEFSR0FURV9ERUxFR0FUSU9OX0FERFJFU1M7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgY2xhdXNlIGZvciBjbGFpbWluZyBiYXNlIHJld2FyZHNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRDbGFpbUJhc2VSZXdhcmRzQ2xhdXNlKCk6IFRyYW5zYWN0aW9uQ2xhdXNlIHtcbiAgICBjb25zdCBtZXRob2REYXRhID0gdGhpcy5lbmNvZGVDbGFpbVJld2FyZHNNZXRob2QoXG4gICAgICBDTEFJTV9CQVNFX1JFV0FSRFNfTUVUSE9EX0lELFxuICAgICAgdGhpcy5fY2xhaW1SZXdhcmRzRGF0YS52YWxpZGF0b3JBZGRyZXNzLFxuICAgICAgdGhpcy5fY2xhaW1SZXdhcmRzRGF0YS5kZWxlZ2F0b3JBZGRyZXNzXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0bzogdGhpcy5nZXREZWxlZ2F0aW9uQWRkcmVzcygpLFxuICAgICAgdmFsdWU6ICcweDAnLFxuICAgICAgZGF0YTogbWV0aG9kRGF0YSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGNsYXVzZSBmb3IgY2xhaW1pbmcgc3Rha2luZyByZXdhcmRzXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQ2xhaW1TdGFraW5nUmV3YXJkc0NsYXVzZSgpOiBUcmFuc2FjdGlvbkNsYXVzZSB7XG4gICAgY29uc3QgbWV0aG9kRGF0YSA9IHRoaXMuZW5jb2RlQ2xhaW1SZXdhcmRzTWV0aG9kKFxuICAgICAgQ0xBSU1fU1RBS0lOR19SRVdBUkRTX01FVEhPRF9JRCxcbiAgICAgIHRoaXMuX2NsYWltUmV3YXJkc0RhdGEudmFsaWRhdG9yQWRkcmVzcyxcbiAgICAgIHRoaXMuX2NsYWltUmV3YXJkc0RhdGEuZGVsZWdhdG9yQWRkcmVzc1xuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG86IHRoaXMuZ2V0RGVsZWdhdGlvbkFkZHJlc3MoKSxcbiAgICAgIHZhbHVlOiAnMHgwJyxcbiAgICAgIGRhdGE6IG1ldGhvZERhdGEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNvZGUgdGhlIGNsYWltIHJld2FyZHMgbWV0aG9kIGNhbGwgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBlbmNvZGVDbGFpbVJld2FyZHNNZXRob2QobWV0aG9kSWQ6IHN0cmluZywgdmFsaWRhdG9yQWRkcmVzczogc3RyaW5nLCBkZWxlZ2F0b3JBZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBtZXRob2RJZCA9PT0gQ0xBSU1fQkFTRV9SRVdBUkRTX01FVEhPRF9JRCA/ICdjbGFpbUJhc2VSZXdhcmRzJyA6ICdjbGFpbVN0YWtpbmdSZXdhcmRzJztcbiAgICBjb25zdCB0eXBlcyA9IFsnYWRkcmVzcycsICdhZGRyZXNzJ107XG4gICAgY29uc3QgcGFyYW1zID0gW3ZhbGlkYXRvckFkZHJlc3MsIGRlbGVnYXRvckFkZHJlc3NdO1xuXG4gICAgY29uc3QgbWV0aG9kID0gRXRoZXJldW1BYmkubWV0aG9kSUQobWV0aG9kTmFtZSwgdHlwZXMpO1xuICAgIGNvbnN0IGFyZ3MgPSBFdGhlcmV1bUFiaS5yYXdFbmNvZGUodHlwZXMsIHBhcmFtcyk7XG5cbiAgICByZXR1cm4gYWRkSGV4UHJlZml4KEJ1ZmZlci5jb25jYXQoW21ldGhvZCwgYXJnc10pLnRvU3RyaW5nKCdoZXgnKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFZldFRyYW5zYWN0aW9uRGF0YSB7XG4gICAgY29uc3QganNvbjogVmV0VHJhbnNhY3Rpb25EYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBjaGFpblRhZzogdGhpcy5jaGFpblRhZyxcbiAgICAgIGJsb2NrUmVmOiB0aGlzLmJsb2NrUmVmLFxuICAgICAgZXhwaXJhdGlvbjogdGhpcy5leHBpcmF0aW9uLFxuICAgICAgZ2FzUHJpY2VDb2VmOiB0aGlzLmdhc1ByaWNlQ29lZixcbiAgICAgIGdhczogdGhpcy5nYXMsXG4gICAgICBkZXBlbmRzT246IHRoaXMuZGVwZW5kc09uLFxuICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXG4gICAgICBzZW5kZXI6IHRoaXMuc2VuZGVyLFxuICAgICAgZmVlUGF5ZXI6IHRoaXMuZmVlUGF5ZXJBZGRyZXNzLFxuICAgICAgcmVjaXBpZW50czogdGhpcy5yZWNpcGllbnRzLFxuICAgICAgY2xhaW1SZXdhcmRzRGF0YTogdGhpcy5fY2xhaW1SZXdhcmRzRGF0YSxcbiAgICB9O1xuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeDogVmV0VHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFzaWduZWRUeCB8fCAhc2lnbmVkVHguYm9keSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgdHJhbnNhY3Rpb24gYm9keScpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdG9yZSB0aGUgcmF3IHRyYW5zYWN0aW9uXG4gICAgICB0aGlzLnJhd1RyYW5zYWN0aW9uID0gc2lnbmVkVHg7XG5cbiAgICAgIC8vIFNldCB0cmFuc2FjdGlvbiBib2R5IHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IGJvZHkgPSBzaWduZWRUeC5ib2R5O1xuICAgICAgdGhpcy5jaGFpblRhZyA9IHR5cGVvZiBib2R5LmNoYWluVGFnID09PSAnbnVtYmVyJyA/IGJvZHkuY2hhaW5UYWcgOiAwO1xuICAgICAgdGhpcy5ibG9ja1JlZiA9IGJvZHkuYmxvY2tSZWYgfHwgJzB4MCc7XG4gICAgICB0aGlzLmV4cGlyYXRpb24gPSB0eXBlb2YgYm9keS5leHBpcmF0aW9uID09PSAnbnVtYmVyJyA/IGJvZHkuZXhwaXJhdGlvbiA6IDY0O1xuICAgICAgdGhpcy5jbGF1c2VzID0gYm9keS5jbGF1c2VzIHx8IFtdO1xuICAgICAgdGhpcy5nYXNQcmljZUNvZWYgPSB0eXBlb2YgYm9keS5nYXNQcmljZUNvZWYgPT09ICdudW1iZXInID8gYm9keS5nYXNQcmljZUNvZWYgOiAxMjg7XG4gICAgICB0aGlzLmdhcyA9IHR5cGVvZiBib2R5LmdhcyA9PT0gJ251bWJlcicgPyBib2R5LmdhcyA6IE51bWJlcihib2R5LmdhcykgfHwgMDtcbiAgICAgIHRoaXMuZGVwZW5kc09uID0gYm9keS5kZXBlbmRzT24gfHwgbnVsbDtcbiAgICAgIHRoaXMubm9uY2UgPSBTdHJpbmcoYm9keS5ub25jZSk7XG5cbiAgICAgIC8vIFBhcnNlIGNsYWltIHJld2FyZHMgZGF0YSBmcm9tIGNsYXVzZXNcbiAgICAgIHRoaXMucGFyc2VDbGFpbVJld2FyZHNEYXRhRnJvbUNsYXVzZXMoYm9keS5jbGF1c2VzKTtcblxuICAgICAgLy8gU2V0IHJlY2lwaWVudHMgYXMgZW1wdHkgZm9yIGNsYWltIHJld2FyZHNcbiAgICAgIHRoaXMucmVjaXBpZW50cyA9IFtdO1xuICAgICAgdGhpcy5sb2FkSW5wdXRzQW5kT3V0cHV0cygpO1xuXG4gICAgICAvLyBTZXQgc2VuZGVyIGFkZHJlc3NcbiAgICAgIGlmIChzaWduZWRUeC5zaWduYXR1cmUgJiYgc2lnbmVkVHgub3JpZ2luKSB7XG4gICAgICAgIHRoaXMuc2VuZGVyID0gc2lnbmVkVHgub3JpZ2luLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHNpZ25hdHVyZXMgaWYgcHJlc2VudFxuICAgICAgaWYgKHNpZ25lZFR4LnNpZ25hdHVyZSkge1xuICAgICAgICAvLyBGaXJzdCBzaWduYXR1cmUgaXMgc2VuZGVyJ3Mgc2lnbmF0dXJlXG4gICAgICAgIHRoaXMuc2VuZGVyU2lnbmF0dXJlID0gQnVmZmVyLmZyb20oc2lnbmVkVHguc2lnbmF0dXJlLnNsaWNlKDAsIFNlY3AyNTZrMS5TSUdOQVRVUkVfTEVOR1RIKSk7XG5cbiAgICAgICAgLy8gSWYgdGhlcmUncyBhZGRpdGlvbmFsIHNpZ25hdHVyZSBkYXRhLCBpdCdzIHRoZSBmZWUgcGF5ZXIncyBzaWduYXR1cmVcbiAgICAgICAgaWYgKHNpZ25lZFR4LnNpZ25hdHVyZS5sZW5ndGggPiBTZWNwMjU2azEuU0lHTkFUVVJFX0xFTkdUSCkge1xuICAgICAgICAgIHRoaXMuZmVlUGF5ZXJTaWduYXR1cmUgPSBCdWZmZXIuZnJvbShzaWduZWRUeC5zaWduYXR1cmUuc2xpY2UoU2VjcDI1NmsxLlNJR05BVFVSRV9MRU5HVEgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgRmFpbGVkIHRvIGRlc2VyaWFsaXplIHRyYW5zYWN0aW9uOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgY2xhaW0gcmV3YXJkcyBkYXRhIGZyb20gdHJhbnNhY3Rpb24gY2xhdXNlc1xuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZUNsYWltUmV3YXJkc0RhdGFGcm9tQ2xhdXNlcyhjbGF1c2VzOiBUcmFuc2FjdGlvbkNsYXVzZVtdKTogdm9pZCB7XG4gICAgaWYgKCFjbGF1c2VzIHx8IGNsYXVzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ05vIGNsYXVzZXMgZm91bmQgaW4gdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBsZXQgY2xhaW1CYXNlUmV3YXJkcyA9IGZhbHNlO1xuICAgIGxldCBjbGFpbVN0YWtpbmdSZXdhcmRzID0gZmFsc2U7XG4gICAgbGV0IHZhbGlkYXRvckFkZHJlc3MgPSAnJztcbiAgICBsZXQgZGVsZWdhdG9yQWRkcmVzcyA9ICcnO1xuICAgIGxldCBkZWxlZ2F0aW9uQ29udHJhY3RBZGRyZXNzID0gJyc7XG5cbiAgICBmb3IgKGNvbnN0IGNsYXVzZSBvZiBjbGF1c2VzKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgY2xhaW0gcmV3YXJkcyBjbGF1c2UgYnkgbG9va2luZyBhdCB0aGUgbWV0aG9kIElEIGluIGRhdGFcbiAgICAgIGlmIChcbiAgICAgICAgY2xhdXNlLmRhdGEgJiZcbiAgICAgICAgKGNsYXVzZS5kYXRhLnN0YXJ0c1dpdGgoQ0xBSU1fQkFTRV9SRVdBUkRTX01FVEhPRF9JRCkgfHxcbiAgICAgICAgICBjbGF1c2UuZGF0YS5zdGFydHNXaXRoKENMQUlNX1NUQUtJTkdfUkVXQVJEU19NRVRIT0RfSUQpKVxuICAgICAgKSB7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBjb250cmFjdCBhZGRyZXNzIChjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSBkZWZhdWx0KVxuICAgICAgICBpZiAoIWRlbGVnYXRpb25Db250cmFjdEFkZHJlc3MpIHtcbiAgICAgICAgICBkZWxlZ2F0aW9uQ29udHJhY3RBZGRyZXNzID0gY2xhdXNlLnRvIHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsYXVzZS5kYXRhLnN0YXJ0c1dpdGgoQ0xBSU1fQkFTRV9SRVdBUkRTX01FVEhPRF9JRCkpIHtcbiAgICAgICAgICBjbGFpbUJhc2VSZXdhcmRzID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoIXZhbGlkYXRvckFkZHJlc3MgfHwgIWRlbGVnYXRvckFkZHJlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3NlcyA9IHRoaXMucGFyc2VBZGRyZXNzZXNGcm9tQ2xhaW1EYXRhKGNsYXVzZS5kYXRhKTtcbiAgICAgICAgICAgIHZhbGlkYXRvckFkZHJlc3MgPSBhZGRyZXNzZXMudmFsaWRhdG9yO1xuICAgICAgICAgICAgZGVsZWdhdG9yQWRkcmVzcyA9IGFkZHJlc3Nlcy5kZWxlZ2F0b3I7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNsYXVzZS5kYXRhLnN0YXJ0c1dpdGgoQ0xBSU1fU1RBS0lOR19SRVdBUkRTX01FVEhPRF9JRCkpIHtcbiAgICAgICAgICBjbGFpbVN0YWtpbmdSZXdhcmRzID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoIXZhbGlkYXRvckFkZHJlc3MgfHwgIWRlbGVnYXRvckFkZHJlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3NlcyA9IHRoaXMucGFyc2VBZGRyZXNzZXNGcm9tQ2xhaW1EYXRhKGNsYXVzZS5kYXRhKTtcbiAgICAgICAgICAgIHZhbGlkYXRvckFkZHJlc3MgPSBhZGRyZXNzZXMudmFsaWRhdG9yO1xuICAgICAgICAgICAgZGVsZWdhdG9yQWRkcmVzcyA9IGFkZHJlc3Nlcy5kZWxlZ2F0b3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFjbGFpbUJhc2VSZXdhcmRzICYmICFjbGFpbVN0YWtpbmdSZXdhcmRzKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gY2xhaW0gcmV3YXJkcyBjbGF1c2VzJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2xhaW1SZXdhcmRzRGF0YSA9IHtcbiAgICAgIHZhbGlkYXRvckFkZHJlc3MsXG4gICAgICBkZWxlZ2F0b3JBZGRyZXNzLFxuICAgICAgZGVsZWdhdGlvbkNvbnRyYWN0QWRkcmVzczpcbiAgICAgICAgZGVsZWdhdGlvbkNvbnRyYWN0QWRkcmVzcyAhPT0gU1RBUkdBVEVfREVMRUdBVElPTl9BRERSRVNTID8gZGVsZWdhdGlvbkNvbnRyYWN0QWRkcmVzcyA6IHVuZGVmaW5lZCxcbiAgICAgIGNsYWltQmFzZVJld2FyZHMsXG4gICAgICBjbGFpbVN0YWtpbmdSZXdhcmRzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdmFsaWRhdG9yIGFuZCBkZWxlZ2F0b3IgYWRkcmVzc2VzIGZyb20gY2xhaW0gcmV3YXJkcyBtZXRob2QgZGF0YS5cbiAgICpcbiAgICogVGhlIG1ldGhvZCBkYXRhIGZvbGxvd3MgRXRoZXJldW0gQUJJIGVuY29kaW5nIHdoZXJlIGVhY2ggcGFyYW1ldGVyIG9jY3VwaWVzIDMyIGJ5dGVzICg2NCBoZXggY2hhcnMpLlxuICAgKiBBZnRlciB0aGUgNC1ieXRlIG1ldGhvZCBJRCwgdGhlIHBhcmFtZXRlcnMgYXJlIGxhaWQgb3V0IGFzOlxuICAgKiAtIEJ5dGVzIDAtMzEgKGNoYXJzIDAtNjMpOiBGaXJzdCBhZGRyZXNzIHBhcmFtZXRlciAodmFsaWRhdG9yKSAtIHJpZ2h0LXBhZGRlZCwgYWN0dWFsIGFkZHJlc3MgaW4gYnl0ZXMgMTItMzFcbiAgICogLSBCeXRlcyAzMi02MyAoY2hhcnMgNjQtMTI3KTogU2Vjb25kIGFkZHJlc3MgcGFyYW1ldGVyIChkZWxlZ2F0b3IpIC0gcmlnaHQtcGFkZGVkLCBhY3R1YWwgYWRkcmVzcyBpbiBieXRlcyA0NC02M1xuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZW5jb2RlZCBtZXRob2QgY2FsbCBkYXRhIGluY2x1ZGluZyBtZXRob2QgSUQgYW5kIHBhcmFtZXRlcnNcbiAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGV4dHJhY3RlZCB2YWxpZGF0b3IgYW5kIGRlbGVnYXRvciBhZGRyZXNzZXNcbiAgICovXG4gIHByaXZhdGUgcGFyc2VBZGRyZXNzZXNGcm9tQ2xhaW1EYXRhKGRhdGE6IHN0cmluZyk6IHsgdmFsaWRhdG9yOiBzdHJpbmc7IGRlbGVnYXRvcjogc3RyaW5nIH0ge1xuICAgIC8vIFJlbW92ZSBtZXRob2QgSUQgKGZpcnN0IDEwIGNoYXJhY3RlcnM6ICcweCcgKyA0LWJ5dGUgbWV0aG9kIElEKVxuICAgIGNvbnN0IG1ldGhvZERhdGEgPSBkYXRhLnNsaWNlKDEwKTtcblxuICAgIC8vIEV4dHJhY3QgdmFsaWRhdG9yIGFkZHJlc3MgZnJvbSBmaXJzdCBwYXJhbWV0ZXIgKGJ5dGVzIDEyLTMxIG9mIGZpcnN0IDMyLWJ5dGUgc2xvdClcbiAgICAvLyBTbGljZSAyNC02NDogU2tpcCBmaXJzdCAxMiBieXRlcyBvZiBwYWRkaW5nICgyNCBoZXggY2hhcnMpLCB0YWtlIG5leHQgMjAgYnl0ZXMgKDQwIGhleCBjaGFycylcbiAgICBjb25zdCB2YWxpZGF0b3JBZGRyZXNzID0gJzB4JyArIG1ldGhvZERhdGEuc2xpY2UoMjQsIDY0KTtcblxuICAgIC8vIEV4dHJhY3QgZGVsZWdhdG9yIGFkZHJlc3MgZnJvbSBzZWNvbmQgcGFyYW1ldGVyIChieXRlcyA0NC02MyBvZiBzZWNvbmQgMzItYnl0ZSBzbG90KVxuICAgIC8vIFNsaWNlIDg4LTEyODogU2tpcCB0byBzZWNvbmQgc2xvdCArIDEyIGJ5dGVzIHBhZGRpbmcgKDg4IGhleCBjaGFycyksIHRha2UgbmV4dCAyMCBieXRlcyAoNDAgaGV4IGNoYXJzKVxuICAgIGNvbnN0IGRlbGVnYXRvckFkZHJlc3MgPSAnMHgnICsgbWV0aG9kRGF0YS5zbGljZSg4OCwgMTI4KTtcblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZGF0b3I6IHZhbGlkYXRvckFkZHJlc3MsXG4gICAgICBkZWxlZ2F0b3I6IGRlbGVnYXRvckFkZHJlc3MsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
+
import { Transaction as VetTransaction } from '@vechain/sdk-core';
|
|
3
|
+
import { Transaction } from './transaction';
|
|
4
|
+
import { VetTransactionData } from '../iface';
|
|
5
|
+
export declare class ExitDelegationTransaction extends Transaction {
|
|
6
|
+
private _tokenId;
|
|
7
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
8
|
+
get tokenId(): string;
|
|
9
|
+
set tokenId(id: string);
|
|
10
|
+
/** @inheritdoc */
|
|
11
|
+
build(): Promise<void>;
|
|
12
|
+
/** @inheritdoc */
|
|
13
|
+
buildClauses(): void;
|
|
14
|
+
/**
|
|
15
|
+
* Generates the transaction data for unstaking by encoding the exitDelegation method call.
|
|
16
|
+
*
|
|
17
|
+
* @private
|
|
18
|
+
* @returns {string} The encoded transaction data as a hex string
|
|
19
|
+
*/
|
|
20
|
+
private getExitDelegationData;
|
|
21
|
+
/** @inheritdoc */
|
|
22
|
+
toJson(): VetTransactionData;
|
|
23
|
+
/** @inheritdoc */
|
|
24
|
+
fromDeserializedSignedTransaction(signedTx: VetTransaction): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=exitDelegation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exitDelegation.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/exitDelegation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,IAAI,cAAc,EAAa,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAK9C,qBAAa,yBAA0B,SAAQ,WAAW;IACxD,OAAO,CAAC,QAAQ,CAAS;gBAEb,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,EAAE,EAAE,MAAM,EAErB;IAED,kBAAkB;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,kBAAkB;IAClB,YAAY,IAAI,IAAI;IAcpB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAW7B,kBAAkB;IAClB,MAAM,IAAI,kBAAkB;IAkB5B,kBAAkB;IAClB,iCAAiC,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAmDlE"}
|