@algorandfoundation/algokit-utils 7.0.0 → 8.0.0-beta.1
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 +14 -3
- package/account/account.d.ts +4 -1
- package/account/account.js +4 -3
- package/account/account.js.map +1 -1
- package/account/account.mjs +5 -4
- package/account/account.mjs.map +1 -1
- package/account/get-dispenser-account.d.ts +1 -1
- package/amount.d.ts +1 -0
- package/amount.js +3 -2
- package/amount.js.map +1 -1
- package/amount.mjs +3 -3
- package/amount.mjs.map +1 -1
- package/app-client.d.ts +4 -4
- package/app-client.js +4 -4
- package/app-client.js.map +1 -1
- package/app-client.mjs +4 -4
- package/app-client.mjs.map +1 -1
- package/app-deploy.js +23 -5
- package/app-deploy.js.map +1 -1
- package/app-deploy.mjs +24 -6
- package/app-deploy.mjs.map +1 -1
- package/app.js +7 -4
- package/app.js.map +1 -1
- package/app.mjs +7 -4
- package/app.mjs.map +1 -1
- package/index.js +1 -1
- package/index.mjs +2 -2
- package/indexer-lookup.d.ts +10 -8
- package/indexer-lookup.js +14 -10
- package/indexer-lookup.js.map +1 -1
- package/indexer-lookup.mjs +14 -10
- package/indexer-lookup.mjs.map +1 -1
- package/network-client.d.ts +1 -7
- package/network-client.js +2 -9
- package/network-client.js.map +1 -1
- package/network-client.mjs +2 -9
- package/network-client.mjs.map +1 -1
- package/package.json +2 -2
- package/testing/_asset.d.ts +2 -1
- package/testing/account.d.ts +4 -3
- package/testing/account.js +8 -2
- package/testing/account.js.map +1 -1
- package/testing/account.mjs +9 -3
- package/testing/account.mjs.map +1 -1
- package/testing/fixtures/algorand-fixture.js +5 -6
- package/testing/fixtures/algorand-fixture.js.map +1 -1
- package/testing/fixtures/algorand-fixture.mjs +5 -6
- package/testing/fixtures/algorand-fixture.mjs.map +1 -1
- package/testing/test-logger.js +7 -1
- package/testing/test-logger.js.map +1 -1
- package/testing/test-logger.mjs +7 -1
- package/testing/test-logger.mjs.map +1 -1
- package/transaction/perform-atomic-transaction-composer-simulate.d.ts +4 -1
- package/transaction/perform-atomic-transaction-composer-simulate.js +14 -10
- package/transaction/perform-atomic-transaction-composer-simulate.js.map +1 -1
- package/transaction/perform-atomic-transaction-composer-simulate.mjs +15 -11
- package/transaction/perform-atomic-transaction-composer-simulate.mjs.map +1 -1
- package/transaction/transaction.d.ts +1 -17
- package/transaction/transaction.js +110 -82
- package/transaction/transaction.js.map +1 -1
- package/transaction/transaction.mjs +112 -83
- package/transaction/transaction.mjs.map +1 -1
- package/transfer/transfer.js +3 -1
- package/transfer/transfer.js.map +1 -1
- package/transfer/transfer.mjs +3 -1
- package/transfer/transfer.mjs.map +1 -1
- package/types/account-manager.d.ts +20 -20
- package/types/account-manager.js +27 -20
- package/types/account-manager.js.map +1 -1
- package/types/account-manager.mjs +28 -21
- package/types/account-manager.mjs.map +1 -1
- package/types/account.d.ts +8 -8
- package/types/account.js +2 -2
- package/types/account.js.map +1 -1
- package/types/account.mjs +3 -3
- package/types/account.mjs.map +1 -1
- package/types/algo-http-client-with-retry.d.ts +1 -2
- package/types/algo-http-client-with-retry.js +33 -3
- package/types/algo-http-client-with-retry.js.map +1 -1
- package/types/algo-http-client-with-retry.mjs +32 -2
- package/types/algo-http-client-with-retry.mjs.map +1 -1
- package/types/algorand-client-transaction-creator.d.ts +11 -11
- package/types/algorand-client-transaction-sender.d.ts +97 -97
- package/types/algorand-client-transaction-sender.js.map +1 -1
- package/types/algorand-client-transaction-sender.mjs.map +1 -1
- package/types/algorand-client.d.ts +3 -3
- package/types/algorand-client.js +1 -1
- package/types/algorand-client.js.map +1 -1
- package/types/algorand-client.mjs +1 -1
- package/types/algorand-client.mjs.map +1 -1
- package/types/app-client.d.ts +280 -279
- package/types/app-client.js +10 -10
- package/types/app-client.js.map +1 -1
- package/types/app-client.mjs +11 -11
- package/types/app-client.mjs.map +1 -1
- package/types/app-deployer.d.ts +4 -4
- package/types/app-deployer.js +22 -23
- package/types/app-deployer.js.map +1 -1
- package/types/app-deployer.mjs +23 -24
- package/types/app-deployer.mjs.map +1 -1
- package/types/app-factory.d.ts +128 -138
- package/types/app-factory.js +4 -3
- package/types/app-factory.js.map +1 -1
- package/types/app-factory.mjs +5 -4
- package/types/app-factory.mjs.map +1 -1
- package/types/app-manager.d.ts +5 -5
- package/types/app-manager.js +11 -15
- package/types/app-manager.js.map +1 -1
- package/types/app-manager.mjs +12 -16
- package/types/app-manager.mjs.map +1 -1
- package/types/app.d.ts +4 -4
- package/types/app.js.map +1 -1
- package/types/app.mjs.map +1 -1
- package/types/asset-manager.d.ts +5 -5
- package/types/asset-manager.js +8 -11
- package/types/asset-manager.js.map +1 -1
- package/types/asset-manager.mjs +8 -11
- package/types/asset-manager.mjs.map +1 -1
- package/types/client-manager.d.ts +2 -9
- package/types/client-manager.js +9 -19
- package/types/client-manager.js.map +1 -1
- package/types/client-manager.mjs +9 -19
- package/types/client-manager.mjs.map +1 -1
- package/types/composer.d.ts +22 -22
- package/types/composer.js +73 -83
- package/types/composer.js.map +1 -1
- package/types/composer.mjs +74 -84
- package/types/composer.mjs.map +1 -1
- package/types/dispenser-client.d.ts +2 -1
- package/types/dispenser-client.js +5 -1
- package/types/dispenser-client.js.map +1 -1
- package/types/dispenser-client.mjs +5 -1
- package/types/dispenser-client.mjs.map +1 -1
- package/types/indexer.d.ts +74 -755
- package/types/indexer.js.map +1 -1
- package/types/indexer.mjs.map +1 -1
- package/types/kmd-account-manager.d.ts +2 -2
- package/types/kmd-account-manager.js.map +1 -1
- package/types/kmd-account-manager.mjs.map +1 -1
- package/types/network-client.d.ts +1 -1
- package/types/network-client.js.map +1 -1
- package/types/network-client.mjs.map +1 -1
- package/types/testing.d.ts +5 -6
- package/types/urlTokenBaseHTTPClient.d.ts +0 -40
- package/types/urlTokenBaseHTTPClient.js +0 -153
- package/types/urlTokenBaseHTTPClient.js.map +0 -1
- package/types/urlTokenBaseHTTPClient.mjs +0 -151
- package/types/urlTokenBaseHTTPClient.mjs.map +0 -1
package/types/composer.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import algosdk from 'algosdk';
|
|
1
|
+
import algosdk, { Address } from 'algosdk';
|
|
2
2
|
import { Config } from '../config.mjs';
|
|
3
3
|
import { encodeLease, sendAtomicTransactionComposer, getABIReturnValue } from '../transaction/transaction.mjs';
|
|
4
4
|
import { APP_PAGE_MAX_SIZE } from './app.mjs';
|
|
@@ -8,8 +8,10 @@ import { genesisIdIsLocalNet } from './network-client.mjs';
|
|
|
8
8
|
|
|
9
9
|
var AtomicTransactionComposer = algosdk.AtomicTransactionComposer;
|
|
10
10
|
var isTransactionWithSigner = algosdk.isTransactionWithSigner;
|
|
11
|
-
var encodeAddress = algosdk.encodeAddress;
|
|
12
11
|
var modelsv2 = algosdk.modelsv2;
|
|
12
|
+
const address = (address) => {
|
|
13
|
+
return typeof address === 'string' ? Address.fromString(address) : address;
|
|
14
|
+
};
|
|
13
15
|
const MAX_TRANSACTION_GROUP_SIZE = 16;
|
|
14
16
|
/** TransactionComposer helps you compose and execute transactions as a transaction group. */
|
|
15
17
|
class TransactionComposer {
|
|
@@ -25,7 +27,7 @@ class TransactionComposer {
|
|
|
25
27
|
/** Transactions that have not yet been composed */
|
|
26
28
|
this.txns = [];
|
|
27
29
|
/** The default transaction validity window */
|
|
28
|
-
this.defaultValidityWindow =
|
|
30
|
+
this.defaultValidityWindow = 10n;
|
|
29
31
|
/** Whether the validity window was explicitly set on construction */
|
|
30
32
|
this.defaultValidityWindowIsExplicit = false;
|
|
31
33
|
this.algod = params.algod;
|
|
@@ -45,7 +47,7 @@ class TransactionComposer {
|
|
|
45
47
|
addTransaction(transaction, signer) {
|
|
46
48
|
this.txns.push({
|
|
47
49
|
txn: transaction,
|
|
48
|
-
signer: signer ?? this.getSigner(
|
|
50
|
+
signer: signer ?? this.getSigner(transaction.sender),
|
|
49
51
|
type: 'txnWithSigner',
|
|
50
52
|
});
|
|
51
53
|
return this;
|
|
@@ -240,13 +242,11 @@ class TransactionComposer {
|
|
|
240
242
|
return this;
|
|
241
243
|
}
|
|
242
244
|
/** Build an ATC and return transactions ready to be incorporated into a broader set of transactions this composer is composing */
|
|
243
|
-
buildAtc(atc
|
|
245
|
+
buildAtc(atc) {
|
|
244
246
|
const group = atc.buildGroup();
|
|
245
247
|
const txnWithSigners = group.map((ts, idx) => {
|
|
246
248
|
// Remove underlying group ID from the transaction since it will be re-grouped when this TransactionComposer is built
|
|
247
249
|
ts.txn.group = undefined;
|
|
248
|
-
// Process transaction if a function is provided
|
|
249
|
-
ts.txn = processTransaction?.(ts.txn, idx) ?? ts.txn;
|
|
250
250
|
// If this was a method call stash the ABIMethod for later
|
|
251
251
|
if (atc['methodCalls'].get(idx)) {
|
|
252
252
|
this.txnMethodMap.set(ts.txn.txID(), atc['methodCalls'].get(idx));
|
|
@@ -255,39 +255,42 @@ class TransactionComposer {
|
|
|
255
255
|
});
|
|
256
256
|
return txnWithSigners;
|
|
257
257
|
}
|
|
258
|
-
commonTxnBuildStep(
|
|
258
|
+
commonTxnBuildStep(buildTxn, params, txnParams) {
|
|
259
|
+
// We are going to mutate suggested params, let's create a clone first
|
|
260
|
+
txnParams.suggestedParams = { ...txnParams.suggestedParams };
|
|
259
261
|
if (params.lease)
|
|
260
|
-
|
|
262
|
+
txnParams.lease = encodeLease(params.lease);
|
|
261
263
|
if (params.rekeyTo)
|
|
262
|
-
|
|
264
|
+
txnParams.rekeyTo = address(params.rekeyTo);
|
|
263
265
|
const encoder = new TextEncoder();
|
|
264
266
|
if (params.note)
|
|
265
|
-
|
|
267
|
+
txnParams.note = (typeof params.note === 'string' ? encoder.encode(params.note) : params.note);
|
|
266
268
|
if (params.firstValidRound) {
|
|
267
|
-
|
|
269
|
+
txnParams.suggestedParams.firstValid = params.firstValidRound;
|
|
268
270
|
}
|
|
269
271
|
if (params.lastValidRound) {
|
|
270
|
-
|
|
272
|
+
txnParams.suggestedParams.lastValid = params.lastValidRound;
|
|
271
273
|
}
|
|
272
274
|
else {
|
|
273
275
|
// If the validity window isn't set in this transaction or by default and we are pointing at
|
|
274
276
|
// LocalNet set a bigger window to avoid dead transactions
|
|
275
|
-
const window = params.validityWindow
|
|
276
|
-
|
|
277
|
-
|
|
277
|
+
const window = params.validityWindow
|
|
278
|
+
? BigInt(params.validityWindow)
|
|
279
|
+
: !this.defaultValidityWindowIsExplicit && genesisIdIsLocalNet(txnParams.suggestedParams.genesisID ?? 'unknown')
|
|
280
|
+
? 1000n
|
|
281
|
+
: this.defaultValidityWindow;
|
|
282
|
+
txnParams.suggestedParams.lastValid = BigInt(txnParams.suggestedParams.firstValid) + window;
|
|
278
283
|
}
|
|
279
284
|
if (params.staticFee !== undefined && params.extraFee !== undefined) {
|
|
280
285
|
throw Error('Cannot set both staticFee and extraFee');
|
|
281
286
|
}
|
|
282
287
|
if (params.staticFee !== undefined) {
|
|
283
|
-
|
|
288
|
+
txnParams.suggestedParams.fee = params.staticFee.microAlgo;
|
|
289
|
+
txnParams.suggestedParams.flatFee = true;
|
|
284
290
|
}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
txn.fee += Number(params.extraFee.microAlgo);
|
|
289
|
-
}
|
|
290
|
-
txn.flatFee = true;
|
|
291
|
+
const txn = buildTxn(txnParams);
|
|
292
|
+
if (params.extraFee)
|
|
293
|
+
txn.fee += params.extraFee.microAlgo;
|
|
291
294
|
if (params.maxFee !== undefined && txn.fee > params.maxFee.microAlgo) {
|
|
292
295
|
throw Error(`Transaction fee ${txn.fee} µALGO is greater than maxFee ${params.maxFee}`);
|
|
293
296
|
}
|
|
@@ -342,7 +345,7 @@ class TransactionComposer {
|
|
|
342
345
|
? 'signer' in params.signer
|
|
343
346
|
? params.signer.signer
|
|
344
347
|
: params.signer
|
|
345
|
-
: this.getSigner(
|
|
348
|
+
: this.getSigner(txn.sender)
|
|
346
349
|
: TransactionComposer.NULL_SIGNER,
|
|
347
350
|
});
|
|
348
351
|
}
|
|
@@ -359,7 +362,7 @@ class TransactionComposer {
|
|
|
359
362
|
? (await this.appManager.compileTeal(params.clearStateProgram)).compiledBase64ToBytes
|
|
360
363
|
: params.clearStateProgram
|
|
361
364
|
: undefined;
|
|
362
|
-
|
|
365
|
+
const txnParams = {
|
|
363
366
|
appID: appId,
|
|
364
367
|
sender: params.sender,
|
|
365
368
|
suggestedParams,
|
|
@@ -394,43 +397,45 @@ class TransactionComposer {
|
|
|
394
397
|
note: undefined,
|
|
395
398
|
lease: undefined,
|
|
396
399
|
rekeyTo: undefined,
|
|
397
|
-
}
|
|
400
|
+
};
|
|
401
|
+
// Build the transaction
|
|
402
|
+
this.commonTxnBuildStep((txnParams) => {
|
|
403
|
+
methodAtc.addMethodCall(txnParams);
|
|
404
|
+
return methodAtc.buildGroup()[methodAtc.count() - 1].txn;
|
|
405
|
+
}, params, txnParams);
|
|
398
406
|
// Process the ATC to get a set of transactions ready for broader grouping
|
|
399
|
-
|
|
400
|
-
return this.buildAtc(methodAtc, (txn, idx) => idx === methodAtc.count() - 1 ? this.commonTxnBuildStep(params, txn, suggestedParams) : txn);
|
|
407
|
+
return this.buildAtc(methodAtc);
|
|
401
408
|
}
|
|
402
409
|
buildPayment(params, suggestedParams) {
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
410
|
+
return this.commonTxnBuildStep(algosdk.makePaymentTxnWithSuggestedParamsFromObject, params, {
|
|
411
|
+
sender: params.sender,
|
|
412
|
+
receiver: params.receiver,
|
|
406
413
|
amount: params.amount.microAlgo,
|
|
407
414
|
closeRemainderTo: params.closeRemainderTo,
|
|
408
415
|
suggestedParams,
|
|
409
416
|
});
|
|
410
|
-
return this.commonTxnBuildStep(params, txn, suggestedParams);
|
|
411
417
|
}
|
|
412
418
|
buildAssetCreate(params, suggestedParams) {
|
|
413
|
-
|
|
414
|
-
|
|
419
|
+
return this.commonTxnBuildStep(algosdk.makeAssetCreateTxnWithSuggestedParamsFromObject, params, {
|
|
420
|
+
sender: params.sender,
|
|
415
421
|
total: params.total,
|
|
416
422
|
decimals: params.decimals ?? 0,
|
|
417
423
|
assetName: params.assetName,
|
|
418
424
|
unitName: params.unitName,
|
|
419
425
|
assetURL: params.url,
|
|
420
426
|
defaultFrozen: params.defaultFrozen ?? false,
|
|
421
|
-
assetMetadataHash: params.metadataHash,
|
|
427
|
+
assetMetadataHash: typeof params.metadataHash === 'string' ? Buffer.from(params.metadataHash, 'utf-8') : params.metadataHash,
|
|
422
428
|
manager: params.manager,
|
|
423
429
|
reserve: params.reserve,
|
|
424
430
|
freeze: params.freeze,
|
|
425
431
|
clawback: params.clawback,
|
|
426
432
|
suggestedParams,
|
|
427
433
|
});
|
|
428
|
-
return this.commonTxnBuildStep(params, txn, suggestedParams);
|
|
429
434
|
}
|
|
430
435
|
buildAssetConfig(params, suggestedParams) {
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
assetIndex:
|
|
436
|
+
return this.commonTxnBuildStep(algosdk.makeAssetConfigTxnWithSuggestedParamsFromObject, params, {
|
|
437
|
+
sender: params.sender,
|
|
438
|
+
assetIndex: params.assetId,
|
|
434
439
|
suggestedParams,
|
|
435
440
|
manager: params.manager,
|
|
436
441
|
reserve: params.reserve,
|
|
@@ -438,40 +443,36 @@ class TransactionComposer {
|
|
|
438
443
|
clawback: params.clawback,
|
|
439
444
|
strictEmptyAddressChecking: false,
|
|
440
445
|
});
|
|
441
|
-
return this.commonTxnBuildStep(params, txn, suggestedParams);
|
|
442
446
|
}
|
|
443
447
|
buildAssetDestroy(params, suggestedParams) {
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
assetIndex:
|
|
448
|
+
return this.commonTxnBuildStep(algosdk.makeAssetDestroyTxnWithSuggestedParamsFromObject, params, {
|
|
449
|
+
sender: params.sender,
|
|
450
|
+
assetIndex: params.assetId,
|
|
447
451
|
suggestedParams,
|
|
448
452
|
});
|
|
449
|
-
return this.commonTxnBuildStep(params, txn, suggestedParams);
|
|
450
453
|
}
|
|
451
454
|
buildAssetFreeze(params, suggestedParams) {
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
assetIndex:
|
|
455
|
+
return this.commonTxnBuildStep(algosdk.makeAssetFreezeTxnWithSuggestedParamsFromObject, params, {
|
|
456
|
+
sender: params.sender,
|
|
457
|
+
assetIndex: params.assetId,
|
|
455
458
|
freezeTarget: params.account,
|
|
456
|
-
|
|
459
|
+
frozen: params.frozen,
|
|
457
460
|
suggestedParams,
|
|
458
461
|
});
|
|
459
|
-
return this.commonTxnBuildStep(params, txn, suggestedParams);
|
|
460
462
|
}
|
|
461
463
|
buildAssetTransfer(params, suggestedParams) {
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
assetIndex:
|
|
464
|
+
return this.commonTxnBuildStep(algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject, params, {
|
|
465
|
+
sender: params.sender,
|
|
466
|
+
receiver: params.receiver,
|
|
467
|
+
assetIndex: params.assetId,
|
|
466
468
|
amount: params.amount,
|
|
467
469
|
suggestedParams,
|
|
468
470
|
closeRemainderTo: params.closeAssetTo,
|
|
469
|
-
|
|
471
|
+
assetSender: params.clawbackTarget,
|
|
470
472
|
});
|
|
471
|
-
return this.commonTxnBuildStep(params, txn, suggestedParams);
|
|
472
473
|
}
|
|
473
474
|
async buildAppCall(params, suggestedParams) {
|
|
474
|
-
const appId =
|
|
475
|
+
const appId = 'appId' in params ? params.appId : 0n;
|
|
475
476
|
const approvalProgram = 'approvalProgram' in params
|
|
476
477
|
? typeof params.approvalProgram === 'string'
|
|
477
478
|
? (await this.appManager.compileTeal(params.approvalProgram)).compiledBase64ToBytes
|
|
@@ -483,7 +484,7 @@ class TransactionComposer {
|
|
|
483
484
|
: params.clearStateProgram
|
|
484
485
|
: undefined;
|
|
485
486
|
const sdkParams = {
|
|
486
|
-
|
|
487
|
+
sender: params.sender,
|
|
487
488
|
suggestedParams,
|
|
488
489
|
appArgs: params.args,
|
|
489
490
|
onComplete: params.onComplete ?? algosdk.OnApplicationComplete.NoOpOC,
|
|
@@ -494,12 +495,11 @@ class TransactionComposer {
|
|
|
494
495
|
approvalProgram,
|
|
495
496
|
clearProgram: clearStateProgram,
|
|
496
497
|
};
|
|
497
|
-
|
|
498
|
-
if (appId === 0) {
|
|
498
|
+
if (appId === 0n) {
|
|
499
499
|
if (sdkParams.approvalProgram === undefined || sdkParams.clearProgram === undefined) {
|
|
500
500
|
throw new Error('approvalProgram and clearStateProgram are required for application creation');
|
|
501
501
|
}
|
|
502
|
-
|
|
502
|
+
return this.commonTxnBuildStep(algosdk.makeApplicationCreateTxnFromObject, params, {
|
|
503
503
|
...sdkParams,
|
|
504
504
|
extraPages: 'extraProgramPages' in params
|
|
505
505
|
? (params.extraProgramPages ?? Math.floor((approvalProgram.length + clearStateProgram.length) / APP_PAGE_MAX_SIZE))
|
|
@@ -513,38 +513,28 @@ class TransactionComposer {
|
|
|
513
513
|
});
|
|
514
514
|
}
|
|
515
515
|
else {
|
|
516
|
-
|
|
516
|
+
return this.commonTxnBuildStep(algosdk.makeApplicationCallTxnFromObject, params, { ...sdkParams, appIndex: appId });
|
|
517
517
|
}
|
|
518
|
-
return this.commonTxnBuildStep(params, txn, suggestedParams);
|
|
519
518
|
}
|
|
520
519
|
buildKeyReg(params, suggestedParams) {
|
|
521
|
-
let txn;
|
|
522
520
|
if ('voteKey' in params) {
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
txn = algosdk.makeKeyRegistrationTxnWithSuggestedParamsFromObject({
|
|
526
|
-
from: params.sender,
|
|
521
|
+
return this.commonTxnBuildStep(algosdk.makeKeyRegistrationTxnWithSuggestedParamsFromObject, params, {
|
|
522
|
+
sender: params.sender,
|
|
527
523
|
voteKey: params.voteKey,
|
|
528
524
|
selectionKey: params.selectionKey,
|
|
529
|
-
voteFirst:
|
|
530
|
-
voteLast:
|
|
531
|
-
voteKeyDilution:
|
|
525
|
+
voteFirst: params.voteFirst,
|
|
526
|
+
voteLast: params.voteLast,
|
|
527
|
+
voteKeyDilution: params.voteKeyDilution,
|
|
532
528
|
suggestedParams,
|
|
533
529
|
nonParticipation: false,
|
|
534
530
|
stateProofKey: params.stateProofKey,
|
|
535
531
|
});
|
|
536
|
-
if (params.voteFirst === 0n) {
|
|
537
|
-
txn.voteFirst = 0;
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
else {
|
|
541
|
-
txn = algosdk.makeKeyRegistrationTxnWithSuggestedParamsFromObject({
|
|
542
|
-
from: params.sender,
|
|
543
|
-
suggestedParams,
|
|
544
|
-
nonParticipation: params.preventAccountFromEverParticipatingAgain,
|
|
545
|
-
});
|
|
546
532
|
}
|
|
547
|
-
return this.commonTxnBuildStep(
|
|
533
|
+
return this.commonTxnBuildStep(algosdk.makeKeyRegistrationTxnWithSuggestedParamsFromObject, params, {
|
|
534
|
+
sender: params.sender,
|
|
535
|
+
suggestedParams,
|
|
536
|
+
nonParticipation: params.preventAccountFromEverParticipatingAgain,
|
|
537
|
+
});
|
|
548
538
|
}
|
|
549
539
|
/** Builds all transaction types apart from `txnWithSigner`, `atc` and `methodCall` since those ones can have custom signers that need to be retrieved. */
|
|
550
540
|
async buildTxn(txn, suggestedParams) {
|
|
@@ -677,9 +667,9 @@ class TransactionComposer {
|
|
|
677
667
|
const group = (await this.build()).transactions;
|
|
678
668
|
let waitRounds = params?.maxRoundsToWaitForConfirmation;
|
|
679
669
|
if (waitRounds === undefined) {
|
|
680
|
-
const lastRound = group.reduce((max, txn) =>
|
|
681
|
-
const { firstRound } = await this.getSuggestedParams();
|
|
682
|
-
waitRounds = lastRound - firstRound + 1;
|
|
670
|
+
const lastRound = group.reduce((max, txn) => (txn.txn.lastValid > max ? txn.txn.lastValid : BigInt(max)), 0n);
|
|
671
|
+
const { firstValid: firstRound } = await this.getSuggestedParams();
|
|
672
|
+
waitRounds = Number(BigInt(lastRound) - BigInt(firstRound)) + 1;
|
|
683
673
|
}
|
|
684
674
|
return await sendAtomicTransactionComposer({
|
|
685
675
|
atc: this.atc,
|