@fuel-ts/account 0.0.0-rc-2034-20240415163000 → 0.0.0-rc-2021-20240415193305

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 +795 -544
  12. package/dist/index.global.js.map +1 -1
  13. package/dist/index.js +762 -507
  14. package/dist/index.js.map +1 -1
  15. package/dist/index.mjs +642 -388
  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 +906 -324
  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 +7 -1
  27. package/dist/providers/message.d.ts.map +1 -1
  28. package/dist/providers/provider.d.ts +37 -27
  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 +1545 -1056
  48. package/dist/test-utils.global.js.map +1 -1
  49. package/dist/test-utils.js +740 -503
  50. package/dist/test-utils.js.map +1 -1
  51. package/dist/test-utils.mjs +634 -397
  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";
@@ -54,7 +55,7 @@ var coinQuantityfy = (coinQuantityLike) => {
54
55
  max: max2 ? bn(max2) : 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
  }
@@ -226,26 +266,32 @@ var MessageProofFragmentFragmentDoc = gql`
226
266
  messageBlockHeader {
227
267
  id
228
268
  daHeight
269
+ consensusParametersVersion
270
+ stateTransitionBytecodeVersion
229
271
  transactionsCount
272
+ messageReceiptCount
230
273
  transactionsRoot
274
+ messageOutboxRoot
275
+ eventInboxRoot
231
276
  height
232
277
  prevRoot
233
278
  time
234
279
  applicationHash
235
- messageReceiptRoot
236
- messageReceiptCount
237
280
  }
238
281
  commitBlockHeader {
239
282
  id
240
283
  daHeight
284
+ consensusParametersVersion
285
+ stateTransitionBytecodeVersion
241
286
  transactionsCount
287
+ messageReceiptCount
242
288
  transactionsRoot
289
+ messageOutboxRoot
290
+ eventInboxRoot
243
291
  height
244
292
  prevRoot
245
293
  time
246
294
  applicationHash
247
- messageReceiptRoot
248
- messageReceiptCount
249
295
  }
250
296
  sender
251
297
  recipient
@@ -264,8 +310,8 @@ var BalanceFragmentFragmentDoc = gql`
264
310
  var BlockFragmentFragmentDoc = gql`
265
311
  fragment blockFragment on Block {
266
312
  id
313
+ height
267
314
  header {
268
- height
269
315
  time
270
316
  }
271
317
  transactions {
@@ -323,6 +369,11 @@ var DependentCostFragmentFragmentDoc = gql`
323
369
  `;
324
370
  var GasCostsFragmentFragmentDoc = gql`
