@fuel-ts/account 0.0.0-rc-1936-20240328132546 → 0.0.0-rc-1895-20240328133917

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.

Potentially problematic release.


This version of @fuel-ts/account might be problematic. Click here for more details.

@@ -28952,9 +28952,9 @@ spurious results.`);
28952
28952
  // ../versions/dist/index.mjs
28953
28953
  function getBuiltinVersions() {
28954
28954
  return {
28955
- FORC: "0.51.1",
28955
+ FORC: "0.49.3",
28956
28956
  FUEL_CORE: "0.22.1",
28957
- FUELS: "0.78.0"
28957
+ FUELS: "0.79.0"
28958
28958
  };
28959
28959
  }
28960
28960
  function parseVersion(version2) {
@@ -38962,7 +38962,60 @@ ${MessageCoinFragmentFragmentDoc}`;
38962
38962
  var MAX_SCRIPT_DATA_LENGTH = 1024 * 1024 * 1024;
38963
38963
  var MAX_PREDICATE_LENGTH = 1024 * 1024;
38964
38964
  var MAX_PREDICATE_DATA_LENGTH = 1024 * 1024;
38965
+ var FAILED_REQUIRE_SIGNAL = "0xffffffffffff0000";
38965
38966
  var FAILED_TRANSFER_TO_ADDRESS_SIGNAL = "0xffffffffffff0001";
38967
+ var FAILED_ASSERT_EQ_SIGNAL = "0xffffffffffff0003";
38968
+ var FAILED_ASSERT_SIGNAL = "0xffffffffffff0004";
38969
+ var FAILED_ASSERT_NE_SIGNAL = "0xffffffffffff0005";
38970
+ var PANIC_REASONS = [
38971
+ "UnknownPanicReason",
38972
+ "Revert",
38973
+ "OutOfGas",
38974
+ "TransactionValidity",
38975
+ "MemoryOverflow",
38976
+ "ArithmeticOverflow",
38977
+ "ContractNotFound",
38978
+ "MemoryOwnership",
38979
+ "NotEnoughBalance",
38980
+ "ExpectedInternalContext",
38981
+ "AssetIdNotFound",
38982
+ "InputNotFound",
38983
+ "OutputNotFound",
38984
+ "WitnessNotFound",
38985
+ "TransactionMaturity",
38986
+ "InvalidMetadataIdentifier",
38987
+ "MalformedCallStructure",
38988
+ "ReservedRegisterNotWritable",
38989
+ "InvalidFlags",
38990
+ "InvalidImmediateValue",
38991
+ "ExpectedCoinInput",
38992
+ "EcalError",
38993
+ "MemoryWriteOverlap",
38994
+ "ContractNotInInputs",
38995
+ "InternalBalanceOverflow",
38996
+ "ContractMaxSize",
38997
+ "ExpectedUnallocatedStack",
38998
+ "MaxStaticContractsReached",
38999
+ "TransferAmountCannotBeZero",
39000
+ "ExpectedOutputVariable",
39001
+ "ExpectedParentInternalContext",
39002
+ "PredicateReturnedNonOne",
39003
+ "ContractIdAlreadyDeployed",
39004
+ "ContractMismatch",
39005
+ "MessageDataTooLong",
39006
+ "ArithmeticError",
39007
+ "ContractInstructionNotAllowed",
39008
+ "TransferZeroCoins",
39009
+ "InvalidInstruction",
39010
+ "MemoryNotExecutable",
39011
+ "PolicyIsNotSet",
39012
+ "PolicyNotFound",
39013
+ "TooManyReceipts",
39014
+ "BalanceOverflow",
39015
+ "InvalidBlockHeight",
39016
+ "TooManySlots"
39017
+ ];
39018
+ var PANIC_DOC_URL = "https://docs.rs/fuel-asm/latest/fuel_asm/enum.PanicReason.html";
38966
39019
 
38967
39020
  // src/providers/utils/receipts.ts
