@fuel-ts/account 0.0.0-rc-1976-20240408114146 → 0.0.0-rc-2021-20240409111335
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @fuel-ts/account might be problematic. Click here for more details.
- package/README.md +1 -1
- package/dist/account.d.ts +5 -4
- package/dist/account.d.ts.map +1 -1
- package/dist/configs.d.ts.map +1 -1
- package/dist/configs.global.js +1 -1
- package/dist/configs.global.js.map +1 -1
- package/dist/configs.js +1 -1
- package/dist/configs.js.map +1 -1
- package/dist/configs.mjs +1 -1
- package/dist/configs.mjs.map +1 -1
- package/dist/index.global.js +872 -620
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +848 -610
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +690 -453
- package/dist/index.mjs.map +1 -1
- package/dist/predicate/predicate.d.ts +10 -2
- package/dist/predicate/predicate.d.ts.map +1 -1
- package/dist/providers/__generated__/operations.d.ts +888 -322
- package/dist/providers/__generated__/operations.d.ts.map +1 -1
- package/dist/providers/coin-quantity.d.ts +3 -3
- package/dist/providers/coin-quantity.d.ts.map +1 -1
- package/dist/providers/coin.d.ts +4 -2
- package/dist/providers/coin.d.ts.map +1 -1
- package/dist/providers/fuel-graphql-subscriber.d.ts.map +1 -1
- package/dist/providers/message.d.ts +3 -1
- package/dist/providers/message.d.ts.map +1 -1
- package/dist/providers/provider.d.ts +45 -34
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/providers/transaction-request/create-transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-request/input.d.ts +2 -2
- package/dist/providers/transaction-request/input.d.ts.map +1 -1
- package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-request/transaction-request.d.ts +9 -29
- package/dist/providers/transaction-request/transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-request/utils.d.ts +3 -0
- package/dist/providers/transaction-request/utils.d.ts.map +1 -1
- package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +2 -0
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
- package/dist/providers/transaction-summary/calculate-transaction-fee.d.ts +3 -2
- package/dist/providers/transaction-summary/calculate-transaction-fee.d.ts.map +1 -1
- package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
- package/dist/providers/utils/gas.d.ts +8 -2
- package/dist/providers/utils/gas.d.ts.map +1 -1
- package/dist/test-utils/launchNode.d.ts.map +1 -1
- package/dist/test-utils.global.js +1587 -1121
- package/dist/test-utils.global.js.map +1 -1
- package/dist/test-utils.js +824 -607
- package/dist/test-utils.js.map +1 -1
- package/dist/test-utils.mjs +682 -465
- package/dist/test-utils.mjs.map +1 -1
- package/dist/wallet/base-wallet-unlocked.d.ts.map +1 -1
- package/package.json +17 -17
package/dist/test-utils.mjs
CHANGED
@@ -24,35 +24,38 @@ import { hexlify as hexlify15 } from "@fuel-ts/utils";
|
|
24
24
|
|
25
25
|
// src/account.ts
|
26
26
|
import { Address as Address3 } from "@fuel-ts/address";
|
27
|
+
import { BaseAssetId as BaseAssetId3 } from "@fuel-ts/address/configs";
|
27
28
|
import { ErrorCode as ErrorCode15, FuelError as FuelError15 } from "@fuel-ts/errors";
|
28
29
|
import { AbstractAccount } from "@fuel-ts/interfaces";
|
29
|
-
import { bn as
|
30
|
+
import { bn as bn18 } from "@fuel-ts/math";
|
30
31
|
import { arrayify as arrayify14 } from "@fuel-ts/utils";
|
32
|
+
import { clone as clone4 } from "ramda";
|
31
33
|
|
32
34
|
// src/providers/coin-quantity.ts
|
35
|
+
import { BaseAssetId } from "@fuel-ts/address/configs";
|
33
36
|
import { bn } from "@fuel-ts/math";
|
34
37
|
import { hexlify } from "@fuel-ts/utils";
|
35
38
|
var coinQuantityfy = (coinQuantityLike) => {
|
36
39
|
let assetId;
|
37
40
|
let amount;
|
38
|
-
let
|
41
|
+
let max;
|
39
42
|
if (Array.isArray(coinQuantityLike)) {
|
40
43
|
amount = coinQuantityLike[0];
|
41
|
-
assetId = coinQuantityLike[1];
|
42
|
-
|
44
|
+
assetId = coinQuantityLike[1] ?? BaseAssetId;
|
45
|
+
max = coinQuantityLike[2] ?? void 0;
|
43
46
|
} else {
|
44
47
|
amount = coinQuantityLike.amount;
|
45
|
-
assetId = coinQuantityLike.assetId;
|
46
|
-
|
48
|
+
assetId = coinQuantityLike.assetId ?? BaseAssetId;
|
49
|
+
max = coinQuantityLike.max ?? void 0;
|
47
50
|
}
|
48
51
|
const bnAmount = bn(amount);
|
49
52
|
return {
|
50
53
|
assetId: hexlify(assetId),
|
51
54
|
amount: bnAmount.lt(1) ? bn(1) : bnAmount,
|
52
|
-
max:
|
55
|
+
max: max ? bn(max) : void 0
|
53
56
|
};
|
54
57
|
};
|
55
|
-
var
|
58
|
+
var addAmountToCoinQuantities = (params) => {
|
56
59
|
const { amount, assetId } = params;
|
57
60
|
const coinQuantities = [...params.coinQuantities];
|
58
61
|
const assetIdx = coinQuantities.findIndex((coinQuantity) => coinQuantity.assetId === assetId);
|
@@ -67,9 +70,9 @@ var addAmountToAsset = (params) => {
|
|
67
70
|
// src/providers/provider.ts
|
68
71
|
import { Address as Address2 } from "@fuel-ts/address";
|
69
72
|
import { ErrorCode as ErrorCode13, FuelError as FuelError13 } from "@fuel-ts/errors";
|
70
|
-
import { BN, bn as
|
73
|
+
import { BN, bn as bn16 } from "@fuel-ts/math";
|
71
74
|
import {
|
72
|
-
InputType as
|
75
|
+
InputType as InputType7,
|
73
76
|
TransactionType as TransactionType8,
|
74
77
|
InputMessageCoder,
|
75
78
|
TransactionCoder as TransactionCoder5
|
@@ -85,14 +88,10 @@ import { clone as clone3 } from "ramda";
|
|
85
88
|
import gql from "graphql-tag";
|
86
89
|
var ReceiptFragmentFragmentDoc = gql`
|
87
90
|
fragment receiptFragment on Receipt {
|
88
|
-
|
89
|
-
id
|
90
|
-
}
|
91
|
+
id
|
91
92
|
pc
|
92
93
|
is
|
93
|
-
to
|
94
|
-
id
|
95
|
-
}
|
94
|
+
to
|
96
95
|
toAddress
|
97
96
|
amount
|
98
97
|
assetId
|
@@ -130,10 +129,16 @@ var TransactionStatusFragmentFragmentDoc = gql`
|
|
130
129
|
id
|
131
130
|
}
|
132
131
|
time
|
132
|
+
receipts {
|
133
|
+
...receiptFragment
|
134
|
+
}
|
133
135
|
programState {
|
134
136
|
returnType
|
135
137
|
data
|
136
138
|
}
|
139
|
+
receipts {
|
140
|
+
...receiptFragment
|
141
|
+
}
|
137
142
|
}
|
138
143
|
... on FailureStatus {
|
139
144
|
block {
|
@@ -141,26 +146,24 @@ var TransactionStatusFragmentFragmentDoc = gql`
|
|
141
146
|
}
|
142
147
|
time
|
143
148
|
reason
|
149
|
+
receipts {
|
150
|
+
...receiptFragment
|
151
|
+
}
|
144
152
|
}
|
145
153
|
... on SqueezedOutStatus {
|
146
154
|
reason
|
147
155
|
}
|
148
156
|
}
|
149
|
-
`;
|
157
|
+
${ReceiptFragmentFragmentDoc}`;
|
150
158
|
var TransactionFragmentFragmentDoc = gql`
|
151
159
|
fragment transactionFragment on Transaction {
|
152
160
|
id
|
153
161
|
rawPayload
|
154
|
-
gasPrice
|
155
|
-
receipts {
|
156
|
-
...receiptFragment
|
157
|
-
}
|
158
162
|
status {
|
159
163
|
...transactionStatusFragment
|
160
164
|
}
|
161
165
|
}
|
162
|
-
${
|
163
|
-
${TransactionStatusFragmentFragmentDoc}`;
|
166
|
+
${TransactionStatusFragmentFragmentDoc}`;
|
164
167
|
var InputEstimatePredicatesFragmentFragmentDoc = gql`
|
165
168
|
fragment inputEstimatePredicatesFragment on Input {
|
166
169
|
... on InputCoin {
|
@@ -178,6 +181,46 @@ var TransactionEstimatePredicatesFragmentFragmentDoc = gql`
|
|
178
181
|
}
|
179
182
|
}
|
180
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}`;
|
181
224
|
var CoinFragmentFragmentDoc = gql`
|
182
225
|
fragment coinFragment on Coin {
|
183
226
|
__typename
|
@@ -185,7 +228,6 @@ var CoinFragmentFragmentDoc = gql`
|
|
185
228
|
owner
|
186
229
|
amount
|
187
230
|
assetId
|
188
|
-
maturity
|
189
231
|
blockCreated
|
190
232
|
txCreatedIdx
|
191
233
|
}
|
@@ -230,7 +272,6 @@ var MessageProofFragmentFragmentDoc = gql`
|
|
230
272
|
prevRoot
|
231
273
|
time
|
232
274
|
applicationHash
|
233
|
-
messageReceiptRoot
|
234
275
|
messageReceiptCount
|
235
276
|
}
|
236
277
|
commitBlockHeader {
|
@@ -242,7 +283,6 @@ var MessageProofFragmentFragmentDoc = gql`
|
|
242
283
|
prevRoot
|
243
284
|
time
|
244
285
|
applicationHash
|
245
|
-
messageReceiptRoot
|
246
286
|
messageReceiptCount
|
247
287
|
}
|
248
288
|
sender
|
@@ -262,8 +302,8 @@ var BalanceFragmentFragmentDoc = gql`
|
|
262
302
|
var BlockFragmentFragmentDoc = gql`
|
263
303
|
fragment blockFragment on Block {
|
264
304
|
id
|
305
|
+
height
|
265
306
|
header {
|
266
|
-
height
|
267
307
|
time
|
268
308
|
}
|
269
309
|
transactions {
|
@@ -321,6 +361,11 @@ var DependentCostFragmentFragmentDoc = gql`
|
|
321
361
|
`;
|
322
362
|
var GasCostsFragmentFragmentDoc = gql`
|
323
363
|
fragment GasCostsFragment on GasCosts {
|
364
|
+
version {
|
365
|
+
... on Version {
|
366
|
+
value
|
367
|
+
}
|
368
|
+
}
|
324
369
|
add
|
325
370
|
addi
|
326
371
|
aloc
|
@@ -333,7 +378,6 @@ var GasCostsFragmentFragmentDoc = gql`
|
|
333
378
|
cb
|
334
379
|
cfei
|
335
380
|
cfsi
|
336
|
-
croo
|
337
381
|
div
|
338
382
|
divi
|
339
383
|
ecr1
|
@@ -416,6 +460,9 @@ var GasCostsFragmentFragmentDoc = gql`
|
|
416
460
|
ccp {
|
417
461
|
...DependentCostFragment
|
418
462
|
}
|
463
|
+
croo {
|
464
|
+
...DependentCostFragment
|
465
|
+
}
|
419
466
|
csiz {
|
420
467
|
...DependentCostFragment
|
421
468
|
}
|
@@ -475,6 +522,11 @@ var GasCostsFragmentFragmentDoc = gql`
|
|
475
522
|
${DependentCostFragmentFragmentDoc}`;
|
476
523
|
var ConsensusParametersFragmentFragmentDoc = gql`
|
477
524
|
fragment consensusParametersFragment on ConsensusParameters {
|
525
|
+
version {
|
526
|
+
... on Version {
|
527
|
+
value
|
528
|
+
}
|
529
|
+
}
|
478
530
|
txParams {
|
479
531
|
...TxParametersFragment
|
480
532
|
}
|
@@ -534,18 +586,9 @@ var NodeInfoFragmentFragmentDoc = gql`
|
|
534
586
|
fragment nodeInfoFragment on NodeInfo {
|
535
587
|
utxoValidation
|
536
588
|
vmBacktrace
|
537
|
-
minGasPrice
|
538
589
|
maxTx
|
539
590
|
maxDepth
|
540
591
|
nodeVersion
|
541
|
-
peers {
|
542
|
-
id
|
543
|
-
addresses
|
544
|
-
clientVersion
|
545
|
-
blockHeight
|
546
|
-
lastHeartbeatMs
|
547
|
-
appScore
|
548
|
-
}
|
549
592
|
}
|
550
593
|
`;
|
551
594
|
var GetVersionDocument = gql`
|
@@ -580,13 +623,9 @@ var GetTransactionWithReceiptsDocument = gql`
|
|
580
623
|
query getTransactionWithReceipts($transactionId: TransactionId!) {
|
581
624
|
transaction(id: $transactionId) {
|
582
625
|
...transactionFragment
|
583
|
-
receipts {
|
584
|
-
...receiptFragment
|
585
|
-
}
|
586
626
|
}
|
587
627
|
}
|
588
|
-
${TransactionFragmentFragmentDoc}
|
589
|
-
${ReceiptFragmentFragmentDoc}`;
|
628
|
+
${TransactionFragmentFragmentDoc}`;
|
590
629
|
var GetTransactionsDocument = gql`
|
591
630
|
query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
|
592
631
|
transactions(after: $after, before: $before, first: $first, last: $last) {
|
@@ -714,6 +753,20 @@ var GetBalanceDocument = gql`
|
|
714
753
|
}
|
715
754
|
}
|
716
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
|
+
`;
|
717
770
|
var GetBalancesDocument = gql`
|
718
771
|
query getBalances($filter: BalanceFilterInput!, $after: String, $before: String, $first: Int, $last: Int) {
|
719
772
|
balances(
|
@@ -768,12 +821,12 @@ var GetMessageStatusDocument = gql`
|
|
768
821
|
}
|
769
822
|
`;
|
770
823
|
var DryRunDocument = gql`
|
771
|
-
mutation dryRun($
|
772
|
-
dryRun(
|
773
|
-
...
|
824
|
+
mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean) {
|
825
|
+
dryRun(txs: $encodedTransactions, utxoValidation: $utxoValidation) {
|
826
|
+
...dryRunTransactionExecutionStatusFragment
|
774
827
|
}
|
775
828
|
}
|
776
|
-
${
|
829
|
+
${DryRunTransactionExecutionStatusFragmentFragmentDoc}`;
|
777
830
|
var SubmitDocument = gql`
|
778
831
|
mutation submit($encodedTransaction: HexString!) {
|
779
832
|
submit(tx: $encodedTransaction) {
|
@@ -856,6 +909,12 @@ function getSdk(requester) {
|
|
856
909
|
getBalance(variables, options) {
|
857
910
|
return requester(GetBalanceDocument, variables, options);
|
858
911
|
},
|
912
|
+
getLatestGasPrice(variables, options) {
|
913
|
+
return requester(GetLatestGasPriceDocument, variables, options);
|
914
|
+
},
|
915
|
+
estimateGasPrice(variables, options) {
|
916
|
+
return requester(EstimateGasPriceDocument, variables, options);
|
917
|
+
},
|
859
918
|
getBalances(variables, options) {
|
860
919
|
return requester(GetBalancesDocument, variables, options);
|
861
920
|
},
|
@@ -929,7 +988,9 @@ var _FuelGraphqlSubscriber = class {
|
|
929
988
|
} catch (e) {
|
930
989
|
throw new FuelError(
|
931
990
|
ErrorCode.STREAM_PARSING_ERROR,
|
932
|
-
`Error while parsing stream data response: ${text}
|
991
|
+
`Error while parsing stream data response: ${text}
|
992
|
+
|
993
|
+
Thrown error: ${e}`
|
933
994
|
);
|
934
995
|
}
|
935
996
|
if (Array.isArray(errors)) {
|
@@ -1030,7 +1091,7 @@ var inputify = (value) => {
|
|
1030
1091
|
return {
|
1031
1092
|
type: InputType.Coin,
|
1032
1093
|
txID: hexlify3(arrayify(value.id).slice(0, 32)),
|
1033
|
-
outputIndex: arrayify(value.id)
|
1094
|
+
outputIndex: toNumber(arrayify(value.id).slice(32, 34)),
|
1034
1095
|
owner: hexlify3(value.owner),
|
1035
1096
|
amount: bn2(value.amount),
|
1036
1097
|
assetId: hexlify3(value.assetId),
|
@@ -1039,10 +1100,9 @@ var inputify = (value) => {
|
|
1039
1100
|
txIndex: toNumber(arrayify(value.txPointer).slice(8, 16))
|
1040
1101
|
},
|
1041
1102
|
witnessIndex: value.witnessIndex,
|
1042
|
-
maturity: value.maturity ?? 0,
|
1043
1103
|
predicateGasUsed: bn2(value.predicateGasUsed),
|
1044
|
-
predicateLength: predicate.length,
|
1045
|
-
predicateDataLength: predicateData.length,
|
1104
|
+
predicateLength: bn2(predicate.length),
|
1105
|
+
predicateDataLength: bn2(predicateData.length),
|
1046
1106
|
predicate: hexlify3(predicate),
|
1047
1107
|
predicateData: hexlify3(predicateData)
|
1048
1108
|
};
|
@@ -1073,8 +1133,8 @@ var inputify = (value) => {
|
|
1073
1133
|
nonce: hexlify3(value.nonce),
|
1074
1134
|
witnessIndex: value.witnessIndex,
|
1075
1135
|
predicateGasUsed: bn2(value.predicateGasUsed),
|
1076
|
-
predicateLength: predicate.length,
|
1077
|
-
predicateDataLength: predicateData.length,
|
1136
|
+
predicateLength: bn2(predicate.length),
|
1137
|
+
predicateDataLength: bn2(predicateData.length),
|
1078
1138
|
predicate: hexlify3(predicate),
|
1079
1139
|
predicateData: hexlify3(predicateData),
|
1080
1140
|
data: hexlify3(data),
|
@@ -1149,7 +1209,7 @@ var outputify = (value) => {
|
|
1149
1209
|
|
1150
1210
|
// src/providers/transaction-request/transaction-request.ts
|
1151
1211
|
import { Address, addressify } from "@fuel-ts/address";
|
1152
|
-
import { ZeroBytes32 as ZeroBytes324 } from "@fuel-ts/address/configs";
|
1212
|
+
import { BaseAssetId as BaseAssetId2, ZeroBytes32 as ZeroBytes324 } from "@fuel-ts/address/configs";
|
1153
1213
|
import { bn as bn7 } from "@fuel-ts/math";
|
1154
1214
|
import {
|
1155
1215
|
PolicyType,
|
@@ -1159,6 +1219,7 @@ import {
|
|
1159
1219
|
TransactionType
|
1160
1220
|
} from "@fuel-ts/transactions";
|
1161
1221
|
import { concat, hexlify as hexlify7 } from "@fuel-ts/utils";
|
1222
|
+
import { randomBytes } from "ethers";
|
1162
1223
|
|
1163
1224
|
// src/providers/resource.ts
|
1164
1225
|
var isCoin = (resource) => "id" in resource;
|
@@ -1199,8 +1260,8 @@ function assembleReceiptByType(receipt) {
|
|
1199
1260
|
case "CALL" /* Call */: {
|
1200
1261
|
const callReceipt = {
|
1201
1262
|
type: ReceiptType.Call,
|
1202
|
-
from: hexOrZero(receipt.
|
1203
|
-
to: hexOrZero(receipt?.to
|
1263
|
+
from: hexOrZero(receipt.id || receipt.contractId),
|
1264
|
+
to: hexOrZero(receipt?.to),
|
1204
1265
|
amount: bn4(receipt.amount),
|
1205
1266
|
assetId: hexOrZero(receipt.assetId),
|
1206
1267
|
gas: bn4(receipt.gas),
|
@@ -1214,7 +1275,7 @@ function assembleReceiptByType(receipt) {
|
|
1214
1275
|
case "RETURN" /* Return */: {
|
1215
1276
|
const returnReceipt = {
|
1216
1277
|
type: ReceiptType.Return,
|
1217
|
-
id: hexOrZero(receipt.
|
1278
|
+
id: hexOrZero(receipt.id || receipt.contractId),
|
1218
1279
|
val: bn4(receipt.val),
|
1219
1280
|
pc: bn4(receipt.pc),
|
1220
1281
|
is: bn4(receipt.is)
|
@@ -1224,7 +1285,7 @@ function assembleReceiptByType(receipt) {
|
|
1224
1285
|
case "RETURN_DATA" /* ReturnData */: {
|
1225
1286
|
const returnDataReceipt = {
|
1226
1287
|
type: ReceiptType.ReturnData,
|
1227
|
-
id: hexOrZero(receipt.
|
1288
|
+
id: hexOrZero(receipt.id || receipt.contractId),
|
1228
1289
|
ptr: bn4(receipt.ptr),
|
1229
1290
|
len: bn4(receipt.len),
|
1230
1291
|
digest: hexOrZero(receipt.digest),
|
@@ -1236,7 +1297,7 @@ function assembleReceiptByType(receipt) {
|
|
1236
1297
|
case "PANIC" /* Panic */: {
|
1237
1298
|
const panicReceipt = {
|
1238
1299
|
type: ReceiptType.Panic,
|
1239
|
-
id: hexOrZero(receipt.
|
1300
|
+
id: hexOrZero(receipt.id),
|
1240
1301
|
reason: bn4(receipt.reason),
|
1241
1302
|
pc: bn4(receipt.pc),
|
1242
1303
|
is: bn4(receipt.is),
|
@@ -1247,7 +1308,7 @@ function assembleReceiptByType(receipt) {
|
|
1247
1308
|
case "REVERT" /* Revert */: {
|
1248
1309
|
const revertReceipt = {
|
1249
1310
|
type: ReceiptType.Revert,
|
1250
|
-
id: hexOrZero(receipt.
|
1311
|
+
id: hexOrZero(receipt.id || receipt.contractId),
|
1251
1312
|
val: bn4(receipt.ra),
|
1252
1313
|
pc: bn4(receipt.pc),
|
1253
1314
|
is: bn4(receipt.is)
|
@@ -1257,7 +1318,7 @@ function assembleReceiptByType(receipt) {
|
|
1257
1318
|
case "LOG" /* Log */: {
|
1258
1319
|
const logReceipt = {
|
1259
1320
|
type: ReceiptType.Log,
|
1260
|
-
id: hexOrZero(receipt.
|
1321
|
+
id: hexOrZero(receipt.id || receipt.contractId),
|
1261
1322
|
val0: bn4(receipt.ra),
|
1262
1323
|
val1: bn4(receipt.rb),
|
1263
1324
|
val2: bn4(receipt.rc),
|
@@ -1270,7 +1331,7 @@ function assembleReceiptByType(receipt) {
|
|
1270
1331
|
case "LOG_DATA" /* LogData */: {
|
1271
1332
|
const logDataReceipt = {
|
1272
1333
|
type: ReceiptType.LogData,
|
1273
|
-
id: hexOrZero(receipt.
|
1334
|
+
id: hexOrZero(receipt.id || receipt.contractId),
|
1274
1335
|
val0: bn4(receipt.ra),
|
1275
1336
|
val1: bn4(receipt.rb),
|
1276
1337
|
ptr: bn4(receipt.ptr),
|
@@ -1284,8 +1345,8 @@ function assembleReceiptByType(receipt) {
|
|
1284
1345
|
case "TRANSFER" /* Transfer */: {
|
1285
1346
|
const transferReceipt = {
|
1286
1347
|
type: ReceiptType.Transfer,
|
1287
|
-
from: hexOrZero(receipt.
|
1288
|
-
to: hexOrZero(receipt.toAddress || receipt?.to
|
1348
|
+
from: hexOrZero(receipt.id || receipt.contractId),
|
1349
|
+
to: hexOrZero(receipt.toAddress || receipt?.to),
|
1289
1350
|
amount: bn4(receipt.amount),
|
1290
1351
|
assetId: hexOrZero(receipt.assetId),
|
1291
1352
|
pc: bn4(receipt.pc),
|
@@ -1296,8 +1357,8 @@ function assembleReceiptByType(receipt) {
|
|
1296
1357
|
case "TRANSFER_OUT" /* TransferOut */: {
|
1297
1358
|
const transferOutReceipt = {
|
1298
1359
|
type: ReceiptType.TransferOut,
|
1299
|
-
from: hexOrZero(receipt.
|
1300
|
-
to: hexOrZero(receipt.toAddress || receipt.to
|
1360
|
+
from: hexOrZero(receipt.id || receipt.contractId),
|
1361
|
+
to: hexOrZero(receipt.toAddress || receipt.to),
|
1301
1362
|
amount: bn4(receipt.amount),
|
1302
1363
|
assetId: hexOrZero(receipt.assetId),
|
1303
1364
|
pc: bn4(receipt.pc),
|
@@ -1340,7 +1401,7 @@ function assembleReceiptByType(receipt) {
|
|
1340
1401
|
return receiptMessageOut;
|
1341
1402
|
}
|
1342
1403
|
case "MINT" /* Mint */: {
|
1343
|
-
const contractId = hexOrZero(receipt.
|
1404
|
+
const contractId = hexOrZero(receipt.id || receipt.contractId);
|
1344
1405
|
const subId = hexOrZero(receipt.subId);
|
1345
1406
|
const assetId = ReceiptMintCoder.getAssetId(contractId, subId);
|
1346
1407
|
const mintReceipt = {
|
@@ -1355,7 +1416,7 @@ function assembleReceiptByType(receipt) {
|
|
1355
1416
|
return mintReceipt;
|
1356
1417
|
}
|
1357
1418
|
case "BURN" /* Burn */: {
|
1358
|
-
const contractId = hexOrZero(receipt.
|
1419
|
+
const contractId = hexOrZero(receipt.id || receipt.contractId);
|
1359
1420
|
const subId = hexOrZero(receipt.subId);
|
1360
1421
|
const assetId = ReceiptBurnCoder.getAssetId(contractId, subId);
|
1361
1422
|
const burnReceipt = {
|
@@ -1381,7 +1442,6 @@ import { ErrorCode as ErrorCode6, FuelError as FuelError6 } from "@fuel-ts/error
|
|
1381
1442
|
import { bn as bn5 } from "@fuel-ts/math";
|
1382
1443
|
import { ReceiptType as ReceiptType2 } from "@fuel-ts/transactions";
|
1383
1444
|
import { arrayify as arrayify3 } from "@fuel-ts/utils";
|
1384
|
-
var calculatePriceWithFactor = (gas, gasPrice, priceFactor) => bn5(Math.ceil(gas.mul(gasPrice).toNumber() / priceFactor.toNumber()));
|
1385
1445
|
var getGasUsedFromReceipts = (receipts) => {
|
1386
1446
|
const scriptResult = receipts.filter(
|
1387
1447
|
(receipt) => receipt.type === ReceiptType2.ScriptResult
|
@@ -1402,18 +1462,28 @@ function resolveGasDependentCosts(byteSize, gasDependentCost) {
|
|
1402
1462
|
}
|
1403
1463
|
function gasUsedByInputs(inputs, txBytesSize, gasCosts) {
|
1404
1464
|
const witnessCache = [];
|
1405
|
-
const
|
1465
|
+
const chargeableInputs = inputs.filter((input) => {
|
1466
|
+
const isCoinOrMessage = "owner" in input || "sender" in input;
|
1467
|
+
if (isCoinOrMessage) {
|
1468
|
+
if ("predicate" in input && input.predicate && input.predicate !== "0x") {
|
1469
|
+
return true;
|
1470
|
+
}
|
1471
|
+
if (!witnessCache.includes(input.witnessIndex)) {
|
1472
|
+
witnessCache.push(input.witnessIndex);
|
1473
|
+
return true;
|
1474
|
+
}
|
1475
|
+
}
|
1476
|
+
return false;
|
1477
|
+
});
|
1478
|
+
const vmInitializationCost = resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization);
|
1479
|
+
const totalGas = chargeableInputs.reduce((total, input) => {
|
1406
1480
|
if ("predicate" in input && input.predicate && input.predicate !== "0x") {
|
1407
1481
|
return total.add(
|
1408
|
-
|
1482
|
+
vmInitializationCost.add(resolveGasDependentCosts(arrayify3(input.predicate).length, gasCosts.contractRoot)).add(bn5(input.predicateGasUsed))
|
1409
1483
|
);
|
1410
1484
|
}
|
1411
|
-
|
1412
|
-
|
1413
|
-
return total.add(gasCosts.ecr1);
|
1414
|
-
}
|
1415
|
-
return total;
|
1416
|
-
}, bn5());
|
1485
|
+
return total.add(gasCosts.ecr1);
|
1486
|
+
}, bn5(0));
|
1417
1487
|
return totalGas;
|
1418
1488
|
}
|
1419
1489
|
function getMinGas(params) {
|
@@ -1425,12 +1495,20 @@ function getMinGas(params) {
|
|
1425
1495
|
return minGas;
|
1426
1496
|
}
|
1427
1497
|
function getMaxGas(params) {
|
1428
|
-
const {
|
1498
|
+
const {
|
1499
|
+
gasPerByte,
|
1500
|
+
witnessesLength,
|
1501
|
+
witnessLimit,
|
1502
|
+
minGas,
|
1503
|
+
gasLimit = bn5(0),
|
1504
|
+
maxGasPerTx
|
1505
|
+
} = params;
|
1429
1506
|
let remainingAllowedWitnessGas = bn5(0);
|
1430
1507
|
if (witnessLimit?.gt(0) && witnessLimit.gte(witnessesLength)) {
|
1431
1508
|
remainingAllowedWitnessGas = bn5(witnessLimit).sub(witnessesLength).mul(gasPerByte);
|
1432
1509
|
}
|
1433
|
-
|
1510
|
+
const maxGas = remainingAllowedWitnessGas.add(minGas).add(gasLimit);
|
1511
|
+
return maxGas.gte(maxGasPerTx) ? maxGasPerTx : maxGas;
|
1434
1512
|
}
|
1435
1513
|
function calculateMetadataGasForTxCreate({
|
1436
1514
|
gasCosts,
|
@@ -1452,6 +1530,10 @@ function calculateMetadataGasForTxScript({
|
|
1452
1530
|
}) {
|
1453
1531
|
return resolveGasDependentCosts(txBytesSize, gasCosts.s256);
|
1454
1532
|
}
|
1533
|
+
var calculateGasFee = (params) => {
|
1534
|
+
const { gas, gasPrice, priceFactor, tip } = params;
|
1535
|
+
return gas.mul(gasPrice).div(priceFactor).add(tip);
|
1536
|
+
};
|
1455
1537
|
|
1456
1538
|
// src/providers/utils/json.ts
|
1457
1539
|
import { hexlify as hexlify5 } from "@fuel-ts/utils";
|
@@ -1596,7 +1678,7 @@ var witnessify = (value) => {
|
|
1596
1678
|
// src/providers/transaction-request/transaction-request.ts
|
1597
1679
|
var BaseTransactionRequest = class {
|
1598
1680
|
/** Gas price for transaction */
|
1599
|
-
|
1681
|
+
tip;
|
1600
1682
|
/** Block until which tx cannot be included */
|
1601
1683
|
maturity;
|
1602
1684
|
/** The maximum fee payable by this transaction using BASE_ASSET. */
|
@@ -1609,38 +1691,34 @@ var BaseTransactionRequest = class {
|
|
1609
1691
|
outputs = [];
|
1610
1692
|
/** List of witnesses */
|
1611
1693
|
witnesses = [];
|
1612
|
-
/** Base asset ID - should be fetched from the chain */
|
1613
|
-
baseAssetId = ZeroBytes324;
|
1614
1694
|
/**
|
1615
1695
|
* Constructor for initializing a base transaction request.
|
1616
1696
|
*
|
1617
1697
|
* @param baseTransactionRequest - Optional object containing properties to initialize the transaction request.
|
1618
1698
|
*/
|
1619
1699
|
constructor({
|
1620
|
-
|
1700
|
+
tip,
|
1621
1701
|
maturity,
|
1622
1702
|
maxFee,
|
1623
1703
|
witnessLimit,
|
1624
1704
|
inputs,
|
1625
1705
|
outputs,
|
1626
|
-
witnesses
|
1627
|
-
baseAssetId
|
1706
|
+
witnesses
|
1628
1707
|
} = {}) {
|
1629
|
-
this.
|
1708
|
+
this.tip = bn7(tip);
|
1630
1709
|
this.maturity = maturity ?? 0;
|
1631
1710
|
this.witnessLimit = witnessLimit ? bn7(witnessLimit) : void 0;
|
1632
1711
|
this.maxFee = maxFee ? bn7(maxFee) : void 0;
|
1633
1712
|
this.inputs = inputs ?? [];
|
1634
1713
|
this.outputs = outputs ?? [];
|
1635
1714
|
this.witnesses = witnesses ?? [];
|
1636
|
-
this.baseAssetId = baseAssetId ?? ZeroBytes324;
|
1637
1715
|
}
|
1638
1716
|
static getPolicyMeta(req) {
|
1639
1717
|
let policyTypes = 0;
|
1640
1718
|
const policies = [];
|
1641
|
-
if (req.
|
1642
|
-
policyTypes += PolicyType.
|
1643
|
-
policies.push({ data: req.
|
1719
|
+
if (req.tip) {
|
1720
|
+
policyTypes += PolicyType.Tip;
|
1721
|
+
policies.push({ data: req.tip, type: PolicyType.Tip });
|
1644
1722
|
}
|
1645
1723
|
if (req.witnessLimit) {
|
1646
1724
|
policyTypes += PolicyType.WitnessLimit;
|
@@ -1827,10 +1905,10 @@ var BaseTransactionRequest = class {
|
|
1827
1905
|
* @param predicate - Predicate bytes.
|
1828
1906
|
* @param predicateData - Predicate data bytes.
|
1829
1907
|
*/
|
1830
|
-
addCoinInput(coin
|
1908
|
+
addCoinInput(coin) {
|
1831
1909
|
const { assetId, owner, amount } = coin;
|
1832
1910
|
let witnessIndex;
|
1833
|
-
if (predicate) {
|
1911
|
+
if (coin.predicate) {
|
1834
1912
|
witnessIndex = 0;
|
1835
1913
|
} else {
|
1836
1914
|
witnessIndex = this.getCoinInputWitnessIndexByOwner(owner);
|
@@ -1845,9 +1923,7 @@ var BaseTransactionRequest = class {
|
|
1845
1923
|
amount,
|
1846
1924
|
assetId,
|
1847
1925
|
txPointer: "0x00000000000000000000000000000000",
|
1848
|
-
witnessIndex
|
1849
|
-
predicate: predicate?.bytes,
|
1850
|
-
predicateData: predicate?.predicateDataBytes
|
1926
|
+
witnessIndex
|
1851
1927
|
};
|
1852
1928
|
this.pushInput(input);
|
1853
1929
|
this.addChangeOutput(owner, assetId);
|
@@ -1858,11 +1934,13 @@ var BaseTransactionRequest = class {
|
|
1858
1934
|
*
|
1859
1935
|
* @param message - Message resource.
|
1860
1936
|
* @param predicate - Predicate bytes.
|
1937
|
+
* @param predicateData - Predicate data bytes.
|
1861
1938
|
*/
|
1862
|
-
addMessageInput(message
|
1939
|
+
addMessageInput(message) {
|
1863
1940
|
const { recipient, sender, amount } = message;
|
1941
|
+
const assetId = BaseAssetId2;
|
1864
1942
|
let witnessIndex;
|
1865
|
-
if (predicate) {
|
1943
|
+
if (message.predicate) {
|
1866
1944
|
witnessIndex = 0;
|
1867
1945
|
} else {
|
1868
1946
|
witnessIndex = this.getCoinInputWitnessIndexByOwner(recipient);
|
@@ -1876,12 +1954,10 @@ var BaseTransactionRequest = class {
|
|
1876
1954
|
sender: sender.toB256(),
|
1877
1955
|
recipient: recipient.toB256(),
|
1878
1956
|
amount,
|
1879
|
-
witnessIndex
|
1880
|
-
predicate: predicate?.bytes,
|
1881
|
-
predicateData: predicate?.predicateDataBytes
|
1957
|
+
witnessIndex
|
1882
1958
|
};
|
1883
1959
|
this.pushInput(input);
|
1884
|
-
this.addChangeOutput(recipient,
|
1960
|
+
this.addChangeOutput(recipient, assetId);
|
1885
1961
|
}
|
1886
1962
|
/**
|
1887
1963
|
* Adds a single resource to the transaction by adding a coin/message input and a
|
@@ -1909,32 +1985,6 @@ var BaseTransactionRequest = class {
|
|
1909
1985
|
resources.forEach((resource) => this.addResource(resource));
|
1910
1986
|
return this;
|
1911
1987
|
}
|
1912
|
-
/**
|
1913
|
-
* Adds multiple resources to the transaction by adding coin/message inputs and change
|
1914
|
-
* outputs from the related assetIds.
|
1915
|
-
*
|
1916
|
-
* @param resources - The resources to add.
|
1917
|
-
* @returns This transaction.
|
1918
|
-
*/
|
1919
|
-
addPredicateResource(resource, predicate) {
|
1920
|
-
if (isCoin(resource)) {
|
1921
|
-
this.addCoinInput(resource, predicate);
|
1922
|
-
} else {
|
1923
|
-
this.addMessageInput(resource, predicate);
|
1924
|
-
}
|
1925
|
-
return this;
|
1926
|
-
}
|
1927
|
-
/**
|
1928
|
-
* Adds multiple predicate coin/message inputs to the transaction and change outputs
|
1929
|
-
* from the related assetIds.
|
1930
|
-
*
|
1931
|
-
* @param resources - The resources to add.
|
1932
|
-
* @returns This transaction.
|
1933
|
-
*/
|
1934
|
-
addPredicateResources(resources, predicate) {
|
1935
|
-
resources.forEach((resource) => this.addPredicateResource(resource, predicate));
|
1936
|
-
return this;
|
1937
|
-
}
|
1938
1988
|
/**
|
1939
1989
|
* Adds a coin output to the transaction.
|
1940
1990
|
*
|
@@ -1942,12 +1992,12 @@ var BaseTransactionRequest = class {
|
|
1942
1992
|
* @param amount - Amount of coin.
|
1943
1993
|
* @param assetId - Asset ID of coin.
|
1944
1994
|
*/
|
1945
|
-
addCoinOutput(to, amount, assetId) {
|
1995
|
+
addCoinOutput(to, amount, assetId = BaseAssetId2) {
|
1946
1996
|
this.pushOutput({
|
1947
1997
|
type: OutputType2.Coin,
|
1948
1998
|
to: addressify(to).toB256(),
|
1949
1999
|
amount,
|
1950
|
-
assetId
|
2000
|
+
assetId
|
1951
2001
|
});
|
1952
2002
|
return this;
|
1953
2003
|
}
|
@@ -1974,7 +2024,7 @@ var BaseTransactionRequest = class {
|
|
1974
2024
|
* @param to - Address of the owner.
|
1975
2025
|
* @param assetId - Asset ID of coin.
|
1976
2026
|
*/
|
1977
|
-
addChangeOutput(to, assetId) {
|
2027
|
+
addChangeOutput(to, assetId = BaseAssetId2) {
|
1978
2028
|
const changeOutput = this.getChangeOutputs().find(
|
1979
2029
|
(output) => hexlify7(output.assetId) === assetId
|
1980
2030
|
);
|
@@ -1982,7 +2032,7 @@ var BaseTransactionRequest = class {
|
|
1982
2032
|
this.pushOutput({
|
1983
2033
|
type: OutputType2.Change,
|
1984
2034
|
to: addressify(to).toB256(),
|
1985
|
-
assetId
|
2035
|
+
assetId
|
1986
2036
|
});
|
1987
2037
|
}
|
1988
2038
|
}
|
@@ -2014,7 +2064,7 @@ var BaseTransactionRequest = class {
|
|
2014
2064
|
}
|
2015
2065
|
calculateMaxGas(chainInfo, minGas) {
|
2016
2066
|
const { consensusParameters } = chainInfo;
|
2017
|
-
const { gasPerByte } = consensusParameters;
|
2067
|
+
const { gasPerByte, maxGasPerTx } = consensusParameters;
|
2018
2068
|
const witnessesLength = this.toTransaction().witnesses.reduce(
|
2019
2069
|
(acc, wit) => acc + wit.dataLength,
|
2020
2070
|
0
|
@@ -2023,7 +2073,8 @@ var BaseTransactionRequest = class {
|
|
2023
2073
|
gasPerByte,
|
2024
2074
|
minGas,
|
2025
2075
|
witnessesLength,
|
2026
|
-
witnessLimit: this.witnessLimit
|
2076
|
+
witnessLimit: this.witnessLimit,
|
2077
|
+
maxGasPerTx
|
2027
2078
|
});
|
2028
2079
|
}
|
2029
2080
|
/**
|
@@ -2033,12 +2084,6 @@ var BaseTransactionRequest = class {
|
|
2033
2084
|
* @param quantities - CoinQuantity Array.
|
2034
2085
|
*/
|
2035
2086
|
fundWithFakeUtxos(quantities, resourcesOwner) {
|
2036
|
-
let idCounter = 0;
|
2037
|
-
const generateId = () => {
|
2038
|
-
const counterString = String(idCounter++);
|
2039
|
-
const id = ZeroBytes324.slice(0, -counterString.length).concat(counterString);
|
2040
|
-
return id;
|
2041
|
-
};
|
2042
2087
|
const findAssetInput = (assetId) => this.inputs.find((input) => {
|
2043
2088
|
if ("assetId" in input) {
|
2044
2089
|
return input.assetId === assetId;
|
@@ -2047,24 +2092,27 @@ var BaseTransactionRequest = class {
|
|
2047
2092
|
});
|
2048
2093
|
const updateAssetInput = (assetId, quantity) => {
|
2049
2094
|
const assetInput = findAssetInput(assetId);
|
2095
|
+
let usedQuantity = quantity;
|
2096
|
+
if (assetId === BaseAssetId2) {
|
2097
|
+
usedQuantity = bn7("1000000000000000000");
|
2098
|
+
}
|
2050
2099
|
if (assetInput && "assetId" in assetInput) {
|
2051
|
-
assetInput.id =
|
2052
|
-
assetInput.amount =
|
2100
|
+
assetInput.id = hexlify7(randomBytes(34));
|
2101
|
+
assetInput.amount = usedQuantity;
|
2053
2102
|
} else {
|
2054
2103
|
this.addResources([
|
2055
2104
|
{
|
2056
|
-
id:
|
2057
|
-
amount:
|
2105
|
+
id: hexlify7(randomBytes(34)),
|
2106
|
+
amount: usedQuantity,
|
2058
2107
|
assetId,
|
2059
2108
|
owner: resourcesOwner || Address.fromRandom(),
|
2060
|
-
maturity: 0,
|
2061
2109
|
blockCreated: bn7(1),
|
2062
2110
|
txCreatedIdx: bn7(1)
|
2063
2111
|
}
|
2064
2112
|
]);
|
2065
2113
|
}
|
2066
2114
|
};
|
2067
|
-
updateAssetInput(
|
2115
|
+
updateAssetInput(BaseAssetId2, bn7(1e11));
|
2068
2116
|
quantities.forEach((q) => updateAssetInput(q.assetId, q.amount));
|
2069
2117
|
}
|
2070
2118
|
/**
|
@@ -2089,7 +2137,7 @@ var BaseTransactionRequest = class {
|
|
2089
2137
|
toJSON() {
|
2090
2138
|
return normalizeJSON(this);
|
2091
2139
|
}
|
2092
|
-
|
2140
|
+
updatePredicateGasUsed(inputs) {
|
2093
2141
|
this.inputs.forEach((i) => {
|
2094
2142
|
let correspondingInput;
|
2095
2143
|
switch (i.type) {
|
@@ -2111,6 +2159,15 @@ var BaseTransactionRequest = class {
|
|
2111
2159
|
}
|
2112
2160
|
});
|
2113
2161
|
}
|
2162
|
+
shiftPredicateData() {
|
2163
|
+
this.inputs.forEach((input) => {
|
2164
|
+
if ("predicateData" in input && "paddPredicateData" in input && typeof input.paddPredicateData === "function") {
|
2165
|
+
input.predicateData = input.paddPredicateData(
|
2166
|
+
BaseTransactionRequest.getPolicyMeta(this).policies.length
|
2167
|
+
);
|
2168
|
+
}
|
2169
|
+
});
|
2170
|
+
}
|
2114
2171
|
};
|
2115
2172
|
|
2116
2173
|
// src/providers/transaction-request/create-transaction-request.ts
|
@@ -2257,9 +2314,8 @@ var CreateTransactionRequest = class extends BaseTransactionRequest {
|
|
2257
2314
|
return {
|
2258
2315
|
type: TransactionType3.Create,
|
2259
2316
|
...baseTransaction,
|
2260
|
-
bytecodeLength: baseTransaction.witnesses[bytecodeWitnessIndex].dataLength / 4,
|
2261
2317
|
bytecodeWitnessIndex,
|
2262
|
-
storageSlotsCount: storageSlots.length,
|
2318
|
+
storageSlotsCount: bn9(storageSlots.length),
|
2263
2319
|
salt: this.salt ? hexlify9(this.salt) : ZeroBytes326,
|
2264
2320
|
storageSlots
|
2265
2321
|
};
|
@@ -2382,8 +2438,8 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
|
|
2382
2438
|
type: TransactionType4.Script,
|
2383
2439
|
scriptGasLimit: this.gasLimit,
|
2384
2440
|
...super.getBaseTransaction(),
|
2385
|
-
scriptLength: script.length,
|
2386
|
-
scriptDataLength: scriptData.length,
|
2441
|
+
scriptLength: bn10(script.length),
|
2442
|
+
scriptDataLength: bn10(scriptData.length),
|
2387
2443
|
receiptsRoot: ZeroBytes327,
|
2388
2444
|
script: hexlify10(script),
|
2389
2445
|
scriptData: hexlify10(scriptData)
|
@@ -2447,7 +2503,7 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
|
|
2447
2503
|
}
|
2448
2504
|
calculateMaxGas(chainInfo, minGas) {
|
2449
2505
|
const { consensusParameters } = chainInfo;
|
2450
|
-
const { gasPerByte } = consensusParameters;
|
2506
|
+
const { gasPerByte, maxGasPerTx } = consensusParameters;
|
2451
2507
|
const witnessesLength = this.toTransaction().witnesses.reduce(
|
2452
2508
|
(acc, wit) => acc + wit.dataLength,
|
2453
2509
|
0
|
@@ -2457,7 +2513,8 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
|
|
2457
2513
|
minGas,
|
2458
2514
|
witnessesLength,
|
2459
2515
|
witnessLimit: this.witnessLimit,
|
2460
|
-
gasLimit: this.gasLimit
|
2516
|
+
gasLimit: this.gasLimit,
|
2517
|
+
maxGasPerTx
|
2461
2518
|
});
|
2462
2519
|
}
|
2463
2520
|
/**
|
@@ -2514,7 +2571,7 @@ var ScriptTransactionRequest = class extends BaseTransactionRequest {
|
|
2514
2571
|
|
2515
2572
|
// src/providers/transaction-request/utils.ts
|
2516
2573
|
import { ErrorCode as ErrorCode8, FuelError as FuelError8 } from "@fuel-ts/errors";
|
2517
|
-
import { TransactionType as TransactionType5 } from "@fuel-ts/transactions";
|
2574
|
+
import { TransactionType as TransactionType5, InputType as InputType5 } from "@fuel-ts/transactions";
|
2518
2575
|
var transactionRequestify = (obj) => {
|
2519
2576
|
if (obj instanceof ScriptTransactionRequest || obj instanceof CreateTransactionRequest) {
|
2520
2577
|
return obj;
|
@@ -2532,14 +2589,31 @@ var transactionRequestify = (obj) => {
|
|
2532
2589
|
}
|
2533
2590
|
}
|
2534
2591
|
};
|
2592
|
+
var cacheTxInputsFromOwner = (inputs, owner) => inputs.reduce(
|
2593
|
+
(acc, input) => {
|
2594
|
+
if (input.type === InputType5.Coin && input.owner === owner) {
|
2595
|
+
acc.utxos.push(input.id);
|
2596
|
+
}
|
2597
|
+
if (input.type === InputType5.Message && input.recipient === owner) {
|
2598
|
+
acc.messages.push(input.nonce);
|
2599
|
+
}
|
2600
|
+
return acc;
|
2601
|
+
},
|
2602
|
+
{
|
2603
|
+
utxos: [],
|
2604
|
+
messages: []
|
2605
|
+
}
|
2606
|
+
);
|
2535
2607
|
|
2536
2608
|
// src/providers/transaction-response/transaction-response.ts
|
2537
2609
|
import { ErrorCode as ErrorCode12, FuelError as FuelError12 } from "@fuel-ts/errors";
|
2538
|
-
import { bn as
|
2610
|
+
import { bn as bn15 } from "@fuel-ts/math";
|
2539
2611
|
import { TransactionCoder as TransactionCoder4 } from "@fuel-ts/transactions";
|
2540
2612
|
import { arrayify as arrayify10 } from "@fuel-ts/utils";
|
2541
2613
|
|
2542
2614
|
// src/providers/transaction-summary/assemble-transaction-summary.ts
|
2615
|
+
import { bn as bn14 } from "@fuel-ts/math";
|
2616
|
+
import { PolicyType as PolicyType3 } from "@fuel-ts/transactions";
|
2543
2617
|
import { DateTime, hexlify as hexlify11 } from "@fuel-ts/utils";
|
2544
2618
|
|
2545
2619
|
// src/providers/transaction-summary/calculate-transaction-fee.ts
|
@@ -2548,9 +2622,10 @@ import { PolicyType as PolicyType2, TransactionCoder as TransactionCoder3, Trans
|
|
2548
2622
|
import { arrayify as arrayify9 } from "@fuel-ts/utils";
|
2549
2623
|
var calculateTransactionFee = (params) => {
|
2550
2624
|
const {
|
2551
|
-
|
2625
|
+
gasPrice,
|
2552
2626
|
rawPayload,
|
2553
|
-
|
2627
|
+
tip,
|
2628
|
+
consensusParameters: { gasCosts, feeParams, maxGasPerTx }
|
2554
2629
|
} = params;
|
2555
2630
|
const gasPerByte = bn11(feeParams.gasPerByte);
|
2556
2631
|
const gasPriceFactor = bn11(feeParams.gasPriceFactor);
|
@@ -2560,8 +2635,7 @@ var calculateTransactionFee = (params) => {
|
|
2560
2635
|
return {
|
2561
2636
|
fee: bn11(0),
|
2562
2637
|
minFee: bn11(0),
|
2563
|
-
maxFee: bn11(0)
|
2564
|
-
feeFromGasUsed: bn11(0)
|
2638
|
+
maxFee: bn11(0)
|
2565
2639
|
};
|
2566
2640
|
}
|
2567
2641
|
const { type, witnesses, inputs, policies } = transaction;
|
@@ -2593,7 +2667,6 @@ var calculateTransactionFee = (params) => {
|
|
2593
2667
|
metadataGas,
|
2594
2668
|
txBytesSize: transactionBytes.length
|
2595
2669
|
});
|
2596
|
-
const gasPrice = bn11(policies.find((policy) => policy.type === PolicyType2.GasPrice)?.data);
|
2597
2670
|
const witnessLimit = policies.find((policy) => policy.type === PolicyType2.WitnessLimit)?.data;
|
2598
2671
|
const witnessesLength = witnesses.reduce((acc, wit) => acc + wit.dataLength, 0);
|
2599
2672
|
const maxGas = getMaxGas({
|
@@ -2601,17 +2674,25 @@ var calculateTransactionFee = (params) => {
|
|
2601
2674
|
minGas,
|
2602
2675
|
witnessesLength,
|
2603
2676
|
gasLimit,
|
2604
|
-
witnessLimit
|
2677
|
+
witnessLimit,
|
2678
|
+
maxGasPerTx
|
2679
|
+
});
|
2680
|
+
const minFee = calculateGasFee({
|
2681
|
+
gasPrice,
|
2682
|
+
gas: minGas,
|
2683
|
+
priceFactor: gasPriceFactor,
|
2684
|
+
tip
|
2685
|
+
});
|
2686
|
+
const maxFee = calculateGasFee({
|
2687
|
+
gasPrice,
|
2688
|
+
gas: maxGas,
|
2689
|
+
priceFactor: gasPriceFactor,
|
2690
|
+
tip
|
2605
2691
|
});
|
2606
|
-
const feeFromGasUsed = calculatePriceWithFactor(gasUsed, gasPrice, gasPriceFactor);
|
2607
|
-
const minFee = calculatePriceWithFactor(minGas, gasPrice, gasPriceFactor);
|
2608
|
-
const maxFee = calculatePriceWithFactor(maxGas, gasPrice, gasPriceFactor);
|
2609
|
-
const fee = minFee.add(feeFromGasUsed);
|
2610
2692
|
return {
|
2611
|
-
fee,
|
2612
2693
|
minFee,
|
2613
2694
|
maxFee,
|
2614
|
-
|
2695
|
+
fee: maxFee
|
2615
2696
|
};
|
2616
2697
|
};
|
2617
2698
|
|
@@ -2667,7 +2748,7 @@ var getFunctionCall = ({ abi, receipt, rawPayload, maxInputs }) => {
|
|
2667
2748
|
|
2668
2749
|
// src/providers/transaction-summary/input.ts
|
2669
2750
|
import { ErrorCode as ErrorCode9, FuelError as FuelError9 } from "@fuel-ts/errors";
|
2670
|
-
import { InputType as
|
2751
|
+
import { InputType as InputType6 } from "@fuel-ts/transactions";
|
2671
2752
|
function getInputsByTypes(inputs, types) {
|
2672
2753
|
return inputs.filter((i) => types.includes(i.type));
|
2673
2754
|
}
|
@@ -2675,16 +2756,16 @@ function getInputsByType(inputs, type) {
|
|
2675
2756
|
return inputs.filter((i) => i.type === type);
|
2676
2757
|
}
|
2677
2758
|
function getInputsCoin(inputs) {
|
2678
|
-
return getInputsByType(inputs,
|
2759
|
+
return getInputsByType(inputs, InputType6.Coin);
|
2679
2760
|
}
|
2680
2761
|
function getInputsMessage(inputs) {
|
2681
|
-
return getInputsByType(inputs,
|
2762
|
+
return getInputsByType(inputs, InputType6.Message);
|
2682
2763
|
}
|
2683
2764
|
function getInputsCoinAndMessage(inputs) {
|
2684
|
-
return getInputsByTypes(inputs, [
|
2765
|
+
return getInputsByTypes(inputs, [InputType6.Coin, InputType6.Message]);
|
2685
2766
|
}
|
2686
2767
|
function getInputsContract(inputs) {
|
2687
|
-
return getInputsByType(inputs,
|
2768
|
+
return getInputsByType(inputs, InputType6.Contract);
|
2688
2769
|
}
|
2689
2770
|
function getInputFromAssetId(inputs, assetId) {
|
2690
2771
|
const coinInputs = getInputsCoin(inputs);
|
@@ -2703,7 +2784,7 @@ function getInputContractFromIndex(inputs, inputIndex) {
|
|
2703
2784
|
if (!contractInput) {
|
2704
2785
|
return void 0;
|
2705
2786
|
}
|
2706
|
-
if (contractInput.type !==
|
2787
|
+
if (contractInput.type !== InputType6.Contract) {
|
2707
2788
|
throw new FuelError9(
|
2708
2789
|
ErrorCode9.INVALID_TRANSACTION_INPUT,
|
2709
2790
|
`Contract input should be of type 'contract'.`
|
@@ -2712,10 +2793,10 @@ function getInputContractFromIndex(inputs, inputIndex) {
|
|
2712
2793
|
return contractInput;
|
2713
2794
|
}
|
2714
2795
|
function getInputAccountAddress(input) {
|
2715
|
-
if (input.type ===
|
2796
|
+
if (input.type === InputType6.Coin) {
|
2716
2797
|
return input.owner.toString();
|
2717
2798
|
}
|
2718
|
-
if (input.type ===
|
2799
|
+
if (input.type === InputType6.Message) {
|
2719
2800
|
return input.recipient.toString();
|
2720
2801
|
}
|
2721
2802
|
return "";
|
@@ -3178,7 +3259,9 @@ function assembleTransactionSummary(params) {
|
|
3178
3259
|
gqlTransactionStatus,
|
3179
3260
|
abiMap = {},
|
3180
3261
|
maxInputs,
|
3181
|
-
gasCosts
|
3262
|
+
gasCosts,
|
3263
|
+
maxGasPerTx,
|
3264
|
+
gasPrice
|
3182
3265
|
} = params;
|
3183
3266
|
const gasUsed = getGasUsedFromReceipts(receipts);
|
3184
3267
|
const rawPayload = hexlify11(transactionBytes);
|
@@ -3192,11 +3275,14 @@ function assembleTransactionSummary(params) {
|
|
3192
3275
|
maxInputs
|
3193
3276
|
});
|
3194
3277
|
const typeName = getTransactionTypeName(transaction.type);
|
3278
|
+
const tip = bn14(transaction.policies?.find((policy) => policy.type === PolicyType3.Tip)?.data);
|
3195
3279
|
const { fee } = calculateTransactionFee({
|
3196
|
-
|
3280
|
+
gasPrice,
|
3197
3281
|
rawPayload,
|
3282
|
+
tip,
|
3198
3283
|
consensusParameters: {
|
3199
3284
|
gasCosts,
|
3285
|
+
maxGasPerTx,
|
3200
3286
|
feeParams: {
|
3201
3287
|
gasPerByte,
|
3202
3288
|
gasPriceFactor
|
@@ -3256,7 +3342,7 @@ var TransactionResponse = class {
|
|
3256
3342
|
/** Current provider */
|
3257
3343
|
provider;
|
3258
3344
|
/** Gas used on the transaction */
|
3259
|
-
gasUsed =
|
3345
|
+
gasUsed = bn15(0);
|
3260
3346
|
/** The graphql Transaction with receipts object. */
|
3261
3347
|
gqlTransaction;
|
3262
3348
|
abis;
|
@@ -3334,8 +3420,13 @@ var TransactionResponse = class {
|
|
3334
3420
|
const decodedTransaction = this.decodeTransaction(
|
3335
3421
|
transaction
|
3336
3422
|
);
|
3337
|
-
|
3338
|
-
|
3423
|
+
let txReceipts = [];
|
3424
|
+
if (transaction?.status && "receipts" in transaction.status) {
|
3425
|
+
txReceipts = transaction.status.receipts;
|
3426
|
+
}
|
3427
|
+
const receipts = txReceipts.map(processGqlReceipt) || [];
|
3428
|
+
const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = this.provider.getGasConfig();
|
3429
|
+
const gasPrice = await this.provider.getLatestGasPrice();
|
3339
3430
|
const maxInputs = this.provider.getChain().consensusParameters.maxInputs;
|
3340
3431
|
const transactionSummary = assembleTransactionSummary({
|
3341
3432
|
id: this.id,
|
@@ -3347,7 +3438,9 @@ var TransactionResponse = class {
|
|
3347
3438
|
gasPriceFactor,
|
3348
3439
|
abiMap: contractsAbiMap,
|
3349
3440
|
maxInputs,
|
3350
|
-
gasCosts
|
3441
|
+
gasCosts,
|
3442
|
+
maxGasPerTx,
|
3443
|
+
gasPrice
|
3351
3444
|
});
|
3352
3445
|
return transactionSummary;
|
3353
3446
|
}
|
@@ -3474,30 +3567,29 @@ var processGqlChain = (chain) => {
|
|
3474
3567
|
const { contractParams, feeParams, predicateParams, scriptParams, txParams, gasCosts } = consensusParameters;
|
3475
3568
|
return {
|
3476
3569
|
name,
|
3477
|
-
baseChainHeight:
|
3570
|
+
baseChainHeight: bn16(daHeight),
|
3478
3571
|
consensusParameters: {
|
3479
|
-
contractMaxSize:
|
3480
|
-
maxInputs:
|
3481
|
-
maxOutputs:
|
3482
|
-
maxWitnesses:
|
3483
|
-
maxGasPerTx:
|
3484
|
-
maxScriptLength:
|
3485
|
-
maxScriptDataLength:
|
3486
|
-
maxStorageSlots:
|
3487
|
-
maxPredicateLength:
|
3488
|
-
maxPredicateDataLength:
|
3489
|
-
maxGasPerPredicate:
|
3490
|
-
gasPriceFactor:
|
3491
|
-
gasPerByte:
|
3492
|
-
maxMessageDataLength:
|
3493
|
-
chainId:
|
3494
|
-
baseAssetId: consensusParameters.baseAssetId,
|
3572
|
+
contractMaxSize: bn16(contractParams.contractMaxSize),
|
3573
|
+
maxInputs: bn16(txParams.maxInputs),
|
3574
|
+
maxOutputs: bn16(txParams.maxOutputs),
|
3575
|
+
maxWitnesses: bn16(txParams.maxWitnesses),
|
3576
|
+
maxGasPerTx: bn16(txParams.maxGasPerTx),
|
3577
|
+
maxScriptLength: bn16(scriptParams.maxScriptLength),
|
3578
|
+
maxScriptDataLength: bn16(scriptParams.maxScriptDataLength),
|
3579
|
+
maxStorageSlots: bn16(contractParams.maxStorageSlots),
|
3580
|
+
maxPredicateLength: bn16(predicateParams.maxPredicateLength),
|
3581
|
+
maxPredicateDataLength: bn16(predicateParams.maxPredicateDataLength),
|
3582
|
+
maxGasPerPredicate: bn16(predicateParams.maxGasPerPredicate),
|
3583
|
+
gasPriceFactor: bn16(feeParams.gasPriceFactor),
|
3584
|
+
gasPerByte: bn16(feeParams.gasPerByte),
|
3585
|
+
maxMessageDataLength: bn16(predicateParams.maxMessageDataLength),
|
3586
|
+
chainId: bn16(consensusParameters.chainId),
|
3495
3587
|
gasCosts
|
3496
3588
|
},
|
3497
3589
|
gasCosts,
|
3498
3590
|
latestBlock: {
|
3499
3591
|
id: latestBlock.id,
|
3500
|
-
height:
|
3592
|
+
height: bn16(latestBlock.height),
|
3501
3593
|
time: latestBlock.header.time,
|
3502
3594
|
transactions: latestBlock.transactions.map((i) => ({
|
3503
3595
|
id: i.id
|
@@ -3591,10 +3683,8 @@ var _Provider = class {
|
|
3591
3683
|
* Returns some helpful parameters related to gas fees.
|
3592
3684
|
*/
|
3593
3685
|
getGasConfig() {
|
3594
|
-
const { minGasPrice } = this.getNode();
|
3595
3686
|
const { maxGasPerTx, maxGasPerPredicate, gasPriceFactor, gasPerByte, gasCosts } = this.getChain().consensusParameters;
|
3596
3687
|
return {
|
3597
|
-
minGasPrice,
|
3598
3688
|
maxGasPerTx,
|
3599
3689
|
maxGasPerPredicate,
|
3600
3690
|
gasPriceFactor,
|
@@ -3692,7 +3782,7 @@ var _Provider = class {
|
|
3692
3782
|
*/
|
3693
3783
|
async getBlockNumber() {
|
3694
3784
|
const { chain } = await this.operations.getChain();
|
3695
|
-
return
|
3785
|
+
return bn16(chain.latestBlock.height, 10);
|
3696
3786
|
}
|
3697
3787
|
/**
|
3698
3788
|
* Returns the chain information.
|
@@ -3702,13 +3792,11 @@ var _Provider = class {
|
|
3702
3792
|
async fetchNode() {
|
3703
3793
|
const { nodeInfo } = await this.operations.getNodeInfo();
|
3704
3794
|
const processedNodeInfo = {
|
3705
|
-
maxDepth:
|
3706
|
-
maxTx:
|
3707
|
-
minGasPrice: bn15(nodeInfo.minGasPrice),
|
3795
|
+
maxDepth: bn16(nodeInfo.maxDepth),
|
3796
|
+
maxTx: bn16(nodeInfo.maxTx),
|
3708
3797
|
nodeVersion: nodeInfo.nodeVersion,
|
3709
3798
|
utxoValidation: nodeInfo.utxoValidation,
|
3710
|
-
vmBacktrace: nodeInfo.vmBacktrace
|
3711
|
-
peers: nodeInfo.peers
|
3799
|
+
vmBacktrace: nodeInfo.vmBacktrace
|
3712
3800
|
};
|
3713
3801
|
_Provider.nodeInfoCache[this.url] = processedNodeInfo;
|
3714
3802
|
return processedNodeInfo;
|
@@ -3734,17 +3822,6 @@ var _Provider = class {
|
|
3734
3822
|
} = this.getChain();
|
3735
3823
|
return chainId.toNumber();
|
3736
3824
|
}
|
3737
|
-
/**
|
3738
|
-
* Returns the base asset ID
|
3739
|
-
*
|
3740
|
-
* @returns A promise that resolves to the base asset ID
|
3741
|
-
*/
|
3742
|
-
getBaseAssetId() {
|
3743
|
-
const {
|
3744
|
-
consensusParameters: { baseAssetId }
|
3745
|
-
} = this.getChain();
|
3746
|
-
return baseAssetId;
|
3747
|
-
}
|
3748
3825
|
/**
|
3749
3826
|
* Submits a transaction to the chain to be executed.
|
3750
3827
|
*
|
@@ -3805,14 +3882,13 @@ var _Provider = class {
|
|
3805
3882
|
return this.estimateTxDependencies(transactionRequest);
|
3806
3883
|
}
|
3807
3884
|
const encodedTransaction = hexlify12(transactionRequest.toTransactionBytes());
|
3808
|
-
const { dryRun:
|
3809
|
-
encodedTransaction,
|
3885
|
+
const { dryRun: dryRunStatuses } = await this.operations.dryRun({
|
3886
|
+
encodedTransactions: encodedTransaction,
|
3810
3887
|
utxoValidation: utxoValidation || false
|
3811
3888
|
});
|
3812
|
-
const receipts =
|
3813
|
-
|
3814
|
-
|
3815
|
-
};
|
3889
|
+
const [{ receipts: rawReceipts, status }] = dryRunStatuses;
|
3890
|
+
const receipts = rawReceipts.map(processGqlReceipt);
|
3891
|
+
return { receipts, dryrunStatus: status };
|
3816
3892
|
}
|
3817
3893
|
/**
|
3818
3894
|
* Verifies whether enough gas is available to complete transaction.
|
@@ -3838,7 +3914,7 @@ var _Provider = class {
|
|
3838
3914
|
} = response;
|
3839
3915
|
if (inputs) {
|
3840
3916
|
inputs.forEach((input, index) => {
|
3841
|
-
if ("predicateGasUsed" in input &&
|
3917
|
+
if ("predicateGasUsed" in input && bn16(input.predicateGasUsed).gt(0)) {
|
3842
3918
|
transactionRequest.inputs[index].predicateGasUsed = input.predicateGasUsed;
|
3843
3919
|
}
|
3844
3920
|
});
|
@@ -3851,9 +3927,6 @@ var _Provider = class {
|
|
3851
3927
|
* If there are missing variable outputs,
|
3852
3928
|
* `addVariableOutputs` is called on the transaction.
|
3853
3929
|
*
|
3854
|
-
* @privateRemarks
|
3855
|
-
* TODO: Investigate support for missing contract IDs
|
3856
|
-
* TODO: Add support for missing output messages
|
3857
3930
|
*
|
3858
3931
|
* @param transactionRequest - The transaction request object.
|
3859
3932
|
* @returns A promise.
|
@@ -3866,16 +3939,19 @@ var _Provider = class {
|
|
3866
3939
|
missingContractIds: []
|
3867
3940
|
};
|
3868
3941
|
}
|
3869
|
-
await this.estimatePredicates(transactionRequest);
|
3870
3942
|
let receipts = [];
|
3871
3943
|
const missingContractIds = [];
|
3872
3944
|
let outputVariables = 0;
|
3945
|
+
let dryrunStatus;
|
3873
3946
|
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
3874
|
-
const {
|
3875
|
-
|
3947
|
+
const {
|
3948
|
+
dryRun: [{ receipts: rawReceipts, status }]
|
3949
|
+
} = await this.operations.dryRun({
|
3950
|
+
encodedTransactions: [hexlify12(transactionRequest.toTransactionBytes())],
|
3876
3951
|
utxoValidation: false
|
3877
3952
|
});
|
3878
|
-
receipts =
|
3953
|
+
receipts = rawReceipts.map(processGqlReceipt);
|
3954
|
+
dryrunStatus = status;
|
3879
3955
|
const { missingOutputVariables, missingOutputContractIds } = getReceiptsWithMissingData(receipts);
|
3880
3956
|
const hasMissingOutputs = missingOutputVariables.length !== 0 || missingOutputContractIds.length !== 0;
|
3881
3957
|
if (hasMissingOutputs) {
|
@@ -3885,6 +3961,11 @@ var _Provider = class {
|
|
3885
3961
|
transactionRequest.addContractInputAndOutput(Address2.fromString(contractId));
|
3886
3962
|
missingContractIds.push(contractId);
|
3887
3963
|
});
|
3964
|
+
const { maxFee } = await this.estimateTxGasAndFee({
|
3965
|
+
transactionRequest,
|
3966
|
+
optimizeGas: false
|
3967
|
+
});
|
3968
|
+
transactionRequest.maxFee = maxFee;
|
3888
3969
|
} else {
|
3889
3970
|
break;
|
3890
3971
|
}
|
@@ -3892,7 +3973,133 @@ var _Provider = class {
|
|
3892
3973
|
return {
|
3893
3974
|
receipts,
|
3894
3975
|
outputVariables,
|
3895
|
-
missingContractIds
|
3976
|
+
missingContractIds,
|
3977
|
+
dryrunStatus
|
3978
|
+
};
|
3979
|
+
}
|
3980
|
+
/**
|
3981
|
+
* Dry runs multiple transactions and checks for missing dependencies in batches.
|
3982
|
+
*
|
3983
|
+
* Transactions are dry run in batches. After each dry run, transactions requiring
|
3984
|
+
* further modifications are identified. The method iteratively updates these transactions
|
3985
|
+
* and performs subsequent dry runs until all dependencies for each transaction are satisfied.
|
3986
|
+
*
|
3987
|
+
* @param transactionRequests - Array of transaction request objects.
|
3988
|
+
* @returns A promise that resolves to an array of results for each transaction.
|
3989
|
+
*/
|
3990
|
+
async estimateMultipleTxDependencies(transactionRequests) {
|
3991
|
+
const results = transactionRequests.map(() => ({
|
3992
|
+
receipts: [],
|
3993
|
+
outputVariables: 0,
|
3994
|
+
missingContractIds: [],
|
3995
|
+
dryrunStatus: void 0
|
3996
|
+
}));
|
3997
|
+
const allRequests = clone3(transactionRequests);
|
3998
|
+
const serializedTransactionsMap = /* @__PURE__ */ new Map();
|
3999
|
+
allRequests.forEach((req, index) => {
|
4000
|
+
if (req.type === TransactionType8.Script) {
|
4001
|
+
serializedTransactionsMap.set(index, hexlify12(req.toTransactionBytes()));
|
4002
|
+
}
|
4003
|
+
});
|
4004
|
+
let transactionsToProcess = Array.from(serializedTransactionsMap.keys());
|
4005
|
+
let attempt = 0;
|
4006
|
+
while (transactionsToProcess.length > 0 && attempt < MAX_RETRIES) {
|
4007
|
+
const encodedTransactions = transactionsToProcess.map(
|
4008
|
+
(index) => serializedTransactionsMap.get(index)
|
4009
|
+
);
|
4010
|
+
const dryRunResults = await this.operations.dryRun({
|
4011
|
+
encodedTransactions,
|
4012
|
+
utxoValidation: false
|
4013
|
+
});
|
4014
|
+
const nextRoundTransactions = [];
|
4015
|
+
for (let i = 0; i < dryRunResults.dryRun.length; i++) {
|
4016
|
+
const currentResultIndex = transactionsToProcess[i];
|
4017
|
+
const { receipts: rawReceipts, status } = dryRunResults.dryRun[i];
|
4018
|
+
results[currentResultIndex].receipts = rawReceipts.map(processGqlReceipt);
|
4019
|
+
results[currentResultIndex].dryrunStatus = status;
|
4020
|
+
const { missingOutputVariables, missingOutputContractIds } = getReceiptsWithMissingData(
|
4021
|
+
results[currentResultIndex].receipts
|
4022
|
+
);
|
4023
|
+
const hasMissingOutputs = missingOutputVariables.length > 0 || missingOutputContractIds.length > 0;
|
4024
|
+
const requestToProcess = allRequests[currentResultIndex];
|
4025
|
+
if (hasMissingOutputs && requestToProcess?.type === TransactionType8.Script) {
|
4026
|
+
results[currentResultIndex].outputVariables += missingOutputVariables.length;
|
4027
|
+
requestToProcess.addVariableOutputs(missingOutputVariables.length);
|
4028
|
+
missingOutputContractIds.forEach(({ contractId }) => {
|
4029
|
+
requestToProcess.addContractInputAndOutput(Address2.fromString(contractId));
|
4030
|
+
results[currentResultIndex].missingContractIds.push(contractId);
|
4031
|
+
});
|
4032
|
+
const { maxFee } = await this.estimateTxGasAndFee({
|
4033
|
+
transactionRequest: requestToProcess,
|
4034
|
+
optimizeGas: false
|
4035
|
+
});
|
4036
|
+
requestToProcess.maxFee = maxFee;
|
4037
|
+
serializedTransactionsMap.set(
|
4038
|
+
currentResultIndex,
|
4039
|
+
hexlify12(requestToProcess.toTransactionBytes())
|
4040
|
+
);
|
4041
|
+
nextRoundTransactions.push(currentResultIndex);
|
4042
|
+
allRequests[currentResultIndex] = requestToProcess;
|
4043
|
+
}
|
4044
|
+
}
|
4045
|
+
transactionsToProcess = nextRoundTransactions;
|
4046
|
+
attempt += 1;
|
4047
|
+
}
|
4048
|
+
return results;
|
4049
|
+
}
|
4050
|
+
async dryRunMultipleTransactions(transactionRequests, { utxoValidation, estimateTxDependencies = true } = {}) {
|
4051
|
+
if (estimateTxDependencies) {
|
4052
|
+
return this.estimateMultipleTxDependencies(transactionRequests);
|
4053
|
+
}
|
4054
|
+
const encodedTransactions = transactionRequests.map((tx) => hexlify12(tx.toTransactionBytes()));
|
4055
|
+
const { dryRun: dryRunStatuses } = await this.operations.dryRun({
|
4056
|
+
encodedTransactions,
|
4057
|
+
utxoValidation: utxoValidation || false
|
4058
|
+
});
|
4059
|
+
const results = dryRunStatuses.map(({ receipts: rawReceipts, status }) => {
|
4060
|
+
const receipts = rawReceipts.map(processGqlReceipt);
|
4061
|
+
return { receipts, dryrunStatus: status };
|
4062
|
+
});
|
4063
|
+
return results;
|
4064
|
+
}
|
4065
|
+
async estimateTxGasAndFee(params) {
|
4066
|
+
const { transactionRequest, optimizeGas = true } = params;
|
4067
|
+
let { gasPrice } = params;
|
4068
|
+
const chainInfo = this.getChain();
|
4069
|
+
const { gasPriceFactor } = this.getGasConfig();
|
4070
|
+
const minGas = transactionRequest.calculateMinGas(chainInfo);
|
4071
|
+
if (!gasPrice) {
|
4072
|
+
gasPrice = await this.estimateGasPrice(10);
|
4073
|
+
}
|
4074
|
+
const minFee = calculateGasFee({
|
4075
|
+
gasPrice: bn16(gasPrice),
|
4076
|
+
gas: minGas,
|
4077
|
+
priceFactor: gasPriceFactor,
|
4078
|
+
tip: transactionRequest.tip
|
4079
|
+
}).add(1);
|
4080
|
+
let gasLimit = bn16(0);
|
4081
|
+
if (transactionRequest.type === TransactionType8.Script) {
|
4082
|
+
gasLimit = transactionRequest.gasLimit;
|
4083
|
+
if (!optimizeGas) {
|
4084
|
+
transactionRequest.gasLimit = minGas;
|
4085
|
+
gasLimit = transactionRequest.calculateMaxGas(chainInfo, minGas);
|
4086
|
+
transactionRequest.gasLimit = gasLimit;
|
4087
|
+
}
|
4088
|
+
}
|
4089
|
+
const maxGas = transactionRequest.calculateMaxGas(chainInfo, minGas);
|
4090
|
+
const maxFee = calculateGasFee({
|
4091
|
+
gasPrice: bn16(gasPrice),
|
4092
|
+
gas: maxGas,
|
4093
|
+
priceFactor: gasPriceFactor,
|
4094
|
+
tip: transactionRequest.tip
|
4095
|
+
}).add(1);
|
4096
|
+
return {
|
4097
|
+
minGas,
|
4098
|
+
minFee,
|
4099
|
+
maxGas,
|
4100
|
+
maxFee,
|
4101
|
+
gasPrice,
|
4102
|
+
gasLimit
|
3896
4103
|
};
|
3897
4104
|
}
|
3898
4105
|
/**
|
@@ -3910,15 +4117,17 @@ var _Provider = class {
|
|
3910
4117
|
if (estimateTxDependencies) {
|
3911
4118
|
return this.estimateTxDependencies(transactionRequest);
|
3912
4119
|
}
|
3913
|
-
const
|
3914
|
-
const { dryRun:
|
3915
|
-
|
4120
|
+
const encodedTransactions = [hexlify12(transactionRequest.toTransactionBytes())];
|
4121
|
+
const { dryRun: dryRunStatuses } = await this.operations.dryRun({
|
4122
|
+
encodedTransactions,
|
3916
4123
|
utxoValidation: true
|
3917
4124
|
});
|
3918
|
-
const
|
3919
|
-
|
3920
|
-
receipts
|
3921
|
-
|
4125
|
+
const callResult = dryRunStatuses.map((dryRunStatus) => {
|
4126
|
+
const { id, receipts, status } = dryRunStatus;
|
4127
|
+
const processedReceipts = receipts.map(processGqlReceipt);
|
4128
|
+
return { id, receipts: processedReceipts, status };
|
4129
|
+
});
|
4130
|
+
return { receipts: callResult[0].receipts };
|
3922
4131
|
}
|
3923
4132
|
/**
|
3924
4133
|
* Returns a transaction cost to enable user
|
@@ -3935,80 +4144,80 @@ var _Provider = class {
|
|
3935
4144
|
* @param tolerance - The tolerance to add on top of the gasUsed.
|
3936
4145
|
* @returns A promise that resolves to the transaction cost object.
|
3937
4146
|
*/
|
3938
|
-
async getTransactionCost(transactionRequestLike,
|
3939
|
-
estimateTxDependencies = true,
|
3940
|
-
estimatePredicates = true,
|
3941
|
-
resourcesOwner,
|
3942
|
-
signatureCallback
|
3943
|
-
} = {}) {
|
4147
|
+
async getTransactionCost(transactionRequestLike, { resourcesOwner, signatureCallback, quantitiesToContract = [] } = {}) {
|
3944
4148
|
const txRequestClone = clone3(transactionRequestify(transactionRequestLike));
|
3945
|
-
const chainInfo = this.getChain();
|
3946
|
-
const { gasPriceFactor, minGasPrice, maxGasPerTx } = this.getGasConfig();
|
3947
|
-
const gasPrice = max(txRequestClone.gasPrice, minGasPrice);
|
3948
4149
|
const isScriptTransaction = txRequestClone.type === TransactionType8.Script;
|
3949
4150
|
const coinOutputsQuantities = txRequestClone.getCoinOutputsQuantities();
|
3950
|
-
const allQuantities = mergeQuantities(coinOutputsQuantities,
|
4151
|
+
const allQuantities = mergeQuantities(coinOutputsQuantities, quantitiesToContract);
|
3951
4152
|
txRequestClone.fundWithFakeUtxos(allQuantities, resourcesOwner?.address);
|
3952
|
-
|
3953
|
-
|
3954
|
-
|
3955
|
-
}
|
3956
|
-
if (resourcesOwner && "populateTransactionPredicateData" in resourcesOwner) {
|
3957
|
-
resourcesOwner.populateTransactionPredicateData(txRequestClone);
|
3958
|
-
}
|
3959
|
-
await this.estimatePredicates(txRequestClone);
|
4153
|
+
txRequestClone.maxFee = bn16(0);
|
4154
|
+
if (isScriptTransaction) {
|
4155
|
+
txRequestClone.gasLimit = bn16(0);
|
3960
4156
|
}
|
3961
|
-
if (
|
3962
|
-
|
4157
|
+
if (resourcesOwner && "populateTransactionPredicateData" in resourcesOwner) {
|
4158
|
+
resourcesOwner.populateTransactionPredicateData(txRequestClone);
|
3963
4159
|
}
|
3964
|
-
const
|
3965
|
-
|
4160
|
+
const signedRequest = clone3(txRequestClone);
|
4161
|
+
let addedSignatures = 0;
|
4162
|
+
if (signatureCallback && isScriptTransaction) {
|
4163
|
+
const lengthBefore = signedRequest.witnesses.length;
|
4164
|
+
await signatureCallback(signedRequest);
|
4165
|
+
addedSignatures = signedRequest.witnesses.length - lengthBefore;
|
4166
|
+
}
|
4167
|
+
await this.estimatePredicates(signedRequest);
|
4168
|
+
let { maxFee, maxGas, minFee, minGas, gasPrice, gasLimit } = await this.estimateTxGasAndFee({
|
4169
|
+
transactionRequest: signedRequest,
|
4170
|
+
optimizeGas: false
|
4171
|
+
});
|
4172
|
+
txRequestClone.maxFee = maxFee;
|
3966
4173
|
let receipts = [];
|
3967
4174
|
let missingContractIds = [];
|
3968
4175
|
let outputVariables = 0;
|
3969
|
-
|
3970
|
-
|
3971
|
-
|
4176
|
+
let gasUsed = bn16(0);
|
4177
|
+
txRequestClone.updatePredicateGasUsed(signedRequest.inputs);
|
4178
|
+
if (isScriptTransaction) {
|
4179
|
+
if (signatureCallback) {
|
4180
|
+
await signatureCallback(txRequestClone);
|
4181
|
+
}
|
4182
|
+
txRequestClone.gasLimit = gasLimit;
|
3972
4183
|
const result = await this.estimateTxDependencies(txRequestClone);
|
3973
4184
|
receipts = result.receipts;
|
3974
4185
|
outputVariables = result.outputVariables;
|
3975
4186
|
missingContractIds = result.missingContractIds;
|
4187
|
+
gasUsed = getGasUsedFromReceipts(receipts);
|
4188
|
+
txRequestClone.gasLimit = gasUsed;
|
4189
|
+
({ maxFee, maxGas, minFee, minGas, gasPrice } = await this.estimateTxGasAndFee({
|
4190
|
+
transactionRequest: txRequestClone,
|
4191
|
+
gasPrice
|
4192
|
+
}));
|
3976
4193
|
}
|
3977
|
-
const gasUsed = isScriptTransaction ? getGasUsedFromReceipts(receipts) : minGas;
|
3978
|
-
const usedFee = calculatePriceWithFactor(
|
3979
|
-
gasUsed,
|
3980
|
-
gasPrice,
|
3981
|
-
gasPriceFactor
|
3982
|
-
).normalizeZeroToOne();
|
3983
|
-
const minFee = calculatePriceWithFactor(minGas, gasPrice, gasPriceFactor).normalizeZeroToOne();
|
3984
|
-
const maxFee = calculatePriceWithFactor(maxGas, gasPrice, gasPriceFactor).normalizeZeroToOne();
|
3985
4194
|
return {
|
3986
4195
|
requiredQuantities: allQuantities,
|
3987
4196
|
receipts,
|
3988
4197
|
gasUsed,
|
3989
|
-
minGasPrice,
|
3990
4198
|
gasPrice,
|
3991
4199
|
minGas,
|
3992
4200
|
maxGas,
|
3993
|
-
usedFee,
|
3994
4201
|
minFee,
|
3995
4202
|
maxFee,
|
3996
|
-
estimatedInputs: txRequestClone.inputs,
|
3997
4203
|
outputVariables,
|
3998
|
-
missingContractIds
|
4204
|
+
missingContractIds,
|
4205
|
+
addedSignatures,
|
4206
|
+
estimatedPredicates: txRequestClone.inputs
|
3999
4207
|
};
|
4000
4208
|
}
|
4001
|
-
async getResourcesForTransaction(owner, transactionRequestLike,
|
4209
|
+
async getResourcesForTransaction(owner, transactionRequestLike, quantitiesToContract = []) {
|
4002
4210
|
const ownerAddress = Address2.fromAddressOrString(owner);
|
4003
4211
|
const transactionRequest = transactionRequestify(clone3(transactionRequestLike));
|
4004
|
-
const transactionCost = await this.getTransactionCost(transactionRequest,
|
4212
|
+
const transactionCost = await this.getTransactionCost(transactionRequest, {
|
4213
|
+
quantitiesToContract
|
4214
|
+
});
|
4005
4215
|
transactionRequest.addResources(
|
4006
4216
|
await this.getResourcesToSpend(ownerAddress, transactionCost.requiredQuantities)
|
4007
4217
|
);
|
4008
|
-
const { requiredQuantities, ...txCost } = await this.getTransactionCost(
|
4009
|
-
|
4010
|
-
|
4011
|
-
);
|
4218
|
+
const { requiredQuantities, ...txCost } = await this.getTransactionCost(transactionRequest, {
|
4219
|
+
quantitiesToContract
|
4220
|
+
});
|
4012
4221
|
const resources = await this.getResourcesToSpend(ownerAddress, requiredQuantities);
|
4013
4222
|
return {
|
4014
4223
|
resources,
|
@@ -4030,11 +4239,10 @@ var _Provider = class {
|
|
4030
4239
|
return coins.map((coin) => ({
|
4031
4240
|
id: coin.utxoId,
|
4032
4241
|
assetId: coin.assetId,
|
4033
|
-
amount:
|
4242
|
+
amount: bn16(coin.amount),
|
4034
4243
|
owner: Address2.fromAddressOrString(coin.owner),
|
4035
|
-
|
4036
|
-
|
4037
|
-
txCreatedIdx: bn15(coin.txCreatedIdx)
|
4244
|
+
blockCreated: bn16(coin.blockCreated),
|
4245
|
+
txCreatedIdx: bn16(coin.txCreatedIdx)
|
4038
4246
|
}));
|
4039
4247
|
}
|
4040
4248
|
/**
|
@@ -4071,9 +4279,9 @@ var _Provider = class {
|
|
4071
4279
|
switch (coin.__typename) {
|
4072
4280
|
case "MessageCoin":
|
4073
4281
|
return {
|
4074
|
-
amount:
|
4282
|
+
amount: bn16(coin.amount),
|
4075
4283
|
assetId: coin.assetId,
|
4076
|
-
daHeight:
|
4284
|
+
daHeight: bn16(coin.daHeight),
|
4077
4285
|
sender: Address2.fromAddressOrString(coin.sender),
|
4078
4286
|
recipient: Address2.fromAddressOrString(coin.recipient),
|
4079
4287
|
nonce: coin.nonce
|
@@ -4081,12 +4289,11 @@ var _Provider = class {
|
|
4081
4289
|
case "Coin":
|
4082
4290
|
return {
|
4083
4291
|
id: coin.utxoId,
|
4084
|
-
amount:
|
4292
|
+
amount: bn16(coin.amount),
|
4085
4293
|
assetId: coin.assetId,
|
4086
4294
|
owner: Address2.fromAddressOrString(coin.owner),
|
4087
|
-
|
4088
|
-
|
4089
|
-
txCreatedIdx: bn15(coin.txCreatedIdx)
|
4295
|
+
blockCreated: bn16(coin.blockCreated),
|
4296
|
+
txCreatedIdx: bn16(coin.txCreatedIdx)
|
4090
4297
|
};
|
4091
4298
|
default:
|
4092
4299
|
return null;
|
@@ -4103,13 +4310,13 @@ var _Provider = class {
|
|
4103
4310
|
async getBlock(idOrHeight) {
|
4104
4311
|
let variables;
|
4105
4312
|
if (typeof idOrHeight === "number") {
|
4106
|
-
variables = { height:
|
4313
|
+
variables = { height: bn16(idOrHeight).toString(10) };
|
4107
4314
|
} else if (idOrHeight === "latest") {
|
4108
4315
|
variables = { height: (await this.getBlockNumber()).toString(10) };
|
4109
4316
|
} else if (idOrHeight.length === 66) {
|
4110
4317
|
variables = { blockId: idOrHeight };
|
4111
4318
|
} else {
|
4112
|
-
variables = { blockId:
|
4319
|
+
variables = { blockId: bn16(idOrHeight).toString(10) };
|
4113
4320
|
}
|
4114
4321
|
const { block } = await this.operations.getBlock(variables);
|
4115
4322
|
if (!block) {
|
@@ -4117,7 +4324,7 @@ var _Provider = class {
|
|
4117
4324
|
}
|
4118
4325
|
return {
|
4119
4326
|
id: block.id,
|
4120
|
-
height:
|
4327
|
+
height: bn16(block.height),
|
4121
4328
|
time: block.header.time,
|
4122
4329
|
transactionIds: block.transactions.map((tx) => tx.id)
|
4123
4330
|
};
|
@@ -4132,7 +4339,7 @@ var _Provider = class {
|
|
4132
4339
|
const { blocks: fetchedData } = await this.operations.getBlocks(params);
|
4133
4340
|
const blocks = fetchedData.edges.map(({ node: block }) => ({
|
4134
4341
|
id: block.id,
|
4135
|
-
height:
|
4342
|
+
height: bn16(block.height),
|
4136
4343
|
time: block.header.time,
|
4137
4344
|
transactionIds: block.transactions.map((tx) => tx.id)
|
4138
4345
|
}));
|
@@ -4147,7 +4354,7 @@ var _Provider = class {
|
|
4147
4354
|
async getBlockWithTransactions(idOrHeight) {
|
4148
4355
|
let variables;
|
4149
4356
|
if (typeof idOrHeight === "number") {
|
4150
|
-
variables = { blockHeight:
|
4357
|
+
variables = { blockHeight: bn16(idOrHeight).toString(10) };
|
4151
4358
|
} else if (idOrHeight === "latest") {
|
4152
4359
|
variables = { blockHeight: (await this.getBlockNumber()).toString() };
|
4153
4360
|
} else {
|
@@ -4159,7 +4366,7 @@ var _Provider = class {
|
|
4159
4366
|
}
|
4160
4367
|
return {
|
4161
4368
|
id: block.id,
|
4162
|
-
height:
|
4369
|
+
height: bn16(block.height, 10),
|
4163
4370
|
time: block.header.time,
|
4164
4371
|
transactionIds: block.transactions.map((tx) => tx.id),
|
4165
4372
|
transactions: block.transactions.map(
|
@@ -4208,7 +4415,7 @@ var _Provider = class {
|
|
4208
4415
|
contract: Address2.fromAddressOrString(contractId).toB256(),
|
4209
4416
|
asset: hexlify12(assetId)
|
4210
4417
|
});
|
4211
|
-
return
|
4418
|
+
return bn16(contractBalance.amount, 10);
|
4212
4419
|
}
|
4213
4420
|
/**
|
4214
4421
|
* Returns the balance for the given owner for the given asset ID.
|
@@ -4222,7 +4429,7 @@ var _Provider = class {
|
|
4222
4429
|
owner: Address2.fromAddressOrString(owner).toB256(),
|
4223
4430
|
assetId: hexlify12(assetId)
|
4224
4431
|
});
|
4225
|
-
return
|
4432
|
+
return bn16(balance.amount, 10);
|
4226
4433
|
}
|
4227
4434
|
/**
|
4228
4435
|
* Returns balances for the given owner.
|
@@ -4240,7 +4447,7 @@ var _Provider = class {
|
|
4240
4447
|
const balances = result.balances.edges.map((edge) => edge.node);
|
4241
4448
|
return balances.map((balance) => ({
|
4242
4449
|
assetId: balance.assetId,
|
4243
|
-
amount:
|
4450
|
+
amount: bn16(balance.amount)
|
4244
4451
|
}));
|
4245
4452
|
}
|
4246
4453
|
/**
|
@@ -4262,15 +4469,15 @@ var _Provider = class {
|
|
4262
4469
|
sender: message.sender,
|
4263
4470
|
recipient: message.recipient,
|
4264
4471
|
nonce: message.nonce,
|
4265
|
-
amount:
|
4472
|
+
amount: bn16(message.amount),
|
4266
4473
|
data: message.data
|
4267
4474
|
}),
|
4268
4475
|
sender: Address2.fromAddressOrString(message.sender),
|
4269
4476
|
recipient: Address2.fromAddressOrString(message.recipient),
|
4270
4477
|
nonce: message.nonce,
|
4271
|
-
amount:
|
4478
|
+
amount: bn16(message.amount),
|
4272
4479
|
data: InputMessageCoder.decodeData(message.data),
|
4273
|
-
daHeight:
|
4480
|
+
daHeight: bn16(message.daHeight)
|
4274
4481
|
}));
|
4275
4482
|
}
|
4276
4483
|
/**
|
@@ -4323,44 +4530,52 @@ var _Provider = class {
|
|
4323
4530
|
} = result.messageProof;
|
4324
4531
|
return {
|
4325
4532
|
messageProof: {
|
4326
|
-
proofIndex:
|
4533
|
+
proofIndex: bn16(messageProof.proofIndex),
|
4327
4534
|
proofSet: messageProof.proofSet
|
4328
4535
|
},
|
4329
4536
|
blockProof: {
|
4330
|
-
proofIndex:
|
4537
|
+
proofIndex: bn16(blockProof.proofIndex),
|
4331
4538
|
proofSet: blockProof.proofSet
|
4332
4539
|
},
|
4333
4540
|
messageBlockHeader: {
|
4334
4541
|
id: messageBlockHeader.id,
|
4335
|
-
daHeight:
|
4336
|
-
transactionsCount:
|
4542
|
+
daHeight: bn16(messageBlockHeader.daHeight),
|
4543
|
+
transactionsCount: bn16(messageBlockHeader.transactionsCount),
|
4337
4544
|
transactionsRoot: messageBlockHeader.transactionsRoot,
|
4338
|
-
height:
|
4545
|
+
height: bn16(messageBlockHeader.height),
|
4339
4546
|
prevRoot: messageBlockHeader.prevRoot,
|
4340
4547
|
time: messageBlockHeader.time,
|
4341
4548
|
applicationHash: messageBlockHeader.applicationHash,
|
4342
|
-
|
4343
|
-
messageReceiptCount: bn15(messageBlockHeader.messageReceiptCount)
|
4549
|
+
messageReceiptCount: bn16(messageBlockHeader.messageReceiptCount)
|
4344
4550
|
},
|
4345
4551
|
commitBlockHeader: {
|
4346
4552
|
id: commitBlockHeader.id,
|
4347
|
-
daHeight:
|
4348
|
-
transactionsCount:
|
4553
|
+
daHeight: bn16(commitBlockHeader.daHeight),
|
4554
|
+
transactionsCount: bn16(commitBlockHeader.transactionsCount),
|
4349
4555
|
transactionsRoot: commitBlockHeader.transactionsRoot,
|
4350
|
-
height:
|
4556
|
+
height: bn16(commitBlockHeader.height),
|
4351
4557
|
prevRoot: commitBlockHeader.prevRoot,
|
4352
4558
|
time: commitBlockHeader.time,
|
4353
4559
|
applicationHash: commitBlockHeader.applicationHash,
|
4354
|
-
|
4355
|
-
messageReceiptCount: bn15(commitBlockHeader.messageReceiptCount)
|
4560
|
+
messageReceiptCount: bn16(commitBlockHeader.messageReceiptCount)
|
4356
4561
|
},
|
4357
4562
|
sender: Address2.fromAddressOrString(sender),
|
4358
4563
|
recipient: Address2.fromAddressOrString(recipient),
|
4359
4564
|
nonce,
|
4360
|
-
amount:
|
4565
|
+
amount: bn16(amount),
|
4361
4566
|
data
|
4362
4567
|
};
|
4363
4568
|
}
|
4569
|
+
async getLatestGasPrice() {
|
4570
|
+
const { latestGasPrice } = await this.operations.getLatestGasPrice();
|
4571
|
+
return bn16(latestGasPrice.gasPrice);
|
4572
|
+
}
|
4573
|
+
async estimateGasPrice(blockHorizon) {
|
4574
|
+
const { estimateGasPrice } = await this.operations.estimateGasPrice({
|
4575
|
+
blockHorizon: String(blockHorizon)
|
4576
|
+
});
|
4577
|
+
return bn16(estimateGasPrice.gasPrice);
|
4578
|
+
}
|
4364
4579
|
/**
|
4365
4580
|
* Returns Message Proof for given transaction id and the message id from MessageOut receipt.
|
4366
4581
|
*
|
@@ -4380,10 +4595,10 @@ var _Provider = class {
|
|
4380
4595
|
*/
|
4381
4596
|
async produceBlocks(amount, startTime) {
|
4382
4597
|
const { produceBlocks: latestBlockHeight } = await this.operations.produceBlocks({
|
4383
|
-
blocksToProduce:
|
4598
|
+
blocksToProduce: bn16(amount).toString(10),
|
4384
4599
|
startTimestamp: startTime ? DateTime2.fromUnixMilliseconds(startTime).toTai64() : void 0
|
4385
4600
|
});
|
4386
|
-
return
|
4601
|
+
return bn16(latestBlockHeight);
|
4387
4602
|
}
|
4388
4603
|
// eslint-disable-next-line @typescript-eslint/require-await
|
4389
4604
|
async getTransactionResponse(transactionId) {
|
@@ -4397,7 +4612,7 @@ cacheInputs_fn = function(inputs) {
|
|
4397
4612
|
return;
|
4398
4613
|
}
|
4399
4614
|
inputs.forEach((input) => {
|
4400
|
-
if (input.type ===
|
4615
|
+
if (input.type === InputType7.Coin) {
|
4401
4616
|
this.cache?.set(input.id);
|
4402
4617
|
}
|
4403
4618
|
});
|
@@ -4407,7 +4622,7 @@ __publicField(Provider, "nodeInfoCache", {});
|
|
4407
4622
|
|
4408
4623
|
// src/providers/transaction-summary/get-transaction-summary.ts
|
4409
4624
|
import { ErrorCode as ErrorCode14, FuelError as FuelError14 } from "@fuel-ts/errors";
|
4410
|
-
import { bn as
|
4625
|
+
import { bn as bn17 } from "@fuel-ts/math";
|
4411
4626
|
import { TransactionCoder as TransactionCoder6 } from "@fuel-ts/transactions";
|
4412
4627
|
import { arrayify as arrayify12 } from "@fuel-ts/utils";
|
4413
4628
|
|
@@ -4615,9 +4830,8 @@ var Account = class extends AbstractAccount {
|
|
4615
4830
|
* @param assetId - The asset ID to check the balance for.
|
4616
4831
|
* @returns A promise that resolves to the balance amount.
|
4617
4832
|
*/
|
4618
|
-
async getBalance(assetId) {
|
4619
|
-
const
|
4620
|
-
const amount = await this.provider.getBalance(this.address, assetIdToFetch);
|
4833
|
+
async getBalance(assetId = BaseAssetId3) {
|
4834
|
+
const amount = await this.provider.getBalance(this.address, assetId);
|
4621
4835
|
return amount;
|
4622
4836
|
}
|
4623
4837
|
/**
|
@@ -4654,37 +4868,33 @@ var Account = class extends AbstractAccount {
|
|
4654
4868
|
* @param fee - The estimated transaction fee.
|
4655
4869
|
* @returns A promise that resolves when the resources are added to the transaction.
|
4656
4870
|
*/
|
4657
|
-
async fund(request,
|
4658
|
-
const
|
4659
|
-
const
|
4660
|
-
|
4661
|
-
|
4662
|
-
|
4871
|
+
async fund(request, params) {
|
4872
|
+
const { addedSignatures, estimatedPredicates, maxFee: fee, requiredQuantities } = params;
|
4873
|
+
const txRequest = request;
|
4874
|
+
const requiredQuantitiesWithFee = addAmountToCoinQuantities({
|
4875
|
+
amount: bn18(fee),
|
4876
|
+
assetId: BaseAssetId3,
|
4877
|
+
coinQuantities: requiredQuantities
|
4663
4878
|
});
|
4664
4879
|
const quantitiesDict = {};
|
4665
|
-
|
4880
|
+
requiredQuantitiesWithFee.forEach(({ amount, assetId }) => {
|
4666
4881
|
quantitiesDict[assetId] = {
|
4667
4882
|
required: amount,
|
4668
|
-
owned:
|
4883
|
+
owned: bn18(0)
|
4669
4884
|
};
|
4670
4885
|
});
|
4671
|
-
|
4672
|
-
const cachedMessages = [];
|
4673
|
-
const owner = this.address.toB256();
|
4674
|
-
request.inputs.forEach((input) => {
|
4886
|
+
txRequest.inputs.forEach((input) => {
|
4675
4887
|
const isResource = "amount" in input;
|
4676
4888
|
if (isResource) {
|
4677
4889
|
const isCoin2 = "owner" in input;
|
4678
4890
|
if (isCoin2) {
|
4679
4891
|
const assetId = String(input.assetId);
|
4680
|
-
if (
|
4681
|
-
const amount =
|
4892
|
+
if (quantitiesDict[assetId]) {
|
4893
|
+
const amount = bn18(input.amount);
|
4682
4894
|
quantitiesDict[assetId].owned = quantitiesDict[assetId].owned.add(amount);
|
4683
|
-
cachedUtxos.push(input.id);
|
4684
4895
|
}
|
4685
|
-
} else if (input.
|
4686
|
-
quantitiesDict[
|
4687
|
-
cachedMessages.push(input.nonce);
|
4896
|
+
} else if (input.amount && quantitiesDict[BaseAssetId3]) {
|
4897
|
+
quantitiesDict[BaseAssetId3].owned = quantitiesDict[BaseAssetId3].owned.add(input.amount);
|
4688
4898
|
}
|
4689
4899
|
}
|
4690
4900
|
});
|
@@ -4699,12 +4909,23 @@ var Account = class extends AbstractAccount {
|
|
4699
4909
|
});
|
4700
4910
|
const needsToBeFunded = missingQuantities.length;
|
4701
4911
|
if (needsToBeFunded) {
|
4702
|
-
const
|
4703
|
-
|
4704
|
-
|
4705
|
-
|
4706
|
-
|
4912
|
+
const excludedIds = cacheTxInputsFromOwner(txRequest.inputs, this.address.toB256());
|
4913
|
+
const resources = await this.getResourcesToSpend(missingQuantities, excludedIds);
|
4914
|
+
txRequest.addResources(resources);
|
4915
|
+
}
|
4916
|
+
txRequest.shiftPredicateData();
|
4917
|
+
txRequest.updatePredicateGasUsed(estimatedPredicates);
|
4918
|
+
const requestToBeReEstimate = clone4(txRequest);
|
4919
|
+
if (addedSignatures) {
|
4920
|
+
Array.from({ length: addedSignatures }).forEach(
|
4921
|
+
() => requestToBeReEstimate.addEmptyWitness()
|
4922
|
+
);
|
4707
4923
|
}
|
4924
|
+
const { maxFee } = await this.provider.estimateTxGasAndFee({
|
4925
|
+
transactionRequest: requestToBeReEstimate
|
4926
|
+
});
|
4927
|
+
txRequest.maxFee = maxFee;
|
4928
|
+
return txRequest;
|
4708
4929
|
}
|
4709
4930
|
/**
|
4710
4931
|
* A helper that creates a transfer transaction request and returns it.
|
@@ -4712,29 +4933,25 @@ var Account = class extends AbstractAccount {
|
|
4712
4933
|
* @param destination - The address of the destination.
|
4713
4934
|
* @param amount - The amount of coins to transfer.
|
4714
4935
|
* @param assetId - The asset ID of the coins to transfer.
|
4715
|
-
* @param txParams - The transaction parameters (gasLimit,
|
4936
|
+
* @param txParams - The transaction parameters (gasLimit, tip, maturity, maxFee, witnessLimit).
|
4716
4937
|
* @returns A promise that resolves to the prepared transaction request.
|
4717
4938
|
*/
|
4718
|
-
async createTransfer(destination, amount, assetId, txParams = {}) {
|
4719
|
-
const
|
4720
|
-
|
4721
|
-
const
|
4722
|
-
const request = new ScriptTransactionRequest(params);
|
4723
|
-
request.addCoinOutput(Address3.fromAddressOrString(destination), amount, assetIdToTransfer);
|
4724
|
-
const { maxFee, requiredQuantities, gasUsed, estimatedInputs } = await this.provider.getTransactionCost(request, [], {
|
4939
|
+
async createTransfer(destination, amount, assetId = BaseAssetId3, txParams = {}) {
|
4940
|
+
const request = new ScriptTransactionRequest(txParams);
|
4941
|
+
request.addCoinOutput(Address3.fromAddressOrString(destination), amount, assetId);
|
4942
|
+
const txCost = await this.provider.getTransactionCost(request, {
|
4725
4943
|
estimateTxDependencies: true,
|
4726
4944
|
resourcesOwner: this
|
4727
4945
|
});
|
4728
|
-
|
4729
|
-
|
4730
|
-
|
4731
|
-
|
4732
|
-
|
4733
|
-
|
4734
|
-
|
4735
|
-
|
4736
|
-
await this.fund(request,
|
4737
|
-
request.updatePredicateInputs(estimatedInputs);
|
4946
|
+
if ("gasLimit" in txParams) {
|
4947
|
+
this.validateGas({
|
4948
|
+
gasUsed: txCost.gasUsed,
|
4949
|
+
gasLimit: request.gasLimit
|
4950
|
+
});
|
4951
|
+
}
|
4952
|
+
request.gasLimit = txCost.gasUsed;
|
4953
|
+
request.maxFee = txCost.maxFee;
|
4954
|
+
await this.fund(request, txCost);
|
4738
4955
|
return request;
|
4739
4956
|
}
|
4740
4957
|
/**
|
@@ -4746,15 +4963,14 @@ var Account = class extends AbstractAccount {
|
|
4746
4963
|
* @param txParams - The transaction parameters (gasLimit, gasPrice, maturity).
|
4747
4964
|
* @returns A promise that resolves to the transaction response.
|
4748
4965
|
*/
|
4749
|
-
async transfer(destination, amount, assetId, txParams = {}) {
|
4750
|
-
if (
|
4966
|
+
async transfer(destination, amount, assetId = BaseAssetId3, txParams = {}) {
|
4967
|
+
if (bn18(amount).lte(0)) {
|
4751
4968
|
throw new FuelError15(
|
4752
4969
|
ErrorCode15.INVALID_TRANSFER_AMOUNT,
|
4753
4970
|
"Transfer amount must be a positive number."
|
4754
4971
|
);
|
4755
4972
|
}
|
4756
|
-
const
|
4757
|
-
const request = await this.createTransfer(destination, amount, assetIdToTransfer, txParams);
|
4973
|
+
const request = await this.createTransfer(destination, amount, assetId, txParams);
|
4758
4974
|
return this.sendTransaction(request, { estimateTxDependencies: false });
|
4759
4975
|
}
|
4760
4976
|
/**
|
@@ -4766,40 +4982,38 @@ var Account = class extends AbstractAccount {
|
|
4766
4982
|
* @param txParams - The optional transaction parameters.
|
4767
4983
|
* @returns A promise that resolves to the transaction response.
|
4768
4984
|
*/
|
4769
|
-
async transferToContract(contractId, amount, assetId, txParams = {}) {
|
4770
|
-
if (
|
4985
|
+
async transferToContract(contractId, amount, assetId = BaseAssetId3, txParams = {}) {
|
4986
|
+
if (bn18(amount).lte(0)) {
|
4771
4987
|
throw new FuelError15(
|
4772
4988
|
ErrorCode15.INVALID_TRANSFER_AMOUNT,
|
4773
4989
|
"Transfer amount must be a positive number."
|
4774
4990
|
);
|
4775
4991
|
}
|
4776
4992
|
const contractAddress = Address3.fromAddressOrString(contractId);
|
4777
|
-
const { minGasPrice } = this.provider.getGasConfig();
|
4778
|
-
const assetIdToTransfer = assetId ?? this.provider.getBaseAssetId();
|
4779
|
-
const params = { gasPrice: minGasPrice, ...txParams };
|
4780
4993
|
const { script, scriptData } = await assembleTransferToContractScript({
|
4781
4994
|
hexlifiedContractId: contractAddress.toB256(),
|
4782
|
-
amountToTransfer:
|
4783
|
-
assetId
|
4995
|
+
amountToTransfer: bn18(amount),
|
4996
|
+
assetId
|
4784
4997
|
});
|
4785
4998
|
const request = new ScriptTransactionRequest({
|
4786
|
-
...
|
4999
|
+
...txParams,
|
4787
5000
|
script,
|
4788
5001
|
scriptData
|
4789
5002
|
});
|
4790
5003
|
request.addContractInputAndOutput(contractAddress);
|
4791
|
-
const
|
4792
|
-
|
4793
|
-
[{ amount:
|
4794
|
-
);
|
4795
|
-
request.gasLimit = bn17(params.gasLimit ?? gasUsed);
|
4796
|
-
this.validateGas({
|
4797
|
-
gasUsed,
|
4798
|
-
gasPrice: request.gasPrice,
|
4799
|
-
gasLimit: request.gasLimit,
|
4800
|
-
minGasPrice
|
5004
|
+
const txCost = await this.provider.getTransactionCost(request, {
|
5005
|
+
resourcesOwner: this,
|
5006
|
+
quantitiesToContract: [{ amount: bn18(amount), assetId: String(assetId) }]
|
4801
5007
|
});
|
4802
|
-
|
5008
|
+
if (txParams.gasLimit) {
|
5009
|
+
this.validateGas({
|
5010
|
+
gasUsed: txCost.gasUsed,
|
5011
|
+
gasLimit: request.gasLimit
|
5012
|
+
});
|
5013
|
+
}
|
5014
|
+
request.gasLimit = txCost.gasUsed;
|
5015
|
+
request.maxFee = txCost.maxFee;
|
5016
|
+
await this.fund(request, txCost);
|
4803
5017
|
return this.sendTransaction(request);
|
4804
5018
|
}
|
4805
5019
|
/**
|
@@ -4811,35 +5025,31 @@ var Account = class extends AbstractAccount {
|
|
4811
5025
|
* @returns A promise that resolves to the transaction response.
|
4812
5026
|
*/
|
4813
5027
|
async withdrawToBaseLayer(recipient, amount, txParams = {}) {
|
4814
|
-
const { minGasPrice } = this.provider.getGasConfig();
|
4815
|
-
const baseAssetId = this.provider.getBaseAssetId();
|
4816
5028
|
const recipientAddress = Address3.fromAddressOrString(recipient);
|
4817
5029
|
const recipientDataArray = arrayify14(
|
4818
5030
|
"0x".concat(recipientAddress.toHexString().substring(2).padStart(64, "0"))
|
4819
5031
|
);
|
4820
5032
|
const amountDataArray = arrayify14(
|
4821
|
-
"0x".concat(
|
5033
|
+
"0x".concat(bn18(amount).toHex().substring(2).padStart(16, "0"))
|
4822
5034
|
);
|
4823
5035
|
const script = new Uint8Array([
|
4824
5036
|
...arrayify14(withdrawScript.bytes),
|
4825
5037
|
...recipientDataArray,
|
4826
5038
|
...amountDataArray
|
4827
5039
|
]);
|
4828
|
-
const params = { script,
|
5040
|
+
const params = { script, ...txParams };
|
4829
5041
|
const request = new ScriptTransactionRequest(params);
|
4830
|
-
const
|
4831
|
-
const
|
4832
|
-
|
4833
|
-
|
4834
|
-
|
4835
|
-
|
4836
|
-
|
4837
|
-
|
4838
|
-
|
4839
|
-
|
4840
|
-
|
4841
|
-
});
|
4842
|
-
await this.fund(request, requiredQuantities, maxFee);
|
5042
|
+
const quantitiesToContract = [{ amount: bn18(amount), assetId: BaseAssetId3 }];
|
5043
|
+
const txCost = await this.provider.getTransactionCost(request, { quantitiesToContract });
|
5044
|
+
if (txParams.gasLimit) {
|
5045
|
+
this.validateGas({
|
5046
|
+
gasUsed: txCost.gasUsed,
|
5047
|
+
gasLimit: request.gasLimit
|
5048
|
+
});
|
5049
|
+
}
|
5050
|
+
request.maxFee = txCost.maxFee;
|
5051
|
+
request.gasLimit = txCost.gasUsed;
|
5052
|
+
await this.fund(request, txCost);
|
4843
5053
|
return this.sendTransaction(request);
|
4844
5054
|
}
|
4845
5055
|
async signMessage(message) {
|
@@ -4897,18 +5107,7 @@ var Account = class extends AbstractAccount {
|
|
4897
5107
|
}
|
4898
5108
|
return this.provider.simulate(transactionRequest, { estimateTxDependencies: false });
|
4899
5109
|
}
|
4900
|
-
validateGas({
|
4901
|
-
gasUsed,
|
4902
|
-
gasPrice,
|
4903
|
-
gasLimit,
|
4904
|
-
minGasPrice
|
4905
|
-
}) {
|
4906
|
-
if (minGasPrice.gt(gasPrice)) {
|
4907
|
-
throw new FuelError15(
|
4908
|
-
ErrorCode15.GAS_PRICE_TOO_LOW,
|
4909
|
-
`Gas price '${gasPrice}' is lower than the required: '${minGasPrice}'.`
|
4910
|
-
);
|
4911
|
-
}
|
5110
|
+
validateGas({ gasUsed, gasLimit }) {
|
4912
5111
|
if (gasUsed.gt(gasLimit)) {
|
4913
5112
|
throw new FuelError15(
|
4914
5113
|
ErrorCode15.GAS_LIMIT_TOO_LOW,
|
@@ -4920,7 +5119,7 @@ var Account = class extends AbstractAccount {
|
|
4920
5119
|
|
4921
5120
|
// src/signer/signer.ts
|
4922
5121
|
import { Address as Address4 } from "@fuel-ts/address";
|
4923
|
-
import { randomBytes } from "@fuel-ts/crypto";
|
5122
|
+
import { randomBytes as randomBytes2 } from "@fuel-ts/crypto";
|
4924
5123
|
import { hash } from "@fuel-ts/hasher";
|
4925
5124
|
import { toBytes } from "@fuel-ts/math";
|
4926
5125
|
import { hexlify as hexlify13, concat as concat3, arrayify as arrayify15 } from "@fuel-ts/utils";
|
@@ -5013,7 +5212,7 @@ var Signer = class {
|
|
5013
5212
|
* @returns random 32-byte hashed
|
5014
5213
|
*/
|
5015
5214
|
static generatePrivateKey(entropy) {
|
5016
|
-
return entropy ? hash(concat3([
|
5215
|
+
return entropy ? hash(concat3([randomBytes2(32), arrayify15(entropy)])) : randomBytes2(32);
|
5017
5216
|
}
|
5018
5217
|
/**
|
5019
5218
|
* Extended publicKey from a compact publicKey
|
@@ -5032,7 +5231,7 @@ import { Address as Address5 } from "@fuel-ts/address";
|
|
5032
5231
|
import {
|
5033
5232
|
bufferFromString,
|
5034
5233
|
keccak256,
|
5035
|
-
randomBytes as
|
5234
|
+
randomBytes as randomBytes3,
|
5036
5235
|
scrypt,
|
5037
5236
|
stringFromBuffer,
|
5038
5237
|
decryptJsonWalletData,
|
@@ -5055,7 +5254,7 @@ var removeHexPrefix = (hexString) => {
|
|
5055
5254
|
async function encryptKeystoreWallet(privateKey, address, password) {
|
5056
5255
|
const privateKeyBuffer = bufferFromString(removeHexPrefix(privateKey), "hex");
|
5057
5256
|
const ownerAddress = Address5.fromAddressOrString(address);
|
5058
|
-
const salt =
|
5257
|
+
const salt = randomBytes3(DEFAULT_KEY_SIZE);
|
5059
5258
|
const key = scrypt({
|
5060
5259
|
password: bufferFromString(password),
|
5061
5260
|
salt,
|
@@ -5064,7 +5263,7 @@ async function encryptKeystoreWallet(privateKey, address, password) {
|
|
5064
5263
|
r: DEFAULT_KDF_PARAMS_R,
|
5065
5264
|
p: DEFAULT_KDF_PARAMS_P
|
5066
5265
|
});
|
5067
|
-
const iv =
|
5266
|
+
const iv = randomBytes3(DEFAULT_IV_SIZE);
|
5068
5267
|
const ciphertext = await encryptJsonWalletData(privateKeyBuffer, key, iv);
|
5069
5268
|
const data = Uint8Array.from([...key.subarray(16, 32), ...ciphertext]);
|
5070
5269
|
const macHashUint8Array = keccak256(data);
|
@@ -5200,7 +5399,7 @@ var BaseWalletUnlocked = class extends Account {
|
|
5200
5399
|
* @param transactionRequestLike - The transaction request to send.
|
5201
5400
|
* @returns A promise that resolves to the TransactionResponse object.
|
5202
5401
|
*/
|
5203
|
-
async sendTransaction(transactionRequestLike, { estimateTxDependencies =
|
5402
|
+
async sendTransaction(transactionRequestLike, { estimateTxDependencies = false, awaitExecution } = {}) {
|
5204
5403
|
const transactionRequest = transactionRequestify(transactionRequestLike);
|
5205
5404
|
if (estimateTxDependencies) {
|
5206
5405
|
await this.provider.estimateTxDependencies(transactionRequest);
|
@@ -5241,12 +5440,12 @@ __publicField(BaseWalletUnlocked, "defaultPath", "m/44'/1179993420'/0'/0/0");
|
|
5241
5440
|
// src/hdwallet/hdwallet.ts
|
5242
5441
|
import { ErrorCode as ErrorCode19, FuelError as FuelError19 } from "@fuel-ts/errors";
|
5243
5442
|
import { sha256 as sha2564 } from "@fuel-ts/hasher";
|
5244
|
-
import { bn as
|
5443
|
+
import { bn as bn19, toBytes as toBytes2, toHex } from "@fuel-ts/math";
|
5245
5444
|
import { arrayify as arrayify18, hexlify as hexlify17, concat as concat5 } from "@fuel-ts/utils";
|
5246
5445
|
import { toBeHex, dataSlice as dataSlice2, encodeBase58 as encodeBase582, decodeBase58, computeHmac as computeHmac2, ripemd160 } from "ethers";
|
5247
5446
|
|
5248
5447
|
// src/mnemonic/mnemonic.ts
|
5249
|
-
import { randomBytes as
|
5448
|
+
import { randomBytes as randomBytes4 } from "@fuel-ts/crypto";
|
5250
5449
|
import { ErrorCode as ErrorCode18, FuelError as FuelError18 } from "@fuel-ts/errors";
|
5251
5450
|
import { sha256 as sha2563 } from "@fuel-ts/hasher";
|
5252
5451
|
import { arrayify as arrayify17, hexlify as hexlify16, concat as concat4 } from "@fuel-ts/utils";
|
@@ -7601,7 +7800,7 @@ var Mnemonic = class {
|
|
7601
7800
|
* @returns A randomly generated mnemonic
|
7602
7801
|
*/
|
7603
7802
|
static generate(size = 32, extraEntropy = "") {
|
7604
|
-
const entropy = extraEntropy ? sha2563(concat4([
|
7803
|
+
const entropy = extraEntropy ? sha2563(concat4([randomBytes4(size), arrayify17(extraEntropy)])) : randomBytes4(size);
|
7605
7804
|
return Mnemonic.entropyToMnemonic(entropy);
|
7606
7805
|
}
|
7607
7806
|
};
|
@@ -7707,7 +7906,7 @@ var HDWallet = class {
|
|
7707
7906
|
const IR = bytes.slice(32);
|
7708
7907
|
if (privateKey) {
|
7709
7908
|
const N = "0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141";
|
7710
|
-
const ki =
|
7909
|
+
const ki = bn19(IL).add(privateKey).mod(N).toBytes(32);
|
7711
7910
|
return new HDWallet({
|
7712
7911
|
privateKey: ki,
|
7713
7912
|
chainCode: IR,
|
@@ -7972,20 +8171,21 @@ __publicField(Wallet, "fromExtendedKey", WalletUnlocked.fromExtendedKey);
|
|
7972
8171
|
__publicField(Wallet, "fromEncryptedJson", WalletUnlocked.fromEncryptedJson);
|
7973
8172
|
|
7974
8173
|
// src/test-utils/seedTestWallet.ts
|
7975
|
-
import { randomBytes as
|
8174
|
+
import { randomBytes as randomBytes5 } from "@fuel-ts/crypto";
|
7976
8175
|
var seedTestWallet = async (wallet, quantities) => {
|
7977
8176
|
const genesisWallet = new WalletUnlocked(
|
7978
|
-
process.env.GENESIS_SECRET ||
|
8177
|
+
process.env.GENESIS_SECRET || randomBytes5(32),
|
7979
8178
|
wallet.provider
|
7980
8179
|
);
|
7981
|
-
const
|
7982
|
-
|
7983
|
-
|
7984
|
-
|
7985
|
-
gasPrice: minGasPrice
|
8180
|
+
const request = new ScriptTransactionRequest();
|
8181
|
+
quantities.forEach((quantity) => {
|
8182
|
+
const { amount, assetId } = coinQuantityfy(quantity);
|
8183
|
+
request.addCoinOutput(wallet.address, amount, assetId);
|
7986
8184
|
});
|
7987
|
-
|
7988
|
-
|
8185
|
+
const txCost = await genesisWallet.provider.getTransactionCost(request);
|
8186
|
+
request.gasLimit = txCost.gasUsed;
|
8187
|
+
request.maxFee = txCost.maxFee;
|
8188
|
+
await genesisWallet.fund(request, txCost);
|
7989
8189
|
await genesisWallet.sendTransaction(request, { awaitExecution: true });
|
7990
8190
|
};
|
7991
8191
|
|
@@ -7999,12 +8199,12 @@ var generateTestWallet = async (provider, quantities) => {
|
|
7999
8199
|
};
|
8000
8200
|
|
8001
8201
|
// src/test-utils/launchNode.ts
|
8002
|
-
import {
|
8003
|
-
import {
|
8004
|
-
import { defaultChainConfig, defaultConsensusKey, hexlify as hexlify18 } from "@fuel-ts/utils";
|
8202
|
+
import { BaseAssetId as BaseAssetId4 } from "@fuel-ts/address/configs";
|
8203
|
+
import { defaultChainConfigs, defaultConsensusKey, hexlify as hexlify18 } from "@fuel-ts/utils";
|
8005
8204
|
import { findBinPath } from "@fuel-ts/utils/cli-utils";
|
8006
8205
|
import { spawn } from "child_process";
|
8007
8206
|
import { randomUUID } from "crypto";
|
8207
|
+
import { randomBytes as randomBytes6 } from "ethers";
|
8008
8208
|
import { existsSync, mkdirSync, rmSync, writeFileSync } from "fs";
|
8009
8209
|
import os from "os";
|
8010
8210
|
import path from "path";
|
@@ -8053,12 +8253,12 @@ var launchNode = async ({
|
|
8053
8253
|
// eslint-disable-next-line no-async-promise-executor
|
8054
8254
|
new Promise(async (resolve, reject) => {
|
8055
8255
|
const remainingArgs = extractRemainingArgs(args, [
|
8056
|
-
"--
|
8256
|
+
"--snapshot",
|
8057
8257
|
"--consensus-key",
|
8058
8258
|
"--db-type",
|
8059
8259
|
"--poa-instant"
|
8060
8260
|
]);
|
8061
|
-
const chainConfigPath = getFlagValueFromArgs(args, "--
|
8261
|
+
const chainConfigPath = getFlagValueFromArgs(args, "--snapshot");
|
8062
8262
|
const consensusKey = getFlagValueFromArgs(args, "--consensus-key") || defaultConsensusKey;
|
8063
8263
|
const dbTypeFlagValue = getFlagValueFromArgs(args, "--db-type");
|
8064
8264
|
const useInMemoryDb = dbTypeFlagValue === "in-memory" || dbTypeFlagValue === void 0;
|
@@ -8077,36 +8277,54 @@ var launchNode = async ({
|
|
8077
8277
|
let chainConfigPathToUse;
|
8078
8278
|
const prefix = basePath || os.tmpdir();
|
8079
8279
|
const suffix = basePath ? "" : randomUUID();
|
8080
|
-
const tempDirPath = path.join(prefix, ".fuels", suffix);
|
8280
|
+
const tempDirPath = path.join(prefix, ".fuels", suffix, "chainConfigs");
|
8081
8281
|
if (chainConfigPath) {
|
8082
8282
|
chainConfigPathToUse = chainConfigPath;
|
8083
8283
|
} else {
|
8084
8284
|
if (!existsSync(tempDirPath)) {
|
8085
8285
|
mkdirSync(tempDirPath, { recursive: true });
|
8086
8286
|
}
|
8087
|
-
|
8088
|
-
|
8287
|
+
let { stateConfigJson } = defaultChainConfigs;
|
8288
|
+
const { chainConfigJson, metadataJson } = defaultChainConfigs;
|
8289
|
+
stateConfigJson = {
|
8290
|
+
...stateConfigJson,
|
8291
|
+
coins: [
|
8292
|
+
...stateConfigJson.coins.map((coin) => ({
|
8293
|
+
...coin,
|
8294
|
+
amount: "18446744073709551615"
|
8295
|
+
}))
|
8296
|
+
],
|
8297
|
+
messages: stateConfigJson.messages.map((message) => ({
|
8298
|
+
...message,
|
8299
|
+
amount: "18446744073709551615"
|
8300
|
+
}))
|
8301
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
8302
|
+
};
|
8089
8303
|
if (!process.env.GENESIS_SECRET) {
|
8090
8304
|
const pk = Signer.generatePrivateKey();
|
8091
8305
|
const signer = new Signer(pk);
|
8092
8306
|
process.env.GENESIS_SECRET = hexlify18(pk);
|
8093
|
-
|
8094
|
-
|
8095
|
-
|
8096
|
-
|
8097
|
-
|
8098
|
-
|
8099
|
-
|
8100
|
-
|
8101
|
-
|
8102
|
-
|
8103
|
-
}
|
8104
|
-
]
|
8105
|
-
}
|
8106
|
-
};
|
8307
|
+
stateConfigJson.coins.push({
|
8308
|
+
tx_id: hexlify18(randomBytes6(34)),
|
8309
|
+
owner: signer.address.toHexString(),
|
8310
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
8311
|
+
amount: "18446744073709551615",
|
8312
|
+
asset_id: BaseAssetId4,
|
8313
|
+
output_index: 0,
|
8314
|
+
tx_pointer_block_height: 0,
|
8315
|
+
tx_pointer_tx_idx: 0
|
8316
|
+
});
|
8107
8317
|
}
|
8108
|
-
|
8109
|
-
|
8318
|
+
let fixedStateConfigJSON = JSON.stringify(stateConfigJson);
|
8319
|
+
const regexMakeNumber = /("amount":)"(\d+)"/gm;
|
8320
|
+
fixedStateConfigJSON = fixedStateConfigJSON.replace(regexMakeNumber, "$1$2");
|
8321
|
+
const chainConfigWritePath = path.join(tempDirPath, "chainConfig.json");
|
8322
|
+
const stateConfigWritePath = path.join(tempDirPath, "stateConfig.json");
|
8323
|
+
const metadataWritePath = path.join(tempDirPath, "metadata.json");
|
8324
|
+
writeFileSync(chainConfigWritePath, JSON.stringify(chainConfigJson), "utf8");
|
8325
|
+
writeFileSync(stateConfigWritePath, fixedStateConfigJSON, "utf8");
|
8326
|
+
writeFileSync(metadataWritePath, JSON.stringify(metadataJson), "utf8");
|
8327
|
+
chainConfigPathToUse = tempDirPath;
|
8110
8328
|
}
|
8111
8329
|
const child = spawn(
|
8112
8330
|
command,
|
@@ -8115,10 +8333,10 @@ var launchNode = async ({
|
|
8115
8333
|
["--ip", ipToUse],
|
8116
8334
|
["--port", portToUse],
|
8117
8335
|
useInMemoryDb ? ["--db-type", "in-memory"] : ["--db-path", tempDirPath],
|
8118
|
-
["--min-gas-price", "
|
8336
|
+
["--min-gas-price", "1"],
|
8119
8337
|
poaInstant ? ["--poa-instant", "true"] : [],
|
8120
8338
|
["--consensus-key", consensusKey],
|
8121
|
-
["--
|
8339
|
+
["--snapshot", chainConfigPathToUse],
|
8122
8340
|
"--vm-backtrace",
|
8123
8341
|
"--utxo-validation",
|
8124
8342
|
"--debug",
|
@@ -8165,10 +8383,9 @@ var launchNode = async ({
|
|
8165
8383
|
})
|
8166
8384
|
);
|
8167
8385
|
var generateWallets = async (count, provider) => {
|
8168
|
-
const baseAssetId = provider.getBaseAssetId();
|
8169
8386
|
const wallets = [];
|
8170
8387
|
for (let i = 0; i < count; i += 1) {
|
8171
|
-
const wallet = await generateTestWallet(provider, [[1e3,
|
8388
|
+
const wallet = await generateTestWallet(provider, [[1e3, BaseAssetId4]]);
|
8172
8389
|
wallets.push(wallet);
|
8173
8390
|
}
|
8174
8391
|
return wallets;
|
@@ -8178,7 +8395,7 @@ var launchNodeAndGetWallets = async ({
|
|
8178
8395
|
walletCount = 10
|
8179
8396
|
} = {}) => {
|
8180
8397
|
const { cleanup: closeNode, ip, port } = await launchNode(launchNodeOptions || {});
|
8181
|
-
const provider = await Provider.create(`http://${ip}:${port}/graphql`);
|
8398
|
+
const provider = await Provider.create(`http://${ip}:${port}/v1/graphql`);
|
8182
8399
|
const wallets = await generateWallets(walletCount, provider);
|
8183
8400
|
const cleanup = () => {
|
8184
8401
|
closeNode();
|