@fuel-ts/account 0.92.0 → 0.93.0

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/index.mjs CHANGED
@@ -34,7 +34,7 @@ import { randomBytes as randomBytes2 } from "@fuel-ts/crypto";
34
34
  import { ErrorCode as ErrorCode15, FuelError as FuelError15 } from "@fuel-ts/errors";
35
35
  import { AbstractAccount } from "@fuel-ts/interfaces";
36
36
  import { bn as bn19 } from "@fuel-ts/math";
37
- import { arrayify as arrayify14, hexlify as hexlify13, isDefined as isDefined2 } from "@fuel-ts/utils";
37
+ import { arrayify as arrayify14, hexlify as hexlify13, isDefined as isDefined3 } from "@fuel-ts/utils";
38
38
  import { clone as clone4 } from "ramda";
39
39
 
40
40
  // src/providers/coin-quantity.ts
@@ -82,7 +82,7 @@ import {
82
82
  InputMessageCoder,
83
83
  TransactionCoder as TransactionCoder5
84
84
  } from "@fuel-ts/transactions";
85
- import { arrayify as arrayify11, hexlify as hexlify12, DateTime as DateTime2 } from "@fuel-ts/utils";
85
+ import { arrayify as arrayify11, hexlify as hexlify12, DateTime as DateTime2, isDefined as isDefined2 } from "@fuel-ts/utils";
86
86
  import { checkFuelCoreVersionCompatibility } from "@fuel-ts/versions";
87
87
  import { equalBytes } from "@noble/curves/abstract/utils";
88
88
  import { GraphQLClient } from "graphql-request";
@@ -2834,7 +2834,10 @@ var transactionRequestify = (obj) => {
2834
2834
  return CreateTransactionRequest.from(obj);
2835
2835
  }
2836
2836
  default: {
2837
- throw new FuelError8(ErrorCode8.INVALID_TRANSACTION_TYPE, `Invalid transaction type: ${type}.`);
2837
+ throw new FuelError8(
2838
+ ErrorCode8.UNSUPPORTED_TRANSACTION_TYPE,
2839
+ `Unsupported transaction type: ${type}.`
2840
+ );
2838
2841
  }
2839
2842
  }
2840
2843
  };
@@ -3090,8 +3093,8 @@ function getTransactionTypeName(transactionType) {
3090
3093
  return "Script" /* Script */;
3091
3094
  default:
3092
3095
  throw new FuelError10(
3093
- ErrorCode10.INVALID_TRANSACTION_TYPE,
3094
- `Invalid transaction type: ${transactionType}.`
3096
+ ErrorCode10.UNSUPPORTED_TRANSACTION_TYPE,
3097
+ `Unsupported transaction type: ${transactionType}.`
3095
3098
  );
3096
3099
  }
3097
3100
  }
@@ -3845,24 +3848,11 @@ function autoRetryFetch(fetchFn, options, retryAttemptNum = 0) {
3845
3848
  };
3846
3849
  }
3847
3850
 
3848
- // src/providers/utils/merge-quantities.ts
3849
- var mergeQuantities = (...coinQuantities) => {
3850
- const resultMap = {};
3851
- function addToMap({ amount, assetId }) {
3852
- if (resultMap[assetId]) {
3853
- resultMap[assetId] = resultMap[assetId].add(amount);
3854
- } else {
3855
- resultMap[assetId] = amount;
3856
- }
3857
- }
3858
- coinQuantities.forEach((arr) => arr.forEach(addToMap));
3859
- return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
3860
- };
3861
-
3862
3851
  // src/providers/provider.ts
3863
3852
  var MAX_RETRIES = 10;
3864
3853
  var RESOURCES_PAGE_SIZE_LIMIT = 512;
3865
3854
  var BLOCKS_PAGE_SIZE_LIMIT = 5;