38968
39021
  var doesReceiptHaveMissingOutputVariables = (receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL;
@@ -39336,6 +39389,64 @@ ${MessageCoinFragmentFragmentDoc}`;
39336
39389
  });
39337
39390
  }
39338
39391
 
39392
+ // src/providers/utils/extract-tx-error.ts
39393
+ var assemblePanicError = (status) => {
39394
+ let errorMessage = `The transaction reverted with reason: "${status.reason}".`;
39395
+ if (PANIC_REASONS.includes(status.reason)) {
39396
+ errorMessage = `${errorMessage}
39397
+
39398
+ You can read more about this error at:
39399
+
39400
+ ${PANIC_DOC_URL}#variant.${status.reason}`;
39401
+ }
39402
+ return errorMessage;
39403
+ };
39404
+ var stringify2 = (obj) => JSON.stringify(obj, null, 2);
39405
+ var assembleRevertError = (receipts, logs) => {
39406
+ let errorMessage = "The transaction reverted with an unknown reason.";
39407
+ const revertReceipt = receipts.find(({ type: type3 }) => type3 === ReceiptType.Revert);
39408
+ if (revertReceipt) {
39409
+ const reasonHex = bn(revertReceipt.val).toHex();
39410
+ switch (reasonHex) {
39411
+ case FAILED_REQUIRE_SIGNAL: {
39412
+ errorMessage = `The transaction reverted because a "require" statement has thrown ${logs.length ? stringify2(logs[0]) : "an error."}.`;
39413
+ break;
39414
+ }
39415
+ case FAILED_ASSERT_EQ_SIGNAL: {
39416
+ const sufix = logs.length >= 2 ? ` comparing ${stringify2(logs[1])} and ${stringify2(logs[0])}.` : ".";
39417
+ errorMessage = `The transaction reverted because of an "assert_eq" statement${sufix}`;
39418
+ break;
39419
+ }
39420
+ case FAILED_ASSERT_NE_SIGNAL: {
39421
+ const sufix = logs.length >= 2 ? ` comparing ${stringify2(logs[1])} and ${stringify2(logs[0])}.` : ".";
39422
+ errorMessage = `The transaction reverted because of an "assert_ne" statement${sufix}`;
39423
+ break;
39424
+ }
39425
+ case FAILED_ASSERT_SIGNAL:
39426
+ errorMessage = `The transaction reverted because an "assert" statement failed to evaluate to true.`;
39427
+ break;
39428
+ case FAILED_TRANSFER_TO_ADDRESS_SIGNAL:
39429
+ errorMessage = `The transaction reverted because it's missing an "OutputChange".`;
39430
+ break;
39431
+ default:
39432
+ errorMessage = `The transaction reverted with an unknown reason: ${revertReceipt.val}`;
39433
+ }
39434
+ }
39435
+ return errorMessage;
39436
+ };
39437
+ var extractTxError = (params) => {
39438
+ const { receipts, status, logs } = params;
39439
+ const isPanic = receipts.some(({ type: type3 }) => type3 === ReceiptType.Panic);
39440
+ let err = status?.type === "FailureStatus" && isPanic ? assemblePanicError(status) : assembleRevertError(receipts, logs);
39441
+ err += `
39442
+
39443
+ logs: ${JSON.stringify(logs, null, 2)}`;
39444
+ err += `
39445
+
39446
+ receipts: ${JSON.stringify(receipts, null, 2)}`;
39447
+ return new FuelError(ErrorCode.SCRIPT_REVERTED, err);
39448
+ };
39449
+
39339
39450
  // src/providers/transaction-request/errors.ts
39340
39451
  var ChangeOutputCollisionError = class extends Error {
39341
39452
  name = "ChangeOutputCollisionError";
@@ -40107,6 +40218,7 @@ ${MessageCoinFragmentFragmentDoc}`;
40107
40218
  script;
40108
40219
  /** Script input data (parameters) */
40109
40220
  scriptData;
40221
+ abis;
40110
40222
  /**
40111
40223
  * Constructor for `ScriptTransactionRequest`.
40112
40224
  *
@@ -40117,6 +40229,7 @@ ${MessageCoinFragmentFragmentDoc}`;
40117
40229
  this.gasLimit = bn(gasLimit);
40118
40230
  this.script = arrayify(script ?? returnZeroScript.bytes);
40119
40231
  this.scriptData = arrayify(scriptData ?? returnZeroScript.encodeScriptData());
40232
+ this.abis = rest.abis;
40120
40233
  }
40121
40234
  /**
40122
40235
  * Converts the transaction request to a `TransactionScript`.
@@ -41002,6 +41115,19 @@ ${MessageCoinFragmentFragmentDoc}`;
41002
41115
  return transactionSummary;
41003
41116
  }
41004
41117
 
41118
+ // src/providers/transaction-response/getDecodedLogs.ts
41119
+ function getDecodedLogs(receipts, mainAbi, externalAbis = {}) {
41120
+ return receipts.reduce((logs, receipt) => {
41121
+ if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {
41122
+ const interfaceToUse = new Interface(externalAbis[receipt.id] || mainAbi);
41123
+ const data = receipt.type === ReceiptType.Log ? new BigNumberCoder("u64").encode(receipt.val0) : receipt.data;
41124
+ const [decodedLog] = interfaceToUse.decodeLog(data, receipt.val1.toNumber());
41125
+ logs.push(decodedLog);
41126
+ }
41127
+ return logs;
41128
+ }, []);
41129
+ }
41130
+
41005
41131
  // src/providers/transaction-response/transaction-response.ts
41006
41132
  var TransactionResponse2 = class {
41007
41133
  /** Transaction ID */
