@bitgo-beta/sdk-coin-iota 1.0.1-beta.44 → 1.0.1-beta.441
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/README.md +1 -1
- package/dist/src/iota.d.ts +134 -23
- package/dist/src/iota.d.ts.map +1 -1
- package/dist/src/iota.js +286 -46
- package/dist/src/lib/constants.d.ts +59 -6
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +76 -8
- package/dist/src/lib/iface.d.ts +174 -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 +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +4 -2
- package/dist/src/lib/keyPair.d.ts +100 -6
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +103 -10
- package/dist/src/lib/transaction.d.ts +175 -5
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +390 -6
- package/dist/src/lib/transactionBuilder.d.ts +109 -9
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +200 -14
- package/dist/src/lib/transactionBuilderFactory.d.ts +98 -2
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +132 -5
- package/dist/src/lib/transferBuilder.d.ts +52 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +86 -3
- package/dist/src/lib/transferTransaction.d.ts +124 -0
- package/dist/src/lib/transferTransaction.d.ts.map +1 -0
- package/dist/src/lib/transferTransaction.js +341 -0
- package/dist/src/lib/utils.d.ts +108 -7
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +146 -11
- package/dist/test/resources/iota.d.ts +35 -0
- package/dist/test/resources/iota.d.ts.map +1 -0
- package/dist/test/resources/iota.js +93 -0
- package/dist/test/unit/helpers/testHelpers.d.ts +57 -0
- package/dist/test/unit/helpers/testHelpers.d.ts.map +1 -0
- package/dist/test/unit/helpers/testHelpers.js +176 -0
- package/dist/test/unit/index.d.ts +2 -0
- package/dist/test/unit/index.d.ts.map +1 -0
- package/dist/test/unit/index.js +16 -0
- package/dist/test/unit/iota.d.ts +2 -0
- package/dist/test/unit/iota.d.ts.map +1 -0
- package/dist/test/unit/iota.js +501 -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 +108 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +188 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +178 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +438 -0
- package/dist/test/unit/transferTransaction.d.ts +2 -0
- package/dist/test/unit/transferTransaction.d.ts.map +1 -0
- package/dist/test/unit/transferTransaction.js +218 -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 +252 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +17 -11
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -28
|
@@ -0,0 +1,341 @@
|
|
|
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.TransferTransaction = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const transaction_1 = require("./transaction");
|
|
9
|
+
const transactions_1 = require("@iota/iota-sdk/transactions");
|
|
10
|
+
const utils_1 = require("@iota/iota-sdk/utils");
|
|
11
|
+
const cryptography_1 = require("@iota/iota-sdk/cryptography");
|
|
12
|
+
const bcs_1 = require("@iota/bcs");
|
|
13
|
+
const constants_1 = require("./constants");
|
|
14
|
+
const utils_2 = __importDefault(require("./utils"));
|
|
15
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
16
|
+
class TransferTransaction extends transaction_1.Transaction {
|
|
17
|
+
constructor(coinConfig) {
|
|
18
|
+
super(coinConfig);
|
|
19
|
+
this._type = sdk_core_1.TransactionType.Send;
|
|
20
|
+
this._inputs = [];
|
|
21
|
+
this._outputs = [];
|
|
22
|
+
}
|
|
23
|
+
get recipients() {
|
|
24
|
+
return this._recipients;
|
|
25
|
+
}
|
|
26
|
+
set recipients(value) {
|
|
27
|
+
this._recipients = value;
|
|
28
|
+
this._rebuildRequired = true;
|
|
29
|
+
}
|
|
30
|
+
get paymentObjects() {
|
|
31
|
+
return this._paymentObjects;
|
|
32
|
+
}
|
|
33
|
+
set paymentObjects(value) {
|
|
34
|
+
this._paymentObjects = value;
|
|
35
|
+
this._rebuildRequired = true;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @inheritDoc
|
|
39
|
+
*/
|
|
40
|
+
addInputsAndOutputs() {
|
|
41
|
+
if (!this._iotaTransaction) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const totalAmount = this.recipients.reduce((accumulator, current) => accumulator + Number(current.amount), 0);
|
|
45
|
+
this._outputs = this.recipients.map((recipient, index) => ({
|
|
46
|
+
address: recipient.address,
|
|
47
|
+
value: recipient.amount.toString(),
|
|
48
|
+
coin: this._coinConfig.name,
|
|
49
|
+
}));
|
|
50
|
+
this._inputs = [
|
|
51
|
+
{
|
|
52
|
+
address: this.sender,
|
|
53
|
+
value: totalAmount.toString(),
|
|
54
|
+
coin: this._coinConfig.name,
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
toJson() {
|
|
59
|
+
return {
|
|
60
|
+
...super.toJson(),
|
|
61
|
+
recipients: this.recipients,
|
|
62
|
+
paymentObjects: this.paymentObjects,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
parseFromJSON(txData) {
|
|
66
|
+
super.parseFromJSON(txData);
|
|
67
|
+
this.recipients = txData.recipients;
|
|
68
|
+
this.paymentObjects = txData.paymentObjects;
|
|
69
|
+
this.updateIsSimulateTx();
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Parses a transfer transaction from its broadcast format (base64 or raw bytes).
|
|
73
|
+
* Extracts recipients, amounts, and payment objects from the transaction data.
|
|
74
|
+
*/
|
|
75
|
+
parseFromBroadcastTx(tx) {
|
|
76
|
+
const txData = transactions_1.Transaction.from(tx).getData();
|
|
77
|
+
this.validateTransferCommands(txData);
|
|
78
|
+
super.parseFromBroadcastTx(tx);
|
|
79
|
+
const { inputObjects, amounts, receivers } = this.parseTransactionInputs(txData);
|
|
80
|
+
this.validateAmountsMatchReceivers(amounts, receivers);
|
|
81
|
+
this.assignParsedObjects(inputObjects);
|
|
82
|
+
this.assignRecipients(receivers, amounts);
|
|
83
|
+
this.updateIsSimulateTx();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Validates that the transaction only contains supported transfer commands.
|
|
87
|
+
*/
|
|
88
|
+
validateTransferCommands(txData) {
|
|
89
|
+
const hasUnsupportedCommands = txData.commands.some((command) => !constants_1.TRANSFER_TRANSACTION_COMMANDS.includes(command.$kind));
|
|
90
|
+
if (hasUnsupportedCommands) {
|
|
91
|
+
throw new sdk_core_1.InvalidTransactionError('Unsupported commands in the transaction');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Parses transaction inputs to extract objects, amounts, and receiver addresses.
|
|
96
|
+
*/
|
|
97
|
+
parseTransactionInputs(txData) {
|
|
98
|
+
const inputObjects = [];
|
|
99
|
+
const amounts = [];
|
|
100
|
+
const receivers = [];
|
|
101
|
+
txData.inputs.forEach((input) => {
|
|
102
|
+
if (input.$kind === 'Object' && 'ImmOrOwnedObject' in input.Object) {
|
|
103
|
+
inputObjects.push(input.Object.ImmOrOwnedObject);
|
|
104
|
+
}
|
|
105
|
+
if (input.$kind === 'Pure' && 'bytes' in input.Pure) {
|
|
106
|
+
const value = (0, utils_1.fromBase64)(input.Pure.bytes);
|
|
107
|
+
const hexValue = '0x' + (0, sdk_core_1.toHex)(value);
|
|
108
|
+
if (utils_2.default.isValidAddress(hexValue)) {
|
|
109
|
+
receivers.push(hexValue);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
amounts.push(new bcs_1.BcsReader(value).read64().toString());
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
return { inputObjects, amounts, receivers };
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Validates that the number of amounts matches the number of receivers.
|
|
120
|
+
*/
|
|
121
|
+
validateAmountsMatchReceivers(amounts, receivers) {
|
|
122
|
+
if (amounts.length !== receivers.length) {
|
|
123
|
+
throw new sdk_core_1.InvalidTransactionError('Count of amounts does not match count of receivers');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Assigns parsed input objects to either gas payment objects or payment objects.
|
|
128
|
+
* If no gas objects exist and sender pays own gas, objects become gas objects.
|
|
129
|
+
* Otherwise, they become payment objects.
|
|
130
|
+
*/
|
|
131
|
+
assignParsedObjects(inputObjects) {
|
|
132
|
+
if (inputObjects.length === 0) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const noGasObjectsExist = !this.gasPaymentObjects || this.gasPaymentObjects.length === 0;
|
|
136
|
+
const senderPaysOwnGas = !this.gasSponsor || this.sender === this.gasSponsor;
|
|
137
|
+
if (noGasObjectsExist && senderPaysOwnGas) {
|
|
138
|
+
this.gasPaymentObjects = inputObjects;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
this._paymentObjects = inputObjects;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Creates and assigns recipients from parsed addresses and amounts.
|
|
146
|
+
*/
|
|
147
|
+
assignRecipients(receivers, amounts) {
|
|
148
|
+
this._recipients = receivers.map((address, index) => ({
|
|
149
|
+
address,
|
|
150
|
+
amount: amounts[index],
|
|
151
|
+
}));
|
|
152
|
+
}
|
|
153
|
+
messageWithIntent(message) {
|
|
154
|
+
return (0, cryptography_1.messageWithIntent)('TransactionData', message);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Populates the IOTA transaction with inputs and commands for the transfer.
|
|
158
|
+
* This determines which objects to use for payment (either payment objects or gas objects),
|
|
159
|
+
* consolidates them into a single coin, and then splits/transfers to recipients.
|
|
160
|
+
*/
|
|
161
|
+
populateTxInputsAndCommands() {
|
|
162
|
+
const sourceCoin = this.getConsolidatedSourceCoin();
|
|
163
|
+
this.splitAndTransferToRecipients(sourceCoin);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Determines which objects to use as the payment source and consolidates them.
|
|
167
|
+
* If payment objects are provided, use those. Otherwise, if the sender is paying
|
|
168
|
+
* their own gas, use the gas objects for payment.
|
|
169
|
+
*/
|
|
170
|
+
getConsolidatedSourceCoin() {
|
|
171
|
+
if (this.hasPaymentObjects()) {
|
|
172
|
+
return this.consolidatePaymentObjects();
|
|
173
|
+
}
|
|
174
|
+
return this.consolidateGasObjects();
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Checks if payment objects exist and if gas objects should be used instead.
|
|
178
|
+
* Gas objects are used when: no payment objects exist AND sender pays their own gas.
|
|
179
|
+
*/
|
|
180
|
+
hasPaymentObjects() {
|
|
181
|
+
const hasPaymentObjects = this.paymentObjects && this.paymentObjects.length > 0;
|
|
182
|
+
if (hasPaymentObjects) {
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
// If no payment objects, only use gas objects if sender pays own gas
|
|
186
|
+
const senderPaysOwnGas = !this.gasSponsor || this.gasSponsor === this.sender;
|
|
187
|
+
return !senderPaysOwnGas;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Consolidates payment objects into a single coin object.
|
|
191
|
+
* If multiple payment objects exist, they are merged in batches.
|
|
192
|
+
*/
|
|
193
|
+
consolidatePaymentObjects() {
|
|
194
|
+
if (!this.paymentObjects || this.paymentObjects.length === 0) {
|
|
195
|
+
throw new sdk_core_1.InvalidTransactionError('Payment objects are required');
|
|
196
|
+
}
|
|
197
|
+
const firstObject = this._iotaTransaction.object(transactions_1.Inputs.ObjectRef(this.paymentObjects[0]));
|
|
198
|
+
// Single object doesn't need consolidation
|
|
199
|
+
if (this.paymentObjects.length > 1) {
|
|
200
|
+
// Merge extra objects into the first one
|
|
201
|
+
this.mergeObjectsInBatches(firstObject, this.paymentObjects.slice(1), constants_1.MAX_INPUT_OBJECTS);
|
|
202
|
+
}
|
|
203
|
+
return firstObject;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Consolidates gas payment objects into a single coin object.
|
|
207
|
+
* If the number of gas objects exceeds the maximum, they are merged in batches.
|
|
208
|
+
*/
|
|
209
|
+
consolidateGasObjects() {
|
|
210
|
+
if (!this.gasPaymentObjects || this.gasPaymentObjects.length === 0) {
|
|
211
|
+
throw new sdk_core_1.InvalidTransactionError('Gas payment objects are required');
|
|
212
|
+
}
|
|
213
|
+
const gasObject = this._iotaTransaction.gas;
|
|
214
|
+
if (this.gasPaymentObjects.length > constants_1.MAX_GAS_PAYMENT_OBJECTS) {
|
|
215
|
+
// Merge excess gas objects to stay within limits
|
|
216
|
+
this.mergeObjectsInBatches(gasObject, this.gasPaymentObjects, constants_1.MAX_INPUT_OBJECTS);
|
|
217
|
+
}
|
|
218
|
+
return gasObject;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Merges multiple coin objects into a target coin in batches.
|
|
222
|
+
* This is necessary because IOTA has limits on the number of objects per merge command.
|
|
223
|
+
*
|
|
224
|
+
* @param targetCoin - The coin to merge into
|
|
225
|
+
* @param objectsToMerge - Array of objects to merge
|
|
226
|
+
* @param batchSize - Maximum number of objects to merge per batch
|
|
227
|
+
* @returns The consolidated coin object
|
|
228
|
+
*/
|
|
229
|
+
mergeObjectsInBatches(targetCoin, objectsToMerge, batchSize) {
|
|
230
|
+
for (let startIndex = 0; startIndex < objectsToMerge.length; startIndex += batchSize) {
|
|
231
|
+
const batch = objectsToMerge.slice(startIndex, startIndex + batchSize);
|
|
232
|
+
const batchAsTransactionObjects = batch.map((obj) => this._iotaTransaction.object(transactions_1.Inputs.ObjectRef(obj)));
|
|
233
|
+
this._iotaTransaction.mergeCoins(targetCoin, batchAsTransactionObjects);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Splits the source coin into the amounts needed for each recipient and transfers them.
|
|
238
|
+
* This creates split coin commands for all recipient amounts, then transfer commands
|
|
239
|
+
* to send each split coin to the corresponding recipient.
|
|
240
|
+
*/
|
|
241
|
+
splitAndTransferToRecipients(sourceCoin) {
|
|
242
|
+
const recipientAmounts = this._recipients.map((recipient) => recipient.amount);
|
|
243
|
+
const splitCoins = this._iotaTransaction.splitCoins(sourceCoin, recipientAmounts);
|
|
244
|
+
this._recipients.forEach((recipient, index) => {
|
|
245
|
+
this._iotaTransaction.transferObjects([splitCoins[index]], recipient.address);
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Validates all transfer transaction data before building.
|
|
250
|
+
* Checks recipients, payment objects, and ensures no duplicate object IDs.
|
|
251
|
+
*/
|
|
252
|
+
validateTxDataImplementation() {
|
|
253
|
+
this.validateRecipientsList();
|
|
254
|
+
this.validatePaymentObjectsExist();
|
|
255
|
+
this.validateNoDuplicateObjects();
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Validates that recipients exist and don't exceed the maximum allowed.
|
|
259
|
+
*/
|
|
260
|
+
validateRecipientsList() {
|
|
261
|
+
if (!this.recipients || this.recipients.length === 0) {
|
|
262
|
+
throw new sdk_core_1.InvalidTransactionError('Transaction recipients are required');
|
|
263
|
+
}
|
|
264
|
+
if (this.recipients.length > constants_1.MAX_RECIPIENTS) {
|
|
265
|
+
throw new sdk_core_1.InvalidTransactionError(`Recipients count (${this.recipients.length}) exceeds maximum allowed (${constants_1.MAX_RECIPIENTS})`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Validates that either payment objects or gas objects exist for funding the transfer.
|
|
270
|
+
* When a gas sponsor is used, payment objects are required.
|
|
271
|
+
* Otherwise, either payment objects or gas objects can be used.
|
|
272
|
+
*/
|
|
273
|
+
validatePaymentObjectsExist() {
|
|
274
|
+
const hasPaymentObjects = this.paymentObjects && this.paymentObjects.length > 0;
|
|
275
|
+
if (hasPaymentObjects) {
|
|
276
|
+
return; // Payment objects exist, validation passes
|
|
277
|
+
}
|
|
278
|
+
// No payment objects - check if gas objects can be used instead
|
|
279
|
+
const hasGasSponsor = this.gasSponsor && this.gasSponsor !== this.sender;
|
|
280
|
+
if (hasGasSponsor) {
|
|
281
|
+
throw new sdk_core_1.InvalidTransactionError('Payment objects are required when using a gas sponsor');
|
|
282
|
+
}
|
|
283
|
+
// No gas sponsor - gas objects must exist
|
|
284
|
+
const hasGasObjects = this.gasPaymentObjects && this.gasPaymentObjects.length > 0;
|
|
285
|
+
if (!hasGasObjects) {
|
|
286
|
+
throw new sdk_core_1.InvalidTransactionError('Payment or Gas objects are required');
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Validates that there are no duplicate object IDs within payment objects,
|
|
291
|
+
* gas payment objects, or between the two groups.
|
|
292
|
+
*/
|
|
293
|
+
validateNoDuplicateObjects() {
|
|
294
|
+
const paymentObjectIds = this.paymentObjects?.map((obj) => obj.objectId) ?? [];
|
|
295
|
+
// Check for duplicates within payment objects
|
|
296
|
+
this.checkForDuplicateIds(paymentObjectIds, 'payment objects');
|
|
297
|
+
if (!this.gasPaymentObjects || this.gasPaymentObjects.length === 0) {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
const gasObjectIds = this.gasPaymentObjects.map((gas) => gas.objectId);
|
|
301
|
+
// Check for duplicates within gas payment objects
|
|
302
|
+
this.checkForDuplicateIds(gasObjectIds, 'gas payment objects');
|
|
303
|
+
// Check for overlaps between payment and gas objects
|
|
304
|
+
const overlappingIds = paymentObjectIds.filter((id) => gasObjectIds.includes(id));
|
|
305
|
+
if (overlappingIds.length > 0) {
|
|
306
|
+
throw new sdk_core_1.InvalidTransactionError('Payment objects cannot be the same as gas payment objects: ' + overlappingIds.join(', '));
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Helper to check for duplicate IDs in an array.
|
|
311
|
+
*/
|
|
312
|
+
checkForDuplicateIds(ids, objectType) {
|
|
313
|
+
const uniqueIds = new Set(ids);
|
|
314
|
+
if (uniqueIds.size !== ids.length) {
|
|
315
|
+
throw new sdk_core_1.InvalidTransactionError(`Duplicate object IDs found in ${objectType}`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* @inheritDoc
|
|
320
|
+
* Provides a human-readable explanation of the transfer transaction.
|
|
321
|
+
*/
|
|
322
|
+
explainTransactionImplementation(_json, explanationResult) {
|
|
323
|
+
const outputs = this.recipients.map((recipient) => recipient);
|
|
324
|
+
const outputAmount = this.calculateTotalOutputAmount();
|
|
325
|
+
return {
|
|
326
|
+
...explanationResult,
|
|
327
|
+
outputAmount,
|
|
328
|
+
outputs,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Calculates the total amount being transferred to all recipients.
|
|
333
|
+
*/
|
|
334
|
+
calculateTotalOutputAmount() {
|
|
335
|
+
return this.recipients
|
|
336
|
+
.reduce((accumulator, current) => accumulator.plus(current.amount), new bignumber_js_1.default(0))
|
|
337
|
+
.toString();
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
exports.TransferTransaction = TransferTransaction;
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNmZXJUcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBNkc7QUFFN0csK0NBQTRDO0FBRTVDLDhEQUlxQztBQUNyQyxnREFBa0Q7QUFDbEQsOERBQXlGO0FBQ3pGLG1DQUFzQztBQUN0QywyQ0FBd0g7QUFDeEgsb0RBQTRCO0FBQzVCLGdFQUFxQztBQUVyQyxNQUFhLG1CQUFvQixTQUFRLHlCQUFXO0lBSWxELFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBNkI7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxjQUFjLENBQUMsS0FBMkM7UUFDNUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzNCLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxX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QUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLHNCQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEYsUUFBUSxFQUFFLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBNVlELGtEQTRZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCB0b0hleCwgVHJhbnNhY3Rpb25SZWNpcGllbnQsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBUcmFuc2FjdGlvbk9iamVjdElucHV0LCBUcmFuc2ZlclR4RGF0YSwgVHhEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQge1xuICBJbnB1dHMgYXMgSW90YUlucHV0cyxcbiAgVHJhbnNhY3Rpb25PYmplY3RBcmd1bWVudCxcbiAgVHJhbnNhY3Rpb24gYXMgSW90YVRyYW5zYWN0aW9uLFxufSBmcm9tICdAaW90YS9pb3RhLXNkay90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgZnJvbUJhc2U2NCB9IGZyb20gJ0Bpb3RhL2lvdGEtc2RrL3V0aWxzJztcbmltcG9ydCB7IG1lc3NhZ2VXaXRoSW50ZW50IGFzIGlvdGFNZXNzYWdlV2l0aEludGVudCB9IGZyb20gJ0Bpb3RhL2lvdGEtc2RrL2NyeXB0b2dyYXBoeSc7XG5pbXBvcnQgeyBCY3NSZWFkZXIgfSBmcm9tICdAaW90YS9iY3MnO1xuaW1wb3J0IHsgTUFYX0dBU19QQVlNRU5UX09CSkVDVFMsIE1BWF9JTlBVVF9PQkpFQ1RTLCBNQVhfUkVDSVBJRU5UUywgVFJBTlNGRVJfVFJBTlNBQ1RJT05fQ09NTUFORFMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2ZlclRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF9yZWNpcGllbnRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICBwcml2YXRlIF9wYXltZW50T2JqZWN0cz86IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXTtcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgICB0aGlzLl9pbnB1dHMgPSBbXTtcbiAgICB0aGlzLl9vdXRwdXRzID0gW107XG4gIH1cblxuICBnZXQgcmVjaXBpZW50cygpOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5fcmVjaXBpZW50cztcbiAgfVxuXG4gIHNldCByZWNpcGllbnRzKHZhbHVlOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdKSB7XG4gICAgdGhpcy5fcmVjaXBpZW50cyA9IHZhbHVlO1xuICAgIHRoaXMuX3JlYnVpbGRSZXF1aXJlZCA9IHRydWU7XG4gIH1cblxuICBnZXQgcGF5bWVudE9iamVjdHMoKTogVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcGF5bWVudE9iamVjdHM7XG4gIH1cblxuICBzZXQgcGF5bWVudE9iamVjdHModmFsdWU6IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BheW1lbnRPYmplY3RzID0gdmFsdWU7XG4gICAgdGhpcy5fcmVidWlsZFJlcXVpcmVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgYWRkSW5wdXRzQW5kT3V0cHV0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lvdGFUcmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b3RhbEFtb3VudCA9IHRoaXMucmVjaXBpZW50cy5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50KSA9PiBhY2N1bXVsYXRvciArIE51bWJlcihjdXJyZW50LmFtb3VudCksIDApO1xuICAgIHRoaXMuX291dHB1dHMgPSB0aGlzLnJlY2lwaWVudHMubWFwKChyZWNpcGllbnQsIGluZGV4KSA9PiAoe1xuICAgICAgYWRkcmVzczogcmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICB2YWx1ZTogcmVjaXBpZW50LmFtb3VudC50b1N0cmluZygpLFxuICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgIH0pKTtcbiAgICB0aGlzLl9pbnB1dHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRoaXMuc2VuZGVyLFxuICAgICAgICB2YWx1ZTogdG90YWxBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgdG9Kc29uKCk6IFRyYW5zZmVyVHhEYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3VwZXIudG9Kc29uKCksXG4gICAgICByZWNpcGllbnRzOiB0aGlzLnJlY2lwaWVudHMsXG4gICAgICBwYXltZW50T2JqZWN0czogdGhpcy5wYXltZW50T2JqZWN0cyxcbiAgICB9O1xuICB9XG5cbiAgcGFyc2VGcm9tSlNPTih0eERhdGE6IFRyYW5zZmVyVHhEYXRhKTogdm9pZCB7XG4gICAgc3VwZXIucGFyc2VGcm9tSlNPTih0eERhdGEpO1xuICAgIHRoaXMucmVjaXBpZW50cyA9IHR4RGF0YS5yZWNpcGllbnRzO1xuICAgIHRoaXMucGF5bWVudE9iamVjdHMgPSB0eERhdGEucGF5bWVudE9iamVjdHM7XG4gICAgdGhpcy51cGRhdGVJc1NpbXVsYXRlVHgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSB0cmFuc2ZlciB0cmFuc2FjdGlvbiBmcm9tIGl0cyBicm9hZGNhc3QgZm9ybWF0IChiYXNlNjQgb3IgcmF3IGJ5dGVzKS5cbiAgICogRXh0cmFjdHMgcmVjaXBpZW50cywgYW1vdW50cywgYW5kIHBheW1lbnQgb2JqZWN0cyBmcm9tIHRoZSB0cmFuc2FjdGlvbiBkYXRhLlxuICAgKi9cbiAgcGFyc2VGcm9tQnJvYWRjYXN0VHgodHg6IHN0cmluZyB8IFVpbnQ4QXJyYXkpOiB2b2lkIHtcbiAgICBjb25zdCB0eERhdGEgPSBJb3RhVHJhbnNhY3Rpb24uZnJvbSh0eCkuZ2V0RGF0YSgpO1xuICAgIHRoaXMudmFsaWRhdGVUcmFuc2ZlckNvbW1hbmRzKHR4RGF0YSk7XG5cbiAgICBzdXBlci5wYXJzZUZyb21Ccm9hZGNhc3RUeCh0eCk7XG5cbiAgICBjb25zdCB7IGlucHV0T2JqZWN0cywgYW1vdW50cywgcmVjZWl2ZXJzIH0gPSB0aGlzLnBhcnNlVHJhbnNhY3Rpb25JbnB1dHModHhEYXRhKTtcbiAgICB0aGlzLnZhbGlkYXRlQW1vdW50c01hdGNoUmVjZWl2ZXJzKGFtb3VudHMsIHJlY2VpdmVycyk7XG4gICAgdGhpcy5hc3NpZ25QYXJzZWRPYmplY3RzKGlucHV0T2JqZWN0cyk7XG4gICAgdGhpcy5hc3NpZ25SZWNpcGllbnRzKHJlY2VpdmVycywgYW1vdW50cyk7XG4gICAgdGhpcy51cGRhdGVJc1NpbXVsYXRlVHgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gb25seSBjb250YWlucyBzdXBwb3J0ZWQgdHJhbnNmZXIgY29tbWFuZHMuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVHJhbnNmZXJDb21tYW5kcyh0eERhdGE6IFJldHVyblR5cGU8SW90YVRyYW5zYWN0aW9uWydnZXREYXRhJ10+KTogdm9pZCB7XG4gICAgY29uc3QgaGFzVW5zdXBwb3J0ZWRDb21tYW5kcyA9IHR4RGF0YS5jb21tYW5kcy5zb21lKFxuICAgICAgKGNvbW1hbmQpID0+ICFUUkFOU0ZFUl9UUkFOU0FDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhjb21tYW5kLiRraW5kKVxuICAgICk7XG5cbiAgICBpZiAoaGFzVW5zdXBwb3J0ZWRDb21tYW5kcykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdVbnN1cHBvcnRlZCBjb21tYW5kcyBpbiB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIHRyYW5zYWN0aW9uIGlucHV0cyB0byBleHRyYWN0IG9iamVjdHMsIGFtb3VudHMsIGFuZCByZWNlaXZlciBhZGRyZXNzZXMuXG4gICAqL1xuICBwcml2YXRlIHBhcnNlVHJhbnNhY3Rpb25JbnB1dHModHhEYXRhOiBSZXR1cm5UeXBlPElvdGFUcmFuc2FjdGlvblsnZ2V0RGF0YSddPik6IHtcbiAgICBpbnB1dE9iamVjdHM6IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXTtcbiAgICBhbW91bnRzOiBzdHJpbmdbXTtcbiAgICByZWNlaXZlcnM6IHN0cmluZ1tdO1xuICB9IHtcbiAgICBjb25zdCBpbnB1dE9iamVjdHM6IFRyYW5zYWN0aW9uT2JqZWN0SW5wdXRbXSA9IFtdO1xuICAgIGNvbnN0IGFtb3VudHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcmVjZWl2ZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdHhEYXRhLmlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgaWYgKGlucHV0LiRraW5kID09PSAnT2JqZWN0JyAmJiAnSW1tT3JPd25lZE9iamVjdCcgaW4gaW5wdXQuT2JqZWN0KSB7XG4gICAgICAgIGlucHV0T2JqZWN0cy5wdXNoKGlucHV0Lk9iamVjdC5JbW1Pck93bmVkT2JqZWN0IGFzIFRyYW5zYWN0aW9uT2JqZWN0SW5wdXQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5wdXQuJGtpbmQgPT09ICdQdXJlJyAmJiAnYnl0ZXMnIGluIGlucHV0LlB1cmUpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBmcm9tQmFzZTY0KGlucHV0LlB1cmUuYnl0ZXMpO1xuICAgICAgICBjb25zdCBoZXhWYWx1ZSA9ICcweCcgKyB0b0hleCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzVmFsaWRBZGRyZXNzKGhleFZhbHVlKSkge1xuICAgICAgICAgIHJlY2VpdmVycy5wdXNoKGhleFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbW91bnRzLnB1c2gobmV3IEJjc1JlYWRlcih2YWx1ZSkucmVhZDY0KCkudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7IGlucHV0T2JqZWN0cywgYW1vdW50cywgcmVjZWl2ZXJzIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIG51bWJlciBvZiBhbW91bnRzIG1hdGNoZXMgdGhlIG51bWJlciBvZiByZWNlaXZlcnMuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQW1vdW50c01hdGNoUmVjZWl2ZXJzKGFtb3VudHM6IHN0cmluZ1tdLCByZWNlaXZlcnM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKGFtb3VudHMubGVuZ3RoICE9PSByZWNlaXZlcnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0NvdW50IG9mIGFtb3VudHMgZG9lcyBub3QgbWF0Y2ggY291bnQgb2YgcmVjZWl2ZXJzJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbnMgcGFyc2VkIGlucHV0IG9iamVjdHMgdG8gZWl0aGVyIGdhcyBwYXltZW50IG9iamVjdHMgb3IgcGF5bWVudCBvYmplY3RzLlxuICAgKiBJZiBubyBnYXMgb2JqZWN0cyBleGlzdCBhbmQgc2VuZGVyIHBheXMgb3duIGdhcywgb2JqZWN0cyBiZWNvbWUgZ2FzIG9iamVjdHMuXG4gICAqIE90aGVyd2lzZSwgdGhleSBiZWNvbWUgcGF5bWVudCBvYmplY3RzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3NpZ25QYXJzZWRPYmplY3RzKGlucHV0T2JqZWN0czogVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdKTogdm9pZCB7XG4gICAgaWYgKGlucHV0T2JqZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub0dhc09iamVjdHNFeGlzdCA9ICF0aGlzLmdhc1BheW1lbnRPYmplY3RzIHx8IHRoaXMuZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RoID09PSAwO1xuICAgIGNvbnN0IHNlbmRlclBheXNPd25HYXMgPSAhdGhpcy5nYXNTcG9uc29yIHx8IHRoaXMuc2VuZGVyID09PSB0aGlzLmdhc1Nwb25zb3I7XG5cbiAgICBpZiAobm9HYXNPYmplY3RzRXhpc3QgJiYgc2VuZGVyUGF5c093bkdhcykge1xuICAgICAgdGhpcy5nYXNQYXltZW50T2JqZWN0cyA9IGlucHV0T2JqZWN0cztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcGF5bWVudE9iamVjdHMgPSBpbnB1dE9iamVjdHM7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIGFzc2lnbnMgcmVjaXBpZW50cyBmcm9tIHBhcnNlZCBhZGRyZXNzZXMgYW5kIGFtb3VudHMuXG4gICAqL1xuICBwcml2YXRlIGFzc2lnblJlY2lwaWVudHMocmVjZWl2ZXJzOiBzdHJpbmdbXSwgYW1vdW50czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLl9yZWNpcGllbnRzID0gcmVjZWl2ZXJzLm1hcCgoYWRkcmVzcywgaW5kZXgpID0+ICh7XG4gICAgICBhZGRyZXNzLFxuICAgICAgYW1vdW50OiBhbW91bnRzW2luZGV4XSxcbiAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWVzc2FnZVdpdGhJbnRlbnQobWVzc2FnZTogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiBpb3RhTWVzc2FnZVdpdGhJbnRlbnQoJ1RyYW5zYWN0aW9uRGF0YScsIG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBvcHVsYXRlcyB0aGUgSU9UQSB0cmFuc2FjdGlvbiB3aXRoIGlucHV0cyBhbmQgY29tbWFuZHMgZm9yIHRoZSB0cmFuc2Zlci5cbiAgICogVGhpcyBkZXRlcm1pbmVzIHdoaWNoIG9iamVjdHMgdG8gdXNlIGZvciBwYXltZW50IChlaXRoZXIgcGF5bWVudCBvYmplY3RzIG9yIGdhcyBvYmplY3RzKSxcbiAgICogY29uc29saWRhdGVzIHRoZW0gaW50byBhIHNpbmdsZSBjb2luLCBhbmQgdGhlbiBzcGxpdHMvdHJhbnNmZXJzIHRvIHJlY2lwaWVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcG9wdWxhdGVUeElucHV0c0FuZENvbW1hbmRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHNvdXJjZUNvaW4gPSB0aGlzLmdldENvbnNvbGlkYXRlZFNvdXJjZUNvaW4oKTtcbiAgICB0aGlzLnNwbGl0QW5kVHJhbnNmZXJUb1JlY2lwaWVudHMoc291cmNlQ29pbik7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGljaCBvYmplY3RzIHRvIHVzZSBhcyB0aGUgcGF5bWVudCBzb3VyY2UgYW5kIGNvbnNvbGlkYXRlcyB0aGVtLlxuICAgKiBJZiBwYXltZW50IG9iamVjdHMgYXJlIHByb3ZpZGVkLCB1c2UgdGhvc2UuIE90aGVyd2lzZSwgaWYgdGhlIHNlbmRlciBpcyBwYXlpbmdcbiAgICogdGhlaXIgb3duIGdhcywgdXNlIHRoZSBnYXMgb2JqZWN0cyBmb3IgcGF5bWVudC5cbiAgICovXG4gIHByaXZhdGUgZ2V0Q29uc29saWRhdGVkU291cmNlQ29pbigpOiBUcmFuc2FjdGlvbk9iamVjdEFyZ3VtZW50IHtcbiAgICBpZiAodGhpcy5oYXNQYXltZW50T2JqZWN0cygpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25zb2xpZGF0ZVBheW1lbnRPYmplY3RzKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbnNvbGlkYXRlR2FzT2JqZWN0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwYXltZW50IG9iamVjdHMgZXhpc3QgYW5kIGlmIGdhcyBvYmplY3RzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gICAqIEdhcyBvYmplY3RzIGFyZSB1c2VkIHdoZW46IG5vIHBheW1lbnQgb2JqZWN0cyBleGlzdCBBTkQgc2VuZGVyIHBheXMgdGhlaXIgb3duIGdhcy5cbiAgICovXG4gIHByaXZhdGUgaGFzUGF5bWVudE9iamVjdHMoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzUGF5bWVudE9iamVjdHMgPSB0aGlzLnBheW1lbnRPYmplY3RzICYmIHRoaXMucGF5bWVudE9iamVjdHMubGVuZ3RoID4gMDtcbiAgICBpZiAoaGFzUGF5bWVudE9iamVjdHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIElmIG5vIHBheW1lbnQgb2JqZWN0cywgb25seSB1c2UgZ2FzIG9iamVjdHMgaWYgc2VuZGVyIHBheXMgb3duIGdhc1xuICAgIGNvbnN0IHNlbmRlclBheXNPd25HYXMgPSAhdGhpcy5nYXNTcG9uc29yIHx8IHRoaXMuZ2FzU3BvbnNvciA9PT0gdGhpcy5zZW5kZXI7XG4gICAgcmV0dXJuICFzZW5kZXJQYXlzT3duR2FzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnNvbGlkYXRlcyBwYXltZW50IG9iamVjdHMgaW50byBhIHNpbmdsZSBjb2luIG9iamVjdC5cbiAgICogSWYgbXVsdGlwbGUgcGF5bWVudCBvYmplY3RzIGV4aXN0LCB0aGV5IGFyZSBtZXJnZWQgaW4gYmF0Y2hlcy5cbiAgICovXG4gIHByaXZhdGUgY29uc29saWRhdGVQYXltZW50T2JqZWN0cygpOiBUcmFuc2FjdGlvbk9iamVjdEFyZ3VtZW50IHtcbiAgICBpZiAoIXRoaXMucGF5bWVudE9iamVjdHMgfHwgdGhpcy5wYXltZW50T2JqZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignUGF5bWVudCBvYmplY3RzIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0T2JqZWN0ID0gdGhpcy5faW90YVRyYW5zYWN0aW9uLm9iamVjdChJb3RhSW5wdXRzLk9iamVjdFJlZih0aGlzLnBheW1lbnRPYmplY3RzWzBdKSk7XG5cbiAgICAvLyBTaW5nbGUgb2JqZWN0IGRvZXNuJ3QgbmVlZCBjb25zb2xpZGF0aW9uXG4gICAgaWYgKHRoaXMucGF5bWVudE9iamVjdHMubGVuZ3RoID4gMSkge1xuICAgICAgLy8gTWVyZ2UgZXh0cmEgb2JqZWN0cyBpbnRvIHRoZSBmaXJzdCBvbmVcbiAgICAgIHRoaXMubWVyZ2VPYmplY3RzSW5CYXRjaGVzKGZpcnN0T2JqZWN0LCB0aGlzLnBheW1lbnRPYmplY3RzLnNsaWNlKDEpLCBNQVhfSU5QVVRfT0JKRUNUUyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0T2JqZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnNvbGlkYXRlcyBnYXMgcGF5bWVudCBvYmplY3RzIGludG8gYSBzaW5nbGUgY29pbiBvYmplY3QuXG4gICAqIElmIHRoZSBudW1iZXIgb2YgZ2FzIG9iamVjdHMgZXhjZWVkcyB0aGUgbWF4aW11bSwgdGhleSBhcmUgbWVyZ2VkIGluIGJhdGNoZXMuXG4gICAqL1xuICBwcml2YXRlIGNvbnNvbGlkYXRlR2FzT2JqZWN0cygpOiBUcmFuc2FjdGlvbk9iamVjdEFyZ3VtZW50IHtcbiAgICBpZiAoIXRoaXMuZ2FzUGF5bWVudE9iamVjdHMgfHwgdGhpcy5nYXNQYXltZW50T2JqZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignR2FzIHBheW1lbnQgb2JqZWN0cyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBnYXNPYmplY3QgPSB0aGlzLl9pb3RhVHJhbnNhY3Rpb24uZ2FzO1xuXG4gICAgaWYgKHRoaXMuZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RoID4gTUFYX0dBU19QQVlNRU5UX09CSkVDVFMpIHtcbiAgICAgIC8vIE1lcmdlIGV4Y2VzcyBnYXMgb2JqZWN0cyB0byBzdGF5IHdpdGhpbiBsaW1pdHNcbiAgICAgIHRoaXMubWVyZ2VPYmplY3RzSW5CYXRjaGVzKGdhc09iamVjdCwgdGhpcy5nYXNQYXltZW50T2JqZWN0cywgTUFYX0lOUFVUX09CSkVDVFMpO1xuICAgIH1cblxuICAgIHJldHVybiBnYXNPYmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIG11bHRpcGxlIGNvaW4gb2JqZWN0cyBpbnRvIGEgdGFyZ2V0IGNvaW4gaW4gYmF0Y2hlcy5cbiAgICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBJT1RBIGhhcyBsaW1pdHMgb24gdGhlIG51bWJlciBvZiBvYmplY3RzIHBlciBtZXJnZSBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0Q29pbiAtIFRoZSBjb2luIHRvIG1lcmdlIGludG9cbiAgICogQHBhcmFtIG9iamVjdHNUb01lcmdlIC0gQXJyYXkgb2Ygb2JqZWN0cyB0byBtZXJnZVxuICAgKiBAcGFyYW0gYmF0Y2hTaXplIC0gTWF4aW11bSBudW1iZXIgb2Ygb2JqZWN0cyB0byBtZXJnZSBwZXIgYmF0Y2hcbiAgICogQHJldHVybnMgVGhlIGNvbnNvbGlkYXRlZCBjb2luIG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSBtZXJnZU9iamVjdHNJbkJhdGNoZXMoXG4gICAgdGFyZ2V0Q29pbjogVHJhbnNhY3Rpb25PYmplY3RBcmd1bWVudCxcbiAgICBvYmplY3RzVG9NZXJnZTogVHJhbnNhY3Rpb25PYmplY3RJbnB1dFtdLFxuICAgIGJhdGNoU2l6ZTogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGZvciAobGV0IHN0YXJ0SW5kZXggPSAwOyBzdGFydEluZGV4IDwgb2JqZWN0c1RvTWVyZ2UubGVuZ3RoOyBzdGFydEluZGV4ICs9IGJhdGNoU2l6ZSkge1xuICAgICAgY29uc3QgYmF0Y2ggPSBvYmplY3RzVG9NZXJnZS5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgYmF0Y2hTaXplKTtcbiAgICAgIGNvbnN0IGJhdGNoQXNUcmFuc2FjdGlvbk9iamVjdHMgPSBiYXRjaC5tYXAoKG9iaikgPT4gdGhpcy5faW90YVRyYW5zYWN0aW9uLm9iamVjdChJb3RhSW5wdXRzLk9iamVjdFJlZihvYmopKSk7XG5cbiAgICAgIHRoaXMuX2lvdGFUcmFuc2FjdGlvbi5tZXJnZUNvaW5zKHRhcmdldENvaW4sIGJhdGNoQXNUcmFuc2FjdGlvbk9iamVjdHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdHMgdGhlIHNvdXJjZSBjb2luIGludG8gdGhlIGFtb3VudHMgbmVlZGVkIGZvciBlYWNoIHJlY2lwaWVudCBhbmQgdHJhbnNmZXJzIHRoZW0uXG4gICAqIFRoaXMgY3JlYXRlcyBzcGxpdCBjb2luIGNvbW1hbmRzIGZvciBhbGwgcmVjaXBpZW50IGFtb3VudHMsIHRoZW4gdHJhbnNmZXIgY29tbWFuZHNcbiAgICogdG8gc2VuZCBlYWNoIHNwbGl0IGNvaW4gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmVjaXBpZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBzcGxpdEFuZFRyYW5zZmVyVG9SZWNpcGllbnRzKHNvdXJjZUNvaW46IFRyYW5zYWN0aW9uT2JqZWN0QXJndW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCByZWNpcGllbnRBbW91bnRzID0gdGhpcy5fcmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gcmVjaXBpZW50LmFtb3VudCk7XG4gICAgY29uc3Qgc3BsaXRDb2lucyA9IHRoaXMuX2lvdGFUcmFuc2FjdGlvbi5zcGxpdENvaW5zKHNvdXJjZUNvaW4sIHJlY2lwaWVudEFtb3VudHMpO1xuXG4gICAgdGhpcy5fcmVjaXBpZW50cy5mb3JFYWNoKChyZWNpcGllbnQsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLl9pb3RhVHJhbnNhY3Rpb24udHJhbnNmZXJPYmplY3RzKFtzcGxpdENvaW5zW2luZGV4XV0sIHJlY2lwaWVudC5hZGRyZXNzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYWxsIHRyYW5zZmVyIHRyYW5zYWN0aW9uIGRhdGEgYmVmb3JlIGJ1aWxkaW5nLlxuICAgKiBDaGVja3MgcmVjaXBpZW50cywgcGF5bWVudCBvYmplY3RzLCBhbmQgZW5zdXJlcyBubyBkdXBsaWNhdGUgb2JqZWN0IElEcy5cbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZVR4RGF0YUltcGxlbWVudGF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVSZWNpcGllbnRzTGlzdCgpO1xuICAgIHRoaXMudmFsaWRhdGVQYXltZW50T2JqZWN0c0V4aXN0KCk7XG4gICAgdGhpcy52YWxpZGF0ZU5vRHVwbGljYXRlT2JqZWN0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHJlY2lwaWVudHMgZXhpc3QgYW5kIGRvbid0IGV4Y2VlZCB0aGUgbWF4aW11bSBhbGxvd2VkLlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlY2lwaWVudHNMaXN0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWNpcGllbnRzIHx8IHRoaXMucmVjaXBpZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gcmVjaXBpZW50cyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWNpcGllbnRzLmxlbmd0aCA+IE1BWF9SRUNJUElFTlRTKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBSZWNpcGllbnRzIGNvdW50ICgke3RoaXMucmVjaXBpZW50cy5sZW5ndGh9KSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCAoJHtNQVhfUkVDSVBJRU5UU30pYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgZWl0aGVyIHBheW1lbnQgb2JqZWN0cyBvciBnYXMgb2JqZWN0cyBleGlzdCBmb3IgZnVuZGluZyB0aGUgdHJhbnNmZXIuXG4gICAqIFdoZW4gYSBnYXMgc3BvbnNvciBpcyB1c2VkLCBwYXltZW50IG9iamVjdHMgYXJlIHJlcXVpcmVkLlxuICAgKiBPdGhlcndpc2UsIGVpdGhlciBwYXltZW50IG9iamVjdHMgb3IgZ2FzIG9iamVjdHMgY2FuIGJlIHVzZWQuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUGF5bWVudE9iamVjdHNFeGlzdCgpOiB2b2lkIHtcbiAgICBjb25zdCBoYXNQYXltZW50T2JqZWN0cyA9IHRoaXMucGF5bWVudE9iamVjdHMgJiYgdGhpcy5wYXltZW50T2JqZWN0cy5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNQYXltZW50T2JqZWN0cykge1xuICAgICAgcmV0dXJuOyAvLyBQYXltZW50IG9iamVjdHMgZXhpc3QsIHZhbGlkYXRpb24gcGFzc2VzXG4gICAgfVxuXG4gICAgLy8gTm8gcGF5bWVudCBvYmplY3RzIC0gY2hlY2sgaWYgZ2FzIG9iamVjdHMgY2FuIGJlIHVzZWQgaW5zdGVhZFxuICAgIGNvbnN0IGhhc0dhc1Nwb25zb3IgPSB0aGlzLmdhc1Nwb25zb3IgJiYgdGhpcy5nYXNTcG9uc29yICE9PSB0aGlzLnNlbmRlcjtcbiAgICBpZiAoaGFzR2FzU3BvbnNvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdQYXltZW50IG9iamVjdHMgYXJlIHJlcXVpcmVkIHdoZW4gdXNpbmcgYSBnYXMgc3BvbnNvcicpO1xuICAgIH1cblxuICAgIC8vIE5vIGdhcyBzcG9uc29yIC0gZ2FzIG9iamVjdHMgbXVzdCBleGlzdFxuICAgIGNvbnN0IGhhc0dhc09iamVjdHMgPSB0aGlzLmdhc1BheW1lbnRPYmplY3RzICYmIHRoaXMuZ2FzUGF5bWVudE9iamVjdHMubGVuZ3RoID4gMDtcbiAgICBpZiAoIWhhc0dhc09iamVjdHMpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignUGF5bWVudCBvciBHYXMgb2JqZWN0cyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZSBvYmplY3QgSURzIHdpdGhpbiBwYXltZW50IG9iamVjdHMsXG4gICAqIGdhcyBwYXltZW50IG9iamVjdHMsIG9yIGJldHdlZW4gdGhlIHR3byBncm91cHMuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTm9EdXBsaWNhdGVPYmplY3RzKCk6IHZvaWQge1xuICAgIGNvbnN0IHBheW1lbnRPYmplY3RJZHMgPSB0aGlzLnBheW1lbnRPYmplY3RzPy5tYXAoKG9iaikgPT4gb2JqLm9iamVjdElkKSA/PyBbXTtcblxuICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGVzIHdpdGhpbiBwYXltZW50IG9iamVjdHNcbiAgICB0aGlzLmNoZWNrRm9yRHVwbGljYXRlSWRzKHBheW1lbnRPYmplY3RJZHMsICdwYXltZW50IG9iamVjdHMnKTtcblxuICAgIGlmICghdGhpcy5nYXNQYXltZW50T2JqZWN0cyB8fCB0aGlzLmdhc1BheW1lbnRPYmplY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGdhc09iamVjdElkcyA9IHRoaXMuZ2FzUGF5bWVudE9iamVjdHMubWFwKChnYXMpID0+IGdhcy5vYmplY3RJZCk7XG5cbiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlcyB3aXRoaW4gZ2FzIHBheW1lbnQgb2JqZWN0c1xuICAgIHRoaXMuY2hlY2tGb3JEdXBsaWNhdGVJZHMoZ2FzT2JqZWN0SWRzLCAnZ2FzIHBheW1lbnQgb2JqZWN0cycpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIG92ZXJsYXBzIGJldHdlZW4gcGF5bWVudCBhbmQgZ2FzIG9iamVjdHNcbiAgICBjb25zdCBvdmVybGFwcGluZ0lkcyA9IHBheW1lbnRPYmplY3RJZHMuZmlsdGVyKChpZCkgPT4gZ2FzT2JqZWN0SWRzLmluY2x1ZGVzKGlkKSk7XG4gICAgaWYgKG92ZXJsYXBwaW5nSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgJ1BheW1lbnQgb2JqZWN0cyBjYW5ub3QgYmUgdGhlIHNhbWUgYXMgZ2FzIHBheW1lbnQgb2JqZWN0czogJyArIG92ZXJsYXBwaW5nSWRzLmpvaW4oJywgJylcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciB0byBjaGVjayBmb3IgZHVwbGljYXRlIElEcyBpbiBhbiBhcnJheS5cbiAgICovXG4gIHByaXZhdGUgY2hlY2tGb3JEdXBsaWNhdGVJZHMoaWRzOiBzdHJpbmdbXSwgb2JqZWN0VHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdW5pcXVlSWRzID0gbmV3IFNldChpZHMpO1xuICAgIGlmICh1bmlxdWVJZHMuc2l6ZSAhPT0gaWRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBEdXBsaWNhdGUgb2JqZWN0IElEcyBmb3VuZCBpbiAke29iamVjdFR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIFByb3ZpZGVzIGEgaHVtYW4tcmVhZGFibGUgZXhwbGFuYXRpb24gb2YgdGhlIHRyYW5zZmVyIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGV4cGxhaW5UcmFuc2FjdGlvbkltcGxlbWVudGF0aW9uKFxuICAgIF9qc29uOiBUeERhdGEsXG4gICAgZXhwbGFuYXRpb25SZXN1bHQ6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb25cbiAgKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgY29uc3Qgb3V0cHV0cyA9IHRoaXMucmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gcmVjaXBpZW50KTtcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSB0aGlzLmNhbGN1bGF0ZVRvdGFsT3V0cHV0QW1vdW50KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhwbGFuYXRpb25SZXN1bHQsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBvdXRwdXRzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgdG90YWwgYW1vdW50IGJlaW5nIHRyYW5zZmVycmVkIHRvIGFsbCByZWNpcGllbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVUb3RhbE91dHB1dEFtb3VudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlY2lwaWVudHNcbiAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50KSA9PiBhY2N1bXVsYXRvci5wbHVzKGN1cnJlbnQuYW1vdW50KSwgbmV3IEJpZ051bWJlcigwKSlcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG59XG4iXX0=
|
package/dist/src/lib/utils.d.ts
CHANGED
|
@@ -1,20 +1,121 @@
|
|
|
1
1
|
import { BaseUtils } from '@bitgo-beta/sdk-core';
|
|
2
|
+
/**
|
|
3
|
+
* Utility class for IOTA-specific validation and conversion operations.
|
|
4
|
+
* Implements the BaseUtils interface and provides methods for validating
|
|
5
|
+
* addresses, keys, signatures, and transaction data.
|
|
6
|
+
*/
|
|
2
7
|
export declare class Utils implements BaseUtils {
|
|
3
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Validates an IOTA address format.
|
|
10
|
+
* IOTA addresses are 64-character hex strings prefixed with '0x'.
|
|
11
|
+
*
|
|
12
|
+
* @param address - The address to validate
|
|
13
|
+
* @returns true if the address is valid
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* utils.isValidAddress('0x1234...') // true
|
|
18
|
+
* utils.isValidAddress('invalid') // false
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
4
21
|
isValidAddress(address: string): boolean;
|
|
5
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Validates an IOTA block ID (digest).
|
|
24
|
+
* Block IDs are 32-byte base58-encoded strings.
|
|
25
|
+
*
|
|
26
|
+
* @param hash - The block ID to validate
|
|
27
|
+
* @returns true if the block ID is valid
|
|
28
|
+
*/
|
|
6
29
|
isValidBlockId(hash: string): boolean;
|
|
7
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Validates an IOTA transaction ID (digest).
|
|
32
|
+
* Transaction IDs are 32-byte base58-encoded strings.
|
|
33
|
+
*
|
|
34
|
+
* @param txId - The transaction ID to validate
|
|
35
|
+
* @returns true if the transaction ID is valid
|
|
36
|
+
*/
|
|
37
|
+
isValidTransactionId(txId: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Validates an Ed25519 private key format.
|
|
40
|
+
*
|
|
41
|
+
* @param key - The private key to validate (hex string)
|
|
42
|
+
* @returns true if the private key is valid
|
|
43
|
+
*/
|
|
8
44
|
isValidPrivateKey(key: string): boolean;
|
|
9
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Validates an Ed25519 public key format.
|
|
47
|
+
*
|
|
48
|
+
* @param key - The public key to validate (hex string)
|
|
49
|
+
* @returns true if the public key is valid
|
|
50
|
+
*/
|
|
10
51
|
isValidPublicKey(key: string): boolean;
|
|
11
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Validates an IOTA signature format.
|
|
54
|
+
* Signatures must be base64-encoded and exactly 64 bytes when decoded.
|
|
55
|
+
*
|
|
56
|
+
* @param signature - The base64-encoded signature to validate
|
|
57
|
+
* @returns true if the signature is valid
|
|
58
|
+
*/
|
|
12
59
|
isValidSignature(signature: string): boolean;
|
|
13
|
-
/**
|
|
14
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Validates a raw IOTA transaction format.
|
|
62
|
+
* Attempts to parse the transaction using the IOTA SDK.
|
|
63
|
+
*
|
|
64
|
+
* @param rawTransaction - The raw transaction (base64 string or Uint8Array)
|
|
65
|
+
* @returns true if the transaction can be parsed
|
|
66
|
+
*/
|
|
67
|
+
isValidRawTransaction(rawTransaction: string | Uint8Array): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Validates a hex string with a specific length requirement.
|
|
70
|
+
* Checks for '0x' or '0X' prefix followed by the specified number of hex characters.
|
|
71
|
+
*
|
|
72
|
+
* @param value - The hex string to validate
|
|
73
|
+
* @param length - The required length (number of hex characters, excluding prefix)
|
|
74
|
+
* @returns true if the hex string matches the format and length
|
|
75
|
+
*/
|
|
15
76
|
isValidHex(value: string, length: number): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Converts a value to a base64-encoded string.
|
|
79
|
+
* Handles both Uint8Array and hex string inputs.
|
|
80
|
+
*
|
|
81
|
+
* @param value - The value to encode (Uint8Array or hex string)
|
|
82
|
+
* @returns Base64-encoded string
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* utils.getBase64String(new Uint8Array([1, 2, 3]))
|
|
87
|
+
* utils.getBase64String('0x010203')
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
getBase64String(value: string | Uint8Array): string;
|
|
91
|
+
/**
|
|
92
|
+
* Derives an IOTA address from an Ed25519 public key.
|
|
93
|
+
* Uses the IOTA SDK's address derivation algorithm.
|
|
94
|
+
*
|
|
95
|
+
* @param publicKey - The Ed25519 public key (hex string)
|
|
96
|
+
* @returns The derived IOTA address
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* const address = utils.getAddressFromPublicKey('8c26e54e36c902c5...')
|
|
101
|
+
* // Returns: '0x9882188ba3e8070a...'
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
16
104
|
getAddressFromPublicKey(publicKey: string): string;
|
|
17
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Singleton instance of the Utils class.
|
|
108
|
+
* Use this for all IOTA utility operations throughout the SDK.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* import utils from './utils';
|
|
113
|
+
*
|
|
114
|
+
* if (utils.isValidAddress(address)) {
|
|
115
|
+
* // Process valid address
|
|
116
|
+
* }
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
18
119
|
declare const utils: Utils;
|
|
19
120
|
export default utils;
|
|
20
121
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA8D,MAAM,sBAAsB,CAAC;AAW7G;;;;GAIG;AACH,qBAAa,KAAM,YAAW,SAAS;IAKrC;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;;OAMG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC;;;;;;OAMG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ3C;;;;;OAKG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC;;;;;OAKG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQtC;;;;;;OAMG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAU5C;;;;;;OAMG;IACH,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO;IAanE;;;;;;;OAOG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAKlD;;;;;;;;;;;;OAYG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM;IAOnD;;;;;;;;;;;;OAYG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAInD;AAED;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC"}
|