@fuel-ts/account 0.0.0-rc-2045-20240422223402 → 0.0.0-rc-2037-20240423110545

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.

Files changed (35) hide show
  1. package/dist/index.global.js +86 -39
  2. package/dist/index.global.js.map +1 -1
  3. package/dist/index.js +201 -141
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +118 -64
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/predicate/predicate.d.ts +17 -2
  8. package/dist/predicate/predicate.d.ts.map +1 -1
  9. package/dist/providers/coin.d.ts +2 -1
  10. package/dist/providers/coin.d.ts.map +1 -1
  11. package/dist/providers/message.d.ts +1 -0
  12. package/dist/providers/message.d.ts.map +1 -1
  13. package/dist/providers/transaction-request/helpers.d.ts +10 -0
  14. package/dist/providers/transaction-request/helpers.d.ts.map +1 -0
  15. package/dist/providers/transaction-request/index.d.ts +1 -0
  16. package/dist/providers/transaction-request/index.d.ts.map +1 -1
  17. package/dist/providers/transaction-request/transaction-request.d.ts +4 -20
  18. package/dist/providers/transaction-request/transaction-request.d.ts.map +1 -1
  19. package/dist/test-utils/index.d.ts +1 -0
  20. package/dist/test-utils/index.d.ts.map +1 -1
  21. package/dist/test-utils/resources.d.ts +4 -0
  22. package/dist/test-utils/resources.d.ts.map +1 -0
  23. package/dist/test-utils/seedTestWallet.d.ts +1 -1
  24. package/dist/test-utils/seedTestWallet.d.ts.map +1 -1
  25. package/dist/test-utils/transactionRequest.d.ts +5 -0
  26. package/dist/test-utils/transactionRequest.d.ts.map +1 -0
  27. package/dist/test-utils.global.js +64 -40
  28. package/dist/test-utils.global.js.map +1 -1
  29. package/dist/test-utils.js +173 -135
  30. package/dist/test-utils.js.map +1 -1
  31. package/dist/test-utils.mjs +99 -64
  32. package/dist/test-utils.mjs.map +1 -1
  33. package/dist/wallet/base-wallet-unlocked.d.ts +2 -2
  34. package/dist/wallet/base-wallet-unlocked.d.ts.map +1 -1
  35. package/package.json +15 -15
package/dist/index.mjs CHANGED
@@ -76,7 +76,7 @@ import { Address as Address2 } from "@fuel-ts/address";
76
76
  import { ErrorCode as ErrorCode13, FuelError as FuelError13 } from "@fuel-ts/errors";
77
77
  import { BN, bn as bn15, max } from "@fuel-ts/math";
