@fuel-ts/account 0.0.0-rc-2034-20240411123358 → 0.0.0-rc-2021-20240411141803

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 (54) hide show
  1. package/README.md +1 -1
  2. package/dist/account.d.ts +5 -4
  3. package/dist/account.d.ts.map +1 -1
  4. package/dist/configs.d.ts.map +1 -1
  5. package/dist/configs.global.js +1 -1
  6. package/dist/configs.global.js.map +1 -1
  7. package/dist/configs.js +1 -1
  8. package/dist/configs.js.map +1 -1
  9. package/dist/configs.mjs +1 -1
  10. package/dist/configs.mjs.map +1 -1
  11. package/dist/index.global.js +819 -568
  12. package/dist/index.global.js.map +1 -1
  13. package/dist/index.js +805 -572
  14. package/dist/index.js.map +1 -1
  15. package/dist/index.mjs +639 -407
  16. package/dist/index.mjs.map +1 -1
  17. package/dist/predicate/predicate.d.ts +10 -2
  18. package/dist/predicate/predicate.d.ts.map +1 -1
  19. package/dist/providers/__generated__/operations.d.ts +888 -322
  20. package/dist/providers/__generated__/operations.d.ts.map +1 -1
  21. package/dist/providers/coin-quantity.d.ts +1 -1
  22. package/dist/providers/coin-quantity.d.ts.map +1 -1
  23. package/dist/providers/coin.d.ts +4 -2
  24. package/dist/providers/coin.d.ts.map +1 -1
  25. package/dist/providers/fuel-graphql-subscriber.d.ts.map +1 -1
  26. package/dist/providers/message.d.ts +3 -1
  27. package/dist/providers/message.d.ts.map +1 -1
  28. package/dist/providers/provider.d.ts +37 -30
  29. package/dist/providers/provider.d.ts.map +1 -1
  30. package/dist/providers/transaction-request/create-transaction-request.d.ts.map +1 -1
  31. package/dist/providers/transaction-request/input.d.ts +2 -2
  32. package/dist/providers/transaction-request/input.d.ts.map +1 -1
  33. package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
  34. package/dist/providers/transaction-request/transaction-request.d.ts +8 -25
  35. package/dist/providers/transaction-request/transaction-request.d.ts.map +1 -1
  36. package/dist/providers/transaction-request/utils.d.ts +3 -0
  37. package/dist/providers/transaction-request/utils.d.ts.map +1 -1
  38. package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
  39. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +2 -0
  40. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
  41. package/dist/providers/transaction-summary/calculate-transaction-fee.d.ts +3 -2
  42. package/dist/providers/transaction-summary/calculate-transaction-fee.d.ts.map +1 -1
  43. package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
  44. package/dist/providers/utils/gas.d.ts +8 -2
  45. package/dist/providers/utils/gas.d.ts.map +1 -1
  46. package/dist/test-utils/launchNode.d.ts.map +1 -1
  47. package/dist/test-utils.global.js +1535 -1067
  48. package/dist/test-utils.global.js.map +1 -1
  49. package/dist/test-utils.js +780 -565
  50. package/dist/test-utils.js.map +1 -1
  51. package/dist/test-utils.mjs +631 -416
  52. package/dist/test-utils.mjs.map +1 -1
  53. package/dist/wallet/base-wallet-unlocked.d.ts.map +1 -1
  54. package/package.json +17 -17
@@ -27,8 +27,9 @@ import { Address as Address3 } from "@fuel-ts/address";
27
27
  import { BaseAssetId as BaseAssetId3 } from "@fuel-ts/address/configs";
28
28
  import { ErrorCode as ErrorCode15, FuelError as FuelError15 } from "@fuel-ts/errors";
29
29
  import { AbstractAccount } from "@fuel-ts/interfaces";
30
- import { bn as bn17 } from "@fuel-ts/math";
30
+ import { bn as bn18 } from "@fuel-ts/math";
31
31
  import { arrayify as arrayify14 } from "@fuel-ts/utils";
32
+ import { clone as clone4 } from "ramda";
32
33
 
33
34
  // src/providers/coin-quantity.ts
34
35
  import { BaseAssetId } from "@fuel-ts/address/configs";
@@ -37,24 +38,24 @@ import { hexlify } from "@fuel-ts/utils";
37
38
  var coinQuantityfy = (coinQuantityLike) => {
38
39
  let assetId;
39
40
  let amount;
40
- let max2;
41
+ let max;
41
42
  if (Array.isArray(coinQuantityLike)) {
42
43
  amount = coinQuantityLike[0];
43
44
  assetId = coinQuantityLike[1] ?? BaseAssetId;
44
- max2 = coinQuantityLike[2] ?? void 0;
45
+ max = coinQuantityLike[2] ?? void 0;
45
46
  } else {
46
47
  amount = coinQuantityLike.amount;
47
48
  assetId = coinQuantityLike.assetId ?? BaseAssetId;
48
- max2 = coinQuantityLike.max ?? void 0;
49
+ max = coinQuantityLike.max ?? void 0;
49
50
  }
50
51
  const bnAmount = bn(amount);
51
52
  return {
52
53
  assetId: hexlify(assetId),
53
54
  amount: bnAmount.lt(1) ? bn(1) : bnAmount,
54
- max: max2 ? bn(max2) : void 0
55
+ max: max ? bn(max) : void 0
55
56
  };
56
57
  };