3855
+ var DEFAULT_UTXOS_CACHE_TTL = 2e4;
3866
3856
  var processGqlChain = (chain) => {
3867
3857
  const { name, daHeight, consensusParameters, latestBlock } = chain;
3868
3858
  const {
@@ -3952,7 +3942,16 @@ var _Provider = class {
3952
3942
  this.options = { ...this.options, ...options };
3953
3943
  this.url = url;
3954
3944
  this.operations = this.createOperations();
3955
- this.cache = options.cacheUtxo ? new MemoryCache(options.cacheUtxo) : void 0;
3945
+ const { cacheUtxo } = this.options;
3946
+ if (isDefined2(cacheUtxo)) {
3947
+ if (cacheUtxo !== -1) {
3948
+ this.cache = new MemoryCache(cacheUtxo);
3949
+ } else {
3950
+ this.cache = void 0;
3951
+ }
3952
+ } else {
3953
+ this.cache = new MemoryCache(DEFAULT_UTXOS_CACHE_TTL);
3954
+ }
3956
3955
  }
3957
3956
  /** @hidden */
3958
3957
  static clearChainAndNodeCaches() {
@@ -4194,9 +4193,8 @@ Supported fuel-core version: ${supportedVersion}.`
4194
4193
  * @returns A promise that resolves to the transaction response object.
4195
4194
  */
4196
4195
  // #region Provider-sendTransaction
4197
- async sendTransaction(transactionRequestLike, { estimateTxDependencies = true, awaitExecution = false } = {}) {
4196
+ async sendTransaction(transactionRequestLike, { estimateTxDependencies = true } = {}) {
4198
4197
  const transactionRequest = transactionRequestify(transactionRequestLike);
4199
- __privateMethod(this, _cacheInputs, cacheInputs_fn).call(this, transactionRequest.inputs);
4200
4198
  if (estimateTxDependencies) {
4201
4199
  await this.estimateTxDependencies(transactionRequest);
4202
4200
  }
@@ -4205,27 +4203,10 @@ Supported fuel-core version: ${supportedVersion}.`
4205
4203
  if (transactionRequest.type === TransactionType8.Script) {
4206
4204
  abis = transactionRequest.abis;
4207
4205
  }
4208
- if (awaitExecution) {
4209
- const subscription = this.operations.submitAndAwait({ encodedTransaction });
4210
- for await (const { submitAndAwait } of subscription) {
4211
- if (submitAndAwait.type === "SqueezedOutStatus") {
4212
- throw new FuelError13(
4213
- ErrorCode13.TRANSACTION_SQUEEZED_OUT,
4214
- `Transaction Squeezed Out with reason: ${submitAndAwait.reason}`
4215
- );
4216
- }
4217
- if (submitAndAwait.type !== "SubmittedStatus") {
4218
- break;
4219
- }
4220
- }
4221
- const transactionId2 = transactionRequest.getTransactionId(this.getChainId());
4222
- const response = new TransactionResponse(transactionId2, this, abis);
4223
- await response.fetch();
4224
- return response;
4225
- }
4226
4206
  const {
4227
4207
  submit: { id: transactionId }
4228
4208
  } = await this.operations.submit({ encodedTransaction });
4209
+ __privateMethod(this, _cacheInputs, cacheInputs_fn).call(this, transactionRequest.inputs);
4229
4210
  return new TransactionResponse(transactionId, this, abis);
4230
4211
  }
4231
4212
  /**
@@ -4504,6 +4485,8 @@ Supported fuel-core version: ${supportedVersion}.`
4504
4485
  return { receipts: callResult[0].receipts };
4505
4486
  }
4506
4487
  /**
4488
+ * @hidden
4489
+ *
4507
4490
  * Returns a transaction cost to enable user
4508
4491
  * to set gasLimit and also reserve balance amounts
4509
4492
  * on the transaction.
@@ -4513,20 +4496,13 @@ Supported fuel-core version: ${supportedVersion}.`
4513
4496
  *
4514
4497
  * @returns A promise that resolves to the transaction cost object.
4515
4498
  */
4516
- async getTransactionCost(transactionRequestLike, { resourcesOwner, signatureCallback, quantitiesToContract = [] } = {}) {
4499
+ async getTransactionCost(transactionRequestLike, { signatureCallback } = {}) {
4517
4500
  const txRequestClone = clone3(transactionRequestify(transactionRequestLike));
4518
4501
  const isScriptTransaction = txRequestClone.type === TransactionType8.Script;
4519
- const baseAssetId = this.getBaseAssetId();
4520
4502
  const updateMaxFee = txRequestClone.maxFee.eq(0);
4521
- const coinOutputsQuantities = txRequestClone.getCoinOutputsQuantities();
4522
- const allQuantities = mergeQuantities(coinOutputsQuantities, quantitiesToContract);
4523
- txRequestClone.fundWithFakeUtxos(allQuantities, baseAssetId, resourcesOwner?.address);
4524
4503
  if (isScriptTransaction) {
4525
4504
  txRequestClone.gasLimit = bn17(0);
4526
4505
  }
4527
- if (resourcesOwner && "populateTransactionPredicateData" in resourcesOwner) {
4528
- resourcesOwner.populateTransactionPredicateData(txRequestClone);
4529
- }
4530
4506
  const signedRequest = clone3(txRequestClone);
4531
4507
  let addedSignatures = 0;
4532
4508
  if (signatureCallback && isScriptTransaction) {
@@ -4562,7 +4538,6 @@ Supported fuel-core version: ${supportedVersion}.`
4562
4538
  }));
4563
4539
  }
4564
4540
  return {
4565
- requiredQuantities: allQuantities,
4566
4541
  receipts,
4567
4542
  gasUsed,
4568
4543
  gasPrice,
@@ -4578,34 +4553,6 @@ Supported fuel-core version: ${supportedVersion}.`
4578
4553
  updateMaxFee
4579
4554
  };
4580
4555
  }
4581
- /**
4582
- * Get the required quantities and associated resources for a transaction.
4583
- *
4584
- * @param owner - address to add resources from.
4585
- * @param transactionRequestLike - transaction request to populate resources for.
4586
- * @param quantitiesToContract - quantities for the contract (optional).
4587
- *
4588
- * @returns a promise resolving to the required quantities for the transaction.
4589
- */
4590
- async getResourcesForTransaction(owner, transactionRequestLike, quantitiesToContract = []) {
4591
- const ownerAddress = Address2.fromAddressOrString(owner);
4592
- const transactionRequest = transactionRequestify(clone3(transactionRequestLike));
4593
- const transactionCost = await this.getTransactionCost(transactionRequest, {
4594
- quantitiesToContract
4595
- });
4596
- transactionRequest.addResources(
4597
- await this.getResourcesToSpend(ownerAddress, transactionCost.requiredQuantities)
4598
- );
4599
- const { requiredQuantities, ...txCost } = await this.getTransactionCost(transactionRequest, {
4600
- quantitiesToContract
4601
- });
4602
- const resources = await this.getResourcesToSpend(ownerAddress, requiredQuantities);
4603
- return {
4604
- resources,
4605
- requiredQuantities,
4606
- ...txCost
4607
- };
4608
- }
4609
4556
  /**
4610
4557
  * Returns coins for the given owner.
4611
4558
  *
@@ -5409,6 +5356,20 @@ var rawAssets = [
5409
5356
  ];
5410
5357
  var assets = resolveIconPaths(rawAssets, fuelAssetsBaseUrl);
5411
5358
 
5359
+ // src/providers/utils/merge-quantities.ts
5360
+ var mergeQuantities = (...coinQuantities) => {
5361
+ const resultMap = {};
5362
+ function addToMap({ amount, assetId }) {
5363
+ if (resultMap[assetId]) {
5364
+ resultMap[assetId] = resultMap[assetId].add(amount);
5365
+ } else {
5366
+ resultMap[assetId] = amount;
5367
+ }
5368
+ }
5369
+ coinQuantities.forEach((arr) => arr.forEach(addToMap));
5370
+ return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
5371
+ };
5372
+
5412
5373
  // src/utils/formatTransferToContractScriptData.ts
5413
5374
  import { BigNumberCoder as BigNumberCoder2 } from "@fuel-ts/abi-coder";
5414
5375
  import { BN as BN2 } from "@fuel-ts/math";
@@ -5749,9 +5710,8 @@ var Account = class extends AbstractAccount {
5749
5710
  scriptData
5750
5711
  });
5751
5712
  request.addContractInputAndOutput(contractAddress);
5752
- const txCost = await this.provider.getTransactionCost(request, {
5753
- resourcesOwner: this,
5754
- quantitiesToContract: [{ amount: bn19(amount), assetId: String(assetIdToTransfer) }]
5713
+ const txCost = await this.getTransactionCost(request, {
5714
+ quantities: [{ amount: bn19(amount), assetId: String(assetIdToTransfer) }]
5755
5715
  });
5756
5716
  request = this.validateGasLimitAndMaxFee({
5757
5717
  transactionRequest: request,
@@ -5786,8 +5746,8 @@ var Account = class extends AbstractAccount {
5786
5746
  const params = { script, ...txParams };
5787
5747
  const baseAssetId = this.provider.getBaseAssetId();
5788
5748
  let request = new ScriptTransactionRequest(params);
5789
- const quantitiesToContract = [{ amount: bn19(amount), assetId: baseAssetId }];
5790
- const txCost = await this.provider.getTransactionCost(request, { quantitiesToContract });
5749
+ const quantities = [{ amount: bn19(amount), assetId: baseAssetId }];
5750
+ const txCost = await this.getTransactionCost(request, { quantities });
5791
5751
  request = this.validateGasLimitAndMaxFee({
5792
5752
  transactionRequest: request,
5793
5753
  gasUsed: txCost.gasUsed,
@@ -5797,6 +5757,34 @@ var Account = class extends AbstractAccount {
5797
5757
  await this.fund(request, txCost);
5798
5758
  return this.sendTransaction(request);
5799
5759
  }
5760
+ /**
5761
+ * Returns a transaction cost to enable user
5762
+ * to set gasLimit and also reserve balance amounts
5763
+ * on the transaction.
5764
+ *
5765
+ * @param transactionRequestLike - The transaction request object.
5766
+ * @param transactionCostParams - The transaction cost parameters (optional).
5767
+ *
5768
+ * @returns A promise that resolves to the transaction cost object.
5769
+ */
5770
+ async getTransactionCost(transactionRequestLike, { signatureCallback, quantities = [] } = {}) {
5771
+ const txRequestClone = clone4(transactionRequestify(transactionRequestLike));
5772
+ const baseAssetId = this.provider.getBaseAssetId();
5773
+ const coinOutputsQuantities = txRequestClone.getCoinOutputsQuantities();
5774
+ const requiredQuantities = mergeQuantities(coinOutputsQuantities, quantities);
5775
+ const transactionFeeForDryRun = [{ assetId: baseAssetId, amount: bn19("100000000000000000") }];
5776
+ const resources = this.generateFakeResources(
5777
+ mergeQuantities(requiredQuantities, transactionFeeForDryRun)
5778
+ );
5779
+ txRequestClone.addResources(resources);
5780
+ const txCost = await this.provider.getTransactionCost(txRequestClone, {
5781
+ signatureCallback
5782
+ });
5783
+ return {
5784
+ ...txCost,
5785
+ requiredQuantities
5786
+ };
5787
+ }
5800
5788
  /**
5801
5789
  * Sign a message from the account via the connector.
5802
5790
  *
@@ -5833,7 +5821,7 @@ var Account = class extends AbstractAccount {
5833
5821
  * @param sendTransactionParams - The provider send transaction parameters (optional).
5834
5822
  * @returns A promise that resolves to the transaction response.
5835
5823
  */
5836
- async sendTransaction(transactionRequestLike, { estimateTxDependencies = true, awaitExecution } = {}) {
5824
+ async sendTransaction(transactionRequestLike, { estimateTxDependencies = true } = {}) {
5837
5825
  if (this._connector) {
5838
5826
  return this.provider.getTransactionResponse(
5839
5827
  await this._connector.sendTransaction(this.address.toString(), transactionRequestLike)
@@ -5844,7 +5832,6 @@ var Account = class extends AbstractAccount {
5844
5832
  await this.provider.estimateTxDependencies(transactionRequest);
5845
5833
  }
5846
5834
  return this.provider.sendTransaction(transactionRequest, {
5847
- awaitExecution,
5848
5835
  estimateTxDependencies: false
5849
5836
  });
5850
5837
  }
@@ -5889,9 +5876,7 @@ var Account = class extends AbstractAccount {
5889
5876
  /** @hidden * */
5890
5877
  async estimateAndFundTransaction(transactionRequest, txParams) {
5891
5878
  let request = transactionRequest;
5892
- const txCost = await this.provider.getTransactionCost(request, {
5893
- resourcesOwner: this
5894
- });
5879
+ const txCost = await this.getTransactionCost(request);
5895
5880
  request = this.validateGasLimitAndMaxFee({
5896
5881
  transactionRequest: request,
5897
5882
  gasUsed: txCost.gasUsed,
@@ -5909,7 +5894,7 @@ var Account = class extends AbstractAccount {
5909
5894
  txParams: { gasLimit: setGasLimit, maxFee: setMaxFee }
5910
5895
  }) {
5911
5896
  const request = transactionRequestify(transactionRequest);
5912
- if (!isDefined2(setGasLimit)) {
5897
+ if (!isDefined3(setGasLimit)) {
5913
5898
  request.gasLimit = gasUsed;
5914
5899
  } else if (gasUsed.gt(setGasLimit)) {
5915
5900
  throw new FuelError15(
@@ -5917,7 +5902,7 @@ var Account = class extends AbstractAccount {
5917
5902
  `Gas limit '${setGasLimit}' is lower than the required: '${gasUsed}'.`
5918
5903
  );
5919
5904
  }
5920
- if (!isDefined2(setMaxFee)) {
5905
+ if (!isDefined3(setMaxFee)) {
5921
5906
  request.maxFee = maxFee;
5922
5907
  } else if (maxFee.gt(setMaxFee)) {
5923
5908
  throw new FuelError15(
@@ -6214,17 +6199,16 @@ var BaseWalletUnlocked = class extends Account {
6214
6199
  *
6215
6200
  * @param transactionRequestLike - The transaction request to send.
6216
6201
  * @param estimateTxDependencies - Whether to estimate the transaction dependencies.
6217
- * @param awaitExecution - Whether to wait for the transaction to be executed.
6218
6202
  * @returns A promise that resolves to the TransactionResponse object.
6219
6203
  */
6220
- async sendTransaction(transactionRequestLike, { estimateTxDependencies = false, awaitExecution } = {}) {
6204
+ async sendTransaction(transactionRequestLike, { estimateTxDependencies = false } = {}) {
6221
6205
  const transactionRequest = transactionRequestify(transactionRequestLike);
6222
6206
  if (estimateTxDependencies) {
6223
6207
  await this.provider.estimateTxDependencies(transactionRequest);
6224
6208
  }
6225
6209
  return this.provider.sendTransaction(
6226
6210
  await this.populateTransactionWitnessesSignature(transactionRequest),
6227
- { awaitExecution, estimateTxDependencies: false }
6211
+ { estimateTxDependencies: false }
6228
6212
  );
6229
6213
  }
6230
6214
  /**
@@ -10287,6 +10271,7 @@ export {
10287
10271
  ChainName,
10288
10272
  ChangeOutputCollisionError,
10289
10273
  CreateTransactionRequest,
10274
+ DEFAULT_UTXOS_CACHE_TTL,
10290
10275
  Fuel,
10291
10276
  FuelConnector,
10292
10277
  FuelConnectorEventType,