78
78
  import {
79
- InputType as InputType6,
79
+ InputType as InputType7,
80
80
  TransactionType as TransactionType8,
81
81
  InputMessageCoder,
82
82
  TransactionCoder as TransactionCoder5
@@ -1173,7 +1173,7 @@ import { bn as bn7 } from "@fuel-ts/math";
1173
1173
  import {
1174
1174
  PolicyType,
1175
1175
  TransactionCoder,
1176
- InputType as InputType2,
1176
+ InputType as InputType3,
1177
1177
  OutputType as OutputType2,
1178
1178
  TransactionType
1179
1179
  } from "@fuel-ts/transactions";
@@ -1676,6 +1676,28 @@ var NoWitnessByOwnerError = class extends Error {
1676
1676
  name = "NoWitnessByOwnerError";
1677
1677
  };
1678
1678
 
1679
+ // src/providers/transaction-request/helpers.ts
1680
+ import { InputType as InputType2 } from "@fuel-ts/transactions";
1681
+ var isRequestInputCoin = (input) => input.type === InputType2.Coin;
1682
+ var isRequestInputMessage = (input) => input.type === InputType2.Message;
1683
+ var isRequestInputResource = (input) => isRequestInputCoin(input) || isRequestInputMessage(input);
1684
+ var getRequestInputResourceOwner = (input) => isRequestInputCoin(input) ? input.owner : input.recipient;
1685
+ var isRequestInputResourceFromOwner = (input, owner) => getRequestInputResourceOwner(input) === owner.toB256();
1686
+ var cacheResources = (resources) => resources.reduce(
1687
+ (cache2, resource) => {
1688
+ if (isCoin(resource)) {
1689
+ cache2.utxos.push(resource.id);
1690
+ } else {
1691
+ cache2.messages.push(resource.nonce);
1692
+ }
1693
+ return cache2;
1694
+ },
1695
+ {
1696
+ utxos: [],
1697
+ messages: []
1698
+ }
1699
+ );
1700
+
1679
1701
  // src/providers/transaction-request/witness.ts
1680
1702
  import { arrayify as arrayify4, hexlify as hexlify6 } from "@fuel-ts/utils";
1681
1703
  var witnessify = (value) => {
@@ -1866,7 +1888,7 @@ var BaseTransactionRequest = class {
1866
1888
  */
1867
1889
  getCoinInputs() {
1868
1890
  return this.inputs.filter(
1869
- (input) => input.type === InputType2.Coin
1891
+ (input) => input.type === InputType3.Coin
1870
1892
  );
1871
1893
  }
1872
1894
  /**
@@ -1898,9 +1920,9 @@ var BaseTransactionRequest = class {
1898
1920
  const ownerAddress = addressify(owner);
1899
1921
  const found = this.inputs.find((input) => {
1900
1922
  switch (input.type) {
1901
- case InputType2.Coin:
1923
+ case InputType3.Coin:
1902
1924
  return hexlify7(input.owner) === ownerAddress.toB256();
1903
- case InputType2.Message:
1925
+ case InputType3.Message:
1904
1926
  return hexlify7(input.recipient) === ownerAddress.toB256();
1905
1927
  default:
1906
1928
  return false;
@@ -1916,8 +1938,8 @@ var BaseTransactionRequest = class {
1916
1938
  * @param predicate - Predicate bytes.
1917
1939
  * @param predicateData - Predicate data bytes.
1918
1940
  */
1919
- addCoinInput(coin, predicate) {
1920
- const { assetId, owner, amount } = coin;
1941
+ addCoinInput(coin) {
1942
+ const { assetId, owner, amount, id, predicate } = coin;
1921
1943
  let witnessIndex;
1922
1944
  if (predicate) {
1923
1945
  witnessIndex = 0;
@@ -1928,14 +1950,14 @@ var BaseTransactionRequest = class {
1928
1950
  }
1929
1951
  }
1930
1952
  const input = {
1931
- ...coin,
1932
- type: InputType2.Coin,
1953
+ id,
1954
+ type: InputType3.Coin,
1933
1955
  owner: owner.toB256(),
1934
1956
  amount,
1935
1957
  assetId,
1936
1958
  txPointer: "0x00000000000000000000000000000000",
1937
1959
  witnessIndex,
1938
- predicate: predicate?.bytes
1960
+ predicate
1939
1961
  };
1940
1962
  this.pushInput(input);
1941
1963
  this.addChangeOutput(owner, assetId);
@@ -1948,8 +1970,8 @@ var BaseTransactionRequest = class {
1948
1970
  * @param predicate - Predicate bytes.
1949
1971
  * @param predicateData - Predicate data bytes.
1950
1972
  */
1951
- addMessageInput(message, predicate) {
1952
- const { recipient, sender, amount } = message;
1973
+ addMessageInput(message) {
1974
+ const { recipient, sender, amount, predicate, nonce } = message;
1953
1975
  const assetId = BaseAssetId2;
1954
1976
  let witnessIndex;
1955
1977
  if (predicate) {
@@ -1961,13 +1983,13 @@ var BaseTransactionRequest = class {
1961
1983
  }
1962
1984
  }
1963
1985
  const input = {
1964
- ...message,
1965
- type: InputType2.Message,
1986
+ nonce,
1987
+ type: InputType3.Message,
1966
1988
  sender: sender.toB256(),
1967
1989
  recipient: recipient.toB256(),
1968
1990
  amount,
1969
1991
  witnessIndex,
1970
- predicate: predicate?.bytes
1992
+ predicate
1971
1993
  };
1972
1994
  this.pushInput(input);
1973
1995
  this.addChangeOutput(recipient, assetId);
@@ -1998,32 +2020,6 @@ var BaseTransactionRequest = class {
1998
2020
  resources.forEach((resource) => this.addResource(resource));
1999
2021
  return this;
2000
2022
  }
2001
- /**
2002
- * Adds multiple resources to the transaction by adding coin/message inputs and change
2003
- * outputs from the related assetIds.
2004
- *
2005
- * @param resources - The resources to add.
2006
- * @returns This transaction.
2007
- */
2008
- addPredicateResource(resource, predicate) {
2009
- if (isCoin(resource)) {
2010
- this.addCoinInput(resource, predicate);
2011
- } else {
2012
- this.addMessageInput(resource, predicate);
2013
- }
2014
- return this;
2015
- }
2016
- /**
2017
- * Adds multiple predicate coin/message inputs to the transaction and change outputs
2018
- * from the related assetIds.
2019
- *
2020
- * @param resources - The resources to add.
2021
- * @returns This transaction.
2022
- */
2023
- addPredicateResources(resources, predicate) {
2024
- resources.forEach((resource) => this.addPredicateResource(resource, predicate));
2025
- return this;
2026
- }
2027
2023
  /**
2028
2024
  * Adds a coin output to the transaction.
2029
2025
  *
@@ -2172,16 +2168,20 @@ var BaseTransactionRequest = class {
2172
2168
  toJSON() {
2173
2169
  return normalizeJSON(this);
2174
2170
  }
2171
+ removeWitness(index) {
2172
+ this.witnesses.splice(index, 1);
2173
+ this.adjustWitnessIndexes(index);
2174
+ }
2175
2175
  updatePredicateInputs(inputs) {
2176
2176
  this.inputs.forEach((i) => {
2177
2177
  let correspondingInput;
2178
2178
  switch (i.type) {
2179
- case InputType2.Coin:
2180
- correspondingInput = inputs.find((x) => x.type === InputType2.Coin && x.owner === i.owner);
2179
+ case InputType3.Coin:
2180
+ correspondingInput = inputs.find((x) => x.type === InputType3.Coin && x.owner === i.owner);
2181
2181
  break;
2182
- case InputType2.Message:
2182
+ case InputType3.Message:
2183
2183
  correspondingInput = inputs.find(
2184
- (x) => x.type === InputType2.Message && x.sender === i.sender
2184
+ (x) => x.type === InputType3.Message && x.sender === i.sender
2185
2185
  );
2186
2186
  break;
2187
2187
  default:
@@ -2194,6 +2194,13 @@ var BaseTransactionRequest = class {
2194
2194
  }
2195
2195
  });
2196
2196
  }
2197
+ adjustWitnessIndexes(removedIndex) {
2198
+ this.inputs.filter(isRequestInputResource).forEach((input) => {
2199
+ if (input.witnessIndex > removedIndex) {
2200
+ input.witnessIndex -= 1;
2201
+ }
2202
+ });
2203
+ }
2197
2204
  };
2198
2205
 
2199
2206
  // src/providers/transaction-request/create-transaction-request.ts
@@ -2206,7 +2213,7 @@ import { arrayify as arrayify6, hexlify as hexlify9 } from "@fuel-ts/utils";
2206
2213
  import { ZeroBytes32 as ZeroBytes325 } from "@fuel-ts/address/configs";
2207
2214
  import { uint64ToBytesBE, sha256 } from "@fuel-ts/hasher";
2208
2215
  import { bn as bn8 } from "@fuel-ts/math";
2209
- import { TransactionType as TransactionType2, InputType as InputType3, OutputType as OutputType3, TransactionCoder as TransactionCoder2 } from "@fuel-ts/transactions";
2216
+ import { TransactionType as TransactionType2, InputType as InputType4, OutputType as OutputType3, TransactionCoder as TransactionCoder2 } from "@fuel-ts/transactions";
2210
2217
  import { concat as concat2 } from "@fuel-ts/utils";
2211
2218
  import { clone as clone2 } from "ramda";
2212
2219
  function hashTransaction(transactionRequest, chainId) {
@@ -2217,7 +2224,7 @@ function hashTransaction(transactionRequest, chainId) {
2217
2224
  transaction.inputs = transaction.inputs.map((input) => {
2218
2225
  const inputClone = clone2(input);
2219
2226
  switch (inputClone.type) {
2220
- case InputType3.Coin: {
2227
+ case InputType4.Coin: {
2221
2228
  inputClone.txPointer = {
2222
2229
  blockHeight: 0,
2223
2230
  txIndex: 0
@@ -2225,11 +2232,11 @@ function hashTransaction(transactionRequest, chainId) {
2225
2232
  inputClone.predicateGasUsed = bn8(0);
2226
2233
  return inputClone;
2227
2234
  }
2228
- case InputType3.Message: {
2235
+ case InputType4.Message: {
2229
2236
  inputClone.predicateGasUsed = bn8(0);
2230
2237
  return inputClone;
2231
2238
  }
2232
- case InputType3.Contract: {
2239
+ case InputType4.Contract: {
2233
2240
  inputClone.txPointer = {
2234
2241
  blockHeight: 0,
2235
2242
  txIndex: 0
@@ -2395,7 +2402,7 @@ import { Interface } from "@fuel-ts/abi-coder";
2395
2402
  import { addressify as addressify2 } from "@fuel-ts/address";
2396
2403
  import { ZeroBytes32 as ZeroBytes327 } from "@fuel-ts/address/configs";
2397
2404
  import { bn as bn10 } from "@fuel-ts/math";
2398
- import { InputType as InputType4, OutputType as OutputType5, TransactionType as TransactionType4 } from "@fuel-ts/transactions";
2405
+ import { InputType as InputType5, OutputType as OutputType5, TransactionType as TransactionType4 } from "@fuel-ts/transactions";
2399
2406
  import { arrayify as arrayify8, hexlify as hexlify10 } from "@fuel-ts/utils";
2400
2407
 
2401
2408
  // src/providers/transaction-request/scripts.ts
@@ -2479,7 +2486,7 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
2479
2486
  */
2480
2487
  getContractInputs() {
2481
2488
  return this.inputs.filter(
2482
- (input) => input.type === InputType4.Contract
2489
+ (input) => input.type === InputType5.Contract
2483
2490
  );
2484
2491
  }
2485
2492
  /**
@@ -2555,7 +2562,7 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
2555
2562
  return this;
2556
2563
  }
2557
2564
  const inputIndex = super.pushInput({
2558
- type: InputType4.Contract,
2565
+ type: InputType5.Contract,
2559
2566
  contractId: contractAddress.toB256(),
2560
2567
  txPointer: "0x00000000000000000000000000000000"
2561
2568
  });
@@ -2750,7 +2757,7 @@ var getFunctionCall = ({ abi, receipt, rawPayload, maxInputs }) => {
2750
2757
 
2751
2758
  // src/providers/transaction-summary/input.ts
2752
2759
  import { ErrorCode as ErrorCode9, FuelError as FuelError9 } from "@fuel-ts/errors";
2753
- import { InputType as InputType5 } from "@fuel-ts/transactions";
2760
+ import { InputType as InputType6 } from "@fuel-ts/transactions";
2754
2761
  function getInputsByTypes(inputs, types) {
2755
2762
  return inputs.filter((i) => types.includes(i.type));
2756
2763
  }
@@ -2758,16 +2765,16 @@ function getInputsByType(inputs, type) {
2758
2765
  return inputs.filter((i) => i.type === type);
2759
2766
  }
2760
2767
  function getInputsCoin(inputs) {
2761
- return getInputsByType(inputs, InputType5.Coin);
2768
+ return getInputsByType(inputs, InputType6.Coin);
2762
2769
  }
2763
2770
  function getInputsMessage(inputs) {
2764
- return getInputsByType(inputs, InputType5.Message);
2771
+ return getInputsByType(inputs, InputType6.Message);
2765
2772
  }
2766
2773
  function getInputsCoinAndMessage(inputs) {
2767
- return getInputsByTypes(inputs, [InputType5.Coin, InputType5.Message]);
2774
+ return getInputsByTypes(inputs, [InputType6.Coin, InputType6.Message]);
2768
2775
  }
2769
2776
  function getInputsContract(inputs) {
2770
- return getInputsByType(inputs, InputType5.Contract);
2777
+ return getInputsByType(inputs, InputType6.Contract);
2771
2778
  }
2772
2779
  function getInputFromAssetId(inputs, assetId) {
2773
2780
  const coinInputs = getInputsCoin(inputs);
@@ -2786,7 +2793,7 @@ function getInputContractFromIndex(inputs, inputIndex) {
2786
2793
  if (!contractInput) {
2787
2794
  return void 0;
2788
2795
  }
2789
- if (contractInput.type !== InputType5.Contract) {
2796
+ if (contractInput.type !== InputType6.Contract) {
2790
2797
  throw new FuelError9(
2791
2798
  ErrorCode9.INVALID_TRANSACTION_INPUT,
2792
2799
  `Contract input should be of type 'contract'.`
@@ -2795,10 +2802,10 @@ function getInputContractFromIndex(inputs, inputIndex) {
2795
2802
  return contractInput;
2796
2803
  }
2797
2804
  function getInputAccountAddress(input) {
2798
- if (input.type === InputType5.Coin) {
2805
+ if (input.type === InputType6.Coin) {
2799
2806
  return input.owner.toString();
2800
2807
  }
2801
- if (input.type === InputType5.Message) {
2808
+ if (input.type === InputType6.Message) {
2802
2809
  return input.recipient.toString();
2803
2810
  }
2804
2811
  return "";
@@ -4542,7 +4549,7 @@ cacheInputs_fn = function(inputs) {
4542
4549
  return;
4543
4550
  }
4544
4551
  inputs.forEach((input) => {
4545
- if (input.type === InputType6.Coin) {
4552
+ if (input.type === InputType7.Coin) {
4546
4553
  this.cache?.set(input.id);
4547
4554
  }
4548
4555
  });
@@ -8711,7 +8718,7 @@ import {
8711
8718
  import { Address as Address9 } from "@fuel-ts/address";
8712
8719
  import { BaseAssetId as BaseAssetId4 } from "@fuel-ts/address/configs";
8713
8720
  import { ErrorCode as ErrorCode24, FuelError as FuelError24 } from "@fuel-ts/errors";
8714
- import { ByteArrayCoder, InputType as InputType7 } from "@fuel-ts/transactions";
8721
+ import { ByteArrayCoder } from "@fuel-ts/transactions";
8715
8722
  import { arrayify as arrayify20, hexlify as hexlify19 } from "@fuel-ts/utils";
8716
8723
 
8717
8724
  // src/predicate/utils/getPredicateRoot.ts
@@ -8770,10 +8777,15 @@ var Predicate = class extends Account {
8770
8777
  populateTransactionPredicateData(transactionRequestLike) {
8771
8778
  const request = transactionRequestify(transactionRequestLike);
8772
8779
  const { policies } = BaseTransactionRequest.getPolicyMeta(request);
8773
- request.inputs?.forEach((input) => {
8774
- if (input.type === InputType7.Coin && hexlify19(input.owner) === this.address.toB256()) {
8780
+ const placeholderIndex = this.getIndexFromPlaceholderWitness(request);
8781
+ if (placeholderIndex !== -1) {
8782
+ request.removeWitness(placeholderIndex);
8783
+ }
8784
+ request.inputs.filter(isRequestInputResource).forEach((input) => {
8785
+ if (isRequestInputResourceFromOwner(input, this.address)) {
8775
8786
  input.predicate = this.bytes;
8776
8787
  input.predicateData = this.getPredicateData(policies.length);
8788
+ input.witnessIndex = 0;
8777
8789
  }
8778
8790
  });
8779
8791
  return request;
@@ -8811,6 +8823,20 @@ var Predicate = class extends Account {
8811
8823
  const transactionRequest = this.populateTransactionPredicateData(transactionRequestLike);
8812
8824
  return super.simulateTransaction(transactionRequest);
8813
8825
  }
8826
+ /**
8827
+ * Retrieves resources satisfying the spend query for the account.
8828
+ *
8829
+ * @param quantities - Coins to retrieve.
8830
+ * @param excludedIds - IDs of resources to be excluded from the query.
8831
+ * @returns A promise that resolves to an array of Resources.
8832
+ */
8833
+ async getResourcesToSpend(quantities, excludedIds) {
8834
+ const resources = await super.getResourcesToSpend(quantities, excludedIds);
8835
+ return resources.map((resource) => ({
8836
+ ...resource,
8837
+ predicate: hexlify19(this.bytes)
8838
+ }));
8839
+ }
8814
8840
  getPredicateData(policiesLength) {
8815
8841
  if (!this.predicateData.length) {
8816
8842
  return new Uint8Array();
@@ -8890,6 +8916,28 @@ var Predicate = class extends Account {
8890
8916
  }
8891
8917
  return mutatedBytes;
8892
8918
  }
8919
+ /**
8920
+ * Returns the index of the witness placeholder that was added to this predicate.
8921
+ * If no witness placeholder was added, it returns -1.
8922
+ * @param request - The transaction request.
8923
+ * @returns The index of the witness placeholder, or -1 if there is no witness placeholder.
8924
+ */
8925
+ getIndexFromPlaceholderWitness(request) {
8926
+ const predicateInputs = request.inputs.filter(isRequestInputResource).filter((input) => isRequestInputResourceFromOwner(input, this.address));
8927
+ let index = -1;
8928
+ const hasEmptyPredicateInputs = predicateInputs.find((input) => !input.predicate);
8929
+ if (hasEmptyPredicateInputs) {
8930
+ index = hasEmptyPredicateInputs.witnessIndex;
8931
+ const allInputsAreEmpty = predicateInputs.every((input) => !input.predicate);
8932
+ if (!allInputsAreEmpty) {
8933
+ const wasFilledInputAddedFirst = !!predicateInputs[0]?.predicate;
8934
+ if (wasFilledInputAddedFirst) {
8935
+ index = -1;
8936
+ }
8937
+ }
8938
+ }
8939
+ return index;
8940
+ }
8893
8941
  };
8894
8942
 
8895
8943
  // src/connectors/fuel.ts
@@ -9612,6 +9660,7 @@ export {
9612
9660
  assets,
9613
9661
  buildBlockExplorerUrl,
9614
9662
  cacheFor,
9663
+ cacheResources,
9615
9664
  calculateMetadataGasForTxCreate,
9616
9665
  calculateMetadataGasForTxScript,
9617
9666
  calculatePriceWithFactor,
@@ -9658,6 +9707,7 @@ export {
9658
9707
  getReceiptsMessageOut,
9659
9708
  getReceiptsTransferOut,
9660
9709
  getReceiptsWithMissingData,
9710
+ getRequestInputResourceOwner,
9661
9711
  getTransactionStatusName,
9662
9712
  getTransactionSummary,
9663
9713
  getTransactionSummaryFromRequest,
@@ -9671,6 +9721,10 @@ export {
9671
9721
  isMessage,
9672
9722
  isRawCoin,
9673
9723
  isRawMessage,
9724
+ isRequestInputCoin,
9725
+ isRequestInputMessage,
9726
+ isRequestInputResource,
9727
+ isRequestInputResourceFromOwner,
9674
9728
  isType,
9675
9729
  isTypeCreate,
9676
9730
  isTypeMint,