@bitgo-beta/sdk-coin-vet 1.0.1-beta.27 → 1.0.1-beta.270
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 +9 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +11 -3
- package/dist/src/lib/iface.d.ts +25 -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 +14 -3
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +27 -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/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/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 +55 -5
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +125 -5
- package/dist/src/lib/types.d.ts +8 -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 +106 -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,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AddressInitializationBuilder = void 0;
|
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
|
8
|
+
const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
|
|
9
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
|
+
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
11
|
+
const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
|
|
12
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
13
|
+
const utils_1 = __importDefault(require("../utils"));
|
|
14
|
+
class AddressInitializationBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
15
|
+
/**
|
|
16
|
+
* Creates a new AddressInitializationBuilder instance.
|
|
17
|
+
*
|
|
18
|
+
* @param {Readonly<CoinConfig>} _coinConfig - The coin configuration object
|
|
19
|
+
*/
|
|
20
|
+
constructor(_coinConfig) {
|
|
21
|
+
super(_coinConfig);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Initializes the builder with an existing AddressInitializationTransaction.
|
|
25
|
+
*
|
|
26
|
+
* @param {AddressInitializationTransaction} tx - The transaction to initialize the builder with
|
|
27
|
+
*/
|
|
28
|
+
initBuilder(tx) {
|
|
29
|
+
this._transaction = tx;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Gets the address initialization transaction instance.
|
|
33
|
+
*
|
|
34
|
+
* @returns {AddressInitializationTransaction} The address initialization transaction
|
|
35
|
+
*/
|
|
36
|
+
get addressInitializationTransaction() {
|
|
37
|
+
return this._transaction;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Gets the transaction type for address initialization.
|
|
41
|
+
*
|
|
42
|
+
* @returns {TransactionType} The transaction type
|
|
43
|
+
*/
|
|
44
|
+
get transactionType() {
|
|
45
|
+
return sdk_core_1.TransactionType.AddressInitialization;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Validates the transaction clauses for address initialization.
|
|
49
|
+
* @param {TransactionClause[]} clauses - The transaction clauses to validate.
|
|
50
|
+
* @returns {boolean} - Returns true if the clauses are valid, false otherwise.
|
|
51
|
+
*/
|
|
52
|
+
isValidTransactionClauses(clauses) {
|
|
53
|
+
try {
|
|
54
|
+
if (!clauses || !Array.isArray(clauses) || clauses.length === 0) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
const clause = clauses[0];
|
|
58
|
+
if (!clause.to || !utils_1.default.isValidAddress(clause.to)) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
// For address init transactions, value must be exactly '0x0'
|
|
62
|
+
if (clause.value !== 0) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
const { baseAddress, addressCreationSalt, feeAddress } = (0, abstract_eth_1.decodeForwarderCreationData)(clause.data);
|
|
66
|
+
if (!utils_1.default.isValidAddress(baseAddress) || !utils_1.default.isValidAddress(feeAddress)) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
if (!addressCreationSalt) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Sets the base address for this forwarder init tx.
|
|
80
|
+
*
|
|
81
|
+
* @param {string} address - The base address to be set for the forwarder address
|
|
82
|
+
* @returns {AddressInitializationBuilder} This transaction builder
|
|
83
|
+
*/
|
|
84
|
+
baseAddress(address) {
|
|
85
|
+
this.validateAddress({ address });
|
|
86
|
+
this.addressInitializationTransaction.baseAddress = address;
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Sets the fee address for this forwarder init tx.
|
|
91
|
+
*
|
|
92
|
+
* @param {string} address - The fee address to be set for the forwarder address
|
|
93
|
+
* @returns {AddressInitializationBuilder} This transaction builder
|
|
94
|
+
*/
|
|
95
|
+
feeAddress(address) {
|
|
96
|
+
this.validateAddress({ address });
|
|
97
|
+
this.addressInitializationTransaction.feeAddress = address;
|
|
98
|
+
return this;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Sets the salt value for the forwarder address creation.
|
|
102
|
+
*
|
|
103
|
+
* @param {string} salt - The salt value to use for address creation
|
|
104
|
+
* @returns {AddressInitializationBuilder} This transaction builder
|
|
105
|
+
*/
|
|
106
|
+
salt(salt) {
|
|
107
|
+
this.addressInitializationTransaction.salt = salt;
|
|
108
|
+
return this;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Sets the initialization code for the forwarder contract.
|
|
112
|
+
*
|
|
113
|
+
* @param {string} address - The address to generate proxy init code for
|
|
114
|
+
* @returns {AddressInitializationBuilder} This transaction builder
|
|
115
|
+
*/
|
|
116
|
+
initCode(address) {
|
|
117
|
+
this.validateAddress({ address });
|
|
118
|
+
this.addressInitializationTransaction.initCode = (0, abstract_eth_1.getProxyInitcode)(address);
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
/** @inheritdoc */
|
|
122
|
+
validateTransaction(transaction) {
|
|
123
|
+
if (!transaction) {
|
|
124
|
+
throw new Error('transaction not defined');
|
|
125
|
+
}
|
|
126
|
+
(0, assert_1.default)(transaction.contract, 'Contract address is required');
|
|
127
|
+
(0, assert_1.default)(transaction.baseAddress, 'Base address is required');
|
|
128
|
+
(0, assert_1.default)(transaction.feeAddress, 'Fee address is required');
|
|
129
|
+
(0, assert_1.default)(transaction.salt, 'Salt is required');
|
|
130
|
+
(0, assert_1.default)(transaction.initCode, 'Init code is required');
|
|
131
|
+
this.validateAddress({ address: transaction.contract });
|
|
132
|
+
this.validateAddress({ address: transaction.baseAddress });
|
|
133
|
+
this.validateAddress({ address: transaction.feeAddress });
|
|
134
|
+
}
|
|
135
|
+
/** @inheritdoc */
|
|
136
|
+
async buildImplementation() {
|
|
137
|
+
const transactionData = this.getAddressInitializationData();
|
|
138
|
+
this.transaction.type = this.transactionType;
|
|
139
|
+
this.addressInitializationTransaction.transactionData = transactionData;
|
|
140
|
+
await this.addressInitializationTransaction.build();
|
|
141
|
+
return this.transaction;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Generates the transaction data for address initialization by encoding the createForwarder method call.
|
|
145
|
+
*
|
|
146
|
+
* @private
|
|
147
|
+
* @returns {string} The encoded transaction data as a hex string
|
|
148
|
+
*/
|
|
149
|
+
getAddressInitializationData() {
|
|
150
|
+
const saltBuffer = (0, ethereumjs_util_1.setLengthLeft)((0, ethereumjs_util_1.toBuffer)(this.addressInitializationTransaction.salt), 32);
|
|
151
|
+
const { createForwarderParams, createForwarderTypes } = (0, abstract_eth_1.getCreateForwarderParamsAndTypes)(this.addressInitializationTransaction.baseAddress, saltBuffer, this.addressInitializationTransaction.feeAddress);
|
|
152
|
+
const method = ethereumjs_abi_1.default.methodID('createForwarder', createForwarderTypes);
|
|
153
|
+
const args = ethereumjs_abi_1.default.rawEncode(createForwarderTypes, createForwarderParams);
|
|
154
|
+
return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
exports.AddressInitializationBuilder = AddressInitializationBuilder;
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyL2FkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDJEQUEySDtBQUMzSCxtREFBdUQ7QUFFdkQscURBQXdFO0FBQ3hFLG9FQUF5QztBQUV6Qyw2REFBMEQ7QUFHMUQscURBQTZCO0FBRTdCLE1BQWEsNEJBQTZCLFNBQVEsdUNBQWtCO0lBQ2xFOzs7O09BSUc7SUFDSCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxFQUFvQztRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksZ0NBQWdDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFlBQWdELENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLHFCQUFxQixDQUFDO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ08seUJBQXlCLENBQUMsT0FBNEI7UUFDOUQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDaEUsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTFCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsNkRBQTZEO1lBQzdELElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFBLDBDQUEyQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVsRyxJQUFJLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxXQUFxQixDQUFDLElBQUksQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLFVBQW9CLENBQUMsRUFBRSxDQUFDO2dCQUNoRyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxPQUFlO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1FBQzVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE9BQWU7UUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLENBQUMsSUFBWTtRQUNmLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2xELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsUUFBUSxDQUFDLE9BQWU7UUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFFBQVEsR0FBRyxJQUFBLCtCQUFnQixFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxXQUE4QztRQUNoRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO1FBQzdELElBQUEsZ0JBQU0sRUFBQyxXQUFXLENBQUMsV0FBVyxFQUFFLDBCQUEwQixDQUFDLENBQUM7UUFDNUQsSUFBQSxnQkFBTSxFQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUMxRCxJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdDLElBQUEsZ0JBQU0sRUFBQyxXQUFXLENBQUMsUUFBUSxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN4RSxNQUFNLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssNEJBQTRCO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUEsK0JBQWEsRUFBQyxJQUFBLDBCQUFRLEVBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLElBQUEsK0NBQWdDLEVBQ3RGLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxXQUFXLEVBQ2pELFVBQVUsRUFDVixJQUFJLENBQUMsZ0NBQWdDLENBQUMsVUFBVSxDQUNqRCxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsd0JBQVcsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUM3RSxNQUFNLElBQUksR0FBRyx3QkFBVyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sSUFBQSw4QkFBWSxFQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0Y7QUFwS0Qsb0VBb0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25DbGF1c2UgfSBmcm9tICdAdmVjaGFpbi9zZGstY29yZSc7XG5pbXBvcnQgeyBnZXRQcm94eUluaXRjb2RlLCBnZXRDcmVhdGVGb3J3YXJkZXJQYXJhbXNBbmRUeXBlcywgZGVjb2RlRm9yd2FyZGVyQ3JlYXRpb25EYXRhIH0gZnJvbSAnQGJpdGdvLWJldGEvYWJzdHJhY3QtZXRoJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IHNldExlbmd0aExlZnQsIHRvQnVmZmVyLCBhZGRIZXhQcmVmaXggfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuaW1wb3J0IEV0aGVyZXVtQWJpIGZyb20gJ2V0aGVyZXVtanMtYWJpJztcblxuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgQWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbi9hZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFkb25seTxDb2luQ29uZmlnPn0gX2NvaW5Db25maWcgLSBUaGUgY29pbiBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKi9cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBidWlsZGVyIHdpdGggYW4gZXhpc3RpbmcgQWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb259IHR4IC0gVGhlIHRyYW5zYWN0aW9uIHRvIGluaXRpYWxpemUgdGhlIGJ1aWxkZXIgd2l0aFxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IEFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBhZGRyZXNzIGluaXRpYWxpemF0aW9uIHRyYW5zYWN0aW9uIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb259IFRoZSBhZGRyZXNzIGluaXRpYWxpemF0aW9uIHRyYW5zYWN0aW9uXG4gICAqL1xuICBnZXQgYWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24oKTogQWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbiBhcyBBZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0cmFuc2FjdGlvbiB0eXBlIGZvciBhZGRyZXNzIGluaXRpYWxpemF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25UeXBlfSBUaGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHRyYW5zYWN0aW9uIGNsYXVzZXMgZm9yIGFkZHJlc3MgaW5pdGlhbGl6YXRpb24uXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25DbGF1c2VbXX0gY2xhdXNlcyAtIFRoZSB0cmFuc2FjdGlvbiBjbGF1c2VzIHRvIHZhbGlkYXRlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGNsYXVzZXMgYXJlIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNWYWxpZFRyYW5zYWN0aW9uQ2xhdXNlcyhjbGF1c2VzOiBUcmFuc2FjdGlvbkNsYXVzZVtdKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghY2xhdXNlcyB8fCAhQXJyYXkuaXNBcnJheShjbGF1c2VzKSB8fCBjbGF1c2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNsYXVzZSA9IGNsYXVzZXNbMF07XG5cbiAgICAgIGlmICghY2xhdXNlLnRvIHx8ICF1dGlscy5pc1ZhbGlkQWRkcmVzcyhjbGF1c2UudG8pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIGFkZHJlc3MgaW5pdCB0cmFuc2FjdGlvbnMsIHZhbHVlIG11c3QgYmUgZXhhY3RseSAnMHgwJ1xuICAgICAgaWYgKGNsYXVzZS52YWx1ZSAhPT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYmFzZUFkZHJlc3MsIGFkZHJlc3NDcmVhdGlvblNhbHQsIGZlZUFkZHJlc3MgfSA9IGRlY29kZUZvcndhcmRlckNyZWF0aW9uRGF0YShjbGF1c2UuZGF0YSk7XG5cbiAgICAgIGlmICghdXRpbHMuaXNWYWxpZEFkZHJlc3MoYmFzZUFkZHJlc3MgYXMgc3RyaW5nKSB8fCAhdXRpbHMuaXNWYWxpZEFkZHJlc3MoZmVlQWRkcmVzcyBhcyBzdHJpbmcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhZGRyZXNzQ3JlYXRpb25TYWx0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBiYXNlIGFkZHJlc3MgZm9yIHRoaXMgZm9yd2FyZGVyIGluaXQgdHguXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gVGhlIGJhc2UgYWRkcmVzcyB0byBiZSBzZXQgZm9yIHRoZSBmb3J3YXJkZXIgYWRkcmVzc1xuICAgKiBAcmV0dXJucyB7QWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBiYXNlQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gICAgdGhpcy5hZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbi5iYXNlQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZmVlIGFkZHJlc3MgZm9yIHRoaXMgZm9yd2FyZGVyIGluaXQgdHguXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gVGhlIGZlZSBhZGRyZXNzIHRvIGJlIHNldCBmb3IgdGhlIGZvcndhcmRlciBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGZlZUFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIHRoaXMuYWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24uZmVlQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2FsdCB2YWx1ZSBmb3IgdGhlIGZvcndhcmRlciBhZGRyZXNzIGNyZWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2FsdCAtIFRoZSBzYWx0IHZhbHVlIHRvIHVzZSBmb3IgYWRkcmVzcyBjcmVhdGlvblxuICAgKiBAcmV0dXJucyB7QWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBzYWx0KHNhbHQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuYWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24uc2FsdCA9IHNhbHQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgdGhlIGZvcndhcmRlciBjb250cmFjdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgYWRkcmVzcyB0byBnZW5lcmF0ZSBwcm94eSBpbml0IGNvZGUgZm9yXG4gICAqIEByZXR1cm5zIHtBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGluaXRDb2RlKGFkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB0aGlzLmFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uLmluaXRDb2RlID0gZ2V0UHJveHlJbml0Y29kZShhZGRyZXNzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uPzogQWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIG5vdCBkZWZpbmVkJyk7XG4gICAgfVxuICAgIGFzc2VydCh0cmFuc2FjdGlvbi5jb250cmFjdCwgJ0NvbnRyYWN0IGFkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICBhc3NlcnQodHJhbnNhY3Rpb24uYmFzZUFkZHJlc3MsICdCYXNlIGFkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICBhc3NlcnQodHJhbnNhY3Rpb24uZmVlQWRkcmVzcywgJ0ZlZSBhZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgYXNzZXJ0KHRyYW5zYWN0aW9uLnNhbHQsICdTYWx0IGlzIHJlcXVpcmVkJyk7XG4gICAgYXNzZXJ0KHRyYW5zYWN0aW9uLmluaXRDb2RlLCAnSW5pdCBjb2RlIGlzIHJlcXVpcmVkJyk7XG5cbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6IHRyYW5zYWN0aW9uLmNvbnRyYWN0IH0pO1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogdHJhbnNhY3Rpb24uYmFzZUFkZHJlc3MgfSk7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiB0cmFuc2FjdGlvbi5mZWVBZGRyZXNzIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkRhdGEgPSB0aGlzLmdldEFkZHJlc3NJbml0aWFsaXphdGlvbkRhdGEoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnR5cGUgPSB0aGlzLnRyYW5zYWN0aW9uVHlwZTtcbiAgICB0aGlzLmFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uRGF0YSA9IHRyYW5zYWN0aW9uRGF0YTtcbiAgICBhd2FpdCB0aGlzLmFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uLmJ1aWxkKCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSB0cmFuc2FjdGlvbiBkYXRhIGZvciBhZGRyZXNzIGluaXRpYWxpemF0aW9uIGJ5IGVuY29kaW5nIHRoZSBjcmVhdGVGb3J3YXJkZXIgbWV0aG9kIGNhbGwuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGEgYXMgYSBoZXggc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIGdldEFkZHJlc3NJbml0aWFsaXphdGlvbkRhdGEoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzYWx0QnVmZmVyID0gc2V0TGVuZ3RoTGVmdCh0b0J1ZmZlcih0aGlzLmFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uLnNhbHQpLCAzMik7XG4gICAgY29uc3QgeyBjcmVhdGVGb3J3YXJkZXJQYXJhbXMsIGNyZWF0ZUZvcndhcmRlclR5cGVzIH0gPSBnZXRDcmVhdGVGb3J3YXJkZXJQYXJhbXNBbmRUeXBlcyhcbiAgICAgIHRoaXMuYWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24uYmFzZUFkZHJlc3MsXG4gICAgICBzYWx0QnVmZmVyLFxuICAgICAgdGhpcy5hZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbi5mZWVBZGRyZXNzXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRCgnY3JlYXRlRm9yd2FyZGVyJywgY3JlYXRlRm9yd2FyZGVyVHlwZXMpO1xuICAgIGNvbnN0IGFyZ3MgPSBFdGhlcmV1bUFiaS5yYXdFbmNvZGUoY3JlYXRlRm9yd2FyZGVyVHlwZXMsIGNyZWF0ZUZvcndhcmRlclBhcmFtcyk7XG4gICAgcmV0dXJuIGFkZEhleFByZWZpeChCdWZmZXIuY29uY2F0KFttZXRob2QsIGFyZ3NdKS50b1N0cmluZygnaGV4JykpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { TransactionClause } from '@vechain/sdk-core';
|
|
2
|
+
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
4
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
5
|
+
import { BurnNftTransaction } from '../transaction/burnNftTransaction';
|
|
6
|
+
import { Transaction } from '../transaction/transaction';
|
|
7
|
+
export declare class BurnNftBuilder extends TransactionBuilder {
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new BurnNftBuilder instance.
|
|
10
|
+
*
|
|
11
|
+
* @param {Readonly<CoinConfig>} _coinConfig - The coin configuration object
|
|
12
|
+
*/
|
|
13
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
14
|
+
/**
|
|
15
|
+
* Initializes the builder with an existing BurnNftTransaction.
|
|
16
|
+
*
|
|
17
|
+
* @param {BurnNftTransaction} tx - The transaction to initialize the builder with
|
|
18
|
+
*/
|
|
19
|
+
initBuilder(tx: BurnNftTransaction): void;
|
|
20
|
+
/**
|
|
21
|
+
* Gets the burn NFT transaction instance.
|
|
22
|
+
*
|
|
23
|
+
* @returns {BurnNftTransaction} The burn NFT transaction
|
|
24
|
+
*/
|
|
25
|
+
get burnNftTransaction(): BurnNftTransaction;
|
|
26
|
+
/**
|
|
27
|
+
* Gets the transaction type for burning NFT.
|
|
28
|
+
*
|
|
29
|
+
* @returns {TransactionType} The transaction type
|
|
30
|
+
*/
|
|
31
|
+
protected get transactionType(): TransactionType;
|
|
32
|
+
/**
|
|
33
|
+
* Validates the transaction clauses for burning NFT.
|
|
34
|
+
* @param {TransactionClause[]} clauses - The transaction clauses to validate.
|
|
35
|
+
* @returns {boolean} - Returns true if the clauses are valid, false otherwise.
|
|
36
|
+
*/
|
|
37
|
+
protected isValidTransactionClauses(clauses: TransactionClause[]): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Sets the token ID for this burn NFT transaction.
|
|
40
|
+
*
|
|
41
|
+
* @param {string} tokenId - The ID of the NFT token to burn
|
|
42
|
+
* @returns {BurnNftBuilder} This transaction builder
|
|
43
|
+
*/
|
|
44
|
+
tokenId(tokenId: string): this;
|
|
45
|
+
/**
|
|
46
|
+
* Sets the NFT contract address for this burn NFT transaction.
|
|
47
|
+
* If not provided, uses the default address from constants.
|
|
48
|
+
*
|
|
49
|
+
* @param {string} address - The NFT contract address
|
|
50
|
+
* @returns {BurnNftBuilder} This transaction builder
|
|
51
|
+
*/
|
|
52
|
+
nftContract(address?: string): this;
|
|
53
|
+
/** @inheritdoc */
|
|
54
|
+
validateTransaction(transaction?: BurnNftTransaction): void;
|
|
55
|
+
/** @inheritdoc */
|
|
56
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
57
|
+
/**
|
|
58
|
+
* Generates the transaction data for burning NFT by encoding the burn method call.
|
|
59
|
+
*
|
|
60
|
+
* @private
|
|
61
|
+
* @returns {string} The encoded transaction data as a hex string
|
|
62
|
+
*/
|
|
63
|
+
private getBurnNftData;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=burnNftBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"burnNftBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/transactionBuilder/burnNftBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAI7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAIzD,qBAAa,cAAe,SAAQ,kBAAkB;IACpD;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,kBAAkB,GAAG,IAAI;IAIzC;;;;OAIG;IACH,IAAI,kBAAkB,IAAI,kBAAkB,CAE3C;IAED;;;;OAIG;IACH,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;OAIG;IACH,SAAS,CAAC,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO;IA4B1E;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK9B;;;;;;OAMG;IACH,WAAW,CAAC,OAAO,GAAE,MAA6B,GAAG,IAAI;IAMzD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAU3D,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAM3D;;;;;OAKG;IACH,OAAO,CAAC,cAAc;CAUvB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
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.BurnNftBuilder = void 0;
|
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
|
8
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
9
|
+
const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
|
|
10
|
+
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
11
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
12
|
+
const burnNftTransaction_1 = require("../transaction/burnNftTransaction");
|
|
13
|
+
const utils_1 = __importDefault(require("../utils"));
|
|
14
|
+
const constants_1 = require("../constants");
|
|
15
|
+
class BurnNftBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
16
|
+
/**
|
|
17
|
+
* Creates a new BurnNftBuilder instance.
|
|
18
|
+
*
|
|
19
|
+
* @param {Readonly<CoinConfig>} _coinConfig - The coin configuration object
|
|
20
|
+
*/
|
|
21
|
+
constructor(_coinConfig) {
|
|
22
|
+
super(_coinConfig);
|
|
23
|
+
this._transaction = new burnNftTransaction_1.BurnNftTransaction(_coinConfig);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Initializes the builder with an existing BurnNftTransaction.
|
|
27
|
+
*
|
|
28
|
+
* @param {BurnNftTransaction} tx - The transaction to initialize the builder with
|
|
29
|
+
*/
|
|
30
|
+
initBuilder(tx) {
|
|
31
|
+
this._transaction = tx;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Gets the burn NFT transaction instance.
|
|
35
|
+
*
|
|
36
|
+
* @returns {BurnNftTransaction} The burn NFT transaction
|
|
37
|
+
*/
|
|
38
|
+
get burnNftTransaction() {
|
|
39
|
+
return this._transaction;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Gets the transaction type for burning NFT.
|
|
43
|
+
*
|
|
44
|
+
* @returns {TransactionType} The transaction type
|
|
45
|
+
*/
|
|
46
|
+
get transactionType() {
|
|
47
|
+
return sdk_core_1.TransactionType.StakingWithdraw;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validates the transaction clauses for burning NFT.
|
|
51
|
+
* @param {TransactionClause[]} clauses - The transaction clauses to validate.
|
|
52
|
+
* @returns {boolean} - Returns true if the clauses are valid, false otherwise.
|
|
53
|
+
*/
|
|
54
|
+
isValidTransactionClauses(clauses) {
|
|
55
|
+
try {
|
|
56
|
+
if (!clauses || !Array.isArray(clauses) || clauses.length === 0) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
const clause = clauses[0];
|
|
60
|
+
if (!clause.to || !utils_1.default.isValidAddress(clause.to)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
// For burn NFT transactions, value must be exactly '0x0'
|
|
64
|
+
if (clause.value !== 0) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
// Check if the data starts with the burn method ID
|
|
68
|
+
if (!clause.data.startsWith(constants_1.BURN_NFT_METHOD_ID)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Sets the token ID for this burn NFT transaction.
|
|
79
|
+
*
|
|
80
|
+
* @param {string} tokenId - The ID of the NFT token to burn
|
|
81
|
+
* @returns {BurnNftBuilder} This transaction builder
|
|
82
|
+
*/
|
|
83
|
+
tokenId(tokenId) {
|
|
84
|
+
this.burnNftTransaction.tokenId = tokenId;
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Sets the NFT contract address for this burn NFT transaction.
|
|
89
|
+
* If not provided, uses the default address from constants.
|
|
90
|
+
*
|
|
91
|
+
* @param {string} address - The NFT contract address
|
|
92
|
+
* @returns {BurnNftBuilder} This transaction builder
|
|
93
|
+
*/
|
|
94
|
+
nftContract(address = constants_1.STARGATE_NFT_ADDRESS) {
|
|
95
|
+
this.validateAddress({ address });
|
|
96
|
+
this.burnNftTransaction.contract = address;
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
/** @inheritdoc */
|
|
100
|
+
validateTransaction(transaction) {
|
|
101
|
+
if (!transaction) {
|
|
102
|
+
throw new Error('transaction not defined');
|
|
103
|
+
}
|
|
104
|
+
(0, assert_1.default)(transaction.contract, 'NFT contract address is required');
|
|
105
|
+
(0, assert_1.default)(transaction.tokenId, 'Token ID is required');
|
|
106
|
+
this.validateAddress({ address: transaction.contract });
|
|
107
|
+
}
|
|
108
|
+
/** @inheritdoc */
|
|
109
|
+
async buildImplementation() {
|
|
110
|
+
this.transaction.type = this.transactionType;
|
|
111
|
+
await this.burnNftTransaction.build();
|
|
112
|
+
return this.transaction;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Generates the transaction data for burning NFT by encoding the burn method call.
|
|
116
|
+
*
|
|
117
|
+
* @private
|
|
118
|
+
* @returns {string} The encoded transaction data as a hex string
|
|
119
|
+
*/
|
|
120
|
+
getBurnNftData() {
|
|
121
|
+
const methodName = 'burn';
|
|
122
|
+
const types = ['uint256'];
|
|
123
|
+
const params = [this.burnNftTransaction.tokenId];
|
|
124
|
+
const method = ethereumjs_abi_1.default.methodID(methodName, types);
|
|
125
|
+
const args = ethereumjs_abi_1.default.rawEncode(types, params);
|
|
126
|
+
return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
exports.BurnNftBuilder = BurnNftBuilder;
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVybk5mdEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlci9idXJuTmZ0QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsbURBQXVEO0FBRXZELG9FQUF5QztBQUN6QyxxREFBK0M7QUFFL0MsNkRBQTBEO0FBQzFELDBFQUF1RTtBQUV2RSxxREFBNkI7QUFDN0IsNENBQXdFO0FBRXhFLE1BQWEsY0FBZSxTQUFRLHVDQUFrQjtJQUNwRDs7OztPQUlHO0lBQ0gsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHVDQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLEVBQXNCO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBa0MsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsZUFBZSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ08seUJBQXlCLENBQUMsT0FBNEI7UUFDOUQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDaEUsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTFCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQseURBQXlEO1lBQ3pELElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsbURBQW1EO1lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyw4QkFBa0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMsT0FBZTtRQUNyQixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUMsVUFBa0IsZ0NBQW9CO1FBQ2hELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxXQUFnQztRQUNsRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ2pFLElBQUEsZ0JBQU0sRUFBQyxXQUFXLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxjQUFjO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpELE1BQU0sTUFBTSxHQUFHLHdCQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyx3QkFBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbEQsT0FBTyxJQUFBLDhCQUFZLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7Q0FDRjtBQWpJRCx3Q0FpSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkNsYXVzZSB9IGZyb20gJ0B2ZWNoYWluL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBFdGhlcmV1bUFiaSBmcm9tICdldGhlcmV1bWpzLWFiaSc7XG5pbXBvcnQgeyBhZGRIZXhQcmVmaXggfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuXG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBCdXJuTmZ0VHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbi9idXJuTmZ0VHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQlVSTl9ORlRfTUVUSE9EX0lELCBTVEFSR0FURV9ORlRfQUREUkVTUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBCdXJuTmZ0QnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEJ1cm5OZnRCdWlsZGVyIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWRvbmx5PENvaW5Db25maWc+fSBfY29pbkNvbmZpZyAtIFRoZSBjb2luIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSBuZXcgQnVybk5mdFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgYnVpbGRlciB3aXRoIGFuIGV4aXN0aW5nIEJ1cm5OZnRUcmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtCdXJuTmZ0VHJhbnNhY3Rpb259IHR4IC0gVGhlIHRyYW5zYWN0aW9uIHRvIGluaXRpYWxpemUgdGhlIGJ1aWxkZXIgd2l0aFxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IEJ1cm5OZnRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYnVybiBORlQgdHJhbnNhY3Rpb24gaW5zdGFuY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtCdXJuTmZ0VHJhbnNhY3Rpb259IFRoZSBidXJuIE5GVCB0cmFuc2FjdGlvblxuICAgKi9cbiAgZ2V0IGJ1cm5OZnRUcmFuc2FjdGlvbigpOiBCdXJuTmZ0VHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbiBhcyBCdXJuTmZ0VHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdHJhbnNhY3Rpb24gdHlwZSBmb3IgYnVybmluZyBORlQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvblR5cGV9IFRoZSB0cmFuc2FjdGlvbiB0eXBlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgdHJhbnNhY3Rpb24gY2xhdXNlcyBmb3IgYnVybmluZyBORlQuXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25DbGF1c2VbXX0gY2xhdXNlcyAtIFRoZSB0cmFuc2FjdGlvbiBjbGF1c2VzIHRvIHZhbGlkYXRlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGNsYXVzZXMgYXJlIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNWYWxpZFRyYW5zYWN0aW9uQ2xhdXNlcyhjbGF1c2VzOiBUcmFuc2FjdGlvbkNsYXVzZVtdKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghY2xhdXNlcyB8fCAhQXJyYXkuaXNBcnJheShjbGF1c2VzKSB8fCBjbGF1c2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNsYXVzZSA9IGNsYXVzZXNbMF07XG5cbiAgICAgIGlmICghY2xhdXNlLnRvIHx8ICF1dGlscy5pc1ZhbGlkQWRkcmVzcyhjbGF1c2UudG8pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIGJ1cm4gTkZUIHRyYW5zYWN0aW9ucywgdmFsdWUgbXVzdCBiZSBleGFjdGx5ICcweDAnXG4gICAgICBpZiAoY2xhdXNlLnZhbHVlICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRhdGEgc3RhcnRzIHdpdGggdGhlIGJ1cm4gbWV0aG9kIElEXG4gICAgICBpZiAoIWNsYXVzZS5kYXRhLnN0YXJ0c1dpdGgoQlVSTl9ORlRfTUVUSE9EX0lEKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdG9rZW4gSUQgZm9yIHRoaXMgYnVybiBORlQgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbklkIC0gVGhlIElEIG9mIHRoZSBORlQgdG9rZW4gdG8gYnVyblxuICAgKiBAcmV0dXJucyB7QnVybk5mdEJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgdG9rZW5JZCh0b2tlbklkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLmJ1cm5OZnRUcmFuc2FjdGlvbi50b2tlbklkID0gdG9rZW5JZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBORlQgY29udHJhY3QgYWRkcmVzcyBmb3IgdGhpcyBidXJuIE5GVCB0cmFuc2FjdGlvbi5cbiAgICogSWYgbm90IHByb3ZpZGVkLCB1c2VzIHRoZSBkZWZhdWx0IGFkZHJlc3MgZnJvbSBjb25zdGFudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gVGhlIE5GVCBjb250cmFjdCBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtCdXJuTmZ0QnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBuZnRDb250cmFjdChhZGRyZXNzOiBzdHJpbmcgPSBTVEFSR0FURV9ORlRfQUREUkVTUyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB0aGlzLmJ1cm5OZnRUcmFuc2FjdGlvbi5jb250cmFjdCA9IGFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbj86IEJ1cm5OZnRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGlmICghdHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNhY3Rpb24gbm90IGRlZmluZWQnKTtcbiAgICB9XG4gICAgYXNzZXJ0KHRyYW5zYWN0aW9uLmNvbnRyYWN0LCAnTkZUIGNvbnRyYWN0IGFkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICBhc3NlcnQodHJhbnNhY3Rpb24udG9rZW5JZCwgJ1Rva2VuIElEIGlzIHJlcXVpcmVkJyk7XG5cbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6IHRyYW5zYWN0aW9uLmNvbnRyYWN0IH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnR5cGUgPSB0aGlzLnRyYW5zYWN0aW9uVHlwZTtcbiAgICBhd2FpdCB0aGlzLmJ1cm5OZnRUcmFuc2FjdGlvbi5idWlsZCgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyB0aGUgdHJhbnNhY3Rpb24gZGF0YSBmb3IgYnVybmluZyBORlQgYnkgZW5jb2RpbmcgdGhlIGJ1cm4gbWV0aG9kIGNhbGwuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGEgYXMgYSBoZXggc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIGdldEJ1cm5OZnREYXRhKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9ICdidXJuJztcbiAgICBjb25zdCB0eXBlcyA9IFsndWludDI1NiddO1xuICAgIGNvbnN0IHBhcmFtcyA9IFt0aGlzLmJ1cm5OZnRUcmFuc2FjdGlvbi50b2tlbklkXTtcblxuICAgIGNvbnN0IG1ldGhvZCA9IEV0aGVyZXVtQWJpLm1ldGhvZElEKG1ldGhvZE5hbWUsIHR5cGVzKTtcbiAgICBjb25zdCBhcmdzID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKHR5cGVzLCBwYXJhbXMpO1xuXG4gICAgcmV0dXJuIGFkZEhleFByZWZpeChCdWZmZXIuY29uY2F0KFttZXRob2QsIGFyZ3NdKS50b1N0cmluZygnaGV4JykpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { TransactionClause } from '@vechain/sdk-core';
|
|
2
|
+
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
4
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
5
|
+
import { ExitDelegationTransaction } from '../transaction/exitDelegation';
|
|
6
|
+
import { Transaction } from '../transaction/transaction';
|
|
7
|
+
export declare class ExitDelegationBuilder extends TransactionBuilder {
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new ExitDelegationBuilder instance.
|
|
10
|
+
*
|
|
11
|
+
* @param {Readonly<CoinConfig>} _coinConfig - The coin configuration object
|
|
12
|
+
*/
|
|
13
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
14
|
+
/**
|
|
15
|
+
* Initializes the builder with an existing ExitDelegationTransaction.
|
|
16
|
+
*
|
|
17
|
+
* @param {ExitDelegationTransaction} tx - The transaction to initialize the builder with
|
|
18
|
+
*/
|
|
19
|
+
initBuilder(tx: ExitDelegationTransaction): void;
|
|
20
|
+
/**
|
|
21
|
+
* Gets the exit delegation transaction instance.
|
|
22
|
+
*
|
|
23
|
+
* @returns {ExitDelegationTransaction} The exit delegation transaction
|
|
24
|
+
*/
|
|
25
|
+
get exitDelegationTransaction(): ExitDelegationTransaction;
|
|
26
|
+
/**
|
|
27
|
+
* Gets the transaction type for unstaking.
|
|
28
|
+
*
|
|
29
|
+
* @returns {TransactionType} The transaction type
|
|
30
|
+
*/
|
|
31
|
+
protected get transactionType(): TransactionType;
|
|
32
|
+
/**
|
|
33
|
+
* Validates the transaction clauses for unstaking.
|
|
34
|
+
* @param {TransactionClause[]} clauses - The transaction clauses to validate.
|
|
35
|
+
* @returns {boolean} - Returns true if the clauses are valid, false otherwise.
|
|
36
|
+
*/
|
|
37
|
+
protected isValidTransactionClauses(clauses: TransactionClause[]): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Sets the token ID for this unstaking transaction.
|
|
40
|
+
*
|
|
41
|
+
* @param {string} tokenId - The ID of the NFT token to unstake
|
|
42
|
+
* @returns {ExitDelegationBuilder} This transaction builder
|
|
43
|
+
*/
|
|
44
|
+
tokenId(tokenId: string): this;
|
|
45
|
+
/**
|
|
46
|
+
* Sets the delegation contract address for this unstaking transaction.
|
|
47
|
+
* If not provided, uses the default address from constants.
|
|
48
|
+
*
|
|
49
|
+
* @param {string} address - The delegation contract address
|
|
50
|
+
* @returns {ExitDelegationBuilder} This transaction builder
|
|
51
|
+
*/
|
|
52
|
+
delegationContract(address?: string): this;
|
|
53
|
+
/** @inheritdoc */
|
|
54
|
+
validateTransaction(transaction?: ExitDelegationTransaction): void;
|
|
55
|
+
/** @inheritdoc */
|
|
56
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
57
|
+
/**
|
|
58
|
+
* Generates the transaction data for exit delegation by encoding the exitDelegation method call.
|
|
59
|
+
*
|
|
60
|
+
* @private
|
|
61
|
+
* @returns {string} The encoded transaction data as a hex string
|
|
62
|
+
*/
|
|
63
|
+
private getExitDelegationData;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=exitDelegationBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exitDelegationBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/transactionBuilder/exitDelegationBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAI7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAIzD,qBAAa,qBAAsB,SAAQ,kBAAkB;IAC3D;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,yBAAyB,GAAG,IAAI;IAIhD;;;;OAIG;IACH,IAAI,yBAAyB,IAAI,yBAAyB,CAEzD;IAED;;;;OAIG;IACH,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;OAIG;IACH,SAAS,CAAC,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO;IA4B1E;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK9B;;;;;;OAMG;IACH,kBAAkB,CAAC,OAAO,GAAE,MAAoC,GAAG,IAAI;IAMvE,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,yBAAyB,GAAG,IAAI;IAUlE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;CAU9B"}
|
|
@@ -0,0 +1,132 @@
|
|
|
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.ExitDelegationBuilder = void 0;
|
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
|
8
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
9
|
+
const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
|
|
10
|
+
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
11
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
12
|
+
const exitDelegation_1 = require("../transaction/exitDelegation");
|
|
13
|
+
const utils_1 = __importDefault(require("../utils"));
|
|
14
|
+
const constants_1 = require("../constants");
|
|
15
|
+
class ExitDelegationBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
16
|
+
/**
|
|
17
|
+
* Creates a new ExitDelegationBuilder instance.
|
|
18
|
+
*
|
|
19
|
+
* @param {Readonly<CoinConfig>} _coinConfig - The coin configuration object
|
|
20
|
+
*/
|
|
21
|
+
constructor(_coinConfig) {
|
|
22
|
+
super(_coinConfig);
|
|
23
|
+
this._transaction = new exitDelegation_1.ExitDelegationTransaction(_coinConfig);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Initializes the builder with an existing ExitDelegationTransaction.
|
|
27
|
+
*
|
|
28
|
+
* @param {ExitDelegationTransaction} tx - The transaction to initialize the builder with
|
|
29
|
+
*/
|
|
30
|
+
initBuilder(tx) {
|
|
31
|
+
this._transaction = tx;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Gets the exit delegation transaction instance.
|
|
35
|
+
*
|
|
36
|
+
* @returns {ExitDelegationTransaction} The exit delegation transaction
|
|
37
|
+
*/
|
|
38
|
+
get exitDelegationTransaction() {
|
|
39
|
+
return this._transaction;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Gets the transaction type for unstaking.
|
|
43
|
+
*
|
|
44
|
+
* @returns {TransactionType} The transaction type
|
|
45
|
+
*/
|
|
46
|
+
get transactionType() {
|
|
47
|
+
return sdk_core_1.TransactionType.StakingUnlock;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validates the transaction clauses for unstaking.
|
|
51
|
+
* @param {TransactionClause[]} clauses - The transaction clauses to validate.
|
|
52
|
+
* @returns {boolean} - Returns true if the clauses are valid, false otherwise.
|
|
53
|
+
*/
|
|
54
|
+
isValidTransactionClauses(clauses) {
|
|
55
|
+
try {
|
|
56
|
+
if (!clauses || !Array.isArray(clauses) || clauses.length === 0) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
const clause = clauses[0];
|
|
60
|
+
if (!clause.to || !utils_1.default.isValidAddress(clause.to)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
// For unstaking transactions, value must be exactly '0x0'
|
|
64
|
+
if (clause.value !== 0) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
// Check if the data starts with the exitDelegation method ID
|
|
68
|
+
if (!clause.data.startsWith(constants_1.EXIT_DELEGATION_METHOD_ID)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Sets the token ID for this unstaking transaction.
|
|
79
|
+
*
|
|
80
|
+
* @param {string} tokenId - The ID of the NFT token to unstake
|
|
81
|
+
* @returns {ExitDelegationBuilder} This transaction builder
|
|
82
|
+
*/
|
|
83
|
+
tokenId(tokenId) {
|
|
84
|
+
this.exitDelegationTransaction.tokenId = tokenId;
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Sets the delegation contract address for this unstaking transaction.
|
|
89
|
+
* If not provided, uses the default address from constants.
|
|
90
|
+
*
|
|
91
|
+
* @param {string} address - The delegation contract address
|
|
92
|
+
* @returns {ExitDelegationBuilder} This transaction builder
|
|
93
|
+
*/
|
|
94
|
+
delegationContract(address = constants_1.STARGATE_DELEGATION_ADDRESS) {
|
|
95
|
+
this.validateAddress({ address });
|
|
96
|
+
this.exitDelegationTransaction.contract = address;
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
/** @inheritdoc */
|
|
100
|
+
validateTransaction(transaction) {
|
|
101
|
+
if (!transaction) {
|
|
102
|
+
throw new Error('transaction not defined');
|
|
103
|
+
}
|
|
104
|
+
(0, assert_1.default)(transaction.contract, 'Delegation contract address is required');
|
|
105
|
+
(0, assert_1.default)(transaction.tokenId, 'Token ID is required');
|
|
106
|
+
this.validateAddress({ address: transaction.contract });
|
|
107
|
+
}
|
|
108
|
+
/** @inheritdoc */
|
|
109
|
+
async buildImplementation() {
|
|
110
|
+
this.transaction.type = this.transactionType;
|
|
111
|
+
// Set the transaction data before building
|
|
112
|
+
this.exitDelegationTransaction.transactionData = this.getExitDelegationData();
|
|
113
|
+
await this.exitDelegationTransaction.build();
|
|
114
|
+
return this.transaction;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Generates the transaction data for exit delegation by encoding the exitDelegation method call.
|
|
118
|
+
*
|
|
119
|
+
* @private
|
|
120
|
+
* @returns {string} The encoded transaction data as a hex string
|
|
121
|
+
*/
|
|
122
|
+
getExitDelegationData() {
|
|
123
|
+
const methodName = 'exitDelegation';
|
|
124
|
+
const types = ['uint256'];
|
|
125
|
+
const params = [this.exitDelegationTransaction.tokenId];
|
|
126
|
+
const method = ethereumjs_abi_1.default.methodID(methodName, types);
|
|
127
|
+
const args = ethereumjs_abi_1.default.rawEncode(types, params);
|
|
128
|
+
return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.ExitDelegationBuilder = ExitDelegationBuilder;
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhpdERlbGVnYXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIvZXhpdERlbGVnYXRpb25CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUU1QixtREFBdUQ7QUFFdkQsb0VBQXlDO0FBQ3pDLHFEQUErQztBQUUvQyw2REFBMEQ7QUFDMUQsa0VBQTBFO0FBRTFFLHFEQUE2QjtBQUM3Qiw0Q0FBc0Y7QUFFdEYsTUFBYSxxQkFBc0IsU0FBUSx1Q0FBa0I7SUFDM0Q7Ozs7T0FJRztJQUNILFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSwwQ0FBeUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxFQUE2QjtRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUkseUJBQXlCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFlBQXlDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLGFBQWEsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLHlCQUF5QixDQUFDLE9BQTRCO1FBQzlELElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hFLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUxQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELDBEQUEwRDtZQUMxRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELDZEQUE2RDtZQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMscUNBQXlCLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLE9BQWU7UUFDckIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDakQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsa0JBQWtCLENBQUMsVUFBa0IsdUNBQTJCO1FBQzlELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ2xELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxXQUF1QztRQUN6RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSx5Q0FBeUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUEsZ0JBQU0sRUFBQyxXQUFXLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzdDLDJDQUEyQztRQUMzQyxJQUFJLENBQUMseUJBQXlCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzlFLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxxQkFBcUI7UUFDM0IsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4RCxNQUFNLE1BQU0sR0FBRyx3QkFBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsd0JBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWxELE9BQU8sSUFBQSw4QkFBWSxFQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0Y7QUFuSUQsc0RBbUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25DbGF1c2UgfSBmcm9tICdAdmVjaGFpbi9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgRXRoZXJldW1BYmkgZnJvbSAnZXRoZXJldW1qcy1hYmknO1xuaW1wb3J0IHsgYWRkSGV4UHJlZml4IH0gZnJvbSAnZXRoZXJldW1qcy11dGlsJztcblxuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgRXhpdERlbGVnYXRpb25UcmFuc2FjdGlvbiB9IGZyb20gJy4uL3RyYW5zYWN0aW9uL2V4aXREZWxlZ2F0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEVYSVRfREVMRUdBVElPTl9NRVRIT0RfSUQsIFNUQVJHQVRFX0RFTEVHQVRJT05fQUREUkVTUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBFeGl0RGVsZWdhdGlvbkJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBFeGl0RGVsZWdhdGlvbkJ1aWxkZXIgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhZG9ubHk8Q29pbkNvbmZpZz59IF9jb2luQ29uZmlnIC0gVGhlIGNvaW4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBFeGl0RGVsZWdhdGlvblRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgYnVpbGRlciB3aXRoIGFuIGV4aXN0aW5nIEV4aXREZWxlZ2F0aW9uVHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RXhpdERlbGVnYXRpb25UcmFuc2FjdGlvbn0gdHggLSBUaGUgdHJhbnNhY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgYnVpbGRlciB3aXRoXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogRXhpdERlbGVnYXRpb25UcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZXhpdCBkZWxlZ2F0aW9uIHRyYW5zYWN0aW9uIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RXhpdERlbGVnYXRpb25UcmFuc2FjdGlvbn0gVGhlIGV4aXQgZGVsZWdhdGlvbiB0cmFuc2FjdGlvblxuICAgKi9cbiAgZ2V0IGV4aXREZWxlZ2F0aW9uVHJhbnNhY3Rpb24oKTogRXhpdERlbGVnYXRpb25UcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uIGFzIEV4aXREZWxlZ2F0aW9uVHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdHJhbnNhY3Rpb24gdHlwZSBmb3IgdW5zdGFraW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25UeXBlfSBUaGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2s7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSB0cmFuc2FjdGlvbiBjbGF1c2VzIGZvciB1bnN0YWtpbmcuXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25DbGF1c2VbXX0gY2xhdXNlcyAtIFRoZSB0cmFuc2FjdGlvbiBjbGF1c2VzIHRvIHZhbGlkYXRlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGNsYXVzZXMgYXJlIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNWYWxpZFRyYW5zYWN0aW9uQ2xhdXNlcyhjbGF1c2VzOiBUcmFuc2FjdGlvbkNsYXVzZVtdKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghY2xhdXNlcyB8fCAhQXJyYXkuaXNBcnJheShjbGF1c2VzKSB8fCBjbGF1c2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNsYXVzZSA9IGNsYXVzZXNbMF07XG5cbiAgICAgIGlmICghY2xhdXNlLnRvIHx8ICF1dGlscy5pc1ZhbGlkQWRkcmVzcyhjbGF1c2UudG8pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIHVuc3Rha2luZyB0cmFuc2FjdGlvbnMsIHZhbHVlIG11c3QgYmUgZXhhY3RseSAnMHgwJ1xuICAgICAgaWYgKGNsYXVzZS52YWx1ZSAhPT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBkYXRhIHN0YXJ0cyB3aXRoIHRoZSBleGl0RGVsZWdhdGlvbiBtZXRob2QgSURcbiAgICAgIGlmICghY2xhdXNlLmRhdGEuc3RhcnRzV2l0aChFWElUX0RFTEVHQVRJT05fTUVUSE9EX0lEKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdG9rZW4gSUQgZm9yIHRoaXMgdW5zdGFraW5nIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5JZCAtIFRoZSBJRCBvZiB0aGUgTkZUIHRva2VuIHRvIHVuc3Rha2VcbiAgICogQHJldHVybnMge0V4aXREZWxlZ2F0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICB0b2tlbklkKHRva2VuSWQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuZXhpdERlbGVnYXRpb25UcmFuc2FjdGlvbi50b2tlbklkID0gdG9rZW5JZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkZWxlZ2F0aW9uIGNvbnRyYWN0IGFkZHJlc3MgZm9yIHRoaXMgdW5zdGFraW5nIHRyYW5zYWN0aW9uLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgdGhlIGRlZmF1bHQgYWRkcmVzcyBmcm9tIGNvbnN0YW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgZGVsZWdhdGlvbiBjb250cmFjdCBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtFeGl0RGVsZWdhdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgZGVsZWdhdGlvbkNvbnRyYWN0KGFkZHJlc3M6IHN0cmluZyA9IFNUQVJHQVRFX0RFTEVHQVRJT05fQUREUkVTUyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB0aGlzLmV4aXREZWxlZ2F0aW9uVHJhbnNhY3Rpb24uY29udHJhY3QgPSBhZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBFeGl0RGVsZWdhdGlvblRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBub3QgZGVmaW5lZCcpO1xuICAgIH1cbiAgICBhc3NlcnQodHJhbnNhY3Rpb24uY29udHJhY3QsICdEZWxlZ2F0aW9uIGNvbnRyYWN0IGFkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICBhc3NlcnQodHJhbnNhY3Rpb24udG9rZW5JZCwgJ1Rva2VuIElEIGlzIHJlcXVpcmVkJyk7XG5cbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6IHRyYW5zYWN0aW9uLmNvbnRyYWN0IH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnR5cGUgPSB0aGlzLnRyYW5zYWN0aW9uVHlwZTtcbiAgICAvLyBTZXQgdGhlIHRyYW5zYWN0aW9uIGRhdGEgYmVmb3JlIGJ1aWxkaW5nXG4gICAgdGhpcy5leGl0RGVsZWdhdGlvblRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uRGF0YSA9IHRoaXMuZ2V0RXhpdERlbGVnYXRpb25EYXRhKCk7XG4gICAgYXdhaXQgdGhpcy5leGl0RGVsZWdhdGlvblRyYW5zYWN0aW9uLmJ1aWxkKCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSB0cmFuc2FjdGlvbiBkYXRhIGZvciBleGl0IGRlbGVnYXRpb24gYnkgZW5jb2RpbmcgdGhlIGV4aXREZWxlZ2F0aW9uIG1ldGhvZCBjYWxsLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB0cmFuc2FjdGlvbiBkYXRhIGFzIGEgaGV4IHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRFeGl0RGVsZWdhdGlvbkRhdGEoKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gJ2V4aXREZWxlZ2F0aW9uJztcbiAgICBjb25zdCB0eXBlcyA9IFsndWludDI1NiddO1xuICAgIGNvbnN0IHBhcmFtcyA9IFt0aGlzLmV4aXREZWxlZ2F0aW9uVHJhbnNhY3Rpb24udG9rZW5JZF07XG5cbiAgICBjb25zdCBtZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRChtZXRob2ROYW1lLCB0eXBlcyk7XG4gICAgY29uc3QgYXJncyA9IEV0aGVyZXVtQWJpLnJhd0VuY29kZSh0eXBlcywgcGFyYW1zKTtcblxuICAgIHJldHVybiBhZGRIZXhQcmVmaXgoQnVmZmVyLmNvbmNhdChbbWV0aG9kLCBhcmdzXSkudG9TdHJpbmcoJ2hleCcpKTtcbiAgfVxufVxuIl19
|