@bitgo-beta/sdk-coin-vet 1.0.1-beta.59 → 1.0.1-beta.590
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/constants.d.ts +29 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +31 -2
- package/dist/src/lib/iface.d.ts +28 -2
- 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 +21 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +44 -2
- 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 +29 -0
- package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/burnNftTransaction.js +138 -0
- package/dist/src/lib/transaction/claimRewards.d.ts +31 -0
- package/dist/src/lib/transaction/claimRewards.d.ts.map +1 -0
- package/dist/src/lib/transaction/claimRewards.js +151 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.d.ts +27 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.js +158 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts +29 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -0
- package/dist/src/lib/transaction/exitDelegation.js +143 -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/stakeClauseTransaction.d.ts +27 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.js +158 -0
- package/dist/src/lib/transaction/stakingTransaction.d.ts +31 -0
- package/dist/src/lib/transaction/stakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/stakingTransaction.js +169 -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 +18 -28
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transaction.js +98 -58
- package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts +29 -0
- package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/validatorRegistrationTransaction.js +162 -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 +59 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.js +118 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts +59 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +117 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts +72 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.js +133 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +59 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +118 -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/stakeClauseTxnBuilder.d.ts +73 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.js +146 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts +73 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.js +147 -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/transactionBuilder.d.ts +10 -9
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder/transactionBuilder.js +25 -19
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts +72 -0
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.js +133 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +55 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +124 -1
- package/dist/src/lib/types.d.ts +21 -0
- package/dist/src/lib/types.d.ts.map +1 -1
- package/dist/src/lib/types.js +1 -1
- package/dist/src/lib/utils.d.ts +121 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +308 -8
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- package/dist/src/vet.d.ts +94 -3
- package/dist/src/vet.d.ts.map +1 -1
- package/dist/src/vet.js +505 -10
- 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 +1 -1
- package/dist/src/vetToken.d.ts.map +1 -1
- package/dist/src/vetToken.js +2 -2
- package/dist/test/resources/vet.d.ts +86 -0
- package/dist/test/resources/vet.d.ts.map +1 -0
- package/dist/test/resources/vet.js +141 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.js +141 -0
- package/dist/test/transactionBuilder/burnNftBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/burnNftBuilder.js +150 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.js +175 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.js +209 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.js +150 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.js +132 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.js +242 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.js +247 -0
- package/dist/test/transactionBuilder/stakingTransaction.d.ts +2 -0
- package/dist/test/transactionBuilder/stakingTransaction.d.ts.map +1 -0
- package/dist/test/transactionBuilder/stakingTransaction.js +250 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.js +249 -0
- package/dist/test/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/transferBuilder.js +244 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.js +195 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +181 -0
- package/dist/test/unit/stakingFlowE2E.d.ts +2 -0
- package/dist/test/unit/stakingFlowE2E.d.ts.map +1 -0
- package/dist/test/unit/stakingFlowE2E.js +222 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +106 -0
- package/dist/test/unit/vet.d.ts +2 -0
- package/dist/test/unit/vet.d.ts.map +1 -0
- package/dist/test/unit/vet.js +336 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +16 -10
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -40
|
@@ -0,0 +1,162 @@
|
|
|
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.ValidatorRegistrationTransaction = 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 ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
|
|
11
|
+
const utils_1 = __importDefault(require("../utils"));
|
|
12
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
13
|
+
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
14
|
+
const constants_1 = require("../constants");
|
|
15
|
+
class ValidatorRegistrationTransaction extends transaction_1.Transaction {
|
|
16
|
+
constructor(_coinConfig) {
|
|
17
|
+
super(_coinConfig);
|
|
18
|
+
this._type = sdk_core_1.TransactionType.StakingLock;
|
|
19
|
+
}
|
|
20
|
+
get validator() {
|
|
21
|
+
return this._validator;
|
|
22
|
+
}
|
|
23
|
+
set validator(address) {
|
|
24
|
+
this._validator = address;
|
|
25
|
+
}
|
|
26
|
+
get stakingPeriod() {
|
|
27
|
+
return this._stakingPeriod;
|
|
28
|
+
}
|
|
29
|
+
set stakingPeriod(period) {
|
|
30
|
+
this._stakingPeriod = period;
|
|
31
|
+
}
|
|
32
|
+
get stakingContractAddress() {
|
|
33
|
+
return this._stakingContractAddress;
|
|
34
|
+
}
|
|
35
|
+
set stakingContractAddress(address) {
|
|
36
|
+
this._stakingContractAddress = address;
|
|
37
|
+
}
|
|
38
|
+
buildClauses() {
|
|
39
|
+
if (!this.stakingContractAddress) {
|
|
40
|
+
throw new Error('Staking contract address is not set');
|
|
41
|
+
}
|
|
42
|
+
if (!this.validator) {
|
|
43
|
+
throw new Error('Validator address is not set');
|
|
44
|
+
}
|
|
45
|
+
if (!this.stakingPeriod) {
|
|
46
|
+
throw new Error('Staking period is not set');
|
|
47
|
+
}
|
|
48
|
+
utils_1.default.validateContractAddressForValidatorRegistration(this.stakingContractAddress, this._coinConfig);
|
|
49
|
+
const addValidationData = this.getAddValidationClauseData(this.validator, this.stakingPeriod);
|
|
50
|
+
this._transactionData = addValidationData;
|
|
51
|
+
// Create the clause for delegation
|
|
52
|
+
this._clauses = [
|
|
53
|
+
{
|
|
54
|
+
to: this.stakingContractAddress,
|
|
55
|
+
value: constants_1.ZERO_VALUE_AMOUNT,
|
|
56
|
+
data: addValidationData,
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
// Set recipients based on the clauses
|
|
60
|
+
this._recipients = [
|
|
61
|
+
{
|
|
62
|
+
address: this.stakingContractAddress,
|
|
63
|
+
amount: constants_1.ZERO_VALUE_AMOUNT,
|
|
64
|
+
},
|
|
65
|
+
];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Encodes addValidation transaction data using ethereumjs-abi for addValidation method
|
|
69
|
+
* @param {string} validator - address of the validator
|
|
70
|
+
* @param {number} period - staking period, denoted in blocks, that the Validator commits to hard
|
|
71
|
+
locking their VET into the built-in staker contract. Allowed values are 60480 (7 days),
|
|
72
|
+
129600 (15 days) or 259200 (30 days)
|
|
73
|
+
* @returns {string} - The encoded transaction data
|
|
74
|
+
*/
|
|
75
|
+
getAddValidationClauseData(validator, period) {
|
|
76
|
+
const methodName = 'addValidation';
|
|
77
|
+
const types = ['address', 'uint32'];
|
|
78
|
+
const params = [validator, new ethereumjs_util_1.BN(period)];
|
|
79
|
+
const method = ethereumjs_abi_1.default.methodID(methodName, types);
|
|
80
|
+
const args = ethereumjs_abi_1.default.rawEncode(types, params);
|
|
81
|
+
return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
|
|
82
|
+
}
|
|
83
|
+
toJson() {
|
|
84
|
+
const json = {
|
|
85
|
+
id: this.id,
|
|
86
|
+
chainTag: this.chainTag,
|
|
87
|
+
blockRef: this.blockRef,
|
|
88
|
+
expiration: this.expiration,
|
|
89
|
+
gasPriceCoef: this.gasPriceCoef,
|
|
90
|
+
gas: this.gas,
|
|
91
|
+
dependsOn: this.dependsOn,
|
|
92
|
+
nonce: this.nonce,
|
|
93
|
+
data: this.transactionData,
|
|
94
|
+
value: constants_1.ZERO_VALUE_AMOUNT,
|
|
95
|
+
sender: this.sender,
|
|
96
|
+
to: this.stakingContractAddress,
|
|
97
|
+
stakingContractAddress: this.stakingContractAddress,
|
|
98
|
+
amountToStake: constants_1.ZERO_VALUE_AMOUNT,
|
|
99
|
+
validatorAddress: this.validator,
|
|
100
|
+
stakingPeriod: this.stakingPeriod,
|
|
101
|
+
};
|
|
102
|
+
return json;
|
|
103
|
+
}
|
|
104
|
+
fromDeserializedSignedTransaction(signedTx) {
|
|
105
|
+
try {
|
|
106
|
+
if (!signedTx || !signedTx.body) {
|
|
107
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid transaction: missing transaction body');
|
|
108
|
+
}
|
|
109
|
+
// Store the raw transaction
|
|
110
|
+
this.rawTransaction = signedTx;
|
|
111
|
+
// Set transaction body properties
|
|
112
|
+
const body = signedTx.body;
|
|
113
|
+
this.chainTag = typeof body.chainTag === 'number' ? body.chainTag : 0;
|
|
114
|
+
this.blockRef = body.blockRef || '0x0';
|
|
115
|
+
this.expiration = typeof body.expiration === 'number' ? body.expiration : 64;
|
|
116
|
+
this.clauses = body.clauses || [];
|
|
117
|
+
this.gasPriceCoef = typeof body.gasPriceCoef === 'number' ? body.gasPriceCoef : 128;
|
|
118
|
+
this.gas = typeof body.gas === 'number' ? body.gas : Number(body.gas) || 0;
|
|
119
|
+
this.dependsOn = body.dependsOn || null;
|
|
120
|
+
this.nonce = String(body.nonce);
|
|
121
|
+
// Set validator registration-specific properties
|
|
122
|
+
if (body.clauses.length > 0) {
|
|
123
|
+
// Get the addValidation clause
|
|
124
|
+
const addValidationClause = body.clauses[0];
|
|
125
|
+
if (addValidationClause.to) {
|
|
126
|
+
this.stakingContractAddress = addValidationClause.to;
|
|
127
|
+
}
|
|
128
|
+
// Extract validator and period from addValidation data
|
|
129
|
+
if (addValidationClause.data) {
|
|
130
|
+
this.transactionData = addValidationClause.data;
|
|
131
|
+
const decoded = utils_1.default.decodeAddValidationData(addValidationClause.data);
|
|
132
|
+
this.validator = decoded.validator;
|
|
133
|
+
this.stakingPeriod = decoded.period;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Set recipients from clauses
|
|
137
|
+
this.recipients = body.clauses.map((clause) => ({
|
|
138
|
+
address: (clause.to || '0x0').toString().toLowerCase(),
|
|
139
|
+
amount: new bignumber_js_1.default(clause.value || 0).toString(),
|
|
140
|
+
}));
|
|
141
|
+
this.loadInputsAndOutputs();
|
|
142
|
+
// Set sender address
|
|
143
|
+
if (signedTx.signature && signedTx.origin) {
|
|
144
|
+
this.sender = signedTx.origin.toString().toLowerCase();
|
|
145
|
+
}
|
|
146
|
+
// Set signatures if present
|
|
147
|
+
if (signedTx.signature) {
|
|
148
|
+
// First signature is sender's signature
|
|
149
|
+
this.senderSignature = Buffer.from(signedTx.signature.slice(0, sdk_core_2.Secp256k1.SIGNATURE_LENGTH));
|
|
150
|
+
// If there's additional signature data, it's the fee payer's signature
|
|
151
|
+
if (signedTx.signature.length > sdk_core_2.Secp256k1.SIGNATURE_LENGTH) {
|
|
152
|
+
this.feePayerSignature = Buffer.from(signedTx.signature.slice(sdk_core_2.Secp256k1.SIGNATURE_LENGTH));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch (e) {
|
|
157
|
+
throw new sdk_core_1.InvalidTransactionError(`Failed to deserialize transaction: ${e.message}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
exports.ValidatorRegistrationTransaction = ValidatorRegistrationTransaction;
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yUmVnaXN0cmF0aW9uVHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uL3ZhbGlkYXRvclJlZ2lzdHJhdGlvblRyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUFnRjtBQUVoRixnREFBNkU7QUFDN0UsK0NBQTRDO0FBRTVDLG9FQUF5QztBQUN6QyxxREFBNkI7QUFDN0IsZ0VBQXFDO0FBQ3JDLHFEQUFtRDtBQUNuRCw0Q0FBaUQ7QUFFakQsTUFBYSxnQ0FBaUMsU0FBUSx5QkFBVztJQUsvRCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsV0FBVyxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLE9BQWU7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsTUFBYztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksc0JBQXNCLENBQUMsT0FBZTtRQUN4QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsT0FBTyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFD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UUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6RCxDQUFDO1lBRUQsNEJBQTRCO1lBQzVCLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN2Qix3Q0FBd0M7Z0JBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsb0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBRTVGLHVFQUF1RTtnQkFDdkUsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxvQkFBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQzNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLG9CQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUM3RixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLGtDQUF1QixDQUFDLHNDQUFzQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBN0tELDRFQTZLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSwgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiBhcyBWZXRUcmFuc2FjdGlvbiwgU2VjcDI1NmsxIH0gZnJvbSAnQHZlY2hhaW4vc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFZldFRyYW5zYWN0aW9uRGF0YSB9IGZyb20gJy4uL2lmYWNlJztcbmltcG9ydCBFdGhlcmV1bUFiaSBmcm9tICdldGhlcmV1bWpzLWFiaSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgYWRkSGV4UHJlZml4LCBCTiB9IGZyb20gJ2V0aGVyZXVtanMtdXRpbCc7XG5pbXBvcnQgeyBaRVJPX1ZBTFVFX0FNT1VOVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JSZWdpc3RyYXRpb25UcmFuc2FjdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfc3Rha2luZ0NvbnRyYWN0QWRkcmVzczogc3RyaW5nO1xuICBwcml2YXRlIF92YWxpZGF0b3I6IHN0cmluZztcbiAgcHJpdmF0ZSBfc3Rha2luZ1BlcmlvZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrO1xuICB9XG5cbiAgZ2V0IHZhbGlkYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3I7XG4gIH1cblxuICBzZXQgdmFsaWRhdG9yKGFkZHJlc3M6IHN0cmluZykge1xuICAgIHRoaXMuX3ZhbGlkYXRvciA9IGFkZHJlc3M7XG4gIH1cblxuICBnZXQgc3Rha2luZ1BlcmlvZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9zdGFraW5nUGVyaW9kO1xuICB9XG5cbiAgc2V0IHN0YWtpbmdQZXJpb2QocGVyaW9kOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdGFraW5nUGVyaW9kID0gcGVyaW9kO1xuICB9XG5cbiAgZ2V0IHN0YWtpbmdDb250cmFjdEFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3Rha2luZ0NvbnRyYWN0QWRkcmVzcztcbiAgfVxuXG4gIHNldCBzdGFraW5nQ29udHJhY3RBZGRyZXNzKGFkZHJlc3M6IHN0cmluZykge1xuICAgIHRoaXMuX3N0YWtpbmdDb250cmFjdEFkZHJlc3MgPSBhZGRyZXNzO1xuICB9XG5cbiAgYnVpbGRDbGF1c2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdGFraW5nQ29udHJhY3RBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0YWtpbmcgY29udHJhY3QgYWRkcmVzcyBpcyBub3Qgc2V0Jyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWxpZGF0b3IgYWRkcmVzcyBpcyBub3Qgc2V0Jyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YWtpbmdQZXJpb2QpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3Rha2luZyBwZXJpb2QgaXMgbm90IHNldCcpO1xuICAgIH1cblxuICAgIHV0aWxzLnZhbGlkYXRlQ29udHJhY3RBZGRyZXNzRm9yVmFsaWRhdG9yUmVnaXN0cmF0aW9uKHRoaXMuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcywgdGhpcy5fY29pbkNvbmZpZyk7XG4gICAgY29uc3QgYWRkVmFsaWRhdGlvbkRhdGEgPSB0aGlzLmdldEFkZFZhbGlkYXRpb25DbGF1c2VEYXRhKHRoaXMudmFsaWRhdG9yLCB0aGlzLnN0YWtpbmdQZXJpb2QpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uRGF0YSA9IGFkZFZhbGlkYXRpb25EYXRhO1xuICAgIC8vIENyZWF0ZSB0aGUgY2xhdXNlIGZvciBkZWxlZ2F0aW9uXG4gICAgdGhpcy5fY2xhdXNlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgdG86IHRoaXMuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyxcbiAgICAgICAgdmFsdWU6IFpFUk9fVkFMVUVfQU1PVU5ULFxuICAgICAgICBkYXRhOiBhZGRWYWxpZGF0aW9uRGF0YSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIC8vIFNldCByZWNpcGllbnRzIGJhc2VkIG9uIHRoZSBjbGF1c2VzXG4gICAgdGhpcy5fcmVjaXBpZW50cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdGhpcy5zdGFraW5nQ29udHJhY3RBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IFpFUk9fVkFMVUVfQU1PVU5ULFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZXMgYWRkVmFsaWRhdGlvbiB0cmFuc2FjdGlvbiBkYXRhIHVzaW5nIGV0aGVyZXVtanMtYWJpIGZvciBhZGRWYWxpZGF0aW9uIG1ldGhvZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsaWRhdG9yIC0gYWRkcmVzcyBvZiB0aGUgdmFsaWRhdG9yXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwZXJpb2QgLSBzdGFraW5nIHBlcmlvZCwgZGVub3RlZCBpbiBibG9ja3MsIHRoYXQgdGhlIFZhbGlkYXRvciBjb21taXRzIHRvIGhhcmRcbmxvY2tpbmcgdGhlaXIgVkVUIGludG8gdGhlIGJ1aWx0LWluIHN0YWtlciBjb250cmFjdC4gQWxsb3dlZCB2YWx1ZXMgYXJlIDYwNDgwICg3IGRheXMpLFxuMTI5NjAwICgxNSBkYXlzKSBvciAyNTkyMDAgKDMwIGRheXMpXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGVuY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKi9cbiAgZ2V0QWRkVmFsaWRhdGlvbkNsYXVzZURhdGEodmFsaWRhdG9yOiBzdHJpbmcsIHBlcmlvZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gJ2FkZFZhbGlkYXRpb24nO1xuICAgIGNvbnN0IHR5cGVzID0gWydhZGRyZXNzJywgJ3VpbnQzMiddO1xuICAgIGNvbnN0IHBhcmFtcyA9IFt2YWxpZGF0b3IsIG5ldyBCTihwZXJpb2QpXTtcblxuICAgIGNvbnN0IG1ldGhvZCA9IEV0aGVyZXVtQWJpLm1ldGhvZElEKG1ldGhvZE5hbWUsIHR5cGVzKTtcbiAgICBjb25zdCBhcmdzID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKHR5cGVzLCBwYXJhbXMpO1xuXG4gICAgcmV0dXJuIGFkZEhleFByZWZpeChCdWZmZXIuY29uY2F0KFttZXRob2QsIGFyZ3NdKS50b1N0cmluZygnaGV4JykpO1xuICB9XG5cbiAgdG9Kc29uKCk6IFZldFRyYW5zYWN0aW9uRGF0YSB7XG4gICAgY29uc3QganNvbjogVmV0VHJhbnNhY3Rpb25EYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBjaGFpblRhZzogdGhpcy5jaGFpblRhZyxcbiAgICAgIGJsb2NrUmVmOiB0aGlzLmJsb2NrUmVmLFxuICAgICAgZXhwaXJhdGlvbjogdGhpcy5leHBpcmF0aW9uLFxuICAgICAgZ2FzUHJpY2VDb2VmOiB0aGlzLmdhc1ByaWNlQ29lZixcbiAgICAgIGdhczogdGhpcy5nYXMsXG4gICAgICBkZXBlbmRzT246IHRoaXMuZGVwZW5kc09uLFxuICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXG4gICAgICBkYXRhOiB0aGlzLnRyYW5zYWN0aW9uRGF0YSxcbiAgICAgIHZhbHVlOiBaRVJPX1ZBTFVFX0FNT1VOVCxcbiAgICAgIHNlbmRlcjogdGhpcy5zZW5kZXIsXG4gICAgICB0bzogdGhpcy5zdGFraW5nQ29udHJhY3RBZGRyZXNzLFxuICAgICAgc3Rha2luZ0NvbnRyYWN0QWRkcmVzczogdGhpcy5zdGFraW5nQ29udHJhY3RBZGRyZXNzLFxuICAgICAgYW1vdW50VG9TdGFrZTogWkVST19WQUxVRV9BTU9VTlQsXG4gICAgICB2YWxpZGF0b3JBZGRyZXNzOiB0aGlzLnZhbGlkYXRvcixcbiAgICAgIHN0YWtpbmdQZXJpb2Q6IHRoaXMuc3Rha2luZ1BlcmlvZCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBmcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHg6IFZldFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghc2lnbmVkVHggfHwgIXNpZ25lZFR4LmJvZHkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHRyYW5zYWN0aW9uIGJvZHknKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RvcmUgdGhlIHJhdyB0cmFuc2FjdGlvblxuICAgICAgdGhpcy5yYXdUcmFuc2FjdGlvbiA9IHNpZ25lZFR4O1xuXG4gICAgICAvLyBTZXQgdHJhbnNhY3Rpb24gYm9keSBwcm9wZXJ0aWVzXG4gICAgICBjb25zdCBib2R5ID0gc2lnbmVkVHguYm9keTtcbiAgICAgIHRoaXMuY2hhaW5UYWcgPSB0eXBlb2YgYm9keS5jaGFpblRhZyA9PT0gJ251bWJlcicgPyBib2R5LmNoYWluVGFnIDogMDtcbiAgICAgIHRoaXMuYmxvY2tSZWYgPSBib2R5LmJsb2NrUmVmIHx8ICcweDAnO1xuICAgICAgdGhpcy5leHBpcmF0aW9uID0gdHlwZW9mIGJvZHkuZXhwaXJhdGlvbiA9PT0gJ251bWJlcicgPyBib2R5LmV4cGlyYXRpb24gOiA2NDtcbiAgICAgIHRoaXMuY2xhdXNlcyA9IGJvZHkuY2xhdXNlcyB8fCBbXTtcbiAgICAgIHRoaXMuZ2FzUHJpY2VDb2VmID0gdHlwZW9mIGJvZHkuZ2FzUHJpY2VDb2VmID09PSAnbnVtYmVyJyA/IGJvZHkuZ2FzUHJpY2VDb2VmIDogMTI4O1xuICAgICAgdGhpcy5nYXMgPSB0eXBlb2YgYm9keS5nYXMgPT09ICdudW1iZXInID8gYm9keS5nYXMgOiBOdW1iZXIoYm9keS5nYXMpIHx8IDA7XG4gICAgICB0aGlzLmRlcGVuZHNPbiA9IGJvZHkuZGVwZW5kc09uIHx8IG51bGw7XG4gICAgICB0aGlzLm5vbmNlID0gU3RyaW5nKGJvZHkubm9uY2UpO1xuXG4gICAgICAvLyBTZXQgdmFsaWRhdG9yIHJlZ2lzdHJhdGlvbi1zcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgICBpZiAoYm9keS5jbGF1c2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gR2V0IHRoZSBhZGRWYWxpZGF0aW9uIGNsYXVzZVxuICAgICAgICBjb25zdCBhZGRWYWxpZGF0aW9uQ2xhdXNlID0gYm9keS5jbGF1c2VzWzBdO1xuICAgICAgICBpZiAoYWRkVmFsaWRhdGlvbkNsYXVzZS50bykge1xuICAgICAgICAgIHRoaXMuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyA9IGFkZFZhbGlkYXRpb25DbGF1c2UudG87XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeHRyYWN0IHZhbGlkYXRvciBhbmQgcGVyaW9kIGZyb20gYWRkVmFsaWRhdGlvbiBkYXRhXG4gICAgICAgIGlmIChhZGRWYWxpZGF0aW9uQ2xhdXNlLmRhdGEpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGF0YSA9IGFkZFZhbGlkYXRpb25DbGF1c2UuZGF0YTtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkID0gdXRpbHMuZGVjb2RlQWRkVmFsaWRhdGlvbkRhdGEoYWRkVmFsaWRhdGlvbkNsYXVzZS5kYXRhKTtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRvciA9IGRlY29kZWQudmFsaWRhdG9yO1xuICAgICAgICAgIHRoaXMuc3Rha2luZ1BlcmlvZCA9IGRlY29kZWQucGVyaW9kO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCByZWNpcGllbnRzIGZyb20gY2xhdXNlc1xuICAgICAgdGhpcy5yZWNpcGllbnRzID0gYm9keS5jbGF1c2VzLm1hcCgoY2xhdXNlKSA9PiAoe1xuICAgICAgICBhZGRyZXNzOiAoY2xhdXNlLnRvIHx8ICcweDAnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGFtb3VudDogbmV3IEJpZ051bWJlcihjbGF1c2UudmFsdWUgfHwgMCkudG9TdHJpbmcoKSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcblxuICAgICAgLy8gU2V0IHNlbmRlciBhZGRyZXNzXG4gICAgICBpZiAoc2lnbmVkVHguc2lnbmF0dXJlICYmIHNpZ25lZFR4Lm9yaWdpbikge1xuICAgICAgICB0aGlzLnNlbmRlciA9IHNpZ25lZFR4Lm9yaWdpbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBzaWduYXR1cmVzIGlmIHByZXNlbnRcbiAgICAgIGlmIChzaWduZWRUeC5zaWduYXR1cmUpIHtcbiAgICAgICAgLy8gRmlyc3Qgc2lnbmF0dXJlIGlzIHNlbmRlcidzIHNpZ25hdHVyZVxuICAgICAgICB0aGlzLnNlbmRlclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHNpZ25lZFR4LnNpZ25hdHVyZS5zbGljZSgwLCBTZWNwMjU2azEuU0lHTkFUVVJFX0xFTkdUSCkpO1xuXG4gICAgICAgIC8vIElmIHRoZXJlJ3MgYWRkaXRpb25hbCBzaWduYXR1cmUgZGF0YSwgaXQncyB0aGUgZmVlIHBheWVyJ3Mgc2lnbmF0dXJlXG4gICAgICAgIGlmIChzaWduZWRUeC5zaWduYXR1cmUubGVuZ3RoID4gU2VjcDI1NmsxLlNJR05BVFVSRV9MRU5HVEgpIHtcbiAgICAgICAgICB0aGlzLmZlZVBheWVyU2lnbmF0dXJlID0gQnVmZmVyLmZyb20oc2lnbmVkVHguc2lnbmF0dXJlLnNsaWNlKFNlY3AyNTZrMS5TSUdOQVRVUkVfTEVOR1RIKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEZhaWxlZCB0byBkZXNlcmlhbGl6ZSB0cmFuc2FjdGlvbjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,78 @@
|
|
|
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 { AddressInitializationTransaction } from '../transaction/addressInitializationTransaction';
|
|
6
|
+
import { Transaction } from '../transaction/transaction';
|
|
7
|
+
export declare class AddressInitializationBuilder extends TransactionBuilder {
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new AddressInitializationBuilder 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 AddressInitializationTransaction.
|
|
16
|
+
*
|
|
17
|
+
* @param {AddressInitializationTransaction} tx - The transaction to initialize the builder with
|
|
18
|
+
*/
|
|
19
|
+
initBuilder(tx: AddressInitializationTransaction): void;
|
|
20
|
+
/**
|
|
21
|
+
* Gets the address initialization transaction instance.
|
|
22
|
+
*
|
|
23
|
+
* @returns {AddressInitializationTransaction} The address initialization transaction
|
|
24
|
+
*/
|
|
25
|
+
get addressInitializationTransaction(): AddressInitializationTransaction;
|
|
26
|
+
/**
|
|
27
|
+
* Gets the transaction type for address initialization.
|
|
28
|
+
*
|
|
29
|
+
* @returns {TransactionType} The transaction type
|
|
30
|
+
*/
|
|
31
|
+
protected get transactionType(): TransactionType;
|
|
32
|
+
/**
|
|
33
|
+
* Validates the transaction clauses for address initialization.
|
|
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 base address for this forwarder init tx.
|
|
40
|
+
*
|
|
41
|
+
* @param {string} address - The base address to be set for the forwarder address
|
|
42
|
+
* @returns {AddressInitializationBuilder} This transaction builder
|
|
43
|
+
*/
|
|
44
|
+
baseAddress(address: string): this;
|
|
45
|
+
/**
|
|
46
|
+
* Sets the fee address for this forwarder init tx.
|
|
47
|
+
*
|
|
48
|
+
* @param {string} address - The fee address to be set for the forwarder address
|
|
49
|
+
* @returns {AddressInitializationBuilder} This transaction builder
|
|
50
|
+
*/
|
|
51
|
+
feeAddress(address: string): this;
|
|
52
|
+
/**
|
|
53
|
+
* Sets the salt value for the forwarder address creation.
|
|
54
|
+
*
|
|
55
|
+
* @param {string} salt - The salt value to use for address creation
|
|
56
|
+
* @returns {AddressInitializationBuilder} This transaction builder
|
|
57
|
+
*/
|
|
58
|
+
salt(salt: string): this;
|
|
59
|
+
/**
|
|
60
|
+
* Sets the initialization code for the forwarder contract.
|
|
61
|
+
*
|
|
62
|
+
* @param {string} address - The address to generate proxy init code for
|
|
63
|
+
* @returns {AddressInitializationBuilder} This transaction builder
|
|
64
|
+
*/
|
|
65
|
+
initCode(address: string): this;
|
|
66
|
+
/** @inheritdoc */
|
|
67
|
+
validateTransaction(transaction?: AddressInitializationTransaction): void;
|
|
68
|
+
/** @inheritdoc */
|
|
69
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
70
|
+
/**
|
|
71
|
+
* Generates the transaction data for address initialization by encoding the createForwarder method call.
|
|
72
|
+
*
|
|
73
|
+
* @private
|
|
74
|
+
* @returns {string} The encoded transaction data as a hex string
|
|
75
|
+
*/
|
|
76
|
+
private getAddressInitializationData;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=addressInitializationBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addressInitializationBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/transactionBuilder/addressInitializationBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,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,gCAAgC,EAAE,MAAM,iDAAiD,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGzD,qBAAa,4BAA6B,SAAQ,kBAAkB;IAClE;;;;OAIG;gBACS,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,gCAAgC,GAAG,IAAI;IAIvD;;;;OAIG;IACH,IAAI,gCAAgC,IAAI,gCAAgC,CAEvE;IAED;;;;OAIG;IACH,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;OAIG;IACH,SAAS,CAAC,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO;IAiC1E;;;;;OAKG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMlC;;;;;OAKG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjC;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM/B,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,gCAAgC,GAAG,IAAI;IAezE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;CAWrC"}
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyL2FkZHJlc3NJbml0aWFsaXphdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLDJEQUEySDtBQUMzSCxtREFBdUQ7QUFFdkQscURBQXdFO0FBQ3hFLG9FQUF5QztBQUV6Qyw2REFBMEQ7QUFHMUQscURBQTZCO0FBRTdCLE1BQWEsNEJBQTZCLFNBQVEsdUNBQWtCO0lBQ2xFOzs7O09BSUc7SUFDSCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxFQUFvQztRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksZ0NBQWdDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFlBQWdELENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLHFCQUFxQixDQUFDO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ08seUJBQXlCLENBQUMsT0FBNEI7UUFDOUQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDaEUsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTFCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENB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QUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN4RSxNQUFNLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssNEJBQTRCO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUEsK0JBQWEsRUFBQyxJQUFBLDBCQUFRLEVBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLElBQUEsK0NBQWdDLEVBQ3RGLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxXQUFXLEVBQ2pELFVBQVUsRUFDVixJQUFJLENBQUMsZ0NBQWdDLENBQUMsVUFBVSxDQUNqRCxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsd0JBQVcsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUM3RSxNQUFNLElBQUksR0FBRyx3QkFBVyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sSUFBQSw4QkFBWSxFQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0Y7QUFwS0Qsb0VBb0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25DbGF1c2UgfSBmcm9tICdAdmVjaGFpbi9zZGstY29yZSc7XG5pbXBvcnQgeyBnZXRQcm94eUluaXRjb2RlLCBnZXRDcmVhdGVGb3J3YXJkZXJQYXJhbXNBbmRUeXBlcywgZGVjb2RlRm9yd2FyZGVyQ3JlYXRpb25EYXRhIH0gZnJvbSAnQGJpdGdvLWJldGEvYWJzdHJhY3QtZXRoJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IHNldExlbmd0aExlZnQsIHRvQnVmZmVyLCBhZGRIZXhQcmVmaXggfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuaW1wb3J0IEV0aGVyZXVtQWJpIGZyb20gJ2V0aGVyZXVtanMtYWJpJztcblxuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgQWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbi9hZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlciBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFkb25seTxDb2luQ29uZmlnPn0gX2NvaW5Db25maWcgLSBUaGUgY29pbiBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgKi9cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBidWlsZGVyIHdpdGggYW4gZXhpc3RpbmcgQWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb259IHR4IC0gVGhlIHRyYW5zYWN0aW9uIHRvIGluaXRpYWxpemUgdGhlIGJ1aWxkZXIgd2l0aFxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IEFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBhZGRyZXNzIGluaXRpYWxpemF0aW9uIHRyYW5zYWN0aW9uIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb259IFRoZSBhZGRyZXNzIGluaXRpYWxpemF0aW9uIHRyYW5zYWN0aW9uXG4gICAqL1xuICBnZXQgYWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24oKTogQWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbiBhcyBBZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0cmFuc2FjdGlvbiB0eXBlIGZvciBhZGRyZXNzIGluaXRpYWxpemF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25UeXBlfSBUaGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHRyYW5zYWN0aW9uIGNsYXVzZXMgZm9yIGFkZHJlc3MgaW5pdGlhbGl6YXRpb24uXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25DbGF1c2VbXX0gY2xhdXNlcyAtIFRoZSB0cmFuc2FjdGlvbiBjbGF1c2VzIHRvIHZhbGlkYXRlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGNsYXVzZXMgYXJlIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNWYWxpZFRyYW5zYWN0aW9uQ2xhdXNlcyhjbGF1c2VzOiBUcmFuc2FjdGlvbkNsYXVzZVtdKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghY2xhdXNlcyB8fCAhQXJyYXkuaXNBcnJheShjbGF1c2VzKSB8fCBjbGF1c2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNsYXVzZSA9IGNsYXVzZXNbMF07XG5cbiAgICAgIGlmICghY2xhdXNlLnRvIHx8ICF1dGlscy5pc1ZhbGlkQWRkcmVzcyhjbGF1c2UudG8pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gRm9yIGFkZHJlc3MgaW5pdCB0cmFuc2FjdGlvbnMsIHZhbHVlIG11c3QgYmUgZXhhY3RseSAnMHgwJ1xuICAgICAgaWYgKGNsYXVzZS52YWx1ZSAhPT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYmFzZUFkZHJlc3MsIGFkZHJlc3NDcmVhdGlvblNhbHQsIGZlZUFkZHJlc3MgfSA9IGRlY29kZUZvcndhcmRlckNyZWF0aW9uRGF0YShjbGF1c2UuZGF0YSk7XG5cbiAgICAgIGlmICghdXRpbHMuaXNWYWxpZEFkZHJlc3MoYmFzZUFkZHJlc3MgYXMgc3RyaW5nKSB8fCAhdXRpbHMuaXNWYWxpZEFkZHJlc3MoZmVlQWRkcmVzcyBhcyBzdHJpbmcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhZGRyZXNzQ3JlYXRpb25TYWx0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBiYXNlIGFkZHJlc3MgZm9yIHRoaXMgZm9yd2FyZGVyIGluaXQgdHguXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gVGhlIGJhc2UgYWRkcmVzcyB0byBiZSBzZXQgZm9yIHRoZSBmb3J3YXJkZXIgYWRkcmVzc1xuICAgKiBAcmV0dXJucyB7QWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBiYXNlQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3MgfSk7XG4gICAgdGhpcy5hZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbi5iYXNlQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZmVlIGFkZHJlc3MgZm9yIHRoaXMgZm9yd2FyZGVyIGluaXQgdHguXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gVGhlIGZlZSBhZGRyZXNzIHRvIGJlIHNldCBmb3IgdGhlIGZvcndhcmRlciBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGZlZUFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIHRoaXMuYWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24uZmVlQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2FsdCB2YWx1ZSBmb3IgdGhlIGZvcndhcmRlciBhZGRyZXNzIGNyZWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2FsdCAtIFRoZSBzYWx0IHZhbHVlIHRvIHVzZSBmb3IgYWRkcmVzcyBjcmVhdGlvblxuICAgKiBAcmV0dXJucyB7QWRkcmVzc0luaXRpYWxpemF0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBzYWx0KHNhbHQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuYWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24uc2FsdCA9IHNhbHQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgdGhlIGZvcndhcmRlciBjb250cmFjdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBUaGUgYWRkcmVzcyB0byBnZW5lcmF0ZSBwcm94eSBpbml0IGNvZGUgZm9yXG4gICAqIEByZXR1cm5zIHtBZGRyZXNzSW5pdGlhbGl6YXRpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIGluaXRDb2RlKGFkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzcyB9KTtcbiAgICB0aGlzLmFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uLmluaXRDb2RlID0gZ2V0UHJveHlJbml0Y29kZShhZGRyZXNzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uPzogQWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIG5vdCBkZWZpbmVkJyk7XG4gICAgfVxuICAgIGFzc2VydCh0cmFuc2FjdGlvbi5jb250cmFjdCwgJ0NvbnRyYWN0IGFkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICBhc3NlcnQodHJhbnNhY3Rpb24uYmFzZUFkZHJlc3MsICdCYXNlIGFkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICBhc3NlcnQodHJhbnNhY3Rpb24uZmVlQWRkcmVzcywgJ0ZlZSBhZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgYXNzZXJ0KHRyYW5zYWN0aW9uLnNhbHQsICdTYWx0IGlzIHJlcXVpcmVkJyk7XG4gICAgYXNzZXJ0KHRyYW5zYWN0aW9uLmluaXRDb2RlLCAnSW5pdCBjb2RlIGlzIHJlcXVpcmVkJyk7XG5cbiAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6IHRyYW5zYWN0aW9uLmNvbnRyYWN0IH0pO1xuICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogdHJhbnNhY3Rpb24uYmFzZUFkZHJlc3MgfSk7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiB0cmFuc2FjdGlvbi5mZWVBZGRyZXNzIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkRhdGEgPSB0aGlzLmdldEFkZHJlc3NJbml0aWFsaXphdGlvbkRhdGEoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnR5cGUgPSB0aGlzLnRyYW5zYWN0aW9uVHlwZTtcbiAgICB0aGlzLmFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uRGF0YSA9IHRyYW5zYWN0aW9uRGF0YTtcbiAgICBhd2FpdCB0aGlzLmFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uLmJ1aWxkKCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSB0cmFuc2FjdGlvbiBkYXRhIGZvciBhZGRyZXNzIGluaXRpYWxpemF0aW9uIGJ5IGVuY29kaW5nIHRoZSBjcmVhdGVGb3J3YXJkZXIgbWV0aG9kIGNhbGwuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGEgYXMgYSBoZXggc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIGdldEFkZHJlc3NJbml0aWFsaXphdGlvbkRhdGEoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzYWx0QnVmZmVyID0gc2V0TGVuZ3RoTGVmdCh0b0J1ZmZlcih0aGlzLmFkZHJlc3NJbml0aWFsaXphdGlvblRyYW5zYWN0aW9uLnNhbHQpLCAzMik7XG4gICAgY29uc3QgeyBjcmVhdGVGb3J3YXJkZXJQYXJhbXMsIGNyZWF0ZUZvcndhcmRlclR5cGVzIH0gPSBnZXRDcmVhdGVGb3J3YXJkZXJQYXJhbXNBbmRUeXBlcyhcbiAgICAgIHRoaXMuYWRkcmVzc0luaXRpYWxpemF0aW9uVHJhbnNhY3Rpb24uYmFzZUFkZHJlc3MsXG4gICAgICBzYWx0QnVmZmVyLFxuICAgICAgdGhpcy5hZGRyZXNzSW5pdGlhbGl6YXRpb25UcmFuc2FjdGlvbi5mZWVBZGRyZXNzXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRCgnY3JlYXRlRm9yd2FyZGVyJywgY3JlYXRlRm9yd2FyZGVyVHlwZXMpO1xuICAgIGNvbnN0IGFyZ3MgPSBFdGhlcmV1bUFiaS5yYXdFbmNvZGUoY3JlYXRlRm9yd2FyZGVyVHlwZXMsIGNyZWF0ZUZvcndhcmRlclBhcmFtcyk7XG4gICAgcmV0dXJuIGFkZEhleFByZWZpeChCdWZmZXIuY29uY2F0KFttZXRob2QsIGFyZ3NdKS50b1N0cmluZygnaGV4JykpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,59 @@
|
|
|
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 staking contract address for this staking tx.
|
|
47
|
+
* The address must be explicitly provided to ensure the correct contract is used.
|
|
48
|
+
*
|
|
49
|
+
* @param {string} address - The staking contract address (required)
|
|
50
|
+
* @returns {StakingBuilder} This transaction builder
|
|
51
|
+
* @throws {Error} If no address is provided
|
|
52
|
+
*/
|
|
53
|
+
stakingContractAddress(address: string): this;
|
|
54
|
+
/** @inheritdoc */
|
|
55
|
+
validateTransaction(transaction?: BurnNftTransaction): void;
|
|
56
|
+
/** @inheritdoc */
|
|
57
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
58
|
+
}
|
|
59
|
+
//# 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;AAE7D,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;;;;;;;OAOG;IACH,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAS7C,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAU3D,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;CAK5D"}
|
|
@@ -0,0 +1,118 @@
|
|
|
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 transactionBuilder_1 = require("./transactionBuilder");
|
|
10
|
+
const burnNftTransaction_1 = require("../transaction/burnNftTransaction");
|
|
11
|
+
const utils_1 = __importDefault(require("../utils"));
|
|
12
|
+
const constants_1 = require("../constants");
|
|
13
|
+
class BurnNftBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
14
|
+
/**
|
|
15
|
+
* Creates a new BurnNftBuilder instance.
|
|
16
|
+
*
|
|
17
|
+
* @param {Readonly<CoinConfig>} _coinConfig - The coin configuration object
|
|
18
|
+
*/
|
|
19
|
+
constructor(_coinConfig) {
|
|
20
|
+
super(_coinConfig);
|
|
21
|
+
this._transaction = new burnNftTransaction_1.BurnNftTransaction(_coinConfig);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Initializes the builder with an existing BurnNftTransaction.
|
|
25
|
+
*
|
|
26
|
+
* @param {BurnNftTransaction} tx - The transaction to initialize the builder with
|
|
27
|
+
*/
|
|
28
|
+
initBuilder(tx) {
|
|
29
|
+
this._transaction = tx;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Gets the burn NFT transaction instance.
|
|
33
|
+
*
|
|
34
|
+
* @returns {BurnNftTransaction} The burn NFT transaction
|
|
35
|
+
*/
|
|
36
|
+
get burnNftTransaction() {
|
|
37
|
+
return this._transaction;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Gets the transaction type for burning NFT.
|
|
41
|
+
*
|
|
42
|
+
* @returns {TransactionType} The transaction type
|
|
43
|
+
*/
|
|
44
|
+
get transactionType() {
|
|
45
|
+
return sdk_core_1.TransactionType.StakingWithdraw;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Validates the transaction clauses for burning NFT.
|
|
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 burn NFT transactions, value must be exactly '0x0'
|
|
62
|
+
if (clause.value !== 0) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
// Check if the data starts with the burn method ID
|
|
66
|
+
if (!clause.data.startsWith(constants_1.BURN_NFT_METHOD_ID)) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Sets the token ID for this burn NFT transaction.
|
|
77
|
+
*
|
|
78
|
+
* @param {string} tokenId - The ID of the NFT token to burn
|
|
79
|
+
* @returns {BurnNftBuilder} This transaction builder
|
|
80
|
+
*/
|
|
81
|
+
tokenId(tokenId) {
|
|
82
|
+
this.burnNftTransaction.tokenId = tokenId;
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Sets the staking contract address for this staking tx.
|
|
87
|
+
* The address must be explicitly provided to ensure the correct contract is used.
|
|
88
|
+
*
|
|
89
|
+
* @param {string} address - The staking contract address (required)
|
|
90
|
+
* @returns {StakingBuilder} This transaction builder
|
|
91
|
+
* @throws {Error} If no address is provided
|
|
92
|
+
*/
|
|
93
|
+
stakingContractAddress(address) {
|
|
94
|
+
if (!address) {
|
|
95
|
+
throw new Error('Staking contract address is required');
|
|
96
|
+
}
|
|
97
|
+
this.validateAddress({ address });
|
|
98
|
+
this.burnNftTransaction.stakingContractAddress = address;
|
|
99
|
+
return this;
|
|
100
|
+
}
|
|
101
|
+
/** @inheritdoc */
|
|
102
|
+
validateTransaction(transaction) {
|
|
103
|
+
if (!transaction) {
|
|
104
|
+
throw new Error('transaction not defined');
|
|
105
|
+
}
|
|
106
|
+
(0, assert_1.default)(transaction.stakingContractAddress, 'Staking contract address is required');
|
|
107
|
+
(0, assert_1.default)(transaction.tokenId, 'Token ID is required');
|
|
108
|
+
this.validateAddress({ address: transaction.stakingContractAddress });
|
|
109
|
+
}
|
|
110
|
+
/** @inheritdoc */
|
|
111
|
+
async buildImplementation() {
|
|
112
|
+
this.transaction.type = this.transactionType;
|
|
113
|
+
await this.burnNftTransaction.build();
|
|
114
|
+
return this.transaction;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.BurnNftBuilder = BurnNftBuilder;
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVybk5mdEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlci9idXJuTmZ0QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsbURBQXVEO0FBR3ZELDZEQUEwRDtBQUMxRCwwRUFBdUU7QUFFdkUscURBQTZCO0FBQzdCLDRDQUFrRDtBQUVsRCxNQUFhLGNBQWUsU0FBUSx1Q0FBa0I7SUFDcEQ7Ozs7T0FJRztJQUNILFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx1Q0FBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxFQUFzQjtRQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQWtDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLHlCQUF5QixDQUFDLE9BQTRCO1FBQzlELElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hFLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUxQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELHlEQUF5RDtZQUN6RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELG1EQUFtRDtZQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsOEJBQWtCLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLE9BQWU7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILHNCQUFzQixDQUFDLE9BQWU7UUFDcEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixtQkFBbUIsQ0FBQyxXQUFnQztRQUNsRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFBLGdCQUFNLEVBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLHNDQUFzQyxDQUFDLENBQUM7UUFDbkYsSUFBQSxnQkFBTSxFQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUM3QyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBcEhELHdDQW9IQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQ2xhdXNlIH0gZnJvbSAnQHZlY2hhaW4vc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBCdXJuTmZ0VHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbi9idXJuTmZ0VHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi90cmFuc2FjdGlvbi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQlVSTl9ORlRfTUVUSE9EX0lEIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNsYXNzIEJ1cm5OZnRCdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQnVybk5mdEJ1aWxkZXIgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhZG9ubHk8Q29pbkNvbmZpZz59IF9jb2luQ29uZmlnIC0gVGhlIGNvaW4gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBCdXJuTmZ0VHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBidWlsZGVyIHdpdGggYW4gZXhpc3RpbmcgQnVybk5mdFRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0J1cm5OZnRUcmFuc2FjdGlvbn0gdHggLSBUaGUgdHJhbnNhY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgYnVpbGRlciB3aXRoXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogQnVybk5mdFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0eDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBidXJuIE5GVCB0cmFuc2FjdGlvbiBpbnN0YW5jZS5cbiAgICpcbiAgICogQHJldHVybnMge0J1cm5OZnRUcmFuc2FjdGlvbn0gVGhlIGJ1cm4gTkZUIHRyYW5zYWN0aW9uXG4gICAqL1xuICBnZXQgYnVybk5mdFRyYW5zYWN0aW9uKCk6IEJ1cm5OZnRUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uIGFzIEJ1cm5OZnRUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0cmFuc2FjdGlvbiB0eXBlIGZvciBidXJuaW5nIE5GVC5cbiAgICpcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uVHlwZX0gVGhlIHRyYW5zYWN0aW9uIHR5cGVcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXc7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSB0cmFuc2FjdGlvbiBjbGF1c2VzIGZvciBidXJuaW5nIE5GVC5cbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbkNsYXVzZVtdfSBjbGF1c2VzIC0gVGhlIHRyYW5zYWN0aW9uIGNsYXVzZXMgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2xhdXNlcyBhcmUgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHByb3RlY3RlZCBpc1ZhbGlkVHJhbnNhY3Rpb25DbGF1c2VzKGNsYXVzZXM6IFRyYW5zYWN0aW9uQ2xhdXNlW10pOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFjbGF1c2VzIHx8ICFBcnJheS5pc0FycmF5KGNsYXVzZXMpIHx8IGNsYXVzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xhdXNlID0gY2xhdXNlc1swXTtcblxuICAgICAgaWYgKCFjbGF1c2UudG8gfHwgIXV0aWxzLmlzVmFsaWRBZGRyZXNzKGNsYXVzZS50bykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgYnVybiBORlQgdHJhbnNhY3Rpb25zLCB2YWx1ZSBtdXN0IGJlIGV4YWN0bHkgJzB4MCdcbiAgICAgIGlmIChjbGF1c2UudmFsdWUgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgZGF0YSBzdGFydHMgd2l0aCB0aGUgYnVybiBtZXRob2QgSURcbiAgICAgIGlmICghY2xhdXNlLmRhdGEuc3RhcnRzV2l0aChCVVJOX05GVF9NRVRIT0RfSUQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0b2tlbiBJRCBmb3IgdGhpcyBidXJuIE5GVCB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuSWQgLSBUaGUgSUQgb2YgdGhlIE5GVCB0b2tlbiB0byBidXJuXG4gICAqIEByZXR1cm5zIHtCdXJuTmZ0QnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICB0b2tlbklkKHRva2VuSWQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuYnVybk5mdFRyYW5zYWN0aW9uLnRva2VuSWQgPSB0b2tlbklkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0YWtpbmcgY29udHJhY3QgYWRkcmVzcyBmb3IgdGhpcyBzdGFraW5nIHR4LlxuICAgKiBUaGUgYWRkcmVzcyBtdXN0IGJlIGV4cGxpY2l0bHkgcHJvdmlkZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGNvbnRyYWN0IGlzIHVzZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gVGhlIHN0YWtpbmcgY29udHJhY3QgYWRkcmVzcyAocmVxdWlyZWQpXG4gICAqIEByZXR1cm5zIHtTdGFraW5nQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBubyBhZGRyZXNzIGlzIHByb3ZpZGVkXG4gICAqL1xuICBzdGFraW5nQ29udHJhY3RBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghYWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGFraW5nIGNvbnRyYWN0IGFkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzIH0pO1xuICAgIHRoaXMuYnVybk5mdFRyYW5zYWN0aW9uLnN0YWtpbmdDb250cmFjdEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBCdXJuTmZ0VHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIG5vdCBkZWZpbmVkJyk7XG4gICAgfVxuICAgIGFzc2VydCh0cmFuc2FjdGlvbi5zdGFraW5nQ29udHJhY3RBZGRyZXNzLCAnU3Rha2luZyBjb250cmFjdCBhZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgYXNzZXJ0KHRyYW5zYWN0aW9uLnRva2VuSWQsICdUb2tlbiBJRCBpcyByZXF1aXJlZCcpO1xuXG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoeyBhZGRyZXNzOiB0cmFuc2FjdGlvbi5zdGFraW5nQ29udHJhY3RBZGRyZXNzIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLnR5cGUgPSB0aGlzLnRyYW5zYWN0aW9uVHlwZTtcbiAgICBhd2FpdCB0aGlzLmJ1cm5OZnRUcmFuc2FjdGlvbi5idWlsZCgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG59XG4iXX0=
|