325
371
  fragment GasCostsFragment on GasCosts {
372
+ version {
373
+ ... on Version {
374
+ value
375
+ }
376
+ }
326
377
  add
327
378
  addi
328
379
  aloc
@@ -335,7 +386,6 @@ var GasCostsFragmentFragmentDoc = gql`
335
386
  cb
336
387
  cfei
337
388
  cfsi
338
- croo
339
389
  div
340
390
  divi
341
391
  ecr1
@@ -418,6 +468,9 @@ var GasCostsFragmentFragmentDoc = gql`
418
468
  ccp {
419
469
  ...DependentCostFragment
420
470
  }
471
+ croo {
472
+ ...DependentCostFragment
473
+ }
421
474
  csiz {
422
475
  ...DependentCostFragment
423
476
  }
@@ -477,6 +530,11 @@ var GasCostsFragmentFragmentDoc = gql`
477
530
  ${DependentCostFragmentFragmentDoc}`;
478
531
  var ConsensusParametersFragmentFragmentDoc = gql`
479
532
  fragment consensusParametersFragment on ConsensusParameters {
533
+ version {
534
+ ... on Version {
535
+ value
536
+ }
537
+ }
480
538
  txParams {
481
539
  ...TxParametersFragment
482
540
  }
@@ -536,18 +594,9 @@ var NodeInfoFragmentFragmentDoc = gql`
536
594
  fragment nodeInfoFragment on NodeInfo {
537
595
  utxoValidation
538
596
  vmBacktrace
539
- minGasPrice
540
597
  maxTx
541
598
  maxDepth
542
599
  nodeVersion
543
- peers {
544
- id
545
- addresses
546
- clientVersion
547
- blockHeight
548
- lastHeartbeatMs
549
- appScore
550
- }
551
600
  }
552
601
  `;
553
602
  var GetVersionDocument = gql`
@@ -582,13 +631,9 @@ var GetTransactionWithReceiptsDocument = gql`
582
631
  query getTransactionWithReceipts($transactionId: TransactionId!) {
583
632
  transaction(id: $transactionId) {
584
633
  ...transactionFragment
585
- receipts {
586
- ...receiptFragment
587
- }
588
634
  }
589
635
  }
590
- ${TransactionFragmentFragmentDoc}
591
- ${ReceiptFragmentFragmentDoc}`;
636
+ ${TransactionFragmentFragmentDoc}`;
592
637
  var GetTransactionsDocument = gql`
593
638
  query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
594
639
  transactions(after: $after, before: $before, first: $first, last: $last) {
@@ -716,6 +761,20 @@ var GetBalanceDocument = gql`
716
761
  }
717
762
  }
718
763
  ${BalanceFragmentFragmentDoc}`;
764
+ var GetLatestGasPriceDocument = gql`
765
+ query getLatestGasPrice {
766
+ latestGasPrice {
767
+ gasPrice
768
+ }
769
+ }
770
+ `;
771
+ var EstimateGasPriceDocument = gql`
772
+ query estimateGasPrice($blockHorizon: U32!) {
773
+ estimateGasPrice(blockHorizon: $blockHorizon) {
774
+ gasPrice
775
+ }
776
+ }
777
+ `;
719
778
  var GetBalancesDocument = gql`
720
779
  query getBalances($filter: BalanceFilterInput!, $after: String, $before: String, $first: Int, $last: Int) {
721
780
  balances(
@@ -770,12 +829,12 @@ var GetMessageStatusDocument = gql`
770
829
  }
771
830
  `;
772
831
  var DryRunDocument = gql`
773
- mutation dryRun($encodedTransaction: HexString!, $utxoValidation: Boolean) {
774
- dryRun(tx: $encodedTransaction, utxoValidation: $utxoValidation) {
775
- ...receiptFragment
832
+ mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean) {
833
+ dryRun(txs: $encodedTransactions, utxoValidation: $utxoValidation) {
834
+ ...dryRunTransactionExecutionStatusFragment
776
835
  }
777
836
  }
778
- ${ReceiptFragmentFragmentDoc}`;
837
+ ${DryRunTransactionExecutionStatusFragmentFragmentDoc}`;
779
838
  var SubmitDocument = gql`
780
839
  mutation submit($encodedTransaction: HexString!) {
781
840
  submit(tx: $encodedTransaction) {
@@ -858,6 +917,12 @@ function getSdk(requester) {
858
917
  getBalance(variables, options) {
859
918
  return requester(GetBalanceDocument, variables, options);
860
919
  },
920
+ getLatestGasPrice(variables, options) {
921
+ return requester(GetLatestGasPriceDocument, variables, options);
922
+ },
923
+ estimateGasPrice(variables, options) {
924
+ return requester(EstimateGasPriceDocument, variables, options);
925
+ },
861
926
  getBalances(variables, options) {
862
927
  return requester(GetBalancesDocument, variables, options);
863
928
  },
@@ -927,11 +992,14 @@ var _FuelGraphqlSubscriber = class {
927
992
  let data;
928
993
  let errors;
929
994
  try {
930
- ({ data, errors } = JSON.parse(text.replace(/^data:/, "")));
995
+ const sanitizedText = text.replace(/\s/g, "");
996
+ ({ data, errors } = JSON.parse(sanitizedText.replace(/^data:/, "")));
931
997
  } catch (e) {
932
998
  throw new FuelError(
933
999
  ErrorCode.STREAM_PARSING_ERROR,
934
- `Error while parsing stream data response: ${text}`
1000
+ `Error while parsing stream data response: ${text}
1001
+
1002
+ Thrown error: ${e}`
935
1003
  );
936
1004
  }
937
1005
  if (Array.isArray(errors)) {
@@ -1042,10 +1110,9 @@ var inputify = (value) => {
1042
1110
  txIndex: toNumber(arrayify(value.txPointer).slice(8, 16))
1043
1111
  },
1044
1112
  witnessIndex: value.witnessIndex,
1045
- maturity: value.maturity ?? 0,
1046
1113
  predicateGasUsed: bn2(value.predicateGasUsed),
1047
- predicateLength: predicate.length,
1048
- predicateDataLength: predicateData.length,
1114
+ predicateLength: bn2(predicate.length),
1115
+ predicateDataLength: bn2(predicateData.length),
1049
1116
  predicate: hexlify3(predicate),
1050
1117
  predicateData: hexlify3(predicateData)
1051
1118
  };
@@ -1076,8 +1143,8 @@ var inputify = (value) => {
1076
1143
  nonce: hexlify3(value.nonce),
1077
1144
  witnessIndex: value.witnessIndex,
1078
1145
  predicateGasUsed: bn2(value.predicateGasUsed),
1079
- predicateLength: predicate.length,
1080
- predicateDataLength: predicateData.length,
1146
+ predicateLength: bn2(predicate.length),
1147
+ predicateDataLength: bn2(predicateData.length),
1081
1148
  predicate: hexlify3(predicate),
1082
1149
  predicateData: hexlify3(predicateData),
1083
1150
  data: hexlify3(data),
@@ -1204,8 +1271,8 @@ function assembleReceiptByType(receipt) {
1204
1271
  case "CALL" /* Call */: {
1205
1272
  const callReceipt = {
1206
1273
  type: ReceiptType.Call,
1207
- from: hexOrZero(receipt.contract?.id),
1208
- to: hexOrZero(receipt?.to?.id),
1274
+ from: hexOrZero(receipt.id || receipt.contractId),
1275
+ to: hexOrZero(receipt?.to),
1209
1276
  amount: bn4(receipt.amount),
1210
1277
  assetId: hexOrZero(receipt.assetId),
1211
1278
  gas: bn4(receipt.gas),
@@ -1219,7 +1286,7 @@ function assembleReceiptByType(receipt) {
1219
1286
  case "RETURN" /* Return */: {
1220
1287
  const returnReceipt = {
1221
1288
  type: ReceiptType.Return,
1222
- id: hexOrZero(receipt.contract?.id),
1289
+ id: hexOrZero(receipt.id || receipt.contractId),
1223
1290
  val: bn4(receipt.val),
1224
1291
  pc: bn4(receipt.pc),
1225
1292
  is: bn4(receipt.is)
@@ -1229,7 +1296,7 @@ function assembleReceiptByType(receipt) {
1229
1296
  case "RETURN_DATA" /* ReturnData */: {
1230
1297
  const returnDataReceipt = {
1231
1298
  type: ReceiptType.ReturnData,
1232
- id: hexOrZero(receipt.contract?.id),
1299
+ id: hexOrZero(receipt.id || receipt.contractId),
1233
1300
  ptr: bn4(receipt.ptr),
1234
1301
  len: bn4(receipt.len),
1235
1302
  digest: hexOrZero(receipt.digest),
@@ -1241,7 +1308,7 @@ function assembleReceiptByType(receipt) {
1241
1308
  case "PANIC" /* Panic */: {
1242
1309
  const panicReceipt = {
1243
1310
  type: ReceiptType.Panic,
1244
- id: hexOrZero(receipt.contract?.id),
1311
+ id: hexOrZero(receipt.id),
1245
1312
  reason: bn4(receipt.reason),
1246
1313
  pc: bn4(receipt.pc),
1247
1314
  is: bn4(receipt.is),
@@ -1252,7 +1319,7 @@ function assembleReceiptByType(receipt) {
1252
1319
  case "REVERT" /* Revert */: {
1253
1320
  const revertReceipt = {
1254
1321
  type: ReceiptType.Revert,
1255
- id: hexOrZero(receipt.contract?.id),
1322
+ id: hexOrZero(receipt.id || receipt.contractId),
1256
1323
  val: bn4(receipt.ra),
1257
1324
  pc: bn4(receipt.pc),
1258
1325
  is: bn4(receipt.is)
@@ -1262,7 +1329,7 @@ function assembleReceiptByType(receipt) {
1262
1329
  case "LOG" /* Log */: {
1263
1330
  const logReceipt = {
1264
1331
  type: ReceiptType.Log,
1265
- id: hexOrZero(receipt.contract?.id),
1332
+ id: hexOrZero(receipt.id || receipt.contractId),
1266
1333
  val0: bn4(receipt.ra),
1267
1334
  val1: bn4(receipt.rb),
1268
1335
  val2: bn4(receipt.rc),
@@ -1275,7 +1342,7 @@ function assembleReceiptByType(receipt) {
1275
1342
  case "LOG_DATA" /* LogData */: {
1276
1343
  const logDataReceipt = {
1277
1344
  type: ReceiptType.LogData,
1278
- id: hexOrZero(receipt.contract?.id),
1345
+ id: hexOrZero(receipt.id || receipt.contractId),
1279
1346
  val0: bn4(receipt.ra),
1280
1347
  val1: bn4(receipt.rb),
1281
1348
  ptr: bn4(receipt.ptr),
@@ -1289,8 +1356,8 @@ function assembleReceiptByType(receipt) {
1289
1356
  case "TRANSFER" /* Transfer */: {
1290
1357
  const transferReceipt = {
1291
1358
  type: ReceiptType.Transfer,
1292
- from: hexOrZero(receipt.contract?.id),
1293
- to: hexOrZero(receipt.toAddress || receipt?.to?.id),
1359
+ from: hexOrZero(receipt.id || receipt.contractId),
1360
+ to: hexOrZero(receipt.toAddress || receipt?.to),
1294
1361
  amount: bn4(receipt.amount),
1295
1362
  assetId: hexOrZero(receipt.assetId),
1296
1363
  pc: bn4(receipt.pc),
@@ -1301,8 +1368,8 @@ function assembleReceiptByType(receipt) {
1301
1368
  case "TRANSFER_OUT" /* TransferOut */: {
1302
1369
  const transferOutReceipt = {
1303
1370
  type: ReceiptType.TransferOut,
1304
- from: hexOrZero(receipt.contract?.id),
1305
- to: hexOrZero(receipt.toAddress || receipt.to?.id),
1371
+ from: hexOrZero(receipt.id || receipt.contractId),
1372
+ to: hexOrZero(receipt.toAddress || receipt.to),
1306
1373
  amount: bn4(receipt.amount),
1307
1374
  assetId: hexOrZero(receipt.assetId),
1308
1375
  pc: bn4(receipt.pc),
@@ -1345,7 +1412,7 @@ function assembleReceiptByType(receipt) {
1345
1412
  return receiptMessageOut;
1346
1413
  }
1347
1414
  case "MINT" /* Mint */: {
1348
- const contractId = hexOrZero(receipt.contract?.id);
1415
+ const contractId = hexOrZero(receipt.id || receipt.contractId);
1349
1416
  const subId = hexOrZero(receipt.subId);
1350
1417
  const assetId = ReceiptMintCoder.getAssetId(contractId, subId);
1351
1418
  const mintReceipt = {
@@ -1360,7 +1427,7 @@ function assembleReceiptByType(receipt) {
1360
1427
  return mintReceipt;
1361
1428
  }
1362
1429
  case "BURN" /* Burn */: {
1363
- const contractId = hexOrZero(receipt.contract?.id);
1430
+ const contractId = hexOrZero(receipt.id || receipt.contractId);
1364
1431
  const subId = hexOrZero(receipt.subId);
1365
1432
  const assetId = ReceiptBurnCoder.getAssetId(contractId, subId);
1366
1433
  const burnReceipt = {
@@ -1386,7 +1453,6 @@ import { ErrorCode as ErrorCode6, FuelError as FuelError6 } from "@fuel-ts/error
1386
1453
  import { bn as bn5 } from "@fuel-ts/math";
1387
1454
  import { ReceiptType as ReceiptType2 } from "@fuel-ts/transactions";
1388
1455
  import { arrayify as arrayify3 } from "@fuel-ts/utils";
1389
- var calculatePriceWithFactor = (gas, gasPrice, priceFactor) => bn5(Math.ceil(gas.mul(gasPrice).toNumber() / priceFactor.toNumber()));
1390
1456
  var getGasUsedFromReceipts = (receipts) => {
1391
1457
  const scriptResult = receipts.filter(
1392
1458
  (receipt) => receipt.type === ReceiptType2.ScriptResult
@@ -1407,18 +1473,28 @@ function resolveGasDependentCosts(byteSize, gasDependentCost) {
1407
1473
  }
1408
1474
  function gasUsedByInputs(inputs, txBytesSize, gasCosts) {
1409
1475
  const witnessCache = [];
1410
- const totalGas = inputs.reduce((total, input) => {
1476
+ const chargeableInputs = inputs.filter((input) => {
1477
+ const isCoinOrMessage = "owner" in input || "sender" in input;
1478
+ if (isCoinOrMessage) {
1479
+ if ("predicate" in input && input.predicate && input.predicate !== "0x") {
1480
+ return true;
1481
+ }
1482
+ if (!witnessCache.includes(input.witnessIndex)) {
1483
+ witnessCache.push(input.witnessIndex);
1484
+ return true;
1485
+ }
1486
+ }
1487
+ return false;
1488
+ });
1489
+ const vmInitializationCost = resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization);
1490
+ const totalGas = chargeableInputs.reduce((total, input) => {
1411
1491
  if ("predicate" in input && input.predicate && input.predicate !== "0x") {
1412
1492
  return total.add(
1413
- resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization).add(resolveGasDependentCosts(arrayify3(input.predicate).length, gasCosts.contractRoot)).add(bn5(input.predicateGasUsed))
1493
+ vmInitializationCost.add(resolveGasDependentCosts(arrayify3(input.predicate).length, gasCosts.contractRoot)).add(bn5(input.predicateGasUsed))
1414
1494
  );
1415
1495
  }
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());
1496
+ return total.add(gasCosts.ecr1);
1497
+ }, bn5(0));
1422
1498
  return totalGas;
1423
1499
  }
1424
1500
  function getMinGas(params) {
@@ -1430,12 +1506,20 @@ function getMinGas(params) {
1430
1506
  return minGas;
1431
1507
  }
1432
1508
  function getMaxGas(params) {
1433
- const { gasPerByte, witnessesLength, witnessLimit, minGas, gasLimit = bn5(0) } = params;
1509
+ const {
1510
+ gasPerByte,
1511
+ witnessesLength,
1512
+ witnessLimit,
1513
+ minGas,
1514
+ gasLimit = bn5(0),
1515
+ maxGasPerTx
1516
+ } = params;
1434
1517
  let remainingAllowedWitnessGas = bn5(0);
1435
1518
  if (witnessLimit?.gt(0) && witnessLimit.gte(witnessesLength)) {
1436
1519
  remainingAllowedWitnessGas = bn5(witnessLimit).sub(witnessesLength).mul(gasPerByte);
1437
1520
  }
1438
- return remainingAllowedWitnessGas.add(minGas).add(gasLimit);
1521
+ const maxGas = remainingAllowedWitnessGas.add(minGas).add(gasLimit);
1522
+ return maxGas.gte(maxGasPerTx) ? maxGasPerTx : maxGas;
1439
1523
  }
1440
1524
  function calculateMetadataGasForTxCreate({
1441
1525
  gasCosts,
@@ -1457,6 +1541,10 @@ function calculateMetadataGasForTxScript({
1457
1541
  }) {
1458
1542
  return resolveGasDependentCosts(txBytesSize, gasCosts.s256);
1459
1543
  }
1544
+ var calculateGasFee = (params) => {
1545
+ const { gas, gasPrice, priceFactor, tip } = params;
1546
+ return gas.mul(gasPrice).div(priceFactor).add(tip);
1547
+ };
1460
1548
 
1461
1549
  // src/providers/utils/json.ts
1462
1550
  import { hexlify as hexlify5 } from "@fuel-ts/utils";
@@ -1601,7 +1689,7 @@ var witnessify = (value) => {
1601
1689
  // src/providers/transaction-request/transaction-request.ts
1602
1690
  var BaseTransactionRequest = class {
1603
1691
  /** Gas price for transaction */
1604
- gasPrice;
1692
+ tip;
1605
1693
  /** Block until which tx cannot be included */
1606
1694
  maturity;
1607
1695
  /** The maximum fee payable by this transaction using BASE_ASSET. */
@@ -1620,7 +1708,7 @@ var BaseTransactionRequest = class {
1620
1708
  * @param baseTransactionRequest - Optional object containing properties to initialize the transaction request.
1621
1709
  */
1622
1710
  constructor({
1623
- gasPrice,
1711
+ tip,
1624
1712
  maturity,
1625
1713
  maxFee,
1626
1714
  witnessLimit,
@@ -1628,7 +1716,7 @@ var BaseTransactionRequest = class {
1628
1716
  outputs,
1629
1717
  witnesses
1630
1718
  } = {}) {
1631
- this.gasPrice = bn7(gasPrice);
1719
+ this.tip = bn7(tip);
1632
1720
  this.maturity = maturity ?? 0;
1633
1721
  this.witnessLimit = witnessLimit ? bn7(witnessLimit) : void 0;
1634
1722
  this.maxFee = maxFee ? bn7(maxFee) : void 0;
@@ -1639,9 +1727,9 @@ var BaseTransactionRequest = class {
1639
1727
  static getPolicyMeta(req) {
1640
1728
  let policyTypes = 0;
1641
1729
  const policies = [];
1642
- if (req.gasPrice) {
1643
- policyTypes += PolicyType.GasPrice;
1644
- policies.push({ data: req.gasPrice, type: PolicyType.GasPrice });
1730
+ if (req.tip) {
1731
+ policyTypes += PolicyType.Tip;
1732
+ policies.push({ data: req.tip, type: PolicyType.Tip });
1645
1733
  }
1646
1734
  if (req.witnessLimit) {
1647
1735
  policyTypes += PolicyType.WitnessLimit;
@@ -1828,10 +1916,10 @@ var BaseTransactionRequest = class {
1828
1916
  * @param predicate - Predicate bytes.
1829
1917
  * @param predicateData - Predicate data bytes.
1830
1918
  */
1831
- addCoinInput(coin, predicate) {
1919
+ addCoinInput(coin) {
1832
1920
  const { assetId, owner, amount } = coin;
1833
1921
  let witnessIndex;
1834
- if (predicate) {
1922
+ if (coin.predicate) {
1835
1923
  witnessIndex = 0;
1836
1924
  } else {
1837
1925
  witnessIndex = this.getCoinInputWitnessIndexByOwner(owner);
@@ -1846,8 +1934,7 @@ var BaseTransactionRequest = class {
1846
1934
  amount,
1847
1935
  assetId,
1848
1936
  txPointer: "0x00000000000000000000000000000000",
1849
- witnessIndex,
1850
- predicate: predicate?.bytes
1937
+ witnessIndex
1851
1938
  };
1852
1939
  this.pushInput(input);
1853
1940
  this.addChangeOutput(owner, assetId);
@@ -1860,11 +1947,11 @@ var BaseTransactionRequest = class {
1860
1947
  * @param predicate - Predicate bytes.
1861
1948
  * @param predicateData - Predicate data bytes.
1862
1949
  */
1863
- addMessageInput(message, predicate) {
1950
+ addMessageInput(message) {
1864
1951
  const { recipient, sender, amount } = message;
1865
1952
  const assetId = BaseAssetId2;
1866
1953
  let witnessIndex;
1867
- if (predicate) {
1954
+ if (message.predicate) {
1868
1955
  witnessIndex = 0;
1869
1956
  } else {
1870
1957
  witnessIndex = this.getCoinInputWitnessIndexByOwner(recipient);
@@ -1878,8 +1965,7 @@ var BaseTransactionRequest = class {
1878
1965
  sender: sender.toB256(),
1879
1966
  recipient: recipient.toB256(),
1880
1967
  amount,
1881
- witnessIndex,
1882
- predicate: predicate?.bytes
1968
+ witnessIndex
1883
1969
  };
1884
1970
  this.pushInput(input);
1885
1971
  this.addChangeOutput(recipient, assetId);
@@ -1910,32 +1996,6 @@ var BaseTransactionRequest = class {
1910
1996
  resources.forEach((resource) => this.addResource(resource));
1911
1997
  return this;
1912
1998
  }
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
1999
  /**
1940
2000
  * Adds a coin output to the transaction.
1941
2001
  *
@@ -2015,7 +2075,7 @@ var BaseTransactionRequest = class {
2015
2075
  }
2016
2076
  calculateMaxGas(chainInfo, minGas) {
2017
2077
  const { consensusParameters } = chainInfo;
2018
- const { gasPerByte } = consensusParameters;
2078
+ const { gasPerByte, maxGasPerTx } = consensusParameters;
2019
2079
  const witnessesLength = this.toTransaction().witnesses.reduce(
2020
2080
  (acc, wit) => acc + wit.dataLength,
2021
2081
  0
@@ -2024,7 +2084,8 @@ var BaseTransactionRequest = class {
2024
2084
  gasPerByte,
2025
2085
  minGas,
2026
2086
  witnessesLength,
2027
- witnessLimit: this.witnessLimit
2087
+ witnessLimit: this.witnessLimit,
2088
+ maxGasPerTx
2028
2089
  });
2029
2090
  }
2030
2091
  /**
@@ -2042,17 +2103,20 @@ var BaseTransactionRequest = class {
2042
2103
  });
2043
2104
  const updateAssetInput = (assetId, quantity) => {
2044
2105
  const assetInput = findAssetInput(assetId);
2106
+ let usedQuantity = quantity;
2107
+ if (assetId === BaseAssetId2) {
2108
+ usedQuantity = bn7("1000000000000000000");
2109
+ }
2045
2110
  if (assetInput && "assetId" in assetInput) {
2046
2111
  assetInput.id = hexlify7(randomBytes(UTXO_ID_LEN2));
2047
- assetInput.amount = quantity;
2112
+ assetInput.amount = usedQuantity;
2048
2113
  } else {
2049
2114
  this.addResources([
2050
2115
  {
2051
2116
  id: hexlify7(randomBytes(UTXO_ID_LEN2)),
2052
- amount: quantity,
2117
+ amount: usedQuantity,
2053
2118
  assetId,
2054
2119
  owner: resourcesOwner || Address.fromRandom(),
2055
- maturity: 0,
2056
2120
  blockCreated: bn7(1),
2057
2121
  txCreatedIdx: bn7(1)
2058
2122
  }
@@ -2084,7 +2148,7 @@ var BaseTransactionRequest = class {
2084
2148
  toJSON() {
2085
2149
  return normalizeJSON(this);
2086
2150
  }
2087
- updatePredicateInputs(inputs) {
2151
+ updatePredicateGasUsed(inputs) {
2088
2152
  this.inputs.forEach((i) => {
2089
2153
  let correspondingInput;
2090
2154
  switch (i.type) {
@@ -2106,6 +2170,15 @@ var BaseTransactionRequest = class {
2106
2170
  }
2107
2171
  });
2108
2172
  }
2173
+ shiftPredicateData() {
2174
+ this.inputs.forEach((input) => {
2175
+ if ("predicateData" in input && "paddPredicateData" in input && typeof input.paddPredicateData === "function") {
2176
+ input.predicateData = input.paddPredicateData(
2177
+ BaseTransactionRequest.getPolicyMeta(this).policies.length
2178
+ );
2179
+ }
2180
+ });
2181
+ }
2109
2182
  };
2110
2183
 
2111
2184
  // src/providers/transaction-request/create-transaction-request.ts
@@ -2252,9 +2325,8 @@ var CreateTransactionRequest = class extends BaseTransactionRequest {
2252
2325
  return {
2253
2326
  type: TransactionType3.Create,
2254
2327
  ...baseTransaction,
2255
- bytecodeLength: baseTransaction.witnesses[bytecodeWitnessIndex].dataLength / 4,
2256
2328
  bytecodeWitnessIndex,
2257
- storageSlotsCount: storageSlots.length,
2329
+ storageSlotsCount: bn9(storageSlots.length),
2258
2330
  salt: this.salt ? hexlify9(this.salt) : ZeroBytes326,
2259
2331
  storageSlots
2260
2332
  };
@@ -2377,8 +2449,8 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
2377
2449
  type: TransactionType4.Script,
2378
2450
  scriptGasLimit: this.gasLimit,
2379
2451
  ...super.getBaseTransaction(),
2380
- scriptLength: script.length,
2381
- scriptDataLength: scriptData.length,
2452
+ scriptLength: bn10(script.length),
2453
+ scriptDataLength: bn10(scriptData.length),
2382
2454
  receiptsRoot: ZeroBytes327,
2383
2455
  script: hexlify10(script),
2384
2456
  scriptData: hexlify10(scriptData)
@@ -2442,7 +2514,7 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
2442
2514
  }
2443
2515
  calculateMaxGas(chainInfo, minGas) {
2444
2516
  const { consensusParameters } = chainInfo;
2445
- const { gasPerByte } = consensusParameters;
2517
+ const { gasPerByte, maxGasPerTx } = consensusParameters;
2446
2518
  const witnessesLength = this.toTransaction().witnesses.reduce(
2447
2519
  (acc, wit) => acc + wit.dataLength,
2448
2520
  0
@@ -2452,7 +2524,8 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
2452
2524
  minGas,
2453
2525
  witnessesLength,
2454
2526
  witnessLimit: this.witnessLimit,
2455
- gasLimit: this.gasLimit
2527
+ gasLimit: this.gasLimit,
2528
+ maxGasPerTx
2456
2529
  });
2457
2530
  }
2458
2531
  /**
@@ -2509,7 +2582,7 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
2509
2582
 
2510
2583
  // src/providers/transaction-request/utils.ts
2511
2584
  import { ErrorCode as ErrorCode8, FuelError as FuelError8 } from "@fuel-ts/errors";
2512
- import { TransactionType as TransactionType5 } from "@fuel-ts/transactions";
2585
+ import { TransactionType as TransactionType5, InputType as InputType5 } from "@fuel-ts/transactions";
2513
2586
  var transactionRequestify = (obj) => {
2514
2587
  if (obj instanceof ScriptTransactionRequest || obj instanceof CreateTransactionRequest) {
2515
2588
  return obj;
@@ -2527,14 +2600,31 @@ var transactionRequestify = (obj) => {
2527
2600
  }
2528
2601
  }
2529
2602
  };
2603
+ var cacheTxInputsFromOwner = (inputs, owner) => inputs.reduce(
2604
+ (acc, input) => {
2605
+ if (input.type === InputType5.Coin && input.owner === owner) {
2606
+ acc.utxos.push(input.id);
2607
+ }
2608
+ if (input.type === InputType5.Message && input.recipient === owner) {
2609
+ acc.messages.push(input.nonce);
2610
+ }
2611
+ return acc;
2612
+ },
2613
+ {
2614
+ utxos: [],
2615
+ messages: []
2616
+ }
2617
+ );
2530
2618
 
2531
2619
  // src/providers/transaction-response/transaction-response.ts
2532
2620
  import { ErrorCode as ErrorCode12, FuelError as FuelError12 } from "@fuel-ts/errors";
2533
- import { bn as bn14 } from "@fuel-ts/math";
2621
+ import { bn as bn15 } from "@fuel-ts/math";
2534
2622
  import { TransactionCoder as TransactionCoder4 } from "@fuel-ts/transactions";
2535
2623
  import { arrayify as arrayify10 } from "@fuel-ts/utils";
2536
2624
 
2537
2625
  // src/providers/transaction-summary/assemble-transaction-summary.ts
2626
+ import { bn as bn14 } from "@fuel-ts/math";
2627
+ import { PolicyType as PolicyType3 } from "@fuel-ts/transactions";
2538
2628
  import { DateTime, hexlify as hexlify11 } from "@fuel-ts/utils";
2539
2629
 
2540
2630
  // src/providers/transaction-summary/calculate-transaction-fee.ts
@@ -2543,9 +2633,10 @@ import { PolicyType as PolicyType2, TransactionCoder as TransactionCoder3, Trans
2543
2633
  import { arrayify as arrayify9 } from "@fuel-ts/utils";
2544
2634
  var calculateTransactionFee = (params) => {
2545
2635
  const {
2546
- gasUsed,
2636
+ gasPrice,
2547
2637
  rawPayload,
2548
- consensusParameters: { gasCosts, feeParams }
2638
+ tip,
2639
+ consensusParameters: { gasCosts, feeParams, maxGasPerTx }
2549
2640
  } = params;
2550
2641
  const gasPerByte = bn11(feeParams.gasPerByte);
2551
2642
  const gasPriceFactor = bn11(feeParams.gasPriceFactor);
@@ -2555,8 +2646,7 @@ var calculateTransactionFee = (params) => {
2555
2646
  return {
2556
2647
  fee: bn11(0),
2557
2648
  minFee: bn11(0),
2558
- maxFee: bn11(0),
2559
- feeFromGasUsed: bn11(0)
2649
+ maxFee: bn11(0)
2560
2650
  };
2561
2651
  }
2562
2652
  const { type, witnesses, inputs, policies } = transaction;
@@ -2588,7 +2678,6 @@ var calculateTransactionFee = (params) => {
2588
2678
  metadataGas,
2589
2679
  txBytesSize: transactionBytes.length
2590
2680
  });
2591
- const gasPrice = bn11(policies.find((policy) => policy.type === PolicyType2.GasPrice)?.data);
2592
2681
  const witnessLimit = policies.find((policy) => policy.type === PolicyType2.WitnessLimit)?.data;
2593
2682
  const witnessesLength = witnesses.reduce((acc, wit) => acc + wit.dataLength, 0);
2594
2683
  const maxGas = getMaxGas({
@@ -2596,17 +2685,25 @@ var calculateTransactionFee = (params) => {
2596
2685
  minGas,
2597
2686
  witnessesLength,
2598
2687
  gasLimit,
2599
- witnessLimit
2688
+ witnessLimit,
2689
+ maxGasPerTx
2690
+ });
2691
+ const minFee = calculateGasFee({
2692
+ gasPrice,
2693
+ gas: minGas,
2694
+ priceFactor: gasPriceFactor,
2695
+ tip
2696
+ });
2697
+ const maxFee = calculateGasFee({
2698
+ gasPrice,
2699
+ gas: maxGas,
2700
+ priceFactor: gasPriceFactor,
2701
+ tip
2600
2702
  });
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
2703
  return {
2606
- fee,
2607
2704
  minFee,
2608
2705
  maxFee,
2609
- feeFromGasUsed
2706
+ fee: maxFee
2610
2707
  };
2611
2708
  };
2612
2709
 
@@ -2662,7 +2759,7 @@ var getFunctionCall = ({ abi, receipt, rawPayload, maxInputs }) => {
2662
2759
 
2663
2760
  // src/providers/transaction-summary/input.ts
2664
2761
  import { ErrorCode as ErrorCode9, FuelError as FuelError9 } from "@fuel-ts/errors";
2665
- import { InputType as InputType5 } from "@fuel-ts/transactions";
2762
+ import { InputType as InputType6 } from "@fuel-ts/transactions";
2666
2763
  function getInputsByTypes(inputs, types) {
2667
2764
  return inputs.filter((i) => types.includes(i.type));
2668
2765
  }
@@ -2670,16 +2767,16 @@ function getInputsByType(inputs, type) {
2670
2767
  return inputs.filter((i) => i.type === type);
2671
2768
  }
2672
2769
  function getInputsCoin(inputs) {
2673
- return getInputsByType(inputs, InputType5.Coin);
2770
+ return getInputsByType(inputs, InputType6.Coin);
2674
2771
  }
2675
2772
  function getInputsMessage(inputs) {
2676
- return getInputsByType(inputs, InputType5.Message);
2773
+ return getInputsByType(inputs, InputType6.Message);
2677
2774
  }
2678
2775
  function getInputsCoinAndMessage(inputs) {
2679
- return getInputsByTypes(inputs, [InputType5.Coin, InputType5.Message]);
2776
+ return getInputsByTypes(inputs, [InputType6.Coin, InputType6.Message]);
2680
2777
  }
2681
2778
  function getInputsContract(inputs) {
2682
- return getInputsByType(inputs, InputType5.Contract);
2779
+ return getInputsByType(inputs, InputType6.Contract);
2683
2780
  }
2684
2781
  function getInputFromAssetId(inputs, assetId) {
2685
2782
  const coinInputs = getInputsCoin(inputs);
@@ -2698,7 +2795,7 @@ function getInputContractFromIndex(inputs, inputIndex) {
2698
2795
  if (!contractInput) {
2699
2796
  return void 0;
2700
2797
  }
2701
- if (contractInput.type !== InputType5.Contract) {
2798
+ if (contractInput.type !== InputType6.Contract) {
2702
2799
  throw new FuelError9(
2703
2800
  ErrorCode9.INVALID_TRANSACTION_INPUT,
2704
2801
  `Contract input should be of type 'contract'.`
@@ -2707,10 +2804,10 @@ function getInputContractFromIndex(inputs, inputIndex) {
2707
2804
  return contractInput;
2708
2805
  }
2709
2806
  function getInputAccountAddress(input) {
2710
- if (input.type === InputType5.Coin) {
2807
+ if (input.type === InputType6.Coin) {
2711
2808
  return input.owner.toString();
2712
2809
  }
2713
- if (input.type === InputType5.Message) {
2810
+ if (input.type === InputType6.Message) {
2714
2811
  return input.recipient.toString();
2715
2812
  }
2716
2813
  return "";
@@ -3173,7 +3270,9 @@ function assembleTransactionSummary(params) {
3173
3270
  gqlTransactionStatus,
3174
3271
  abiMap = {},
3175
3272
  maxInputs,
3176
- gasCosts
3273
+ gasCosts,
3274
+ maxGasPerTx,
3275
+ gasPrice
3177
3276
  } = params;
3178
3277
  const gasUsed = getGasUsedFromReceipts(receipts);
3179
3278
  const rawPayload = hexlify11(transactionBytes);
@@ -3187,11 +3286,14 @@ function assembleTransactionSummary(params) {
3187
3286
  maxInputs
3188
3287
  });
3189
3288
  const typeName = getTransactionTypeName(transaction.type);
3289
+ const tip = bn14(transaction.policies?.find((policy) => policy.type === PolicyType3.Tip)?.data);
3190
3290
  const { fee } = calculateTransactionFee({
3191
- gasUsed,
3291
+ gasPrice,
3192
3292
  rawPayload,
3293
+ tip,
3193
3294
  consensusParameters: {
3194
3295
  gasCosts,
3296
+ maxGasPerTx,
3195
3297
  feeParams: {
3196
3298
  gasPerByte,
3197
3299
  gasPriceFactor
@@ -3251,7 +3353,7 @@ var TransactionResponse = class {
3251
3353
  /** Current provider */
3252
3354
  provider;
3253
3355
  /** Gas used on the transaction */
3254
- gasUsed = bn14(0);
3356
+ gasUsed = bn15(0);
3255
3357
  /** The graphql Transaction with receipts object. */
3256
3358
  gqlTransaction;
3257
3359
  abis;
@@ -3329,8 +3431,13 @@ var TransactionResponse = class {
3329
3431
  const decodedTransaction = this.decodeTransaction(
3330
3432
  transaction
3331
3433
  );
3332
- const receipts = transaction.receipts?.map(processGqlReceipt) || [];
3333
- const { gasPerByte, gasPriceFactor, gasCosts } = this.provider.getGasConfig();
3434
+ let txReceipts = [];
3435
+ if (transaction?.status && "receipts" in transaction.status) {
3436
+ txReceipts = transaction.status.receipts;
3437
+ }
3438
+ const receipts = txReceipts.map(processGqlReceipt) || [];
3439
+ const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = this.provider.getGasConfig();
3440
+ const gasPrice = await this.provider.getLatestGasPrice();
3334
3441
  const maxInputs = this.provider.getChain().consensusParameters.maxInputs;
3335
3442
  const transactionSummary = assembleTransactionSummary({
3336
3443
  id: this.id,
@@ -3342,7 +3449,9 @@ var TransactionResponse = class {
3342
3449
  gasPriceFactor,
3343
3450
  abiMap: contractsAbiMap,
3344
3451
  maxInputs,
3345
- gasCosts
3452
+ gasCosts,
3453
+ maxGasPerTx,
3454
+ gasPrice
3346
3455
  });
3347
3456
  return transactionSummary;
3348
3457
  }
@@ -3469,29 +3578,29 @@ var processGqlChain = (chain) => {
3469
3578
  const { contractParams, feeParams, predicateParams, scriptParams, txParams, gasCosts } = consensusParameters;
3470
3579
  return {
3471
3580
  name,
3472
- baseChainHeight: bn15(daHeight),
3581
+ baseChainHeight: bn16(daHeight),
3473
3582
  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),
3583
+ contractMaxSize: bn16(contractParams.contractMaxSize),
3584
+ maxInputs: bn16(txParams.maxInputs),
3585
+ maxOutputs: bn16(txParams.maxOutputs),
3586
+ maxWitnesses: bn16(txParams.maxWitnesses),
3587
+ maxGasPerTx: bn16(txParams.maxGasPerTx),
3588
+ maxScriptLength: bn16(scriptParams.maxScriptLength),
3589
+ maxScriptDataLength: bn16(scriptParams.maxScriptDataLength),
3590
+ maxStorageSlots: bn16(contractParams.maxStorageSlots),
3591
+ maxPredicateLength: bn16(predicateParams.maxPredicateLength),
3592
+ maxPredicateDataLength: bn16(predicateParams.maxPredicateDataLength),
3593
+ maxGasPerPredicate: bn16(predicateParams.maxGasPerPredicate),
3594
+ gasPriceFactor: bn16(feeParams.gasPriceFactor),
3595
+ gasPerByte: bn16(feeParams.gasPerByte),
3596
+ maxMessageDataLength: bn16(predicateParams.maxMessageDataLength),
3597
+ chainId: bn16(consensusParameters.chainId),
3489
3598
  gasCosts
3490
3599
  },
3491
3600
  gasCosts,
3492
3601
  latestBlock: {
3493
3602
  id: latestBlock.id,
3494
- height: bn15(latestBlock.header.height),
3603
+ height: bn16(latestBlock.height),
3495
3604
  time: latestBlock.header.time,
3496
3605
  transactions: latestBlock.transactions.map((i) => ({
3497
3606
  id: i.id
@@ -3585,10 +3694,8 @@ var _Provider = class {
3585
3694
  * Returns some helpful parameters related to gas fees.
3586
3695
  */
3587
3696
  getGasConfig() {
3588
- const { minGasPrice } = this.getNode();
3589
3697
  const { maxGasPerTx, maxGasPerPredicate, gasPriceFactor, gasPerByte, gasCosts } = this.getChain().consensusParameters;
3590
3698
  return {
3591
- minGasPrice,
3592
3699
  maxGasPerTx,
3593
3700
  maxGasPerPredicate,
3594
3701
  gasPriceFactor,
@@ -3686,7 +3793,7 @@ var _Provider = class {
3686
3793
  */
3687
3794
  async getBlockNumber() {
3688
3795
  const { chain } = await this.operations.getChain();
3689
- return bn15(chain.latestBlock.header.height, 10);
3796
+ return bn16(chain.latestBlock.height, 10);
3690
3797
  }
3691
3798
  /**
3692
3799
  * Returns the chain information.
@@ -3696,13 +3803,11 @@ var _Provider = class {
3696
3803
  async fetchNode() {
3697
3804
  const { nodeInfo } = await this.operations.getNodeInfo();
3698
3805
  const processedNodeInfo = {
3699
- maxDepth: bn15(nodeInfo.maxDepth),
3700
- maxTx: bn15(nodeInfo.maxTx),
3701
- minGasPrice: bn15(nodeInfo.minGasPrice),
3806
+ maxDepth: bn16(nodeInfo.maxDepth),
3807
+ maxTx: bn16(nodeInfo.maxTx),
3702
3808
  nodeVersion: nodeInfo.nodeVersion,
3703
3809
  utxoValidation: nodeInfo.utxoValidation,
3704
- vmBacktrace: nodeInfo.vmBacktrace,
3705
- peers: nodeInfo.peers
3810
+ vmBacktrace: nodeInfo.vmBacktrace
3706
3811
  };
3707
3812
  _Provider.nodeInfoCache[this.url] = processedNodeInfo;
3708
3813
  return processedNodeInfo;
@@ -3788,14 +3893,13 @@ var _Provider = class {
3788
3893
  return this.estimateTxDependencies(transactionRequest);
3789
3894
  }
3790
3895
  const encodedTransaction = hexlify12(transactionRequest.toTransactionBytes());
3791
- const { dryRun: gqlReceipts } = await this.operations.dryRun({
3792
- encodedTransaction,
3896
+ const { dryRun: dryRunStatuses } = await this.operations.dryRun({
3897
+ encodedTransactions: encodedTransaction,
3793
3898
  utxoValidation: utxoValidation || false
3794
3899
  });
3795
- const receipts = gqlReceipts.map(processGqlReceipt);
3796
- return {
3797
- receipts
3798
- };
3900
+ const [{ receipts: rawReceipts, status }] = dryRunStatuses;
3901
+ const receipts = rawReceipts.map(processGqlReceipt);
3902
+ return { receipts, dryrunStatus: status };
3799
3903
  }
3800
3904
  /**
3801
3905
  * Verifies whether enough gas is available to complete transaction.
@@ -3821,7 +3925,7 @@ var _Provider = class {
3821
3925
  } = response;
3822
3926
  if (inputs) {
3823
3927
  inputs.forEach((input, index) => {
3824
- if ("predicateGasUsed" in input && bn15(input.predicateGasUsed).gt(0)) {
3928
+ if ("predicateGasUsed" in input && bn16(input.predicateGasUsed).gt(0)) {
3825
3929
  transactionRequest.inputs[index].predicateGasUsed = input.predicateGasUsed;
3826
3930
  }
3827
3931
  });
@@ -3834,9 +3938,6 @@ var _Provider = class {
3834
3938
  * If there are missing variable outputs,
3835
3939
  * `addVariableOutputs` is called on the transaction.
3836
3940
  *
3837
- * @privateRemarks
3838
- * TODO: Investigate support for missing contract IDs
3839
- * TODO: Add support for missing output messages
3840
3941
  *
3841
3942
  * @param transactionRequest - The transaction request object.
3842
3943
  * @returns A promise.
@@ -3849,16 +3950,19 @@ var _Provider = class {
3849
3950
  missingContractIds: []
3850
3951
  };
3851
3952
  }
3852
- await this.estimatePredicates(transactionRequest);
3853
3953
  let receipts = [];
3854
3954
  const missingContractIds = [];
3855
3955
  let outputVariables = 0;
3956
+ let dryrunStatus;
3856
3957
  for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
3857
- const { dryRun: gqlReceipts } = await this.operations.dryRun({
3858
- encodedTransaction: hexlify12(transactionRequest.toTransactionBytes()),
3958
+ const {
3959
+ dryRun: [{ receipts: rawReceipts, status }]
3960
+ } = await this.operations.dryRun({
3961
+ encodedTransactions: [hexlify12(transactionRequest.toTransactionBytes())],
3859
3962
  utxoValidation: false
3860
3963
  });
3861
- receipts = gqlReceipts.map(processGqlReceipt);
3964
+ receipts = rawReceipts.map(processGqlReceipt);
3965
+ dryrunStatus = status;
3862
3966
  const { missingOutputVariables, missingOutputContractIds } = getReceiptsWithMissingData(receipts);
3863
3967
  const hasMissingOutputs = missingOutputVariables.length !== 0 || missingOutputContractIds.length !== 0;
3864
3968
  if (hasMissingOutputs) {
@@ -3868,6 +3972,10 @@ var _Provider = class {
3868
3972
  transactionRequest.addContractInputAndOutput(Address2.fromString(contractId));
3869
3973
  missingContractIds.push(contractId);
3870
3974
  });
3975
+ const { maxFee } = await this.estimateTxGasAndFee({
3976
+ transactionRequest
3977
+ });
3978
+ transactionRequest.maxFee = maxFee;
3871
3979
  } else {
3872
3980
  break;
3873
3981
  }
@@ -3875,37 +3983,139 @@ var _Provider = class {
3875
3983
  return {
3876
3984
  receipts,
3877
3985
  outputVariables,
3878
- missingContractIds
3986
+ missingContractIds,
3987
+ dryrunStatus
3879
3988
  };
3880
3989
  }
3990
+ /**
3991
+ * Dry runs multiple transactions and checks for missing dependencies in batches.
3992
+ *
3993
+ * Transactions are dry run in batches. After each dry run, transactions requiring
3994
+ * further modifications are identified. The method iteratively updates these transactions
3995
+ * and performs subsequent dry runs until all dependencies for each transaction are satisfied.
3996
+ *
3997
+ * @param transactionRequests - Array of transaction request objects.
3998
+ * @returns A promise that resolves to an array of results for each transaction.
3999
+ */
4000
+ async estimateMultipleTxDependencies(transactionRequests) {
4001
+ const results = transactionRequests.map(() => ({
4002
+ receipts: [],
4003
+ outputVariables: 0,
4004
+ missingContractIds: [],
4005
+ dryrunStatus: void 0
4006
+ }));
4007
+ const allRequests = clone3(transactionRequests);
4008
+ const serializedTransactionsMap = /* @__PURE__ */ new Map();
4009
+ allRequests.forEach((req, index) => {
4010
+ if (req.type === TransactionType8.Script) {
4011
+ serializedTransactionsMap.set(index, hexlify12(req.toTransactionBytes()));
4012
+ }
4013
+ });
4014
+ let transactionsToProcess = Array.from(serializedTransactionsMap.keys());
4015
+ let attempt = 0;
4016
+ while (transactionsToProcess.length > 0 && attempt < MAX_RETRIES) {
4017
+ const encodedTransactions = transactionsToProcess.map(
4018
+ (index) => serializedTransactionsMap.get(index)
4019
+ );
4020
+ const dryRunResults = await this.operations.dryRun({
4021
+ encodedTransactions,
4022
+ utxoValidation: false
4023
+ });
4024
+ const nextRoundTransactions = [];
4025
+ for (let i = 0; i < dryRunResults.dryRun.length; i++) {
4026
+ const currentResultIndex = transactionsToProcess[i];
4027
+ const { receipts: rawReceipts, status } = dryRunResults.dryRun[i];
4028
+ results[currentResultIndex].receipts = rawReceipts.map(processGqlReceipt);
4029
+ results[currentResultIndex].dryrunStatus = status;
4030
+ const { missingOutputVariables, missingOutputContractIds } = getReceiptsWithMissingData(
4031
+ results[currentResultIndex].receipts
4032
+ );
4033
+ const hasMissingOutputs = missingOutputVariables.length > 0 || missingOutputContractIds.length > 0;
4034
+ const requestToProcess = allRequests[currentResultIndex];
4035
+ if (hasMissingOutputs && requestToProcess?.type === TransactionType8.Script) {
4036
+ results[currentResultIndex].outputVariables += missingOutputVariables.length;
4037
+ requestToProcess.addVariableOutputs(missingOutputVariables.length);
4038
+ missingOutputContractIds.forEach(({ contractId }) => {
4039
+ requestToProcess.addContractInputAndOutput(Address2.fromString(contractId));
4040
+ results[currentResultIndex].missingContractIds.push(contractId);
4041
+ });
4042
+ const { maxFee } = await this.estimateTxGasAndFee({
4043
+ transactionRequest: requestToProcess
4044
+ });
4045
+ requestToProcess.maxFee = maxFee;
4046
+ serializedTransactionsMap.set(
4047
+ currentResultIndex,
4048
+ hexlify12(requestToProcess.toTransactionBytes())
4049
+ );
4050
+ nextRoundTransactions.push(currentResultIndex);
4051
+ allRequests[currentResultIndex] = requestToProcess;
4052
+ }
4053
+ }
4054
+ transactionsToProcess = nextRoundTransactions;
4055
+ attempt += 1;
4056
+ }
4057
+ return results;
4058
+ }
4059
+ async dryRunMultipleTransactions(transactionRequests, { utxoValidation, estimateTxDependencies = true } = {}) {
4060
+ if (estimateTxDependencies) {
4061
+ return this.estimateMultipleTxDependencies(transactionRequests);
4062
+ }
4063
+ const encodedTransactions = transactionRequests.map((tx) => hexlify12(tx.toTransactionBytes()));
4064
+ const { dryRun: dryRunStatuses } = await this.operations.dryRun({
4065
+ encodedTransactions,
4066
+ utxoValidation: utxoValidation || false
4067
+ });
4068
+ const results = dryRunStatuses.map(({ receipts: rawReceipts, status }) => {
4069
+ const receipts = rawReceipts.map(processGqlReceipt);
4070
+ return { receipts, dryrunStatus: status };
4071
+ });
4072
+ return results;
4073
+ }
3881
4074
  /**
3882
4075
  * Estimates the transaction gas and fee based on the provided transaction request.
3883
4076
  * @param transactionRequest - The transaction request object.
3884
4077
  * @returns An object containing the estimated minimum gas, minimum fee, maximum gas, and maximum fee.
3885
4078
  */
3886
- estimateTxGasAndFee(params) {
4079
+ async estimateTxGasAndFee(params) {
3887
4080
  const { transactionRequest } = params;
3888
- const { gasPriceFactor, minGasPrice, maxGasPerTx } = this.getGasConfig();
4081
+ let { gasPrice } = params;
3889
4082
  const chainInfo = this.getChain();
3890
- const gasPrice = transactionRequest.gasPrice.eq(0) ? minGasPrice : transactionRequest.gasPrice;
3891
- transactionRequest.gasPrice = gasPrice;
4083
+ const { gasPriceFactor, maxGasPerTx } = this.getGasConfig();
3892
4084
  const minGas = transactionRequest.calculateMinGas(chainInfo);
3893
- const minFee = calculatePriceWithFactor(minGas, gasPrice, gasPriceFactor).normalizeZeroToOne();
4085
+ if (!gasPrice) {
4086
+ gasPrice = await this.estimateGasPrice(10);
4087
+ }
4088
+ const minFee = calculateGasFee({
4089
+ gasPrice: bn16(gasPrice),
4090
+ gas: minGas,
4091
+ priceFactor: gasPriceFactor,
4092
+ tip: transactionRequest.tip
4093
+ }).add(1);
4094
+ let gasLimit = bn16(0);
3894
4095
  if (transactionRequest.type === TransactionType8.Script) {
4096
+ gasLimit = transactionRequest.gasLimit;
3895
4097
  if (transactionRequest.gasLimit.eq(0)) {
3896
4098
  transactionRequest.gasLimit = minGas;
3897
4099
  transactionRequest.gasLimit = maxGasPerTx.sub(
3898
4100
  transactionRequest.calculateMaxGas(chainInfo, minGas)
3899
4101
  );
4102
+ gasLimit = transactionRequest.gasLimit;
3900
4103
  }
3901
4104
  }
3902
4105
  const maxGas = transactionRequest.calculateMaxGas(chainInfo, minGas);
3903
- const maxFee = calculatePriceWithFactor(maxGas, gasPrice, gasPriceFactor).normalizeZeroToOne();
4106
+ const maxFee = calculateGasFee({
4107
+ gasPrice: bn16(gasPrice),
4108
+ gas: maxGas,
4109
+ priceFactor: gasPriceFactor,
4110
+ tip: transactionRequest.tip
4111
+ }).add(1);
3904
4112
  return {
3905
4113
  minGas,
3906
4114
  minFee,
3907
4115
  maxGas,
3908
- maxFee
4116
+ maxFee,
4117
+ gasPrice,
4118
+ gasLimit
3909
4119
  };
3910
4120
  }
3911
4121
  /**
@@ -3923,15 +4133,17 @@ var _Provider = class {
3923
4133
  if (estimateTxDependencies) {
3924
4134
  return this.estimateTxDependencies(transactionRequest);
3925
4135
  }
3926
- const encodedTransaction = hexlify12(transactionRequest.toTransactionBytes());
3927
- const { dryRun: gqlReceipts } = await this.operations.dryRun({
3928
- encodedTransaction,
4136
+ const encodedTransactions = [hexlify12(transactionRequest.toTransactionBytes())];
4137
+ const { dryRun: dryRunStatuses } = await this.operations.dryRun({
4138
+ encodedTransactions,
3929
4139
  utxoValidation: true
3930
4140
  });
3931
- const receipts = gqlReceipts.map(processGqlReceipt);
3932
- return {
3933
- receipts
3934
- };
4141
+ const callResult = dryRunStatuses.map((dryRunStatus) => {
4142
+ const { id, receipts, status } = dryRunStatus;
4143
+ const processedReceipts = receipts.map(processGqlReceipt);
4144
+ return { id, receipts: processedReceipts, status };
4145
+ });
4146
+ return { receipts: callResult[0].receipts };
3935
4147
  }
3936
4148
  /**
3937
4149
  * Returns a transaction cost to enable user
@@ -3948,77 +4160,79 @@ var _Provider = class {
3948
4160
  * @param tolerance - The tolerance to add on top of the gasUsed.
3949
4161
  * @returns A promise that resolves to the transaction cost object.
3950
4162
  */
3951
- async getTransactionCost(transactionRequestLike, forwardingQuantities = [], {
3952
- estimateTxDependencies = true,
3953
- estimatePredicates = true,
3954
- resourcesOwner,
3955
- signatureCallback
3956
- } = {}) {
4163
+ async getTransactionCost(transactionRequestLike, { resourcesOwner, signatureCallback, quantitiesToContract = [] } = {}) {
3957
4164
  const txRequestClone = clone3(transactionRequestify(transactionRequestLike));
3958
- const { minGasPrice } = this.getGasConfig();
3959
- const setGasPrice = max(txRequestClone.gasPrice, minGasPrice);
3960
4165
  const isScriptTransaction = txRequestClone.type === TransactionType8.Script;
3961
4166
  const coinOutputsQuantities = txRequestClone.getCoinOutputsQuantities();
3962
- const allQuantities = mergeQuantities(coinOutputsQuantities, forwardingQuantities);
4167
+ const allQuantities = mergeQuantities(coinOutputsQuantities, quantitiesToContract);
3963
4168
  txRequestClone.fundWithFakeUtxos(allQuantities, resourcesOwner?.address);
4169
+ txRequestClone.maxFee = bn16(0);
3964
4170
  if (isScriptTransaction) {
3965
- txRequestClone.gasLimit = bn15(0);
4171
+ txRequestClone.gasLimit = bn16(0);
3966
4172
  }
3967
- if (estimatePredicates) {
3968
- if (resourcesOwner && "populateTransactionPredicateData" in resourcesOwner) {
3969
- resourcesOwner.populateTransactionPredicateData(txRequestClone);
3970
- }
3971
- await this.estimatePredicates(txRequestClone);
4173
+ if (resourcesOwner && "populateTransactionPredicateData" in resourcesOwner) {
4174
+ resourcesOwner.populateTransactionPredicateData(txRequestClone);
3972
4175
  }
4176
+ const signedRequest = clone3(txRequestClone);
4177
+ let addedSignatures = 0;
3973
4178
  if (signatureCallback && isScriptTransaction) {
3974
- await signatureCallback(txRequestClone);
4179
+ const lengthBefore = signedRequest.witnesses.length;
4180
+ await signatureCallback(signedRequest);
4181
+ addedSignatures = signedRequest.witnesses.length - lengthBefore;
3975
4182
  }
3976
- let { maxFee, maxGas, minFee, minGas } = this.estimateTxGasAndFee({
3977
- transactionRequest: txRequestClone
4183
+ await this.estimatePredicates(signedRequest);
4184
+ let { maxFee, maxGas, minFee, minGas, gasPrice, gasLimit } = await this.estimateTxGasAndFee({
4185
+ transactionRequest: signedRequest
3978
4186
  });
3979
4187
  let receipts = [];
3980
4188
  let missingContractIds = [];
3981
4189
  let outputVariables = 0;
3982
- let gasUsed = bn15(0);
3983
- if (isScriptTransaction && estimateTxDependencies) {
3984
- txRequestClone.gasPrice = bn15(0);
4190
+ let gasUsed = bn16(0);
4191
+ txRequestClone.updatePredicateGasUsed(signedRequest.inputs);
4192
+ txRequestClone.maxFee = maxFee;
4193
+ if (isScriptTransaction) {
4194
+ txRequestClone.gasLimit = gasLimit;
4195
+ if (signatureCallback) {
4196
+ await signatureCallback(txRequestClone);
4197
+ }
3985
4198
  const result = await this.estimateTxDependencies(txRequestClone);
3986
4199
  receipts = result.receipts;
3987
4200
  outputVariables = result.outputVariables;
3988
4201
  missingContractIds = result.missingContractIds;
3989
4202
  gasUsed = isScriptTransaction ? getGasUsedFromReceipts(receipts) : gasUsed;
3990
4203
  txRequestClone.gasLimit = gasUsed;
3991
- txRequestClone.gasPrice = setGasPrice;
3992
- ({ maxFee, maxGas, minFee, minGas } = this.estimateTxGasAndFee({
3993
- transactionRequest: txRequestClone
4204
+ ({ maxFee, maxGas, minFee, minGas, gasPrice } = await this.estimateTxGasAndFee({
4205
+ transactionRequest: txRequestClone,
4206
+ gasPrice
3994
4207
  }));
3995
4208
  }
3996
4209
  return {
3997
4210
  requiredQuantities: allQuantities,
3998
4211
  receipts,
3999
4212
  gasUsed,
4000
- minGasPrice,
4001
- gasPrice: setGasPrice,
4213
+ gasPrice,
4002
4214
  minGas,
4003
4215
  maxGas,
4004
4216
  minFee,
4005
4217
  maxFee,
4006
- estimatedInputs: txRequestClone.inputs,
4007
4218
  outputVariables,
4008
- missingContractIds
4219
+ missingContractIds,
4220
+ addedSignatures,
4221
+ estimatedPredicates: txRequestClone.inputs
4009
4222
  };
4010
4223
  }
4011
- async getResourcesForTransaction(owner, transactionRequestLike, forwardingQuantities = []) {
4224
+ async getResourcesForTransaction(owner, transactionRequestLike, quantitiesToContract = []) {
4012
4225
  const ownerAddress = Address2.fromAddressOrString(owner);
4013
4226
  const transactionRequest = transactionRequestify(clone3(transactionRequestLike));
4014
- const transactionCost = await this.getTransactionCost(transactionRequest, forwardingQuantities);
4227
+ const transactionCost = await this.getTransactionCost(transactionRequest, {
4228
+ quantitiesToContract
4229
+ });
4015
4230
  transactionRequest.addResources(
4016
4231
  await this.getResourcesToSpend(ownerAddress, transactionCost.requiredQuantities)
4017
4232
  );
4018
- const { requiredQuantities, ...txCost } = await this.getTransactionCost(
4019
- transactionRequest,
4020
- forwardingQuantities
4021
- );
4233
+ const { requiredQuantities, ...txCost } = await this.getTransactionCost(transactionRequest, {
4234
+ quantitiesToContract
4235
+ });
4022
4236
  const resources = await this.getResourcesToSpend(ownerAddress, requiredQuantities);
4023
4237
  return {
4024
4238
  resources,
@@ -4040,11 +4254,10 @@ var _Provider = class {
4040
4254
  return coins.map((coin) => ({
4041
4255
  id: coin.utxoId,
4042
4256
  assetId: coin.assetId,
4043
- amount: bn15(coin.amount),
4257
+ amount: bn16(coin.amount),
4044
4258
  owner: Address2.fromAddressOrString(coin.owner),
4045
- maturity: bn15(coin.maturity).toNumber(),
4046
- blockCreated: bn15(coin.blockCreated),
4047
- txCreatedIdx: bn15(coin.txCreatedIdx)
4259
+ blockCreated: bn16(coin.blockCreated),
4260
+ txCreatedIdx: bn16(coin.txCreatedIdx)
4048
4261
  }));
4049
4262
  }
4050
4263
  /**
@@ -4081,9 +4294,9 @@ var _Provider = class {
4081
4294
  switch (coin.__typename) {
4082
4295
  case "MessageCoin":
4083
4296
  return {
4084
- amount: bn15(coin.amount),
4297
+ amount: bn16(coin.amount),
4085
4298
  assetId: coin.assetId,
4086
- daHeight: bn15(coin.daHeight),
4299
+ daHeight: bn16(coin.daHeight),
4087
4300
  sender: Address2.fromAddressOrString(coin.sender),
4088
4301
  recipient: Address2.fromAddressOrString(coin.recipient),
4089
4302
  nonce: coin.nonce
@@ -4091,12 +4304,11 @@ var _Provider = class {
4091
4304
  case "Coin":
4092
4305
  return {
4093
4306
  id: coin.utxoId,
4094
- amount: bn15(coin.amount),
4307
+ amount: bn16(coin.amount),
4095
4308
  assetId: coin.assetId,
4096
4309
  owner: Address2.fromAddressOrString(coin.owner),
4097
- maturity: bn15(coin.maturity).toNumber(),
4098
- blockCreated: bn15(coin.blockCreated),
4099
- txCreatedIdx: bn15(coin.txCreatedIdx)
4310
+ blockCreated: bn16(coin.blockCreated),
4311
+ txCreatedIdx: bn16(coin.txCreatedIdx)
4100
4312
  };
4101
4313
  default:
4102
4314
  return null;
@@ -4113,13 +4325,13 @@ var _Provider = class {
4113
4325
  async getBlock(idOrHeight) {
4114
4326
  let variables;
4115
4327
  if (typeof idOrHeight === "number") {
4116
- variables = { height: bn15(idOrHeight).toString(10) };
4328
+ variables = { height: bn16(idOrHeight).toString(10) };
4117
4329
  } else if (idOrHeight === "latest") {
4118
4330
  variables = { height: (await this.getBlockNumber()).toString(10) };
4119
4331
  } else if (idOrHeight.length === 66) {
4120
4332
  variables = { blockId: idOrHeight };
4121
4333
  } else {
4122
- variables = { blockId: bn15(idOrHeight).toString(10) };
4334
+ variables = { blockId: bn16(idOrHeight).toString(10) };
4123
4335
  }
4124
4336
  const { block } = await this.operations.getBlock(variables);
4125
4337
  if (!block) {
@@ -4127,7 +4339,7 @@ var _Provider = class {
4127
4339
  }
4128
4340
  return {
4129
4341
  id: block.id,
4130
- height: bn15(block.header.height),
4342
+ height: bn16(block.height),
4131
4343
  time: block.header.time,
4132
4344
  transactionIds: block.transactions.map((tx) => tx.id)
4133
4345
  };
@@ -4142,7 +4354,7 @@ var _Provider = class {
4142
4354
  const { blocks: fetchedData } = await this.operations.getBlocks(params);
4143
4355
  const blocks = fetchedData.edges.map(({ node: block }) => ({
4144
4356
  id: block.id,
4145
- height: bn15(block.header.height),
4357
+ height: bn16(block.height),
4146
4358
  time: block.header.time,
4147
4359
  transactionIds: block.transactions.map((tx) => tx.id)
4148
4360
  }));
@@ -4157,7 +4369,7 @@ var _Provider = class {
4157
4369
  async getBlockWithTransactions(idOrHeight) {
4158
4370
  let variables;
4159
4371
  if (typeof idOrHeight === "number") {
4160
- variables = { blockHeight: bn15(idOrHeight).toString(10) };
4372
+ variables = { blockHeight: bn16(idOrHeight).toString(10) };
4161
4373
  } else if (idOrHeight === "latest") {
4162
4374
  variables = { blockHeight: (await this.getBlockNumber()).toString() };
4163
4375
  } else {
@@ -4169,7 +4381,7 @@ var _Provider = class {
4169
4381
  }
4170
4382
  return {
4171
4383
  id: block.id,
4172
- height: bn15(block.header.height, 10),
4384
+ height: bn16(block.height, 10),
4173
4385
  time: block.header.time,
4174
4386
  transactionIds: block.transactions.map((tx) => tx.id),
4175
4387
  transactions: block.transactions.map(
@@ -4218,7 +4430,7 @@ var _Provider = class {
4218
4430
  contract: Address2.fromAddressOrString(contractId).toB256(),
4219
4431
  asset: hexlify12(assetId)
4220
4432
  });
4221
- return bn15(contractBalance.amount, 10);
4433
+ return bn16(contractBalance.amount, 10);
4222
4434
  }
4223
4435
  /**
4224
4436
  * Returns the balance for the given owner for the given asset ID.
@@ -4232,7 +4444,7 @@ var _Provider = class {
4232
4444
  owner: Address2.fromAddressOrString(owner).toB256(),
4233
4445
  assetId: hexlify12(assetId)
4234
4446
  });
4235
- return bn15(balance.amount, 10);
4447
+ return bn16(balance.amount, 10);
4236
4448
  }
4237
4449
  /**
4238
4450
  * Returns balances for the given owner.
@@ -4250,7 +4462,7 @@ var _Provider = class {
4250
4462
  const balances = result.balances.edges.map((edge) => edge.node);
4251
4463
  return balances.map((balance) => ({
4252
4464
  assetId: balance.assetId,
4253
- amount: bn15(balance.amount)
4465
+ amount: bn16(balance.amount)
4254
4466
  }));
4255
4467
  }
4256
4468
  /**
@@ -4272,15 +4484,15 @@ var _Provider = class {
4272
4484
  sender: message.sender,
4273
4485
  recipient: message.recipient,
4274
4486
  nonce: message.nonce,
4275
- amount: bn15(message.amount),
4487
+ amount: bn16(message.amount),
4276
4488
  data: message.data
4277
4489
  }),
4278
4490
  sender: Address2.fromAddressOrString(message.sender),
4279
4491
  recipient: Address2.fromAddressOrString(message.recipient),
4280
4492
  nonce: message.nonce,
4281
- amount: bn15(message.amount),
4493
+ amount: bn16(message.amount),
4282
4494
  data: InputMessageCoder.decodeData(message.data),
4283
- daHeight: bn15(message.daHeight)
4495
+ daHeight: bn16(message.daHeight)
4284
4496
  }));
4285
4497
  }
4286
4498
  /**
@@ -4333,44 +4545,60 @@ var _Provider = class {
4333
4545
  } = result.messageProof;
4334
4546
  return {
4335
4547
  messageProof: {
4336
- proofIndex: bn15(messageProof.proofIndex),
4548
+ proofIndex: bn16(messageProof.proofIndex),
4337
4549
  proofSet: messageProof.proofSet
4338
4550
  },
4339
4551
  blockProof: {
4340
- proofIndex: bn15(blockProof.proofIndex),
4552
+ proofIndex: bn16(blockProof.proofIndex),
4341
4553
  proofSet: blockProof.proofSet
4342
4554
  },
4343
4555
  messageBlockHeader: {
4344
4556
  id: messageBlockHeader.id,
4345
- daHeight: bn15(messageBlockHeader.daHeight),
4346
- transactionsCount: bn15(messageBlockHeader.transactionsCount),
4557
+ daHeight: bn16(messageBlockHeader.daHeight),
4558
+ transactionsCount: bn16(messageBlockHeader.transactionsCount),
4347
4559
  transactionsRoot: messageBlockHeader.transactionsRoot,
4348
- height: bn15(messageBlockHeader.height),
4560
+ height: bn16(messageBlockHeader.height),
4349
4561
  prevRoot: messageBlockHeader.prevRoot,
4350
4562
  time: messageBlockHeader.time,
4351
4563
  applicationHash: messageBlockHeader.applicationHash,
4352
- messageReceiptRoot: messageBlockHeader.messageReceiptRoot,
4353
- messageReceiptCount: bn15(messageBlockHeader.messageReceiptCount)
4564
+ messageReceiptCount: bn16(messageBlockHeader.messageReceiptCount),
4565
+ messageOutboxRoot: messageBlockHeader.messageOutboxRoot,
4566
+ consensusParametersVersion: messageBlockHeader.consensusParametersVersion,
4567
+ eventInboxRoot: messageBlockHeader.eventInboxRoot,
4568
+ stateTransitionBytecodeVersion: messageBlockHeader.stateTransitionBytecodeVersion
4354
4569
  },
4355
4570
  commitBlockHeader: {
4356
4571
  id: commitBlockHeader.id,
4357
- daHeight: bn15(commitBlockHeader.daHeight),
4358
- transactionsCount: bn15(commitBlockHeader.transactionsCount),
4572
+ daHeight: bn16(commitBlockHeader.daHeight),
4573
+ transactionsCount: bn16(commitBlockHeader.transactionsCount),
4359
4574
  transactionsRoot: commitBlockHeader.transactionsRoot,
4360
- height: bn15(commitBlockHeader.height),
4575
+ height: bn16(commitBlockHeader.height),
4361
4576
  prevRoot: commitBlockHeader.prevRoot,
4362
4577
  time: commitBlockHeader.time,
4363
4578
  applicationHash: commitBlockHeader.applicationHash,
4364
- messageReceiptRoot: commitBlockHeader.messageReceiptRoot,
4365
- messageReceiptCount: bn15(commitBlockHeader.messageReceiptCount)
4579
+ messageReceiptCount: bn16(commitBlockHeader.messageReceiptCount),
4580
+ messageOutboxRoot: commitBlockHeader.messageOutboxRoot,
4581
+ consensusParametersVersion: commitBlockHeader.consensusParametersVersion,
4582
+ eventInboxRoot: commitBlockHeader.eventInboxRoot,
4583
+ stateTransitionBytecodeVersion: commitBlockHeader.stateTransitionBytecodeVersion
4366
4584
  },
4367
4585
  sender: Address2.fromAddressOrString(sender),
4368
4586
  recipient: Address2.fromAddressOrString(recipient),
4369
4587
  nonce,
4370
- amount: bn15(amount),
4588
+ amount: bn16(amount),
4371
4589
  data
4372
4590
  };
4373
4591
  }
4592
+ async getLatestGasPrice() {
4593
+ const { latestGasPrice } = await this.operations.getLatestGasPrice();
4594
+ return bn16(latestGasPrice.gasPrice);
4595
+ }
4596
+ async estimateGasPrice(blockHorizon) {
4597
+ const { estimateGasPrice } = await this.operations.estimateGasPrice({
4598
+ blockHorizon: String(blockHorizon)
4599
+ });
4600
+ return bn16(estimateGasPrice.gasPrice);
4601
+ }
4374
4602
  /**
4375
4603
  * Returns Message Proof for given transaction id and the message id from MessageOut receipt.
4376
4604
  *
@@ -4390,10 +4618,10 @@ var _Provider = class {
4390
4618
  */
4391
4619
  async produceBlocks(amount, startTime) {
4392
4620
  const { produceBlocks: latestBlockHeight } = await this.operations.produceBlocks({
4393
- blocksToProduce: bn15(amount).toString(10),
4621
+ blocksToProduce: bn16(amount).toString(10),
4394
4622
  startTimestamp: startTime ? DateTime2.fromUnixMilliseconds(startTime).toTai64() : void 0
4395
4623
  });
4396
- return bn15(latestBlockHeight);
4624
+ return bn16(latestBlockHeight);
4397
4625
  }
4398
4626
  // eslint-disable-next-line @typescript-eslint/require-await
4399
4627
  async getTransactionResponse(transactionId) {
@@ -4407,7 +4635,7 @@ cacheInputs_fn = function(inputs) {
4407
4635
  return;
4408
4636
  }
4409
4637
  inputs.forEach((input) => {
4410
- if (input.type === InputType6.Coin) {
4638
+ if (input.type === InputType7.Coin) {
4411
4639
  this.cache?.set(input.id);
4412
4640
  }
4413
4641
  });
@@ -4417,7 +4645,7 @@ __publicField(Provider, "nodeInfoCache", {});
4417
4645
 
4418
4646
  // src/providers/transaction-summary/get-transaction-summary.ts
4419
4647
  import { ErrorCode as ErrorCode14, FuelError as FuelError14 } from "@fuel-ts/errors";
4420
- import { bn as bn16 } from "@fuel-ts/math";
4648
+ import { bn as bn17 } from "@fuel-ts/math";
4421
4649
  import { TransactionCoder as TransactionCoder6 } from "@fuel-ts/transactions";
4422
4650
  import { arrayify as arrayify12 } from "@fuel-ts/utils";
4423
4651
 
@@ -4663,36 +4891,33 @@ var Account = class extends AbstractAccount {
4663
4891
  * @param fee - The estimated transaction fee.
4664
4892
  * @returns A promise that resolves when the resources are added to the transaction.
4665
4893
  */
4666
- async fund(request, coinQuantities, fee) {
4667
- const updatedQuantities = addAmountToAsset({
4668
- amount: bn17(fee),
4894
+ async fund(request, params) {
4895
+ const { addedSignatures, estimatedPredicates, maxFee: fee, requiredQuantities } = params;
4896
+ const txRequest = request;
4897
+ const requiredQuantitiesWithFee = addAmountToCoinQuantities({
4898
+ amount: bn18(fee),
4669
4899
  assetId: BaseAssetId3,
4670
- coinQuantities
4900
+ coinQuantities: requiredQuantities
4671
4901
  });
4672
4902
  const quantitiesDict = {};
4673
- updatedQuantities.forEach(({ amount, assetId }) => {
4903
+ requiredQuantitiesWithFee.forEach(({ amount, assetId }) => {
4674
4904
  quantitiesDict[assetId] = {
4675
4905
  required: amount,
4676
- owned: bn17(0)
4906
+ owned: bn18(0)
4677
4907
  };
4678
4908
  });
4679
- const cachedUtxos = [];
4680
- const cachedMessages = [];
4681
- const owner = this.address.toB256();
4682
- request.inputs.forEach((input) => {
4909
+ txRequest.inputs.forEach((input) => {
4683
4910
  const isResource = "amount" in input;
4684
4911
  if (isResource) {
4685
4912
  const isCoin2 = "owner" in input;
4686
4913
  if (isCoin2) {
4687
4914
  const assetId = String(input.assetId);
4688
- if (input.owner === owner && quantitiesDict[assetId]) {
4689
- const amount = bn17(input.amount);
4915
+ if (quantitiesDict[assetId]) {
4916
+ const amount = bn18(input.amount);
4690
4917
  quantitiesDict[assetId].owned = quantitiesDict[assetId].owned.add(amount);
4691
- cachedUtxos.push(input.id);
4692
4918
  }
4693
- } else if (input.recipient === owner && input.amount && quantitiesDict[BaseAssetId3]) {
4919
+ } else if (input.amount && quantitiesDict[BaseAssetId3]) {
4694
4920
  quantitiesDict[BaseAssetId3].owned = quantitiesDict[BaseAssetId3].owned.add(input.amount);
4695
- cachedMessages.push(input.nonce);
4696
4921
  }
4697
4922
  }
4698
4923
  });
@@ -4707,12 +4932,23 @@ var Account = class extends AbstractAccount {
4707
4932
  });
4708
4933
  const needsToBeFunded = missingQuantities.length;
4709
4934
  if (needsToBeFunded) {
4710
- const resources = await this.getResourcesToSpend(missingQuantities, {
4711
- messages: cachedMessages,
4712
- utxos: cachedUtxos
4713
- });
4714
- request.addResources(resources);
4935
+ const excludedIds = cacheTxInputsFromOwner(txRequest.inputs, this.address.toB256());
4936
+ const resources = await this.getResourcesToSpend(missingQuantities, excludedIds);
4937
+ txRequest.addResources(resources);
4938
+ }
4939
+ txRequest.shiftPredicateData();
4940
+ txRequest.updatePredicateGasUsed(estimatedPredicates);
4941
+ const requestToBeReEstimate = clone4(txRequest);
4942
+ if (addedSignatures) {
4943
+ Array.from({ length: addedSignatures }).forEach(
4944
+ () => requestToBeReEstimate.addEmptyWitness()
4945
+ );
4715
4946
  }
4947
+ const { maxFee } = await this.provider.estimateTxGasAndFee({
4948
+ transactionRequest: requestToBeReEstimate
4949
+ });
4950
+ txRequest.maxFee = maxFee;
4951
+ return txRequest;
4716
4952
  }
4717
4953
  /**
4718
4954
  * A helper that creates a transfer transaction request and returns it.
@@ -4720,28 +4956,25 @@ var Account = class extends AbstractAccount {
4720
4956
  * @param destination - The address of the destination.
4721
4957
  * @param amount - The amount of coins to transfer.
4722
4958
  * @param assetId - The asset ID of the coins to transfer.
4723
- * @param txParams - The transaction parameters (gasLimit, gasPrice, maturity).
4959
+ * @param txParams - The transaction parameters (gasLimit, tip, maturity, maxFee, witnessLimit).
4724
4960
  * @returns A promise that resolves to the prepared transaction request.
4725
4961
  */
4726
4962
  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);
4963
+ const request = new ScriptTransactionRequest(txParams);
4730
4964
  request.addCoinOutput(Address3.fromAddressOrString(destination), amount, assetId);
4731
- const { maxFee, requiredQuantities, gasUsed, estimatedInputs } = await this.provider.getTransactionCost(request, [], {
4965
+ const txCost = await this.provider.getTransactionCost(request, {
4732
4966
  estimateTxDependencies: true,
4733
4967
  resourcesOwner: this
4734
4968
  });
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);
4969
+ if ("gasLimit" in txParams) {
4970
+ this.validateGas({
4971
+ gasUsed: txCost.gasUsed,
4972
+ gasLimit: request.gasLimit
4973
+ });
4974
+ }
4975
+ request.gasLimit = txCost.gasUsed;
4976
+ request.maxFee = txCost.maxFee;
4977
+ await this.fund(request, txCost);
4745
4978
  return request;
4746
4979
  }
4747
4980
  /**
@@ -4754,7 +4987,7 @@ var Account = class extends AbstractAccount {
4754
4987
  * @returns A promise that resolves to the transaction response.
4755
4988
  */
4756
4989
  async transfer(destination, amount, assetId = BaseAssetId3, txParams = {}) {
4757
- if (bn17(amount).lte(0)) {
4990
+ if (bn18(amount).lte(0)) {
4758
4991
  throw new FuelError15(
4759
4992
  ErrorCode15.INVALID_TRANSFER_AMOUNT,
4760
4993
  "Transfer amount must be a positive number."
@@ -4773,38 +5006,37 @@ var Account = class extends AbstractAccount {
4773
5006
  * @returns A promise that resolves to the transaction response.
4774
5007
  */
4775
5008
  async transferToContract(contractId, amount, assetId = BaseAssetId3, txParams = {}) {
4776
- if (bn17(amount).lte(0)) {
5009
+ if (bn18(amount).lte(0)) {
4777
5010
  throw new FuelError15(
4778
5011
  ErrorCode15.INVALID_TRANSFER_AMOUNT,
4779
5012
  "Transfer amount must be a positive number."
4780
5013
  );
4781
5014
  }
4782
5015
  const contractAddress = Address3.fromAddressOrString(contractId);
4783
- const { minGasPrice } = this.provider.getGasConfig();
4784
- const params = { gasPrice: minGasPrice, ...txParams };
4785
5016
  const { script, scriptData } = await assembleTransferToContractScript({
4786
5017
  hexlifiedContractId: contractAddress.toB256(),
4787
- amountToTransfer: bn17(amount),
5018
+ amountToTransfer: bn18(amount),
4788
5019
  assetId
4789
5020
  });
4790
5021
  const request = new ScriptTransactionRequest({
4791
- ...params,
5022
+ ...txParams,
4792
5023
  script,
4793
5024
  scriptData
4794
5025
  });
4795
5026
  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
5027
+ const txCost = await this.provider.getTransactionCost(request, {
5028
+ resourcesOwner: this,
5029
+ quantitiesToContract: [{ amount: bn18(amount), assetId: String(assetId) }]
4806
5030
  });
4807
- await this.fund(request, requiredQuantities, maxFee);
5031
+ if (txParams.gasLimit) {
5032
+ this.validateGas({
5033
+ gasUsed: txCost.gasUsed,
5034
+ gasLimit: request.gasLimit
5035
+ });
5036
+ }
5037
+ request.gasLimit = txCost.gasUsed;
5038
+ request.maxFee = txCost.maxFee;
5039
+ await this.fund(request, txCost);
4808
5040
  return this.sendTransaction(request);
4809
5041
  }
4810
5042
  /**
@@ -4816,34 +5048,31 @@ var Account = class extends AbstractAccount {
4816
5048
  * @returns A promise that resolves to the transaction response.
4817
5049
  */
4818
5050
  async withdrawToBaseLayer(recipient, amount, txParams = {}) {
4819
- const { minGasPrice } = this.provider.getGasConfig();
4820
5051
  const recipientAddress = Address3.fromAddressOrString(recipient);
4821
5052
  const recipientDataArray = arrayify14(
4822
5053
  "0x".concat(recipientAddress.toHexString().substring(2).padStart(64, "0"))
4823
5054
  );
4824
5055
  const amountDataArray = arrayify14(
4825
- "0x".concat(bn17(amount).toHex().substring(2).padStart(16, "0"))
5056
+ "0x".concat(bn18(amount).toHex().substring(2).padStart(16, "0"))
4826
5057
  );
4827
5058
  const script = new Uint8Array([
4828
5059
  ...arrayify14(withdrawScript.bytes),
4829
5060
  ...recipientDataArray,
4830
5061
  ...amountDataArray
4831
5062
  ]);
4832
- const params = { script, gasPrice: minGasPrice, ...txParams };
5063
+ const params = { script, ...txParams };
4833
5064
  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);
5065
+ const quantitiesToContract = [{ amount: bn18(amount), assetId: BaseAssetId3 }];
5066
+ const txCost = await this.provider.getTransactionCost(request, { quantitiesToContract });
5067
+ if (txParams.gasLimit) {
5068
+ this.validateGas({
5069
+ gasUsed: txCost.gasUsed,
5070
+ gasLimit: request.gasLimit
5071
+ });
5072
+ }
5073
+ request.maxFee = txCost.maxFee;
5074
+ request.gasLimit = txCost.gasUsed;
5075
+ await this.fund(request, txCost);
4847
5076
  return this.sendTransaction(request);
4848
5077
  }
4849
5078
  async signMessage(message) {
@@ -4901,18 +5130,7 @@ var Account = class extends AbstractAccount {
4901
5130
  }
4902
5131
  return this.provider.simulate(transactionRequest, { estimateTxDependencies: false });
4903
5132
  }
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
- }
5133
+ validateGas({ gasUsed, gasLimit }) {
4916
5134
  if (gasUsed.gt(gasLimit)) {
4917
5135
  throw new FuelError15(
4918
5136
  ErrorCode15.GAS_LIMIT_TOO_LOW,
@@ -5204,7 +5422,7 @@ var BaseWalletUnlocked = class extends Account {
5204
5422
  * @param transactionRequestLike - The transaction request to send.
5205
5423
  * @returns A promise that resolves to the TransactionResponse object.
5206
5424
  */
5207
- async sendTransaction(transactionRequestLike, { estimateTxDependencies = true, awaitExecution } = {}) {
5425
+ async sendTransaction(transactionRequestLike, { estimateTxDependencies = false, awaitExecution } = {}) {
5208
5426
  const transactionRequest = transactionRequestify(transactionRequestLike);
5209
5427
  if (estimateTxDependencies) {
5210
5428
  await this.provider.estimateTxDependencies(transactionRequest);
@@ -5245,7 +5463,7 @@ __publicField(BaseWalletUnlocked, "defaultPath", "m/44'/1179993420'/0'/0/0");
5245
5463
  // src/hdwallet/hdwallet.ts
5246
5464
  import { ErrorCode as ErrorCode19, FuelError as FuelError19 } from "@fuel-ts/errors";
5247
5465
  import { sha256 as sha2564 } from "@fuel-ts/hasher";
5248
- import { bn as bn18, toBytes as toBytes2, toHex } from "@fuel-ts/math";
5466
+ import { bn as bn19, toBytes as toBytes2, toHex } from "@fuel-ts/math";
5249
5467
  import { arrayify as arrayify18, hexlify as hexlify17, concat as concat5 } from "@fuel-ts/utils";
5250
5468
  import { toBeHex, dataSlice as dataSlice2, encodeBase58 as encodeBase582, decodeBase58, computeHmac as computeHmac2, ripemd160 } from "ethers";
5251
5469
 
@@ -7711,7 +7929,7 @@ var HDWallet = class {
7711
7929
  const IR = bytes.slice(32);
7712
7930
  if (privateKey) {
7713
7931
  const N = "0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141";
7714
- const ki = bn18(IL).add(privateKey).mod(N).toBytes(32);
7932
+ const ki = bn19(IL).add(privateKey).mod(N).toBytes(32);
7715
7933
  return new HDWallet({
7716
7934
  privateKey: ki,
7717
7935
  chainCode: IR,
@@ -7982,14 +8200,15 @@ var seedTestWallet = async (wallet, quantities) => {
7982
8200
  process.env.GENESIS_SECRET || randomBytes5(32),
7983
8201
  wallet.provider
7984
8202
  );
7985
- const resources = await genesisWallet.getResourcesToSpend(quantities);
7986
- const { minGasPrice } = genesisWallet.provider.getGasConfig();
7987
- const request = new ScriptTransactionRequest({
7988
- gasLimit: 1e4,
7989
- gasPrice: minGasPrice
8203
+ const request = new ScriptTransactionRequest();
8204
+ quantities.forEach((quantity) => {
8205
+ const { amount, assetId } = coinQuantityfy(quantity);
8206
+ request.addCoinOutput(wallet.address, amount, assetId);
7990
8207
  });
7991
- request.addResources(resources);
7992
- quantities.map(coinQuantityfy).forEach(({ amount, assetId }) => request.addCoinOutput(wallet.address, amount, assetId));
8208
+ const txCost = await genesisWallet.provider.getTransactionCost(request);
8209
+ request.gasLimit = txCost.gasUsed;
8210
+ request.maxFee = txCost.maxFee;
8211
+ await genesisWallet.fund(request, txCost);
7993
8212
  await genesisWallet.sendTransaction(request, { awaitExecution: true });
7994
8213
  };
7995
8214
 
@@ -8004,11 +8223,11 @@ var generateTestWallet = async (provider, quantities) => {
8004
8223
 
8005
8224
  // src/test-utils/launchNode.ts
8006
8225
  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";
8226
+ import { defaultChainConfigs, defaultConsensusKey, hexlify as hexlify18 } from "@fuel-ts/utils";
8009
8227
  import { findBinPath } from "@fuel-ts/utils/cli-utils";
8010
8228
  import { spawn } from "child_process";
8011
8229
  import { randomUUID } from "crypto";
8230
+ import { randomBytes as randomBytes6 } from "ethers";
8012
8231
  import { existsSync, mkdirSync, rmSync, writeFileSync } from "fs";
8013
8232
  import os from "os";
8014
8233
  import path from "path";
@@ -8057,12 +8276,12 @@ var launchNode = async ({
8057
8276
  // eslint-disable-next-line no-async-promise-executor
8058
8277
  new Promise(async (resolve, reject) => {
8059
8278
  const remainingArgs = extractRemainingArgs(args, [
8060
- "--chain",
8279
+ "--snapshot",
8061
8280
  "--consensus-key",
8062
8281
  "--db-type",
8063
8282
  "--poa-instant"
8064
8283
  ]);
8065
- const chainConfigPath = getFlagValueFromArgs(args, "--chain");
8284
+ const chainConfigPath = getFlagValueFromArgs(args, "--snapshot");
8066
8285
  const consensusKey = getFlagValueFromArgs(args, "--consensus-key") || defaultConsensusKey;
8067
8286
  const dbTypeFlagValue = getFlagValueFromArgs(args, "--db-type");
8068
8287
  const useInMemoryDb = dbTypeFlagValue === "in-memory" || dbTypeFlagValue === void 0;
@@ -8081,36 +8300,54 @@ var launchNode = async ({
8081
8300
  let chainConfigPathToUse;
8082
8301
  const prefix = basePath || os.tmpdir();
8083
8302
  const suffix = basePath ? "" : randomUUID();
8084
- const tempDirPath = path.join(prefix, ".fuels", suffix);
8303
+ const tempDirPath = path.join(prefix, ".fuels", suffix, "chainConfigs");
8085
8304
  if (chainConfigPath) {
8086
8305
  chainConfigPathToUse = chainConfigPath;
8087
8306
  } else {
8088
8307
  if (!existsSync(tempDirPath)) {
8089
8308
  mkdirSync(tempDirPath, { recursive: true });
8090
8309
  }
8091
- const tempChainConfigFilePath = path.join(tempDirPath, "chainConfig.json");
8092
- let chainConfig = defaultChainConfig;
8310
+ let { stateConfigJson } = defaultChainConfigs;
8311
+ const { chainConfigJson, metadataJson } = defaultChainConfigs;
8312
+ stateConfigJson = {
8313
+ ...stateConfigJson,
8314
+ coins: [
8315
+ ...stateConfigJson.coins.map((coin) => ({
8316
+ ...coin,
8317
+ amount: "18446744073709551615"
8318
+ }))
8319
+ ],
8320
+ messages: stateConfigJson.messages.map((message) => ({
8321
+ ...message,
8322
+ amount: "18446744073709551615"
8323
+ }))
8324
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8325
+ };
8093
8326
  if (!process.env.GENESIS_SECRET) {
8094
8327
  const pk = Signer.generatePrivateKey();
8095
8328
  const signer = new Signer(pk);
8096
8329
  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
- };
8330
+ stateConfigJson.coins.push({
8331
+ tx_id: hexlify18(randomBytes6(34)),
8332
+ owner: signer.address.toHexString(),
8333
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8334
+ amount: "18446744073709551615",
8335
+ asset_id: BaseAssetId4,
8336
+ output_index: 0,
8337
+ tx_pointer_block_height: 0,
8338
+ tx_pointer_tx_idx: 0
8339
+ });
8111
8340
  }
8112
- writeFileSync(tempChainConfigFilePath, JSON.stringify(chainConfig), "utf8");
8113
- chainConfigPathToUse = tempChainConfigFilePath;
8341
+ let fixedStateConfigJSON = JSON.stringify(stateConfigJson);
8342
+ const regexMakeNumber = /("amount":)"(\d+)"/gm;
8343
+ fixedStateConfigJSON = fixedStateConfigJSON.replace(regexMakeNumber, "$1$2");
8344
+ const chainConfigWritePath = path.join(tempDirPath, "chainConfig.json");
8345
+ const stateConfigWritePath = path.join(tempDirPath, "stateConfig.json");
8346
+ const metadataWritePath = path.join(tempDirPath, "metadata.json");
8347
+ writeFileSync(chainConfigWritePath, JSON.stringify(chainConfigJson), "utf8");
8348
+ writeFileSync(stateConfigWritePath, fixedStateConfigJSON, "utf8");
8349
+ writeFileSync(metadataWritePath, JSON.stringify(metadataJson), "utf8");
8350
+ chainConfigPathToUse = tempDirPath;
8114
8351
  }
8115
8352
  const child = spawn(
8116
8353
  command,
@@ -8119,10 +8356,10 @@ var launchNode = async ({
8119
8356
  ["--ip", ipToUse],
8120
8357
  ["--port", portToUse],
8121
8358
  useInMemoryDb ? ["--db-type", "in-memory"] : ["--db-path", tempDirPath],
8122
- ["--min-gas-price", "0"],
8359
+ ["--min-gas-price", "1"],
8123
8360
  poaInstant ? ["--poa-instant", "true"] : [],
8124
8361
  ["--consensus-key", consensusKey],
8125
- ["--chain", chainConfigPathToUse],
8362
+ ["--snapshot", chainConfigPathToUse],
8126
8363
  "--vm-backtrace",
8127
8364
  "--utxo-validation",
8128
8365
  "--debug",
@@ -8181,7 +8418,7 @@ var launchNodeAndGetWallets = async ({
8181
8418
  walletCount = 10
8182
8419
  } = {}) => {
8183
8420
  const { cleanup: closeNode, ip, port } = await launchNode(launchNodeOptions || {});
8184
- const provider = await Provider.create(`http://${ip}:${port}/graphql`);
8421
+ const provider = await Provider.create(`http://${ip}:${port}/v1/graphql`);
8185
8422
  const wallets = await generateWallets(walletCount, provider);
8186
8423
  const cleanup = () => {
8187
8424
  closeNode();