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