@@ -41012,15 +41138,17 @@ ${MessageCoinFragmentFragmentDoc}`;
41012
41138
  gasUsed = bn(0);
41013
41139
  /** The graphql Transaction with receipts object. */
41014
41140
  gqlTransaction;
41141
+ abis;
41015
41142
  /**
41016
41143
  * Constructor for `TransactionResponse`.
41017
41144
  *
41018
41145
  * @param id - The transaction ID.
41019
41146
  * @param provider - The provider.
41020
41147
  */
41021
- constructor(id, provider) {
41148
+ constructor(id, provider, abis) {
41022
41149
  this.id = id;
41023
41150
  this.provider = provider;
41151
+ this.abis = abis;
41024
41152
  }
41025
41153
  /**
41026
41154
  * Async constructor for `TransactionResponse`. This method can be used to create
@@ -41030,8 +41158,8 @@ ${MessageCoinFragmentFragmentDoc}`;
41030
41158
  * @param id - The transaction ID.
41031
41159
  * @param provider - The provider.
41032
41160
  */
41033
- static async create(id, provider) {
41034
- const response = new TransactionResponse2(id, provider);
41161
+ static async create(id, provider, abis) {
41162
+ const response = new TransactionResponse2(id, provider, abis);
41035
41163
  await response.fetch();
41036
41164
  return response;
41037
41165
  }
@@ -41135,6 +41263,26 @@ ${MessageCoinFragmentFragmentDoc}`;
41135
41263
  gqlTransaction: this.gqlTransaction,
41136
41264
  ...transactionSummary
41137
41265
  };
41266
+ let logs = [];
41267
+ if (this.abis) {
41268
+ logs = getDecodedLogs(
41269
+ transactionSummary.receipts,
41270
+ this.abis.main,
41271
+ this.abis.otherContractsAbis
41272
+ );
41273
+ transactionResult.logs = logs;
41274
+ }
41275
+ if (transactionResult.isStatusFailure) {
41276
+ const {
41277
+ receipts,
41278
+ gqlTransaction: { status }
41279
+ } = transactionResult;
41280
+ throw extractTxError({
41281
+ receipts,
41282
+ status,
41283
+ logs
41284
+ });
41285
+ }
41138
41286
  return transactionResult;
41139
41287
  }
41140
41288
  /**
@@ -41143,30 +41291,10 @@ ${MessageCoinFragmentFragmentDoc}`;
41143
41291
  * @param contractsAbiMap - The contracts ABI map.
41144
41292
  */
41145
41293
  async wait(contractsAbiMap) {
41146
- const result = await this.waitForResult(contractsAbiMap);
41147
- if (result.isStatusFailure) {
41148
- throw new FuelError(
41149
- ErrorCode.TRANSACTION_FAILED,
41150
- `Transaction failed: ${result.gqlTransaction.status.reason}`
41151
- );
41152
- }
41153
- return result;
41294
+ return this.waitForResult(contractsAbiMap);
41154
41295
  }
41155
41296
  };
41156
41297
 
41157
- // src/providers/transaction-response/getDecodedLogs.ts
41158
- function getDecodedLogs(receipts, mainAbi, externalAbis = {}) {
41159
- return receipts.reduce((logs, receipt) => {
41160
- if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {
41161
- const interfaceToUse = externalAbis[receipt.id] ? new Interface(externalAbis[receipt.id]) : new Interface(mainAbi);
41162
- const data = receipt.type === ReceiptType.Log ? new BigNumberCoder("u64").encode(receipt.val0) : receipt.data;
41163
- const [decodedLog] = interfaceToUse.decodeLog(data, receipt.val1.toNumber());
41164
- logs.push(decodedLog);
41165
- }
41166
- return logs;
41167
- }, []);
41168
- }
41169
-
41170
41298
  // src/providers/utils/auto-retry-fetch.ts
41171
41299
  function getWaitDelay(options, retryAttemptNum) {
41172
41300
  const duration = options.baseDelay ?? 150;
@@ -41501,6 +41629,10 @@ ${MessageCoinFragmentFragmentDoc}`;
41501
41629
  await this.estimateTxDependencies(transactionRequest);
41502
41630
  }
41503
41631
  const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());
41632
+ let abis;
41633
+ if (transactionRequest.type === TransactionType.Script) {
41634
+ abis = transactionRequest.abis;
41635
+ }
41504
41636
  if (awaitExecution) {
41505
41637
  const subscription = this.operations.submitAndAwait({ encodedTransaction });
41506
41638
  for await (const { submitAndAwait } of subscription) {
@@ -41515,14 +41647,14 @@ ${MessageCoinFragmentFragmentDoc}`;
41515
41647
  }
41516
41648
  }
41517
41649
  const transactionId2 = transactionRequest.getTransactionId(this.getChainId());
41518
- const response = new TransactionResponse2(transactionId2, this);
41650
+ const response = new TransactionResponse2(transactionId2, this, abis);
41519
41651
  await response.fetch();
41520
41652
  return response;
41521
41653
  }
41522
41654
  const {
41523
41655
  submit: { id: transactionId }
41524
41656
  } = await this.operations.submit({ encodedTransaction });
41525
- return new TransactionResponse2(transactionId, this);
41657
+ return new TransactionResponse2(transactionId, this, abis);
41526
41658
  }
41527
41659
  /**
41528
41660
  * Executes a transaction without actually submitting it to the chain.