57
- var addAmountToAsset = (params) => {
58
+ var addAmountToCoinQuantities = (params) => {
58
59
  const { amount, assetId } = params;
59
60
  const coinQuantities = [...params.coinQuantities];
60
61
  const assetIdx = coinQuantities.findIndex((coinQuantity) => coinQuantity.assetId === assetId);
@@ -69,9 +70,9 @@ var addAmountToAsset = (params) => {
69
70
  // src/providers/provider.ts
70
71
  import { Address as Address2 } from "@fuel-ts/address";
71
72
  import { ErrorCode as ErrorCode13, FuelError as FuelError13 } from "@fuel-ts/errors";
72
- import { BN, bn as bn15, max } from "@fuel-ts/math";
73
+ import { BN, bn as bn16 } from "@fuel-ts/math";
73
74
  import {
74
- InputType as InputType6,
75
+ InputType as InputType7,
75
76
  TransactionType as TransactionType8,
76
77
  InputMessageCoder,
77
78
  TransactionCoder as TransactionCoder5
@@ -87,14 +88,10 @@ import { clone as clone3 } from "ramda";
87
88
  import gql from "graphql-tag";
88
89
  var ReceiptFragmentFragmentDoc = gql`
89
90
  fragment receiptFragment on Receipt {
90
- contract {
91
- id
92
- }
91
+ id
93
92
  pc
94
93
  is
95
- to {
96
- id
97
- }
94
+ to
98
95
  toAddress
99
96
  amount
100
97
  assetId
@@ -132,10 +129,16 @@ var TransactionStatusFragmentFragmentDoc = gql`
132
129
  id
133
130
  }
134
131
  time
132
+ receipts {
133
+ ...receiptFragment
134
+ }
135
135
  programState {
136
136
  returnType
137
137
  data
138
138
  }
139
+ receipts {
140
+ ...receiptFragment
141
+ }
139
142
  }
140
143
  ... on FailureStatus {
141
144
  block {
@@ -143,26 +146,24 @@ var TransactionStatusFragmentFragmentDoc = gql`
143
146
  }
144
147
  time
145
148
  reason
149
+ receipts {
150
+ ...receiptFragment
151
+ }
146
152
  }
147
153
  ... on SqueezedOutStatus {
148
154
  reason
149
155
  }
150
156
  }
151
- `;
157
+ ${ReceiptFragmentFragmentDoc}`;
152
158
  var TransactionFragmentFragmentDoc = gql`
153
159
  fragment transactionFragment on Transaction {
154
160
  id
155
161
  rawPayload
156
- gasPrice
157
- receipts {
158
- ...receiptFragment
159
- }
160
162
  status {
161
163
  ...transactionStatusFragment
162
164
  }
163
165
  }
164
- ${ReceiptFragmentFragmentDoc}
165
- ${TransactionStatusFragmentFragmentDoc}`;
166
+ ${TransactionStatusFragmentFragmentDoc}`;
166
167
  var InputEstimatePredicatesFragmentFragmentDoc = gql`
167
168
  fragment inputEstimatePredicatesFragment on Input {
168
169
  ... on InputCoin {
@@ -180,6 +181,46 @@ var TransactionEstimatePredicatesFragmentFragmentDoc = gql`
180
181
  }
181
182
  }
182
183
  ${InputEstimatePredicatesFragmentFragmentDoc}`;
184
+ var DryRunFailureStatusFragmentFragmentDoc = gql`
185
+ fragment dryRunFailureStatusFragment on DryRunFailureStatus {
186
+ reason
187
+ programState {
188
+ returnType
189
+ data
190
+ }
191
+ }
192
+ `;
193
+ var DryRunSuccessStatusFragmentFragmentDoc = gql`
194
+ fragment dryRunSuccessStatusFragment on DryRunSuccessStatus {
195
+ programState {
196
+ returnType
197
+ data
198
+ }
199
+ }
200
+ `;
201
+ var DryRunTransactionStatusFragmentFragmentDoc = gql`
202
+ fragment dryRunTransactionStatusFragment on DryRunTransactionStatus {
203
+ ... on DryRunFailureStatus {
204
+ ...dryRunFailureStatusFragment
205
+ }
206
+ ... on DryRunSuccessStatus {
207
+ ...dryRunSuccessStatusFragment
208
+ }
209
+ }
210
+ ${DryRunFailureStatusFragmentFragmentDoc}
211
+ ${DryRunSuccessStatusFragmentFragmentDoc}`;
212
+ var DryRunTransactionExecutionStatusFragmentFragmentDoc = gql`
213
+ fragment dryRunTransactionExecutionStatusFragment on DryRunTransactionExecutionStatus {
214
+ id
215
+ status {
216
+ ...dryRunTransactionStatusFragment
217
+ }
218
+ receipts {
219
+ ...receiptFragment
220
+ }
221
+ }
222
+ ${DryRunTransactionStatusFragmentFragmentDoc}
223
+ ${ReceiptFragmentFragmentDoc}`;
183
224
  var CoinFragmentFragmentDoc = gql`
184
225
  fragment coinFragment on Coin {
185
226
  __typename
@@ -187,7 +228,6 @@ var CoinFragmentFragmentDoc = gql`
187
228
  owner
188
229
  amount
189
230
  assetId
190
- maturity
191
231
  blockCreated
192
232
  txCreatedIdx
193
233
  }
@@ -232,7 +272,6 @@ var MessageProofFragmentFragmentDoc = gql`
232
272
  prevRoot
233
273
  time
234
274
  applicationHash
235
- messageReceiptRoot
236
275
  messageReceiptCount
237
276
  }
238
277
  commitBlockHeader {
@@ -244,7 +283,6 @@ var MessageProofFragmentFragmentDoc = gql`
244
283
  prevRoot
245
284
  time
246
285
  applicationHash
247
- messageReceiptRoot
248
286
  messageReceiptCount
249
287
  }
250
288
  sender
@@ -264,8 +302,8 @@ var BalanceFragmentFragmentDoc = gql`
264
302
  var BlockFragmentFragmentDoc = gql`
265
303
  fragment blockFragment on Block {
266
304
  id
305
+ height
267
306
  header {
268
- height
269
307
  time
270
308
  }
271
309
  transactions {
@@ -323,6 +361,11 @@ var DependentCostFragmentFragmentDoc = gql`
323
361
  `;
324
362
  var GasCostsFragmentFragmentDoc = gql`
325
363
  fragment GasCostsFragment on GasCosts {
364
+ version {
365
+ ... on Version {
366
+ value
367
+ }
368
+ }
326
369
  add
327
370
  addi
328
371
  aloc
@@ -335,7 +378,6 @@ var GasCostsFragmentFragmentDoc = gql`
335
378
  cb
336
379
  cfei
337
380
  cfsi
338
- croo
339
381
  div
340
382
  divi
341
383
  ecr1
@@ -418,6 +460,9 @@ var GasCostsFragmentFragmentDoc = gql`
418
460
  ccp {
419
461
  ...DependentCostFragment
420
462
  }
463
+ croo {
464
+ ...DependentCostFragment
465
+ }
421
466
  csiz {
422
467
  ...DependentCostFragment
423
468
  }
@@ -477,6 +522,11 @@ var GasCostsFragmentFragmentDoc = gql`
477
522
  ${DependentCostFragmentFragmentDoc}`;
478
523
  var ConsensusParametersFragmentFragmentDoc = gql`
479
524
  fragment consensusParametersFragment on ConsensusParameters {
525
+ version {
526
+ ... on Version {
527
+ value
528
+ }
529
+ }
480
530
  txParams {
481
531
  ...TxParametersFragment
482
532
  }
@@ -536,18 +586,9 @@ var NodeInfoFragmentFragmentDoc = gql`
536
586
  fragment nodeInfoFragment on NodeInfo {
537
587
  utxoValidation
538
588
  vmBacktrace
539
- minGasPrice
540
589
  maxTx
541
590
  maxDepth
542
591
  nodeVersion
543
- peers {
544
- id
545
- addresses
546
- clientVersion
547
- blockHeight
548
- lastHeartbeatMs
549
- appScore
550
- }
551
592
  }
552
593
  `;
553
594
  var GetVersionDocument = gql`
@@ -582,13 +623,9 @@ var GetTransactionWithReceiptsDocument = gql`
582
623
  query getTransactionWithReceipts($transactionId: TransactionId!) {
583
624
  transaction(id: $transactionId) {
584
625
  ...transactionFragment
585
- receipts {
586
- ...receiptFragment
587
- }
588
626
  }
589
627
  }
590
- ${TransactionFragmentFragmentDoc}
591
- ${ReceiptFragmentFragmentDoc}`;
628
+ ${TransactionFragmentFragmentDoc}`;
592
629
  var GetTransactionsDocument = gql`
593
630
  query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
594
631
  transactions(after: $after, before: $before, first: $first, last: $last) {
@@ -716,6 +753,20 @@ var GetBalanceDocument = gql`
716
753
  }
717
754
  }
718
755
  ${BalanceFragmentFragmentDoc}`;
756
+ var GetLatestGasPriceDocument = gql`
757
+ query getLatestGasPrice {
758
+ latestGasPrice {
759
+ gasPrice
760
+ }
761
+ }
762
+ `;
763
+ var EstimateGasPriceDocument = gql`
764
+ query estimateGasPrice($blockHorizon: U32!) {
765
+ estimateGasPrice(blockHorizon: $blockHorizon) {
766
+ gasPrice
767
+ }
768
+ }
769
+ `;
719
770
  var GetBalancesDocument = gql`
720
771
  query getBalances($filter: BalanceFilterInput!, $after: String, $before: String, $first: Int, $last: Int) {
721
772
  balances(
@@ -770,12 +821,12 @@ var GetMessageStatusDocument = gql`
770
821
  }
771
822
  `;
772
823
  var DryRunDocument = gql`
773
- mutation dryRun($encodedTransaction: HexString!, $utxoValidation: Boolean) {
774
- dryRun(tx: $encodedTransaction, utxoValidation: $utxoValidation) {
775
- ...receiptFragment
824
+ mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean) {
825
+ dryRun(txs: $encodedTransactions, utxoValidation: $utxoValidation) {
826
+ ...dryRunTransactionExecutionStatusFragment
776
827
  }
777
828
  }
778
- ${ReceiptFragmentFragmentDoc}`;
829
+ ${DryRunTransactionExecutionStatusFragmentFragmentDoc}`;
779
830
  var SubmitDocument = gql`
780
831
  mutation submit($encodedTransaction: HexString!) {
781
832
  submit(tx: $encodedTransaction) {
@@ -858,6 +909,12 @@ function getSdk(requester) {
858
909
  getBalance(variables, options) {
859
910
  return requester(GetBalanceDocument, variables, options);
860
911
  },
912
+ getLatestGasPrice(variables, options) {
913
+ return requester(GetLatestGasPriceDocument, variables, options);
914
+ },
915
+ estimateGasPrice(variables, options) {
916
+ return requester(EstimateGasPriceDocument, variables, options);
917
+ },
861
918
  getBalances(variables, options) {
862
919
  return requester(GetBalancesDocument, variables, options);
863
920
  },
@@ -927,11 +984,14 @@ var _FuelGraphqlSubscriber = class {
927
984
  let data;
928
985
  let errors;
929
986
  try {
930
- ({ data, errors } = JSON.parse(text.replace(/^data:/, "")));
987
+ const sanitizedText = text.replace(/\s/g, "");
988
+ ({ data, errors } = JSON.parse(sanitizedText.replace(/^data:/, "")));
931
989
  } catch (e) {
932
990
  throw new FuelError(
933
991
  ErrorCode.STREAM_PARSING_ERROR,
934
- `Error while parsing stream data response: ${text}`
992
+ `Error while parsing stream data response: ${text}
993
+
994
+ Thrown error: ${e}`
935
995
  );
936
996
  }
937
997
  if (Array.isArray(errors)) {
@@ -1018,7 +1078,6 @@ var MemoryCache = class {
1018
1078
  };
1019
1079
 
1020
1080
  // src/providers/transaction-request/input.ts
1021
- import { BYTES_32, UTXO_ID_LEN } from "@fuel-ts/abi-coder";
1022
1081
  import { ZeroBytes32 } from "@fuel-ts/address/configs";
1023
1082
  import { ErrorCode as ErrorCode3, FuelError as FuelError3 } from "@fuel-ts/errors";
1024
1083
  import { bn as bn2, toNumber } from "@fuel-ts/math";
@@ -1032,8 +1091,8 @@ var inputify = (value) => {
1032
1091
  const predicateData = arrayify(value.predicateData ?? "0x");
1033
1092
  return {
1034
1093
  type: InputType.Coin,
1035
- txID: hexlify3(arrayify(value.id).slice(0, BYTES_32)),
1036
- outputIndex: toNumber(arrayify(value.id).slice(BYTES_32, UTXO_ID_LEN)),
1094
+ txID: hexlify3(arrayify(value.id).slice(0, 32)),
1095
+ outputIndex: toNumber(arrayify(value.id).slice(32, 34)),
1037
1096
  owner: hexlify3(value.owner),
1038
1097
  amount: bn2(value.amount),
1039
1098
  assetId: hexlify3(value.assetId),
@@ -1042,10 +1101,9 @@ var inputify = (value) => {
1042
1101
  txIndex: toNumber(arrayify(value.txPointer).slice(8, 16))
1043
1102
  },
1044
1103
  witnessIndex: value.witnessIndex,
1045
- maturity: value.maturity ?? 0,
1046
1104
  predicateGasUsed: bn2(value.predicateGasUsed),
1047
- predicateLength: predicate.length,
1048
- predicateDataLength: predicateData.length,
1105
+ predicateLength: bn2(predicate.length),
1106
+ predicateDataLength: bn2(predicateData.length),
1049
1107
  predicate: hexlify3(predicate),
1050
1108
  predicateData: hexlify3(predicateData)
1051
1109
  };
@@ -1076,8 +1134,8 @@ var inputify = (value) => {
1076
1134
  nonce: hexlify3(value.nonce),
1077
1135
  witnessIndex: value.witnessIndex,
1078
1136
  predicateGasUsed: bn2(value.predicateGasUsed),
1079
- predicateLength: predicate.length,
1080
- predicateDataLength: predicateData.length,
1137
+ predicateLength: bn2(predicate.length),
1138
+ predicateDataLength: bn2(predicateData.length),
1081
1139
  predicate: hexlify3(predicate),
1082
1140
  predicateData: hexlify3(predicateData),
1083
1141
  data: hexlify3(data),
@@ -1151,10 +1209,8 @@ var outputify = (value) => {
1151
1209
  };
1152
1210
 
1153
1211
  // src/providers/transaction-request/transaction-request.ts
1154
- import { UTXO_ID_LEN as UTXO_ID_LEN2 } from "@fuel-ts/abi-coder";
1155
1212
  import { Address, addressify } from "@fuel-ts/address";
1156
1213
  import { BaseAssetId as BaseAssetId2, ZeroBytes32 as ZeroBytes324 } from "@fuel-ts/address/configs";
1157
- import { randomBytes } from "@fuel-ts/crypto";
1158
1214
  import { bn as bn7 } from "@fuel-ts/math";
1159
1215
  import {
1160
1216
  PolicyType,
@@ -1164,6 +1220,7 @@ import {
1164
1220
  TransactionType
1165
1221
  } from "@fuel-ts/transactions";
1166
1222
  import { concat, hexlify as hexlify7 } from "@fuel-ts/utils";
1223
+ import { randomBytes } from "ethers";
1167
1224
 
1168
1225
  // src/providers/resource.ts
1169
1226
  var isCoin = (resource) => "id" in resource;
@@ -1204,8 +1261,8 @@ function assembleReceiptByType(receipt) {
1204
1261
  case "CALL" /* Call */: {
1205
1262
  const callReceipt = {
1206
1263
  type: ReceiptType.Call,
1207
- from: hexOrZero(receipt.contract?.id),
1208
- to: hexOrZero(receipt?.to?.id),
1264
+ from: hexOrZero(receipt.id || receipt.contractId),
1265
+ to: hexOrZero(receipt?.to),
1209
1266
  amount: bn4(receipt.amount),
1210
1267
  assetId: hexOrZero(receipt.assetId),
1211
1268
  gas: bn4(receipt.gas),
@@ -1219,7 +1276,7 @@ function assembleReceiptByType(receipt) {
1219
1276
  case "RETURN" /* Return */: {
1220
1277
  const returnReceipt = {
1221
1278
  type: ReceiptType.Return,
1222
- id: hexOrZero(receipt.contract?.id),
1279
+ id: hexOrZero(receipt.id || receipt.contractId),
1223
1280
  val: bn4(receipt.val),
1224
1281
  pc: bn4(receipt.pc),
1225
1282
  is: bn4(receipt.is)
@@ -1229,7 +1286,7 @@ function assembleReceiptByType(receipt) {
1229
1286
  case "RETURN_DATA" /* ReturnData */: {
1230
1287
  const returnDataReceipt = {
1231
1288
  type: ReceiptType.ReturnData,
1232
- id: hexOrZero(receipt.contract?.id),
1289
+ id: hexOrZero(receipt.id || receipt.contractId),
1233
1290
  ptr: bn4(receipt.ptr),
1234
1291
  len: bn4(receipt.len),
1235
1292
  digest: hexOrZero(receipt.digest),
@@ -1241,7 +1298,7 @@ function assembleReceiptByType(receipt) {
1241
1298
  case "PANIC" /* Panic */: {
1242
1299
  const panicReceipt = {
1243
1300
  type: ReceiptType.Panic,
1244
- id: hexOrZero(receipt.contract?.id),
1301
+ id: hexOrZero(receipt.id),
1245
1302
  reason: bn4(receipt.reason),
1246
1303
  pc: bn4(receipt.pc),
1247
1304
  is: bn4(receipt.is),
@@ -1252,7 +1309,7 @@ function assembleReceiptByType(receipt) {
1252
1309
  case "REVERT" /* Revert */: {
1253
1310
  const revertReceipt = {
1254
1311
  type: ReceiptType.Revert,
1255
- id: hexOrZero(receipt.contract?.id),
1312
+ id: hexOrZero(receipt.id || receipt.contractId),
1256
1313
  val: bn4(receipt.ra),
1257
1314
  pc: bn4(receipt.pc),
1258
1315
  is: bn4(receipt.is)
@@ -1262,7 +1319,7 @@ function assembleReceiptByType(receipt) {
1262
1319
  case "LOG" /* Log */: {
1263
1320
  const logReceipt = {
1264
1321
  type: ReceiptType.Log,
1265
- id: hexOrZero(receipt.contract?.id),
1322
+ id: hexOrZero(receipt.id || receipt.contractId),
1266
1323
  val0: bn4(receipt.ra),
1267
1324
  val1: bn4(receipt.rb),
1268
1325
  val2: bn4(receipt.rc),
@@ -1275,7 +1332,7 @@ function assembleReceiptByType(receipt) {
1275
1332
  case "LOG_DATA" /* LogData */: {
1276
1333
  const logDataReceipt = {
1277
1334
  type: ReceiptType.LogData,
1278
- id: hexOrZero(receipt.contract?.id),
1335
+ id: hexOrZero(receipt.id || receipt.contractId),
1279
1336
  val0: bn4(receipt.ra),
1280
1337
  val1: bn4(receipt.rb),
1281
1338
  ptr: bn4(receipt.ptr),
@@ -1289,8 +1346,8 @@ function assembleReceiptByType(receipt) {
1289
1346
  case "TRANSFER" /* Transfer */: {
1290
1347
  const transferReceipt = {
1291
1348
  type: ReceiptType.Transfer,
1292
- from: hexOrZero(receipt.contract?.id),
1293
- to: hexOrZero(receipt.toAddress || receipt?.to?.id),
1349
+ from: hexOrZero(receipt.id || receipt.contractId),
1350
+ to: hexOrZero(receipt.toAddress || receipt?.to),
1294
1351
  amount: bn4(receipt.amount),
1295
1352
  assetId: hexOrZero(receipt.assetId),
1296
1353
  pc: bn4(receipt.pc),
@@ -1301,8 +1358,8 @@ function assembleReceiptByType(receipt) {
1301
1358
  case "TRANSFER_OUT" /* TransferOut */: {
1302
1359
  const transferOutReceipt = {
1303
1360
  type: ReceiptType.TransferOut,
1304
- from: hexOrZero(receipt.contract?.id),
1305
- to: hexOrZero(receipt.toAddress || receipt.to?.id),
1361
+ from: hexOrZero(receipt.id || receipt.contractId),
1362
+ to: hexOrZero(receipt.toAddress || receipt.to),
1306
1363
  amount: bn4(receipt.amount),
1307
1364
  assetId: hexOrZero(receipt.assetId),
1308
1365
  pc: bn4(receipt.pc),
@@ -1345,7 +1402,7 @@ function assembleReceiptByType(receipt) {
1345
1402
  return receiptMessageOut;
1346
1403
  }
1347
1404
  case "MINT" /* Mint */: {
1348
- const contractId = hexOrZero(receipt.contract?.id);
1405
+ const contractId = hexOrZero(receipt.id || receipt.contractId);
1349
1406
  const subId = hexOrZero(receipt.subId);
1350
1407
  const assetId = ReceiptMintCoder.getAssetId(contractId, subId);
1351
1408
  const mintReceipt = {
@@ -1360,7 +1417,7 @@ function assembleReceiptByType(receipt) {
1360
1417
  return mintReceipt;
1361
1418
  }
1362
1419
  case "BURN" /* Burn */: {
1363
- const contractId = hexOrZero(receipt.contract?.id);
1420
+ const contractId = hexOrZero(receipt.id || receipt.contractId);
1364
1421
  const subId = hexOrZero(receipt.subId);
1365
1422
  const assetId = ReceiptBurnCoder.getAssetId(contractId, subId);
1366
1423
  const burnReceipt = {
@@ -1386,7 +1443,6 @@ import { ErrorCode as ErrorCode6, FuelError as FuelError6 } from "@fuel-ts/error
1386
1443
  import { bn as bn5 } from "@fuel-ts/math";
1387
1444
  import { ReceiptType as ReceiptType2 } from "@fuel-ts/transactions";
1388
1445
  import { arrayify as arrayify3 } from "@fuel-ts/utils";
1389
- var calculatePriceWithFactor = (gas, gasPrice, priceFactor) => bn5(Math.ceil(gas.mul(gasPrice).toNumber() / priceFactor.toNumber()));
1390
1446
  var getGasUsedFromReceipts = (receipts) => {
1391
1447
  const scriptResult = receipts.filter(
1392
1448
  (receipt) => receipt.type === ReceiptType2.ScriptResult
@@ -1407,18 +1463,28 @@ function resolveGasDependentCosts(byteSize, gasDependentCost) {
1407
1463
  }
1408
1464
  function gasUsedByInputs(inputs, txBytesSize, gasCosts) {
1409
1465
  const witnessCache = [];
1410
- const totalGas = inputs.reduce((total, input) => {
1466
+ const chargeableInputs = inputs.filter((input) => {
1467
+ const isCoinOrMessage = "owner" in input || "sender" in input;
1468
+ if (isCoinOrMessage) {
1469
+ if ("predicate" in input && input.predicate && input.predicate !== "0x") {
1470
+ return true;
1471
+ }
1472
+ if (!witnessCache.includes(input.witnessIndex)) {
1473
+ witnessCache.push(input.witnessIndex);
1474
+ return true;
1475
+ }
1476
+ }
1477
+ return false;
1478
+ });
1479
+ const vmInitializationCost = resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization);
1480
+ const totalGas = chargeableInputs.reduce((total, input) => {
1411
1481
  if ("predicate" in input && input.predicate && input.predicate !== "0x") {
1412
1482
  return total.add(
1413
- resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization).add(resolveGasDependentCosts(arrayify3(input.predicate).length, gasCosts.contractRoot)).add(bn5(input.predicateGasUsed))
1483
+ vmInitializationCost.add(resolveGasDependentCosts(arrayify3(input.predicate).length, gasCosts.contractRoot)).add(bn5(input.predicateGasUsed))
1414
1484
  );
1415
1485
  }
1416
- if ("witnessIndex" in input && !witnessCache.includes(input.witnessIndex)) {
1417
- witnessCache.push(input.witnessIndex);
1418
- return total.add(gasCosts.ecr1);
1419
- }
1420
- return total;
1421
- }, bn5());
1486
+ return total.add(gasCosts.ecr1);
1487
+ }, bn5(0));
1422
1488
  return totalGas;
1423
1489
  }
1424
1490
  function getMinGas(params) {
@@ -1430,12 +1496,20 @@ function getMinGas(params) {
1430
1496
  return minGas;
1431
1497
  }
1432
1498
  function getMaxGas(params) {
1433
- const { gasPerByte, witnessesLength, witnessLimit, minGas, gasLimit = bn5(0) } = params;
1499
+ const {
1500
+ gasPerByte,
1501
+ witnessesLength,
1502
+ witnessLimit,
1503
+ minGas,
1504
+ gasLimit = bn5(0),
1505
+ maxGasPerTx
1506
+ } = params;
1434
1507
  let remainingAllowedWitnessGas = bn5(0);
1435
1508
  if (witnessLimit?.gt(0) && witnessLimit.gte(witnessesLength)) {
1436
1509
  remainingAllowedWitnessGas = bn5(witnessLimit).sub(witnessesLength).mul(gasPerByte);
1437
1510
  }
1438
- return remainingAllowedWitnessGas.add(minGas).add(gasLimit);
1511
+ const maxGas = remainingAllowedWitnessGas.add(minGas).add(gasLimit);
1512
+ return maxGas.gte(maxGasPerTx) ? maxGasPerTx : maxGas;
1439
1513
  }
1440
1514
  function calculateMetadataGasForTxCreate({
1441
1515
  gasCosts,
@@ -1457,6 +1531,10 @@ function calculateMetadataGasForTxScript({
1457
1531
  }) {
1458
1532
  return resolveGasDependentCosts(txBytesSize, gasCosts.s256);
1459
1533
  }
1534
+ var calculateGasFee = (params) => {
1535
+ const { gas, gasPrice, priceFactor, tip } = params;
1536
+ return gas.mul(gasPrice).div(priceFactor).add(tip);
1537
+ };
1460
1538
 
1461
1539
  // src/providers/utils/json.ts
1462
1540
  import { hexlify as hexlify5 } from "@fuel-ts/utils";
@@ -1601,7 +1679,7 @@ var witnessify = (value) => {
1601
1679
  // src/providers/transaction-request/transaction-request.ts
1602
1680
  var BaseTransactionRequest = class {
1603
1681
  /** Gas price for transaction */
1604
- gasPrice;
1682
+ tip;
1605
1683
  /** Block until which tx cannot be included */
1606
1684
  maturity;
1607
1685
  /** The maximum fee payable by this transaction using BASE_ASSET. */
@@ -1620,7 +1698,7 @@ var BaseTransactionRequest = class {
1620
1698
  * @param baseTransactionRequest - Optional object containing properties to initialize the transaction request.
1621
1699
  */
1622
1700
  constructor({
1623
- gasPrice,
1701
+ tip,
1624
1702
  maturity,
1625
1703
  maxFee,
1626
1704
  witnessLimit,
@@ -1628,7 +1706,7 @@ var BaseTransactionRequest = class {
1628
1706
  outputs,
1629
1707
  witnesses
1630
1708
  } = {}) {
1631
- this.gasPrice = bn7(gasPrice);
1709
+ this.tip = bn7(tip);
1632
1710
  this.maturity = maturity ?? 0;
1633
1711
  this.witnessLimit = witnessLimit ? bn7(witnessLimit) : void 0;
1634
1712
  this.maxFee = maxFee ? bn7(maxFee) : void 0;
@@ -1639,9 +1717,9 @@ var BaseTransactionRequest = class {
1639
1717
  static getPolicyMeta(req) {
1640
1718
  let policyTypes = 0;
1641
1719
  const policies = [];
1642
- if (req.gasPrice) {
1643
- policyTypes += PolicyType.GasPrice;
1644
- policies.push({ data: req.gasPrice, type: PolicyType.GasPrice });
1720
+ if (req.tip) {
1721
+ policyTypes += PolicyType.Tip;
1722
+ policies.push({ data: req.tip, type: PolicyType.Tip });
1645
1723
  }
1646
1724
  if (req.witnessLimit) {
1647
1725
  policyTypes += PolicyType.WitnessLimit;
@@ -1828,10 +1906,10 @@ var BaseTransactionRequest = class {
1828
1906
  * @param predicate - Predicate bytes.
1829
1907
  * @param predicateData - Predicate data bytes.
1830
1908
  */
1831
- addCoinInput(coin, predicate) {
1909
+ addCoinInput(coin) {
1832
1910
  const { assetId, owner, amount } = coin;
1833
1911
  let witnessIndex;
1834
- if (predicate) {
1912
+ if (coin.predicate) {
1835
1913
  witnessIndex = 0;
1836
1914
  } else {
1837
1915
  witnessIndex = this.getCoinInputWitnessIndexByOwner(owner);
@@ -1846,8 +1924,7 @@ var BaseTransactionRequest = class {
1846
1924
  amount,
1847
1925
  assetId,
1848
1926
  txPointer: "0x00000000000000000000000000000000",
1849
- witnessIndex,
1850
- predicate: predicate?.bytes
1927
+ witnessIndex
1851
1928
  };
1852
1929
  this.pushInput(input);
1853
1930
  this.addChangeOutput(owner, assetId);
@@ -1860,11 +1937,11 @@ var BaseTransactionRequest = class {
1860
1937
  * @param predicate - Predicate bytes.
1861
1938
  * @param predicateData - Predicate data bytes.
1862
1939
  */
1863
- addMessageInput(message, predicate) {
1940
+ addMessageInput(message) {
1864
1941
  const { recipient, sender, amount } = message;
1865
1942
  const assetId = BaseAssetId2;
1866
1943
  let witnessIndex;
1867
- if (predicate) {
1944
+ if (message.predicate) {
1868
1945
  witnessIndex = 0;
1869
1946
  } else {
1870
1947
  witnessIndex = this.getCoinInputWitnessIndexByOwner(recipient);
@@ -1878,8 +1955,7 @@ var BaseTransactionRequest = class {
1878
1955
  sender: sender.toB256(),
1879
1956
  recipient: recipient.toB256(),
1880
1957
  amount,
1881
- witnessIndex,
1882
- predicate: predicate?.bytes
1958
+ witnessIndex
1883
1959
  };
1884
1960
  this.pushInput(input);
1885
1961
  this.addChangeOutput(recipient, assetId);
@@ -1910,32 +1986,6 @@ var BaseTransactionRequest = class {
1910
1986
  resources.forEach((resource) => this.addResource(resource));
1911
1987
  return this;
1912
1988
  }
1913
- /**
1914
- * Adds multiple resources to the transaction by adding coin/message inputs and change
1915
- * outputs from the related assetIds.
1916
- *
1917
- * @param resources - The resources to add.
1918
- * @returns This transaction.
1919
- */
1920
- addPredicateResource(resource, predicate) {
1921
- if (isCoin(resource)) {
1922
- this.addCoinInput(resource, predicate);
1923
- } else {
1924
- this.addMessageInput(resource, predicate);
1925
- }
1926
- return this;
1927
- }
1928
- /**
1929
- * Adds multiple predicate coin/message inputs to the transaction and change outputs
1930
- * from the related assetIds.
1931
- *
1932
- * @param resources - The resources to add.
1933
- * @returns This transaction.
1934
- */
1935
- addPredicateResources(resources, predicate) {
1936
- resources.forEach((resource) => this.addPredicateResource(resource, predicate));
1937
- return this;
1938
- }
1939
1989
  /**
1940
1990
  * Adds a coin output to the transaction.
1941
1991
  *
@@ -2015,7 +2065,7 @@ var BaseTransactionRequest = class {
2015
2065
  }
2016
2066
  calculateMaxGas(chainInfo, minGas) {
2017
2067
  const { consensusParameters } = chainInfo;
2018
- const { gasPerByte } = consensusParameters;
2068
+ const { gasPerByte, maxGasPerTx } = consensusParameters;
2019
2069
  const witnessesLength = this.toTransaction().witnesses.reduce(
2020
2070
  (acc, wit) => acc + wit.dataLength,
2021
2071
  0
@@ -2024,7 +2074,8 @@ var BaseTransactionRequest = class {
2024
2074
  gasPerByte,
2025
2075
  minGas,
2026
2076
  witnessesLength,
2027
- witnessLimit: this.witnessLimit
2077
+ witnessLimit: this.witnessLimit,
2078
+ maxGasPerTx
2028
2079
  });
2029
2080
  }
2030
2081
  /**
@@ -2042,17 +2093,20 @@ var BaseTransactionRequest = class {
2042
2093
  });
2043
2094
  const updateAssetInput = (assetId, quantity) => {
2044
2095
  const assetInput = findAssetInput(assetId);
2096
+ let usedQuantity = quantity;
2097
+ if (assetId === BaseAssetId2) {
2098
+ usedQuantity = bn7("1000000000000000000");
2099
+ }
2045
2100
  if (assetInput && "assetId" in assetInput) {
2046
- assetInput.id = hexlify7(randomBytes(UTXO_ID_LEN2));
2047
- assetInput.amount = quantity;
2101
+ assetInput.id = hexlify7(randomBytes(34));
2102
+ assetInput.amount = usedQuantity;
2048
2103
  } else {
2049
2104
  this.addResources([
2050
2105
  {
2051
- id: hexlify7(randomBytes(UTXO_ID_LEN2)),
2052
- amount: quantity,
2106
+ id: hexlify7(randomBytes(34)),
2107
+ amount: usedQuantity,
2053
2108
  assetId,
2054
2109
  owner: resourcesOwner || Address.fromRandom(),
2055
- maturity: 0,
2056
2110
  blockCreated: bn7(1),
2057
2111
  txCreatedIdx: bn7(1)
2058
2112
  }
@@ -2084,7 +2138,7 @@ var BaseTransactionRequest = class {
2084
2138
  toJSON() {
2085
2139
  return normalizeJSON(this);
2086
2140
  }
2087
- updatePredicateInputs(inputs) {
2141
+ updatePredicateGasUsed(inputs) {
2088
2142
  this.inputs.forEach((i) => {
2089
2143
  let correspondingInput;
2090
2144
  switch (i.type) {
@@ -2106,6 +2160,15 @@ var BaseTransactionRequest = class {
2106
2160
  }
2107
2161
  });
2108
2162
  }
2163
+ shiftPredicateData() {
2164
+ this.inputs.forEach((input) => {
2165
+ if ("predicateData" in input && "paddPredicateData" in input && typeof input.paddPredicateData === "function") {
2166
+ input.predicateData = input.paddPredicateData(
2167
+ BaseTransactionRequest.getPolicyMeta(this).policies.length
2168
+ );
2169
+ }
2170
+ });
2171
+ }
2109
2172
  };
2110
2173
 
2111
2174
  // src/providers/transaction-request/create-transaction-request.ts
@@ -2252,9 +2315,8 @@ var CreateTransactionRequest = class extends BaseTransactionRequest {
2252
2315
  return {
2253
2316
  type: TransactionType3.Create,
2254
2317
  ...baseTransaction,
2255
- bytecodeLength: baseTransaction.witnesses[bytecodeWitnessIndex].dataLength / 4,
2256
2318
  bytecodeWitnessIndex,
2257
- storageSlotsCount: storageSlots.length,
2319
+ storageSlotsCount: bn9(storageSlots.length),
2258
2320
  salt: this.salt ? hexlify9(this.salt) : ZeroBytes326,
2259
2321
  storageSlots
2260
2322
  };
@@ -2377,8 +2439,8 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
2377
2439
  type: TransactionType4.Script,
2378
2440
  scriptGasLimit: this.gasLimit,
2379
2441
  ...super.getBaseTransaction(),
2380
- scriptLength: script.length,
2381
- scriptDataLength: scriptData.length,
2442
+ scriptLength: bn10(script.length),
2443
+ scriptDataLength: bn10(scriptData.length),
2382
2444
  receiptsRoot: ZeroBytes327,
2383
2445
  script: hexlify10(script),
2384
2446
  scriptData: hexlify10(scriptData)
@@ -2442,7 +2504,7 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
2442
2504
  }
2443
2505
  calculateMaxGas(chainInfo, minGas) {
2444
2506
  const { consensusParameters } = chainInfo;
2445
- const { gasPerByte } = consensusParameters;
2507
+ const { gasPerByte, maxGasPerTx } = consensusParameters;
2446
2508
  const witnessesLength = this.toTransaction().witnesses.reduce(
2447
2509
  (acc, wit) => acc + wit.dataLength,
2448
2510
  0
@@ -2452,7 +2514,8 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
2452
2514
  minGas,
2453
2515
  witnessesLength,
2454
2516
  witnessLimit: this.witnessLimit,
2455
- gasLimit: this.gasLimit
2517
+ gasLimit: this.gasLimit,
2518
+ maxGasPerTx
2456
2519
  });
2457
2520
  }
2458
2521
  /**
@@ -2509,7 +2572,7 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
2509
2572
 
2510
2573
  // src/providers/transaction-request/utils.ts
2511
2574
  import { ErrorCode as ErrorCode8, FuelError as FuelError8 } from "@fuel-ts/errors";
2512
- import { TransactionType as TransactionType5 } from "@fuel-ts/transactions";
2575
+ import { TransactionType as TransactionType5, InputType as InputType5 } from "@fuel-ts/transactions";
2513
2576
  var transactionRequestify = (obj) => {
2514
2577
  if (obj instanceof ScriptTransactionRequest || obj instanceof CreateTransactionRequest) {
2515
2578
  return obj;
@@ -2527,14 +2590,31 @@ var transactionRequestify = (obj) => {
2527
2590
  }
2528
2591
  }
2529
2592
  };
2593
+ var cacheTxInputsFromOwner = (inputs, owner) => inputs.reduce(
2594
+ (acc, input) => {
2595
+ if (input.type === InputType5.Coin && input.owner === owner) {
2596
+ acc.utxos.push(input.id);
2597
+ }
2598
+ if (input.type === InputType5.Message && input.recipient === owner) {
2599
+ acc.messages.push(input.nonce);
2600
+ }
2601
+ return acc;
2602
+ },
2603
+ {
2604
+ utxos: [],
2605
+ messages: []
2606
+ }
2607
+ );
2530
2608
 
2531
2609
  // src/providers/transaction-response/transaction-response.ts
2532
2610
  import { ErrorCode as ErrorCode12, FuelError as FuelError12 } from "@fuel-ts/errors";
2533
- import { bn as bn14 } from "@fuel-ts/math";
2611
+ import { bn as bn15 } from "@fuel-ts/math";
2534
2612
  import { TransactionCoder as TransactionCoder4 } from "@fuel-ts/transactions";
2535
2613
  import { arrayify as arrayify10 } from "@fuel-ts/utils";
2536
2614
 
2537
2615
  // src/providers/transaction-summary/assemble-transaction-summary.ts
2616
+ import { bn as bn14 } from "@fuel-ts/math";
2617
+ import { PolicyType as PolicyType3 } from "@fuel-ts/transactions";
2538
2618
  import { DateTime, hexlify as hexlify11 } from "@fuel-ts/utils";
2539
2619
 
2540
2620
  // src/providers/transaction-summary/calculate-transaction-fee.ts
@@ -2543,9 +2623,10 @@ import { PolicyType as PolicyType2, TransactionCoder as TransactionCoder3, Trans
2543
2623
  import { arrayify as arrayify9 } from "@fuel-ts/utils";
2544
2624
  var calculateTransactionFee = (params) => {
2545
2625
  const {
2546
- gasUsed,
2626
+ gasPrice,
2547
2627
  rawPayload,
2548
- consensusParameters: { gasCosts, feeParams }
2628
+ tip,
2629
+ consensusParameters: { gasCosts, feeParams, maxGasPerTx }
2549
2630
  } = params;
2550
2631
  const gasPerByte = bn11(feeParams.gasPerByte);
2551
2632
  const gasPriceFactor = bn11(feeParams.gasPriceFactor);
@@ -2555,8 +2636,7 @@ var calculateTransactionFee = (params) => {
2555
2636
  return {
2556
2637
  fee: bn11(0),
2557
2638
  minFee: bn11(0),
2558
- maxFee: bn11(0),
2559
- feeFromGasUsed: bn11(0)
2639
+ maxFee: bn11(0)
2560
2640
  };
2561
2641
  }
2562
2642
  const { type, witnesses, inputs, policies } = transaction;
@@ -2588,7 +2668,6 @@ var calculateTransactionFee = (params) => {
2588
2668
  metadataGas,
2589
2669
  txBytesSize: transactionBytes.length
2590
2670
  });
2591
- const gasPrice = bn11(policies.find((policy) => policy.type === PolicyType2.GasPrice)?.data);
2592
2671
  const witnessLimit = policies.find((policy) => policy.type === PolicyType2.WitnessLimit)?.data;
2593
2672
  const witnessesLength = witnesses.reduce((acc, wit) => acc + wit.dataLength, 0);
2594
2673
  const maxGas = getMaxGas({
@@ -2596,17 +2675,25 @@ var calculateTransactionFee = (params) => {
2596
2675
  minGas,
2597
2676
  witnessesLength,
2598
2677
  gasLimit,
2599
- witnessLimit
2678
+ witnessLimit,
2679
+ maxGasPerTx
2680
+ });
2681
+ const minFee = calculateGasFee({
2682
+ gasPrice,
2683
+ gas: minGas,
2684
+ priceFactor: gasPriceFactor,
2685
+ tip
2686
+ });
2687
+ const maxFee = calculateGasFee({
2688
+ gasPrice,
2689
+ gas: maxGas,
2690
+ priceFactor: gasPriceFactor,
2691
+ tip
2600
2692
  });
2601
- const feeFromGasUsed = calculatePriceWithFactor(gasUsed, gasPrice, gasPriceFactor);
2602
- const minFee = calculatePriceWithFactor(minGas, gasPrice, gasPriceFactor);
2603
- const maxFee = calculatePriceWithFactor(maxGas, gasPrice, gasPriceFactor);
2604
- const fee = minFee.add(feeFromGasUsed);
2605
2693
  return {
2606
- fee,
2607
2694
  minFee,
2608
2695
  maxFee,
2609
- feeFromGasUsed
2696
+ fee: maxFee
2610
2697
  };
2611
2698
  };
2612
2699
 
@@ -2662,7 +2749,7 @@ var getFunctionCall = ({ abi, receipt, rawPayload, maxInputs }) => {
2662
2749
 
2663
2750
  // src/providers/transaction-summary/input.ts
2664
2751
  import { ErrorCode as ErrorCode9, FuelError as FuelError9 } from "@fuel-ts/errors";
2665
- import { InputType as InputType5 } from "@fuel-ts/transactions";
2752
+ import { InputType as InputType6 } from "@fuel-ts/transactions";
2666
2753
  function getInputsByTypes(inputs, types) {
2667
2754
  return inputs.filter((i) => types.includes(i.type));
2668
2755
  }
@@ -2670,16 +2757,16 @@ function getInputsByType(inputs, type) {
2670
2757
  return inputs.filter((i) => i.type === type);
2671
2758
  }
2672
2759
  function getInputsCoin(inputs) {
2673
- return getInputsByType(inputs, InputType5.Coin);
2760
+ return getInputsByType(inputs, InputType6.Coin);
2674
2761
  }
2675
2762
  function getInputsMessage(inputs) {
2676
- return getInputsByType(inputs, InputType5.Message);
2763
+ return getInputsByType(inputs, InputType6.Message);
2677
2764
  }
2678
2765
  function getInputsCoinAndMessage(inputs) {
2679
- return getInputsByTypes(inputs, [InputType5.Coin, InputType5.Message]);
2766
+ return getInputsByTypes(inputs, [InputType6.Coin, InputType6.Message]);
2680
2767
  }
2681
2768
  function getInputsContract(inputs) {
2682
- return getInputsByType(inputs, InputType5.Contract);
2769
+ return getInputsByType(inputs, InputType6.Contract);
2683
2770
  }
2684
2771
  function getInputFromAssetId(inputs, assetId) {
2685
2772
  const coinInputs = getInputsCoin(inputs);
@@ -2698,7 +2785,7 @@ function getInputContractFromIndex(inputs, inputIndex) {
2698
2785
  if (!contractInput) {
2699
2786
  return void 0;
2700
2787
  }
2701
- if (contractInput.type !== InputType5.Contract) {
2788
+ if (contractInput.type !== InputType6.Contract) {
2702
2789
  throw new FuelError9(
2703
2790
  ErrorCode9.INVALID_TRANSACTION_INPUT,
2704
2791
  `Contract input should be of type 'contract'.`
@@ -2707,10 +2794,10 @@ function getInputContractFromIndex(inputs, inputIndex) {
2707
2794
  return contractInput;
2708
2795
  }
2709
2796
  function getInputAccountAddress(input) {
2710
- if (input.type === InputType5.Coin) {
2797
+ if (input.type === InputType6.Coin) {
2711
2798
  return input.owner.toString();
2712
2799
  }
2713
- if (input.type === InputType5.Message) {
2800
+ if (input.type === InputType6.Message) {
2714
2801
  return input.recipient.toString();
2715
2802
  }
2716
2803
  return "";
@@ -3173,7 +3260,9 @@ function assembleTransactionSummary(params) {
3173
3260
  gqlTransactionStatus,
3174
3261
  abiMap = {},
3175
3262
  maxInputs,
3176
- gasCosts
3263
+ gasCosts,
3264
+ maxGasPerTx,
3265
+ gasPrice
3177
3266
  } = params;
3178
3267
  const gasUsed = getGasUsedFromReceipts(receipts);
3179
3268
  const rawPayload = hexlify11(transactionBytes);
@@ -3187,11 +3276,14 @@ function assembleTransactionSummary(params) {
3187
3276
  maxInputs
3188
3277
  });
3189
3278
  const typeName = getTransactionTypeName(transaction.type);
3279
+ const tip = bn14(transaction.policies?.find((policy) => policy.type === PolicyType3.Tip)?.data);
3190
3280
  const { fee } = calculateTransactionFee({
3191
- gasUsed,
3281
+ gasPrice,
3192
3282
  rawPayload,
3283
+ tip,
3193
3284
  consensusParameters: {
3194
3285
  gasCosts,
3286
+ maxGasPerTx,
3195
3287
  feeParams: {
3196
3288
  gasPerByte,
3197
3289
  gasPriceFactor
@@ -3251,7 +3343,7 @@ var TransactionResponse = class {
3251
3343
  /** Current provider */
3252
3344
  provider;
3253
3345
  /** Gas used on the transaction */
3254
- gasUsed = bn14(0);
3346
+ gasUsed = bn15(0);
3255
3347
  /** The graphql Transaction with receipts object. */
3256
3348
  gqlTransaction;
3257
3349
  abis;
@@ -3329,8 +3421,13 @@ var TransactionResponse = class {
3329
3421
  const decodedTransaction = this.decodeTransaction(
3330
3422
  transaction
3331
3423
  );
3332
- const receipts = transaction.receipts?.map(processGqlReceipt) || [];
3333
- const { gasPerByte, gasPriceFactor, gasCosts } = this.provider.getGasConfig();
3424
+ let txReceipts = [];
3425
+ if (transaction?.status && "receipts" in transaction.status) {
3426
+ txReceipts = transaction.status.receipts;
3427
+ }
3428
+ const receipts = txReceipts.map(processGqlReceipt) || [];
3429
+ const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = this.provider.getGasConfig();
3430
+ const gasPrice = await this.provider.getLatestGasPrice();
3334
3431
  const maxInputs = this.provider.getChain().consensusParameters.maxInputs;
3335
3432
  const transactionSummary = assembleTransactionSummary({
3336
3433
  id: this.id,
@@ -3342,7 +3439,9 @@ var TransactionResponse = class {
3342
3439
  gasPriceFactor,
3343
3440
  abiMap: contractsAbiMap,
3344
3441
  maxInputs,
3345
- gasCosts
3442
+ gasCosts,
3443
+ maxGasPerTx,
3444
+ gasPrice
3346
3445
  });
3347
3446
  return transactionSummary;
3348
3447
  }
@@ -3469,29 +3568,29 @@ var processGqlChain = (chain) => {
3469
3568
  const { contractParams, feeParams, predicateParams, scriptParams, txParams, gasCosts } = consensusParameters;
3470
3569
  return {
3471
3570
  name,
3472
- baseChainHeight: bn15(daHeight),
3571
+ baseChainHeight: bn16(daHeight),
3473
3572
  consensusParameters: {
3474
- contractMaxSize: bn15(contractParams.contractMaxSize),
3475
- maxInputs: bn15(txParams.maxInputs),
3476
- maxOutputs: bn15(txParams.maxOutputs),
3477
- maxWitnesses: bn15(txParams.maxWitnesses),
3478
- maxGasPerTx: bn15(txParams.maxGasPerTx),
3479
- maxScriptLength: bn15(scriptParams.maxScriptLength),
3480
- maxScriptDataLength: bn15(scriptParams.maxScriptDataLength),
3481
- maxStorageSlots: bn15(contractParams.maxStorageSlots),
3482
- maxPredicateLength: bn15(predicateParams.maxPredicateLength),
3483
- maxPredicateDataLength: bn15(predicateParams.maxPredicateDataLength),
3484
- maxGasPerPredicate: bn15(predicateParams.maxGasPerPredicate),
3485
- gasPriceFactor: bn15(feeParams.gasPriceFactor),
3486
- gasPerByte: bn15(feeParams.gasPerByte),
3487
- maxMessageDataLength: bn15(predicateParams.maxMessageDataLength),
3488
- chainId: bn15(consensusParameters.chainId),
3573
+ contractMaxSize: bn16(contractParams.contractMaxSize),
3574
+ maxInputs: bn16(txParams.maxInputs),
3575
+ maxOutputs: bn16(txParams.maxOutputs),
3576
+ maxWitnesses: bn16(txParams.maxWitnesses),
3577
+ maxGasPerTx: bn16(txParams.maxGasPerTx),
3578
+ maxScriptLength: bn16(scriptParams.maxScriptLength),
3579
+ maxScriptDataLength: bn16(scriptParams.maxScriptDataLength),
3580
+ maxStorageSlots: bn16(contractParams.maxStorageSlots),
3581
+ maxPredicateLength: bn16(predicateParams.maxPredicateLength),
3582
+ maxPredicateDataLength: bn16(predicateParams.maxPredicateDataLength),
3583
+ maxGasPerPredicate: bn16(predicateParams.maxGasPerPredicate),
3584
+ gasPriceFactor: bn16(feeParams.gasPriceFactor),
3585
+ gasPerByte: bn16(feeParams.gasPerByte),
3586
+ maxMessageDataLength: bn16(predicateParams.maxMessageDataLength),
3587
+ chainId: bn16(consensusParameters.chainId),
3489
3588
  gasCosts
3490
3589
  },
3491
3590
  gasCosts,
3492
3591
  latestBlock: {
3493
3592
  id: latestBlock.id,
3494
- height: bn15(latestBlock.header.height),
3593
+ height: bn16(latestBlock.height),
3495
3594
  time: latestBlock.header.time,
3496
3595
  transactions: latestBlock.transactions.map((i) => ({
3497
3596
  id: i.id
@@ -3585,10 +3684,8 @@ var _Provider = class {
3585
3684
  * Returns some helpful parameters related to gas fees.
3586
3685
  */
3587
3686
  getGasConfig() {
3588
- const { minGasPrice } = this.getNode();
3589
3687
  const { maxGasPerTx, maxGasPerPredicate, gasPriceFactor, gasPerByte, gasCosts } = this.getChain().consensusParameters;
3590
3688
  return {
3591
- minGasPrice,
3592
3689
  maxGasPerTx,
3593
3690
  maxGasPerPredicate,
3594
3691
  gasPriceFactor,
@@ -3686,7 +3783,7 @@ var _Provider = class {
3686
3783
  */
3687
3784
  async getBlockNumber() {
3688
3785
  const { chain } = await this.operations.getChain();
3689
- return bn15(chain.latestBlock.header.height, 10);
3786
+ return bn16(chain.latestBlock.height, 10);
3690
3787
  }
3691
3788
  /**
3692
3789
  * Returns the chain information.
@@ -3696,13 +3793,11 @@ var _Provider = class {
3696
3793
  async fetchNode() {
3697
3794
  const { nodeInfo } = await this.operations.getNodeInfo();
3698
3795
  const processedNodeInfo = {
3699
- maxDepth: bn15(nodeInfo.maxDepth),
3700
- maxTx: bn15(nodeInfo.maxTx),
3701
- minGasPrice: bn15(nodeInfo.minGasPrice),
3796
+ maxDepth: bn16(nodeInfo.maxDepth),
3797
+ maxTx: bn16(nodeInfo.maxTx),
3702
3798
  nodeVersion: nodeInfo.nodeVersion,
3703
3799
  utxoValidation: nodeInfo.utxoValidation,
3704
- vmBacktrace: nodeInfo.vmBacktrace,
3705
- peers: nodeInfo.peers
3800
+ vmBacktrace: nodeInfo.vmBacktrace
3706
3801
  };
3707
3802
  _Provider.nodeInfoCache[this.url] = processedNodeInfo;
3708
3803
  return processedNodeInfo;
@@ -3788,14 +3883,13 @@ var _Provider = class {
3788
3883
  return this.estimateTxDependencies(transactionRequest);
3789
3884
  }
3790
3885
  const encodedTransaction = hexlify12(transactionRequest.toTransactionBytes());
3791
- const { dryRun: gqlReceipts } = await this.operations.dryRun({
3792
- encodedTransaction,
3886
+ const { dryRun: dryRunStatuses } = await this.operations.dryRun({
3887
+ encodedTransactions: encodedTransaction,
3793
3888
  utxoValidation: utxoValidation || false
3794
3889
  });
3795
- const receipts = gqlReceipts.map(processGqlReceipt);
3796
- return {
3797
- receipts
3798
- };
3890
+ const [{ receipts: rawReceipts, status }] = dryRunStatuses;
3891
+ const receipts = rawReceipts.map(processGqlReceipt);
3892
+ return { receipts, dryrunStatus: status };
3799
3893
  }
3800
3894
  /**
3801
3895
  * Verifies whether enough gas is available to complete transaction.
@@ -3821,7 +3915,7 @@ var _Provider = class {
3821
3915
  } = response;
3822
3916
  if (inputs) {
3823
3917
  inputs.forEach((input, index) => {
3824
- if ("predicateGasUsed" in input && bn15(input.predicateGasUsed).gt(0)) {
3918
+ if ("predicateGasUsed" in input && bn16(input.predicateGasUsed).gt(0)) {
3825
3919
  transactionRequest.inputs[index].predicateGasUsed = input.predicateGasUsed;
3826
3920
  }
3827
3921
  });
@@ -3834,9 +3928,6 @@ var _Provider = class {
3834
3928
  * If there are missing variable outputs,
3835
3929
  * `addVariableOutputs` is called on the transaction.
3836
3930
  *
3837
- * @privateRemarks
3838
- * TODO: Investigate support for missing contract IDs
3839
- * TODO: Add support for missing output messages
3840
3931
  *
3841
3932
  * @param transactionRequest - The transaction request object.
3842
3933
  * @returns A promise.
@@ -3849,16 +3940,19 @@ var _Provider = class {
3849
3940
  missingContractIds: []
3850
3941
  };
3851
3942
  }
3852
- await this.estimatePredicates(transactionRequest);
3853
3943
  let receipts = [];
3854
3944
  const missingContractIds = [];
3855
3945
  let outputVariables = 0;
3946
+ let dryrunStatus;
3856
3947
  for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
3857
- const { dryRun: gqlReceipts } = await this.operations.dryRun({
3858
- encodedTransaction: hexlify12(transactionRequest.toTransactionBytes()),
3948
+ const {
3949
+ dryRun: [{ receipts: rawReceipts, status }]
3950
+ } = await this.operations.dryRun({
3951
+ encodedTransactions: [hexlify12(transactionRequest.toTransactionBytes())],
3859
3952
  utxoValidation: false
3860
3953
  });
3861
- receipts = gqlReceipts.map(processGqlReceipt);
3954
+ receipts = rawReceipts.map(processGqlReceipt);
3955
+ dryrunStatus = status;
3862
3956
  const { missingOutputVariables, missingOutputContractIds } = getReceiptsWithMissingData(receipts);
3863
3957
  const hasMissingOutputs = missingOutputVariables.length !== 0 || missingOutputContractIds.length !== 0;
3864
3958
  if (hasMissingOutputs) {
@@ -3868,6 +3962,11 @@ var _Provider = class {
3868
3962
  transactionRequest.addContractInputAndOutput(Address2.fromString(contractId));
3869
3963
  missingContractIds.push(contractId);
3870
3964
  });
3965
+ const { maxFee } = await this.estimateTxGasAndFee({
3966
+ transactionRequest,
3967
+ optimizeGas: false
3968
+ });
3969
+ transactionRequest.maxFee = maxFee;
3871
3970
  } else {
3872
3971
  break;
3873
3972
  }
@@ -3875,37 +3974,133 @@ var _Provider = class {
3875
3974
  return {
3876
3975
  receipts,
3877
3976
  outputVariables,
3878
- missingContractIds
3977
+ missingContractIds,
3978
+ dryrunStatus
3879
3979
  };
3880
3980
  }
3881
3981
  /**
3882
- * Estimates the transaction gas and fee based on the provided transaction request.
3883
- * @param transactionRequest - The transaction request object.
3884
- * @returns An object containing the estimated minimum gas, minimum fee, maximum gas, and maximum fee.
3982
+ * Dry runs multiple transactions and checks for missing dependencies in batches.
3983
+ *
3984
+ * Transactions are dry run in batches. After each dry run, transactions requiring
3985
+ * further modifications are identified. The method iteratively updates these transactions
3986
+ * and performs subsequent dry runs until all dependencies for each transaction are satisfied.
3987
+ *
3988
+ * @param transactionRequests - Array of transaction request objects.
3989
+ * @returns A promise that resolves to an array of results for each transaction.
3885
3990
  */
3886
- estimateTxGasAndFee(params) {
3887
- const { transactionRequest } = params;
3888
- const { gasPriceFactor, minGasPrice, maxGasPerTx } = this.getGasConfig();
3991
+ async estimateMultipleTxDependencies(transactionRequests) {
3992
+ const results = transactionRequests.map(() => ({
3993
+ receipts: [],
3994
+ outputVariables: 0,
3995
+ missingContractIds: [],
3996
+ dryrunStatus: void 0
3997
+ }));
3998
+ const allRequests = clone3(transactionRequests);
3999
+ const serializedTransactionsMap = /* @__PURE__ */ new Map();
4000
+ allRequests.forEach((req, index) => {
4001
+ if (req.type === TransactionType8.Script) {
4002
+ serializedTransactionsMap.set(index, hexlify12(req.toTransactionBytes()));
4003
+ }
4004
+ });
4005
+ let transactionsToProcess = Array.from(serializedTransactionsMap.keys());
4006
+ let attempt = 0;
4007
+ while (transactionsToProcess.length > 0 && attempt < MAX_RETRIES) {
4008
+ const encodedTransactions = transactionsToProcess.map(
4009
+ (index) => serializedTransactionsMap.get(index)
4010
+ );
4011
+ const dryRunResults = await this.operations.dryRun({
4012
+ encodedTransactions,
4013
+ utxoValidation: false
4014
+ });
4015
+ const nextRoundTransactions = [];
4016
+ for (let i = 0; i < dryRunResults.dryRun.length; i++) {
4017
+ const currentResultIndex = transactionsToProcess[i];
4018
+ const { receipts: rawReceipts, status } = dryRunResults.dryRun[i];
4019
+ results[currentResultIndex].receipts = rawReceipts.map(processGqlReceipt);
4020
+ results[currentResultIndex].dryrunStatus = status;
4021
+ const { missingOutputVariables, missingOutputContractIds } = getReceiptsWithMissingData(
4022
+ results[currentResultIndex].receipts
4023
+ );
4024
+ const hasMissingOutputs = missingOutputVariables.length > 0 || missingOutputContractIds.length > 0;
4025
+ const requestToProcess = allRequests[currentResultIndex];
4026
+ if (hasMissingOutputs && requestToProcess?.type === TransactionType8.Script) {
4027
+ results[currentResultIndex].outputVariables += missingOutputVariables.length;
4028
+ requestToProcess.addVariableOutputs(missingOutputVariables.length);
4029
+ missingOutputContractIds.forEach(({ contractId }) => {
4030
+ requestToProcess.addContractInputAndOutput(Address2.fromString(contractId));
4031
+ results[currentResultIndex].missingContractIds.push(contractId);
4032
+ });
4033
+ const { maxFee } = await this.estimateTxGasAndFee({
4034
+ transactionRequest: requestToProcess,
4035
+ optimizeGas: false
4036
+ });
4037
+ requestToProcess.maxFee = maxFee;
4038
+ serializedTransactionsMap.set(
4039
+ currentResultIndex,
4040
+ hexlify12(requestToProcess.toTransactionBytes())
4041
+ );
4042
+ nextRoundTransactions.push(currentResultIndex);
4043
+ allRequests[currentResultIndex] = requestToProcess;
4044
+ }
4045
+ }
4046
+ transactionsToProcess = nextRoundTransactions;
4047
+ attempt += 1;
4048
+ }
4049
+ return results;
4050
+ }
4051
+ async dryRunMultipleTransactions(transactionRequests, { utxoValidation, estimateTxDependencies = true } = {}) {
4052
+ if (estimateTxDependencies) {
4053
+ return this.estimateMultipleTxDependencies(transactionRequests);
4054
+ }
4055
+ const encodedTransactions = transactionRequests.map((tx) => hexlify12(tx.toTransactionBytes()));
4056
+ const { dryRun: dryRunStatuses } = await this.operations.dryRun({
4057
+ encodedTransactions,
4058
+ utxoValidation: utxoValidation || false
4059
+ });
4060
+ const results = dryRunStatuses.map(({ receipts: rawReceipts, status }) => {
4061
+ const receipts = rawReceipts.map(processGqlReceipt);
4062
+ return { receipts, dryrunStatus: status };
4063
+ });
4064
+ return results;
4065
+ }
4066
+ async estimateTxGasAndFee(params) {
4067
+ const { transactionRequest, optimizeGas = true } = params;
4068
+ let { gasPrice } = params;
3889
4069
  const chainInfo = this.getChain();
3890
- const gasPrice = transactionRequest.gasPrice.eq(0) ? minGasPrice : transactionRequest.gasPrice;
3891
- transactionRequest.gasPrice = gasPrice;
4070
+ const { gasPriceFactor } = this.getGasConfig();
3892
4071
  const minGas = transactionRequest.calculateMinGas(chainInfo);
3893
- const minFee = calculatePriceWithFactor(minGas, gasPrice, gasPriceFactor).normalizeZeroToOne();
4072
+ if (!gasPrice) {
4073
+ gasPrice = await this.estimateGasPrice(10);
4074
+ }
4075
+ const minFee = calculateGasFee({
4076
+ gasPrice: bn16(gasPrice),
4077
+ gas: minGas,
4078
+ priceFactor: gasPriceFactor,
4079
+ tip: transactionRequest.tip
4080
+ }).add(1);
4081
+ let gasLimit = bn16(0);
3894
4082
  if (transactionRequest.type === TransactionType8.Script) {
3895
- if (transactionRequest.gasLimit.eq(0)) {
4083
+ gasLimit = transactionRequest.gasLimit;
4084
+ if (!optimizeGas) {
3896
4085
  transactionRequest.gasLimit = minGas;
3897
- transactionRequest.gasLimit = maxGasPerTx.sub(
3898
- transactionRequest.calculateMaxGas(chainInfo, minGas)
3899
- );
4086
+ gasLimit = transactionRequest.calculateMaxGas(chainInfo, minGas);
4087
+ transactionRequest.gasLimit = gasLimit;
3900
4088
  }
3901
4089
  }
3902
4090
  const maxGas = transactionRequest.calculateMaxGas(chainInfo, minGas);
3903
- const maxFee = calculatePriceWithFactor(maxGas, gasPrice, gasPriceFactor).normalizeZeroToOne();
4091
+ const maxFee = calculateGasFee({
4092
+ gasPrice: bn16(gasPrice),
4093
+ gas: maxGas,
4094
+ priceFactor: gasPriceFactor,
4095
+ tip: transactionRequest.tip
4096
+ }).add(1);
3904
4097
  return {
3905
4098
  minGas,
3906
4099
  minFee,
3907
4100
  maxGas,
3908
- maxFee
4101
+ maxFee,
4102
+ gasPrice,
4103
+ gasLimit
3909
4104
  };
3910
4105
  }
3911
4106
  /**
@@ -3923,15 +4118,17 @@ var _Provider = class {
3923
4118
  if (estimateTxDependencies) {
3924
4119
  return this.estimateTxDependencies(transactionRequest);
3925
4120
  }
3926
- const encodedTransaction = hexlify12(transactionRequest.toTransactionBytes());
3927
- const { dryRun: gqlReceipts } = await this.operations.dryRun({
3928
- encodedTransaction,
4121
+ const encodedTransactions = [hexlify12(transactionRequest.toTransactionBytes())];
4122
+ const { dryRun: dryRunStatuses } = await this.operations.dryRun({
4123
+ encodedTransactions,
3929
4124
  utxoValidation: true
3930
4125
  });
3931
- const receipts = gqlReceipts.map(processGqlReceipt);
3932
- return {
3933
- receipts
3934
- };
4126
+ const callResult = dryRunStatuses.map((dryRunStatus) => {
4127
+ const { id, receipts, status } = dryRunStatus;
4128
+ const processedReceipts = receipts.map(processGqlReceipt);
4129
+ return { id, receipts: processedReceipts, status };
4130
+ });
4131
+ return { receipts: callResult[0].receipts };
3935
4132
  }
3936
4133
  /**
3937
4134
  * Returns a transaction cost to enable user
@@ -3948,77 +4145,80 @@ var _Provider = class {
3948
4145
  * @param tolerance - The tolerance to add on top of the gasUsed.
3949
4146
  * @returns A promise that resolves to the transaction cost object.
3950
4147
  */
3951
- async getTransactionCost(transactionRequestLike, forwardingQuantities = [], {
3952
- estimateTxDependencies = true,
3953
- estimatePredicates = true,
3954
- resourcesOwner,
3955
- signatureCallback
3956
- } = {}) {
4148
+ async getTransactionCost(transactionRequestLike, { resourcesOwner, signatureCallback, quantitiesToContract = [] } = {}) {
3957
4149
  const txRequestClone = clone3(transactionRequestify(transactionRequestLike));
3958
- const { minGasPrice } = this.getGasConfig();
3959
- const setGasPrice = max(txRequestClone.gasPrice, minGasPrice);
3960
4150
  const isScriptTransaction = txRequestClone.type === TransactionType8.Script;
3961
4151
  const coinOutputsQuantities = txRequestClone.getCoinOutputsQuantities();
3962
- const allQuantities = mergeQuantities(coinOutputsQuantities, forwardingQuantities);
4152
+ const allQuantities = mergeQuantities(coinOutputsQuantities, quantitiesToContract);
3963
4153
  txRequestClone.fundWithFakeUtxos(allQuantities, resourcesOwner?.address);
4154
+ txRequestClone.maxFee = bn16(0);
3964
4155
  if (isScriptTransaction) {
3965
- txRequestClone.gasLimit = bn15(0);
4156
+ txRequestClone.gasLimit = bn16(0);
3966
4157
  }
3967
- if (estimatePredicates) {
3968
- if (resourcesOwner && "populateTransactionPredicateData" in resourcesOwner) {
3969
- resourcesOwner.populateTransactionPredicateData(txRequestClone);
3970
- }
3971
- await this.estimatePredicates(txRequestClone);
4158
+ if (resourcesOwner && "populateTransactionPredicateData" in resourcesOwner) {
4159
+ resourcesOwner.populateTransactionPredicateData(txRequestClone);
3972
4160
  }
4161
+ const signedRequest = clone3(txRequestClone);
4162
+ let addedSignatures = 0;
3973
4163
  if (signatureCallback && isScriptTransaction) {
3974
- await signatureCallback(txRequestClone);
3975
- }
3976
- let { maxFee, maxGas, minFee, minGas } = this.estimateTxGasAndFee({
3977
- transactionRequest: txRequestClone
4164
+ const lengthBefore = signedRequest.witnesses.length;
4165
+ await signatureCallback(signedRequest);
4166
+ addedSignatures = signedRequest.witnesses.length - lengthBefore;
4167
+ }
4168
+ await this.estimatePredicates(signedRequest);
4169
+ let { maxFee, maxGas, minFee, minGas, gasPrice, gasLimit } = await this.estimateTxGasAndFee({
4170
+ transactionRequest: signedRequest,
4171
+ optimizeGas: false
3978
4172
  });
4173
+ txRequestClone.maxFee = maxFee;
3979
4174
  let receipts = [];
3980
4175
  let missingContractIds = [];
3981
4176
  let outputVariables = 0;
3982
- let gasUsed = bn15(0);
3983
- if (isScriptTransaction && estimateTxDependencies) {
3984
- txRequestClone.gasPrice = bn15(0);
4177
+ let gasUsed = bn16(0);
4178
+ txRequestClone.updatePredicateGasUsed(signedRequest.inputs);
4179
+ if (isScriptTransaction) {
4180
+ if (signatureCallback) {
4181
+ await signatureCallback(txRequestClone);
4182
+ }
4183
+ txRequestClone.gasLimit = gasLimit;
3985
4184
  const result = await this.estimateTxDependencies(txRequestClone);
3986
4185
  receipts = result.receipts;
3987
4186
  outputVariables = result.outputVariables;
3988
4187
  missingContractIds = result.missingContractIds;
3989
- gasUsed = isScriptTransaction ? getGasUsedFromReceipts(receipts) : gasUsed;
4188
+ gasUsed = getGasUsedFromReceipts(receipts);
3990
4189
  txRequestClone.gasLimit = gasUsed;
3991
- txRequestClone.gasPrice = setGasPrice;
3992
- ({ maxFee, maxGas, minFee, minGas } = this.estimateTxGasAndFee({
3993
- transactionRequest: txRequestClone
4190
+ ({ maxFee, maxGas, minFee, minGas, gasPrice } = await this.estimateTxGasAndFee({
4191
+ transactionRequest: txRequestClone,
4192
+ gasPrice
3994
4193
  }));
3995
4194
  }
3996
4195
  return {
3997
4196
  requiredQuantities: allQuantities,
3998
4197
  receipts,
3999
4198
  gasUsed,
4000
- minGasPrice,
4001
- gasPrice: setGasPrice,
4199
+ gasPrice,
4002
4200
  minGas,
4003
4201
  maxGas,
4004
4202
  minFee,
4005
4203
  maxFee,
4006
- estimatedInputs: txRequestClone.inputs,
4007
4204
  outputVariables,
4008
- missingContractIds
4205
+ missingContractIds,
4206
+ addedSignatures,
4207
+ estimatedPredicates: txRequestClone.inputs
4009
4208
  };
4010
4209
  }
4011
- async getResourcesForTransaction(owner, transactionRequestLike, forwardingQuantities = []) {
4210
+ async getResourcesForTransaction(owner, transactionRequestLike, quantitiesToContract = []) {
4012
4211
  const ownerAddress = Address2.fromAddressOrString(owner);
4013
4212
  const transactionRequest = transactionRequestify(clone3(transactionRequestLike));
4014
- const transactionCost = await this.getTransactionCost(transactionRequest, forwardingQuantities);
4213
+ const transactionCost = await this.getTransactionCost(transactionRequest, {
4214
+ quantitiesToContract
4215
+ });
4015
4216
  transactionRequest.addResources(
4016
4217
  await this.getResourcesToSpend(ownerAddress, transactionCost.requiredQuantities)
4017
4218
  );
4018
- const { requiredQuantities, ...txCost } = await this.getTransactionCost(
4019
- transactionRequest,
4020
- forwardingQuantities
4021
- );
4219
+ const { requiredQuantities, ...txCost } = await this.getTransactionCost(transactionRequest, {
4220
+ quantitiesToContract
4221
+ });
4022
4222
  const resources = await this.getResourcesToSpend(ownerAddress, requiredQuantities);
4023
4223
  return {
4024
4224
  resources,
@@ -4040,11 +4240,10 @@ var _Provider = class {
4040
4240
  return coins.map((coin) => ({
4041
4241
  id: coin.utxoId,
4042
4242
  assetId: coin.assetId,
4043
- amount: bn15(coin.amount),
4243
+ amount: bn16(coin.amount),
4044
4244
  owner: Address2.fromAddressOrString(coin.owner),
4045
- maturity: bn15(coin.maturity).toNumber(),
4046
- blockCreated: bn15(coin.blockCreated),
4047
- txCreatedIdx: bn15(coin.txCreatedIdx)
4245
+ blockCreated: bn16(coin.blockCreated),
4246
+ txCreatedIdx: bn16(coin.txCreatedIdx)
4048
4247
  }));
4049
4248
  }
4050
4249
  /**
@@ -4081,9 +4280,9 @@ var _Provider = class {
4081
4280
  switch (coin.__typename) {
4082
4281
  case "MessageCoin":
4083
4282
  return {
4084
- amount: bn15(coin.amount),
4283
+ amount: bn16(coin.amount),
4085
4284
  assetId: coin.assetId,
4086
- daHeight: bn15(coin.daHeight),
4285
+ daHeight: bn16(coin.daHeight),
4087
4286
  sender: Address2.fromAddressOrString(coin.sender),
4088
4287
  recipient: Address2.fromAddressOrString(coin.recipient),
4089
4288
  nonce: coin.nonce
@@ -4091,12 +4290,11 @@ var _Provider = class {
4091
4290
  case "Coin":
4092
4291
  return {
4093
4292
  id: coin.utxoId,
4094
- amount: bn15(coin.amount),
4293
+ amount: bn16(coin.amount),
4095
4294
  assetId: coin.assetId,
4096
4295
  owner: Address2.fromAddressOrString(coin.owner),
4097
- maturity: bn15(coin.maturity).toNumber(),
4098
- blockCreated: bn15(coin.blockCreated),
4099
- txCreatedIdx: bn15(coin.txCreatedIdx)
4296
+ blockCreated: bn16(coin.blockCreated),
4297
+ txCreatedIdx: bn16(coin.txCreatedIdx)
4100
4298
  };
4101
4299
  default:
4102
4300
  return null;
@@ -4113,13 +4311,13 @@ var _Provider = class {
4113
4311
  async getBlock(idOrHeight) {
4114
4312
  let variables;
4115
4313
  if (typeof idOrHeight === "number") {
4116
- variables = { height: bn15(idOrHeight).toString(10) };
4314
+ variables = { height: bn16(idOrHeight).toString(10) };
4117
4315
  } else if (idOrHeight === "latest") {
4118
4316
  variables = { height: (await this.getBlockNumber()).toString(10) };
4119
4317
  } else if (idOrHeight.length === 66) {
4120
4318
  variables = { blockId: idOrHeight };
4121
4319
  } else {
4122
- variables = { blockId: bn15(idOrHeight).toString(10) };
4320
+ variables = { blockId: bn16(idOrHeight).toString(10) };
4123
4321
  }
4124
4322
  const { block } = await this.operations.getBlock(variables);
4125
4323
  if (!block) {
@@ -4127,7 +4325,7 @@ var _Provider = class {
4127
4325
  }
4128
4326
  return {
4129
4327
  id: block.id,
4130
- height: bn15(block.header.height),
4328
+ height: bn16(block.height),
4131
4329
  time: block.header.time,
4132
4330
  transactionIds: block.transactions.map((tx) => tx.id)
4133
4331
  };
@@ -4142,7 +4340,7 @@ var _Provider = class {
4142
4340
  const { blocks: fetchedData } = await this.operations.getBlocks(params);
4143
4341
  const blocks = fetchedData.edges.map(({ node: block }) => ({
4144
4342
  id: block.id,
4145
- height: bn15(block.header.height),
4343
+ height: bn16(block.height),
4146
4344
  time: block.header.time,
4147
4345
  transactionIds: block.transactions.map((tx) => tx.id)
4148
4346
  }));
@@ -4157,7 +4355,7 @@ var _Provider = class {
4157
4355
  async getBlockWithTransactions(idOrHeight) {
4158
4356
  let variables;
4159
4357
  if (typeof idOrHeight === "number") {
4160
- variables = { blockHeight: bn15(idOrHeight).toString(10) };
4358
+ variables = { blockHeight: bn16(idOrHeight).toString(10) };
4161
4359
  } else if (idOrHeight === "latest") {
4162
4360
  variables = { blockHeight: (await this.getBlockNumber()).toString() };
4163
4361
  } else {
@@ -4169,7 +4367,7 @@ var _Provider = class {
4169
4367
  }
4170
4368
  return {
4171
4369
  id: block.id,
4172
- height: bn15(block.header.height, 10),
4370
+ height: bn16(block.height, 10),
4173
4371
  time: block.header.time,
4174
4372
  transactionIds: block.transactions.map((tx) => tx.id),
4175
4373
  transactions: block.transactions.map(
@@ -4218,7 +4416,7 @@ var _Provider = class {
4218
4416
  contract: Address2.fromAddressOrString(contractId).toB256(),
4219
4417
  asset: hexlify12(assetId)
4220
4418
  });
4221
- return bn15(contractBalance.amount, 10);
4419
+ return bn16(contractBalance.amount, 10);
4222
4420
  }
4223
4421
  /**
4224
4422
  * Returns the balance for the given owner for the given asset ID.
@@ -4232,7 +4430,7 @@ var _Provider = class {
4232
4430
  owner: Address2.fromAddressOrString(owner).toB256(),
4233
4431
  assetId: hexlify12(assetId)
4234
4432
  });
4235
- return bn15(balance.amount, 10);
4433
+ return bn16(balance.amount, 10);
4236
4434
  }
4237
4435
  /**
4238
4436
  * Returns balances for the given owner.
@@ -4250,7 +4448,7 @@ var _Provider = class {
4250
4448
  const balances = result.balances.edges.map((edge) => edge.node);
4251
4449
  return balances.map((balance) => ({
4252
4450
  assetId: balance.assetId,
4253
- amount: bn15(balance.amount)
4451
+ amount: bn16(balance.amount)
4254
4452
  }));
4255
4453
  }
4256
4454
  /**
@@ -4272,15 +4470,15 @@ var _Provider = class {
4272
4470
  sender: message.sender,
4273
4471
  recipient: message.recipient,
4274
4472
  nonce: message.nonce,
4275
- amount: bn15(message.amount),
4473
+ amount: bn16(message.amount),
4276
4474
  data: message.data
4277
4475
  }),
4278
4476
  sender: Address2.fromAddressOrString(message.sender),
4279
4477
  recipient: Address2.fromAddressOrString(message.recipient),
4280
4478
  nonce: message.nonce,
4281
- amount: bn15(message.amount),
4479
+ amount: bn16(message.amount),
4282
4480
  data: InputMessageCoder.decodeData(message.data),
4283
- daHeight: bn15(message.daHeight)
4481
+ daHeight: bn16(message.daHeight)
4284
4482
  }));
4285
4483
  }
4286
4484
  /**
@@ -4333,44 +4531,52 @@ var _Provider = class {
4333
4531
  } = result.messageProof;
4334
4532
  return {
4335
4533
  messageProof: {
4336
- proofIndex: bn15(messageProof.proofIndex),
4534
+ proofIndex: bn16(messageProof.proofIndex),
4337
4535
  proofSet: messageProof.proofSet
4338
4536
  },
4339
4537
  blockProof: {
4340
- proofIndex: bn15(blockProof.proofIndex),
4538
+ proofIndex: bn16(blockProof.proofIndex),
4341
4539
  proofSet: blockProof.proofSet
4342
4540
  },
4343
4541
  messageBlockHeader: {
4344
4542
  id: messageBlockHeader.id,
4345
- daHeight: bn15(messageBlockHeader.daHeight),
4346
- transactionsCount: bn15(messageBlockHeader.transactionsCount),
4543
+ daHeight: bn16(messageBlockHeader.daHeight),
4544
+ transactionsCount: bn16(messageBlockHeader.transactionsCount),
4347
4545
  transactionsRoot: messageBlockHeader.transactionsRoot,
4348
- height: bn15(messageBlockHeader.height),
4546
+ height: bn16(messageBlockHeader.height),
4349
4547
  prevRoot: messageBlockHeader.prevRoot,
4350
4548
  time: messageBlockHeader.time,
4351
4549
  applicationHash: messageBlockHeader.applicationHash,
4352
- messageReceiptRoot: messageBlockHeader.messageReceiptRoot,
4353
- messageReceiptCount: bn15(messageBlockHeader.messageReceiptCount)
4550
+ messageReceiptCount: bn16(messageBlockHeader.messageReceiptCount)
4354
4551
  },
4355
4552
  commitBlockHeader: {
4356
4553
  id: commitBlockHeader.id,
4357
- daHeight: bn15(commitBlockHeader.daHeight),
4358
- transactionsCount: bn15(commitBlockHeader.transactionsCount),
4554
+ daHeight: bn16(commitBlockHeader.daHeight),
4555
+ transactionsCount: bn16(commitBlockHeader.transactionsCount),
4359
4556
  transactionsRoot: commitBlockHeader.transactionsRoot,
4360
- height: bn15(commitBlockHeader.height),
4557
+ height: bn16(commitBlockHeader.height),
4361
4558
  prevRoot: commitBlockHeader.prevRoot,
4362
4559
  time: commitBlockHeader.time,
4363
4560
  applicationHash: commitBlockHeader.applicationHash,
4364
- messageReceiptRoot: commitBlockHeader.messageReceiptRoot,
4365
- messageReceiptCount: bn15(commitBlockHeader.messageReceiptCount)
4561
+ messageReceiptCount: bn16(commitBlockHeader.messageReceiptCount)
4366
4562
  },
4367
4563
  sender: Address2.fromAddressOrString(sender),
4368
4564
  recipient: Address2.fromAddressOrString(recipient),
4369
4565
  nonce,
4370
- amount: bn15(amount),
4566
+ amount: bn16(amount),
4371
4567
  data
4372
4568
  };
4373
4569
  }
4570
+ async getLatestGasPrice() {
4571
+ const { latestGasPrice } = await this.operations.getLatestGasPrice();
4572
+ return bn16(latestGasPrice.gasPrice);
4573
+ }
4574
+ async estimateGasPrice(blockHorizon) {
4575
+ const { estimateGasPrice } = await this.operations.estimateGasPrice({
4576
+ blockHorizon: String(blockHorizon)
4577
+ });
4578
+ return bn16(estimateGasPrice.gasPrice);
4579
+ }
4374
4580
  /**
4375
4581
  * Returns Message Proof for given transaction id and the message id from MessageOut receipt.
4376
4582
  *
@@ -4390,10 +4596,10 @@ var _Provider = class {
4390
4596
  */
4391
4597
  async produceBlocks(amount, startTime) {
4392
4598
  const { produceBlocks: latestBlockHeight } = await this.operations.produceBlocks({
4393
- blocksToProduce: bn15(amount).toString(10),
4599
+ blocksToProduce: bn16(amount).toString(10),
4394
4600
  startTimestamp: startTime ? DateTime2.fromUnixMilliseconds(startTime).toTai64() : void 0
4395
4601
  });
4396
- return bn15(latestBlockHeight);
4602
+ return bn16(latestBlockHeight);
4397
4603
  }
4398
4604
  // eslint-disable-next-line @typescript-eslint/require-await
4399
4605
  async getTransactionResponse(transactionId) {
@@ -4407,7 +4613,7 @@ cacheInputs_fn = function(inputs) {
4407
4613
  return;
4408
4614
  }
4409
4615
  inputs.forEach((input) => {
4410
- if (input.type === InputType6.Coin) {
4616
+ if (input.type === InputType7.Coin) {
4411
4617
  this.cache?.set(input.id);
4412
4618
  }
4413
4619
  });
@@ -4417,7 +4623,7 @@ __publicField(Provider, "nodeInfoCache", {});
4417
4623
 
4418
4624
  // src/providers/transaction-summary/get-transaction-summary.ts
4419
4625
  import { ErrorCode as ErrorCode14, FuelError as FuelError14 } from "@fuel-ts/errors";
4420
- import { bn as bn16 } from "@fuel-ts/math";
4626
+ import { bn as bn17 } from "@fuel-ts/math";
4421
4627
  import { TransactionCoder as TransactionCoder6 } from "@fuel-ts/transactions";
4422
4628
  import { arrayify as arrayify12 } from "@fuel-ts/utils";
4423
4629
 
@@ -4663,36 +4869,33 @@ var Account = class extends AbstractAccount {
4663
4869
  * @param fee - The estimated transaction fee.
4664
4870
  * @returns A promise that resolves when the resources are added to the transaction.
4665
4871
  */
4666
- async fund(request, coinQuantities, fee) {
4667
- const updatedQuantities = addAmountToAsset({
4668
- amount: bn17(fee),
4872
+ async fund(request, params) {
4873
+ const { addedSignatures, estimatedPredicates, maxFee: fee, requiredQuantities } = params;
4874
+ const txRequest = request;
4875
+ const requiredQuantitiesWithFee = addAmountToCoinQuantities({
4876
+ amount: bn18(fee),
4669
4877
  assetId: BaseAssetId3,
4670
- coinQuantities
4878
+ coinQuantities: requiredQuantities
4671
4879
  });
4672
4880
  const quantitiesDict = {};
4673
- updatedQuantities.forEach(({ amount, assetId }) => {
4881
+ requiredQuantitiesWithFee.forEach(({ amount, assetId }) => {
4674
4882
  quantitiesDict[assetId] = {
4675
4883
  required: amount,
4676
- owned: bn17(0)
4884
+ owned: bn18(0)
4677
4885
  };
4678
4886
  });
4679
- const cachedUtxos = [];
4680
- const cachedMessages = [];
4681
- const owner = this.address.toB256();
4682
- request.inputs.forEach((input) => {
4887
+ txRequest.inputs.forEach((input) => {
4683
4888
  const isResource = "amount" in input;
4684
4889
  if (isResource) {
4685
4890
  const isCoin2 = "owner" in input;
4686
4891
  if (isCoin2) {
4687
4892
  const assetId = String(input.assetId);
4688
- if (input.owner === owner && quantitiesDict[assetId]) {
4689
- const amount = bn17(input.amount);
4893
+ if (quantitiesDict[assetId]) {
4894
+ const amount = bn18(input.amount);
4690
4895
  quantitiesDict[assetId].owned = quantitiesDict[assetId].owned.add(amount);
4691
- cachedUtxos.push(input.id);
4692
4896
  }
4693
- } else if (input.recipient === owner && input.amount && quantitiesDict[BaseAssetId3]) {
4897
+ } else if (input.amount && quantitiesDict[BaseAssetId3]) {
4694
4898
  quantitiesDict[BaseAssetId3].owned = quantitiesDict[BaseAssetId3].owned.add(input.amount);
4695
- cachedMessages.push(input.nonce);
4696
4899
  }
4697
4900
  }
4698
4901
  });
@@ -4707,12 +4910,23 @@ var Account = class extends AbstractAccount {
4707
4910
  });
4708
4911
  const needsToBeFunded = missingQuantities.length;
4709
4912
  if (needsToBeFunded) {
4710
- const resources = await this.getResourcesToSpend(missingQuantities, {
4711
- messages: cachedMessages,
4712
- utxos: cachedUtxos
4713
- });
4714
- request.addResources(resources);
4913
+ const excludedIds = cacheTxInputsFromOwner(txRequest.inputs, this.address.toB256());
4914
+ const resources = await this.getResourcesToSpend(missingQuantities, excludedIds);
4915
+ txRequest.addResources(resources);
4916
+ }
4917
+ txRequest.shiftPredicateData();
4918
+ txRequest.updatePredicateGasUsed(estimatedPredicates);
4919
+ const requestToBeReEstimate = clone4(txRequest);
4920
+ if (addedSignatures) {
4921
+ Array.from({ length: addedSignatures }).forEach(
4922
+ () => requestToBeReEstimate.addEmptyWitness()
4923
+ );
4715
4924
  }
4925
+ const { maxFee } = await this.provider.estimateTxGasAndFee({
4926
+ transactionRequest: requestToBeReEstimate
4927
+ });
4928
+ txRequest.maxFee = maxFee;
4929
+ return txRequest;
4716
4930
  }
4717
4931
  /**
4718
4932
  * A helper that creates a transfer transaction request and returns it.
@@ -4720,28 +4934,25 @@ var Account = class extends AbstractAccount {
4720
4934
  * @param destination - The address of the destination.
4721
4935
  * @param amount - The amount of coins to transfer.
4722
4936
  * @param assetId - The asset ID of the coins to transfer.
4723
- * @param txParams - The transaction parameters (gasLimit, gasPrice, maturity).
4937
+ * @param txParams - The transaction parameters (gasLimit, tip, maturity, maxFee, witnessLimit).
4724
4938
  * @returns A promise that resolves to the prepared transaction request.
4725
4939
  */
4726
4940
  async createTransfer(destination, amount, assetId = BaseAssetId3, txParams = {}) {
4727
- const { minGasPrice } = this.provider.getGasConfig();
4728
- const params = { gasPrice: minGasPrice, ...txParams };
4729
- const request = new ScriptTransactionRequest(params);
4941
+ const request = new ScriptTransactionRequest(txParams);
4730
4942
  request.addCoinOutput(Address3.fromAddressOrString(destination), amount, assetId);
4731
- const { maxFee, requiredQuantities, gasUsed, estimatedInputs } = await this.provider.getTransactionCost(request, [], {
4943
+ const txCost = await this.provider.getTransactionCost(request, {
4732
4944
  estimateTxDependencies: true,
4733
4945
  resourcesOwner: this
4734
4946
  });
4735
- request.gasPrice = bn17(txParams.gasPrice ?? minGasPrice);
4736
- request.gasLimit = bn17(txParams.gasLimit ?? gasUsed);
4737
- this.validateGas({
4738
- gasUsed,
4739
- gasPrice: request.gasPrice,
4740
- gasLimit: request.gasLimit,
4741
- minGasPrice
4742
- });
4743
- await this.fund(request, requiredQuantities, maxFee);
4744
- request.updatePredicateInputs(estimatedInputs);
4947
+ if ("gasLimit" in txParams) {
4948
+ this.validateGas({
4949
+ gasUsed: txCost.gasUsed,
4950
+ gasLimit: request.gasLimit
4951
+ });
4952
+ }
4953
+ request.gasLimit = txCost.gasUsed;
4954
+ request.maxFee = txCost.maxFee;
4955
+ await this.fund(request, txCost);
4745
4956
  return request;
4746
4957
  }
4747
4958
  /**
@@ -4754,7 +4965,7 @@ var Account = class extends AbstractAccount {
4754
4965
  * @returns A promise that resolves to the transaction response.
4755
4966
  */
4756
4967
  async transfer(destination, amount, assetId = BaseAssetId3, txParams = {}) {
4757
- if (bn17(amount).lte(0)) {
4968
+ if (bn18(amount).lte(0)) {
4758
4969
  throw new FuelError15(
4759
4970
  ErrorCode15.INVALID_TRANSFER_AMOUNT,
4760
4971
  "Transfer amount must be a positive number."
@@ -4773,38 +4984,37 @@ var Account = class extends AbstractAccount {
4773
4984
  * @returns A promise that resolves to the transaction response.
4774
4985
  */
4775
4986
  async transferToContract(contractId, amount, assetId = BaseAssetId3, txParams = {}) {
4776
- if (bn17(amount).lte(0)) {
4987
+ if (bn18(amount).lte(0)) {
4777
4988
  throw new FuelError15(
4778
4989
  ErrorCode15.INVALID_TRANSFER_AMOUNT,
4779
4990
  "Transfer amount must be a positive number."
4780
4991
  );
4781
4992
  }
4782
4993
  const contractAddress = Address3.fromAddressOrString(contractId);
4783
- const { minGasPrice } = this.provider.getGasConfig();
4784
- const params = { gasPrice: minGasPrice, ...txParams };
4785
4994
  const { script, scriptData } = await assembleTransferToContractScript({
4786
4995
  hexlifiedContractId: contractAddress.toB256(),
4787
- amountToTransfer: bn17(amount),
4996
+ amountToTransfer: bn18(amount),
4788
4997
  assetId
4789
4998
  });
4790
4999
  const request = new ScriptTransactionRequest({
4791
- ...params,
5000
+ ...txParams,
4792
5001
  script,
4793
5002
  scriptData
4794
5003
  });
4795
5004
  request.addContractInputAndOutput(contractAddress);
4796
- const { maxFee, requiredQuantities, gasUsed } = await this.provider.getTransactionCost(
4797
- request,
4798
- [{ amount: bn17(amount), assetId: String(assetId) }]
4799
- );
4800
- request.gasLimit = bn17(params.gasLimit ?? gasUsed);
4801
- this.validateGas({
4802
- gasUsed,
4803
- gasPrice: request.gasPrice,
4804
- gasLimit: request.gasLimit,
4805
- minGasPrice
5005
+ const txCost = await this.provider.getTransactionCost(request, {
5006
+ resourcesOwner: this,
5007
+ quantitiesToContract: [{ amount: bn18(amount), assetId: String(assetId) }]
4806
5008
  });
4807
- await this.fund(request, requiredQuantities, maxFee);
5009
+ if (txParams.gasLimit) {
5010
+ this.validateGas({
5011
+ gasUsed: txCost.gasUsed,
5012
+ gasLimit: request.gasLimit
5013
+ });
5014
+ }
5015
+ request.gasLimit = txCost.gasUsed;
5016
+ request.maxFee = txCost.maxFee;
5017
+ await this.fund(request, txCost);
4808
5018
  return this.sendTransaction(request);
4809
5019
  }
4810
5020
  /**
@@ -4816,34 +5026,31 @@ var Account = class extends AbstractAccount {
4816
5026
  * @returns A promise that resolves to the transaction response.
4817
5027
  */
4818
5028
  async withdrawToBaseLayer(recipient, amount, txParams = {}) {
4819
- const { minGasPrice } = this.provider.getGasConfig();
4820
5029
  const recipientAddress = Address3.fromAddressOrString(recipient);
4821
5030
  const recipientDataArray = arrayify14(
4822
5031
  "0x".concat(recipientAddress.toHexString().substring(2).padStart(64, "0"))
4823
5032
  );
4824
5033
  const amountDataArray = arrayify14(
4825
- "0x".concat(bn17(amount).toHex().substring(2).padStart(16, "0"))
5034
+ "0x".concat(bn18(amount).toHex().substring(2).padStart(16, "0"))
4826
5035
  );
4827
5036
  const script = new Uint8Array([
4828
5037
  ...arrayify14(withdrawScript.bytes),
4829
5038
  ...recipientDataArray,
4830
5039
  ...amountDataArray
4831
5040
  ]);
4832
- const params = { script, gasPrice: minGasPrice, ...txParams };
5041
+ const params = { script, ...txParams };
4833
5042
  const request = new ScriptTransactionRequest(params);
4834
- const forwardingQuantities = [{ amount: bn17(amount), assetId: BaseAssetId3 }];
4835
- const { requiredQuantities, maxFee, gasUsed } = await this.provider.getTransactionCost(
4836
- request,
4837
- forwardingQuantities
4838
- );
4839
- request.gasLimit = bn17(params.gasLimit ?? gasUsed);
4840
- this.validateGas({
4841
- gasUsed,
4842
- gasPrice: request.gasPrice,
4843
- gasLimit: request.gasLimit,
4844
- minGasPrice
4845
- });
4846
- await this.fund(request, requiredQuantities, maxFee);
5043
+ const quantitiesToContract = [{ amount: bn18(amount), assetId: BaseAssetId3 }];
5044
+ const txCost = await this.provider.getTransactionCost(request, { quantitiesToContract });
5045
+ if (txParams.gasLimit) {
5046
+ this.validateGas({
5047
+ gasUsed: txCost.gasUsed,
5048
+ gasLimit: request.gasLimit
5049
+ });
5050
+ }
5051
+ request.maxFee = txCost.maxFee;
5052
+ request.gasLimit = txCost.gasUsed;
5053
+ await this.fund(request, txCost);
4847
5054
  return this.sendTransaction(request);
4848
5055
  }
4849
5056
  async signMessage(message) {
@@ -4901,18 +5108,7 @@ var Account = class extends AbstractAccount {
4901
5108
  }
4902
5109
  return this.provider.simulate(transactionRequest, { estimateTxDependencies: false });
4903
5110
  }
4904
- validateGas({
4905
- gasUsed,
4906
- gasPrice,
4907
- gasLimit,
4908
- minGasPrice
4909
- }) {
4910
- if (minGasPrice.gt(gasPrice)) {
4911
- throw new FuelError15(
4912
- ErrorCode15.GAS_PRICE_TOO_LOW,
4913
- `Gas price '${gasPrice}' is lower than the required: '${minGasPrice}'.`
4914
- );
4915
- }
5111
+ validateGas({ gasUsed, gasLimit }) {
4916
5112
  if (gasUsed.gt(gasLimit)) {
4917
5113
  throw new FuelError15(
4918
5114
  ErrorCode15.GAS_LIMIT_TOO_LOW,
@@ -5204,7 +5400,7 @@ var BaseWalletUnlocked = class extends Account {
5204
5400
  * @param transactionRequestLike - The transaction request to send.
5205
5401
  * @returns A promise that resolves to the TransactionResponse object.
5206
5402
  */
5207
- async sendTransaction(transactionRequestLike, { estimateTxDependencies = true, awaitExecution } = {}) {
5403
+ async sendTransaction(transactionRequestLike, { estimateTxDependencies = false, awaitExecution } = {}) {
5208
5404
  const transactionRequest = transactionRequestify(transactionRequestLike);
5209
5405
  if (estimateTxDependencies) {
5210
5406
  await this.provider.estimateTxDependencies(transactionRequest);
@@ -5245,7 +5441,7 @@ __publicField(BaseWalletUnlocked, "defaultPath", "m/44'/1179993420'/0'/0/0");
5245
5441
  // src/hdwallet/hdwallet.ts
5246
5442
  import { ErrorCode as ErrorCode19, FuelError as FuelError19 } from "@fuel-ts/errors";
5247
5443
  import { sha256 as sha2564 } from "@fuel-ts/hasher";
5248
- import { bn as bn18, toBytes as toBytes2, toHex } from "@fuel-ts/math";
5444
+ import { bn as bn19, toBytes as toBytes2, toHex } from "@fuel-ts/math";
5249
5445
  import { arrayify as arrayify18, hexlify as hexlify17, concat as concat5 } from "@fuel-ts/utils";
5250
5446
  import { toBeHex, dataSlice as dataSlice2, encodeBase58 as encodeBase582, decodeBase58, computeHmac as computeHmac2, ripemd160 } from "ethers";
5251
5447
 
@@ -7711,7 +7907,7 @@ var HDWallet = class {
7711
7907
  const IR = bytes.slice(32);
7712
7908
  if (privateKey) {
7713
7909
  const N = "0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141";
7714
- const ki = bn18(IL).add(privateKey).mod(N).toBytes(32);
7910
+ const ki = bn19(IL).add(privateKey).mod(N).toBytes(32);
7715
7911
  return new HDWallet({
7716
7912
  privateKey: ki,
7717
7913
  chainCode: IR,
@@ -7982,14 +8178,15 @@ var seedTestWallet = async (wallet, quantities) => {
7982
8178
  process.env.GENESIS_SECRET || randomBytes5(32),
7983
8179
  wallet.provider
7984
8180
  );
7985
- const resources = await genesisWallet.getResourcesToSpend(quantities);
7986
- const { minGasPrice } = genesisWallet.provider.getGasConfig();
7987
- const request = new ScriptTransactionRequest({
7988
- gasLimit: 1e4,
7989
- gasPrice: minGasPrice
8181
+ const request = new ScriptTransactionRequest();
8182
+ quantities.forEach((quantity) => {
8183
+ const { amount, assetId } = coinQuantityfy(quantity);
8184
+ request.addCoinOutput(wallet.address, amount, assetId);
7990
8185
  });
7991
- request.addResources(resources);
7992
- quantities.map(coinQuantityfy).forEach(({ amount, assetId }) => request.addCoinOutput(wallet.address, amount, assetId));
8186
+ const txCost = await genesisWallet.provider.getTransactionCost(request);
8187
+ request.gasLimit = txCost.gasUsed;
8188
+ request.maxFee = txCost.maxFee;
8189
+ await genesisWallet.fund(request, txCost);
7993
8190
  await genesisWallet.sendTransaction(request, { awaitExecution: true });
7994
8191
  };
7995
8192
 
@@ -8004,11 +8201,11 @@ var generateTestWallet = async (provider, quantities) => {
8004
8201
 
8005
8202
  // src/test-utils/launchNode.ts
8006
8203
  import { BaseAssetId as BaseAssetId4 } from "@fuel-ts/address/configs";
8007
- import { toHex as toHex2 } from "@fuel-ts/math";
8008
- import { defaultChainConfig, defaultConsensusKey, hexlify as hexlify18 } from "@fuel-ts/utils";
8204
+ import { defaultChainConfigs, defaultConsensusKey, hexlify as hexlify18 } from "@fuel-ts/utils";
8009
8205
  import { findBinPath } from "@fuel-ts/utils/cli-utils";
8010
8206
  import { spawn } from "child_process";
8011
8207
  import { randomUUID } from "crypto";
8208
+ import { randomBytes as randomBytes6 } from "ethers";
8012
8209
  import { existsSync, mkdirSync, rmSync, writeFileSync } from "fs";
8013
8210
  import os from "os";
8014
8211
  import path from "path";
@@ -8057,12 +8254,12 @@ var launchNode = async ({
8057
8254
  // eslint-disable-next-line no-async-promise-executor
8058
8255
  new Promise(async (resolve, reject) => {
8059
8256
  const remainingArgs = extractRemainingArgs(args, [
8060
- "--chain",
8257
+ "--snapshot",
8061
8258
  "--consensus-key",
8062
8259
  "--db-type",
8063
8260
  "--poa-instant"
8064
8261
  ]);
8065
- const chainConfigPath = getFlagValueFromArgs(args, "--chain");
8262
+ const chainConfigPath = getFlagValueFromArgs(args, "--snapshot");
8066
8263
  const consensusKey = getFlagValueFromArgs(args, "--consensus-key") || defaultConsensusKey;
8067
8264
  const dbTypeFlagValue = getFlagValueFromArgs(args, "--db-type");
8068
8265
  const useInMemoryDb = dbTypeFlagValue === "in-memory" || dbTypeFlagValue === void 0;
@@ -8081,36 +8278,54 @@ var launchNode = async ({
8081
8278
  let chainConfigPathToUse;
8082
8279
  const prefix = basePath || os.tmpdir();
8083
8280
  const suffix = basePath ? "" : randomUUID();
8084
- const tempDirPath = path.join(prefix, ".fuels", suffix);
8281
+ const tempDirPath = path.join(prefix, ".fuels", suffix, "chainConfigs");
8085
8282
  if (chainConfigPath) {
8086
8283
  chainConfigPathToUse = chainConfigPath;
8087
8284
  } else {
8088
8285
  if (!existsSync(tempDirPath)) {
8089
8286
  mkdirSync(tempDirPath, { recursive: true });
8090
8287
  }
8091
- const tempChainConfigFilePath = path.join(tempDirPath, "chainConfig.json");
8092
- let chainConfig = defaultChainConfig;
8288
+ let { stateConfigJson } = defaultChainConfigs;
8289
+ const { chainConfigJson, metadataJson } = defaultChainConfigs;
8290
+ stateConfigJson = {
8291
+ ...stateConfigJson,
8292
+ coins: [
8293
+ ...stateConfigJson.coins.map((coin) => ({
8294
+ ...coin,
8295
+ amount: "18446744073709551615"
8296
+ }))
8297
+ ],
8298
+ messages: stateConfigJson.messages.map((message) => ({
8299
+ ...message,
8300
+ amount: "18446744073709551615"
8301
+ }))
8302
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8303
+ };
8093
8304
  if (!process.env.GENESIS_SECRET) {
8094
8305
  const pk = Signer.generatePrivateKey();
8095
8306
  const signer = new Signer(pk);
8096
8307
  process.env.GENESIS_SECRET = hexlify18(pk);
8097
- chainConfig = {
8098
- ...defaultChainConfig,
8099
- initial_state: {
8100
- ...defaultChainConfig.initial_state,
8101
- coins: [
8102
- ...defaultChainConfig.initial_state.coins,
8103
- {
8104
- owner: signer.address.toHexString(),
8105
- amount: toHex2(1e9),
8106
- asset_id: BaseAssetId4
8107
- }
8108
- ]
8109
- }
8110
- };
8308
+ stateConfigJson.coins.push({
8309
+ tx_id: hexlify18(randomBytes6(34)),
8310
+ owner: signer.address.toHexString(),
8311
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8312
+ amount: "18446744073709551615",
8313
+ asset_id: BaseAssetId4,
8314
+ output_index: 0,
8315
+ tx_pointer_block_height: 0,
8316
+ tx_pointer_tx_idx: 0
8317
+ });
8111
8318
  }
8112
- writeFileSync(tempChainConfigFilePath, JSON.stringify(chainConfig), "utf8");
8113
- chainConfigPathToUse = tempChainConfigFilePath;
8319
+ let fixedStateConfigJSON = JSON.stringify(stateConfigJson);
8320
+ const regexMakeNumber = /("amount":)"(\d+)"/gm;
8321
+ fixedStateConfigJSON = fixedStateConfigJSON.replace(regexMakeNumber, "$1$2");
8322
+ const chainConfigWritePath = path.join(tempDirPath, "chainConfig.json");
8323
+ const stateConfigWritePath = path.join(tempDirPath, "stateConfig.json");
8324
+ const metadataWritePath = path.join(tempDirPath, "metadata.json");
8325
+ writeFileSync(chainConfigWritePath, JSON.stringify(chainConfigJson), "utf8");
8326
+ writeFileSync(stateConfigWritePath, fixedStateConfigJSON, "utf8");
8327
+ writeFileSync(metadataWritePath, JSON.stringify(metadataJson), "utf8");
8328
+ chainConfigPathToUse = tempDirPath;
8114
8329
  }
8115
8330
  const child = spawn(
8116
8331
  command,
@@ -8119,10 +8334,10 @@ var launchNode = async ({
8119
8334
  ["--ip", ipToUse],
8120
8335
  ["--port", portToUse],
8121
8336
  useInMemoryDb ? ["--db-type", "in-memory"] : ["--db-path", tempDirPath],
8122
- ["--min-gas-price", "0"],
8337
+ ["--min-gas-price", "1"],
8123
8338
  poaInstant ? ["--poa-instant", "true"] : [],
8124
8339
  ["--consensus-key", consensusKey],
8125
- ["--chain", chainConfigPathToUse],
8340
+ ["--snapshot", chainConfigPathToUse],
8126
8341
  "--vm-backtrace",
8127
8342
  "--utxo-validation",
8128
8343
  "--debug",
@@ -8181,7 +8396,7 @@ var launchNodeAndGetWallets = async ({
8181
8396
  walletCount = 10
8182
8397
  } = {}) => {
8183
8398
  const { cleanup: closeNode, ip, port } = await launchNode(launchNodeOptions || {});
8184
- const provider = await Provider.create(`http://${ip}:${port}/graphql`);
8399
+ const provider = await Provider.create(`http://${ip}:${port}/v1/graphql`);
8185
8400
  const wallets = await generateWallets(walletCount, provider);
8186
8401
  const cleanup = () => {
8187
8402
  closeNode();