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