@fuel-ts/account 0.0.0-rc-1976-20240408114146 → 0.0.0-rc-2021-20240409111335
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.
- package/README.md +1 -1
- package/dist/account.d.ts +5 -4
- package/dist/account.d.ts.map +1 -1
- package/dist/configs.d.ts.map +1 -1
- package/dist/configs.global.js +1 -1
- package/dist/configs.global.js.map +1 -1
- package/dist/configs.js +1 -1
- package/dist/configs.js.map +1 -1
- package/dist/configs.mjs +1 -1
- package/dist/configs.mjs.map +1 -1
- package/dist/index.global.js +872 -620
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +848 -610
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +690 -453
- package/dist/index.mjs.map +1 -1
- package/dist/predicate/predicate.d.ts +10 -2
- package/dist/predicate/predicate.d.ts.map +1 -1
- package/dist/providers/__generated__/operations.d.ts +888 -322
- package/dist/providers/__generated__/operations.d.ts.map +1 -1
- package/dist/providers/coin-quantity.d.ts +3 -3
- package/dist/providers/coin-quantity.d.ts.map +1 -1
- package/dist/providers/coin.d.ts +4 -2
- package/dist/providers/coin.d.ts.map +1 -1
- package/dist/providers/fuel-graphql-subscriber.d.ts.map +1 -1
- package/dist/providers/message.d.ts +3 -1
- package/dist/providers/message.d.ts.map +1 -1
- package/dist/providers/provider.d.ts +45 -34
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/providers/transaction-request/create-transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-request/input.d.ts +2 -2
- package/dist/providers/transaction-request/input.d.ts.map +1 -1
- package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-request/transaction-request.d.ts +9 -29
- package/dist/providers/transaction-request/transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-request/utils.d.ts +3 -0
- package/dist/providers/transaction-request/utils.d.ts.map +1 -1
- package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +2 -0
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
- package/dist/providers/transaction-summary/calculate-transaction-fee.d.ts +3 -2
- package/dist/providers/transaction-summary/calculate-transaction-fee.d.ts.map +1 -1
- package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
- package/dist/providers/utils/gas.d.ts +8 -2
- package/dist/providers/utils/gas.d.ts.map +1 -1
- package/dist/test-utils/launchNode.d.ts.map +1 -1
- package/dist/test-utils.global.js +1587 -1121
- package/dist/test-utils.global.js.map +1 -1
- package/dist/test-utils.js +824 -607
- package/dist/test-utils.js.map +1 -1
- package/dist/test-utils.mjs +682 -465
- package/dist/test-utils.mjs.map +1 -1
- package/dist/wallet/base-wallet-unlocked.d.ts.map +1 -1
- package/package.json +17 -17
package/dist/index.js
CHANGED
@@ -95,7 +95,7 @@ __export(src_exports, {
|
|
95
95
|
WalletLocked: () => WalletLocked,
|
96
96
|
WalletManager: () => WalletManager,
|
97
97
|
WalletUnlocked: () => WalletUnlocked,
|
98
|
-
|
98
|
+
addAmountToCoinQuantities: () => addAmountToCoinQuantities,
|
99
99
|
addOperation: () => addOperation,
|
100
100
|
assemblePanicError: () => assemblePanicError,
|
101
101
|
assembleReceiptByType: () => assembleReceiptByType,
|
@@ -104,9 +104,10 @@ __export(src_exports, {
|
|
104
104
|
assets: () => assets,
|
105
105
|
buildBlockExplorerUrl: () => buildBlockExplorerUrl,
|
106
106
|
cacheFor: () => cacheFor,
|
107
|
+
cacheTxInputsFromOwner: () => cacheTxInputsFromOwner,
|
108
|
+
calculateGasFee: () => calculateGasFee,
|
107
109
|
calculateMetadataGasForTxCreate: () => calculateMetadataGasForTxCreate,
|
108
110
|
calculateMetadataGasForTxScript: () => calculateMetadataGasForTxScript,
|
109
|
-
calculatePriceWithFactor: () => calculatePriceWithFactor,
|
110
111
|
calculateTransactionFee: () => calculateTransactionFee,
|
111
112
|
coinQuantityfy: () => coinQuantityfy,
|
112
113
|
deferPromise: () => deferPromise,
|
@@ -184,35 +185,38 @@ module.exports = __toCommonJS(src_exports);
|
|
184
185
|
|
185
186
|
// src/account.ts
|
186
187
|
var import_address4 = require("@fuel-ts/address");
|
188
|
+
var import_configs12 = require("@fuel-ts/address/configs");
|
187
189
|
var import_errors16 = require("@fuel-ts/errors");
|
188
190
|
var import_interfaces = require("@fuel-ts/interfaces");
|
189
|
-
var
|
190
|
-
var
|
191
|
+
var import_math19 = require("@fuel-ts/math");
|
192
|
+
var import_utils27 = require("@fuel-ts/utils");
|
193
|
+
var import_ramda4 = require("ramda");
|
191
194
|
|
192
195
|
// src/providers/coin-quantity.ts
|
196
|
+
var import_configs = require("@fuel-ts/address/configs");
|
193
197
|
var import_math = require("@fuel-ts/math");
|
194
198
|
var import_utils = require("@fuel-ts/utils");
|
195
199
|
var coinQuantityfy = (coinQuantityLike) => {
|
196
200
|
let assetId;
|
197
201
|
let amount;
|
198
|
-
let
|
202
|
+
let max;
|
199
203
|
if (Array.isArray(coinQuantityLike)) {
|
200
204
|
amount = coinQuantityLike[0];
|
201
|
-
assetId = coinQuantityLike[1];
|
202
|
-
|
205
|
+
assetId = coinQuantityLike[1] ?? import_configs.BaseAssetId;
|
206
|
+
max = coinQuantityLike[2] ?? void 0;
|
203
207
|
} else {
|
204
208
|
amount = coinQuantityLike.amount;
|
205
|
-
assetId = coinQuantityLike.assetId;
|
206
|
-
|
209
|
+
assetId = coinQuantityLike.assetId ?? import_configs.BaseAssetId;
|
210
|
+
max = coinQuantityLike.max ?? void 0;
|
207
211
|
}
|
208
212
|
const bnAmount = (0, import_math.bn)(amount);
|
209
213
|
return {
|
210
214
|
assetId: (0, import_utils.hexlify)(assetId),
|
211
215
|
amount: bnAmount.lt(1) ? (0, import_math.bn)(1) : bnAmount,
|
212
|
-
max:
|
216
|
+
max: max ? (0, import_math.bn)(max) : void 0
|
213
217
|
};
|
214
218
|
};
|
215
|
-
var
|
219
|
+
var addAmountToCoinQuantities = (params) => {
|
216
220
|
const { amount, assetId } = params;
|
217
221
|
const coinQuantities = [...params.coinQuantities];
|
218
222
|
const assetIdx = coinQuantities.findIndex((coinQuantity) => coinQuantity.assetId === assetId);
|
@@ -227,12 +231,12 @@ var addAmountToAsset = (params) => {
|
|
227
231
|
// src/providers/provider.ts
|
228
232
|
var import_address3 = require("@fuel-ts/address");
|
229
233
|
var import_errors14 = require("@fuel-ts/errors");
|
230
|
-
var
|
231
|
-
var
|
232
|
-
var
|
234
|
+
var import_math16 = require("@fuel-ts/math");
|
235
|
+
var import_transactions19 = require("@fuel-ts/transactions");
|
236
|
+
var import_utils22 = require("@fuel-ts/utils");
|
233
237
|
var import_versions = require("@fuel-ts/versions");
|
234
|
-
var
|
235
|
-
var
|
238
|
+
var import_utils23 = require("@noble/curves/abstract/utils");
|
239
|
+
var import_ethers2 = require("ethers");
|
236
240
|
var import_graphql_request = require("graphql-request");
|
237
241
|
var import_ramda3 = require("ramda");
|
238
242
|
|
@@ -240,14 +244,10 @@ var import_ramda3 = require("ramda");
|
|
240
244
|
var import_graphql_tag = __toESM(require("graphql-tag"));
|
241
245
|
var ReceiptFragmentFragmentDoc = import_graphql_tag.default`
|
242
246
|
fragment receiptFragment on Receipt {
|
243
|
-
|
244
|
-
id
|
245
|
-
}
|
247
|
+
id
|
246
248
|
pc
|
247
249
|
is
|
248
|
-
to
|
249
|
-
id
|
250
|
-
}
|
250
|
+
to
|
251
251
|
toAddress
|
252
252
|
amount
|
253
253
|
assetId
|
@@ -285,10 +285,16 @@ var TransactionStatusFragmentFragmentDoc = import_graphql_tag.default`
|
|
285
285
|
id
|
286
286
|
}
|
287
287
|
time
|
288
|
+
receipts {
|
289
|
+
...receiptFragment
|
290
|
+
}
|
288
291
|
programState {
|
289
292
|
returnType
|
290
293
|
data
|
291
294
|
}
|
295
|
+
receipts {
|
296
|
+
...receiptFragment
|
297
|
+
}
|
292
298
|
}
|
293
299
|
... on FailureStatus {
|
294
300
|
block {
|
@@ -296,26 +302,24 @@ var TransactionStatusFragmentFragmentDoc = import_graphql_tag.default`
|
|
296
302
|
}
|
297
303
|
time
|
298
304
|
reason
|
305
|
+
receipts {
|
306
|
+
...receiptFragment
|
307
|
+
}
|
299
308
|
}
|
300
309
|
... on SqueezedOutStatus {
|
301
310
|
reason
|
302
311
|
}
|
303
312
|
}
|
304
|
-
`;
|
313
|
+
${ReceiptFragmentFragmentDoc}`;
|
305
314
|
var TransactionFragmentFragmentDoc = import_graphql_tag.default`
|
306
315
|
fragment transactionFragment on Transaction {
|
307
316
|
id
|
308
317
|
rawPayload
|
309
|
-
gasPrice
|
310
|
-
receipts {
|
311
|
-
...receiptFragment
|
312
|
-
}
|
313
318
|
status {
|
314
319
|
...transactionStatusFragment
|
315
320
|
}
|
316
321
|
}
|
317
|
-
${
|
318
|
-
${TransactionStatusFragmentFragmentDoc}`;
|
322
|
+
${TransactionStatusFragmentFragmentDoc}`;
|
319
323
|
var InputEstimatePredicatesFragmentFragmentDoc = import_graphql_tag.default`
|
320
324
|
fragment inputEstimatePredicatesFragment on Input {
|
321
325
|
... on InputCoin {
|
@@ -333,6 +337,46 @@ var TransactionEstimatePredicatesFragmentFragmentDoc = import_graphql_tag.defaul
|
|
333
337
|
}
|
334
338
|
}
|
335
339
|
${InputEstimatePredicatesFragmentFragmentDoc}`;
|
340
|
+
var DryRunFailureStatusFragmentFragmentDoc = import_graphql_tag.default`
|
341
|
+
fragment dryRunFailureStatusFragment on DryRunFailureStatus {
|
342
|
+
reason
|
343
|
+
programState {
|
344
|
+
returnType
|
345
|
+
data
|
346
|
+
}
|
347
|
+
}
|
348
|
+
`;
|
349
|
+
var DryRunSuccessStatusFragmentFragmentDoc = import_graphql_tag.default`
|
350
|
+
fragment dryRunSuccessStatusFragment on DryRunSuccessStatus {
|
351
|
+
programState {
|
352
|
+
returnType
|
353
|
+
data
|
354
|
+
}
|
355
|
+
}
|
356
|
+
`;
|
357
|
+
var DryRunTransactionStatusFragmentFragmentDoc = import_graphql_tag.default`
|
358
|
+
fragment dryRunTransactionStatusFragment on DryRunTransactionStatus {
|
359
|
+
... on DryRunFailureStatus {
|
360
|
+
...dryRunFailureStatusFragment
|
361
|
+
}
|
362
|
+
... on DryRunSuccessStatus {
|
363
|
+
...dryRunSuccessStatusFragment
|
364
|
+
}
|
365
|
+
}
|
366
|
+
${DryRunFailureStatusFragmentFragmentDoc}
|
367
|
+
${DryRunSuccessStatusFragmentFragmentDoc}`;
|
368
|
+
var DryRunTransactionExecutionStatusFragmentFragmentDoc = import_graphql_tag.default`
|
369
|
+
fragment dryRunTransactionExecutionStatusFragment on DryRunTransactionExecutionStatus {
|
370
|
+
id
|
371
|
+
status {
|
372
|
+
...dryRunTransactionStatusFragment
|
373
|
+
}
|
374
|
+
receipts {
|
375
|
+
...receiptFragment
|
376
|
+
}
|
377
|
+
}
|
378
|
+
${DryRunTransactionStatusFragmentFragmentDoc}
|
379
|
+
${ReceiptFragmentFragmentDoc}`;
|
336
380
|
var CoinFragmentFragmentDoc = import_graphql_tag.default`
|
337
381
|
fragment coinFragment on Coin {
|
338
382
|
__typename
|
@@ -340,7 +384,6 @@ var CoinFragmentFragmentDoc = import_graphql_tag.default`
|
|
340
384
|
owner
|
341
385
|
amount
|
342
386
|
assetId
|
343
|
-
maturity
|
344
387
|
blockCreated
|
345
388
|
txCreatedIdx
|
346
389
|
}
|
@@ -385,7 +428,6 @@ var MessageProofFragmentFragmentDoc = import_graphql_tag.default`
|
|
385
428
|
prevRoot
|
386
429
|
time
|
387
430
|
applicationHash
|
388
|
-
messageReceiptRoot
|
389
431
|
messageReceiptCount
|
390
432
|
}
|
391
433
|
commitBlockHeader {
|
@@ -397,7 +439,6 @@ var MessageProofFragmentFragmentDoc = import_graphql_tag.default`
|
|
397
439
|
prevRoot
|
398
440
|
time
|
399
441
|
applicationHash
|
400
|
-
messageReceiptRoot
|
401
442
|
messageReceiptCount
|
402
443
|
}
|
403
444
|
sender
|
@@ -417,8 +458,8 @@ var BalanceFragmentFragmentDoc = import_graphql_tag.default`
|
|
417
458
|
var BlockFragmentFragmentDoc = import_graphql_tag.default`
|
418
459
|
fragment blockFragment on Block {
|
419
460
|
id
|
461
|
+
height
|
420
462
|
header {
|
421
|
-
height
|
422
463
|
time
|
423
464
|
}
|
424
465
|
transactions {
|
@@ -476,6 +517,11 @@ var DependentCostFragmentFragmentDoc = import_graphql_tag.default`
|
|
476
517
|
`;
|
477
518
|
var GasCostsFragmentFragmentDoc = import_graphql_tag.default`
|
478
519
|
fragment GasCostsFragment on GasCosts {
|
520
|
+
version {
|
521
|
+
... on Version {
|
522
|
+
value
|
523
|
+
}
|
524
|
+
}
|
479
525
|
add
|
480
526
|
addi
|
481
527
|
aloc
|
@@ -488,7 +534,6 @@ var GasCostsFragmentFragmentDoc = import_graphql_tag.default`
|
|
488
534
|
cb
|
489
535
|
cfei
|
490
536
|
cfsi
|
491
|
-
croo
|
492
537
|
div
|
493
538
|
divi
|
494
539
|
ecr1
|
@@ -571,6 +616,9 @@ var GasCostsFragmentFragmentDoc = import_graphql_tag.default`
|
|
571
616
|
ccp {
|
572
617
|
...DependentCostFragment
|
573
618
|
}
|
619
|
+
croo {
|
620
|
+
...DependentCostFragment
|
621
|
+
}
|
574
622
|
csiz {
|
575
623
|
...DependentCostFragment
|
576
624
|
}
|
@@ -630,6 +678,11 @@ var GasCostsFragmentFragmentDoc = import_graphql_tag.default`
|
|
630
678
|
${DependentCostFragmentFragmentDoc}`;
|
631
679
|
var ConsensusParametersFragmentFragmentDoc = import_graphql_tag.default`
|
632
680
|
fragment consensusParametersFragment on ConsensusParameters {
|
681
|
+
version {
|
682
|
+
... on Version {
|
683
|
+
value
|
684
|
+
}
|
685
|
+
}
|
633
686
|
txParams {
|
634
687
|
...TxParametersFragment
|
635
688
|
}
|
@@ -689,18 +742,9 @@ var NodeInfoFragmentFragmentDoc = import_graphql_tag.default`
|
|
689
742
|
fragment nodeInfoFragment on NodeInfo {
|
690
743
|
utxoValidation
|
691
744
|
vmBacktrace
|
692
|
-
minGasPrice
|
693
745
|
maxTx
|
694
746
|
maxDepth
|
695
747
|
nodeVersion
|
696
|
-
peers {
|
697
|
-
id
|
698
|
-
addresses
|
699
|
-
clientVersion
|
700
|
-
blockHeight
|
701
|
-
lastHeartbeatMs
|
702
|
-
appScore
|
703
|
-
}
|
704
748
|
}
|
705
749
|
`;
|
706
750
|
var GetVersionDocument = import_graphql_tag.default`
|
@@ -735,13 +779,9 @@ var GetTransactionWithReceiptsDocument = import_graphql_tag.default`
|
|
735
779
|
query getTransactionWithReceipts($transactionId: TransactionId!) {
|
736
780
|
transaction(id: $transactionId) {
|
737
781
|
...transactionFragment
|
738
|
-
receipts {
|
739
|
-
...receiptFragment
|
740
|
-
}
|
741
782
|
}
|
742
783
|
}
|
743
|
-
${TransactionFragmentFragmentDoc}
|
744
|
-
${ReceiptFragmentFragmentDoc}`;
|
784
|
+
${TransactionFragmentFragmentDoc}`;
|
745
785
|
var GetTransactionsDocument = import_graphql_tag.default`
|
746
786
|
query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
|
747
787
|
transactions(after: $after, before: $before, first: $first, last: $last) {
|
@@ -869,6 +909,20 @@ var GetBalanceDocument = import_graphql_tag.default`
|
|
869
909
|
}
|
870
910
|
}
|
871
911
|
${BalanceFragmentFragmentDoc}`;
|
912
|
+
var GetLatestGasPriceDocument = import_graphql_tag.default`
|
913
|
+
query getLatestGasPrice {
|
914
|
+
latestGasPrice {
|
915
|
+
gasPrice
|
916
|
+
}
|
917
|
+
}
|
918
|
+
`;
|
919
|
+
var EstimateGasPriceDocument = import_graphql_tag.default`
|
920
|
+
query estimateGasPrice($blockHorizon: U32!) {
|
921
|
+
estimateGasPrice(blockHorizon: $blockHorizon) {
|
922
|
+
gasPrice
|
923
|
+
}
|
924
|
+
}
|
925
|
+
`;
|
872
926
|
var GetBalancesDocument = import_graphql_tag.default`
|
873
927
|
query getBalances($filter: BalanceFilterInput!, $after: String, $before: String, $first: Int, $last: Int) {
|
874
928
|
balances(
|
@@ -923,12 +977,12 @@ var GetMessageStatusDocument = import_graphql_tag.default`
|
|
923
977
|
}
|
924
978
|
`;
|
925
979
|
var DryRunDocument = import_graphql_tag.default`
|
926
|
-
mutation dryRun($
|
927
|
-
dryRun(
|
928
|
-
...
|
980
|
+
mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean) {
|
981
|
+
dryRun(txs: $encodedTransactions, utxoValidation: $utxoValidation) {
|
982
|
+
...dryRunTransactionExecutionStatusFragment
|
929
983
|
}
|
930
984
|
}
|
931
|
-
${
|
985
|
+
${DryRunTransactionExecutionStatusFragmentFragmentDoc}`;
|
932
986
|
var SubmitDocument = import_graphql_tag.default`
|
933
987
|
mutation submit($encodedTransaction: HexString!) {
|
934
988
|
submit(tx: $encodedTransaction) {
|
@@ -1011,6 +1065,12 @@ function getSdk(requester) {
|
|
1011
1065
|
getBalance(variables, options) {
|
1012
1066
|
return requester(GetBalanceDocument, variables, options);
|
1013
1067
|
},
|
1068
|
+
getLatestGasPrice(variables, options) {
|
1069
|
+
return requester(GetLatestGasPriceDocument, variables, options);
|
1070
|
+
},
|
1071
|
+
estimateGasPrice(variables, options) {
|
1072
|
+
return requester(EstimateGasPriceDocument, variables, options);
|
1073
|
+
},
|
1014
1074
|
getBalances(variables, options) {
|
1015
1075
|
return requester(GetBalancesDocument, variables, options);
|
1016
1076
|
},
|
@@ -1084,7 +1144,9 @@ var _FuelGraphqlSubscriber = class {
|
|
1084
1144
|
} catch (e) {
|
1085
1145
|
throw new import_errors.FuelError(
|
1086
1146
|
import_errors.ErrorCode.STREAM_PARSING_ERROR,
|
1087
|
-
`Error while parsing stream data response: ${text}
|
1147
|
+
`Error while parsing stream data response: ${text}
|
1148
|
+
|
1149
|
+
Thrown error: ${e}`
|
1088
1150
|
);
|
1089
1151
|
}
|
1090
1152
|
if (Array.isArray(errors)) {
|
@@ -1171,7 +1233,7 @@ var MemoryCache = class {
|
|
1171
1233
|
};
|
1172
1234
|
|
1173
1235
|
// src/providers/transaction-request/input.ts
|
1174
|
-
var
|
1236
|
+
var import_configs2 = require("@fuel-ts/address/configs");
|
1175
1237
|
var import_errors3 = require("@fuel-ts/errors");
|
1176
1238
|
var import_math2 = require("@fuel-ts/math");
|
1177
1239
|
var import_transactions = require("@fuel-ts/transactions");
|
@@ -1185,7 +1247,7 @@ var inputify = (value) => {
|
|
1185
1247
|
return {
|
1186
1248
|
type: import_transactions.InputType.Coin,
|
1187
1249
|
txID: (0, import_utils3.hexlify)((0, import_utils3.arrayify)(value.id).slice(0, 32)),
|
1188
|
-
outputIndex: (0, import_utils3.arrayify)(value.id)
|
1250
|
+
outputIndex: (0, import_math2.toNumber)((0, import_utils3.arrayify)(value.id).slice(32, 34)),
|
1189
1251
|
owner: (0, import_utils3.hexlify)(value.owner),
|
1190
1252
|
amount: (0, import_math2.bn)(value.amount),
|
1191
1253
|
assetId: (0, import_utils3.hexlify)(value.assetId),
|
@@ -1194,10 +1256,9 @@ var inputify = (value) => {
|
|
1194
1256
|
txIndex: (0, import_math2.toNumber)((0, import_utils3.arrayify)(value.txPointer).slice(8, 16))
|
1195
1257
|
},
|
1196
1258
|
witnessIndex: value.witnessIndex,
|
1197
|
-
maturity: value.maturity ?? 0,
|
1198
1259
|
predicateGasUsed: (0, import_math2.bn)(value.predicateGasUsed),
|
1199
|
-
predicateLength: predicate.length,
|
1200
|
-
predicateDataLength: predicateData.length,
|
1260
|
+
predicateLength: (0, import_math2.bn)(predicate.length),
|
1261
|
+
predicateDataLength: (0, import_math2.bn)(predicateData.length),
|
1201
1262
|
predicate: (0, import_utils3.hexlify)(predicate),
|
1202
1263
|
predicateData: (0, import_utils3.hexlify)(predicateData)
|
1203
1264
|
};
|
@@ -1205,10 +1266,10 @@ var inputify = (value) => {
|
|
1205
1266
|
case import_transactions.InputType.Contract: {
|
1206
1267
|
return {
|
1207
1268
|
type: import_transactions.InputType.Contract,
|
1208
|
-
txID:
|
1269
|
+
txID: import_configs2.ZeroBytes32,
|
1209
1270
|
outputIndex: 0,
|
1210
|
-
balanceRoot:
|
1211
|
-
stateRoot:
|
1271
|
+
balanceRoot: import_configs2.ZeroBytes32,
|
1272
|
+
stateRoot: import_configs2.ZeroBytes32,
|
1212
1273
|
txPointer: {
|
1213
1274
|
blockHeight: (0, import_math2.toNumber)((0, import_utils3.arrayify)(value.txPointer).slice(0, 8)),
|
1214
1275
|
txIndex: (0, import_math2.toNumber)((0, import_utils3.arrayify)(value.txPointer).slice(8, 16))
|
@@ -1228,8 +1289,8 @@ var inputify = (value) => {
|
|
1228
1289
|
nonce: (0, import_utils3.hexlify)(value.nonce),
|
1229
1290
|
witnessIndex: value.witnessIndex,
|
1230
1291
|
predicateGasUsed: (0, import_math2.bn)(value.predicateGasUsed),
|
1231
|
-
predicateLength: predicate.length,
|
1232
|
-
predicateDataLength: predicateData.length,
|
1292
|
+
predicateLength: (0, import_math2.bn)(predicate.length),
|
1293
|
+
predicateDataLength: (0, import_math2.bn)(predicateData.length),
|
1233
1294
|
predicate: (0, import_utils3.hexlify)(predicate),
|
1234
1295
|
predicateData: (0, import_utils3.hexlify)(predicateData),
|
1235
1296
|
data: (0, import_utils3.hexlify)(data),
|
@@ -1246,7 +1307,7 @@ var inputify = (value) => {
|
|
1246
1307
|
};
|
1247
1308
|
|
1248
1309
|
// src/providers/transaction-request/output.ts
|
1249
|
-
var
|
1310
|
+
var import_configs3 = require("@fuel-ts/address/configs");
|
1250
1311
|
var import_errors4 = require("@fuel-ts/errors");
|
1251
1312
|
var import_math3 = require("@fuel-ts/math");
|
1252
1313
|
var import_transactions2 = require("@fuel-ts/transactions");
|
@@ -1266,8 +1327,8 @@ var outputify = (value) => {
|
|
1266
1327
|
return {
|
1267
1328
|
type: import_transactions2.OutputType.Contract,
|
1268
1329
|
inputIndex: value.inputIndex,
|
1269
|
-
balanceRoot:
|
1270
|
-
stateRoot:
|
1330
|
+
balanceRoot: import_configs3.ZeroBytes32,
|
1331
|
+
stateRoot: import_configs3.ZeroBytes32
|
1271
1332
|
};
|
1272
1333
|
}
|
1273
1334
|
case import_transactions2.OutputType.Change: {
|
@@ -1281,9 +1342,9 @@ var outputify = (value) => {
|
|
1281
1342
|
case import_transactions2.OutputType.Variable: {
|
1282
1343
|
return {
|
1283
1344
|
type: import_transactions2.OutputType.Variable,
|
1284
|
-
to:
|
1345
|
+
to: import_configs3.ZeroBytes32,
|
1285
1346
|
amount: (0, import_math3.bn)(0),
|
1286
|
-
assetId:
|
1347
|
+
assetId: import_configs3.ZeroBytes32
|
1287
1348
|
};
|
1288
1349
|
}
|
1289
1350
|
case import_transactions2.OutputType.ContractCreated: {
|
@@ -1304,10 +1365,11 @@ var outputify = (value) => {
|
|
1304
1365
|
|
1305
1366
|
// src/providers/transaction-request/transaction-request.ts
|
1306
1367
|
var import_address = require("@fuel-ts/address");
|
1307
|
-
var
|
1368
|
+
var import_configs7 = require("@fuel-ts/address/configs");
|
1308
1369
|
var import_math7 = require("@fuel-ts/math");
|
1309
1370
|
var import_transactions6 = require("@fuel-ts/transactions");
|
1310
1371
|
var import_utils9 = require("@fuel-ts/utils");
|
1372
|
+
var import_ethers = require("ethers");
|
1311
1373
|
|
1312
1374
|
// src/providers/resource.ts
|
1313
1375
|
var isRawCoin = (resource) => "utxoId" in resource;
|
@@ -1316,13 +1378,13 @@ var isCoin = (resource) => "id" in resource;
|
|
1316
1378
|
var isMessage = (resource) => "recipient" in resource;
|
1317
1379
|
|
1318
1380
|
// src/providers/utils/receipts.ts
|
1319
|
-
var
|
1381
|
+
var import_configs4 = require("@fuel-ts/address/configs");
|
1320
1382
|
var import_errors5 = require("@fuel-ts/errors");
|
1321
1383
|
var import_math4 = require("@fuel-ts/math");
|
1322
1384
|
var import_transactions3 = require("@fuel-ts/transactions");
|
1323
|
-
var
|
1385
|
+
var import_configs5 = require("@fuel-ts/transactions/configs");
|
1324
1386
|
var import_utils5 = require("@fuel-ts/utils");
|
1325
|
-
var doesReceiptHaveMissingOutputVariables = (receipt) => receipt.type === import_transactions3.ReceiptType.Revert && receipt.val.toString("hex") ===
|
1387
|
+
var doesReceiptHaveMissingOutputVariables = (receipt) => receipt.type === import_transactions3.ReceiptType.Revert && receipt.val.toString("hex") === import_configs5.FAILED_TRANSFER_TO_ADDRESS_SIGNAL;
|
1326
1388
|
var doesReceiptHaveMissingContractId = (receipt) => receipt.type === import_transactions3.ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000";
|
1327
1389
|
var getReceiptsWithMissingData = (receipts) => receipts.reduce(
|
1328
1390
|
(memo, receipt) => {
|
@@ -1339,15 +1401,15 @@ var getReceiptsWithMissingData = (receipts) => receipts.reduce(
|
|
1339
1401
|
missingOutputContractIds: []
|
1340
1402
|
}
|
1341
1403
|
);
|
1342
|
-
var hexOrZero = (hex) => hex ||
|
1404
|
+
var hexOrZero = (hex) => hex || import_configs4.ZeroBytes32;
|
1343
1405
|
function assembleReceiptByType(receipt) {
|
1344
1406
|
const { receiptType } = receipt;
|
1345
1407
|
switch (receiptType) {
|
1346
1408
|
case "CALL" /* Call */: {
|
1347
1409
|
const callReceipt = {
|
1348
1410
|
type: import_transactions3.ReceiptType.Call,
|
1349
|
-
from: hexOrZero(receipt.
|
1350
|
-
to: hexOrZero(receipt?.to
|
1411
|
+
from: hexOrZero(receipt.id || receipt.contractId),
|
1412
|
+
to: hexOrZero(receipt?.to),
|
1351
1413
|
amount: (0, import_math4.bn)(receipt.amount),
|
1352
1414
|
assetId: hexOrZero(receipt.assetId),
|
1353
1415
|
gas: (0, import_math4.bn)(receipt.gas),
|
@@ -1361,7 +1423,7 @@ function assembleReceiptByType(receipt) {
|
|
1361
1423
|
case "RETURN" /* Return */: {
|
1362
1424
|
const returnReceipt = {
|
1363
1425
|
type: import_transactions3.ReceiptType.Return,
|
1364
|
-
id: hexOrZero(receipt.
|
1426
|
+
id: hexOrZero(receipt.id || receipt.contractId),
|
1365
1427
|
val: (0, import_math4.bn)(receipt.val),
|
1366
1428
|
pc: (0, import_math4.bn)(receipt.pc),
|
1367
1429
|
is: (0, import_math4.bn)(receipt.is)
|
@@ -1371,7 +1433,7 @@ function assembleReceiptByType(receipt) {
|
|
1371
1433
|
case "RETURN_DATA" /* ReturnData */: {
|
1372
1434
|
const returnDataReceipt = {
|
1373
1435
|
type: import_transactions3.ReceiptType.ReturnData,
|
1374
|
-
id: hexOrZero(receipt.
|
1436
|
+
id: hexOrZero(receipt.id || receipt.contractId),
|
1375
1437
|
ptr: (0, import_math4.bn)(receipt.ptr),
|
1376
1438
|
len: (0, import_math4.bn)(receipt.len),
|
1377
1439
|
digest: hexOrZero(receipt.digest),
|
@@ -1383,7 +1445,7 @@ function assembleReceiptByType(receipt) {
|
|
1383
1445
|
case "PANIC" /* Panic */: {
|
1384
1446
|
const panicReceipt = {
|
1385
1447
|
type: import_transactions3.ReceiptType.Panic,
|
1386
|
-
id: hexOrZero(receipt.
|
1448
|
+
id: hexOrZero(receipt.id),
|
1387
1449
|
reason: (0, import_math4.bn)(receipt.reason),
|
1388
1450
|
pc: (0, import_math4.bn)(receipt.pc),
|
1389
1451
|
is: (0, import_math4.bn)(receipt.is),
|
@@ -1394,7 +1456,7 @@ function assembleReceiptByType(receipt) {
|
|
1394
1456
|
case "REVERT" /* Revert */: {
|
1395
1457
|
const revertReceipt = {
|
1396
1458
|
type: import_transactions3.ReceiptType.Revert,
|
1397
|
-
id: hexOrZero(receipt.
|
1459
|
+
id: hexOrZero(receipt.id || receipt.contractId),
|
1398
1460
|
val: (0, import_math4.bn)(receipt.ra),
|
1399
1461
|
pc: (0, import_math4.bn)(receipt.pc),
|
1400
1462
|
is: (0, import_math4.bn)(receipt.is)
|
@@ -1404,7 +1466,7 @@ function assembleReceiptByType(receipt) {
|
|
1404
1466
|
case "LOG" /* Log */: {
|
1405
1467
|
const logReceipt = {
|
1406
1468
|
type: import_transactions3.ReceiptType.Log,
|
1407
|
-
id: hexOrZero(receipt.
|
1469
|
+
id: hexOrZero(receipt.id || receipt.contractId),
|
1408
1470
|
val0: (0, import_math4.bn)(receipt.ra),
|
1409
1471
|
val1: (0, import_math4.bn)(receipt.rb),
|
1410
1472
|
val2: (0, import_math4.bn)(receipt.rc),
|
@@ -1417,7 +1479,7 @@ function assembleReceiptByType(receipt) {
|
|
1417
1479
|
case "LOG_DATA" /* LogData */: {
|
1418
1480
|
const logDataReceipt = {
|
1419
1481
|
type: import_transactions3.ReceiptType.LogData,
|
1420
|
-
id: hexOrZero(receipt.
|
1482
|
+
id: hexOrZero(receipt.id || receipt.contractId),
|
1421
1483
|
val0: (0, import_math4.bn)(receipt.ra),
|
1422
1484
|
val1: (0, import_math4.bn)(receipt.rb),
|
1423
1485
|
ptr: (0, import_math4.bn)(receipt.ptr),
|
@@ -1431,8 +1493,8 @@ function assembleReceiptByType(receipt) {
|
|
1431
1493
|
case "TRANSFER" /* Transfer */: {
|
1432
1494
|
const transferReceipt = {
|
1433
1495
|
type: import_transactions3.ReceiptType.Transfer,
|
1434
|
-
from: hexOrZero(receipt.
|
1435
|
-
to: hexOrZero(receipt.toAddress || receipt?.to
|
1496
|
+
from: hexOrZero(receipt.id || receipt.contractId),
|
1497
|
+
to: hexOrZero(receipt.toAddress || receipt?.to),
|
1436
1498
|
amount: (0, import_math4.bn)(receipt.amount),
|
1437
1499
|
assetId: hexOrZero(receipt.assetId),
|
1438
1500
|
pc: (0, import_math4.bn)(receipt.pc),
|
@@ -1443,8 +1505,8 @@ function assembleReceiptByType(receipt) {
|
|
1443
1505
|
case "TRANSFER_OUT" /* TransferOut */: {
|
1444
1506
|
const transferOutReceipt = {
|
1445
1507
|
type: import_transactions3.ReceiptType.TransferOut,
|
1446
|
-
from: hexOrZero(receipt.
|
1447
|
-
to: hexOrZero(receipt.toAddress || receipt.to
|
1508
|
+
from: hexOrZero(receipt.id || receipt.contractId),
|
1509
|
+
to: hexOrZero(receipt.toAddress || receipt.to),
|
1448
1510
|
amount: (0, import_math4.bn)(receipt.amount),
|
1449
1511
|
assetId: hexOrZero(receipt.assetId),
|
1450
1512
|
pc: (0, import_math4.bn)(receipt.pc),
|
@@ -1487,7 +1549,7 @@ function assembleReceiptByType(receipt) {
|
|
1487
1549
|
return receiptMessageOut;
|
1488
1550
|
}
|
1489
1551
|
case "MINT" /* Mint */: {
|
1490
|
-
const contractId = hexOrZero(receipt.
|
1552
|
+
const contractId = hexOrZero(receipt.id || receipt.contractId);
|
1491
1553
|
const subId = hexOrZero(receipt.subId);
|
1492
1554
|
const assetId = import_transactions3.ReceiptMintCoder.getAssetId(contractId, subId);
|
1493
1555
|
const mintReceipt = {
|
@@ -1502,7 +1564,7 @@ function assembleReceiptByType(receipt) {
|
|
1502
1564
|
return mintReceipt;
|
1503
1565
|
}
|
1504
1566
|
case "BURN" /* Burn */: {
|
1505
|
-
const contractId = hexOrZero(receipt.
|
1567
|
+
const contractId = hexOrZero(receipt.id || receipt.contractId);
|
1506
1568
|
const subId = hexOrZero(receipt.subId);
|
1507
1569
|
const assetId = import_transactions3.ReceiptBurnCoder.getAssetId(contractId, subId);
|
1508
1570
|
const burnReceipt = {
|
@@ -1587,7 +1649,6 @@ var buildBlockExplorerUrl = (options = {}) => {
|
|
1587
1649
|
var import_math5 = require("@fuel-ts/math");
|
1588
1650
|
var import_transactions4 = require("@fuel-ts/transactions");
|
1589
1651
|
var import_utils6 = require("@fuel-ts/utils");
|
1590
|
-
var calculatePriceWithFactor = (gas, gasPrice, priceFactor) => (0, import_math5.bn)(Math.ceil(gas.mul(gasPrice).toNumber() / priceFactor.toNumber()));
|
1591
1652
|
var getGasUsedFromReceipts = (receipts) => {
|
1592
1653
|
const scriptResult = receipts.filter(
|
1593
1654
|
(receipt) => receipt.type === import_transactions4.ReceiptType.ScriptResult
|
@@ -1608,18 +1669,28 @@ function resolveGasDependentCosts(byteSize, gasDependentCost) {
|
|
1608
1669
|
}
|
1609
1670
|
function gasUsedByInputs(inputs, txBytesSize, gasCosts) {
|
1610
1671
|
const witnessCache = [];
|
1611
|
-
const
|
1672
|
+
const chargeableInputs = inputs.filter((input) => {
|
1673
|
+
const isCoinOrMessage = "owner" in input || "sender" in input;
|
1674
|
+
if (isCoinOrMessage) {
|
1675
|
+
if ("predicate" in input && input.predicate && input.predicate !== "0x") {
|
1676
|
+
return true;
|
1677
|
+
}
|
1678
|
+
if (!witnessCache.includes(input.witnessIndex)) {
|
1679
|
+
witnessCache.push(input.witnessIndex);
|
1680
|
+
return true;
|
1681
|
+
}
|
1682
|
+
}
|
1683
|
+
return false;
|
1684
|
+
});
|
1685
|
+
const vmInitializationCost = resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization);
|
1686
|
+
const totalGas = chargeableInputs.reduce((total, input) => {
|
1612
1687
|
if ("predicate" in input && input.predicate && input.predicate !== "0x") {
|
1613
1688
|
return total.add(
|
1614
|
-
|
1689
|
+
vmInitializationCost.add(resolveGasDependentCosts((0, import_utils6.arrayify)(input.predicate).length, gasCosts.contractRoot)).add((0, import_math5.bn)(input.predicateGasUsed))
|
1615
1690
|
);
|
1616
1691
|
}
|
1617
|
-
|
1618
|
-
|
1619
|
-
return total.add(gasCosts.ecr1);
|
1620
|
-
}
|
1621
|
-
return total;
|
1622
|
-
}, (0, import_math5.bn)());
|
1692
|
+
return total.add(gasCosts.ecr1);
|
1693
|
+
}, (0, import_math5.bn)(0));
|
1623
1694
|
return totalGas;
|
1624
1695
|
}
|
1625
1696
|
function getMinGas(params) {
|
@@ -1631,12 +1702,20 @@ function getMinGas(params) {
|
|
1631
1702
|
return minGas;
|
1632
1703
|
}
|
1633
1704
|
function getMaxGas(params) {
|
1634
|
-
const {
|
1705
|
+
const {
|
1706
|
+
gasPerByte,
|
1707
|
+
witnessesLength,
|
1708
|
+
witnessLimit,
|
1709
|
+
minGas,
|
1710
|
+
gasLimit = (0, import_math5.bn)(0),
|
1711
|
+
maxGasPerTx
|
1712
|
+
} = params;
|
1635
1713
|
let remainingAllowedWitnessGas = (0, import_math5.bn)(0);
|
1636
1714
|
if (witnessLimit?.gt(0) && witnessLimit.gte(witnessesLength)) {
|
1637
1715
|
remainingAllowedWitnessGas = (0, import_math5.bn)(witnessLimit).sub(witnessesLength).mul(gasPerByte);
|
1638
1716
|
}
|
1639
|
-
|
1717
|
+
const maxGas = remainingAllowedWitnessGas.add(minGas).add(gasLimit);
|
1718
|
+
return maxGas.gte(maxGasPerTx) ? maxGasPerTx : maxGas;
|
1640
1719
|
}
|
1641
1720
|
function calculateMetadataGasForTxCreate({
|
1642
1721
|
gasCosts,
|
@@ -1658,6 +1737,10 @@ function calculateMetadataGasForTxScript({
|
|
1658
1737
|
}) {
|
1659
1738
|
return resolveGasDependentCosts(txBytesSize, gasCosts.s256);
|
1660
1739
|
}
|
1740
|
+
var calculateGasFee = (params) => {
|
1741
|
+
const { gas, gasPrice, priceFactor, tip } = params;
|
1742
|
+
return gas.mul(gasPrice).div(priceFactor).add(tip);
|
1743
|
+
};
|
1661
1744
|
|
1662
1745
|
// src/providers/utils/json.ts
|
1663
1746
|
var import_utils7 = require("@fuel-ts/utils");
|
@@ -1703,16 +1786,16 @@ function sleep(time) {
|
|
1703
1786
|
var import_errors7 = require("@fuel-ts/errors");
|
1704
1787
|
var import_math6 = require("@fuel-ts/math");
|
1705
1788
|
var import_transactions5 = require("@fuel-ts/transactions");
|
1706
|
-
var
|
1789
|
+
var import_configs6 = require("@fuel-ts/transactions/configs");
|
1707
1790
|
var assemblePanicError = (status) => {
|
1708
1791
|
let errorMessage = `The transaction reverted with reason: "${status.reason}".`;
|
1709
1792
|
const reason = status.reason;
|
1710
|
-
if (
|
1793
|
+
if (import_configs6.PANIC_REASONS.includes(status.reason)) {
|
1711
1794
|
errorMessage = `${errorMessage}
|
1712
1795
|
|
1713
1796
|
You can read more about this error at:
|
1714
1797
|
|
1715
|
-
${
|
1798
|
+
${import_configs6.PANIC_DOC_URL}#variant.${status.reason}`;
|
1716
1799
|
}
|
1717
1800
|
return { errorMessage, reason };
|
1718
1801
|
};
|
@@ -1724,28 +1807,28 @@ var assembleRevertError = (receipts, logs) => {
|
|
1724
1807
|
if (revertReceipt) {
|
1725
1808
|
const reasonHex = (0, import_math6.bn)(revertReceipt.val).toHex();
|
1726
1809
|
switch (reasonHex) {
|
1727
|
-
case
|
1810
|
+
case import_configs6.FAILED_REQUIRE_SIGNAL: {
|
1728
1811
|
reason = "require";
|
1729
1812
|
errorMessage = `The transaction reverted because a "require" statement has thrown ${logs.length ? stringify(logs[0]) : "an error."}.`;
|
1730
1813
|
break;
|
1731
1814
|
}
|
1732
|
-
case
|
1815
|
+
case import_configs6.FAILED_ASSERT_EQ_SIGNAL: {
|
1733
1816
|
const sufix = logs.length >= 2 ? ` comparing ${stringify(logs[1])} and ${stringify(logs[0])}.` : ".";
|
1734
1817
|
reason = "assert_eq";
|
1735
1818
|
errorMessage = `The transaction reverted because of an "assert_eq" statement${sufix}`;
|
1736
1819
|
break;
|
1737
1820
|
}
|
1738
|
-
case
|
1821
|
+
case import_configs6.FAILED_ASSERT_NE_SIGNAL: {
|
1739
1822
|
const sufix = logs.length >= 2 ? ` comparing ${stringify(logs[1])} and ${stringify(logs[0])}.` : ".";
|
1740
1823
|
reason = "assert_ne";
|
1741
1824
|
errorMessage = `The transaction reverted because of an "assert_ne" statement${sufix}`;
|
1742
1825
|
break;
|
1743
1826
|
}
|
1744
|
-
case
|
1827
|
+
case import_configs6.FAILED_ASSERT_SIGNAL:
|
1745
1828
|
reason = "assert";
|
1746
1829
|
errorMessage = `The transaction reverted because an "assert" statement failed to evaluate to true.`;
|
1747
1830
|
break;
|
1748
|
-
case
|
1831
|
+
case import_configs6.FAILED_TRANSFER_TO_ADDRESS_SIGNAL:
|
1749
1832
|
reason = "MissingOutputChange";
|
1750
1833
|
errorMessage = `The transaction reverted because it's missing an "OutputChange".`;
|
1751
1834
|
break;
|
@@ -1806,7 +1889,7 @@ var witnessify = (value) => {
|
|
1806
1889
|
// src/providers/transaction-request/transaction-request.ts
|
1807
1890
|
var BaseTransactionRequest = class {
|
1808
1891
|
/** Gas price for transaction */
|
1809
|
-
|
1892
|
+
tip;
|
1810
1893
|
/** Block until which tx cannot be included */
|
1811
1894
|
maturity;
|
1812
1895
|
/** The maximum fee payable by this transaction using BASE_ASSET. */
|
@@ -1819,38 +1902,34 @@ var BaseTransactionRequest = class {
|
|
1819
1902
|
outputs = [];
|
1820
1903
|
/** List of witnesses */
|
1821
1904
|
witnesses = [];
|
1822
|
-
/** Base asset ID - should be fetched from the chain */
|
1823
|
-
baseAssetId = import_configs6.ZeroBytes32;
|
1824
1905
|
/**
|
1825
1906
|
* Constructor for initializing a base transaction request.
|
1826
1907
|
*
|
1827
1908
|
* @param baseTransactionRequest - Optional object containing properties to initialize the transaction request.
|
1828
1909
|
*/
|
1829
1910
|
constructor({
|
1830
|
-
|
1911
|
+
tip,
|
1831
1912
|
maturity,
|
1832
1913
|
maxFee,
|
1833
1914
|
witnessLimit,
|
1834
1915
|
inputs,
|
1835
1916
|
outputs,
|
1836
|
-
witnesses
|
1837
|
-
baseAssetId
|
1917
|
+
witnesses
|
1838
1918
|
} = {}) {
|
1839
|
-
this.
|
1919
|
+
this.tip = (0, import_math7.bn)(tip);
|
1840
1920
|
this.maturity = maturity ?? 0;
|
1841
1921
|
this.witnessLimit = witnessLimit ? (0, import_math7.bn)(witnessLimit) : void 0;
|
1842
1922
|
this.maxFee = maxFee ? (0, import_math7.bn)(maxFee) : void 0;
|
1843
1923
|
this.inputs = inputs ?? [];
|
1844
1924
|
this.outputs = outputs ?? [];
|
1845
1925
|
this.witnesses = witnesses ?? [];
|
1846
|
-
this.baseAssetId = baseAssetId ?? import_configs6.ZeroBytes32;
|
1847
1926
|
}
|
1848
1927
|
static getPolicyMeta(req) {
|
1849
1928
|
let policyTypes = 0;
|
1850
1929
|
const policies = [];
|
1851
|
-
if (req.
|
1852
|
-
policyTypes += import_transactions6.PolicyType.
|
1853
|
-
policies.push({ data: req.
|
1930
|
+
if (req.tip) {
|
1931
|
+
policyTypes += import_transactions6.PolicyType.Tip;
|
1932
|
+
policies.push({ data: req.tip, type: import_transactions6.PolicyType.Tip });
|
1854
1933
|
}
|
1855
1934
|
if (req.witnessLimit) {
|
1856
1935
|
policyTypes += import_transactions6.PolicyType.WitnessLimit;
|
@@ -1936,7 +2015,7 @@ var BaseTransactionRequest = class {
|
|
1936
2015
|
* @returns The index of the created witness.
|
1937
2016
|
*/
|
1938
2017
|
addEmptyWitness() {
|
1939
|
-
this.addWitness((0, import_utils9.concat)([
|
2018
|
+
this.addWitness((0, import_utils9.concat)([import_configs7.ZeroBytes32, import_configs7.ZeroBytes32]));
|
1940
2019
|
return this.witnesses.length - 1;
|
1941
2020
|
}
|
1942
2021
|
/**
|
@@ -2037,10 +2116,10 @@ var BaseTransactionRequest = class {
|
|
2037
2116
|
* @param predicate - Predicate bytes.
|
2038
2117
|
* @param predicateData - Predicate data bytes.
|
2039
2118
|
*/
|
2040
|
-
addCoinInput(coin
|
2119
|
+
addCoinInput(coin) {
|
2041
2120
|
const { assetId, owner, amount } = coin;
|
2042
2121
|
let witnessIndex;
|
2043
|
-
if (predicate) {
|
2122
|
+
if (coin.predicate) {
|
2044
2123
|
witnessIndex = 0;
|
2045
2124
|
} else {
|
2046
2125
|
witnessIndex = this.getCoinInputWitnessIndexByOwner(owner);
|
@@ -2055,9 +2134,7 @@ var BaseTransactionRequest = class {
|
|
2055
2134
|
amount,
|
2056
2135
|
assetId,
|
2057
2136
|
txPointer: "0x00000000000000000000000000000000",
|
2058
|
-
witnessIndex
|
2059
|
-
predicate: predicate?.bytes,
|
2060
|
-
predicateData: predicate?.predicateDataBytes
|
2137
|
+
witnessIndex
|
2061
2138
|
};
|
2062
2139
|
this.pushInput(input);
|
2063
2140
|
this.addChangeOutput(owner, assetId);
|
@@ -2068,11 +2145,13 @@ var BaseTransactionRequest = class {
|
|
2068
2145
|
*
|
2069
2146
|
* @param message - Message resource.
|
2070
2147
|
* @param predicate - Predicate bytes.
|
2148
|
+
* @param predicateData - Predicate data bytes.
|
2071
2149
|
*/
|
2072
|
-
addMessageInput(message
|
2150
|
+
addMessageInput(message) {
|
2073
2151
|
const { recipient, sender, amount } = message;
|
2152
|
+
const assetId = import_configs7.BaseAssetId;
|
2074
2153
|
let witnessIndex;
|
2075
|
-
if (predicate) {
|
2154
|
+
if (message.predicate) {
|
2076
2155
|
witnessIndex = 0;
|
2077
2156
|
} else {
|
2078
2157
|
witnessIndex = this.getCoinInputWitnessIndexByOwner(recipient);
|
@@ -2086,12 +2165,10 @@ var BaseTransactionRequest = class {
|
|
2086
2165
|
sender: sender.toB256(),
|
2087
2166
|
recipient: recipient.toB256(),
|
2088
2167
|
amount,
|
2089
|
-
witnessIndex
|
2090
|
-
predicate: predicate?.bytes,
|
2091
|
-
predicateData: predicate?.predicateDataBytes
|
2168
|
+
witnessIndex
|
2092
2169
|
};
|
2093
2170
|
this.pushInput(input);
|
2094
|
-
this.addChangeOutput(recipient,
|
2171
|
+
this.addChangeOutput(recipient, assetId);
|
2095
2172
|
}
|
2096
2173
|
/**
|
2097
2174
|
* Adds a single resource to the transaction by adding a coin/message input and a
|
@@ -2119,32 +2196,6 @@ var BaseTransactionRequest = class {
|
|
2119
2196
|
resources.forEach((resource) => this.addResource(resource));
|
2120
2197
|
return this;
|
2121
2198
|
}
|
2122
|
-
/**
|
2123
|
-
* Adds multiple resources to the transaction by adding coin/message inputs and change
|
2124
|
-
* outputs from the related assetIds.
|
2125
|
-
*
|
2126
|
-
* @param resources - The resources to add.
|
2127
|
-
* @returns This transaction.
|
2128
|
-
*/
|
2129
|
-
addPredicateResource(resource, predicate) {
|
2130
|
-
if (isCoin(resource)) {
|
2131
|
-
this.addCoinInput(resource, predicate);
|
2132
|
-
} else {
|
2133
|
-
this.addMessageInput(resource, predicate);
|
2134
|
-
}
|
2135
|
-
return this;
|
2136
|
-
}
|
2137
|
-
/**
|
2138
|
-
* Adds multiple predicate coin/message inputs to the transaction and change outputs
|
2139
|
-
* from the related assetIds.
|
2140
|
-
*
|
2141
|
-
* @param resources - The resources to add.
|
2142
|
-
* @returns This transaction.
|
2143
|
-
*/
|
2144
|
-
addPredicateResources(resources, predicate) {
|
2145
|
-
resources.forEach((resource) => this.addPredicateResource(resource, predicate));
|
2146
|
-
return this;
|
2147
|
-
}
|
2148
2199
|
/**
|
2149
2200
|
* Adds a coin output to the transaction.
|
2150
2201
|
*
|
@@ -2152,12 +2203,12 @@ var BaseTransactionRequest = class {
|
|
2152
2203
|
* @param amount - Amount of coin.
|
2153
2204
|
* @param assetId - Asset ID of coin.
|
2154
2205
|
*/
|
2155
|
-
addCoinOutput(to, amount, assetId) {
|
2206
|
+
addCoinOutput(to, amount, assetId = import_configs7.BaseAssetId) {
|
2156
2207
|
this.pushOutput({
|
2157
2208
|
type: import_transactions6.OutputType.Coin,
|
2158
2209
|
to: (0, import_address.addressify)(to).toB256(),
|
2159
2210
|
amount,
|
2160
|
-
assetId
|
2211
|
+
assetId
|
2161
2212
|
});
|
2162
2213
|
return this;
|
2163
2214
|
}
|
@@ -2184,7 +2235,7 @@ var BaseTransactionRequest = class {
|
|
2184
2235
|
* @param to - Address of the owner.
|
2185
2236
|
* @param assetId - Asset ID of coin.
|
2186
2237
|
*/
|
2187
|
-
addChangeOutput(to, assetId) {
|
2238
|
+
addChangeOutput(to, assetId = import_configs7.BaseAssetId) {
|
2188
2239
|
const changeOutput = this.getChangeOutputs().find(
|
2189
2240
|
(output) => (0, import_utils9.hexlify)(output.assetId) === assetId
|
2190
2241
|
);
|
@@ -2192,7 +2243,7 @@ var BaseTransactionRequest = class {
|
|
2192
2243
|
this.pushOutput({
|
2193
2244
|
type: import_transactions6.OutputType.Change,
|
2194
2245
|
to: (0, import_address.addressify)(to).toB256(),
|
2195
|
-
assetId
|
2246
|
+
assetId
|
2196
2247
|
});
|
2197
2248
|
}
|
2198
2249
|
}
|
@@ -2224,7 +2275,7 @@ var BaseTransactionRequest = class {
|
|
2224
2275
|
}
|
2225
2276
|
calculateMaxGas(chainInfo, minGas) {
|
2226
2277
|
const { consensusParameters } = chainInfo;
|
2227
|
-
const { gasPerByte } = consensusParameters;
|
2278
|
+
const { gasPerByte, maxGasPerTx } = consensusParameters;
|
2228
2279
|
const witnessesLength = this.toTransaction().witnesses.reduce(
|
2229
2280
|
(acc, wit) => acc + wit.dataLength,
|
2230
2281
|
0
|
@@ -2233,7 +2284,8 @@ var BaseTransactionRequest = class {
|
|
2233
2284
|
gasPerByte,
|
2234
2285
|
minGas,
|
2235
2286
|
witnessesLength,
|
2236
|
-
witnessLimit: this.witnessLimit
|
2287
|
+
witnessLimit: this.witnessLimit,
|
2288
|
+
maxGasPerTx
|
2237
2289
|
});
|
2238
2290
|
}
|
2239
2291
|
/**
|
@@ -2243,12 +2295,6 @@ var BaseTransactionRequest = class {
|
|
2243
2295
|
* @param quantities - CoinQuantity Array.
|
2244
2296
|
*/
|
2245
2297
|
fundWithFakeUtxos(quantities, resourcesOwner) {
|
2246
|
-
let idCounter = 0;
|
2247
|
-
const generateId = () => {
|
2248
|
-
const counterString = String(idCounter++);
|
2249
|
-
const id = import_configs6.ZeroBytes32.slice(0, -counterString.length).concat(counterString);
|
2250
|
-
return id;
|
2251
|
-
};
|
2252
2298
|
const findAssetInput = (assetId) => this.inputs.find((input) => {
|
2253
2299
|
if ("assetId" in input) {
|
2254
2300
|
return input.assetId === assetId;
|
@@ -2257,24 +2303,27 @@ var BaseTransactionRequest = class {
|
|
2257
2303
|
});
|
2258
2304
|
const updateAssetInput = (assetId, quantity) => {
|
2259
2305
|
const assetInput = findAssetInput(assetId);
|
2306
|
+
let usedQuantity = quantity;
|
2307
|
+
if (assetId === import_configs7.BaseAssetId) {
|
2308
|
+
usedQuantity = (0, import_math7.bn)("1000000000000000000");
|
2309
|
+
}
|
2260
2310
|
if (assetInput && "assetId" in assetInput) {
|
2261
|
-
assetInput.id =
|
2262
|
-
assetInput.amount =
|
2311
|
+
assetInput.id = (0, import_utils9.hexlify)((0, import_ethers.randomBytes)(34));
|
2312
|
+
assetInput.amount = usedQuantity;
|
2263
2313
|
} else {
|
2264
2314
|
this.addResources([
|
2265
2315
|
{
|
2266
|
-
id:
|
2267
|
-
amount:
|
2316
|
+
id: (0, import_utils9.hexlify)((0, import_ethers.randomBytes)(34)),
|
2317
|
+
amount: usedQuantity,
|
2268
2318
|
assetId,
|
2269
2319
|
owner: resourcesOwner || import_address.Address.fromRandom(),
|
2270
|
-
maturity: 0,
|
2271
2320
|
blockCreated: (0, import_math7.bn)(1),
|
2272
2321
|
txCreatedIdx: (0, import_math7.bn)(1)
|
2273
2322
|
}
|
2274
2323
|
]);
|
2275
2324
|
}
|
2276
2325
|
};
|
2277
|
-
updateAssetInput(
|
2326
|
+
updateAssetInput(import_configs7.BaseAssetId, (0, import_math7.bn)(1e11));
|
2278
2327
|
quantities.forEach((q) => updateAssetInput(q.assetId, q.amount));
|
2279
2328
|
}
|
2280
2329
|
/**
|
@@ -2299,7 +2348,7 @@ var BaseTransactionRequest = class {
|
|
2299
2348
|
toJSON() {
|
2300
2349
|
return normalizeJSON(this);
|
2301
2350
|
}
|
2302
|
-
|
2351
|
+
updatePredicateGasUsed(inputs) {
|
2303
2352
|
this.inputs.forEach((i) => {
|
2304
2353
|
let correspondingInput;
|
2305
2354
|
switch (i.type) {
|
@@ -2321,16 +2370,25 @@ var BaseTransactionRequest = class {
|
|
2321
2370
|
}
|
2322
2371
|
});
|
2323
2372
|
}
|
2373
|
+
shiftPredicateData() {
|
2374
|
+
this.inputs.forEach((input) => {
|
2375
|
+
if ("predicateData" in input && "paddPredicateData" in input && typeof input.paddPredicateData === "function") {
|
2376
|
+
input.predicateData = input.paddPredicateData(
|
2377
|
+
BaseTransactionRequest.getPolicyMeta(this).policies.length
|
2378
|
+
);
|
2379
|
+
}
|
2380
|
+
});
|
2381
|
+
}
|
2324
2382
|
};
|
2325
2383
|
|
2326
2384
|
// src/providers/transaction-request/create-transaction-request.ts
|
2327
|
-
var
|
2385
|
+
var import_configs9 = require("@fuel-ts/address/configs");
|
2328
2386
|
var import_math9 = require("@fuel-ts/math");
|
2329
2387
|
var import_transactions8 = require("@fuel-ts/transactions");
|
2330
2388
|
var import_utils13 = require("@fuel-ts/utils");
|
2331
2389
|
|
2332
2390
|
// src/providers/transaction-request/hash-transaction.ts
|
2333
|
-
var
|
2391
|
+
var import_configs8 = require("@fuel-ts/address/configs");
|
2334
2392
|
var import_hasher = require("@fuel-ts/hasher");
|
2335
2393
|
var import_math8 = require("@fuel-ts/math");
|
2336
2394
|
var import_transactions7 = require("@fuel-ts/transactions");
|
@@ -2339,7 +2397,7 @@ var import_ramda2 = require("ramda");
|
|
2339
2397
|
function hashTransaction(transactionRequest, chainId) {
|
2340
2398
|
const transaction = transactionRequest.toTransaction();
|
2341
2399
|
if (transaction.type === import_transactions7.TransactionType.Script) {
|
2342
|
-
transaction.receiptsRoot =
|
2400
|
+
transaction.receiptsRoot = import_configs8.ZeroBytes32;
|
2343
2401
|
}
|
2344
2402
|
transaction.inputs = transaction.inputs.map((input) => {
|
2345
2403
|
const inputClone = (0, import_ramda2.clone)(input);
|
@@ -2361,10 +2419,10 @@ function hashTransaction(transactionRequest, chainId) {
|
|
2361
2419
|
blockHeight: 0,
|
2362
2420
|
txIndex: 0
|
2363
2421
|
};
|
2364
|
-
inputClone.txID =
|
2422
|
+
inputClone.txID = import_configs8.ZeroBytes32;
|
2365
2423
|
inputClone.outputIndex = 0;
|
2366
|
-
inputClone.balanceRoot =
|
2367
|
-
inputClone.stateRoot =
|
2424
|
+
inputClone.balanceRoot = import_configs8.ZeroBytes32;
|
2425
|
+
inputClone.stateRoot = import_configs8.ZeroBytes32;
|
2368
2426
|
return inputClone;
|
2369
2427
|
}
|
2370
2428
|
default:
|
@@ -2375,8 +2433,8 @@ function hashTransaction(transactionRequest, chainId) {
|
|
2375
2433
|
const outputClone = (0, import_ramda2.clone)(output);
|
2376
2434
|
switch (outputClone.type) {
|
2377
2435
|
case import_transactions7.OutputType.Contract: {
|
2378
|
-
outputClone.balanceRoot =
|
2379
|
-
outputClone.stateRoot =
|
2436
|
+
outputClone.balanceRoot = import_configs8.ZeroBytes32;
|
2437
|
+
outputClone.stateRoot = import_configs8.ZeroBytes32;
|
2380
2438
|
return outputClone;
|
2381
2439
|
}
|
2382
2440
|
case import_transactions7.OutputType.Change: {
|
@@ -2384,9 +2442,9 @@ function hashTransaction(transactionRequest, chainId) {
|
|
2384
2442
|
return outputClone;
|
2385
2443
|
}
|
2386
2444
|
case import_transactions7.OutputType.Variable: {
|
2387
|
-
outputClone.to =
|
2445
|
+
outputClone.to = import_configs8.ZeroBytes32;
|
2388
2446
|
outputClone.amount = (0, import_math8.bn)(0);
|
2389
|
-
outputClone.assetId =
|
2447
|
+
outputClone.assetId = import_configs8.ZeroBytes32;
|
2390
2448
|
return outputClone;
|
2391
2449
|
}
|
2392
2450
|
default:
|
@@ -2452,7 +2510,7 @@ var CreateTransactionRequest = class extends BaseTransactionRequest {
|
|
2452
2510
|
} = {}) {
|
2453
2511
|
super(rest);
|
2454
2512
|
this.bytecodeWitnessIndex = bytecodeWitnessIndex ?? 0;
|
2455
|
-
this.salt = (0, import_utils13.hexlify)(salt ??
|
2513
|
+
this.salt = (0, import_utils13.hexlify)(salt ?? import_configs9.ZeroBytes32);
|
2456
2514
|
this.storageSlots = [...storageSlots ?? []];
|
2457
2515
|
}
|
2458
2516
|
/**
|
@@ -2467,10 +2525,9 @@ var CreateTransactionRequest = class extends BaseTransactionRequest {
|
|
2467
2525
|
return {
|
2468
2526
|
type: import_transactions8.TransactionType.Create,
|
2469
2527
|
...baseTransaction,
|
2470
|
-
bytecodeLength: baseTransaction.witnesses[bytecodeWitnessIndex].dataLength / 4,
|
2471
2528
|
bytecodeWitnessIndex,
|
2472
|
-
storageSlotsCount: storageSlots.length,
|
2473
|
-
salt: this.salt ? (0, import_utils13.hexlify)(this.salt) :
|
2529
|
+
storageSlotsCount: (0, import_math9.bn)(storageSlots.length),
|
2530
|
+
salt: this.salt ? (0, import_utils13.hexlify)(this.salt) : import_configs9.ZeroBytes32,
|
2474
2531
|
storageSlots
|
2475
2532
|
};
|
2476
2533
|
}
|
@@ -2520,7 +2577,7 @@ var CreateTransactionRequest = class extends BaseTransactionRequest {
|
|
2520
2577
|
// src/providers/transaction-request/script-transaction-request.ts
|
2521
2578
|
var import_abi_coder = require("@fuel-ts/abi-coder");
|
2522
2579
|
var import_address2 = require("@fuel-ts/address");
|
2523
|
-
var
|
2580
|
+
var import_configs10 = require("@fuel-ts/address/configs");
|
2524
2581
|
var import_math10 = require("@fuel-ts/math");
|
2525
2582
|
var import_transactions9 = require("@fuel-ts/transactions");
|
2526
2583
|
var import_utils15 = require("@fuel-ts/utils");
|
@@ -2592,9 +2649,9 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
|
|
2592
2649
|
type: import_transactions9.TransactionType.Script,
|
2593
2650
|
scriptGasLimit: this.gasLimit,
|
2594
2651
|
...super.getBaseTransaction(),
|
2595
|
-
scriptLength: script.length,
|
2596
|
-
scriptDataLength: scriptData.length,
|
2597
|
-
receiptsRoot:
|
2652
|
+
scriptLength: (0, import_math10.bn)(script.length),
|
2653
|
+
scriptDataLength: (0, import_math10.bn)(scriptData.length),
|
2654
|
+
receiptsRoot: import_configs10.ZeroBytes32,
|
2598
2655
|
script: (0, import_utils15.hexlify)(script),
|
2599
2656
|
scriptData: (0, import_utils15.hexlify)(scriptData)
|
2600
2657
|
};
|
@@ -2657,7 +2714,7 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
|
|
2657
2714
|
}
|
2658
2715
|
calculateMaxGas(chainInfo, minGas) {
|
2659
2716
|
const { consensusParameters } = chainInfo;
|
2660
|
-
const { gasPerByte } = consensusParameters;
|
2717
|
+
const { gasPerByte, maxGasPerTx } = consensusParameters;
|
2661
2718
|
const witnessesLength = this.toTransaction().witnesses.reduce(
|
2662
2719
|
(acc, wit) => acc + wit.dataLength,
|
2663
2720
|
0
|
@@ -2667,7 +2724,8 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
|
|
2667
2724
|
minGas,
|
2668
2725
|
witnessesLength,
|
2669
2726
|
witnessLimit: this.witnessLimit,
|
2670
|
-
gasLimit: this.gasLimit
|
2727
|
+
gasLimit: this.gasLimit,
|
2728
|
+
maxGasPerTx
|
2671
2729
|
});
|
2672
2730
|
}
|
2673
2731
|
/**
|
@@ -2742,15 +2800,32 @@ var transactionRequestify = (obj) => {
|
|
2742
2800
|
}
|
2743
2801
|
}
|
2744
2802
|
};
|
2803
|
+
var cacheTxInputsFromOwner = (inputs, owner) => inputs.reduce(
|
2804
|
+
(acc, input) => {
|
2805
|
+
if (input.type === import_transactions10.InputType.Coin && input.owner === owner) {
|
2806
|
+
acc.utxos.push(input.id);
|
2807
|
+
}
|
2808
|
+
if (input.type === import_transactions10.InputType.Message && input.recipient === owner) {
|
2809
|
+
acc.messages.push(input.nonce);
|
2810
|
+
}
|
2811
|
+
return acc;
|
2812
|
+
},
|
2813
|
+
{
|
2814
|
+
utxos: [],
|
2815
|
+
messages: []
|
2816
|
+
}
|
2817
|
+
);
|
2745
2818
|
|
2746
2819
|
// src/providers/transaction-response/transaction-response.ts
|
2747
2820
|
var import_errors13 = require("@fuel-ts/errors");
|
2748
|
-
var
|
2749
|
-
var
|
2750
|
-
var
|
2821
|
+
var import_math15 = require("@fuel-ts/math");
|
2822
|
+
var import_transactions18 = require("@fuel-ts/transactions");
|
2823
|
+
var import_utils20 = require("@fuel-ts/utils");
|
2751
2824
|
|
2752
2825
|
// src/providers/transaction-summary/assemble-transaction-summary.ts
|
2753
|
-
var
|
2826
|
+
var import_math14 = require("@fuel-ts/math");
|
2827
|
+
var import_transactions16 = require("@fuel-ts/transactions");
|
2828
|
+
var import_utils18 = require("@fuel-ts/utils");
|
2754
2829
|
|
2755
2830
|
// src/providers/transaction-summary/calculate-transaction-fee.ts
|
2756
2831
|
var import_math11 = require("@fuel-ts/math");
|
@@ -2758,9 +2833,10 @@ var import_transactions11 = require("@fuel-ts/transactions");
|
|
2758
2833
|
var import_utils16 = require("@fuel-ts/utils");
|
2759
2834
|
var calculateTransactionFee = (params) => {
|
2760
2835
|
const {
|
2761
|
-
|
2836
|
+
gasPrice,
|
2762
2837
|
rawPayload,
|
2763
|
-
|
2838
|
+
tip,
|
2839
|
+
consensusParameters: { gasCosts, feeParams, maxGasPerTx }
|
2764
2840
|
} = params;
|
2765
2841
|
const gasPerByte = (0, import_math11.bn)(feeParams.gasPerByte);
|
2766
2842
|
const gasPriceFactor = (0, import_math11.bn)(feeParams.gasPriceFactor);
|
@@ -2770,8 +2846,7 @@ var calculateTransactionFee = (params) => {
|
|
2770
2846
|
return {
|
2771
2847
|
fee: (0, import_math11.bn)(0),
|
2772
2848
|
minFee: (0, import_math11.bn)(0),
|
2773
|
-
maxFee: (0, import_math11.bn)(0)
|
2774
|
-
feeFromGasUsed: (0, import_math11.bn)(0)
|
2849
|
+
maxFee: (0, import_math11.bn)(0)
|
2775
2850
|
};
|
2776
2851
|
}
|
2777
2852
|
const { type, witnesses, inputs, policies } = transaction;
|
@@ -2803,7 +2878,6 @@ var calculateTransactionFee = (params) => {
|
|
2803
2878
|
metadataGas,
|
2804
2879
|
txBytesSize: transactionBytes.length
|
2805
2880
|
});
|
2806
|
-
const gasPrice = (0, import_math11.bn)(policies.find((policy) => policy.type === import_transactions11.PolicyType.GasPrice)?.data);
|
2807
2881
|
const witnessLimit = policies.find((policy) => policy.type === import_transactions11.PolicyType.WitnessLimit)?.data;
|
2808
2882
|
const witnessesLength = witnesses.reduce((acc, wit) => acc + wit.dataLength, 0);
|
2809
2883
|
const maxGas = getMaxGas({
|
@@ -2811,22 +2885,30 @@ var calculateTransactionFee = (params) => {
|
|
2811
2885
|
minGas,
|
2812
2886
|
witnessesLength,
|
2813
2887
|
gasLimit,
|
2814
|
-
witnessLimit
|
2888
|
+
witnessLimit,
|
2889
|
+
maxGasPerTx
|
2890
|
+
});
|
2891
|
+
const minFee = calculateGasFee({
|
2892
|
+
gasPrice,
|
2893
|
+
gas: minGas,
|
2894
|
+
priceFactor: gasPriceFactor,
|
2895
|
+
tip
|
2896
|
+
});
|
2897
|
+
const maxFee = calculateGasFee({
|
2898
|
+
gasPrice,
|
2899
|
+
gas: maxGas,
|
2900
|
+
priceFactor: gasPriceFactor,
|
2901
|
+
tip
|
2815
2902
|
});
|
2816
|
-
const feeFromGasUsed = calculatePriceWithFactor(gasUsed, gasPrice, gasPriceFactor);
|
2817
|
-
const minFee = calculatePriceWithFactor(minGas, gasPrice, gasPriceFactor);
|
2818
|
-
const maxFee = calculatePriceWithFactor(maxGas, gasPrice, gasPriceFactor);
|
2819
|
-
const fee = minFee.add(feeFromGasUsed);
|
2820
2903
|
return {
|
2821
|
-
fee,
|
2822
2904
|
minFee,
|
2823
2905
|
maxFee,
|
2824
|
-
|
2906
|
+
fee: maxFee
|
2825
2907
|
};
|
2826
2908
|
};
|
2827
2909
|
|
2828
2910
|
// src/providers/transaction-summary/operations.ts
|
2829
|
-
var
|
2911
|
+
var import_configs11 = require("@fuel-ts/address/configs");
|
2830
2912
|
var import_errors11 = require("@fuel-ts/errors");
|
2831
2913
|
var import_math13 = require("@fuel-ts/math");
|
2832
2914
|
var import_transactions14 = require("@fuel-ts/transactions");
|
@@ -3171,7 +3253,7 @@ function extractTransferOperationFromReceipt(receipt, contractInputs, changeOutp
|
|
3171
3253
|
const { to: toAddress, assetId, amount } = receipt;
|
3172
3254
|
let { from: fromAddress } = receipt;
|
3173
3255
|
const toType = contractInputs.some((input) => input.contractID === toAddress) ? 0 /* contract */ : 1 /* account */;
|
3174
|
-
if (
|
3256
|
+
if (import_configs11.ZeroBytes32 === fromAddress) {
|
3175
3257
|
const change = changeOutputs.find((output) => output.assetId === assetId);
|
3176
3258
|
fromAddress = change?.to || fromAddress;
|
3177
3259
|
}
|
@@ -3435,10 +3517,12 @@ function assembleTransactionSummary(params) {
|
|
3435
3517
|
gqlTransactionStatus,
|
3436
3518
|
abiMap = {},
|
3437
3519
|
maxInputs,
|
3438
|
-
gasCosts
|
3520
|
+
gasCosts,
|
3521
|
+
maxGasPerTx,
|
3522
|
+
gasPrice
|
3439
3523
|
} = params;
|
3440
3524
|
const gasUsed = getGasUsedFromReceipts(receipts);
|
3441
|
-
const rawPayload = (0,
|
3525
|
+
const rawPayload = (0, import_utils18.hexlify)(transactionBytes);
|
3442
3526
|
const operations = getOperations({
|
3443
3527
|
transactionType: transaction.type,
|
3444
3528
|
inputs: transaction.inputs || [],
|
@@ -3449,11 +3533,14 @@ function assembleTransactionSummary(params) {
|
|
3449
3533
|
maxInputs
|
3450
3534
|
});
|
3451
3535
|
const typeName = getTransactionTypeName(transaction.type);
|
3536
|
+
const tip = (0, import_math14.bn)(transaction.policies?.find((policy) => policy.type === import_transactions16.PolicyType.Tip)?.data);
|
3452
3537
|
const { fee } = calculateTransactionFee({
|
3453
|
-
|
3538
|
+
gasPrice,
|
3454
3539
|
rawPayload,
|
3540
|
+
tip,
|
3455
3541
|
consensusParameters: {
|
3456
3542
|
gasCosts,
|
3543
|
+
maxGasPerTx,
|
3457
3544
|
feeParams: {
|
3458
3545
|
gasPerByte,
|
3459
3546
|
gasPriceFactor
|
@@ -3465,7 +3552,7 @@ function assembleTransactionSummary(params) {
|
|
3465
3552
|
const burnedAssets = extractBurnedAssetsFromReceipts(receipts);
|
3466
3553
|
let date;
|
3467
3554
|
if (time) {
|
3468
|
-
date =
|
3555
|
+
date = import_utils18.DateTime.fromTai64(time);
|
3469
3556
|
}
|
3470
3557
|
const transactionSummary = {
|
3471
3558
|
id,
|
@@ -3493,12 +3580,12 @@ function assembleTransactionSummary(params) {
|
|
3493
3580
|
|
3494
3581
|
// src/providers/transaction-response/getDecodedLogs.ts
|
3495
3582
|
var import_abi_coder3 = require("@fuel-ts/abi-coder");
|
3496
|
-
var
|
3583
|
+
var import_transactions17 = require("@fuel-ts/transactions");
|
3497
3584
|
function getDecodedLogs(receipts, mainAbi, externalAbis = {}) {
|
3498
3585
|
return receipts.reduce((logs, receipt) => {
|
3499
|
-
if (receipt.type ===
|
3586
|
+
if (receipt.type === import_transactions17.ReceiptType.LogData || receipt.type === import_transactions17.ReceiptType.Log) {
|
3500
3587
|
const interfaceToUse = new import_abi_coder3.Interface(externalAbis[receipt.id] || mainAbi);
|
3501
|
-
const data = receipt.type ===
|
3588
|
+
const data = receipt.type === import_transactions17.ReceiptType.Log ? new import_abi_coder3.BigNumberCoder("u64").encode(receipt.val0) : receipt.data;
|
3502
3589
|
const [decodedLog] = interfaceToUse.decodeLog(data, receipt.val1.toNumber());
|
3503
3590
|
logs.push(decodedLog);
|
3504
3591
|
}
|
@@ -3513,7 +3600,7 @@ var TransactionResponse = class {
|
|
3513
3600
|
/** Current provider */
|
3514
3601
|
provider;
|
3515
3602
|
/** Gas used on the transaction */
|
3516
|
-
gasUsed = (0,
|
3603
|
+
gasUsed = (0, import_math15.bn)(0);
|
3517
3604
|
/** The graphql Transaction with receipts object. */
|
3518
3605
|
gqlTransaction;
|
3519
3606
|
abis;
|
@@ -3571,8 +3658,8 @@ var TransactionResponse = class {
|
|
3571
3658
|
* @returns The decoded transaction.
|
3572
3659
|
*/
|
3573
3660
|
decodeTransaction(transactionWithReceipts) {
|
3574
|
-
return new
|
3575
|
-
(0,
|
3661
|
+
return new import_transactions18.TransactionCoder().decode(
|
3662
|
+
(0, import_utils20.arrayify)(transactionWithReceipts.rawPayload),
|
3576
3663
|
0
|
3577
3664
|
)?.[0];
|
3578
3665
|
}
|
@@ -3591,20 +3678,27 @@ var TransactionResponse = class {
|
|
3591
3678
|
const decodedTransaction = this.decodeTransaction(
|
3592
3679
|
transaction
|
3593
3680
|
);
|
3594
|
-
|
3595
|
-
|
3681
|
+
let txReceipts = [];
|
3682
|
+
if (transaction?.status && "receipts" in transaction.status) {
|
3683
|
+
txReceipts = transaction.status.receipts;
|
3684
|
+
}
|
3685
|
+
const receipts = txReceipts.map(processGqlReceipt) || [];
|
3686
|
+
const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = this.provider.getGasConfig();
|
3687
|
+
const gasPrice = await this.provider.getLatestGasPrice();
|
3596
3688
|
const maxInputs = this.provider.getChain().consensusParameters.maxInputs;
|
3597
3689
|
const transactionSummary = assembleTransactionSummary({
|
3598
3690
|
id: this.id,
|
3599
3691
|
receipts,
|
3600
3692
|
transaction: decodedTransaction,
|
3601
|
-
transactionBytes: (0,
|
3693
|
+
transactionBytes: (0, import_utils20.arrayify)(transaction.rawPayload),
|
3602
3694
|
gqlTransactionStatus: transaction.status,
|
3603
3695
|
gasPerByte,
|
3604
3696
|
gasPriceFactor,
|
3605
3697
|
abiMap: contractsAbiMap,
|
3606
3698
|
maxInputs,
|
3607
|
-
gasCosts
|
3699
|
+
gasCosts,
|
3700
|
+
maxGasPerTx,
|
3701
|
+
gasPrice
|
3608
3702
|
});
|
3609
3703
|
return transactionSummary;
|
3610
3704
|
}
|
@@ -3731,30 +3825,29 @@ var processGqlChain = (chain) => {
|
|
3731
3825
|
const { contractParams, feeParams, predicateParams, scriptParams, txParams, gasCosts } = consensusParameters;
|
3732
3826
|
return {
|
3733
3827
|
name,
|
3734
|
-
baseChainHeight: (0,
|
3828
|
+
baseChainHeight: (0, import_math16.bn)(daHeight),
|
3735
3829
|
consensusParameters: {
|
3736
|
-
contractMaxSize: (0,
|
3737
|
-
maxInputs: (0,
|
3738
|
-
maxOutputs: (0,
|
3739
|
-
maxWitnesses: (0,
|
3740
|
-
maxGasPerTx: (0,
|
3741
|
-
maxScriptLength: (0,
|
3742
|
-
maxScriptDataLength: (0,
|
3743
|
-
maxStorageSlots: (0,
|
3744
|
-
maxPredicateLength: (0,
|
3745
|
-
maxPredicateDataLength: (0,
|
3746
|
-
maxGasPerPredicate: (0,
|
3747
|
-
gasPriceFactor: (0,
|
3748
|
-
gasPerByte: (0,
|
3749
|
-
maxMessageDataLength: (0,
|
3750
|
-
chainId: (0,
|
3751
|
-
baseAssetId: consensusParameters.baseAssetId,
|
3830
|
+
contractMaxSize: (0, import_math16.bn)(contractParams.contractMaxSize),
|
3831
|
+
maxInputs: (0, import_math16.bn)(txParams.maxInputs),
|
3832
|
+
maxOutputs: (0, import_math16.bn)(txParams.maxOutputs),
|
3833
|
+
maxWitnesses: (0, import_math16.bn)(txParams.maxWitnesses),
|
3834
|
+
maxGasPerTx: (0, import_math16.bn)(txParams.maxGasPerTx),
|
3835
|
+
maxScriptLength: (0, import_math16.bn)(scriptParams.maxScriptLength),
|
3836
|
+
maxScriptDataLength: (0, import_math16.bn)(scriptParams.maxScriptDataLength),
|
3837
|
+
maxStorageSlots: (0, import_math16.bn)(contractParams.maxStorageSlots),
|
3838
|
+
maxPredicateLength: (0, import_math16.bn)(predicateParams.maxPredicateLength),
|
3839
|
+
maxPredicateDataLength: (0, import_math16.bn)(predicateParams.maxPredicateDataLength),
|
3840
|
+
maxGasPerPredicate: (0, import_math16.bn)(predicateParams.maxGasPerPredicate),
|
3841
|
+
gasPriceFactor: (0, import_math16.bn)(feeParams.gasPriceFactor),
|
3842
|
+
gasPerByte: (0, import_math16.bn)(feeParams.gasPerByte),
|
3843
|
+
maxMessageDataLength: (0, import_math16.bn)(predicateParams.maxMessageDataLength),
|
3844
|
+
chainId: (0, import_math16.bn)(consensusParameters.chainId),
|
3752
3845
|
gasCosts
|
3753
3846
|
},
|
3754
3847
|
gasCosts,
|
3755
3848
|
latestBlock: {
|
3756
3849
|
id: latestBlock.id,
|
3757
|
-
height: (0,
|
3850
|
+
height: (0, import_math16.bn)(latestBlock.height),
|
3758
3851
|
time: latestBlock.header.time,
|
3759
3852
|
transactions: latestBlock.transactions.map((i) => ({
|
3760
3853
|
id: i.id
|
@@ -3848,10 +3941,8 @@ var _Provider = class {
|
|
3848
3941
|
* Returns some helpful parameters related to gas fees.
|
3849
3942
|
*/
|
3850
3943
|
getGasConfig() {
|
3851
|
-
const { minGasPrice } = this.getNode();
|
3852
3944
|
const { maxGasPerTx, maxGasPerPredicate, gasPriceFactor, gasPerByte, gasCosts } = this.getChain().consensusParameters;
|
3853
3945
|
return {
|
3854
|
-
minGasPrice,
|
3855
3946
|
maxGasPerTx,
|
3856
3947
|
maxGasPerPredicate,
|
3857
3948
|
gasPriceFactor,
|
@@ -3939,7 +4030,7 @@ var _Provider = class {
|
|
3939
4030
|
name,
|
3940
4031
|
consensusParameters: { chainId }
|
3941
4032
|
} = await this.getChain();
|
3942
|
-
const network = new
|
4033
|
+
const network = new import_ethers2.Network(name, chainId.toNumber());
|
3943
4034
|
return Promise.resolve(network);
|
3944
4035
|
}
|
3945
4036
|
/**
|
@@ -3949,7 +4040,7 @@ var _Provider = class {
|
|
3949
4040
|
*/
|
3950
4041
|
async getBlockNumber() {
|
3951
4042
|
const { chain } = await this.operations.getChain();
|
3952
|
-
return (0,
|
4043
|
+
return (0, import_math16.bn)(chain.latestBlock.height, 10);
|
3953
4044
|
}
|
3954
4045
|
/**
|
3955
4046
|
* Returns the chain information.
|
@@ -3959,13 +4050,11 @@ var _Provider = class {
|
|
3959
4050
|
async fetchNode() {
|
3960
4051
|
const { nodeInfo } = await this.operations.getNodeInfo();
|
3961
4052
|
const processedNodeInfo = {
|
3962
|
-
maxDepth: (0,
|
3963
|
-
maxTx: (0,
|
3964
|
-
minGasPrice: (0, import_math15.bn)(nodeInfo.minGasPrice),
|
4053
|
+
maxDepth: (0, import_math16.bn)(nodeInfo.maxDepth),
|
4054
|
+
maxTx: (0, import_math16.bn)(nodeInfo.maxTx),
|
3965
4055
|
nodeVersion: nodeInfo.nodeVersion,
|
3966
4056
|
utxoValidation: nodeInfo.utxoValidation,
|
3967
|
-
vmBacktrace: nodeInfo.vmBacktrace
|
3968
|
-
peers: nodeInfo.peers
|
4057
|
+
vmBacktrace: nodeInfo.vmBacktrace
|
3969
4058
|
};
|
3970
4059
|
_Provider.nodeInfoCache[this.url] = processedNodeInfo;
|
3971
4060
|
return processedNodeInfo;
|
@@ -3991,17 +4080,6 @@ var _Provider = class {
|
|
3991
4080
|
} = this.getChain();
|
3992
4081
|
return chainId.toNumber();
|
3993
4082
|
}
|
3994
|
-
/**
|
3995
|
-
* Returns the base asset ID
|
3996
|
-
*
|
3997
|
-
* @returns A promise that resolves to the base asset ID
|
3998
|
-
*/
|
3999
|
-
getBaseAssetId() {
|
4000
|
-
const {
|
4001
|
-
consensusParameters: { baseAssetId }
|
4002
|
-
} = this.getChain();
|
4003
|
-
return baseAssetId;
|
4004
|
-
}
|
4005
4083
|
/**
|
4006
4084
|
* Submits a transaction to the chain to be executed.
|
4007
4085
|
*
|
@@ -4018,9 +4096,9 @@ var _Provider = class {
|
|
4018
4096
|
if (estimateTxDependencies) {
|
4019
4097
|
await this.estimateTxDependencies(transactionRequest);
|
4020
4098
|
}
|
4021
|
-
const encodedTransaction = (0,
|
4099
|
+
const encodedTransaction = (0, import_utils22.hexlify)(transactionRequest.toTransactionBytes());
|
4022
4100
|
let abis;
|
4023
|
-
if (transactionRequest.type ===
|
4101
|
+
if (transactionRequest.type === import_transactions19.TransactionType.Script) {
|
4024
4102
|
abis = transactionRequest.abis;
|
4025
4103
|
}
|
4026
4104
|
if (awaitExecution) {
|
@@ -4061,15 +4139,14 @@ var _Provider = class {
|
|
4061
4139
|
if (estimateTxDependencies) {
|
4062
4140
|
return this.estimateTxDependencies(transactionRequest);
|
4063
4141
|
}
|
4064
|
-
const encodedTransaction = (0,
|
4065
|
-
const { dryRun:
|
4066
|
-
encodedTransaction,
|
4142
|
+
const encodedTransaction = (0, import_utils22.hexlify)(transactionRequest.toTransactionBytes());
|
4143
|
+
const { dryRun: dryRunStatuses } = await this.operations.dryRun({
|
4144
|
+
encodedTransactions: encodedTransaction,
|
4067
4145
|
utxoValidation: utxoValidation || false
|
4068
4146
|
});
|
4069
|
-
const receipts =
|
4070
|
-
|
4071
|
-
|
4072
|
-
};
|
4147
|
+
const [{ receipts: rawReceipts, status }] = dryRunStatuses;
|
4148
|
+
const receipts = rawReceipts.map(processGqlReceipt);
|
4149
|
+
return { receipts, dryrunStatus: status };
|
4073
4150
|
}
|
4074
4151
|
/**
|
4075
4152
|
* Verifies whether enough gas is available to complete transaction.
|
@@ -4080,13 +4157,13 @@ var _Provider = class {
|
|
4080
4157
|
async estimatePredicates(transactionRequest) {
|
4081
4158
|
const shouldEstimatePredicates = Boolean(
|
4082
4159
|
transactionRequest.inputs.find(
|
4083
|
-
(input) => "predicate" in input && input.predicate && !(0,
|
4160
|
+
(input) => "predicate" in input && input.predicate && !(0, import_utils23.equalBytes)((0, import_utils22.arrayify)(input.predicate), (0, import_utils22.arrayify)("0x")) && new import_math16.BN(input.predicateGasUsed).isZero()
|
4084
4161
|
)
|
4085
4162
|
);
|
4086
4163
|
if (!shouldEstimatePredicates) {
|
4087
4164
|
return transactionRequest;
|
4088
4165
|
}
|
4089
|
-
const encodedTransaction = (0,
|
4166
|
+
const encodedTransaction = (0, import_utils22.hexlify)(transactionRequest.toTransactionBytes());
|
4090
4167
|
const response = await this.operations.estimatePredicates({
|
4091
4168
|
encodedTransaction
|
4092
4169
|
});
|
@@ -4095,7 +4172,7 @@ var _Provider = class {
|
|
4095
4172
|
} = response;
|
4096
4173
|
if (inputs) {
|
4097
4174
|
inputs.forEach((input, index) => {
|
4098
|
-
if ("predicateGasUsed" in input && (0,
|
4175
|
+
if ("predicateGasUsed" in input && (0, import_math16.bn)(input.predicateGasUsed).gt(0)) {
|
4099
4176
|
transactionRequest.inputs[index].predicateGasUsed = input.predicateGasUsed;
|
4100
4177
|
}
|
4101
4178
|
});
|
@@ -4108,31 +4185,31 @@ var _Provider = class {
|
|
4108
4185
|
* If there are missing variable outputs,
|
4109
4186
|
* `addVariableOutputs` is called on the transaction.
|
4110
4187
|
*
|
4111
|
-
* @privateRemarks
|
4112
|
-
* TODO: Investigate support for missing contract IDs
|
4113
|
-
* TODO: Add support for missing output messages
|
4114
4188
|
*
|
4115
4189
|
* @param transactionRequest - The transaction request object.
|
4116
4190
|
* @returns A promise.
|
4117
4191
|
*/
|
4118
4192
|
async estimateTxDependencies(transactionRequest) {
|
4119
|
-
if (transactionRequest.type ===
|
4193
|
+
if (transactionRequest.type === import_transactions19.TransactionType.Create) {
|
4120
4194
|
return {
|
4121
4195
|
receipts: [],
|
4122
4196
|
outputVariables: 0,
|
4123
4197
|
missingContractIds: []
|
4124
4198
|
};
|
4125
4199
|
}
|
4126
|
-
await this.estimatePredicates(transactionRequest);
|
4127
4200
|
let receipts = [];
|
4128
4201
|
const missingContractIds = [];
|
4129
4202
|
let outputVariables = 0;
|
4203
|
+
let dryrunStatus;
|
4130
4204
|
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
4131
|
-
const {
|
4132
|
-
|
4205
|
+
const {
|
4206
|
+
dryRun: [{ receipts: rawReceipts, status }]
|
4207
|
+
} = await this.operations.dryRun({
|
4208
|
+
encodedTransactions: [(0, import_utils22.hexlify)(transactionRequest.toTransactionBytes())],
|
4133
4209
|
utxoValidation: false
|
4134
4210
|
});
|
4135
|
-
receipts =
|
4211
|
+
receipts = rawReceipts.map(processGqlReceipt);
|
4212
|
+
dryrunStatus = status;
|
4136
4213
|
const { missingOutputVariables, missingOutputContractIds } = getReceiptsWithMissingData(receipts);
|
4137
4214
|
const hasMissingOutputs = missingOutputVariables.length !== 0 || missingOutputContractIds.length !== 0;
|
4138
4215
|
if (hasMissingOutputs) {
|
@@ -4142,6 +4219,11 @@ var _Provider = class {
|
|
4142
4219
|
transactionRequest.addContractInputAndOutput(import_address3.Address.fromString(contractId));
|
4143
4220
|
missingContractIds.push(contractId);
|
4144
4221
|
});
|
4222
|
+
const { maxFee } = await this.estimateTxGasAndFee({
|
4223
|
+
transactionRequest,
|
4224
|
+
optimizeGas: false
|
4225
|
+
});
|
4226
|
+
transactionRequest.maxFee = maxFee;
|
4145
4227
|
} else {
|
4146
4228
|
break;
|
4147
4229
|
}
|
@@ -4149,7 +4231,133 @@ var _Provider = class {
|
|
4149
4231
|
return {
|
4150
4232
|
receipts,
|
4151
4233
|
outputVariables,
|
4152
|
-
missingContractIds
|
4234
|
+
missingContractIds,
|
4235
|
+
dryrunStatus
|
4236
|
+
};
|
4237
|
+
}
|
4238
|
+
/**
|
4239
|
+
* Dry runs multiple transactions and checks for missing dependencies in batches.
|
4240
|
+
*
|
4241
|
+
* Transactions are dry run in batches. After each dry run, transactions requiring
|
4242
|
+
* further modifications are identified. The method iteratively updates these transactions
|
4243
|
+
* and performs subsequent dry runs until all dependencies for each transaction are satisfied.
|
4244
|
+
*
|
4245
|
+
* @param transactionRequests - Array of transaction request objects.
|
4246
|
+
* @returns A promise that resolves to an array of results for each transaction.
|
4247
|
+
*/
|
4248
|
+
async estimateMultipleTxDependencies(transactionRequests) {
|
4249
|
+
const results = transactionRequests.map(() => ({
|
4250
|
+
receipts: [],
|
4251
|
+
outputVariables: 0,
|
4252
|
+
missingContractIds: [],
|
4253
|
+
dryrunStatus: void 0
|
4254
|
+
}));
|
4255
|
+
const allRequests = (0, import_ramda3.clone)(transactionRequests);
|
4256
|
+
const serializedTransactionsMap = /* @__PURE__ */ new Map();
|
4257
|
+
allRequests.forEach((req, index) => {
|
4258
|
+
if (req.type === import_transactions19.TransactionType.Script) {
|
4259
|
+
serializedTransactionsMap.set(index, (0, import_utils22.hexlify)(req.toTransactionBytes()));
|
4260
|
+
}
|
4261
|
+
});
|
4262
|
+
let transactionsToProcess = Array.from(serializedTransactionsMap.keys());
|
4263
|
+
let attempt = 0;
|
4264
|
+
while (transactionsToProcess.length > 0 && attempt < MAX_RETRIES) {
|
4265
|
+
const encodedTransactions = transactionsToProcess.map(
|
4266
|
+
(index) => serializedTransactionsMap.get(index)
|
4267
|
+
);
|
4268
|
+
const dryRunResults = await this.operations.dryRun({
|
4269
|
+
encodedTransactions,
|
4270
|
+
utxoValidation: false
|
4271
|
+
});
|
4272
|
+
const nextRoundTransactions = [];
|
4273
|
+
for (let i = 0; i < dryRunResults.dryRun.length; i++) {
|
4274
|
+
const currentResultIndex = transactionsToProcess[i];
|
4275
|
+
const { receipts: rawReceipts, status } = dryRunResults.dryRun[i];
|
4276
|
+
results[currentResultIndex].receipts = rawReceipts.map(processGqlReceipt);
|
4277
|
+
results[currentResultIndex].dryrunStatus = status;
|
4278
|
+
const { missingOutputVariables, missingOutputContractIds } = getReceiptsWithMissingData(
|
4279
|
+
results[currentResultIndex].receipts
|
4280
|
+
);
|
4281
|
+
const hasMissingOutputs = missingOutputVariables.length > 0 || missingOutputContractIds.length > 0;
|
4282
|
+
const requestToProcess = allRequests[currentResultIndex];
|
4283
|
+
if (hasMissingOutputs && requestToProcess?.type === import_transactions19.TransactionType.Script) {
|
4284
|
+
results[currentResultIndex].outputVariables += missingOutputVariables.length;
|
4285
|
+
requestToProcess.addVariableOutputs(missingOutputVariables.length);
|
4286
|
+
missingOutputContractIds.forEach(({ contractId }) => {
|
4287
|
+
requestToProcess.addContractInputAndOutput(import_address3.Address.fromString(contractId));
|
4288
|
+
results[currentResultIndex].missingContractIds.push(contractId);
|
4289
|
+
});
|
4290
|
+
const { maxFee } = await this.estimateTxGasAndFee({
|
4291
|
+
transactionRequest: requestToProcess,
|
4292
|
+
optimizeGas: false
|
4293
|
+
});
|
4294
|
+
requestToProcess.maxFee = maxFee;
|
4295
|
+
serializedTransactionsMap.set(
|
4296
|
+
currentResultIndex,
|
4297
|
+
(0, import_utils22.hexlify)(requestToProcess.toTransactionBytes())
|
4298
|
+
);
|
4299
|
+
nextRoundTransactions.push(currentResultIndex);
|
4300
|
+
allRequests[currentResultIndex] = requestToProcess;
|
4301
|
+
}
|
4302
|
+
}
|
4303
|
+
transactionsToProcess = nextRoundTransactions;
|
4304
|
+
attempt += 1;
|
4305
|
+
}
|
4306
|
+
return results;
|
4307
|
+
}
|
4308
|
+
async dryRunMultipleTransactions(transactionRequests, { utxoValidation, estimateTxDependencies = true } = {}) {
|
4309
|
+
if (estimateTxDependencies) {
|
4310
|
+
return this.estimateMultipleTxDependencies(transactionRequests);
|
4311
|
+
}
|
4312
|
+
const encodedTransactions = transactionRequests.map((tx) => (0, import_utils22.hexlify)(tx.toTransactionBytes()));
|
4313
|
+
const { dryRun: dryRunStatuses } = await this.operations.dryRun({
|
4314
|
+
encodedTransactions,
|
4315
|
+
utxoValidation: utxoValidation || false
|
4316
|
+
});
|
4317
|
+
const results = dryRunStatuses.map(({ receipts: rawReceipts, status }) => {
|
4318
|
+
const receipts = rawReceipts.map(processGqlReceipt);
|
4319
|
+
return { receipts, dryrunStatus: status };
|
4320
|
+
});
|
4321
|
+
return results;
|
4322
|
+
}
|
4323
|
+
async estimateTxGasAndFee(params) {
|
4324
|
+
const { transactionRequest, optimizeGas = true } = params;
|
4325
|
+
let { gasPrice } = params;
|
4326
|
+
const chainInfo = this.getChain();
|
4327
|
+
const { gasPriceFactor } = this.getGasConfig();
|
4328
|
+
const minGas = transactionRequest.calculateMinGas(chainInfo);
|
4329
|
+
if (!gasPrice) {
|
4330
|
+
gasPrice = await this.estimateGasPrice(10);
|
4331
|
+
}
|
4332
|
+
const minFee = calculateGasFee({
|
4333
|
+
gasPrice: (0, import_math16.bn)(gasPrice),
|
4334
|
+
gas: minGas,
|
4335
|
+
priceFactor: gasPriceFactor,
|
4336
|
+
tip: transactionRequest.tip
|
4337
|
+
}).add(1);
|
4338
|
+
let gasLimit = (0, import_math16.bn)(0);
|
4339
|
+
if (transactionRequest.type === import_transactions19.TransactionType.Script) {
|
4340
|
+
gasLimit = transactionRequest.gasLimit;
|
4341
|
+
if (!optimizeGas) {
|
4342
|
+
transactionRequest.gasLimit = minGas;
|
4343
|
+
gasLimit = transactionRequest.calculateMaxGas(chainInfo, minGas);
|
4344
|
+
transactionRequest.gasLimit = gasLimit;
|
4345
|
+
}
|
4346
|
+
}
|
4347
|
+
const maxGas = transactionRequest.calculateMaxGas(chainInfo, minGas);
|
4348
|
+
const maxFee = calculateGasFee({
|
4349
|
+
gasPrice: (0, import_math16.bn)(gasPrice),
|
4350
|
+
gas: maxGas,
|
4351
|
+
priceFactor: gasPriceFactor,
|
4352
|
+
tip: transactionRequest.tip
|
4353
|
+
}).add(1);
|
4354
|
+
return {
|
4355
|
+
minGas,
|
4356
|
+
minFee,
|
4357
|
+
maxGas,
|
4358
|
+
maxFee,
|
4359
|
+
gasPrice,
|
4360
|
+
gasLimit
|
4153
4361
|
};
|
4154
4362
|
}
|
4155
4363
|
/**
|
@@ -4167,15 +4375,17 @@ var _Provider = class {
|
|
4167
4375
|
if (estimateTxDependencies) {
|
4168
4376
|
return this.estimateTxDependencies(transactionRequest);
|
4169
4377
|
}
|
4170
|
-
const
|
4171
|
-
const { dryRun:
|
4172
|
-
|
4378
|
+
const encodedTransactions = [(0, import_utils22.hexlify)(transactionRequest.toTransactionBytes())];
|
4379
|
+
const { dryRun: dryRunStatuses } = await this.operations.dryRun({
|
4380
|
+
encodedTransactions,
|
4173
4381
|
utxoValidation: true
|
4174
4382
|
});
|
4175
|
-
const
|
4176
|
-
|
4177
|
-
receipts
|
4178
|
-
|
4383
|
+
const callResult = dryRunStatuses.map((dryRunStatus) => {
|
4384
|
+
const { id, receipts, status } = dryRunStatus;
|
4385
|
+
const processedReceipts = receipts.map(processGqlReceipt);
|
4386
|
+
return { id, receipts: processedReceipts, status };
|
4387
|
+
});
|
4388
|
+
return { receipts: callResult[0].receipts };
|
4179
4389
|
}
|
4180
4390
|
/**
|
4181
4391
|
* Returns a transaction cost to enable user
|
@@ -4192,80 +4402,80 @@ var _Provider = class {
|
|
4192
4402
|
* @param tolerance - The tolerance to add on top of the gasUsed.
|
4193
4403
|
* @returns A promise that resolves to the transaction cost object.
|
4194
4404
|
*/
|
4195
|
-
async getTransactionCost(transactionRequestLike,
|
4196
|
-
estimateTxDependencies = true,
|
4197
|
-
estimatePredicates = true,
|
4198
|
-
resourcesOwner,
|
4199
|
-
signatureCallback
|
4200
|
-
} = {}) {
|
4405
|
+
async getTransactionCost(transactionRequestLike, { resourcesOwner, signatureCallback, quantitiesToContract = [] } = {}) {
|
4201
4406
|
const txRequestClone = (0, import_ramda3.clone)(transactionRequestify(transactionRequestLike));
|
4202
|
-
const
|
4203
|
-
const { gasPriceFactor, minGasPrice, maxGasPerTx } = this.getGasConfig();
|
4204
|
-
const gasPrice = (0, import_math15.max)(txRequestClone.gasPrice, minGasPrice);
|
4205
|
-
const isScriptTransaction = txRequestClone.type === import_transactions18.TransactionType.Script;
|
4407
|
+
const isScriptTransaction = txRequestClone.type === import_transactions19.TransactionType.Script;
|
4206
4408
|
const coinOutputsQuantities = txRequestClone.getCoinOutputsQuantities();
|
4207
|
-
const allQuantities = mergeQuantities(coinOutputsQuantities,
|
4409
|
+
const allQuantities = mergeQuantities(coinOutputsQuantities, quantitiesToContract);
|
4208
4410
|
txRequestClone.fundWithFakeUtxos(allQuantities, resourcesOwner?.address);
|
4209
|
-
|
4210
|
-
|
4211
|
-
|
4212
|
-
}
|
4213
|
-
if (resourcesOwner && "populateTransactionPredicateData" in resourcesOwner) {
|
4214
|
-
resourcesOwner.populateTransactionPredicateData(txRequestClone);
|
4215
|
-
}
|
4216
|
-
await this.estimatePredicates(txRequestClone);
|
4411
|
+
txRequestClone.maxFee = (0, import_math16.bn)(0);
|
4412
|
+
if (isScriptTransaction) {
|
4413
|
+
txRequestClone.gasLimit = (0, import_math16.bn)(0);
|
4217
4414
|
}
|
4218
|
-
if (
|
4219
|
-
|
4415
|
+
if (resourcesOwner && "populateTransactionPredicateData" in resourcesOwner) {
|
4416
|
+
resourcesOwner.populateTransactionPredicateData(txRequestClone);
|
4220
4417
|
}
|
4221
|
-
const
|
4222
|
-
|
4418
|
+
const signedRequest = (0, import_ramda3.clone)(txRequestClone);
|
4419
|
+
let addedSignatures = 0;
|
4420
|
+
if (signatureCallback && isScriptTransaction) {
|
4421
|
+
const lengthBefore = signedRequest.witnesses.length;
|
4422
|
+
await signatureCallback(signedRequest);
|
4423
|
+
addedSignatures = signedRequest.witnesses.length - lengthBefore;
|
4424
|
+
}
|
4425
|
+
await this.estimatePredicates(signedRequest);
|
4426
|
+
let { maxFee, maxGas, minFee, minGas, gasPrice, gasLimit } = await this.estimateTxGasAndFee({
|
4427
|
+
transactionRequest: signedRequest,
|
4428
|
+
optimizeGas: false
|
4429
|
+
});
|
4430
|
+
txRequestClone.maxFee = maxFee;
|
4223
4431
|
let receipts = [];
|
4224
4432
|
let missingContractIds = [];
|
4225
4433
|
let outputVariables = 0;
|
4226
|
-
|
4227
|
-
|
4228
|
-
|
4434
|
+
let gasUsed = (0, import_math16.bn)(0);
|
4435
|
+
txRequestClone.updatePredicateGasUsed(signedRequest.inputs);
|
4436
|
+
if (isScriptTransaction) {
|
4437
|
+
if (signatureCallback) {
|
4438
|
+
await signatureCallback(txRequestClone);
|
4439
|
+
}
|
4440
|
+
txRequestClone.gasLimit = gasLimit;
|
4229
4441
|
const result = await this.estimateTxDependencies(txRequestClone);
|
4230
4442
|
receipts = result.receipts;
|
4231
4443
|
outputVariables = result.outputVariables;
|
4232
4444
|
missingContractIds = result.missingContractIds;
|
4445
|
+
gasUsed = getGasUsedFromReceipts(receipts);
|
4446
|
+
txRequestClone.gasLimit = gasUsed;
|
4447
|
+
({ maxFee, maxGas, minFee, minGas, gasPrice } = await this.estimateTxGasAndFee({
|
4448
|
+
transactionRequest: txRequestClone,
|
4449
|
+
gasPrice
|
4450
|
+
}));
|
4233
4451
|
}
|
4234
|
-
const gasUsed = isScriptTransaction ? getGasUsedFromReceipts(receipts) : minGas;
|
4235
|
-
const usedFee = calculatePriceWithFactor(
|
4236
|
-
gasUsed,
|
4237
|
-
gasPrice,
|
4238
|
-
gasPriceFactor
|
4239
|
-
).normalizeZeroToOne();
|
4240
|
-
const minFee = calculatePriceWithFactor(minGas, gasPrice, gasPriceFactor).normalizeZeroToOne();
|
4241
|
-
const maxFee = calculatePriceWithFactor(maxGas, gasPrice, gasPriceFactor).normalizeZeroToOne();
|
4242
4452
|
return {
|
4243
4453
|
requiredQuantities: allQuantities,
|
4244
4454
|
receipts,
|
4245
4455
|
gasUsed,
|
4246
|
-
minGasPrice,
|
4247
4456
|
gasPrice,
|
4248
4457
|
minGas,
|
4249
4458
|
maxGas,
|
4250
|
-
usedFee,
|
4251
4459
|
minFee,
|
4252
4460
|
maxFee,
|
4253
|
-
estimatedInputs: txRequestClone.inputs,
|
4254
4461
|
outputVariables,
|
4255
|
-
missingContractIds
|
4462
|
+
missingContractIds,
|
4463
|
+
addedSignatures,
|
4464
|
+
estimatedPredicates: txRequestClone.inputs
|
4256
4465
|
};
|
4257
4466
|
}
|
4258
|
-
async getResourcesForTransaction(owner, transactionRequestLike,
|
4467
|
+
async getResourcesForTransaction(owner, transactionRequestLike, quantitiesToContract = []) {
|
4259
4468
|
const ownerAddress = import_address3.Address.fromAddressOrString(owner);
|
4260
4469
|
const transactionRequest = transactionRequestify((0, import_ramda3.clone)(transactionRequestLike));
|
4261
|
-
const transactionCost = await this.getTransactionCost(transactionRequest,
|
4470
|
+
const transactionCost = await this.getTransactionCost(transactionRequest, {
|
4471
|
+
quantitiesToContract
|
4472
|
+
});
|
4262
4473
|
transactionRequest.addResources(
|
4263
4474
|
await this.getResourcesToSpend(ownerAddress, transactionCost.requiredQuantities)
|
4264
4475
|
);
|
4265
|
-
const { requiredQuantities, ...txCost } = await this.getTransactionCost(
|
4266
|
-
|
4267
|
-
|
4268
|
-
);
|
4476
|
+
const { requiredQuantities, ...txCost } = await this.getTransactionCost(transactionRequest, {
|
4477
|
+
quantitiesToContract
|
4478
|
+
});
|
4269
4479
|
const resources = await this.getResourcesToSpend(ownerAddress, requiredQuantities);
|
4270
4480
|
return {
|
4271
4481
|
resources,
|
@@ -4281,17 +4491,16 @@ var _Provider = class {
|
|
4281
4491
|
const result = await this.operations.getCoins({
|
4282
4492
|
first: 10,
|
4283
4493
|
...paginationArgs,
|
4284
|
-
filter: { owner: ownerAddress.toB256(), assetId: assetId && (0,
|
4494
|
+
filter: { owner: ownerAddress.toB256(), assetId: assetId && (0, import_utils22.hexlify)(assetId) }
|
4285
4495
|
});
|
4286
4496
|
const coins = result.coins.edges.map((edge) => edge.node);
|
4287
4497
|
return coins.map((coin) => ({
|
4288
4498
|
id: coin.utxoId,
|
4289
4499
|
assetId: coin.assetId,
|
4290
|
-
amount: (0,
|
4500
|
+
amount: (0, import_math16.bn)(coin.amount),
|
4291
4501
|
owner: import_address3.Address.fromAddressOrString(coin.owner),
|
4292
|
-
|
4293
|
-
|
4294
|
-
txCreatedIdx: (0, import_math15.bn)(coin.txCreatedIdx)
|
4502
|
+
blockCreated: (0, import_math16.bn)(coin.blockCreated),
|
4503
|
+
txCreatedIdx: (0, import_math16.bn)(coin.txCreatedIdx)
|
4295
4504
|
}));
|
4296
4505
|
}
|
4297
4506
|
/**
|
@@ -4305,19 +4514,19 @@ var _Provider = class {
|
|
4305
4514
|
async getResourcesToSpend(owner, quantities, excludedIds) {
|
4306
4515
|
const ownerAddress = import_address3.Address.fromAddressOrString(owner);
|
4307
4516
|
const excludeInput = {
|
4308
|
-
messages: excludedIds?.messages?.map((nonce) => (0,
|
4309
|
-
utxos: excludedIds?.utxos?.map((id) => (0,
|
4517
|
+
messages: excludedIds?.messages?.map((nonce) => (0, import_utils22.hexlify)(nonce)) || [],
|
4518
|
+
utxos: excludedIds?.utxos?.map((id) => (0, import_utils22.hexlify)(id)) || []
|
4310
4519
|
};
|
4311
4520
|
if (this.cache) {
|
4312
4521
|
const uniqueUtxos = new Set(
|
4313
|
-
excludeInput.utxos.concat(this.cache?.getActiveData().map((id) => (0,
|
4522
|
+
excludeInput.utxos.concat(this.cache?.getActiveData().map((id) => (0, import_utils22.hexlify)(id)))
|
4314
4523
|
);
|
4315
4524
|
excludeInput.utxos = Array.from(uniqueUtxos);
|
4316
4525
|
}
|
4317
4526
|
const coinsQuery = {
|
4318
4527
|
owner: ownerAddress.toB256(),
|
4319
4528
|
queryPerAsset: quantities.map(coinQuantityfy).map(({ assetId, amount, max: maxPerAsset }) => ({
|
4320
|
-
assetId: (0,
|
4529
|
+
assetId: (0, import_utils22.hexlify)(assetId),
|
4321
4530
|
amount: amount.toString(10),
|
4322
4531
|
max: maxPerAsset ? maxPerAsset.toString(10) : void 0
|
4323
4532
|
})),
|
@@ -4328,9 +4537,9 @@ var _Provider = class {
|
|
4328
4537
|
switch (coin.__typename) {
|
4329
4538
|
case "MessageCoin":
|
4330
4539
|
return {
|
4331
|
-
amount: (0,
|
4540
|
+
amount: (0, import_math16.bn)(coin.amount),
|
4332
4541
|
assetId: coin.assetId,
|
4333
|
-
daHeight: (0,
|
4542
|
+
daHeight: (0, import_math16.bn)(coin.daHeight),
|
4334
4543
|
sender: import_address3.Address.fromAddressOrString(coin.sender),
|
4335
4544
|
recipient: import_address3.Address.fromAddressOrString(coin.recipient),
|
4336
4545
|
nonce: coin.nonce
|
@@ -4338,12 +4547,11 @@ var _Provider = class {
|
|
4338
4547
|
case "Coin":
|
4339
4548
|
return {
|
4340
4549
|
id: coin.utxoId,
|
4341
|
-
amount: (0,
|
4550
|
+
amount: (0, import_math16.bn)(coin.amount),
|
4342
4551
|
assetId: coin.assetId,
|
4343
4552
|
owner: import_address3.Address.fromAddressOrString(coin.owner),
|
4344
|
-
|
4345
|
-
|
4346
|
-
txCreatedIdx: (0, import_math15.bn)(coin.txCreatedIdx)
|
4553
|
+
blockCreated: (0, import_math16.bn)(coin.blockCreated),
|
4554
|
+
txCreatedIdx: (0, import_math16.bn)(coin.txCreatedIdx)
|
4347
4555
|
};
|
4348
4556
|
default:
|
4349
4557
|
return null;
|
@@ -4360,13 +4568,13 @@ var _Provider = class {
|
|
4360
4568
|
async getBlock(idOrHeight) {
|
4361
4569
|
let variables;
|
4362
4570
|
if (typeof idOrHeight === "number") {
|
4363
|
-
variables = { height: (0,
|
4571
|
+
variables = { height: (0, import_math16.bn)(idOrHeight).toString(10) };
|
4364
4572
|
} else if (idOrHeight === "latest") {
|
4365
4573
|
variables = { height: (await this.getBlockNumber()).toString(10) };
|
4366
4574
|
} else if (idOrHeight.length === 66) {
|
4367
4575
|
variables = { blockId: idOrHeight };
|
4368
4576
|
} else {
|
4369
|
-
variables = { blockId: (0,
|
4577
|
+
variables = { blockId: (0, import_math16.bn)(idOrHeight).toString(10) };
|
4370
4578
|
}
|
4371
4579
|
const { block } = await this.operations.getBlock(variables);
|
4372
4580
|
if (!block) {
|
@@ -4374,7 +4582,7 @@ var _Provider = class {
|
|
4374
4582
|
}
|
4375
4583
|
return {
|
4376
4584
|
id: block.id,
|
4377
|
-
height: (0,
|
4585
|
+
height: (0, import_math16.bn)(block.height),
|
4378
4586
|
time: block.header.time,
|
4379
4587
|
transactionIds: block.transactions.map((tx) => tx.id)
|
4380
4588
|
};
|
@@ -4389,7 +4597,7 @@ var _Provider = class {
|
|
4389
4597
|
const { blocks: fetchedData } = await this.operations.getBlocks(params);
|
4390
4598
|
const blocks = fetchedData.edges.map(({ node: block }) => ({
|
4391
4599
|
id: block.id,
|
4392
|
-
height: (0,
|
4600
|
+
height: (0, import_math16.bn)(block.height),
|
4393
4601
|
time: block.header.time,
|
4394
4602
|
transactionIds: block.transactions.map((tx) => tx.id)
|
4395
4603
|
}));
|
@@ -4404,7 +4612,7 @@ var _Provider = class {
|
|
4404
4612
|
async getBlockWithTransactions(idOrHeight) {
|
4405
4613
|
let variables;
|
4406
4614
|
if (typeof idOrHeight === "number") {
|
4407
|
-
variables = { blockHeight: (0,
|
4615
|
+
variables = { blockHeight: (0, import_math16.bn)(idOrHeight).toString(10) };
|
4408
4616
|
} else if (idOrHeight === "latest") {
|
4409
4617
|
variables = { blockHeight: (await this.getBlockNumber()).toString() };
|
4410
4618
|
} else {
|
@@ -4416,11 +4624,11 @@ var _Provider = class {
|
|
4416
4624
|
}
|
4417
4625
|
return {
|
4418
4626
|
id: block.id,
|
4419
|
-
height: (0,
|
4627
|
+
height: (0, import_math16.bn)(block.height, 10),
|
4420
4628
|
time: block.header.time,
|
4421
4629
|
transactionIds: block.transactions.map((tx) => tx.id),
|
4422
4630
|
transactions: block.transactions.map(
|
4423
|
-
(tx) => new
|
4631
|
+
(tx) => new import_transactions19.TransactionCoder().decode((0, import_utils22.arrayify)(tx.rawPayload), 0)?.[0]
|
4424
4632
|
)
|
4425
4633
|
};
|
4426
4634
|
}
|
@@ -4435,8 +4643,8 @@ var _Provider = class {
|
|
4435
4643
|
if (!transaction) {
|
4436
4644
|
return null;
|
4437
4645
|
}
|
4438
|
-
return new
|
4439
|
-
(0,
|
4646
|
+
return new import_transactions19.TransactionCoder().decode(
|
4647
|
+
(0, import_utils22.arrayify)(transaction.rawPayload),
|
4440
4648
|
0
|
4441
4649
|
)?.[0];
|
4442
4650
|
}
|
@@ -4463,9 +4671,9 @@ var _Provider = class {
|
|
4463
4671
|
async getContractBalance(contractId, assetId) {
|
4464
4672
|
const { contractBalance } = await this.operations.getContractBalance({
|
4465
4673
|
contract: import_address3.Address.fromAddressOrString(contractId).toB256(),
|
4466
|
-
asset: (0,
|
4674
|
+
asset: (0, import_utils22.hexlify)(assetId)
|
4467
4675
|
});
|
4468
|
-
return (0,
|
4676
|
+
return (0, import_math16.bn)(contractBalance.amount, 10);
|
4469
4677
|
}
|
4470
4678
|
/**
|
4471
4679
|
* Returns the balance for the given owner for the given asset ID.
|
@@ -4477,9 +4685,9 @@ var _Provider = class {
|
|
4477
4685
|
async getBalance(owner, assetId) {
|
4478
4686
|
const { balance } = await this.operations.getBalance({
|
4479
4687
|
owner: import_address3.Address.fromAddressOrString(owner).toB256(),
|
4480
|
-
assetId: (0,
|
4688
|
+
assetId: (0, import_utils22.hexlify)(assetId)
|
4481
4689
|
});
|
4482
|
-
return (0,
|
4690
|
+
return (0, import_math16.bn)(balance.amount, 10);
|
4483
4691
|
}
|
4484
4692
|
/**
|
4485
4693
|
* Returns balances for the given owner.
|
@@ -4497,7 +4705,7 @@ var _Provider = class {
|
|
4497
4705
|
const balances = result.balances.edges.map((edge) => edge.node);
|
4498
4706
|
return balances.map((balance) => ({
|
4499
4707
|
assetId: balance.assetId,
|
4500
|
-
amount: (0,
|
4708
|
+
amount: (0, import_math16.bn)(balance.amount)
|
4501
4709
|
}));
|
4502
4710
|
}
|
4503
4711
|
/**
|
@@ -4515,19 +4723,19 @@ var _Provider = class {
|
|
4515
4723
|
});
|
4516
4724
|
const messages = result.messages.edges.map((edge) => edge.node);
|
4517
4725
|
return messages.map((message) => ({
|
4518
|
-
messageId:
|
4726
|
+
messageId: import_transactions19.InputMessageCoder.getMessageId({
|
4519
4727
|
sender: message.sender,
|
4520
4728
|
recipient: message.recipient,
|
4521
4729
|
nonce: message.nonce,
|
4522
|
-
amount: (0,
|
4730
|
+
amount: (0, import_math16.bn)(message.amount),
|
4523
4731
|
data: message.data
|
4524
4732
|
}),
|
4525
4733
|
sender: import_address3.Address.fromAddressOrString(message.sender),
|
4526
4734
|
recipient: import_address3.Address.fromAddressOrString(message.recipient),
|
4527
4735
|
nonce: message.nonce,
|
4528
|
-
amount: (0,
|
4529
|
-
data:
|
4530
|
-
daHeight: (0,
|
4736
|
+
amount: (0, import_math16.bn)(message.amount),
|
4737
|
+
data: import_transactions19.InputMessageCoder.decodeData(message.data),
|
4738
|
+
daHeight: (0, import_math16.bn)(message.daHeight)
|
4531
4739
|
}));
|
4532
4740
|
}
|
4533
4741
|
/**
|
@@ -4580,44 +4788,52 @@ var _Provider = class {
|
|
4580
4788
|
} = result.messageProof;
|
4581
4789
|
return {
|
4582
4790
|
messageProof: {
|
4583
|
-
proofIndex: (0,
|
4791
|
+
proofIndex: (0, import_math16.bn)(messageProof.proofIndex),
|
4584
4792
|
proofSet: messageProof.proofSet
|
4585
4793
|
},
|
4586
4794
|
blockProof: {
|
4587
|
-
proofIndex: (0,
|
4795
|
+
proofIndex: (0, import_math16.bn)(blockProof.proofIndex),
|
4588
4796
|
proofSet: blockProof.proofSet
|
4589
4797
|
},
|
4590
4798
|
messageBlockHeader: {
|
4591
4799
|
id: messageBlockHeader.id,
|
4592
|
-
daHeight: (0,
|
4593
|
-
transactionsCount: (0,
|
4800
|
+
daHeight: (0, import_math16.bn)(messageBlockHeader.daHeight),
|
4801
|
+
transactionsCount: (0, import_math16.bn)(messageBlockHeader.transactionsCount),
|
4594
4802
|
transactionsRoot: messageBlockHeader.transactionsRoot,
|
4595
|
-
height: (0,
|
4803
|
+
height: (0, import_math16.bn)(messageBlockHeader.height),
|
4596
4804
|
prevRoot: messageBlockHeader.prevRoot,
|
4597
4805
|
time: messageBlockHeader.time,
|
4598
4806
|
applicationHash: messageBlockHeader.applicationHash,
|
4599
|
-
|
4600
|
-
messageReceiptCount: (0, import_math15.bn)(messageBlockHeader.messageReceiptCount)
|
4807
|
+
messageReceiptCount: (0, import_math16.bn)(messageBlockHeader.messageReceiptCount)
|
4601
4808
|
},
|
4602
4809
|
commitBlockHeader: {
|
4603
4810
|
id: commitBlockHeader.id,
|
4604
|
-
daHeight: (0,
|
4605
|
-
transactionsCount: (0,
|
4811
|
+
daHeight: (0, import_math16.bn)(commitBlockHeader.daHeight),
|
4812
|
+
transactionsCount: (0, import_math16.bn)(commitBlockHeader.transactionsCount),
|
4606
4813
|
transactionsRoot: commitBlockHeader.transactionsRoot,
|
4607
|
-
height: (0,
|
4814
|
+
height: (0, import_math16.bn)(commitBlockHeader.height),
|
4608
4815
|
prevRoot: commitBlockHeader.prevRoot,
|
4609
4816
|
time: commitBlockHeader.time,
|
4610
4817
|
applicationHash: commitBlockHeader.applicationHash,
|
4611
|
-
|
4612
|
-
messageReceiptCount: (0, import_math15.bn)(commitBlockHeader.messageReceiptCount)
|
4818
|
+
messageReceiptCount: (0, import_math16.bn)(commitBlockHeader.messageReceiptCount)
|
4613
4819
|
},
|
4614
4820
|
sender: import_address3.Address.fromAddressOrString(sender),
|
4615
4821
|
recipient: import_address3.Address.fromAddressOrString(recipient),
|
4616
4822
|
nonce,
|
4617
|
-
amount: (0,
|
4823
|
+
amount: (0, import_math16.bn)(amount),
|
4618
4824
|
data
|
4619
4825
|
};
|
4620
4826
|
}
|
4827
|
+
async getLatestGasPrice() {
|
4828
|
+
const { latestGasPrice } = await this.operations.getLatestGasPrice();
|
4829
|
+
return (0, import_math16.bn)(latestGasPrice.gasPrice);
|
4830
|
+
}
|
4831
|
+
async estimateGasPrice(blockHorizon) {
|
4832
|
+
const { estimateGasPrice } = await this.operations.estimateGasPrice({
|
4833
|
+
blockHorizon: String(blockHorizon)
|
4834
|
+
});
|
4835
|
+
return (0, import_math16.bn)(estimateGasPrice.gasPrice);
|
4836
|
+
}
|
4621
4837
|
/**
|
4622
4838
|
* Returns Message Proof for given transaction id and the message id from MessageOut receipt.
|
4623
4839
|
*
|
@@ -4637,10 +4853,10 @@ var _Provider = class {
|
|
4637
4853
|
*/
|
4638
4854
|
async produceBlocks(amount, startTime) {
|
4639
4855
|
const { produceBlocks: latestBlockHeight } = await this.operations.produceBlocks({
|
4640
|
-
blocksToProduce: (0,
|
4641
|
-
startTimestamp: startTime ?
|
4856
|
+
blocksToProduce: (0, import_math16.bn)(amount).toString(10),
|
4857
|
+
startTimestamp: startTime ? import_utils22.DateTime.fromUnixMilliseconds(startTime).toTai64() : void 0
|
4642
4858
|
});
|
4643
|
-
return (0,
|
4859
|
+
return (0, import_math16.bn)(latestBlockHeight);
|
4644
4860
|
}
|
4645
4861
|
// eslint-disable-next-line @typescript-eslint/require-await
|
4646
4862
|
async getTransactionResponse(transactionId) {
|
@@ -4654,7 +4870,7 @@ cacheInputs_fn = function(inputs) {
|
|
4654
4870
|
return;
|
4655
4871
|
}
|
4656
4872
|
inputs.forEach((input) => {
|
4657
|
-
if (input.type ===
|
4873
|
+
if (input.type === import_transactions19.InputType.Coin) {
|
4658
4874
|
this.cache?.set(input.id);
|
4659
4875
|
}
|
4660
4876
|
});
|
@@ -4664,9 +4880,9 @@ __publicField(Provider, "nodeInfoCache", {});
|
|
4664
4880
|
|
4665
4881
|
// src/providers/transaction-summary/get-transaction-summary.ts
|
4666
4882
|
var import_errors15 = require("@fuel-ts/errors");
|
4667
|
-
var
|
4668
|
-
var
|
4669
|
-
var
|
4883
|
+
var import_math17 = require("@fuel-ts/math");
|
4884
|
+
var import_transactions20 = require("@fuel-ts/transactions");
|
4885
|
+
var import_utils25 = require("@fuel-ts/utils");
|
4670
4886
|
async function getTransactionSummary(params) {
|
4671
4887
|
const { id, provider, abiMap } = params;
|
4672
4888
|
const { transaction: gqlTransaction } = await provider.operations.getTransactionWithReceipts({
|
@@ -4678,25 +4894,32 @@ async function getTransactionSummary(params) {
|
|
4678
4894
|
`Transaction not found for given id: ${id}.`
|
4679
4895
|
);
|
4680
4896
|
}
|
4681
|
-
const [decodedTransaction] = new
|
4682
|
-
(0,
|
4897
|
+
const [decodedTransaction] = new import_transactions20.TransactionCoder().decode(
|
4898
|
+
(0, import_utils25.arrayify)(gqlTransaction.rawPayload),
|
4683
4899
|
0
|
4684
4900
|
);
|
4685
|
-
|
4901
|
+
let txReceipts = [];
|
4902
|
+
if (gqlTransaction?.status && "receipts" in gqlTransaction.status) {
|
4903
|
+
txReceipts = gqlTransaction.status.receipts;
|
4904
|
+
}
|
4905
|
+
const receipts = txReceipts.map(processGqlReceipt);
|
4686
4906
|
const {
|
4687
|
-
consensusParameters: { gasPerByte, gasPriceFactor, maxInputs, gasCosts }
|
4907
|
+
consensusParameters: { gasPerByte, gasPriceFactor, maxInputs, gasCosts, maxGasPerTx }
|
4688
4908
|
} = provider.getChain();
|
4909
|
+
const gasPrice = await provider.getLatestGasPrice();
|
4689
4910
|
const transactionInfo = assembleTransactionSummary({
|
4690
4911
|
id: gqlTransaction.id,
|
4691
4912
|
receipts,
|
4692
4913
|
transaction: decodedTransaction,
|
4693
|
-
transactionBytes: (0,
|
4914
|
+
transactionBytes: (0, import_utils25.arrayify)(gqlTransaction.rawPayload),
|
4694
4915
|
gqlTransactionStatus: gqlTransaction.status,
|
4695
|
-
gasPerByte: (0,
|
4696
|
-
gasPriceFactor: (0,
|
4916
|
+
gasPerByte: (0, import_math17.bn)(gasPerByte),
|
4917
|
+
gasPriceFactor: (0, import_math17.bn)(gasPriceFactor),
|
4697
4918
|
abiMap,
|
4698
4919
|
maxInputs,
|
4699
|
-
gasCosts
|
4920
|
+
gasCosts,
|
4921
|
+
maxGasPerTx,
|
4922
|
+
gasPrice
|
4700
4923
|
});
|
4701
4924
|
return {
|
4702
4925
|
gqlTransaction,
|
@@ -4706,10 +4929,11 @@ async function getTransactionSummary(params) {
|
|
4706
4929
|
async function getTransactionSummaryFromRequest(params) {
|
4707
4930
|
const { provider, transactionRequest, abiMap } = params;
|
4708
4931
|
const { receipts } = await provider.call(transactionRequest);
|
4709
|
-
const { gasPerByte, gasPriceFactor, gasCosts } = provider.getGasConfig();
|
4932
|
+
const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = provider.getGasConfig();
|
4710
4933
|
const maxInputs = provider.getChain().consensusParameters.maxInputs;
|
4711
4934
|
const transaction = transactionRequest.toTransaction();
|
4712
4935
|
const transactionBytes = transactionRequest.toTransactionBytes();
|
4936
|
+
const gasPrice = await provider.getLatestGasPrice();
|
4713
4937
|
const transactionSummary = assembleTransactionSummary({
|
4714
4938
|
receipts,
|
4715
4939
|
transaction,
|
@@ -4718,7 +4942,9 @@ async function getTransactionSummaryFromRequest(params) {
|
|
4718
4942
|
gasPerByte,
|
4719
4943
|
gasPriceFactor,
|
4720
4944
|
maxInputs,
|
4721
|
-
gasCosts
|
4945
|
+
gasCosts,
|
4946
|
+
maxGasPerTx,
|
4947
|
+
gasPrice
|
4722
4948
|
});
|
4723
4949
|
return transactionSummary;
|
4724
4950
|
}
|
@@ -4727,24 +4953,31 @@ async function getTransactionsSummaries(params) {
|
|
4727
4953
|
const { transactionsByOwner } = await provider.operations.getTransactionsByOwner(filters);
|
4728
4954
|
const { edges, pageInfo } = transactionsByOwner;
|
4729
4955
|
const {
|
4730
|
-
consensusParameters: { gasPerByte, gasPriceFactor, maxInputs, gasCosts }
|
4956
|
+
consensusParameters: { gasPerByte, gasPriceFactor, maxInputs, gasCosts, maxGasPerTx }
|
4731
4957
|
} = provider.getChain();
|
4958
|
+
const gasPrice = await provider.getLatestGasPrice();
|
4732
4959
|
const transactions = edges.map((edge) => {
|
4733
4960
|
const { node: gqlTransaction } = edge;
|
4734
|
-
const { id, rawPayload,
|
4735
|
-
const [decodedTransaction] = new
|
4736
|
-
|
4961
|
+
const { id, rawPayload, status } = gqlTransaction;
|
4962
|
+
const [decodedTransaction] = new import_transactions20.TransactionCoder().decode((0, import_utils25.arrayify)(rawPayload), 0);
|
4963
|
+
let txReceipts = [];
|
4964
|
+
if (gqlTransaction?.status && "receipts" in gqlTransaction.status) {
|
4965
|
+
txReceipts = gqlTransaction.status.receipts;
|
4966
|
+
}
|
4967
|
+
const receipts = txReceipts.map(processGqlReceipt);
|
4737
4968
|
const transactionSummary = assembleTransactionSummary({
|
4738
4969
|
id,
|
4739
4970
|
receipts,
|
4740
4971
|
transaction: decodedTransaction,
|
4741
|
-
transactionBytes: (0,
|
4972
|
+
transactionBytes: (0, import_utils25.arrayify)(rawPayload),
|
4742
4973
|
gqlTransactionStatus: status,
|
4743
4974
|
abiMap,
|
4744
4975
|
gasPerByte,
|
4745
4976
|
gasPriceFactor,
|
4746
4977
|
maxInputs,
|
4747
|
-
gasCosts
|
4978
|
+
gasCosts,
|
4979
|
+
maxGasPerTx,
|
4980
|
+
gasPrice
|
4748
4981
|
});
|
4749
4982
|
const output = {
|
4750
4983
|
gqlTransaction,
|
@@ -4881,17 +5114,17 @@ var assets = [
|
|
4881
5114
|
|
4882
5115
|
// src/utils/formatTransferToContractScriptData.ts
|
4883
5116
|
var import_abi_coder4 = require("@fuel-ts/abi-coder");
|
4884
|
-
var
|
4885
|
-
var
|
5117
|
+
var import_math18 = require("@fuel-ts/math");
|
5118
|
+
var import_utils26 = require("@fuel-ts/utils");
|
4886
5119
|
var asm = __toESM(require("@fuels/vm-asm"));
|
4887
5120
|
var formatTransferToContractScriptData = (params) => {
|
4888
5121
|
const { assetId, amountToTransfer, hexlifiedContractId } = params;
|
4889
5122
|
const numberCoder = new import_abi_coder4.BigNumberCoder("u64");
|
4890
|
-
const encoded = numberCoder.encode(new
|
5123
|
+
const encoded = numberCoder.encode(new import_math18.BN(amountToTransfer).toNumber());
|
4891
5124
|
const scriptData = Uint8Array.from([
|
4892
|
-
...(0,
|
5125
|
+
...(0, import_utils26.arrayify)(hexlifiedContractId),
|
4893
5126
|
...encoded,
|
4894
|
-
...(0,
|
5127
|
+
...(0, import_utils26.arrayify)(assetId)
|
4895
5128
|
]);
|
4896
5129
|
return scriptData;
|
4897
5130
|
};
|
@@ -5038,9 +5271,8 @@ var Account = class extends import_interfaces.AbstractAccount {
|
|
5038
5271
|
* @param assetId - The asset ID to check the balance for.
|
5039
5272
|
* @returns A promise that resolves to the balance amount.
|
5040
5273
|
*/
|
5041
|
-
async getBalance(assetId) {
|
5042
|
-
const
|
5043
|
-
const amount = await this.provider.getBalance(this.address, assetIdToFetch);
|
5274
|
+
async getBalance(assetId = import_configs12.BaseAssetId) {
|
5275
|
+
const amount = await this.provider.getBalance(this.address, assetId);
|
5044
5276
|
return amount;
|
5045
5277
|
}
|
5046
5278
|
/**
|
@@ -5077,37 +5309,33 @@ var Account = class extends import_interfaces.AbstractAccount {
|
|
5077
5309
|
* @param fee - The estimated transaction fee.
|
5078
5310
|
* @returns A promise that resolves when the resources are added to the transaction.
|
5079
5311
|
*/
|
5080
|
-
async fund(request,
|
5081
|
-
const
|
5082
|
-
const
|
5083
|
-
|
5084
|
-
|
5085
|
-
|
5312
|
+
async fund(request, params) {
|
5313
|
+
const { addedSignatures, estimatedPredicates, maxFee: fee, requiredQuantities } = params;
|
5314
|
+
const txRequest = request;
|
5315
|
+
const requiredQuantitiesWithFee = addAmountToCoinQuantities({
|
5316
|
+
amount: (0, import_math19.bn)(fee),
|
5317
|
+
assetId: import_configs12.BaseAssetId,
|
5318
|
+
coinQuantities: requiredQuantities
|
5086
5319
|
});
|
5087
5320
|
const quantitiesDict = {};
|
5088
|
-
|
5321
|
+
requiredQuantitiesWithFee.forEach(({ amount, assetId }) => {
|
5089
5322
|
quantitiesDict[assetId] = {
|
5090
5323
|
required: amount,
|
5091
|
-
owned: (0,
|
5324
|
+
owned: (0, import_math19.bn)(0)
|
5092
5325
|
};
|
5093
5326
|
});
|
5094
|
-
|
5095
|
-
const cachedMessages = [];
|
5096
|
-
const owner = this.address.toB256();
|
5097
|
-
request.inputs.forEach((input) => {
|
5327
|
+
txRequest.inputs.forEach((input) => {
|
5098
5328
|
const isResource = "amount" in input;
|
5099
5329
|
if (isResource) {
|
5100
5330
|
const isCoin2 = "owner" in input;
|
5101
5331
|
if (isCoin2) {
|
5102
5332
|
const assetId = String(input.assetId);
|
5103
|
-
if (
|
5104
|
-
const amount = (0,
|
5333
|
+
if (quantitiesDict[assetId]) {
|
5334
|
+
const amount = (0, import_math19.bn)(input.amount);
|
5105
5335
|
quantitiesDict[assetId].owned = quantitiesDict[assetId].owned.add(amount);
|
5106
|
-
cachedUtxos.push(input.id);
|
5107
5336
|
}
|
5108
|
-
} else if (input.
|
5109
|
-
quantitiesDict[
|
5110
|
-
cachedMessages.push(input.nonce);
|
5337
|
+
} else if (input.amount && quantitiesDict[import_configs12.BaseAssetId]) {
|
5338
|
+
quantitiesDict[import_configs12.BaseAssetId].owned = quantitiesDict[import_configs12.BaseAssetId].owned.add(input.amount);
|
5111
5339
|
}
|
5112
5340
|
}
|
5113
5341
|
});
|
@@ -5122,12 +5350,23 @@ var Account = class extends import_interfaces.AbstractAccount {
|
|
5122
5350
|
});
|
5123
5351
|
const needsToBeFunded = missingQuantities.length;
|
5124
5352
|
if (needsToBeFunded) {
|
5125
|
-
const
|
5126
|
-
|
5127
|
-
|
5128
|
-
|
5129
|
-
|
5353
|
+
const excludedIds = cacheTxInputsFromOwner(txRequest.inputs, this.address.toB256());
|
5354
|
+
const resources = await this.getResourcesToSpend(missingQuantities, excludedIds);
|
5355
|
+
txRequest.addResources(resources);
|
5356
|
+
}
|
5357
|
+
txRequest.shiftPredicateData();
|
5358
|
+
txRequest.updatePredicateGasUsed(estimatedPredicates);
|
5359
|
+
const requestToBeReEstimate = (0, import_ramda4.clone)(txRequest);
|
5360
|
+
if (addedSignatures) {
|
5361
|
+
Array.from({ length: addedSignatures }).forEach(
|
5362
|
+
() => requestToBeReEstimate.addEmptyWitness()
|
5363
|
+
);
|
5130
5364
|
}
|
5365
|
+
const { maxFee } = await this.provider.estimateTxGasAndFee({
|
5366
|
+
transactionRequest: requestToBeReEstimate
|
5367
|
+
});
|
5368
|
+
txRequest.maxFee = maxFee;
|
5369
|
+
return txRequest;
|
5131
5370
|
}
|
5132
5371
|
/**
|
5133
5372
|
* A helper that creates a transfer transaction request and returns it.
|
@@ -5135,29 +5374,25 @@ var Account = class extends import_interfaces.AbstractAccount {
|
|
5135
5374
|
* @param destination - The address of the destination.
|
5136
5375
|
* @param amount - The amount of coins to transfer.
|
5137
5376
|
* @param assetId - The asset ID of the coins to transfer.
|
5138
|
-
* @param txParams - The transaction parameters (gasLimit,
|
5377
|
+
* @param txParams - The transaction parameters (gasLimit, tip, maturity, maxFee, witnessLimit).
|
5139
5378
|
* @returns A promise that resolves to the prepared transaction request.
|
5140
5379
|
*/
|
5141
|
-
async createTransfer(destination, amount, assetId, txParams = {}) {
|
5142
|
-
const
|
5143
|
-
|
5144
|
-
const
|
5145
|
-
const request = new ScriptTransactionRequest(params);
|
5146
|
-
request.addCoinOutput(import_address4.Address.fromAddressOrString(destination), amount, assetIdToTransfer);
|
5147
|
-
const { maxFee, requiredQuantities, gasUsed, estimatedInputs } = await this.provider.getTransactionCost(request, [], {
|
5380
|
+
async createTransfer(destination, amount, assetId = import_configs12.BaseAssetId, txParams = {}) {
|
5381
|
+
const request = new ScriptTransactionRequest(txParams);
|
5382
|
+
request.addCoinOutput(import_address4.Address.fromAddressOrString(destination), amount, assetId);
|
5383
|
+
const txCost = await this.provider.getTransactionCost(request, {
|
5148
5384
|
estimateTxDependencies: true,
|
5149
5385
|
resourcesOwner: this
|
5150
5386
|
});
|
5151
|
-
|
5152
|
-
|
5153
|
-
|
5154
|
-
|
5155
|
-
|
5156
|
-
|
5157
|
-
|
5158
|
-
|
5159
|
-
await this.fund(request,
|
5160
|
-
request.updatePredicateInputs(estimatedInputs);
|
5387
|
+
if ("gasLimit" in txParams) {
|
5388
|
+
this.validateGas({
|
5389
|
+
gasUsed: txCost.gasUsed,
|
5390
|
+
gasLimit: request.gasLimit
|
5391
|
+
});
|
5392
|
+
}
|
5393
|
+
request.gasLimit = txCost.gasUsed;
|
5394
|
+
request.maxFee = txCost.maxFee;
|
5395
|
+
await this.fund(request, txCost);
|
5161
5396
|
return request;
|
5162
5397
|
}
|
5163
5398
|
/**
|
@@ -5169,15 +5404,14 @@ var Account = class extends import_interfaces.AbstractAccount {
|
|
5169
5404
|
* @param txParams - The transaction parameters (gasLimit, gasPrice, maturity).
|
5170
5405
|
* @returns A promise that resolves to the transaction response.
|
5171
5406
|
*/
|
5172
|
-
async transfer(destination, amount, assetId, txParams = {}) {
|
5173
|
-
if ((0,
|
5407
|
+
async transfer(destination, amount, assetId = import_configs12.BaseAssetId, txParams = {}) {
|
5408
|
+
if ((0, import_math19.bn)(amount).lte(0)) {
|
5174
5409
|
throw new import_errors16.FuelError(
|
5175
5410
|
import_errors16.ErrorCode.INVALID_TRANSFER_AMOUNT,
|
5176
5411
|
"Transfer amount must be a positive number."
|
5177
5412
|
);
|
5178
5413
|
}
|
5179
|
-
const
|
5180
|
-
const request = await this.createTransfer(destination, amount, assetIdToTransfer, txParams);
|
5414
|
+
const request = await this.createTransfer(destination, amount, assetId, txParams);
|
5181
5415
|
return this.sendTransaction(request, { estimateTxDependencies: false });
|
5182
5416
|
}
|
5183
5417
|
/**
|
@@ -5189,40 +5423,38 @@ var Account = class extends import_interfaces.AbstractAccount {
|
|
5189
5423
|
* @param txParams - The optional transaction parameters.
|
5190
5424
|
* @returns A promise that resolves to the transaction response.
|
5191
5425
|
*/
|
5192
|
-
async transferToContract(contractId, amount, assetId, txParams = {}) {
|
5193
|
-
if ((0,
|
5426
|
+
async transferToContract(contractId, amount, assetId = import_configs12.BaseAssetId, txParams = {}) {
|
5427
|
+
if ((0, import_math19.bn)(amount).lte(0)) {
|
5194
5428
|
throw new import_errors16.FuelError(
|
5195
5429
|
import_errors16.ErrorCode.INVALID_TRANSFER_AMOUNT,
|
5196
5430
|
"Transfer amount must be a positive number."
|
5197
5431
|
);
|
5198
5432
|
}
|
5199
5433
|
const contractAddress = import_address4.Address.fromAddressOrString(contractId);
|
5200
|
-
const { minGasPrice } = this.provider.getGasConfig();
|
5201
|
-
const assetIdToTransfer = assetId ?? this.provider.getBaseAssetId();
|
5202
|
-
const params = { gasPrice: minGasPrice, ...txParams };
|
5203
5434
|
const { script, scriptData } = await assembleTransferToContractScript({
|
5204
5435
|
hexlifiedContractId: contractAddress.toB256(),
|
5205
|
-
amountToTransfer: (0,
|
5206
|
-
assetId
|
5436
|
+
amountToTransfer: (0, import_math19.bn)(amount),
|
5437
|
+
assetId
|
5207
5438
|
});
|
5208
5439
|
const request = new ScriptTransactionRequest({
|
5209
|
-
...
|
5440
|
+
...txParams,
|
5210
5441
|
script,
|
5211
5442
|
scriptData
|
5212
5443
|
});
|
5213
5444
|
request.addContractInputAndOutput(contractAddress);
|
5214
|
-
const
|
5215
|
-
|
5216
|
-
[{ amount: (0,
|
5217
|
-
);
|
5218
|
-
request.gasLimit = (0, import_math18.bn)(params.gasLimit ?? gasUsed);
|
5219
|
-
this.validateGas({
|
5220
|
-
gasUsed,
|
5221
|
-
gasPrice: request.gasPrice,
|
5222
|
-
gasLimit: request.gasLimit,
|
5223
|
-
minGasPrice
|
5445
|
+
const txCost = await this.provider.getTransactionCost(request, {
|
5446
|
+
resourcesOwner: this,
|
5447
|
+
quantitiesToContract: [{ amount: (0, import_math19.bn)(amount), assetId: String(assetId) }]
|
5224
5448
|
});
|
5225
|
-
|
5449
|
+
if (txParams.gasLimit) {
|
5450
|
+
this.validateGas({
|
5451
|
+
gasUsed: txCost.gasUsed,
|
5452
|
+
gasLimit: request.gasLimit
|
5453
|
+
});
|
5454
|
+
}
|
5455
|
+
request.gasLimit = txCost.gasUsed;
|
5456
|
+
request.maxFee = txCost.maxFee;
|
5457
|
+
await this.fund(request, txCost);
|
5226
5458
|
return this.sendTransaction(request);
|
5227
5459
|
}
|
5228
5460
|
/**
|
@@ -5234,35 +5466,31 @@ var Account = class extends import_interfaces.AbstractAccount {
|
|
5234
5466
|
* @returns A promise that resolves to the transaction response.
|
5235
5467
|
*/
|
5236
5468
|
async withdrawToBaseLayer(recipient, amount, txParams = {}) {
|
5237
|
-
const { minGasPrice } = this.provider.getGasConfig();
|
5238
|
-
const baseAssetId = this.provider.getBaseAssetId();
|
5239
5469
|
const recipientAddress = import_address4.Address.fromAddressOrString(recipient);
|
5240
|
-
const recipientDataArray = (0,
|
5470
|
+
const recipientDataArray = (0, import_utils27.arrayify)(
|
5241
5471
|
"0x".concat(recipientAddress.toHexString().substring(2).padStart(64, "0"))
|
5242
5472
|
);
|
5243
|
-
const amountDataArray = (0,
|
5244
|
-
"0x".concat((0,
|
5473
|
+
const amountDataArray = (0, import_utils27.arrayify)(
|
5474
|
+
"0x".concat((0, import_math19.bn)(amount).toHex().substring(2).padStart(16, "0"))
|
5245
5475
|
);
|
5246
5476
|
const script = new Uint8Array([
|
5247
|
-
...(0,
|
5477
|
+
...(0, import_utils27.arrayify)(withdrawScript.bytes),
|
5248
5478
|
...recipientDataArray,
|
5249
5479
|
...amountDataArray
|
5250
5480
|
]);
|
5251
|
-
const params = { script,
|
5481
|
+
const params = { script, ...txParams };
|
5252
5482
|
const request = new ScriptTransactionRequest(params);
|
5253
|
-
const
|
5254
|
-
const
|
5255
|
-
|
5256
|
-
|
5257
|
-
|
5258
|
-
|
5259
|
-
|
5260
|
-
|
5261
|
-
|
5262
|
-
|
5263
|
-
|
5264
|
-
});
|
5265
|
-
await this.fund(request, requiredQuantities, maxFee);
|
5483
|
+
const quantitiesToContract = [{ amount: (0, import_math19.bn)(amount), assetId: import_configs12.BaseAssetId }];
|
5484
|
+
const txCost = await this.provider.getTransactionCost(request, { quantitiesToContract });
|
5485
|
+
if (txParams.gasLimit) {
|
5486
|
+
this.validateGas({
|
5487
|
+
gasUsed: txCost.gasUsed,
|
5488
|
+
gasLimit: request.gasLimit
|
5489
|
+
});
|
5490
|
+
}
|
5491
|
+
request.maxFee = txCost.maxFee;
|
5492
|
+
request.gasLimit = txCost.gasUsed;
|
5493
|
+
await this.fund(request, txCost);
|
5266
5494
|
return this.sendTransaction(request);
|
5267
5495
|
}
|
5268
5496
|
async signMessage(message) {
|
@@ -5320,18 +5548,7 @@ var Account = class extends import_interfaces.AbstractAccount {
|
|
5320
5548
|
}
|
5321
5549
|
return this.provider.simulate(transactionRequest, { estimateTxDependencies: false });
|
5322
5550
|
}
|
5323
|
-
validateGas({
|
5324
|
-
gasUsed,
|
5325
|
-
gasPrice,
|
5326
|
-
gasLimit,
|
5327
|
-
minGasPrice
|
5328
|
-
}) {
|
5329
|
-
if (minGasPrice.gt(gasPrice)) {
|
5330
|
-
throw new import_errors16.FuelError(
|
5331
|
-
import_errors16.ErrorCode.GAS_PRICE_TOO_LOW,
|
5332
|
-
`Gas price '${gasPrice}' is lower than the required: '${minGasPrice}'.`
|
5333
|
-
);
|
5334
|
-
}
|
5551
|
+
validateGas({ gasUsed, gasLimit }) {
|
5335
5552
|
if (gasUsed.gt(gasLimit)) {
|
5336
5553
|
throw new import_errors16.FuelError(
|
5337
5554
|
import_errors16.ErrorCode.GAS_LIMIT_TOO_LOW,
|
@@ -5343,14 +5560,14 @@ var Account = class extends import_interfaces.AbstractAccount {
|
|
5343
5560
|
|
5344
5561
|
// src/wallet/base-wallet-unlocked.ts
|
5345
5562
|
var import_hasher3 = require("@fuel-ts/hasher");
|
5346
|
-
var
|
5563
|
+
var import_utils30 = require("@fuel-ts/utils");
|
5347
5564
|
|
5348
5565
|
// src/signer/signer.ts
|
5349
5566
|
var import_address5 = require("@fuel-ts/address");
|
5350
5567
|
var import_crypto = require("@fuel-ts/crypto");
|
5351
5568
|
var import_hasher2 = require("@fuel-ts/hasher");
|
5352
|
-
var
|
5353
|
-
var
|
5569
|
+
var import_math20 = require("@fuel-ts/math");
|
5570
|
+
var import_utils28 = require("@fuel-ts/utils");
|
5354
5571
|
var import_secp256k1 = require("@noble/curves/secp256k1");
|
5355
5572
|
var Signer = class {
|
5356
5573
|
address;
|
@@ -5369,10 +5586,10 @@ var Signer = class {
|
|
5369
5586
|
privateKey = `0x${privateKey}`;
|
5370
5587
|
}
|
5371
5588
|
}
|
5372
|
-
const privateKeyBytes = (0,
|
5373
|
-
this.privateKey = (0,
|
5374
|
-
this.publicKey = (0,
|
5375
|
-
this.compressedPublicKey = (0,
|
5589
|
+
const privateKeyBytes = (0, import_math20.toBytes)(privateKey, 32);
|
5590
|
+
this.privateKey = (0, import_utils28.hexlify)(privateKeyBytes);
|
5591
|
+
this.publicKey = (0, import_utils28.hexlify)(import_secp256k1.secp256k1.getPublicKey(privateKeyBytes, false).slice(1));
|
5592
|
+
this.compressedPublicKey = (0, import_utils28.hexlify)(import_secp256k1.secp256k1.getPublicKey(privateKeyBytes, true));
|
5376
5593
|
this.address = import_address5.Address.fromPublicKey(this.publicKey);
|
5377
5594
|
}
|
5378
5595
|
/**
|
@@ -5386,11 +5603,11 @@ var Signer = class {
|
|
5386
5603
|
* @returns hashed signature
|
5387
5604
|
*/
|
5388
5605
|
sign(data) {
|
5389
|
-
const signature = import_secp256k1.secp256k1.sign((0,
|
5390
|
-
const r = (0,
|
5391
|
-
const s = (0,
|
5606
|
+
const signature = import_secp256k1.secp256k1.sign((0, import_utils28.arrayify)(data), (0, import_utils28.arrayify)(this.privateKey));
|
5607
|
+
const r = (0, import_math20.toBytes)(`0x${signature.r.toString(16)}`, 32);
|
5608
|
+
const s = (0, import_math20.toBytes)(`0x${signature.s.toString(16)}`, 32);
|
5392
5609
|
s[0] |= (signature.recovery || 0) << 7;
|
5393
|
-
return (0,
|
5610
|
+
return (0, import_utils28.hexlify)((0, import_utils28.concat)([r, s]));
|
5394
5611
|
}
|
5395
5612
|
/**
|
5396
5613
|
* Add point on the current elliptic curve
|
@@ -5399,8 +5616,8 @@ var Signer = class {
|
|
5399
5616
|
* @returns compressed point on the curve
|
5400
5617
|
*/
|
5401
5618
|
addPoint(point) {
|
5402
|
-
const p0 = import_secp256k1.secp256k1.ProjectivePoint.fromHex((0,
|
5403
|
-
const p1 = import_secp256k1.secp256k1.ProjectivePoint.fromHex((0,
|
5619
|
+
const p0 = import_secp256k1.secp256k1.ProjectivePoint.fromHex((0, import_utils28.arrayify)(this.compressedPublicKey));
|
5620
|
+
const p1 = import_secp256k1.secp256k1.ProjectivePoint.fromHex((0, import_utils28.arrayify)(point));
|
5404
5621
|
const result = p0.add(p1);
|
5405
5622
|
return `0x${result.toHex(true)}`;
|
5406
5623
|
}
|
@@ -5412,16 +5629,16 @@ var Signer = class {
|
|
5412
5629
|
* @returns public key from signature from the
|
5413
5630
|
*/
|
5414
5631
|
static recoverPublicKey(data, signature) {
|
5415
|
-
const signedMessageBytes = (0,
|
5632
|
+
const signedMessageBytes = (0, import_utils28.arrayify)(signature);
|
5416
5633
|
const r = signedMessageBytes.slice(0, 32);
|
5417
5634
|
const s = signedMessageBytes.slice(32, 64);
|
5418
5635
|
const recoveryParam = (s[0] & 128) >> 7;
|
5419
5636
|
s[0] &= 127;
|
5420
|
-
const sig = new import_secp256k1.secp256k1.Signature(BigInt((0,
|
5637
|
+
const sig = new import_secp256k1.secp256k1.Signature(BigInt((0, import_utils28.hexlify)(r)), BigInt((0, import_utils28.hexlify)(s))).addRecoveryBit(
|
5421
5638
|
recoveryParam
|
5422
5639
|
);
|
5423
|
-
const publicKey = sig.recoverPublicKey((0,
|
5424
|
-
return (0,
|
5640
|
+
const publicKey = sig.recoverPublicKey((0, import_utils28.arrayify)(data)).toRawBytes(false).slice(1);
|
5641
|
+
return (0, import_utils28.hexlify)(publicKey);
|
5425
5642
|
}
|
5426
5643
|
/**
|
5427
5644
|
* Recover the address from a signature performed with [`sign`](#sign).
|
@@ -5440,7 +5657,7 @@ var Signer = class {
|
|
5440
5657
|
* @returns random 32-byte hashed
|
5441
5658
|
*/
|
5442
5659
|
static generatePrivateKey(entropy) {
|
5443
|
-
return entropy ? (0, import_hasher2.hash)((0,
|
5660
|
+
return entropy ? (0, import_hasher2.hash)((0, import_utils28.concat)([(0, import_crypto.randomBytes)(32), (0, import_utils28.arrayify)(entropy)])) : (0, import_crypto.randomBytes)(32);
|
5444
5661
|
}
|
5445
5662
|
/**
|
5446
5663
|
* Extended publicKey from a compact publicKey
|
@@ -5449,8 +5666,8 @@ var Signer = class {
|
|
5449
5666
|
* @returns extended publicKey
|
5450
5667
|
*/
|
5451
5668
|
static extendPublicKey(publicKey) {
|
5452
|
-
const point = import_secp256k1.secp256k1.ProjectivePoint.fromHex((0,
|
5453
|
-
return (0,
|
5669
|
+
const point = import_secp256k1.secp256k1.ProjectivePoint.fromHex((0, import_utils28.arrayify)(publicKey));
|
5670
|
+
return (0, import_utils28.hexlify)(point.toRawBytes(false).slice(1));
|
5454
5671
|
}
|
5455
5672
|
};
|
5456
5673
|
|
@@ -5458,7 +5675,7 @@ var Signer = class {
|
|
5458
5675
|
var import_address6 = require("@fuel-ts/address");
|
5459
5676
|
var import_crypto2 = require("@fuel-ts/crypto");
|
5460
5677
|
var import_errors17 = require("@fuel-ts/errors");
|
5461
|
-
var
|
5678
|
+
var import_utils29 = require("@fuel-ts/utils");
|
5462
5679
|
var import_uuid = require("uuid");
|
5463
5680
|
var DEFAULT_KDF_PARAMS_LOG_N = 13;
|
5464
5681
|
var DEFAULT_KDF_PARAMS_R = 8;
|
@@ -5541,7 +5758,7 @@ async function decryptKeystoreWallet(jsonWallet, password) {
|
|
5541
5758
|
);
|
5542
5759
|
}
|
5543
5760
|
const buffer = await (0, import_crypto2.decryptJsonWalletData)(ciphertextBuffer, key, ivBuffer);
|
5544
|
-
const privateKey = (0,
|
5761
|
+
const privateKey = (0, import_utils29.hexlify)(buffer);
|
5545
5762
|
return privateKey;
|
5546
5763
|
}
|
5547
5764
|
|
@@ -5586,7 +5803,7 @@ var BaseWalletUnlocked = class extends Account {
|
|
5586
5803
|
*/
|
5587
5804
|
async signMessage(message) {
|
5588
5805
|
const signedMessage = await this.signer().sign((0, import_hasher3.hashMessage)(message));
|
5589
|
-
return (0,
|
5806
|
+
return (0, import_utils30.hexlify)(signedMessage);
|
5590
5807
|
}
|
5591
5808
|
/**
|
5592
5809
|
* Signs a transaction with the wallet's private key.
|
@@ -5599,7 +5816,7 @@ var BaseWalletUnlocked = class extends Account {
|
|
5599
5816
|
const chainId = this.provider.getChainId();
|
5600
5817
|
const hashedTransaction = transactionRequest.getTransactionId(chainId);
|
5601
5818
|
const signature = await this.signer().sign(hashedTransaction);
|
5602
|
-
return (0,
|
5819
|
+
return (0, import_utils30.hexlify)(signature);
|
5603
5820
|
}
|
5604
5821
|
/**
|
5605
5822
|
* Populates a transaction with the witnesses signature.
|
@@ -5619,7 +5836,7 @@ var BaseWalletUnlocked = class extends Account {
|
|
5619
5836
|
* @param transactionRequestLike - The transaction request to send.
|
5620
5837
|
* @returns A promise that resolves to the TransactionResponse object.
|
5621
5838
|
*/
|
5622
|
-
async sendTransaction(transactionRequestLike, { estimateTxDependencies =
|
5839
|
+
async sendTransaction(transactionRequestLike, { estimateTxDependencies = false, awaitExecution } = {}) {
|
5623
5840
|
const transactionRequest = transactionRequestify(transactionRequestLike);
|
5624
5841
|
if (estimateTxDependencies) {
|
5625
5842
|
await this.provider.estimateTxDependencies(transactionRequest);
|
@@ -5660,16 +5877,16 @@ __publicField(BaseWalletUnlocked, "defaultPath", "m/44'/1179993420'/0'/0/0");
|
|
5660
5877
|
// src/hdwallet/hdwallet.ts
|
5661
5878
|
var import_errors20 = require("@fuel-ts/errors");
|
5662
5879
|
var import_hasher6 = require("@fuel-ts/hasher");
|
5663
|
-
var
|
5664
|
-
var
|
5665
|
-
var
|
5880
|
+
var import_math21 = require("@fuel-ts/math");
|
5881
|
+
var import_utils34 = require("@fuel-ts/utils");
|
5882
|
+
var import_ethers4 = require("ethers");
|
5666
5883
|
|
5667
5884
|
// src/mnemonic/mnemonic.ts
|
5668
5885
|
var import_crypto3 = require("@fuel-ts/crypto");
|
5669
5886
|
var import_errors19 = require("@fuel-ts/errors");
|
5670
5887
|
var import_hasher5 = require("@fuel-ts/hasher");
|
5671
|
-
var
|
5672
|
-
var
|
5888
|
+
var import_utils32 = require("@fuel-ts/utils");
|
5889
|
+
var import_ethers3 = require("ethers");
|
5673
5890
|
|
5674
5891
|
// src/wordlists/words/english.ts
|
5675
5892
|
var english = [
|
@@ -7732,7 +7949,7 @@ var Language = /* @__PURE__ */ ((Language2) => {
|
|
7732
7949
|
// src/mnemonic/utils.ts
|
7733
7950
|
var import_errors18 = require("@fuel-ts/errors");
|
7734
7951
|
var import_hasher4 = require("@fuel-ts/hasher");
|
7735
|
-
var
|
7952
|
+
var import_utils31 = require("@fuel-ts/utils");
|
7736
7953
|
function toUtf8Bytes(stri) {
|
7737
7954
|
const str = stri.normalize("NFKD");
|
7738
7955
|
const result = [];
|
@@ -7799,14 +8016,14 @@ function entropyToMnemonicIndices(entropy) {
|
|
7799
8016
|
}
|
7800
8017
|
}
|
7801
8018
|
const checksumBits = entropy.length / 4;
|
7802
|
-
const checksum = (0,
|
8019
|
+
const checksum = (0, import_utils31.arrayify)((0, import_hasher4.sha256)(entropy))[0] & getUpperMask(checksumBits);
|
7803
8020
|
indices[indices.length - 1] <<= checksumBits;
|
7804
8021
|
indices[indices.length - 1] |= checksum >> 8 - checksumBits;
|
7805
8022
|
return indices;
|
7806
8023
|
}
|
7807
8024
|
function mnemonicWordsToEntropy(words, wordlist) {
|
7808
8025
|
const size = Math.ceil(11 * words.length / 8);
|
7809
|
-
const entropy = (0,
|
8026
|
+
const entropy = (0, import_utils31.arrayify)(new Uint8Array(size));
|
7810
8027
|
let offset = 0;
|
7811
8028
|
for (let i = 0; i < words.length; i += 1) {
|
7812
8029
|
const index = wordlist.indexOf(words[i].normalize("NFKD"));
|
@@ -7826,7 +8043,7 @@ function mnemonicWordsToEntropy(words, wordlist) {
|
|
7826
8043
|
const entropyBits = 32 * words.length / 3;
|
7827
8044
|
const checksumBits = words.length / 3;
|
7828
8045
|
const checksumMask = getUpperMask(checksumBits);
|
7829
|
-
const checksum = (0,
|
8046
|
+
const checksum = (0, import_utils31.arrayify)((0, import_hasher4.sha256)(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;
|
7830
8047
|
if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {
|
7831
8048
|
throw new import_errors18.FuelError(
|
7832
8049
|
import_errors18.ErrorCode.INVALID_CHECKSUM,
|
@@ -7901,7 +8118,7 @@ var Mnemonic = class {
|
|
7901
8118
|
static mnemonicToEntropy(phrase, wordlist = english) {
|
7902
8119
|
const words = getWords(phrase);
|
7903
8120
|
assertMnemonic(words);
|
7904
|
-
return (0,
|
8121
|
+
return (0, import_utils32.hexlify)(mnemonicWordsToEntropy(words, wordlist));
|
7905
8122
|
}
|
7906
8123
|
/**
|
7907
8124
|
* @param entropy - Entropy source to the mnemonic phrase.
|
@@ -7909,7 +8126,7 @@ var Mnemonic = class {
|
|
7909
8126
|
* @returns 64-byte array contains privateKey and chainCode as described on BIP39
|
7910
8127
|
*/
|
7911
8128
|
static entropyToMnemonic(entropy, wordlist = english) {
|
7912
|
-
const entropyBytes = (0,
|
8129
|
+
const entropyBytes = (0, import_utils32.arrayify)(entropy);
|
7913
8130
|
assertWordList(wordlist);
|
7914
8131
|
assertEntropy(entropyBytes);
|
7915
8132
|
return entropyToMnemonicIndices(entropyBytes).map((i) => wordlist[i]).join(" ");
|
@@ -7923,7 +8140,7 @@ var Mnemonic = class {
|
|
7923
8140
|
assertMnemonic(getWords(phrase));
|
7924
8141
|
const phraseBytes = toUtf8Bytes(getPhrase(phrase));
|
7925
8142
|
const salt = toUtf8Bytes(`mnemonic${passphrase}`);
|
7926
|
-
return (0,
|
8143
|
+
return (0, import_ethers3.pbkdf2)(phraseBytes, salt, 2048, 64, "sha512");
|
7927
8144
|
}
|
7928
8145
|
/**
|
7929
8146
|
* @param phrase - Mnemonic phrase composed by words from the provided wordlist
|
@@ -7978,14 +8195,14 @@ var Mnemonic = class {
|
|
7978
8195
|
* @returns 64-byte array contains privateKey and chainCode as described on BIP39
|
7979
8196
|
*/
|
7980
8197
|
static masterKeysFromSeed(seed) {
|
7981
|
-
const seedArray = (0,
|
8198
|
+
const seedArray = (0, import_utils32.arrayify)(seed);
|
7982
8199
|
if (seedArray.length < 16 || seedArray.length > 64) {
|
7983
8200
|
throw new import_errors19.FuelError(
|
7984
8201
|
import_errors19.ErrorCode.INVALID_SEED,
|
7985
8202
|
`Seed length should be between 16 and 64 bytes, but received ${seedArray.length} bytes.`
|
7986
8203
|
);
|
7987
8204
|
}
|
7988
|
-
return (0,
|
8205
|
+
return (0, import_utils32.arrayify)((0, import_ethers3.computeHmac)("sha512", MasterSecret, seedArray));
|
7989
8206
|
}
|
7990
8207
|
/**
|
7991
8208
|
* Get the extendKey as defined on BIP-32 from the provided seed
|
@@ -7996,22 +8213,22 @@ var Mnemonic = class {
|
|
7996
8213
|
*/
|
7997
8214
|
static seedToExtendedKey(seed, testnet = false) {
|
7998
8215
|
const masterKey = Mnemonic.masterKeysFromSeed(seed);
|
7999
|
-
const prefix = (0,
|
8216
|
+
const prefix = (0, import_utils32.arrayify)(testnet ? TestnetPRV : MainnetPRV);
|
8000
8217
|
const depth = "0x00";
|
8001
8218
|
const fingerprint = "0x00000000";
|
8002
8219
|
const index = "0x00000000";
|
8003
8220
|
const chainCode = masterKey.slice(32);
|
8004
8221
|
const privateKey = masterKey.slice(0, 32);
|
8005
|
-
const extendedKey = (0,
|
8222
|
+
const extendedKey = (0, import_utils32.concat)([
|
8006
8223
|
prefix,
|
8007
8224
|
depth,
|
8008
8225
|
fingerprint,
|
8009
8226
|
index,
|
8010
8227
|
chainCode,
|
8011
|
-
(0,
|
8228
|
+
(0, import_utils32.concat)(["0x00", privateKey])
|
8012
8229
|
]);
|
8013
|
-
const checksum = (0,
|
8014
|
-
return (0,
|
8230
|
+
const checksum = (0, import_ethers3.dataSlice)((0, import_hasher5.sha256)((0, import_hasher5.sha256)(extendedKey)), 0, 4);
|
8231
|
+
return (0, import_ethers3.encodeBase58)((0, import_utils32.concat)([extendedKey, checksum]));
|
8015
8232
|
}
|
8016
8233
|
/**
|
8017
8234
|
* Create a new mnemonic using a randomly generated number as entropy.
|
@@ -8026,7 +8243,7 @@ var Mnemonic = class {
|
|
8026
8243
|
* @returns A randomly generated mnemonic
|
8027
8244
|
*/
|
8028
8245
|
static generate(size = 32, extraEntropy = "") {
|
8029
|
-
const entropy = extraEntropy ? (0, import_hasher5.sha256)((0,
|
8246
|
+
const entropy = extraEntropy ? (0, import_hasher5.sha256)((0, import_utils32.concat)([(0, import_crypto3.randomBytes)(size), (0, import_utils32.arrayify)(extraEntropy)])) : (0, import_crypto3.randomBytes)(size);
|
8030
8247
|
return Mnemonic.entropyToMnemonic(entropy);
|
8031
8248
|
}
|
8032
8249
|
};
|
@@ -8034,12 +8251,12 @@ var mnemonic_default = Mnemonic;
|
|
8034
8251
|
|
8035
8252
|
// src/hdwallet/hdwallet.ts
|
8036
8253
|
var HARDENED_INDEX = 2147483648;
|
8037
|
-
var MainnetPRV2 = (0,
|
8038
|
-
var MainnetPUB = (0,
|
8039
|
-
var TestnetPRV2 = (0,
|
8040
|
-
var TestnetPUB = (0,
|
8254
|
+
var MainnetPRV2 = (0, import_utils34.hexlify)("0x0488ade4");
|
8255
|
+
var MainnetPUB = (0, import_utils34.hexlify)("0x0488b21e");
|
8256
|
+
var TestnetPRV2 = (0, import_utils34.hexlify)("0x04358394");
|
8257
|
+
var TestnetPUB = (0, import_utils34.hexlify)("0x043587cf");
|
8041
8258
|
function base58check(data) {
|
8042
|
-
return (0,
|
8259
|
+
return (0, import_ethers4.encodeBase58)((0, import_utils34.concat)([data, (0, import_ethers4.dataSlice)((0, import_hasher6.sha256)((0, import_hasher6.sha256)(data)), 0, 4)]));
|
8043
8260
|
}
|
8044
8261
|
function getExtendedKeyPrefix(isPublic = false, testnet = false) {
|
8045
8262
|
if (isPublic) {
|
@@ -8048,11 +8265,11 @@ function getExtendedKeyPrefix(isPublic = false, testnet = false) {
|
|
8048
8265
|
return testnet ? TestnetPRV2 : MainnetPRV2;
|
8049
8266
|
}
|
8050
8267
|
function isPublicExtendedKey(extendedKey) {
|
8051
|
-
return [MainnetPUB, TestnetPUB].includes((0,
|
8268
|
+
return [MainnetPUB, TestnetPUB].includes((0, import_utils34.hexlify)(extendedKey.slice(0, 4)));
|
8052
8269
|
}
|
8053
8270
|
function isValidExtendedKey(extendedKey) {
|
8054
8271
|
return [MainnetPRV2, TestnetPRV2, MainnetPUB, TestnetPUB].includes(
|
8055
|
-
(0,
|
8272
|
+
(0, import_utils34.hexlify)(extendedKey.slice(0, 4))
|
8056
8273
|
);
|
8057
8274
|
}
|
8058
8275
|
function parsePath(path, depth = 0) {
|
@@ -8070,8 +8287,8 @@ function parsePath(path, depth = 0) {
|
|
8070
8287
|
var HDWallet = class {
|
8071
8288
|
depth = 0;
|
8072
8289
|
index = 0;
|
8073
|
-
fingerprint = (0,
|
8074
|
-
parentFingerprint = (0,
|
8290
|
+
fingerprint = (0, import_utils34.hexlify)("0x00000000");
|
8291
|
+
parentFingerprint = (0, import_utils34.hexlify)("0x00000000");
|
8075
8292
|
privateKey;
|
8076
8293
|
publicKey;
|
8077
8294
|
chainCode;
|
@@ -8083,8 +8300,8 @@ var HDWallet = class {
|
|
8083
8300
|
constructor(config) {
|
8084
8301
|
if (config.privateKey) {
|
8085
8302
|
const signer = new Signer(config.privateKey);
|
8086
|
-
this.publicKey = (0,
|
8087
|
-
this.privateKey = (0,
|
8303
|
+
this.publicKey = (0, import_utils34.hexlify)(signer.compressedPublicKey);
|
8304
|
+
this.privateKey = (0, import_utils34.hexlify)(config.privateKey);
|
8088
8305
|
} else {
|
8089
8306
|
if (!config.publicKey) {
|
8090
8307
|
throw new import_errors20.FuelError(
|
@@ -8092,10 +8309,10 @@ var HDWallet = class {
|
|
8092
8309
|
"Both public and private Key cannot be missing. At least one should be provided."
|
8093
8310
|
);
|
8094
8311
|
}
|
8095
|
-
this.publicKey = (0,
|
8312
|
+
this.publicKey = (0, import_utils34.hexlify)(config.publicKey);
|
8096
8313
|
}
|
8097
8314
|
this.parentFingerprint = config.parentFingerprint || this.parentFingerprint;
|
8098
|
-
this.fingerprint = (0,
|
8315
|
+
this.fingerprint = (0, import_ethers4.dataSlice)((0, import_ethers4.ripemd160)((0, import_hasher6.sha256)(this.publicKey)), 0, 4);
|
8099
8316
|
this.depth = config.depth || this.depth;
|
8100
8317
|
this.index = config.index || this.index;
|
8101
8318
|
this.chainCode = config.chainCode;
|
@@ -8111,9 +8328,9 @@ var HDWallet = class {
|
|
8111
8328
|
* @returns A new instance of HDWallet on the derived index
|
8112
8329
|
*/
|
8113
8330
|
deriveIndex(index) {
|
8114
|
-
const privateKey = this.privateKey && (0,
|
8115
|
-
const publicKey = (0,
|
8116
|
-
const chainCode = (0,
|
8331
|
+
const privateKey = this.privateKey && (0, import_utils34.arrayify)(this.privateKey);
|
8332
|
+
const publicKey = (0, import_utils34.arrayify)(this.publicKey);
|
8333
|
+
const chainCode = (0, import_utils34.arrayify)(this.chainCode);
|
8117
8334
|
const data = new Uint8Array(37);
|
8118
8335
|
if (index & HARDENED_INDEX) {
|
8119
8336
|
if (!privateKey) {
|
@@ -8124,15 +8341,15 @@ var HDWallet = class {
|
|
8124
8341
|
}
|
8125
8342
|
data.set(privateKey, 1);
|
8126
8343
|
} else {
|
8127
|
-
data.set((0,
|
8344
|
+
data.set((0, import_utils34.arrayify)(this.publicKey));
|
8128
8345
|
}
|
8129
|
-
data.set((0,
|
8130
|
-
const bytes = (0,
|
8346
|
+
data.set((0, import_math21.toBytes)(index, 4), 33);
|
8347
|
+
const bytes = (0, import_utils34.arrayify)((0, import_ethers4.computeHmac)("sha512", chainCode, data));
|
8131
8348
|
const IL = bytes.slice(0, 32);
|
8132
8349
|
const IR = bytes.slice(32);
|
8133
8350
|
if (privateKey) {
|
8134
8351
|
const N = "0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141";
|
8135
|
-
const ki = (0,
|
8352
|
+
const ki = (0, import_math21.bn)(IL).add(privateKey).mod(N).toBytes(32);
|
8136
8353
|
return new HDWallet({
|
8137
8354
|
privateKey: ki,
|
8138
8355
|
chainCode: IR,
|
@@ -8141,7 +8358,7 @@ var HDWallet = class {
|
|
8141
8358
|
parentFingerprint: this.fingerprint
|
8142
8359
|
});
|
8143
8360
|
}
|
8144
|
-
const signer = new Signer((0,
|
8361
|
+
const signer = new Signer((0, import_utils34.hexlify)(IL));
|
8145
8362
|
const Ki = signer.addPoint(publicKey);
|
8146
8363
|
return new HDWallet({
|
8147
8364
|
publicKey: Ki,
|
@@ -8176,12 +8393,12 @@ var HDWallet = class {
|
|
8176
8393
|
);
|
8177
8394
|
}
|
8178
8395
|
const prefix = getExtendedKeyPrefix(this.privateKey == null || isPublic, testnet);
|
8179
|
-
const depth = (0,
|
8396
|
+
const depth = (0, import_utils34.hexlify)(Uint8Array.from([this.depth]));
|
8180
8397
|
const parentFingerprint = this.parentFingerprint;
|
8181
|
-
const index = (0,
|
8398
|
+
const index = (0, import_math21.toHex)(this.index, 4);
|
8182
8399
|
const chainCode = this.chainCode;
|
8183
|
-
const key = this.privateKey != null && !isPublic ? (0,
|
8184
|
-
const extendedKey = (0,
|
8400
|
+
const key = this.privateKey != null && !isPublic ? (0, import_utils34.concat)(["0x00", this.privateKey]) : this.publicKey;
|
8401
|
+
const extendedKey = (0, import_utils34.arrayify)((0, import_utils34.concat)([prefix, depth, parentFingerprint, index, chainCode, key]));
|
8185
8402
|
return base58check(extendedKey);
|
8186
8403
|
}
|
8187
8404
|
/**
|
@@ -8193,13 +8410,13 @@ var HDWallet = class {
|
|
8193
8410
|
static fromSeed(seed) {
|
8194
8411
|
const masterKey = mnemonic_default.masterKeysFromSeed(seed);
|
8195
8412
|
return new HDWallet({
|
8196
|
-
chainCode: (0,
|
8197
|
-
privateKey: (0,
|
8413
|
+
chainCode: (0, import_utils34.arrayify)(masterKey.slice(32)),
|
8414
|
+
privateKey: (0, import_utils34.arrayify)(masterKey.slice(0, 32))
|
8198
8415
|
});
|
8199
8416
|
}
|
8200
8417
|
static fromExtendedKey(extendedKey) {
|
8201
|
-
const decoded = (0,
|
8202
|
-
const bytes = (0,
|
8418
|
+
const decoded = (0, import_ethers4.toBeHex)((0, import_ethers4.decodeBase58)(extendedKey));
|
8419
|
+
const bytes = (0, import_utils34.arrayify)(decoded);
|
8203
8420
|
const validChecksum = base58check(bytes.slice(0, 78)) === extendedKey;
|
8204
8421
|
if (bytes.length !== 82 || !isValidExtendedKey(bytes)) {
|
8205
8422
|
throw new import_errors20.FuelError(import_errors20.ErrorCode.HD_WALLET_ERROR, "Provided key is not a valid extended key.");
|
@@ -8208,9 +8425,9 @@ var HDWallet = class {
|
|
8208
8425
|
throw new import_errors20.FuelError(import_errors20.ErrorCode.HD_WALLET_ERROR, "Provided key has an invalid checksum.");
|
8209
8426
|
}
|
8210
8427
|
const depth = bytes[4];
|
8211
|
-
const parentFingerprint = (0,
|
8212
|
-
const index = parseInt((0,
|
8213
|
-
const chainCode = (0,
|
8428
|
+
const parentFingerprint = (0, import_utils34.hexlify)(bytes.slice(5, 9));
|
8429
|
+
const index = parseInt((0, import_utils34.hexlify)(bytes.slice(9, 13)).substring(2), 16);
|
8430
|
+
const chainCode = (0, import_utils34.hexlify)(bytes.slice(13, 45));
|
8214
8431
|
const key = bytes.slice(45, 78);
|
8215
8432
|
if (depth === 0 && parentFingerprint !== "0x00000000" || depth === 0 && index !== 0) {
|
8216
8433
|
throw new import_errors20.FuelError(
|
@@ -8813,20 +9030,21 @@ var StorageAbstract = class {
|
|
8813
9030
|
// src/predicate/predicate.ts
|
8814
9031
|
var import_abi_coder5 = require("@fuel-ts/abi-coder");
|
8815
9032
|
var import_address10 = require("@fuel-ts/address");
|
9033
|
+
var import_configs13 = require("@fuel-ts/address/configs");
|
8816
9034
|
var import_errors25 = require("@fuel-ts/errors");
|
8817
|
-
var
|
8818
|
-
var
|
9035
|
+
var import_transactions21 = require("@fuel-ts/transactions");
|
9036
|
+
var import_utils36 = require("@fuel-ts/utils");
|
8819
9037
|
|
8820
9038
|
// src/predicate/utils/getPredicateRoot.ts
|
8821
9039
|
var import_hasher7 = require("@fuel-ts/hasher");
|
8822
9040
|
var import_merkle = require("@fuel-ts/merkle");
|
8823
|
-
var
|
9041
|
+
var import_utils35 = require("@fuel-ts/utils");
|
8824
9042
|
var getPredicateRoot = (bytecode) => {
|
8825
9043
|
const chunkSize = 16 * 1024;
|
8826
|
-
const bytes = (0,
|
8827
|
-
const chunks = (0,
|
8828
|
-
const codeRoot = (0, import_merkle.calcRoot)(chunks.map((c) => (0,
|
8829
|
-
const predicateRoot = (0, import_hasher7.hash)((0,
|
9044
|
+
const bytes = (0, import_utils35.arrayify)(bytecode);
|
9045
|
+
const chunks = (0, import_utils35.chunkAndPadBytes)(bytes, chunkSize);
|
9046
|
+
const codeRoot = (0, import_merkle.calcRoot)(chunks.map((c) => (0, import_utils35.hexlify)(c)));
|
9047
|
+
const predicateRoot = (0, import_hasher7.hash)((0, import_utils35.concat)(["0x4655454C", codeRoot]));
|
8830
9048
|
return predicateRoot;
|
8831
9049
|
};
|
8832
9050
|
|
@@ -8863,6 +9081,7 @@ var Predicate = class extends Account {
|
|
8863
9081
|
this.interface = predicateInterface;
|
8864
9082
|
if (inputData !== void 0 && inputData.length > 0) {
|
8865
9083
|
this.predicateData = inputData;
|
9084
|
+
this.predicateDataBytes = this.getPredicateData(0);
|
8866
9085
|
}
|
8867
9086
|
}
|
8868
9087
|
/**
|
@@ -8875,9 +9094,9 @@ var Predicate = class extends Account {
|
|
8875
9094
|
const request = transactionRequestify(transactionRequestLike);
|
8876
9095
|
const { policies } = BaseTransactionRequest.getPolicyMeta(request);
|
8877
9096
|
request.inputs?.forEach((input) => {
|
8878
|
-
if (input.type ===
|
8879
|
-
input.predicate = this.bytes;
|
8880
|
-
input.predicateData = this.getPredicateData(policies.length);
|
9097
|
+
if (input.type === import_transactions21.InputType.Coin && (0, import_utils36.hexlify)(input.owner) === this.address.toB256()) {
|
9098
|
+
input.predicate = (0, import_utils36.hexlify)(this.bytes);
|
9099
|
+
input.predicateData = (0, import_utils36.hexlify)(this.getPredicateData(policies.length));
|
8881
9100
|
}
|
8882
9101
|
});
|
8883
9102
|
return request;
|
@@ -8891,10 +9110,8 @@ var Predicate = class extends Account {
|
|
8891
9110
|
* @param txParams - The transaction parameters (gasLimit, gasPrice, maturity).
|
8892
9111
|
* @returns A promise that resolves to the prepared transaction request.
|
8893
9112
|
*/
|
8894
|
-
async createTransfer(destination, amount, assetId, txParams = {}) {
|
8895
|
-
|
8896
|
-
const request = await super.createTransfer(destination, amount, assetIdToTransfer, txParams);
|
8897
|
-
return this.populateTransactionPredicateData(request);
|
9113
|
+
async createTransfer(destination, amount, assetId = import_configs13.BaseAssetId, txParams = {}) {
|
9114
|
+
return super.createTransfer(destination, amount, assetId, txParams);
|
8898
9115
|
}
|
8899
9116
|
/**
|
8900
9117
|
* Sends a transaction with the populated predicate data.
|
@@ -8902,9 +9119,9 @@ var Predicate = class extends Account {
|
|
8902
9119
|
* @param transactionRequestLike - The transaction request-like object.
|
8903
9120
|
* @returns A promise that resolves to the transaction response.
|
8904
9121
|
*/
|
8905
|
-
sendTransaction(transactionRequestLike
|
8906
|
-
const transactionRequest =
|
8907
|
-
return super.sendTransaction(transactionRequest,
|
9122
|
+
sendTransaction(transactionRequestLike) {
|
9123
|
+
const transactionRequest = transactionRequestify(transactionRequestLike);
|
9124
|
+
return super.sendTransaction(transactionRequest, { estimateTxDependencies: false });
|
8908
9125
|
}
|
8909
9126
|
/**
|
8910
9127
|
* Simulates a transaction with the populated predicate data.
|
@@ -8913,15 +9130,15 @@ var Predicate = class extends Account {
|
|
8913
9130
|
* @returns A promise that resolves to the call result.
|
8914
9131
|
*/
|
8915
9132
|
simulateTransaction(transactionRequestLike) {
|
8916
|
-
const transactionRequest =
|
8917
|
-
return super.simulateTransaction(transactionRequest);
|
9133
|
+
const transactionRequest = transactionRequestify(transactionRequestLike);
|
9134
|
+
return super.simulateTransaction(transactionRequest, { estimateTxDependencies: false });
|
8918
9135
|
}
|
8919
9136
|
getPredicateData(policiesLength) {
|
8920
9137
|
if (!this.predicateData.length) {
|
8921
9138
|
return new Uint8Array();
|
8922
9139
|
}
|
8923
9140
|
const mainFn = this.interface?.functions.main;
|
8924
|
-
const paddedCode = new
|
9141
|
+
const paddedCode = new import_transactions21.ByteArrayCoder(this.bytes.length).encode(this.bytes);
|
8925
9142
|
const VM_TX_MEMORY = (0, import_abi_coder5.calculateVmTxMemory)({
|
8926
9143
|
maxInputs: this.provider.getChain().consensusParameters.maxInputs.toNumber()
|
8927
9144
|
});
|
@@ -8937,7 +9154,7 @@ var Predicate = class extends Account {
|
|
8937
9154
|
* @returns An object containing the new predicate bytes and interface.
|
8938
9155
|
*/
|
8939
9156
|
static processPredicateData(bytes, jsonAbi, configurableConstants) {
|
8940
|
-
let predicateBytes = (0,
|
9157
|
+
let predicateBytes = (0, import_utils36.arrayify)(bytes);
|
8941
9158
|
let abiInterface;
|
8942
9159
|
if (jsonAbi) {
|
8943
9160
|
abiInterface = new import_abi_coder5.Interface(jsonAbi);
|
@@ -8960,6 +9177,26 @@ var Predicate = class extends Account {
|
|
8960
9177
|
predicateInterface: abiInterface
|
8961
9178
|
};
|
8962
9179
|
}
|
9180
|
+
/**
|
9181
|
+
* Retrieves resources satisfying the spend query for the account.
|
9182
|
+
*
|
9183
|
+
* @param quantities - IDs of coins to exclude.
|
9184
|
+
* @param excludedIds - IDs of resources to be excluded from the query.
|
9185
|
+
* @returns A promise that resolves to an array of Resources.
|
9186
|
+
*/
|
9187
|
+
async getResourcesToSpend(quantities, excludedIds) {
|
9188
|
+
const resources = await this.provider.getResourcesToSpend(
|
9189
|
+
this.address,
|
9190
|
+
quantities,
|
9191
|
+
excludedIds
|
9192
|
+
);
|
9193
|
+
return resources.map((resource) => ({
|
9194
|
+
...resource,
|
9195
|
+
predicate: (0, import_utils36.hexlify)(this.bytes),
|
9196
|
+
predicateData: (0, import_utils36.hexlify)(this.predicateDataBytes),
|
9197
|
+
paddPredicateData: (policiesLength) => (0, import_utils36.hexlify)(this.getPredicateData(policiesLength))
|
9198
|
+
}));
|
9199
|
+
}
|
8963
9200
|
/**
|
8964
9201
|
* Sets the configurable constants for the predicate.
|
8965
9202
|
*
|
@@ -9709,7 +9946,7 @@ __publicField(Fuel, "defaultConfig", {});
|
|
9709
9946
|
WalletLocked,
|
9710
9947
|
WalletManager,
|
9711
9948
|
WalletUnlocked,
|
9712
|
-
|
9949
|
+
addAmountToCoinQuantities,
|
9713
9950
|
addOperation,
|
9714
9951
|
assemblePanicError,
|
9715
9952
|
assembleReceiptByType,
|
@@ -9718,9 +9955,10 @@ __publicField(Fuel, "defaultConfig", {});
|
|
9718
9955
|
assets,
|
9719
9956
|
buildBlockExplorerUrl,
|
9720
9957
|
cacheFor,
|
9958
|
+
cacheTxInputsFromOwner,
|
9959
|
+
calculateGasFee,
|
9721
9960
|
calculateMetadataGasForTxCreate,
|
9722
9961
|
calculateMetadataGasForTxScript,
|
9723
|
-
calculatePriceWithFactor,
|
9724
9962
|
calculateTransactionFee,
|
9725
9963
|
coinQuantityfy,
|
9726
9964
|
deferPromise,
|