@fuel-ts/account 0.0.0-rc-2034-20240410113328 → 0.0.0-rc-2021-20240410132122

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