@fuel-ts/account 0.100.3 → 0.100.4
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.
- package/dist/account.d.ts +71 -3
- package/dist/account.d.ts.map +1 -1
- package/dist/index.global.js +1467 -217
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +2165 -1005
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1976 -818
- package/dist/index.mjs.map +1 -1
- package/dist/predicate/predicate.d.ts +9 -4
- package/dist/predicate/predicate.d.ts.map +1 -1
- package/dist/providers/__generated__/operations.d.ts +1183 -87
- package/dist/providers/__generated__/operations.d.ts.map +1 -1
- package/dist/providers/assemble-tx-helpers.d.ts +39 -0
- package/dist/providers/assemble-tx-helpers.d.ts.map +1 -0
- package/dist/providers/fuel-graphql-subscriber.d.ts +28 -0
- package/dist/providers/fuel-graphql-subscriber.d.ts.map +1 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/provider.d.ts +80 -6
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/providers/resource.d.ts +4 -1
- package/dist/providers/resource.d.ts.map +1 -1
- package/dist/providers/transaction-request/helpers.d.ts +3 -3
- package/dist/providers/transaction-request/helpers.d.ts.map +1 -1
- package/dist/providers/transaction-request/input.d.ts +2 -0
- package/dist/providers/transaction-request/input.d.ts.map +1 -1
- package/dist/providers/transaction-request/output.d.ts +6 -0
- package/dist/providers/transaction-request/output.d.ts.map +1 -1
- package/dist/providers/transaction-request/script-transaction-request.d.ts +11 -0
- package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-response/transaction-response.d.ts +38 -11
- package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +12 -1
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
- package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
- package/dist/providers/transaction-summary/status.d.ts +16 -2
- package/dist/providers/transaction-summary/status.d.ts.map +1 -1
- package/dist/providers/transaction-summary/types.d.ts +85 -4
- package/dist/providers/transaction-summary/types.d.ts.map +1 -1
- package/dist/providers/utils/handle-gql-error-message.d.ts.map +1 -1
- package/dist/providers/utils/index.d.ts +1 -0
- package/dist/providers/utils/index.d.ts.map +1 -1
- package/dist/providers/utils/parse-graphql-response.d.ts +12 -0
- package/dist/providers/utils/parse-graphql-response.d.ts.map +1 -0
- package/dist/providers/utils/serialization.d.ts +9 -0
- package/dist/providers/utils/serialization.d.ts.map +1 -1
- package/dist/test-utils/launchNode.d.ts.map +1 -1
- package/dist/test-utils/setup-test-provider-and-wallets.d.ts.map +1 -1
- package/dist/test-utils.global.js +1461 -201
- package/dist/test-utils.global.js.map +1 -1
- package/dist/test-utils.js +2046 -891
- package/dist/test-utils.js.map +1 -1
- package/dist/test-utils.mjs +1892 -731
- package/dist/test-utils.mjs.map +1 -1
- package/dist/utils/deployScriptOrPredicate.d.ts.map +1 -1
- package/dist/utils/split-coins-into-batches.d.ts +3 -0
- package/dist/utils/split-coins-into-batches.d.ts.map +1 -0
- package/package.json +15 -15
- package/dist/providers/utils/helpers.d.ts +0 -14
- package/dist/providers/utils/helpers.d.ts.map +0 -1
@@ -7970,9 +7970,9 @@
|
|
7970
7970
|
}
|
7971
7971
|
});
|
7972
7972
|
|
7973
|
-
// ../../node_modules/.pnpm/@fuels+vm-asm@0.
|
7973
|
+
// ../../node_modules/.pnpm/@fuels+vm-asm@0.60.2/node_modules/@fuels/vm-asm/dist/node/index.cjs
|
7974
7974
|
var require_node = __commonJS({
|
7975
|
-
"../../node_modules/.pnpm/@fuels+vm-asm@0.
|
7975
|
+
"../../node_modules/.pnpm/@fuels+vm-asm@0.60.2/node_modules/@fuels/vm-asm/dist/node/index.cjs"(exports) {
|
7976
7976
|
"use strict";
|
7977
7977
|
var wasm$1;
|
7978
7978
|
var cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) : { decode: /* @__PURE__ */ __name(() => {
|
@@ -8711,7 +8711,12 @@
|
|
8711
8711
|
* r" Get memory address of base asset ID
|
8712
8712
|
*/
|
8713
8713
|
BaseAssetId: 6,
|
8714
|
-
"6": "BaseAssetId"
|
8714
|
+
"6": "BaseAssetId",
|
8715
|
+
/**
|
8716
|
+
* r" Get gas price for block
|
8717
|
+
*/
|
8718
|
+
GetGasPrice: 7,
|
8719
|
+
"7": "GetGasPrice"
|
8715
8720
|
});
|
8716
8721
|
var GTFArgs2 = Object.freeze({
|
8717
8722
|
/**
|
@@ -9043,7 +9048,82 @@
|
|
9043
9048
|
* r" Set `$rA` to `tx.policies[count_ones(0b11111 & tx.policyTypes) - 1].expiration`
|
9044
9049
|
*/
|
9045
9050
|
PolicyExpiration: 1285,
|
9046
|
-
"1285": "PolicyExpiration"
|
9051
|
+
"1285": "PolicyExpiration",
|
9052
|
+
/**
|
9053
|
+
* r" Set `$rA` to `Memory address of tx.root`
|
9054
|
+
*/
|
9055
|
+
UploadRoot: 1536,
|
9056
|
+
"1536": "UploadRoot",
|
9057
|
+
/**
|
9058
|
+
* r" Set `$rA` to `tx.witnessIndex`
|
9059
|
+
*/
|
9060
|
+
UploadWitnessIndex: 1537,
|
9061
|
+
"1537": "UploadWitnessIndex",
|
9062
|
+
/**
|
9063
|
+
* r" Set `$rA` to `tx.subsectionIndex`
|
9064
|
+
*/
|
9065
|
+
UploadSubsectionIndex: 1538,
|
9066
|
+
"1538": "UploadSubsectionIndex",
|
9067
|
+
/**
|
9068
|
+
* r" Set `$rA` to `tx.subsectionsNumber`
|
9069
|
+
*/
|
9070
|
+
UploadSubsectionsCount: 1539,
|
9071
|
+
"1539": "UploadSubsectionsCount",
|
9072
|
+
/**
|
9073
|
+
* r" Set `$rA` to `tx.proofSetCount`
|
9074
|
+
*/
|
9075
|
+
UploadProofSetCount: 1540,
|
9076
|
+
"1540": "UploadProofSetCount",
|
9077
|
+
/**
|
9078
|
+
* r" Set `$rA` to `Memory address of tx.proofSet[$rB]`
|
9079
|
+
*/
|
9080
|
+
UploadProofSetAtIndex: 1541,
|
9081
|
+
"1541": "UploadProofSetAtIndex",
|
9082
|
+
/**
|
9083
|
+
* r" Set `$rA` to `Memory address of tx.id`
|
9084
|
+
*/
|
9085
|
+
BlobId: 1792,
|
9086
|
+
"1792": "BlobId",
|
9087
|
+
/**
|
9088
|
+
* r" Set `$rA` to `tx.witnessIndex`
|
9089
|
+
*/
|
9090
|
+
BlobWitnessIndex: 1793,
|
9091
|
+
"1793": "BlobWitnessIndex",
|
9092
|
+
/**
|
9093
|
+
* r" Set `$rA` to `Memory address of tx.purpose`
|
9094
|
+
*/
|
9095
|
+
UpgradePurpose: 2048,
|
9096
|
+
"2048": "UpgradePurpose",
|
9097
|
+
/**
|
9098
|
+
* r" Set `$rA` to `tx.inputsCount`
|
9099
|
+
*/
|
9100
|
+
TxInputsCount: 2304,
|
9101
|
+
"2304": "TxInputsCount",
|
9102
|
+
/**
|
9103
|
+
* r" Set `$rA` to `tx.outputsCount`
|
9104
|
+
*/
|
9105
|
+
TxOutputsCount: 2305,
|
9106
|
+
"2305": "TxOutputsCount",
|
9107
|
+
/**
|
9108
|
+
* r" Set `$rA` to `tx.witnessesCount`
|
9109
|
+
*/
|
9110
|
+
TxWitnessesCount: 2306,
|
9111
|
+
"2306": "TxWitnessesCount",
|
9112
|
+
/**
|
9113
|
+
* r" Set `$rA` to `Memory address of tx.inputs[$rB]`
|
9114
|
+
*/
|
9115
|
+
TxInputAtIndex: 2307,
|
9116
|
+
"2307": "TxInputAtIndex",
|
9117
|
+
/**
|
9118
|
+
* r" Set `$rA` to `Memory address of t.outputs[$rB]`
|
9119
|
+
*/
|
9120
|
+
TxOutputAtIndex: 2308,
|
9121
|
+
"2308": "TxOutputAtIndex",
|
9122
|
+
/**
|
9123
|
+
* r" Set `$rA` to `Memory address of tx.witnesses[$rB]`
|
9124
|
+
*/
|
9125
|
+
TxWitnessAtIndex: 2309,
|
9126
|
+
"2309": "TxWitnessAtIndex"
|
9047
9127
|
});
|
9048
9128
|
var MathOp = Object.freeze({
|
9049
9129
|
/**
|
@@ -9399,7 +9479,27 @@
|
|
9399
9479
|
* r" Given input contract does not exist.
|
9400
9480
|
*/
|
9401
9481
|
InputContractDoesNotExist: 60,
|
9402
|
-
"60": "InputContractDoesNotExist"
|
9482
|
+
"60": "InputContractDoesNotExist",
|
9483
|
+
/**
|
9484
|
+
* r" Storage slot in Create not found
|
9485
|
+
*/
|
9486
|
+
StorageSlotsNotFound: 61,
|
9487
|
+
"61": "StorageSlotsNotFound",
|
9488
|
+
/**
|
9489
|
+
* r" Proof in Upload not found
|
9490
|
+
*/
|
9491
|
+
ProofInUploadNotFound: 62,
|
9492
|
+
"62": "ProofInUploadNotFound",
|
9493
|
+
/**
|
9494
|
+
* r" Invalid purpose type in Upgrade
|
9495
|
+
*/
|
9496
|
+
InvalidUpgradePurposeType: 63,
|
9497
|
+
"63": "InvalidUpgradePurposeType",
|
9498
|
+
/**
|
9499
|
+
* r" Cannot get gas price in predicate
|
9500
|
+
*/
|
9501
|
+
CanNotGetGasPriceInPredicate: 64,
|
9502
|
+
"64": "CanNotGetGasPriceInPredicate"
|
9403
9503
|
});
|
9404
9504
|
var ADDFinalization = typeof FinalizationRegistry === "undefined" ? { register: /* @__PURE__ */ __name(() => {
|
9405
9505
|
}, "register"), unregister: /* @__PURE__ */ __name(() => {
|
@@ -16917,11 +17017,11 @@
|
|
16917
17017
|
}
|
16918
17018
|
__name(_loadWasmModule, "_loadWasmModule");
|
16919
17019
|
function wasm(imports) {
|
16920
|
-
return _loadWasmModule(1, null, "AGFzbQEAAAABOgpgA39/fwF/YAF/AX9gBH9/f38Bf2ACf38AYAJ/fwF/YAABf2AFf39/f38Bf2ABfwBgA39/fwBgAAACGAEDd2JnEF9fd2JpbmRnZW5fdGhyb3cAAwOBAv8BAQEDAwMDAwMBAQMDAQEBAwMBAQEEAQMDAwEBAwEBAQQCAQMCAgICAgIDAwMEBAQEBAQEBAEBAQMDAAICBAQEBAQEBAQEBAABAQgDAwQBAQEBAQEBAgcDAQAAAQEDBwcBAwEDAgIBAQEAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBBQEBAQEEAAQBBgICAwMAAgAHAQgEAQQBCQMBAQcBBQUFBQUFBQUFBQUFBQUFBQUFBQMGBgICBAIGBgAACAAEBQMBABEGCQF/AUGAgMAACwe9Td0FBm1lbW9yeQIAFl9fd2JnX2NvbXBhcmVhcmdzX2ZyZWUAEBpfX3diZ19nZXRfY29tcGFyZWFyZ3NfbW9kZQBIGl9fd2JnX3NldF9jb21wYXJlYXJnc19tb2RlADgiX193YmdfZ2V0X2NvbXBhcmVhcmdzX2luZGlyZWN0X3JocwBJIl9fd2JnX3NldF9jb21wYXJlYXJnc19pbmRpcmVjdF9yaHMASxJjb21wYXJlYXJnc190b19pbW0AWBRjb21wYXJlYXJnc19mcm9tX2ltbQAfFV9fd2JnX2dldF9tYXRoYXJnc19vcABIFV9fd2JnX3NldF9tYXRoYXJnc19vcAA5El9fd2JnX211bGFyZ3NfZnJlZQARHl9fd2JnX2dldF9tdWxhcmdzX2luZGlyZWN0X3JocwBIHl9fd2JnX3NldF9tdWxhcmdzX2luZGlyZWN0X3JocwBMEl9fd2JnX2RpdmFyZ3NfZnJlZQAjHl9fd2JnX2dldF9kaXZhcmdzX2luZGlyZWN0X3JocwC7AR5fX3diZ19zZXRfZGl2YXJnc19pbmRpcmVjdF9yaHMAYxtfX3diZ19wYW5pY2luc3RydWN0aW9uX2ZyZWUAFyFwYW5pY2luc3RydWN0aW9uX2Vycm9yX3R5cGVzY3JpcHQATRdwYW5pY2luc3RydWN0aW9uX3JlYXNvbgBbHHBhbmljaW5zdHJ1Y3Rpb25faW5zdHJ1Y3Rpb24AXAxnbV9mcm9tX2FyZ3MA1wENZ3RmX2Zyb21fYXJncwDPAQdnbV9hcmdzAIoBCGd0Zl9hcmdzAGkOd2RjbV9mcm9tX2FyZ3MAOw53ZG9wX2Zyb21fYXJncwA7DndkbWxfZnJvbV9hcmdzADwOd2Rkdl9mcm9tX2FyZ3MAywEJd2RjbV9hcmdzACQJd3FjbV9hcmdzACUJd2RvcF9hcmdzACYJd3FvcF9hcmdzACcJd2RtbF9hcmdzACgJd3FtbF9hcmdzACkJd2Rkdl9hcmdzAGQJd3Fkdl9hcmdzAGUQX193YmdfaW1tMDZfZnJlZQAqEF9fd2JnX2ltbTEyX2ZyZWUAKxBfX3diZ19pbW0xOF9mcmVlACwOX193YmdfYWRkX2ZyZWUAGA9fX3diZ19ub29wX2ZyZWUABxJhZGRfbmV3X3R5cGVzY3JpcHQAWQZhZGRfcmEANQZhZGRfcmIAEgZhZGRfcmMAGgNhZGQAxwEDYW5kAIwBA2RpdgCNAQJlcQCOAQNleHAAjwECZ3QAkAECbHQAkQEEbWxvZwCSAQRtcm9vAJMBBG1vZF8AlAEFbW92ZV8APQNtdWwAlQEDbm90AD4Cb3IAlgEDc2xsAJcBA3NybACYAQNzdWIAmQEDeG9yAJoBBG1sZHYAagNyZXQAvAEEcmV0ZAA/E2Fsb2NfbmV3X3R5cGVzY3JpcHQAYAdhbG9jX3JhACIEYWxvYwC9AQNtY2wAQANtY3AAmwEDbWVxAGsTYmhzaF9uZXdfdHlwZXNjcmlwdAAgBGJoc2gALQRiaGVpAL4BBGJ1cm4AQQRjYWxsAGwDY2NwAG0EY3JvbwBCBGNzaXoAQwJjYgC/AQNsZGMAbgNsb2cAbwRsb2dkAHAEbWludABEBHJ2cnQAwAEEc2N3cQCcAQNzcncAnQEEc3J3cQBxA3N3dwCeAQRzd3dxAHICdHIAnwEDdHJvAHMEZWNrMQCgAQRlY3IxAKEBBGVkMTkAdARrMjU2AKIBBHMyNTYAowEEdGltZQBFE25vb3BfbmV3X3R5cGVzY3JpcHQAwQEEbm9vcADfAQRmbGFnAMIBA2JhbACkAQNqbXAAwwEDam5lAKUBA3NtbwB1E2FkZGlfbmV3X3R5cGVzY3JpcHQAWgphZGRpX2ltbTEyAAkEYWRkaQCmAQRhbmRpAKcBBGRpdmkAqAEEZXhwaQCpAQRtb2RpAKoBBG11bGkAqwEDb3JpAKwBBHNsbGkArQEEc3JsaQCuAQRzdWJpAK8BBHhvcmkAsAEEam5laQCxAQJsYgCyAQJsdwCzAQJzYgC0AQJzdwC1AQRtY3BpALYBEmd0Zl9uZXdfdHlwZXNjcmlwdADRAQNndGYAtwEEbWNsaQAuEWdtX25ld190eXBlc2NyaXB0AEYIZ21faW1tMTgADQJnbQAvBG1vdmkAMARqbnppADEEam1wZgAyE2ptcGJfbmV3X3R5cGVzY3JpcHQAFQRqbXBiADMEam56ZgC4AQRqbnpiALkBBGpuZWYAdgpqbmViX2ltbTA2ADYEam5lYgB3AmppAE4TY2ZlaV9uZXdfdHlwZXNjcmlwdAA3CmNmZWlfaW1tMjQACgRjZmVpAE8EY2ZzaQBQA2NmZQDEAQNjZnMAxQEEcHNobABRBHBzaGgAUgRwb3BsAFMEcG9waABUE3dkY21fbmV3X3R5cGVzY3JpcHQAzAEEd2RjbQB4BHdxY20AeQR3ZG9wAHoEd3FvcAB7BHdkbWwAfAR3cW1sAH0Ed2RkdgB+BHdxZHYAfwR3ZG1kAIABBHdxbWQAgQEEd2RhbQCCAQR3cWFtAIMBBHdkbW0AhAEEd3FtbQCFAQRlY2FsAIYBBGJzaXoANBNibGRkX25ld190eXBlc2NyaXB0AFUHYmxkZF9yZAA2BGJsZGQAhwEEZWNvcACIAQRlcGFyAIkBFl9fd2JnX2luc3RydWN0aW9uX2ZyZWUADBRpbnN0cnVjdGlvbl90b19ieXRlcwAGEGluc3RydWN0aW9uX3NpemUA8QERcmVnaWRfbmV3X2NoZWNrZWQAugEJcmVnaWRfYmFsAOABCnJlZ2lkX2NnYXMA4QEJcmVnaWRfZXJyAOIBCnJlZ2lkX2ZsYWcA4wEIcmVnaWRfZnAA5AEKcmVnaWRfZ2dhcwDlAQhyZWdpZF9ocADmAQhyZWdpZF9pcwDnAQhyZWdpZF9vZgDoAQlyZWdpZF9vbmUA6QEIcmVnaWRfcGMA6gEJcmVnaWRfcmV0AOsBCnJlZ2lkX3JldGwA7AEIcmVnaWRfc3AA7QEJcmVnaWRfc3BwAO4BDnJlZ2lkX3dyaXRhYmxlAO8BCnJlZ2lkX3plcm8A8AEUcmVnaWRfbmV3X3R5cGVzY3JpcHQA2wELcmVnaWRfdG9fdTgA3AESYW5kX25ld190eXBlc2NyaXB0AFkSZGl2X25ld190eXBlc2NyaXB0AFkRZXFfbmV3X3R5cGVzY3JpcHQAWRJleHBfbmV3X3R5cGVzY3JpcHQAWRFndF9uZXdfdHlwZXNjcmlwdABZEWx0X25ld190eXBlc2NyaXB0AFkTbWxvZ19uZXdfdHlwZXNjcmlwdABZE21yb29fbmV3X3R5cGVzY3JpcHQAWRJtb2RfbmV3X3R5cGVzY3JpcHQAWRJtdWxfbmV3X3R5cGVzY3JpcHQAWRFvcl9uZXdfdHlwZXNjcmlwdABZEnNsbF9uZXdfdHlwZXNjcmlwdABZEnNybF9uZXdfdHlwZXNjcmlwdABZEnN1Yl9uZXdfdHlwZXNjcmlwdABZEnhvcl9uZXdfdHlwZXNjcmlwdABZEm1jcF9uZXdfdHlwZXNjcmlwdABZE3Njd3FfbmV3X3R5cGVzY3JpcHQAWRJzcndfbmV3X3R5cGVzY3JpcHQAWRJzd3dfbmV3X3R5cGVzY3JpcHQAWRF0cl9uZXdfdHlwZXNjcmlwdABZE2VjazFfbmV3X3R5cGVzY3JpcHQAWRNlY3IxX25ld190eXBlc2NyaXB0AFkTazI1Nl9uZXdfdHlwZXNjcmlwdABZE3MyNTZfbmV3X3R5cGVzY3JpcHQAWRJiYWxfbmV3X3R5cGVzY3JpcHQAWRJqbmVfbmV3X3R5cGVzY3JpcHQAWRNhbmRpX25ld190eXBlc2NyaXB0AFoTZGl2aV9uZXdfdHlwZXNjcmlwdABaE2V4cGlfbmV3X3R5cGVzY3JpcHQAWhNtb2RpX25ld190eXBlc2NyaXB0AFoTbXVsaV9uZXdfdHlwZXNjcmlwdABaEm9yaV9uZXdfdHlwZXNjcmlwdABaE3NsbGlfbmV3X3R5cGVzY3JpcHQAWhNzcmxpX25ld190eXBlc2NyaXB0AFoTc3ViaV9uZXdfdHlwZXNjcmlwdABaE3hvcmlfbmV3X3R5cGVzY3JpcHQAWhNqbmVpX25ld190eXBlc2NyaXB0AFoRbGJfbmV3X3R5cGVzY3JpcHQAWhFsd19uZXdfdHlwZXNjcmlwdABaEXNiX25ld190eXBlc2NyaXB0AFoRc3dfbmV3X3R5cGVzY3JpcHQAWhNtY3BpX25ld190eXBlc2NyaXB0AFoTam56Zl9uZXdfdHlwZXNjcmlwdABaE2puemJfbmV3X3R5cGVzY3JpcHQAWhFqaV9uZXdfdHlwZXNjcmlwdAA3E2Nmc2lfbmV3X3R5cGVzY3JpcHQANxNwc2hsX25ld190eXBlc2NyaXB0ADcTcHNoaF9uZXdfdHlwZXNjcmlwdAA3E3BvcGxfbmV3X3R5cGVzY3JpcHQANxNwb3BoX25ld190eXBlc2NyaXB0ADcTbW92aV9uZXdfdHlwZXNjcmlwdAAVE21jbGlfbmV3X3R5cGVzY3JpcHQAFRNqbnppX25ld190eXBlc2NyaXB0ABUTam1wZl9uZXdfdHlwZXNjcmlwdAAVEm5vdF9uZXdfdHlwZXNjcmlwdAAgE3JldGRfbmV3X3R5cGVzY3JpcHQAIBNtb3ZlX25ld190eXBlc2NyaXB0ACASbWNsX25ld190eXBlc2NyaXB0ACATYnVybl9uZXdfdHlwZXNjcmlwdAAgE2Nyb29fbmV3X3R5cGVzY3JpcHQAIBNjc2l6X25ld190eXBlc2NyaXB0ACATbWludF9uZXdfdHlwZXNjcmlwdAAgE3RpbWVfbmV3X3R5cGVzY3JpcHQAIBNic2l6X25ld190eXBlc2NyaXB0ACAGcmV0X3JhACIHYmhlaV9yYQAiBWNiX3JhACIHcnZydF9yYQAiB2ZsYWdfcmEAIgZqbXBfcmEAIghqaV9pbW0yNAAKCmNmc2lfaW1tMjQACgZjZmVfcmEAIgZjZnNfcmEAIgpwc2hsX2ltbTI0AAoKcHNoaF9pbW0yNAAKCnBvcGxfaW1tMjQACgpwb3BoX2ltbTI0AAoTbWxkdl9uZXdfdHlwZXNjcmlwdABVEm1lcV9uZXdfdHlwZXNjcmlwdABVEmNjcF9uZXdfdHlwZXNjcmlwdABVEmxvZ19uZXdfdHlwZXNjcmlwdABVE2xvZ2RfbmV3X3R5cGVzY3JpcHQAVRNzcndxX25ld190eXBlc2NyaXB0AFUTc3d3cV9uZXdfdHlwZXNjcmlwdABVEnRyb19uZXdfdHlwZXNjcmlwdABVE2VkMTlfbmV3X3R5cGVzY3JpcHQAVRJzbW9fbmV3X3R5cGVzY3JpcHQAVRJsZGNfbmV3X3R5cGVzY3JpcHQAVRNqbmVmX25ld190eXBlc2NyaXB0AFUTd2RtZF9uZXdfdHlwZXNjcmlwdABVE3dxbWRfbmV3X3R5cGVzY3JpcHQAVRN3ZGFtX25ld190eXBlc2NyaXB0AFUTd3FhbV9uZXdfdHlwZXNjcmlwdABVE3dkbW1fbmV3X3R5cGVzY3JpcHQAVRN3cW1tX25ld190eXBlc2NyaXB0AFUTZWNhbF9uZXdfdHlwZXNjcmlwdABVE2NhbGxfbmV3X3R5cGVzY3JpcHQAVRNlY29wX25ld190eXBlc2NyaXB0AFUTZXBhcl9uZXdfdHlwZXNjcmlwdABVE19fd2JnX21hdGhhcmdzX2ZyZWUAEB9fX3diZ19zZXRfbWF0aGFyZ3NfaW5kaXJlY3RfcmhzAEseX193Ymdfc2V0X211bGFyZ3NfaW5kaXJlY3RfbGhzAEsfX193YmdfZ2V0X21hdGhhcmdzX2luZGlyZWN0X3JocwBJHl9fd2JnX2dldF9tdWxhcmdzX2luZGlyZWN0X2xocwBJEnJldF9uZXdfdHlwZXNjcmlwdABgE2JoZWlfbmV3X3R5cGVzY3JpcHQAYBFjYl9uZXdfdHlwZXNjcmlwdABgE3J2cnRfbmV3X3R5cGVzY3JpcHQAYBNmbGFnX25ld190eXBlc2NyaXB0AGASam1wX25ld190eXBlc2NyaXB0AGASY2ZlX25ld190eXBlc2NyaXB0AGASY2ZzX25ld190eXBlc2NyaXB0AGAPX193Ymdfam1wZl9mcmVlABgPX193Ymdfc3ViaV9mcmVlABgNX193YmdfamlfZnJlZQAYD19fd2JnX2VjYWxfZnJlZQAYD19fd2JnX3BvcGxfZnJlZQAYDl9fd2JnX2xkY19mcmVlABgPX193Ymdfd2RtbF9mcmVlABgNX193YmdfbHdfZnJlZQAYD19fd2JnX3dxbWxfZnJlZQAYD19fd2JnX2V4cGlfZnJlZQAYD19fd2JnX2puZWZfZnJlZQAYDl9fd2JnX3Nyd19mcmVlABgPX193YmdfYmxkZF9mcmVlABgOX193YmdfbWNwX2ZyZWUAGA9fX3diZ193ZG9wX2ZyZWUAGA9fX3diZ190aW1lX2ZyZWUAGA9fX3diZ19zcndxX2ZyZWUAGA5fX3diZ19jZmVfZnJlZQAYDV9fd2JnX2x0X2ZyZWUAGA9fX3diZ19ydnJ0X2ZyZWUAGA9fX3diZ19kaXZpX2ZyZWUAGA9fX3diZ19tbGR2X2ZyZWUAGA1fX3diZ19sYl9mcmVlABgNX193YmdfY2JfZnJlZQAYDl9fd2JnX2xvZ19mcmVlABgOX193YmdfbWNsX2ZyZWUAGA9fX3diZ193cW1tX2ZyZWUAGA9fX3diZ19zd3dxX2ZyZWUAGA9fX3diZ19idXJuX2ZyZWUAGA5fX3diZ194b3JfZnJlZQAYDl9fd2JnX2V4cF9mcmVlABgPX193Ymdfd3FvcF9mcmVlABgPX193YmdfczI1Nl9mcmVlABgPX193Ymdfd2RhbV9mcmVlABgPX193Ymdfam5lYl9mcmVlABgPX193YmdfbW92aV9mcmVlABgOX193Ymdfam1wX2ZyZWUAGA5fX3diZ19zbW9fZnJlZQAYD19fd2JnX2Joc2hfZnJlZQAYD19fd2JnX211bGlfZnJlZQAYD19fd2JnX21vZGlfZnJlZQAYDl9fd2JnX3Ryb19mcmVlABgPX193Ymdfc2N3cV9mcmVlABgPX193Ymdfd3FjbV9mcmVlABgPX193Ymdfd3FtZF9mcmVlABgPX193YmdfZWNyMV9mcmVlABgNX193Ymdfc3dfZnJlZQAYD19fd2JnX2xvZ2RfZnJlZQAYD19fd2JnX21pbnRfZnJlZQAYD19fd2JnX3dkbWRfZnJlZQAYD19fd2JnX3hvcmlfZnJlZQAYD19fd2JnX2FuZGlfZnJlZQAYD19fd2JnX3NybGlfZnJlZQAYD19fd2JnX2NhbGxfZnJlZQAYD19fd2JnX21vdmVfZnJlZQAYDV9fd2JnX2VxX2ZyZWUAGA9fX3diZ19qbmVpX2ZyZWUAGA9fX3diZ19lZDE5X2ZyZWUAGA9fX3diZ19wc2hoX2ZyZWUAGA5fX3diZ19zbGxfZnJlZQAYD19fd2JnX2FkZGlfZnJlZQAYD19fd2JnX2puemJfZnJlZQAYDl9fd2JnX3N3d19mcmVlABgOX193YmdfY2NwX2ZyZWUAGA9fX3diZ19qbXBiX2ZyZWUAGA9fX3diZ19tbG9nX2ZyZWUAGA9fX3diZ19tY3BpX2ZyZWUAGA1fX3diZ19ndF9mcmVlABgPX193YmdfYnNpel9mcmVlABgPX193Ymdfam56aV9mcmVlABgOX193Ymdfc3ViX2ZyZWUAGA5fX3diZ19kaXZfZnJlZQAYDl9fd2JnX2puZV9mcmVlABgOX193YmdfcmV0X2ZyZWUAGA9fX3diZ19lY29wX2ZyZWUAGA9fX3diZ19yZXRkX2ZyZWUAGA1fX3diZ19vcl9mcmVlABgPX193YmdfY2ZzaV9mcmVlABgPX193YmdfcG9waF9mcmVlABgOX193YmdfYmFsX2ZyZWUAGA9fX3diZ193ZGR2X2ZyZWUAGA9fX3diZ19tcm9vX2ZyZWUAGA9fX3diZ19rMjU2X2ZyZWUAGA1fX3diZ190cl9mcmVlABgOX193YmdfY2ZzX2ZyZWUAGA9fX3diZ193cWFtX2ZyZWUAGA1fX3diZ19zYl9mcmVlABgOX193YmdfZ3RmX2ZyZWUAGA9fX3diZ19qbnpmX2ZyZWUAGA9fX3diZ19mbGFnX2ZyZWUAGA5fX3diZ19tZXFfZnJlZQAYD19fd2JnX2VwYXJfZnJlZQAYD19fd2JnX21jbGlfZnJlZQAYD19fd2JnX3dkY21fZnJlZQAYD19fd2JnX2NmZWlfZnJlZQAYD19fd2JnX2Fsb2NfZnJlZQAYDV9fd2JnX2dtX2ZyZWUAGA9fX3diZ193cWR2X2ZyZWUAGA5fX3diZ19zcmxfZnJlZQAYDl9fd2JnX25vdF9mcmVlABgPX193YmdfY3Npel9mcmVlABgOX193YmdfbW9kX2ZyZWUAGA9fX3diZ193ZG1tX2ZyZWUAGA9fX3diZ19zbGxpX2ZyZWUAGA9fX3diZ19iaGVpX2ZyZWUAGA9fX3diZ19lY2sxX2ZyZWUAGA9fX3diZ19wc2hsX2ZyZWUAGA9fX3diZ19jcm9vX2ZyZWUAGA5fX3diZ19tdWxfZnJlZQAYDl9fd2JnX2FuZF9mcmVlABgOX193Ymdfb3JpX2ZyZWUAGBN3cWR2X25ld190eXBlc2NyaXB0AMwBE3dxbWxfbmV3X3R5cGVzY3JpcHQAzAETd2RtbF9uZXdfdHlwZXNjcmlwdADMARN3cW9wX25ld190eXBlc2NyaXB0AMwBE3dkb3BfbmV3X3R5cGVzY3JpcHQAzAETd3FjbV9uZXdfdHlwZXNjcmlwdADMARN3ZGR2X25ld190eXBlc2NyaXB0AMwBDndxY21fZnJvbV9hcmdzADsKd3Fkdl9pbW0wNgA2CndxbWxfaW1tMDYANgp3ZG1sX2ltbTA2ADYKd3FvcF9pbW0wNgA2Cndkb3BfaW1tMDYANgp3cWNtX2ltbTA2ADYKd2Rkdl9pbW0wNgA2CndkY21faW1tMDYANgpqbmVmX2ltbTA2ADYJbGRjX2ltbTA2ADYOd3Fkdl9mcm9tX2FyZ3MAywEOd3FvcF9mcm9tX2FyZ3MAOwVnbV9yYQA1BWd0X3JjABoFZ3RfcmIAEgVndF9yYQA1BWxiX3JiABIFbGJfcmEANQVsdF9yYwAaBWx0X3JiABIFbHRfcmEANQhsd19pbW0xMgAJBWx3X3JiABIFbHdfcmEANQVvcl9yYwAaBW9yX3JiABIFb3JfcmEANQhzYl9pbW0xMgAJBXNiX3JiABIFc2JfcmEANQhzd19pbW0xMgAJBXN3X3JiABIFc3dfcmEANQV0cl9yYwAaBXRyX3JiABIFdHJfcmEANQVlcV9yYwAaBWVxX3JiABIFZXFfcmEANQZhbmRfcmMAGgZhbmRfcmIAEgZhbmRfcmEANQZiYWxfcmMAGgZiYWxfcmIAEgZiYWxfcmEANQZjY3BfcmMAGgZjY3BfcmIAEgZjY3BfcmEANQZkaXZfcmMAGgZkaXZfcmIAEgZkaXZfcmEANQZleHBfcmMAGgZleHBfcmIAEgZleHBfcmEANQhsYl9pbW0xMgAJBmd0Zl9yYgASBmd0Zl9yYQA1BmpuZV9yYwAaBmpuZV9yYgASBmpuZV9yYQA1BmxkY19yYwAaBmxkY19yYgASBmxkY19yYQA1BmxvZ19yZAA2BmxvZ19yYwAaBmxvZ19yYgASBmxvZ19yYQA1Bm1jbF9yYgASBm1jbF9yYQA1Bm1jcF9yYwAaBm1jcF9yYgASBm1jcF9yYQA1Bm1lcV9yZAA2Bm1lcV9yYwAaBm1lcV9yYgASBm1lcV9yYQA1Bm1vZF9yYwAaBm1vZF9yYgASBm1vZF9yYQA1Bm11bF9yYwAaBm11bF9yYgASBm11bF9yYQA1Bm5vdF9yYgASBm5vdF9yYQA1CW9yaV9pbW0xMgAJBm9yaV9yYgASBm9yaV9yYQA1BnNsbF9yYwAaBnNsbF9yYgASBnNsbF9yYQA1BnNtb19yZAA2BnNtb19yYwAaBnNtb19yYgASBnNtb19yYQA1BnNybF9yYwAaBnNybF9yYgASBnNybF9yYQA1BnNyd19yYwAaBnNyd19yYgASBnNyd19yYQA1BnN1Yl9yYwAaBnN1Yl9yYgASBnN1Yl9yYQA1BnN3d19yYwAaBnN3d19yYgASBnN3d19yYQA1BnRyb19yZAA2BnRyb19yYwAaBnRyb19yYgASBnRyb19yYQA1Bnhvcl9yYwAaBnhvcl9yYgASBnhvcl9yYQA1CWd0Zl9pbW0xMgAJB2FkZGlfcmIAEgdhZGRpX3JhADUKYW5kaV9pbW0xMgAJB2FuZGlfcmIAEgdhbmRpX3JhADUHYmhzaF9yYgASB2Joc2hfcmEANQZjY3BfcmQANgdibGRkX3JjABoHYmxkZF9yYgASB2JsZGRfcmEANQdic2l6X3JiABIHYnNpel9yYQA1B2J1cm5fcmIAEgdidXJuX3JhADUHY2FsbF9yZAA2B2NhbGxfcmMAGgdjYWxsX3JiABIHY2FsbF9yYQA1B2Nyb29fcmIAEgdjcm9vX3JhADUHY3Npel9yYgASB2NzaXpfcmEANQpkaXZpX2ltbTEyAAkHZGl2aV9yYgASB2RpdmlfcmEANQdlY2FsX3JkADYHZWNhbF9yYwAaB2VjYWxfcmIAEgdlY2FsX3JhADUHZWNrMV9yYwAaB2VjazFfcmIAEgdlY2sxX3JhADUHZWNvcF9yZAA2B2Vjb3BfcmMAGgdlY29wX3JiABIHZWNvcF9yYQA1B2VjcjFfcmMAGgdlY3IxX3JiABIHZWNyMV9yYQA1B2VkMTlfcmQANgdlZDE5X3JjABoHZWQxOV9yYgASB2VkMTlfcmEANQdlcGFyX3JkADYHZXBhcl9yYwAaB2VwYXJfcmIAEgdlcGFyX3JhADUKZXhwaV9pbW0xMgAJB2V4cGlfcmIAEgdleHBpX3JhADUKam1wYl9pbW0xOAANB2ptcGJfcmEANQpqbXBmX2ltbTE4AA0Ham1wZl9yYQA1B2puZWJfcmMAGgdqbmViX3JiABIHam5lYl9yYQA1B2puZWZfcmMAGgdqbmVmX3JiABIHam5lZl9yYQA1CmpuZWlfaW1tMTIACQdqbmVpX3JiABIHam5laV9yYQA1CmpuemJfaW1tMTIACQdqbnpiX3JiABIHam56Yl9yYQA1CmpuemZfaW1tMTIACQdqbnpmX3JiABIHam56Zl9yYQA1CmpuemlfaW1tMTgADQdqbnppX3JhADUHazI1Nl9yYwAaB2syNTZfcmIAEgdrMjU2X3JhADUHbG9nZF9yZAA2B2xvZ2RfcmMAGgdsb2dkX3JiABIHbG9nZF9yYQA1Cm1jbGlfaW1tMTgADQdtY2xpX3JhADUKbWNwaV9pbW0xMgAJB21jcGlfcmIAEgdtY3BpX3JhADUHbWludF9yYgASB21pbnRfcmEANQdtbGR2X3JkADYHbWxkdl9yYwAaB21sZHZfcmIAEgdtbGR2X3JhADUHbWxvZ19yYwAaB21sb2dfcmIAEgdtbG9nX3JhADUKbW9kaV9pbW0xMgAJB21vZGlfcmIAEgdtb2RpX3JhADUHbW92ZV9yYgASB21vdmVfcmEANQptb3ZpX2ltbTE4AA0HbW92aV9yYQA1B21yb29fcmMAGgdtcm9vX3JiABIHbXJvb19yYQA1Cm11bGlfaW1tMTIACQdtdWxpX3JiABIHbXVsaV9yYQA1B3JldGRfcmIAEgdyZXRkX3JhADUHczI1Nl9yYwAaB3MyNTZfcmIAEgdzMjU2X3JhADUHc2N3cV9yYwAaB3Njd3FfcmIAEgdzY3dxX3JhADUKc2xsaV9pbW0xMgAJB3NsbGlfcmIAEgdzbGxpX3JhADUKc3JsaV9pbW0xMgAJB3NybGlfcmIAEgdzcmxpX3JhADUHc3J3cV9yZAA2B3Nyd3FfcmMAGgdzcndxX3JiABIHc3J3cV9yYQA1CnN1YmlfaW1tMTIACQdzdWJpX3JiABIHc3ViaV9yYQA1B3N3d3FfcmQANgdzd3dxX3JjABoHc3d3cV9yYgASB3N3d3FfcmEANQd0aW1lX3JiABIHdGltZV9yYQA1B3dkYW1fcmQANgd3ZGFtX3JjABoHd2RhbV9yYgASB3dkYW1fcmEANQd3ZGNtX3JjABoHd2RjbV9yYgASB3dkY21fcmEANQd3ZGR2X3JjABoHd2Rkdl9yYgASB3dkZHZfcmEANQd3ZG1kX3JkADYHd2RtZF9yYwAaB3dkbWRfcmIAEgd3ZG1kX3JhADUHd2RtbF9yYwAaB3dkbWxfcmIAEgd3ZG1sX3JhADUHd2RtbV9yZAA2B3dkbW1fcmMAGgd3ZG1tX3JiABIHd2RtbV9yYQA1B3dkb3BfcmMAGgd3ZG9wX3JiABIHd2RvcF9yYQA1B3dxYW1fcmQANgd3cWFtX3Jj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AAssAQF/QRBBBBDIASIBQoGAgIAQNwIAIAEgAK1C////B4NCIIY3AgggAUEIagskACAAENIBIAAoAgAEQBDZAQALIABBADYCACAAIAFBAEc6AAQLKAAgAxAWIQMgABDJASABEMkBIAIQyQEgAxDQAUEIdEHkAHIQ0wEQZwsoACADEBYhAyAAEMkBIAEQyQEgAhDJASADENABQQh0QeUAchDTARBnCyAAIABBAWsiAEEFTQRAIABBAWoPC0HggsAAQRkQ2gEACykBAX9BEEEEEMgBIgEgADYCDCABQQA2AgggAUKBgICAEDcCACABQQhqCykBAX9BEEEEEMgBIgEgADoADCABQQA2AgggAUKBgICAEDcCACABQQhqCyIAIAIQAiECIAAQyQEgARDJASACEEdBCHRBygByENMBEGcLDwAgACABIAIgA0ESEPMBCw8AIAAgASACIANBGBDzAQsPACAAIAEgAiADQRwQ8wELDwAgACABIAIgA0EdEPMBCw8AIAAgASACIANBIRD0AQsPACAAIAEgAiADQSIQ8wELDwAgACABIAIgA0EjEPMBCw8AIAAgASACIANBKBDzAQsPACAAIAEgAiADQSoQ8wELDwAgACABIAIgA0EsEPMBCw8AIAAgASACIANBLxDzAQsPACAAIAEgAiADQTgQ8wELEAAgACABIAIgA0HTABD0AQsQACAAIAEgAiADQdQAEPQBCxAAIAAgASACIANB3gAQ9AELEAAgACABIAIgA0HfABD0AQsQACAAIAEgAiADQeAAEPQBCxAAIAAgASACIANB4QAQ9AELEAAgACABIAIgA0HiABD0AQsQACAAIAEgAiADQeMAEPQBCxAAIAAgASACIANB5AAQ9AELEAAgACABIAIgA0HlABD0AQsQACAAIAEgAiADQeYAEPMBCxAAIAAgASACIANB5wAQ8wELEAAgACABIAIgA0HoABDzAQsQACAAIAEgAiADQekAEPMBCxAAIAAgASACIANB6gAQ8wELEAAgACABIAIgA0HrABDzAQsQACAAIAEgAiADQewAEPMBCxAAIAAgASACIANB7gAQ8wELEAAgACABIAIgA0HvABDzAQsQACAAIAEgAiADQfAAEPMBCx4AIAEQZiEBIAAQyQEgARDGAUEIdEHMAHIQ0wEQZwsZACAAIAEgAkEgQQAgBBtBEEEAIAMbchAhCw0AIAAgASACQQEQ9QELDQAgACABIAJBAhD1AQsNACAAIAEgAkEDEPUBCw0AIAAgASACQQQQ9QELDQAgACABIAJBBRD1AQsNACAAIAEgAkEGEPUBCw0AIAAgASACQQcQ9QELDQAgACABIAJBCBD1AQsNACAAIAEgAkEJEPUBCw0AIAAgASACQQsQ9QELDQAgACABIAJBDRD1AQsNACAAIAEgAkEOEPUBCw0AIAAgASACQQ8Q9QELDQAgACABIAJBEBD1AQsNACAAIAEgAkEREPUBCw0AIAAgASACQRcQ9QELDQAgACABIAJBJhD1AQsNACAAIAEgAkEnEPUBCw0AIAAgASACQSkQ9QELDQAgACABIAJBKxD1AQsNACAAIAEgAkEtEPUBCw0AIAAgASACQS4Q9QELDQAgACABIAJBMBD1AQsNACAAIAEgAkExEPUBCw0AIAAgASACQTUQ9QELDQAgACABIAJBNxD1AQsNACAAIAEgAkE5EPYBCw0AIAAgASACQToQ9gELDQAgACABIAJBOxD2AQsNACAAIAEgAkE8EPYBCw0AIAAgASACQT0Q9gELDQAgACABIAJBPhD2AQsNACAAIAEgAkE/EPYBCw4AIAAgASACQcAAEPYBCw4AIAAgASACQcEAEPYBCw4AIAAgASACQcIAEPYBCw4AIAAgASACQcMAEPYBCw4AIAAgASACQcQAEPYBCw4AIAAgASACQcUAEPYBCw4AIAAgASACQcYAEPYBCw4AIAAgASACQccAEPYBCw4AIAAgASACQcgAEPYBCw4AIAAgASACQckAEPYBCw4AIAAgASACQcoAEPYBCw4AIAAgASACQdEAEPYBCw4AIAAgASACQdIAEPYBCxcBAX8gAEH/AXFBP00EfyAAEGgFQQALCxsAIAAQ0gEgACgCAEF/RgRAENkBAAsgAC0ABAsJACAAQRMQ9wELCQAgAEEVEPcBCwkAIABBGhD3AQsJACAAQSAQ9wELCQAgAEElEPcBCyIBAX9BEEEEEMgBIgBCADcCCCAAQoGAgIAQNwIAIABBCGoLCQAgAEE0EPcBCwkAIABBNhD3AQsKACAAQdgAEPcBCwoAIABB2QAQ9wELFwAgAUEQdEGAgPwDcSAAQQJ0QfwBcXILGwAgABDJASABEMkBIAIQyQEQOkEIdBDTARBnCxIAIAEgABDVASIABEAgAA8LAAt1AQF/IABB/wFxQcAATwRAIwBBEGsiASQAIAFBIjYCDCABQYCAwAA2AggjAEEgayIAJAAgAEEBNgIEIABB/IbAADYCACAAQgE3AgwgACABQQhqrUKAgICAwACENwMYIAAgAEEYajYCCCAAQbiAwAAQVwALIAALFAAgACABIAJBIEEAIAMbIARyECELFwAgABAbIAEQGyACEBsgAxAWENABEGILFgAgABAbIAEQGyACEBsgAxAbECEQYgsTACAAIAAoAgBBAWs2AgAgARBeCxMAIAAgACgCAEEBazYCACABEF8LEgAgABAbIAEQGyACEAIQRxBiCxEAIAAgASACQSBBACADGxAhCxIAIAAQGyABEBsgAhAdEEcQYgsTACAABEAPC0HcisAAQRsQ2gEACxQBAX9BBEEBEMgBIgEgADYAACABCw0AIAEEQCAAIAEQGQsLgQMBBX9BmY/AAC0AABoCfyAAQQlPBEACQEHN/3tBECAAIABBEE0bIgBrIAFNDQAgAEEQIAFBC2pBeHEgAUELSRsiBGpBDGoQASICRQ0AIAJBCGshAQJAIABBAWsiAyACcUUEQCABIQAMAQsgAkEEayIFKAIAIgZBeHEgAiADakEAIABrcUEIayICIABBACACIAFrQRBNG2oiACABayICayEDIAZBA3EEQCAAIAMgACgCBEEBcXJBAnI2AgQgACADaiIDIAMoAgRBAXI2AgQgBSACIAUoAgBBAXFyQQJyNgIAIAEgAmoiAyADKAIEQQFyNgIEIAEgAhADDAELIAEoAgAhASAAIAM2AgQgACABIAJqNgIACwJAIAAoAgQiAUEDcUUNACABQXhxIgIgBEEQak0NACAAIAQgAUEBcXJBAnI2AgQgACAEaiIBIAIgBGsiBEEDcjYCBCAAIAJqIgIgAigCBEEBcjYCBCABIAQQAwsgAEEIaiEDCyADDAELIAEQAQsLDQAgABDeAUEKdkE/cQsPACAAEBsgARBmEMYBEGILCwAgACMAaiQAIwALDgBB94rAAEHPABDaAQALCQAgACABEAAACwkAIABBP3EQaAsKACAAEBtB/wFxCwgAIABBBBAZCwcAIABBCHQLCQBBMxDTARBnCwYAQQsQaAsGAEEKEGgLBgBBCBBoCwYAQQ8QaAsGAEEGEGgLBgBBCRBoCwYAQQcQ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", imports);
|
17020
|
+
return _loadWasmModule(1, null, "AGFzbQEAAAABRwxgA39/fwF/YAF/AX9gBH9/f38Bf2ACf38Bf2ACf38AYAABf2ABfwBgBX9/f39/AX9gA39/fwBgAn5/AX9gBH9/f38AYAAAAhgBA3diZxBfX3diaW5kZ2VuX3Rocm93AAQDigKIAgEDCQEEBAQEBAEEAQQEAQMKAQEEAQQBAQEDAQQEAQEEAQEEAgEBBAICAgICAgQEBAMDAwMDAwMDAgEBBAQABAICAwAAAwMDAwMDAwMDAwABAQQEBAEBAQEBAQECAQYBAQEEBgYBAQEEBAICAQUAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEDAAEHAgIGBAQAAgAGCAMBAwELAwMDBAEBBAYBBQQFBQUFBQUFBQUFBQUFBQUFBQUEBwcCAgMCBwcAAAgAAwQFAXABCAgFAwEAEQYJAX8BQYCAwAALB8FN3QUGbWVtb3J5AgAWX193YmdfY29tcGFyZWFyZ3NfZnJlZQAUGl9fd2JnX2dldF9jb21wYXJlYXJnc19tb2RlAFAaX193Ymdfc2V0X2NvbXBhcmVhcmdzX21vZGUAPCJfX3diZ19nZXRfY29tcGFyZWFyZ3NfaW5kaXJlY3RfcmhzAFEiX193Ymdfc2V0X2NvbXBhcmVhcmdzX2luZGlyZWN0X3JocwBTEmNvbXBhcmVhcmdzX3RvX2ltbQBfFGNvbXBhcmVhcmdzX2Zyb21faW1tABUVX193YmdfZ2V0X21hdGhhcmdzX29wAFAVX193Ymdfc2V0X21hdGhhcmdzX29wAD0SX193YmdfbXVsYXJnc19mcmVlABYeX193YmdfZ2V0X211bGFyZ3NfaW5kaXJlY3RfcmhzAFAeX193Ymdfc2V0X211bGFyZ3NfaW5kaXJlY3RfcmhzAFQSX193YmdfZGl2YXJnc19mcmVlACceX193YmdfZ2V0X2RpdmFyZ3NfaW5kaXJlY3RfcmhzAMABHl9fd2JnX3NldF9kaXZhcmdzX2luZGlyZWN0X3JocwBpG19fd2JnX3BhbmljaW5zdHJ1Y3Rpb25fZnJlZQAcIXBhbmljaW5zdHJ1Y3Rpb25fZXJyb3JfdHlwZXNjcmlwdABCF3BhbmljaW5zdHJ1Y3Rpb25fcmVhc29uAGAccGFuaWNpbnN0cnVjdGlvbl9pbnN0cnVjdGlvbgBhDGdtX2Zyb21fYXJncwDbAQ1ndGZfZnJvbV9hcmdzANQBB2dtX2FyZ3MAjwEIZ3RmX2FyZ3MAbg53ZGNtX2Zyb21fYXJncwBADndkb3BfZnJvbV9hcmdzAEAOd2RtbF9mcm9tX2FyZ3MAQQ53ZGR2X2Zyb21fYXJncwDPAQl3ZGNtX2FyZ3MAKAl3cWNtX2FyZ3MAKQl3ZG9wX2FyZ3MAKgl3cW9wX2FyZ3MAKwl3ZG1sX2FyZ3MALAl3cW1sX2FyZ3MALQl3ZGR2X2FyZ3MAagl3cWR2X2FyZ3MAaxBfX3diZ19pbW0wNl9mcmVlAC4QX193YmdfaW1tMTJfZnJlZQAvEF9fd2JnX2ltbTE4X2ZyZWUAMA5fX3diZ19hZGRfZnJlZQAdD19fd2JnX25vb3BfZnJlZQAJEmFkZF9uZXdfdHlwZXNjcmlwdABDBmFkZF9yYQA6BmFkZF9yYgAXBmFkZF9yYwAeA2FkZADMAQNhbmQAkQEDZGl2AJIBAmVxAJMBA2V4cACUAQJndACVAQJsdACWAQRtbG9nAJcBBG1yb28AmAEEbW9kXwCZAQVtb3ZlXwBFA211bACaAQNub3QARgJvcgCbAQNzbGwAnAEDc3JsAJ0BA3N1YgCeAQN4b3IAnwEEbWxkdgBvA3JldADBAQRyZXRkAEcTYWxvY19uZXdfdHlwZXNjcmlwdABdB2Fsb2NfcmEAJQRhbG9jAMIBA21jbABIA21jcACgAQNtZXEAcBNiaHNoX25ld190eXBlc2NyaXB0ABoEYmhzaAAxBGJoZWkAwwEEYnVybgBJBGNhbGwAcQNjY3AAcgRjcm9vAEoEY3NpegBLAmNiAMQBA2xkYwBzA2xvZwB0BGxvZ2QAdQRtaW50AEwEcnZydADFAQRzY3dxAKEBA3NydwCiAQRzcndxAHYDc3d3AKMBBHN3d3EAdwJ0cgCkAQN0cm8AeARlY2sxAKUBBGVjcjEApgEEZWQxOQB5BGsyNTYApwEEczI1NgCoAQR0aW1lAE0Tbm9vcF9uZXdfdHlwZXNjcmlwdABtBG5vb3AA5wEEZmxhZwDGAQNiYWwAqQEDam1wAMcBA2puZQCqAQNzbW8AehNhZGRpX25ld190eXBlc2NyaXB0AEQKYWRkaV9pbW0xMgAKBGFkZGkAqwEEYW5kaQCsAQRkaXZpAK0BBGV4cGkArgEEbW9kaQCvAQRtdWxpALABA29yaQCxAQRzbGxpALIBBHNybGkAswEEc3ViaQC0AQR4b3JpALUBBGpuZWkAtgECbGIAtwECbHcAuAECc2IAuQECc3cAugEEbWNwaQC7ARJndGZfbmV3X3R5cGVzY3JpcHQA1gEDZ3RmALwBBG1jbGkAMhFnbV9uZXdfdHlwZXNjcmlwdABOCGdtX2ltbTE4AA8CZ20AMwRtb3ZpADQEam56aQA1BGptcGYANhNqbXBiX25ld190eXBlc2NyaXB0ABAEam1wYgA3BGpuemYAvQEEam56YgC+AQRqbmVmAHsKam5lYl9pbW0wNgA7BGpuZWIAfAJqaQBVE2NmZWlfbmV3X3R5cGVzY3JpcHQAJgpjZmVpX2ltbTI0AAwEY2ZlaQBWBGNmc2kAVwNjZmUAyAEDY2ZzAMkBBHBzaGwAWARwc2hoAFkEcG9wbABaBHBvcGgAWxN3ZGNtX25ld190eXBlc2NyaXB0ANABBHdkY20AfQR3cWNtAH4Ed2RvcAB/BHdxb3AAgAEEd2RtbACBAQR3cW1sAIIBBHdkZHYAgwEEd3FkdgCEAQR3ZG1kAIUBBHdxbWQAhgEEd2RhbQCHAQR3cWFtAIgBBHdkbW0AiQEEd3FtbQCKAQRlY2FsAIsBBGJzaXoAOBNibGRkX25ld190eXBlc2NyaXB0ADkHYmxkZF9yZAA7BGJsZGQAjAEEZWNvcACNAQRlcGFyAI4BFl9fd2JnX2luc3RydWN0aW9uX2ZyZWUADhRpbnN0cnVjdGlvbl90b19ieXRlcwAIEGluc3RydWN0aW9uX3NpemUA+gERcmVnaWRfbmV3X2NoZWNrZWQAvwEJcmVnaWRfYmFsAOkBCnJlZ2lkX2NnYXMA6gEJcmVnaWRfZXJyAOsBCnJlZ2lkX2ZsYWcA7AEIcmVnaWRfZnAA7QEKcmVnaWRfZ2dhcwDuAQhyZWdpZF9ocADvAQhyZWdpZF9pcwDwAQhyZWdpZF9vZgDxAQlyZWdpZF9vbmUA8gEIcmVnaWRfcGMA8wEJcmVnaWRfcmV0APQBCnJlZ2lkX3JldGwA9QEIcmVnaWRfc3AA9gEJcmVnaWRfc3BwAPcBDnJlZ2lkX3dyaXRhYmxlAPgBCnJlZ2lkX3plcm8A+QEUcmVnaWRfbmV3X3R5cGVzY3JpcHQA4gELcmVnaWRfdG9fdTgA4wESYW5kX25ld190eXBlc2NyaXB0AEMSZGl2X25ld190eXBlc2NyaXB0AEMRZXFfbmV3X3R5cGVzY3JpcHQAQxJleHBfbmV3X3R5cGVzY3JpcHQAQxFndF9uZXdfdHlwZXNjcmlwdABDEWx0X25ld190eXBlc2NyaXB0AEMTbWxvZ19uZXdfdHlwZXNjcmlwdABDE21yb29fbmV3X3R5cGVzY3JpcHQAQxJtb2RfbmV3X3R5cGVzY3JpcHQAQxJtdWxfbmV3X3R5cGVzY3JpcHQAQxFvcl9uZXdfdHlwZXNjcmlwdABDEnNsbF9uZXdfdHlwZXNjcmlwdABDEnNybF9uZXdfdHlwZXNjcmlwdABDEnN1Yl9uZXdfdHlwZXNjcmlwdABDEnhvcl9uZXdfdHlwZXNjcmlwdABDEm1jcF9uZXdfdHlwZXNjcmlwdABDE3Njd3FfbmV3X3R5cGVzY3JpcHQAQxJzcndfbmV3X3R5cGVzY3JpcHQAQxJzd3dfbmV3X3R5cGVzY3JpcHQAQxF0cl9uZXdfdHlwZXNjcmlwdABDE2VjazFfbmV3X3R5cGVzY3JpcHQAQxNlY3IxX25ld190eXBlc2NyaXB0AEMTazI1Nl9uZXdfdHlwZXNjcmlwdABDE3MyNTZfbmV3X3R5cGVzY3JpcHQAQxJiYWxfbmV3X3R5cGVzY3JpcHQAQxJqbmVfbmV3X3R5cGVzY3JpcHQAQxNhbmRpX25ld190eXBlc2NyaXB0AEQTZGl2aV9uZXdfdHlwZXNjcmlwdABEE2V4cGlfbmV3X3R5cGVzY3JpcHQARBNtb2RpX25ld190eXBlc2NyaXB0AEQTbXVsaV9uZXdfdHlwZXNjcmlwdABEEm9yaV9uZXdfdHlwZXNjcmlwdABEE3NsbGlfbmV3X3R5cGVzY3JpcHQARBNzcmxpX25ld190eXBlc2NyaXB0AEQTc3ViaV9uZXdfdHlwZXNjcmlwdABEE3hvcmlfbmV3X3R5cGVzY3JpcHQARBNqbmVpX25ld190eXBlc2NyaXB0AEQRbGJfbmV3X3R5cGVzY3JpcHQARBFsd19uZXdfdHlwZXNjcmlwdABEEXNiX25ld190eXBlc2NyaXB0AEQRc3dfbmV3X3R5cGVzY3JpcHQARBNtY3BpX25ld190eXBlc2NyaXB0AEQTam56Zl9uZXdfdHlwZXNjcmlwdABEE2puemJfbmV3X3R5cGVzY3JpcHQARBFqaV9uZXdfdHlwZXNjcmlwdAAmE2Nmc2lfbmV3X3R5cGVzY3JpcHQAJhNwc2hsX25ld190eXBlc2NyaXB0ACYTcHNoaF9uZXdfdHlwZXNjcmlwdAAmE3BvcGxfbmV3X3R5cGVzY3JpcHQAJhNwb3BoX25ld190eXBlc2NyaXB0ACYSbm90X25ld190eXBlc2NyaXB0ABoTcmV0ZF9uZXdfdHlwZXNjcmlwdAAaE21vdmVfbmV3X3R5cGVzY3JpcHQAGhJtY2xfbmV3X3R5cGVzY3JpcHQAGhNidXJuX25ld190eXBlc2NyaXB0ABoTY3Jvb19uZXdfdHlwZXNjcmlwdAAaE2NzaXpfbmV3X3R5cGVzY3JpcHQAGhNtaW50X25ld190eXBlc2NyaXB0ABoTdGltZV9uZXdfdHlwZXNjcmlwdAAaE2JzaXpfbmV3X3R5cGVzY3JpcHQAGhJyZXRfbmV3X3R5cGVzY3JpcHQAXRNiaGVpX25ld190eXBlc2NyaXB0AF0RY2JfbmV3X3R5cGVzY3JpcHQAXRNydnJ0X25ld190eXBlc2NyaXB0AF0TZmxhZ19uZXdfdHlwZXNjcmlwdABdEmptcF9uZXdfdHlwZXNjcmlwdABdEmNmZV9uZXdfdHlwZXNjcmlwdABdEmNmc19uZXdfdHlwZXNjcmlwdABdE21sZHZfbmV3X3R5cGVzY3JpcHQAORJtZXFfbmV3X3R5cGVzY3JpcHQAORJjY3BfbmV3X3R5cGVzY3JpcHQAORJsb2dfbmV3X3R5cGVzY3JpcHQAORNsb2dkX25ld190eXBlc2NyaXB0ADkTc3J3cV9uZXdfdHlwZXNjcmlwdAA5E3N3d3FfbmV3X3R5cGVzY3JpcHQAORJ0cm9fbmV3X3R5cGVzY3JpcHQAORNlZDE5X25ld190eXBlc2NyaXB0ADkSc21vX25ld190eXBlc2NyaXB0ADkSbGRjX25ld190eXBlc2NyaXB0ADkTam5lZl9uZXdfdHlwZXNjcmlwdAA5E3dkbWRfbmV3X3R5cGVzY3JpcHQAORN3cW1kX25ld190eXBlc2NyaXB0ADkTd2RhbV9uZXdfdHlwZXNjcmlwdAA5E3dxYW1fbmV3X3R5cGVzY3JpcHQAORN3ZG1tX25ld190eXBlc2NyaXB0ADkTd3FtbV9uZXdfdHlwZXNjcmlwdAA5E2VjYWxfbmV3X3R5cGVzY3JpcHQAORNjYWxsX25ld190eXBlc2NyaXB0ADkTZWNvcF9uZXdfdHlwZXNjcmlwdAA5E2VwYXJfbmV3X3R5cGVzY3JpcHQAOQZyZXRfcmEAJQdiaGVpX3JhACUFY2JfcmEAJQdydnJ0X3JhACUHZmxhZ19yYQAlBmptcF9yYQAlCGppX2ltbTI0AAwKY2ZzaV9pbW0yNAAMBmNmZV9yYQAlBmNmc19yYQAlCnBzaGxfaW1tMjQADApwc2hoX2ltbTI0AAwKcG9wbF9pbW0yNAAMCnBvcGhfaW1tMjQADBNtb3ZpX25ld190eXBlc2NyaXB0ABATbWNsaV9uZXdfdHlwZXNjcmlwdAAQE2puemlfbmV3X3R5cGVzY3JpcHQAEBNqbXBmX25ld190eXBlc2NyaXB0ABATX193YmdfbWF0aGFyZ3NfZnJlZQAUH19fd2JnX3NldF9tYXRoYXJnc19pbmRpcmVjdF9yaHMAUx5fX3diZ19zZXRfbXVsYXJnc19pbmRpcmVjdF9saHMAUx9fX3diZ19nZXRfbWF0aGFyZ3NfaW5kaXJlY3RfcmhzAFEeX193YmdfZ2V0X211bGFyZ3NfaW5kaXJlY3RfbGhzAFEPX193YmdfZXhwaV9mcmVlAB0PX193YmdfYmhlaV9mcmVlAB0PX193Ymdfd2RtbF9mcmVlAB0PX193YmdfcHNobF9mcmVlAB0OX193YmdfbG9nX2ZyZWUAHQ5fX3diZ19jY3BfZnJlZQAdD19fd2JnX2VjazFfZnJlZQAdD19fd2JnX2VjcjFfZnJlZQAdDl9fd2JnX3Ntb19mcmVlAB0OX193Ymdfb3JpX2ZyZWUAHQ5fX3diZ190cm9fZnJlZQAdDl9fd2JnX21lcV9mcmVlAB0OX193YmdfY2ZzX2ZyZWUAHQ5fX3diZ19kaXZfZnJlZQAdDV9fd2JnX2x0X2ZyZWUAHQ9fX3diZ19iaHNoX2ZyZWUAHQ1fX3diZ19zYl9mcmVlAB0PX193Ymdfd2RtZF9mcmVlAB0NX193YmdfdHJfZnJlZQAdDl9fd2JnX3hvcl9mcmVlAB0PX193Ymdfam5lYl9mcmVlAB0PX193Ymdfam5lZl9mcmVlAB0PX193YmdfY3Npel9mcmVlAB0PX193YmdfY3Jvb19mcmVlAB0PX193YmdfZGl2aV9mcmVlAB0NX193YmdfZ21fZnJlZQAdD19fd2JnX21vZGlfZnJlZQAdD19fd2JnX3hvcmlfZnJlZQAdDV9fd2JnX2NiX2ZyZWUAHQ9fX3diZ193ZGNtX2ZyZWUAHQ5fX3diZ19qbXBfZnJlZQAdD19fd2JnX3dxYW1fZnJlZQAdDl9fd2JnX2xkY19mcmVlAB0PX193YmdfZWQxOV9mcmVlAB0NX193Ymdfc3dfZnJlZQAdD19fd2JnX3RpbWVfZnJlZQAdD19fd2JnX2Vjb3BfZnJlZQAdD19fd2JnX3Njd3FfZnJlZQAdD19fd2JnX3dxbW1fZnJlZQAdD19fd2JnX3dkYW1fZnJlZQAdDV9fd2JnX2xiX2ZyZWUAHQ1fX3diZ19qaV9mcmVlAB0PX193YmdfazI1Nl9mcmVlAB0PX193YmdfYW5kaV9mcmVlAB0PX193Ymdfam56aV9mcmVlAB0PX193Ymdfc3J3cV9mcmVlAB0OX193Ymdfbm90X2ZyZWUAHQ5fX3diZ19jZmVfZnJlZQAdD19fd2JnX2xvZ2RfZnJlZQAdDl9fd2JnX3Nyd19mcmVlAB0PX193YmdfcnZydF9mcmVlAB0PX193YmdfcHNoaF9mcmVlAB0OX193Ymdfc3JsX2ZyZWUAHQ5fX3diZ19tdWxfZnJlZQAdD19fd2JnX2ZsYWdfZnJlZQAdD19fd2JnX21jcGlfZnJlZQAdDl9fd2JnX21vZF9mcmVlAB0PX193YmdfbW92aV9mcmVlAB0OX193YmdfcmV0X2ZyZWUAHQ9fX3diZ19tcm9vX2ZyZWUAHQ9fX3diZ193cWR2X2ZyZWUAHQ1fX3diZ19sd19mcmVlAB0PX193Ymdfd3FtZF9mcmVlAB0OX193Ymdfc3d3X2ZyZWUAHQ5fX3diZ19ndGZfZnJlZQAdD19fd2JnX3BvcGhfZnJlZQAdDV9fd2JnX29yX2ZyZWUAHQ9fX3diZ19tb3ZlX2ZyZWUAHQ9fX3diZ193ZGR2X2ZyZWUAHQ9fX3diZ19yZXRkX2ZyZWUAHQ5fX3diZ19iYWxfZnJlZQAdD19fd2JnX2FkZGlfZnJlZQAdDl9fd2JnX2FuZF9mcmVlAB0PX193YmdfbWNsaV9mcmVlAB0PX193Ymdfd3FtbF9mcmVlAB0PX193Ymdfc2xsaV9mcmVlAB0PX193Ymdfd2RvcF9mcmVlAB0OX193Ymdfc2xsX2ZyZWUAHQ9fX3diZ19lY2FsX2ZyZWUAHQ9fX3diZ193cWNtX2ZyZWUAHQ9fX3diZ19zd3dxX2ZyZWUAHQ9fX3diZ19tbGR2X2ZyZWUAHQ1fX3diZ19ndF9mcmVlAB0NX193YmdfZXFfZnJlZQAdDl9fd2JnX2puZV9mcmVlAB0PX193Ymdfam5laV9mcmVlAB0PX193Ymdfam1wZl9mcmVlAB0OX193YmdfZXhwX2ZyZWUAHQ9fX3diZ19zMjU2X2ZyZWUAHQ5fX3diZ19zdWJfZnJlZQAdDl9fd2JnX21jcF9mcmVlAB0PX193YmdfZXBhcl9mcmVlAB0PX193YmdfY2ZlaV9mcmVlAB0PX193YmdfY2ZzaV9mcmVlAB0PX193Ymdfam56Zl9mcmVlAB0PX193YmdfbWludF9mcmVlAB0PX193YmdfYnNpel9mcmVlAB0PX193YmdfYnVybl9mcmVlAB0PX193Ymdfd2RtbV9mcmVlAB0PX193Ymdfam1wYl9mcmVlAB0PX193Ymdfc3JsaV9mcmVlAB0PX193Ymdfc3ViaV9mcmVlAB0PX193Ymdfam56Yl9mcmVlAB0PX193YmdfbXVsaV9mcmVlAB0PX193Ymdfd3FvcF9mcmVlAB0PX193YmdfcG9wbF9mcmVlAB0OX193YmdfbWNsX2ZyZWUAHQ9fX3diZ19jYWxsX2ZyZWUAHQ9fX3diZ19tbG9nX2ZyZWUAHQ9fX3diZ19ibGRkX2ZyZWUAHQ9fX3diZ19hbG9jX2ZyZWUAHRN3cWR2X25ld190eXBlc2NyaXB0ANABE3dxbWxfbmV3X3R5cGVzY3JpcHQA0AETd2RtbF9uZXdfdHlwZXNjcmlwdADQARN3cW9wX25ld190eXBlc2NyaXB0ANABE3dkb3BfbmV3X3R5cGVzY3JpcHQA0AETd3FjbV9uZXdfdHlwZXNjcmlwdADQARN3ZGR2X25ld190eXBlc2NyaXB0ANABDndxY21fZnJvbV9hcmdzAEAKd3Fkdl9pbW0wNgA7CndxbWxfaW1tMDYAOwp3ZG1sX2ltbTA2ADsKd3FvcF9pbW0wNgA7Cndkb3BfaW1tMDYAOwp3cWNtX2ltbTA2ADsKd2Rkdl9pbW0wNgA7CndkY21faW1tMDYAOwpqbmVmX2ltbTA2ADsJbGRjX2ltbTA2ADsOd3Fkdl9mcm9tX2FyZ3MAzwEOd3FtbF9mcm9tX2FyZ3MAQQ53cW9wX2Zyb21fYXJncwBABWdtX3JhADoFZ3RfcmMAHgVndF9yYgAXBWd0X3JhADoFbGJfcmIAFwVsYl9yYQA6BWx0X3JjAB4FbHRfcmIAFwVsdF9yYQA6CGx3X2ltbTEyAAoFbHdfcmIAFwVsd19yYQA6BW9yX3JjAB4Fb3JfcmIAFwVvcl9yYQA6CHNiX2ltbTEyAAoFc2JfcmIAFwVzYl9yYQA6CHN3X2ltbTEyAAoFc3dfcmIAFwVzd19yYQA6BXRyX3JjAB4FdHJfcmIAFwV0cl9yYQA6BWVxX3JjAB4FZXFfcmIAFwVlcV9yYQA6BmFuZF9yYwAeBmFuZF9yYgAXBmFuZF9yYQA6BmJhbF9yYwAeBmJhbF9yYgAXBmJhbF9yYQA6BmNjcF9yYwAeBmNjcF9yYgAXBmNjcF9yYQA6BmRpdl9yYwAeBmRpdl9yYgAXBmRpdl9yYQA6BmV4cF9yYwAeBmV4cF9yYgAXBmV4cF9yYQA6CGxiX2ltbTEyAAoGZ3RmX3JiABcGZ3RmX3JhADoGam5lX3JjAB4Gam5lX3JiABcGam5lX3JhADoGbGRjX3JjAB4GbGRjX3JiABcGbGRjX3JhADoGbG9nX3JkADsGbG9nX3JjAB4GbG9nX3JiABcGbG9nX3JhADoGbWNsX3JiABcGbWNsX3JhADoGbWNwX3JjAB4GbWNwX3JiABcGbWNwX3JhADoGbWVxX3JkADsGbWVxX3JjAB4GbWVxX3JiABcGbWVxX3JhADoGbW9kX3JjAB4GbW9kX3JiABcGbW9kX3JhADoGbXVsX3JjAB4GbXVsX3JiABcGbXVsX3JhADoGbm90X3JiABcGbm90X3JhADoJb3JpX2ltbTEyAAoGb3JpX3JiABcGb3JpX3JhADoGc2xsX3JjAB4Gc2xsX3JiABcGc2xsX3JhADoGc21vX3JkADsGc21vX3JjAB4Gc21vX3JiABcGc21vX3JhADoGc3JsX3JjAB4Gc3JsX3JiABcGc3JsX3JhADoGc3J3X3JjAB4Gc3J3X3JiABcGc3J3X3JhADoGc3ViX3JjAB4Gc3ViX3JiABcGc3ViX3JhADoGc3d3X3JjAB4Gc3d3X3JiABcGc3d3X3JhADoGdHJvX3JkADsGdHJvX3JjAB4GdHJvX3JiABcGdHJvX3JhADoGeG9yX3JjAB4GeG9yX3JiABcGeG9yX3JhADoJZ3RmX2ltbTEyAAoHYWRkaV9yYgAXB2FkZGlfcmEAOgphbmRpX2ltbTEyAAoHYW5kaV9yYgAXB2FuZGlfcmEAOgdiaHNoX3JiABcHYmhzaF9yYQA6BmNjcF9yZAA7B2JsZGRfcmMAHgdibGRkX3JiABcHYmxkZF9yYQA6B2JzaXpfcmIAFwdic2l6X3JhADoHYnVybl9yYgAXB2J1cm5fcmEAOgdjYWxsX3JkADsHY2FsbF9yYwAeB2NhbGxfcmIAFwdjYWxsX3JhADoHY3Jvb19yYgAXB2Nyb29fcmEAOgdjc2l6X3JiABcHY3Npel9yYQA6CmRpdmlfaW1tMTIACgdkaXZpX3JiABcHZGl2aV9yYQA6B2VjYWxfcmQAOwdlY2FsX3JjAB4HZWNhbF9yYgAXB2VjYWxfcmEAOgdlY2sxX3JjAB4HZWNrMV9yYgAXB2VjazFfcmEAOgdlY29wX3JkADsHZWNvcF9yYwAeB2Vjb3BfcmIAFwdlY29wX3JhADoHZWNyMV9yYwAeB2VjcjFfcmIAFwdlY3IxX3JhADoHZWQxOV9yZAA7B2VkMTlfcmMAHgdlZDE5X3JiABcHZWQxOV9yYQA6B2VwYXJfcmQAOwdlcGFyX3JjAB4HZXBhcl9yYgAXB2VwYXJfcmEAOgpleHBpX2ltbTEyAAoHZXhwaV9yYgAXB2V4cGlfcmEAOgpqbXBiX2ltbTE4AA8Ham1wYl9yYQA6CmptcGZfaW1tMTgADwdqbXBmX3JhADoHam5lYl9yYwAeB2puZWJfcmIAFwdqbmViX3JhADoHam5lZl9yYwAeB2puZWZfcmIAFwdqbmVmX3JhADoKam5laV9pbW0xMgAKB2puZWlfcmIAFwdqbmVpX3JhADoKam56Yl9pbW0xMgAKB2puemJfcmIAFwdqbnpiX3JhADoKam56Zl9pbW0xMgAKB2puemZfcmIAFwdqbnpmX3JhADoKam56aV9pbW0xOAAPB2puemlfcmEAOgdrMjU2X3JjAB4HazI1Nl9yYgAXB2syNTZfcmEAOgdsb2dkX3JkADsHbG9nZF9yYwAeB2xvZ2RfcmIAFwdsb2dkX3JhADoKbWNsaV9pbW0xOAAPB21jbGlfcmEAOgptY3BpX2ltbTEyAAoHbWNwaV9yYgAXB21jcGlfcmEAOgdtaW50X3JiABcHbWludF9yYQA6B21sZHZfcmQAOwdtbGR2X3JjAB4HbWxkdl9yYgAXB21sZHZfcmEAOgdtbG9nX3JjAB4HbWxvZ19yYgAXB21sb2dfcmEAOgptb2RpX2ltbTEyAAoHbW9kaV9yYgAXB21vZGlfcmEAOgdtb3ZlX3JiABcHbW92ZV9yYQA6Cm1vdmlfaW1tMTgADwdtb3ZpX3JhADoHbXJvb19yYwAeB21yb29fcmIAFwdtcm9vX3JhADoKbXVsaV9pbW0xMgAKB211bGlfcmIAFwdtdWxpX3JhADoHcmV0ZF9yYgAXB3JldGRfcmEAOgdzMjU2X3JjAB4HczI1Nl9yYgAXB3MyNTZfcmEAOgdzY3dxX3JjAB4Hc2N3cV9yYgAXB3Njd3FfcmEAOgpzbGxpX2ltbTEyAAoHc2xsaV9yYgAXB3NsbGlfcmEAOgpzcmxpX2ltbTEyAAoHc3JsaV9yYgAXB3NybGlfcmEAOgdzcndxX3JkADsHc3J3cV9yYwAeB3Nyd3FfcmIAFwdzcndxX3JhADoKc3ViaV9pbW0xMgAKB3N1YmlfcmIAFwdzdWJpX3JhADoHc3d3cV9yZAA7B3N3d3FfcmMAHgdzd3dxX3JiABcHc3d3cV9yYQA6B3RpbWVfcmIAFwd0aW1lX3JhADoHd2RhbV9yZAA7B3dkYW1fcmMAHgd3ZGFtX3JiABcHd2RhbV9yYQA6B3dkY21fcmMAHgd3ZGNtX3JiABcHd2RjbV9yYQA6B3dkZHZfcmMAHgd3ZGR2X3JiABcHd2Rkdl9yYQA6B3dkbWRfcmQAOwd3ZG1kX3JjAB4Hd2RtZF9yYgAXB3dkbWRfcmEAOgd3ZG1sX3JjAB4Hd2RtbF9yYgAXB3dkbWxfcmEAOgd3ZG1tX3JkADsHd2RtbV9yYwAeB3dkbW1fcmIAFwd3ZG1tX3Jh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QQh2QYD+A3EgAUGA/gNxQQh0ckEIdnILTwECfyAAENcBIABBCGsiASABKAIAQQFqIgI2AgACQCACBEAgACgCAEF/Rg0BIAAvAAQgAEEGai0AAEEQdHIQ2gEgARBjEGcPCwALEN0BAAtVAQF/IAAQIiEAQQRBEBDZASIBRQRAAAsgAUKBgICAEDcCACABIABBEHRBgID8B3EgAEEIdkGA/gNxIABBgP4DcUEIdHJBCHZyrUIghjcCCCABQQhqC04BAX8gAUUEQCAAEBsaDwsgABDXASAAQQhrIgEgASgCAEEBayICNgIAAkAgAg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCwsQACAAIAEgAiADQd4AEIICCxAAIAAgASACIANB3wAQggILEAAgACABIAIgA0HgABCCAgsQACAAIAEgAiADQeEAEIICCxAAIAAgASACIANB4gAQgwILEAAgACABIAIgA0HjABCDAgtOAQF/IAFFBEAgABAfGg8LIAAQ1wEgAEEIayIBIAEoAgBBAWsiAjYCAAJAIAINACAAQQRrIgAgACgCAEEBayIANgIAIAANACABQRAQIwsLTgEBfyABRQRAIAAQIRoPCyAAENcBIABBCGsiASABKAIAQQFrIgI2AgACQCACDQAgAEEEayIAIAAoAgBBAWsiADYCACAADQAgAUEQECMLC04BAX8gAUUEQCAAECIaDwsgABDXASAAQQhrIgEgASgCAEEBayICNgIAAkAgAg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCwsPACAAIAFBgICAyAEQhAILDAAgACABQcsAEIUCCwwAIAAgAUHMABCFAgsMACAAIAFBzQAQhQILDAAgACABQc4AEIUCCwwAIAAgAUHPABCFAgsMACAAIAFB0AAQhQILDwAgACABQYCAgOgGEIQCC1MBAX8gABAfIQQgARAfIQEgAhAfIQIgAxAfIQNBBEEQENkBIgBFBEAACyAAQoGAgIAQNwIAIAAgBCABIAIgAxAkrUL///8Hg0IghjcCCCAAQQhqC0UBAX8jAEEQayIBJAAgAUEEaiAAECAgASgCBCIALwAAIABBAmotAABBEHRyENoBIAEoAgggASgCDBDSARBnIAFBEGokAAtLAQF/IwBBEGsiASQAIAFBBGogABAgIAEoAgQiAC8AACAAQQJqLQAAQRB0chDmAUEYdkE/cSABKAIIIAEoAgwQ0gEQZyABQRBqJAALCwAgACABQQcQhgILCwAgACABQQgQhgILPwAgAkEWdEGAgIAGcSABQf8BcUEMdCIBIAJB/AFxQQZ0ckGA/gNxQQh0IAEgAEESdHJBCHZBgP4DcXJBCHZyC6QCAQN/IwBBIGsiAiQAIAJBEGoiAyAAQRBqKQIANwMAIAJBCGoiBCAAQQhqKQIANwMAIAJBATsBHCACIAE2AhggAiAAKQIANwMAIwBBIGsiACQAIAIoAhghASAAQRBqIAMpAgA3AwAgAEEIaiAEKQIANwMAIAAgAjYCHCAAIAE2AhggACACKQIANwMAQQAhAiMAQRBrIgEkACAAKAIMIQMCQAJAAkACQCAAKAIEDgIAAQILIAMNAUEBIQMMAgsgAw0AIAAoAgAiAygCBCECIAMoAgAhAwwBCyABQYCAgIB4NgIAIAEgADYCDCABQQUgACgCHCIALQAcIAAtAB0QEQALIAEgAjYCBCABIAM2AgAgAUEGIAAoAhwiAC0AHCAALQAdEBEACzgBAX8jAEEQayIEJAAgABAfIAEQHyACEB8gBEEIaiADEA0gBC0ACCAELQAJEM4BEGUgBEEQaiQACzgBAX8jAEEQayIEJAAgABAfIAEQHyACEB8gBEEIaiADEAsgBC0ACCAELQAJEJABEGUgBEEQaiQAC04BAX8CQCAAQcEASQRAQQRBFBDZASICRQ0BIAIgADoAECACIAE2AgwgAkEANgIIIAJCgYCAgBA3AgAgAkEIag8LQeCCwABBGRDhAQALAAtLAQF/IAAQHyEDIAEQHyEBIAIQHyECQQRBEBDZASIARQRAAAsgAEKBgICAEDcCACAAIAMgASACED6tQv///weDQiCGNwIIIABBCGoLSwEBfyAAEB8hAyABEB8hASACECEhAkEEQRAQ2QEiAEUEQAALIABCgYCAgBA3AgAgACADIAEgAhBPrUL///8Hg0IghjcCCCAAQQhqCwsAIAAgAUEKEIcCCwsAIAAgAUEMEIcCCwsAIAAgAUEUEIcCCwsAIAAgAUEWEIcCCwsAIAAgAUEbEIcCCwsAIAAgAUEeEIcCCwsAIAAgAUEfEIcCCwsAIAAgAUEkEIcCCwsAIAAgAUEyEIcCCz4AIAAQHyEAIAEQIiIBQRB0QYCA/AdxIABB/wFxQRJ0IAFyIgBBgP4DcUEIdCAAQQh2QYD+A3FyQQh2chBlCzgAIAJBEHRBgID8B3EgAUH/AXFBDHQiASACckGA/gNxQQh0IAEgAEESdHJBCHZBgP4DcXJBCHZyCzwBAn8jAEEQayIBJAAgABDXASABQQhqIAAQYiABKAIILQABIAEoAgwiAiACKAIAQQFrNgIAIAFBEGokAAs8AQJ/IwBBEGsiASQAIAAQ1wEgAUEIaiAAEGIgASgCCC0AACABKAIMIgIgAigCAEEBazYCACABQRBqJAALQQEBfyMAQSBrIgIkACACQQA2AhAgAkEBNgIEIAJCBDcCCCACQS42AhwgAiAANgIYIAIgAkEYajYCACACIAEQPwALOQEBfyMAQRBrIgIkACAAENcBIAJBCGogABBoIAIoAgwgAigCCCABQQBHOgAAQQA2AgAgAkEQaiQACzkBAX8jAEEQayICJAAgABDXASACQQhqIAAQaCACKAIMIAIoAgggAUEARzoAAUEANgIAIAJBEGokAAsKACAAQdUAEIgCCwoAIABB1gAQiAILCgAgAEHXABCIAgsKACAAQdoAEIgCCwoAIABB2wAQiAILCgAgAEHcABCIAgsKACAAQd0AEIgCCzkAAkACfyACQYCAxABHBEBBASAAIAIgASgCEBEDAA0BGgsgAw0BQQALDwsgACADQQAgASgCDBEAAAs6AQF/IAAQHyEBQQRBEBDZASIARQRAAAsgAEKBgICAEDcCACAAIAFBAnRB/AFxrUIghjcCCCAAQQhqCzsBAX8gACAAKAIAQQFrIgE2AgACQCABDQAgACgCDBDlASAAIAAoAgRBAWsiATYCBCABDQAgAEEQECMLCy8BAX8jAEEQayIBJAAgAUEIaiAAEA0gAS0ACUEgQQAgAS0ACBtyEGcgAUEQaiQACzIBAX8jAEEQayIBJAAgAUEEaiAAECAgASgCBC0ABCABKAIIIAEoAgwQ0wEgAUEQaiQACzIBAX8jAEEQayIBJAAgAUEEaiAAECAgASgCBCgCACABKAIIIAEoAgwQ0wEgAUEQaiQACzEBAX8gASgCACICQX9HBEAgASACQQFqNgIAIAAgATYCBCAAIAFBBGo2AgAPCxDdAQALCQAgAEEQEPsBCwkAIABBFBD7AQszAQF/QQRBEBDZASIBRQRAAAsgAUKBgICAEDcCACABIACtQv///weDQiCGNwIIIAFBCGoLMAEBf0EEQRAQ2QEiAUUEQAALIAEgADYCDCABQQA2AgggAUKBgICAEDcCACABQQhqCzABAX9BBEEQENkBIgFFBEAACyABIAA6AAwgAUEANgIIIAFCgYCAgBA3AgAgAUEIagsoACABKAIARQRAIAFBfzYCACAAIAE2AgQgACABQQRqNgIADwsQ3QEACyQAIAAQ1wEgACgCAARAEN0BAAsgAEEANgIAIAAgAUEARzoABAsoACADEBshAyAAEM0BIAEQzQEgAhDNASADENUBQQh0QeQAchDKARBmCygAIAMQGyEDIAAQzQEgARDNASACEM0BIAMQ1QFBCHRB5QByEMoBEGYLIAAgAEEBayIAQQZNBEAgAEEBag8LQeCCwABBGRDhAQALKQEBf0EEQRAQ2QEiAEUEQAALIABCADcCCCAAQoGAgIAQNwIAIABBCGoLIgAgAhAEIQIgABDNASABEM0BIAIQT0EIdEHKAHIQygEQZgsPACAAIAEgAiADQRIQ/AELDwAgACABIAIgA0EYEPwBCw8AIAAgASACIANBHBD8AQsPACAAIAEgAiADQR0Q/AELDwAgACABIAIgA0EhEP0BCw8AIAAgASACIANBIhD8AQsPACAAIAEgAiADQSMQ/AELDwAgACABIAIgA0EoEPwBCw8AIAAgASACIANBKhD8AQsPACAAIAEgAiADQSwQ/AELDwAgACABIAIgA0EvEPwBCw8AIAAgASACIANBOBD8AQsQACAAIAEgAiADQdMAEP0BCxAAIAAgASACIANB1AAQ/QELEAAgACABIAIgA0HeABD9AQsQACAAIAEgAiADQd8AEP0BCxAAIAAgASACIANB4AAQ/QELEAAgACABIAIgA0HhABD9AQsQACAAIAEgAiADQeIAEP0BCxAAIAAgASACIANB4wAQ/QELEAAgACABIAIgA0HkABD9AQsQACAAIAEgAiADQeUAEP0BCxAAIAAgASACIANB5gAQ/AELEAAgACABIAIgA0HnABD8AQsQACAAIAEgAiADQegAEPwBCxAAIAAgASACIANB6QAQ/AELEAAgACABIAIgA0HqABD8AQsQACAAIAEgAiADQesAEPwBCxAAIAAgASACIANB7AAQ/AELEAAgACABIAIgA0HuABD8AQsQACAAIAEgAiADQe8AEPwBCxAAIAAgASACIANB8AAQ/AELHgAgARBsIQEgABDNASABEMsBQQh0QcwAchDKARBmCxkAIAAgASACQSBBACAEG0EQQQAgAxtyECQLDQAgACABIAJBARD+AQsNACAAIAEgAkECEP4BCw0AIAAgASACQQMQ/gELDQAgACABIAJBBBD+AQsNACAAIAEgAkEFEP4BCw0AIAAgASACQQYQ/gELDQAgACABIAJBBxD+AQsNACAAIAEgAkEIEP4BCw0AIAAgASACQQkQ/gELDQAgACABIAJBCxD+AQsNACAAIAEgAkENEP4BCw0AIAAgASACQQ4Q/gELDQAgACABIAJBDxD+AQsNACAAIAEgAkEQEP4BCw0AIAAgASACQREQ/gELDQAgACABIAJBFxD+AQsNACAAIAEgAkEmEP4BCw0AIAAgASACQScQ/gELDQAgACABIAJBKRD+AQsNACAAIAEgAkErEP4BCw0AIAAgASACQS0Q/gELDQAgACABIAJBLhD+AQsNACAAIAEgAkEwEP4BCw0AIAAgASACQTEQ/gELDQAgACABIAJBNRD+AQsNACAAIAEgAkE3EP4BCw0AIAAgASACQTkQ/wELDQAgACABIAJBOhD/AQsNACAAIAEgAkE7EP8BCw0AIAAgASACQTwQ/wELDQAgACABIAJBPRD/AQsNACAAIAEgAkE+EP8BCw0AIAAgASACQT8Q/wELDgAgACABIAJBwAAQ/wELDgAgACABIAJBwQAQ/wELDgAgACABIAJBwgAQ/wELDgAgACABIAJBwwAQ/wELDgAgACABIAJBxAAQ/wELDgAgACABIAJBxQAQ/wELDgAgACABIAJBxgAQ/wELDgAgACABIAJBxwAQ/wELDgAgACABIAJByAAQ/wELDgAgACABIAJByQAQ/wELDgAgACABIAJBygAQ/wELDgAgACABIAJB0QAQ/wELDgAgACABIAJB0gAQ/wELFwEBfyAAQf8BcUE/TQR/IAAQZwVBAAsLGwAgABDXASAAKAIAQX9GBEAQ3QEACyAALQAECwkAIABBExCAAgsJACAAQRUQgAILCQAgAEEaEIACCwkAIABBIBCAAgsJACAAQSUQgAILCQAgAEE0EIACCwkAIABBNhCAAgsKACAAQdgAEIACCwoAIABB2QAQgAILGwEBf0EBQQQQ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", imports);
|
16921
17021
|
}
|
16922
17022
|
__name(wasm, "wasm");
|
16923
17023
|
async function initWasm2() {
|
16924
|
-
return await __wbg_init(wasm());
|
17024
|
+
return await __wbg_init({ module_or_path: wasm() });
|
16925
17025
|
}
|
16926
17026
|
__name(initWasm2, "initWasm");
|
16927
17027
|
initWasm2();
|
@@ -17187,9 +17287,9 @@
|
|
17187
17287
|
var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name", { value, configurable: true }), "__name");
|
17188
17288
|
function getBuiltinVersions() {
|
17189
17289
|
return {
|
17190
|
-
FUEL_CORE: "0.
|
17191
|
-
FORC: "0.
|
17192
|
-
FUELS: "0.100.
|
17290
|
+
FUEL_CORE: "0.43.1",
|
17291
|
+
FORC: "0.68.1",
|
17292
|
+
FUELS: "0.100.4"
|
17193
17293
|
};
|
17194
17294
|
}
|
17195
17295
|
__name(getBuiltinVersions, "getBuiltinVersions");
|
@@ -17342,6 +17442,8 @@ This unreleased fuel-core build may include features and updates not yet support
|
|
17342
17442
|
ErrorCode2["FUNDS_TOO_LOW"] = "funds-too-low";
|
17343
17443
|
ErrorCode2["MAX_OUTPUTS_EXCEEDED"] = "max-outputs-exceeded";
|
17344
17444
|
ErrorCode2["ASSET_BURN_DETECTED"] = "asset-burn-detected";
|
17445
|
+
ErrorCode2["CHANGE_OUTPUT_COLLISION"] = "change-output-collision";
|
17446
|
+
ErrorCode2["DUPLICATE_CHANGE_OUTPUT_ACCOUNT"] = "duplicate-change-output-account";
|
17345
17447
|
ErrorCode2["INVALID_RECEIPT_TYPE"] = "invalid-receipt-type";
|
17346
17448
|
ErrorCode2["INVALID_WORD_LIST"] = "invalid-word-list";
|
17347
17449
|
ErrorCode2["INVALID_MNEMONIC"] = "invalid-mnemonic";
|
@@ -17351,9 +17453,12 @@ This unreleased fuel-core build may include features and updates not yet support
|
|
17351
17453
|
ErrorCode2["INVALID_PASSWORD"] = "invalid-password";
|
17352
17454
|
ErrorCode2["ACCOUNT_REQUIRED"] = "account-required";
|
17353
17455
|
ErrorCode2["UNLOCKED_WALLET_REQUIRED"] = "unlocked-wallet-required";
|
17456
|
+
ErrorCode2["NO_COINS_TO_CONSOLIDATE"] = "no-coins-to-consolidate";
|
17457
|
+
ErrorCode2["COINS_ASSET_ID_MISMATCH"] = "coins-asset-id-mismatch";
|
17354
17458
|
ErrorCode2["ASSET_NOT_FOUND"] = "asset-not-found";
|
17355
17459
|
ErrorCode2["NUMBER_TOO_BIG"] = "number-too-big";
|
17356
17460
|
ErrorCode2["ERROR_BUILDING_BLOCK_EXPLORER_URL"] = "error-building-block-explorer-url";
|
17461
|
+
ErrorCode2["RPC_CONSISTENCY"] = "rpc-consistency";
|
17357
17462
|
ErrorCode2["VITEPRESS_PLUGIN_ERROR"] = "vitepress-plugin-error";
|
17358
17463
|
ErrorCode2["SCRIPT_REVERTED"] = "script-reverted";
|
17359
17464
|
ErrorCode2["SCRIPT_RETURN_INVALID_TYPE"] = "script-return-invalid-type";
|
@@ -23248,6 +23353,7 @@ If you are attempting to transform a hex value, please make sure it is being pas
|
|
23248
23353
|
const poaInstant = poaInstantFlagValue === "true" || poaInstantFlagValue === void 0;
|
23249
23354
|
const nativeExecutorVersion = getFlagValueFromArgs(args, "--native-executor-version") || "0";
|
23250
23355
|
const minGasPrice = getFlagValueFromArgs(args, "--min-gas-price") || "1";
|
23356
|
+
const startingGasPrice = getFlagValueFromArgs(args, "--starting-gas-price") || "1";
|
23251
23357
|
const graphQLStartSubstring = "Binding GraphQL provider to";
|
23252
23358
|
const command = fuelCorePath || "fuel-core";
|
23253
23359
|
const ipToUse = ip || "0.0.0.0";
|
@@ -23289,6 +23395,7 @@ If you are attempting to transform a hex value, please make sure it is being pas
|
|
23289
23395
|
["--port", portToUse],
|
23290
23396
|
useInMemoryDb ? ["--db-type", "in-memory"] : ["--db-path", tempDir],
|
23291
23397
|
["--min-gas-price", minGasPrice],
|
23398
|
+
["--starting-gas-price", startingGasPrice],
|
23292
23399
|
poaInstant ? ["--poa-instant", "true"] : [],
|
23293
23400
|
["--native-executor-version", nativeExecutorVersion],
|
23294
23401
|
["--consensus-key", consensusKey],
|
@@ -28903,6 +29010,83 @@ spurious results.`);
|
|
28903
29010
|
var lib_default2 = gql;
|
28904
29011
|
|
28905
29012
|
// src/providers/__generated__/operations.ts
|
29013
|
+
var InputCoinFragmentDoc = lib_default2`
|
29014
|
+
fragment InputCoinFragment on InputCoin {
|
29015
|
+
type: __typename
|
29016
|
+
utxoId
|
29017
|
+
owner
|
29018
|
+
amount
|
29019
|
+
assetId
|
29020
|
+
txPointer
|
29021
|
+
coinWitnessIndex: witnessIndex
|
29022
|
+
predicateGasUsed
|
29023
|
+
predicate
|
29024
|
+
predicateData
|
29025
|
+
}
|
29026
|
+
`;
|
29027
|
+
var InputMessageFragmentDoc = lib_default2`
|
29028
|
+
fragment InputMessageFragment on InputMessage {
|
29029
|
+
type: __typename
|
29030
|
+
sender
|
29031
|
+
recipient
|
29032
|
+
amount
|
29033
|
+
nonce
|
29034
|
+
messageWitnessIndex: witnessIndex
|
29035
|
+
predicateGasUsed
|
29036
|
+
data
|
29037
|
+
predicate
|
29038
|
+
predicateData
|
29039
|
+
}
|
29040
|
+
`;
|
29041
|
+
var InputContractFragmentDoc = lib_default2`
|
29042
|
+
fragment InputContractFragment on InputContract {
|
29043
|
+
type: __typename
|
29044
|
+
utxoId
|
29045
|
+
balanceRoot
|
29046
|
+
stateRoot
|
29047
|
+
txPointer
|
29048
|
+
contractId
|
29049
|
+
}
|
29050
|
+
`;
|
29051
|
+
var OutputCoinFragmentDoc = lib_default2`
|
29052
|
+
fragment OutputCoinFragment on CoinOutput {
|
29053
|
+
type: __typename
|
29054
|
+
to
|
29055
|
+
amount
|
29056
|
+
assetId
|
29057
|
+
}
|
29058
|
+
`;
|
29059
|
+
var OutputContractFragmentDoc = lib_default2`
|
29060
|
+
fragment OutputContractFragment on ContractOutput {
|
29061
|
+
type: __typename
|
29062
|
+
inputIndex
|
29063
|
+
balanceRoot
|
29064
|
+
stateRoot
|
29065
|
+
}
|
29066
|
+
`;
|
29067
|
+
var OutputChangeFragmentDoc = lib_default2`
|
29068
|
+
fragment OutputChangeFragment on ChangeOutput {
|
29069
|
+
type: __typename
|
29070
|
+
to
|
29071
|
+
amount
|
29072
|
+
assetId
|
29073
|
+
}
|
29074
|
+
`;
|
29075
|
+
var OutputVariableFragmentDoc = lib_default2`
|
29076
|
+
fragment OutputVariableFragment on VariableOutput {
|
29077
|
+
type: __typename
|
29078
|
+
to
|
29079
|
+
amount
|
29080
|
+
assetId
|
29081
|
+
}
|
29082
|
+
`;
|
29083
|
+
var OutputContractCreatedFragmentDoc = lib_default2`
|
29084
|
+
fragment OutputContractCreatedFragment on ContractCreated {
|
29085
|
+
type: __typename
|
29086
|
+
contract
|
29087
|
+
stateRoot
|
29088
|
+
}
|
29089
|
+
`;
|
28906
29090
|
var SubmittedStatusFragmentDoc = lib_default2`
|
28907
29091
|
fragment SubmittedStatusFragment on SubmittedStatus {
|
28908
29092
|
type: __typename
|
@@ -29031,6 +29215,87 @@ spurious results.`);
|
|
29031
29215
|
reason
|
29032
29216
|
}
|
29033
29217
|
`;
|
29218
|
+
var PreconfirmationSuccessStatusFragmentDoc = lib_default2`
|
29219
|
+
fragment PreconfirmationSuccessStatusFragment on PreconfirmationSuccessStatus {
|
29220
|
+
type: __typename
|
29221
|
+
totalGas
|
29222
|
+
totalFee
|
29223
|
+
resolvedOutputs {
|
29224
|
+
utxoId
|
29225
|
+
output {
|
29226
|
+
type: __typename
|
29227
|
+
... on CoinOutput {
|
29228
|
+
to
|
29229
|
+
amount
|
29230
|
+
assetId
|
29231
|
+
}
|
29232
|
+
... on ContractOutput {
|
29233
|
+
inputIndex
|
29234
|
+
balanceRoot
|
29235
|
+
stateRoot
|
29236
|
+
}
|
29237
|
+
... on ChangeOutput {
|
29238
|
+
to
|
29239
|
+
amount
|
29240
|
+
assetId
|
29241
|
+
}
|
29242
|
+
... on VariableOutput {
|
29243
|
+
to
|
29244
|
+
amount
|
29245
|
+
assetId
|
29246
|
+
}
|
29247
|
+
... on ContractCreated {
|
29248
|
+
contract
|
29249
|
+
stateRoot
|
29250
|
+
}
|
29251
|
+
}
|
29252
|
+
}
|
29253
|
+
preconfirmationReceipts: receipts {
|
29254
|
+
...receiptFragment
|
29255
|
+
}
|
29256
|
+
}
|
29257
|
+
${ReceiptFragmentDoc}`;
|
29258
|
+
var PreconfirmationFailureStatusFragmentDoc = lib_default2`
|
29259
|
+
fragment PreconfirmationFailureStatusFragment on PreconfirmationFailureStatus {
|
29260
|
+
type: __typename
|
29261
|
+
reason
|
29262
|
+
totalGas
|
29263
|
+
totalFee
|
29264
|
+
resolvedOutputs {
|
29265
|
+
utxoId
|
29266
|
+
output {
|
29267
|
+
type: __typename
|
29268
|
+
... on CoinOutput {
|
29269
|
+
to
|
29270
|
+
amount
|
29271
|
+
assetId
|
29272
|
+
}
|
29273
|
+
... on ContractOutput {
|
29274
|
+
inputIndex
|
29275
|
+
balanceRoot
|
29276
|
+
stateRoot
|
29277
|
+
}
|
29278
|
+
... on ChangeOutput {
|
29279
|
+
to
|
29280
|
+
amount
|
29281
|
+
assetId
|
29282
|
+
}
|
29283
|
+
... on VariableOutput {
|
29284
|
+
to
|
29285
|
+
amount
|
29286
|
+
assetId
|
29287
|
+
}
|
29288
|
+
... on ContractCreated {
|
29289
|
+
contract
|
29290
|
+
stateRoot
|
29291
|
+
}
|
29292
|
+
}
|
29293
|
+
}
|
29294
|
+
preconfirmationReceipts: receipts {
|
29295
|
+
...receiptFragment
|
29296
|
+
}
|
29297
|
+
}
|
29298
|
+
${ReceiptFragmentDoc}`;
|
29034
29299
|
var TransactionStatusSubscriptionFragmentDoc = lib_default2`
|
29035
29300
|
fragment transactionStatusSubscriptionFragment on TransactionStatus {
|
29036
29301
|
... on SubmittedStatus {
|
@@ -29051,12 +29316,20 @@ spurious results.`);
|
|
29051
29316
|
... on SqueezedOutStatus {
|
29052
29317
|
...SqueezedOutStatusFragment
|
29053
29318
|
}
|
29319
|
+
... on PreconfirmationSuccessStatus {
|
29320
|
+
...PreconfirmationSuccessStatusFragment
|
29321
|
+
}
|
29322
|
+
... on PreconfirmationFailureStatus {
|
29323
|
+
...PreconfirmationFailureStatusFragment
|
29324
|
+
}
|
29054
29325
|
}
|
29055
29326
|
${SubmittedStatusFragmentDoc}
|
29056
29327
|
${SuccessStatusWithBlockIdFragmentDoc}
|
29057
29328
|
${MalleableTransactionFieldsFragmentDoc}
|
29058
29329
|
${FailureStatusWithBlockIdFragmentDoc}
|
29059
|
-
${SqueezedOutStatusFragmentDoc}
|
29330
|
+
${SqueezedOutStatusFragmentDoc}
|
29331
|
+
${PreconfirmationSuccessStatusFragmentDoc}
|
29332
|
+
${PreconfirmationFailureStatusFragmentDoc}`;
|
29060
29333
|
var TransactionStatusFragmentDoc = lib_default2`
|
29061
29334
|
fragment transactionStatusFragment on TransactionStatus {
|
29062
29335
|
... on SubmittedStatus {
|
@@ -29108,6 +29381,23 @@ ${SqueezedOutStatusFragmentDoc}`;
|
|
29108
29381
|
}
|
29109
29382
|
}
|
29110
29383
|
${InputEstimatePredicatesFragmentDoc}`;
|
29384
|
+
var DryRunFailureAssembleTxFragmentDoc = lib_default2`
|
29385
|
+
fragment dryRunFailureAssembleTxFragment on DryRunFailureStatus {
|
29386
|
+
type: __typename
|
29387
|
+
reason
|
29388
|
+
receipts {
|
29389
|
+
...receiptFragment
|
29390
|
+
}
|
29391
|
+
}
|
29392
|
+
${ReceiptFragmentDoc}`;
|
29393
|
+
var DryRunSuccessAssembleTxFragmentDoc = lib_default2`
|
29394
|
+
fragment dryRunSuccessAssembleTxFragment on DryRunSuccessStatus {
|
29395
|
+
type: __typename
|
29396
|
+
receipts {
|
29397
|
+
...receiptFragment
|
29398
|
+
}
|
29399
|
+
}
|
29400
|
+
${ReceiptFragmentDoc}`;
|
29111
29401
|
var DryRunFailureStatusFragmentDoc = lib_default2`
|
29112
29402
|
fragment dryRunFailureStatusFragment on DryRunFailureStatus {
|
29113
29403
|
type: __typename
|
@@ -29464,13 +29754,21 @@ ${NodeInfoFragmentDoc}`;
|
|
29464
29754
|
... on SqueezedOutStatus {
|
29465
29755
|
...SqueezedOutStatusFragment
|
29466
29756
|
}
|
29757
|
+
... on PreconfirmationSuccessStatus {
|
29758
|
+
...PreconfirmationSuccessStatusFragment
|
29759
|
+
}
|
29760
|
+
... on PreconfirmationFailureStatus {
|
29761
|
+
...PreconfirmationFailureStatusFragment
|
29762
|
+
}
|
29467
29763
|
}
|
29468
29764
|
}
|
29469
29765
|
}
|
29470
29766
|
${SubmittedStatusFragmentDoc}
|
29471
29767
|
${SuccessStatusWithBlockIdFragmentDoc}
|
29472
29768
|
${FailureStatusWithBlockIdFragmentDoc}
|
29473
|
-
${SqueezedOutStatusFragmentDoc}
|
29769
|
+
${SqueezedOutStatusFragmentDoc}
|
29770
|
+
${PreconfirmationSuccessStatusFragmentDoc}
|
29771
|
+
${PreconfirmationFailureStatusFragmentDoc}`;
|
29474
29772
|
var GetTransactionsDocument = lib_default2`
|
29475
29773
|
query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
|
29476
29774
|
transactions(after: $after, before: $before, first: $first, last: $last) {
|
@@ -29761,6 +30059,77 @@ ${GetMessageFragmentDoc}`;
|
|
29761
30059
|
}
|
29762
30060
|
}
|
29763
30061
|
`;
|
30062
|
+
var AssembleTxDocument = lib_default2`
|
30063
|
+
query assembleTx($tx: HexString!, $blockHorizon: U32!, $requiredBalances: [RequiredBalance!]!, $feeAddressIndex: U16!, $excludeInput: ExcludeInput, $estimatePredicates: Boolean, $reserveGas: U64) {
|
30064
|
+
assembleTx(
|
30065
|
+
tx: $tx
|
30066
|
+
blockHorizon: $blockHorizon
|
30067
|
+
requiredBalances: $requiredBalances
|
30068
|
+
feeAddressIndex: $feeAddressIndex
|
30069
|
+
excludeInput: $excludeInput
|
30070
|
+
estimatePredicates: $estimatePredicates
|
30071
|
+
reserveGas: $reserveGas
|
30072
|
+
) {
|
30073
|
+
transaction {
|
30074
|
+
id
|
30075
|
+
inputs {
|
30076
|
+
... on InputCoin {
|
30077
|
+
...InputCoinFragment
|
30078
|
+
}
|
30079
|
+
... on InputContract {
|
30080
|
+
...InputContractFragment
|
30081
|
+
}
|
30082
|
+
... on InputMessage {
|
30083
|
+
...InputMessageFragment
|
30084
|
+
}
|
30085
|
+
}
|
30086
|
+
outputs {
|
30087
|
+
... on CoinOutput {
|
30088
|
+
...OutputCoinFragment
|
30089
|
+
}
|
30090
|
+
... on ContractOutput {
|
30091
|
+
...OutputContractFragment
|
30092
|
+
}
|
30093
|
+
... on ChangeOutput {
|
30094
|
+
...OutputChangeFragment
|
30095
|
+
}
|
30096
|
+
... on VariableOutput {
|
30097
|
+
...OutputVariableFragment
|
30098
|
+
}
|
30099
|
+
... on ContractCreated {
|
30100
|
+
...OutputContractCreatedFragment
|
30101
|
+
}
|
30102
|
+
}
|
30103
|
+
policies {
|
30104
|
+
tip
|
30105
|
+
witnessLimit
|
30106
|
+
maturity
|
30107
|
+
maxFee
|
30108
|
+
}
|
30109
|
+
witnesses
|
30110
|
+
scriptGasLimit
|
30111
|
+
}
|
30112
|
+
status {
|
30113
|
+
... on DryRunFailureStatus {
|
30114
|
+
...dryRunFailureAssembleTxFragment
|
30115
|
+
}
|
30116
|
+
... on DryRunSuccessStatus {
|
30117
|
+
...dryRunSuccessAssembleTxFragment
|
30118
|
+
}
|
30119
|
+
}
|
30120
|
+
gasPrice
|
30121
|
+
}
|
30122
|
+
}
|
30123
|
+
${InputCoinFragmentDoc}
|
30124
|
+
${InputContractFragmentDoc}
|
30125
|
+
${InputMessageFragmentDoc}
|
30126
|
+
${OutputCoinFragmentDoc}
|
30127
|
+
${OutputContractFragmentDoc}
|
30128
|
+
${OutputChangeFragmentDoc}
|
30129
|
+
${OutputVariableFragmentDoc}
|
30130
|
+
${OutputContractCreatedFragmentDoc}
|
30131
|
+
${DryRunFailureAssembleTxFragmentDoc}
|
30132
|
+
${DryRunSuccessAssembleTxFragmentDoc}`;
|
29764
30133
|
var DryRunDocument = lib_default2`
|
29765
30134
|
mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean, $gasPrice: U64) {
|
29766
30135
|
dryRun(
|
@@ -29819,15 +30188,22 @@ ${GetMessageFragmentDoc}`;
|
|
29819
30188
|
}
|
29820
30189
|
`;
|
29821
30190
|
var SubmitAndAwaitStatusDocument = lib_default2`
|
29822
|
-
subscription submitAndAwaitStatus($encodedTransaction: HexString
|
29823
|
-
submitAndAwaitStatus(
|
30191
|
+
subscription submitAndAwaitStatus($encodedTransaction: HexString!, $estimatePredicates: Boolean, $includePreConfirmation: Boolean) {
|
30192
|
+
submitAndAwaitStatus(
|
30193
|
+
tx: $encodedTransaction
|
30194
|
+
estimatePredicates: $estimatePredicates
|
30195
|
+
includePreconfirmation: $includePreConfirmation
|
30196
|
+
) {
|
29824
30197
|
...transactionStatusSubscriptionFragment
|
29825
30198
|
}
|
29826
30199
|
}
|
29827
30200
|
${TransactionStatusSubscriptionFragmentDoc}`;
|
29828
30201
|
var StatusChangeDocument = lib_default2`
|
29829
|
-
subscription statusChange($transactionId: TransactionId
|
29830
|
-
statusChange(
|
30202
|
+
subscription statusChange($transactionId: TransactionId!, $includePreConfirmation: Boolean) {
|
30203
|
+
statusChange(
|
30204
|
+
id: $transactionId
|
30205
|
+
includePreconfirmation: $includePreConfirmation
|
30206
|
+
) {
|
29831
30207
|
...transactionStatusSubscriptionFragment
|
29832
30208
|
}
|
29833
30209
|
}
|
@@ -29930,6 +30306,9 @@ ${GetMessageFragmentDoc}`;
|
|
29930
30306
|
getAssetDetails(variables, options) {
|
29931
30307
|
return requester(GetAssetDetailsDocument, variables, options);
|
29932
30308
|
},
|
30309
|
+
assembleTx(variables, options) {
|
30310
|
+
return requester(AssembleTxDocument, variables, options);
|
30311
|
+
},
|
29933
30312
|
dryRun(variables, options) {
|
29934
30313
|
return requester(DryRunDocument, variables, options);
|
29935
30314
|
},
|
@@ -29958,9 +30337,67 @@ ${GetMessageFragmentDoc}`;
|
|
29958
30337
|
}
|
29959
30338
|
__name(getSdk, "getSdk");
|
29960
30339
|
|
30340
|
+
// src/providers/assemble-tx-helpers.ts
|
30341
|
+
var resolveAccountForAssembleTxParams = /* @__PURE__ */ __name((account) => {
|
30342
|
+
const assembleTxAccount = {};
|
30343
|
+
const accountIsPredicate = "bytes" in account;
|
30344
|
+
if (accountIsPredicate) {
|
30345
|
+
assembleTxAccount.predicate = {
|
30346
|
+
predicate: hexlify(account.bytes),
|
30347
|
+
predicateAddress: account.address.toB256(),
|
30348
|
+
predicateData: hexlify(account.getPredicateData())
|
30349
|
+
};
|
30350
|
+
} else {
|
30351
|
+
assembleTxAccount.address = account.address.toB256();
|
30352
|
+
}
|
30353
|
+
return assembleTxAccount;
|
30354
|
+
}, "resolveAccountForAssembleTxParams");
|
30355
|
+
var setAndValidateGasAndFeeForAssembledTx = /* @__PURE__ */ __name(async (params) => {
|
30356
|
+
const { gasPrice, transactionRequest, setGasLimit, setMaxFee, provider } = params;
|
30357
|
+
const gasLimitSpecified = isDefined(setGasLimit);
|
30358
|
+
const maxFeeSpecified = isDefined(setMaxFee);
|
30359
|
+
const isScriptTx = transactionRequest.type === TransactionType.Script;
|
30360
|
+
if (gasLimitSpecified && isScriptTx) {
|
30361
|
+
const requiredGasLimit = transactionRequest.gasLimit;
|
30362
|
+
if (bn(setGasLimit).lt(bn(requiredGasLimit))) {
|
30363
|
+
throw new FuelError(
|
30364
|
+
ErrorCode.GAS_LIMIT_TOO_LOW,
|
30365
|
+
`Gas limit '${setGasLimit}' is lower than the required: '${requiredGasLimit}'.`
|
30366
|
+
);
|
30367
|
+
}
|
30368
|
+
transactionRequest.gasLimit = bn(setGasLimit);
|
30369
|
+
}
|
30370
|
+
if (maxFeeSpecified) {
|
30371
|
+
const requiredMaxFee = transactionRequest.maxFee;
|
30372
|
+
if (bn(setMaxFee).lt(requiredMaxFee)) {
|
30373
|
+
throw new FuelError(
|
30374
|
+
ErrorCode.MAX_FEE_TOO_LOW,
|
30375
|
+
`Max fee '${setMaxFee}' is lower than the required: '${requiredMaxFee}'.`
|
30376
|
+
);
|
30377
|
+
}
|
30378
|
+
transactionRequest.maxFee = bn(setMaxFee);
|
30379
|
+
}
|
30380
|
+
if (gasLimitSpecified && !maxFeeSpecified) {
|
30381
|
+
const { maxFee: feeForGasPrice } = await provider.estimateTxGasAndFee({
|
30382
|
+
transactionRequest,
|
30383
|
+
gasPrice
|
30384
|
+
});
|
30385
|
+
transactionRequest.maxFee = feeForGasPrice;
|
30386
|
+
}
|
30387
|
+
return transactionRequest;
|
30388
|
+
}, "setAndValidateGasAndFeeForAssembledTx");
|
30389
|
+
|
29961
30390
|
// src/providers/utils/handle-gql-error-message.ts
|
30391
|
+
var gqlErrorMessage = {
|
30392
|
+
RPC_CONSISTENCY: /The required fuel block height is higher than the current block height. Required: \d+, Current: \d+/,
|
30393
|
+
NOT_ENOUGH_COINS_MAX_COINS: /the target cannot be met due to no coins available or exceeding the \d+ coin limit./,
|
30394
|
+
ASSET_NOT_FOUND: /resource was not found in table/,
|
30395
|
+
MULTIPLE_CHANGE_POLICIES: /The asset ([a-fA-F0-9]{64}) has multiple change policies/,
|
30396
|
+
DUPLICATE_CHANGE_OUTPUT_ACCOUNT: /required balances contain duplicate \(asset, account\) pair/,
|
30397
|
+
INSUFFICIENT_FEE_AMOUNT: /InsufficientFeeAmount { expected: (\d+), provided: (\d+) }/
|
30398
|
+
};
|
29962
30399
|
var mapGqlErrorMessage = /* @__PURE__ */ __name((error2) => {
|
29963
|
-
if (
|
30400
|
+
if (gqlErrorMessage.NOT_ENOUGH_COINS_MAX_COINS.test(error2.message)) {
|
29964
30401
|
return new FuelError(
|
29965
30402
|
ErrorCode.INSUFFICIENT_FUNDS_OR_MAX_COINS,
|
29966
30403
|
`Insufficient funds or too many small value coins. Consider combining UTXOs.`,
|
@@ -29968,7 +30405,25 @@ ${GetMessageFragmentDoc}`;
|
|
29968
30405
|
error2
|
29969
30406
|
);
|
29970
30407
|
}
|
29971
|
-
if (
|
30408
|
+
if (gqlErrorMessage.MULTIPLE_CHANGE_POLICIES.test(error2.message)) {
|
30409
|
+
const match = error2.message.match(/asset ([a-fA-F0-9]{64})/);
|
30410
|
+
const assetId = match?.[1] || "";
|
30411
|
+
return new FuelError(
|
30412
|
+
ErrorCode.CHANGE_OUTPUT_COLLISION,
|
30413
|
+
`OutputChange address for asset 0x${assetId} differs between transaction request and assembleTx parameters.`,
|
30414
|
+
{},
|
30415
|
+
error2
|
30416
|
+
);
|
30417
|
+
}
|
30418
|
+
if (gqlErrorMessage.DUPLICATE_CHANGE_OUTPUT_ACCOUNT.test(error2.message)) {
|
30419
|
+
return new FuelError(
|
30420
|
+
ErrorCode.DUPLICATE_CHANGE_OUTPUT_ACCOUNT,
|
30421
|
+
`The parameter 'accountCoinQuantities' of assembleTx contains duplicate entries for the same assetId with different 'changeOutputAccount'.`,
|
30422
|
+
{},
|
30423
|
+
error2
|
30424
|
+
);
|
30425
|
+
}
|
30426
|
+
if (gqlErrorMessage.ASSET_NOT_FOUND.test(error2.message)) {
|
29972
30427
|
return new FuelError(
|
29973
30428
|
ErrorCode.ASSET_NOT_FOUND,
|
29974
30429
|
`Asset not found for given asset id.`,
|
@@ -29976,6 +30431,13 @@ ${GetMessageFragmentDoc}`;
|
|
29976
30431
|
error2
|
29977
30432
|
);
|
29978
30433
|
}
|
30434
|
+
if (gqlErrorMessage.RPC_CONSISTENCY.test(error2.message)) {
|
30435
|
+
return new FuelError(ErrorCode.RPC_CONSISTENCY, error2.message, {}, error2);
|
30436
|
+
}
|
30437
|
+
if (gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT.test(error2.message)) {
|
30438
|
+
const match = error2.message.match(gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT);
|
30439
|
+
return new FuelError(ErrorCode.FUNDS_TOO_LOW, match?.[0] || error2.message, {}, error2);
|
30440
|
+
}
|
29979
30441
|
return new FuelError(ErrorCode.INVALID_REQUEST, error2.message, {}, error2);
|
29980
30442
|
}, "mapGqlErrorMessage");
|
29981
30443
|
var mapGqlErrorWithIncompatibleNodeVersion = /* @__PURE__ */ __name((error2, incompatibleNodeVersionMessage) => {
|
@@ -30008,8 +30470,9 @@ ${incompatibleNodeVersionMessage}`,
|
|
30008
30470
|
|
30009
30471
|
// src/providers/fuel-graphql-subscriber.ts
|
30010
30472
|
var FuelGraphqlSubscriber = class _FuelGraphqlSubscriber {
|
30011
|
-
constructor(stream) {
|
30473
|
+
constructor(stream, onEvent) {
|
30012
30474
|
this.stream = stream;
|
30475
|
+
this.onEvent = onEvent;
|
30013
30476
|
}
|
30014
30477
|
static {
|
30015
30478
|
__name(this, "FuelGraphqlSubscriber");
|
@@ -30017,12 +30480,13 @@ ${incompatibleNodeVersionMessage}`,
|
|
30017
30480
|
static incompatibleNodeVersionMessage = false;
|
30018
30481
|
static textDecoder = new TextDecoder();
|
30019
30482
|
static async create(options) {
|
30020
|
-
const { url, query, variables, fetchFn } = options;
|
30483
|
+
const { url, query, variables, fetchFn, operationName, onEvent } = options;
|
30021
30484
|
const response = await fetchFn(`${url}-sub`, {
|
30022
30485
|
method: "POST",
|
30023
30486
|
body: JSON.stringify({
|
30024
30487
|
query: print(query),
|
30025
|
-
variables
|
30488
|
+
variables,
|
30489
|
+
operationName
|
30026
30490
|
}),
|
30027
30491
|
headers: {
|
30028
30492
|
"Content-Type": "application/json",
|
@@ -30031,39 +30495,71 @@ ${incompatibleNodeVersionMessage}`,
|
|
30031
30495
|
});
|
30032
30496
|
const [errorReader, resultReader] = response.body.tee().map((stream) => stream.getReader());
|
30033
30497
|
await new _FuelGraphqlSubscriber(errorReader).next();
|
30034
|
-
return new _FuelGraphqlSubscriber(resultReader);
|
30498
|
+
return new _FuelGraphqlSubscriber(resultReader, onEvent);
|
30035
30499
|
}
|
30036
|
-
|
30037
|
-
|
30038
|
-
|
30500
|
+
/**
|
30501
|
+
* This method will take a stream reader and parse the event from the stream.
|
30502
|
+
*
|
30503
|
+
* @param reader - The reader of the SSE stream
|
30504
|
+
* @param parsingLeftover - The leftover string from parsing the previous event
|
30505
|
+
* @returns The event parsed as a full GraphQL response, whether the stream is done and the leftover string after parsing
|
30506
|
+
*/
|
30507
|
+
static async readEvent(reader, parsingLeftover = "") {
|
30508
|
+
let text = parsingLeftover;
|
30509
|
+
const regex = /data:.*\n\n/g;
|
30039
30510
|
while (true) {
|
30040
|
-
if (this.events.length > 0) {
|
30041
|
-
const { data, errors: errors2 } = this.events.shift();
|
30042
|
-
assertGqlResponseHasNoErrors(errors2, _FuelGraphqlSubscriber.incompatibleNodeVersionMessage);
|
30043
|
-
return { value: data, done: false };
|
30044
|
-
}
|
30045
|
-
const { value, done } = await this.stream.read();
|
30046
|
-
if (done) {
|
30047
|
-
return { value, done };
|
30048
|
-
}
|
30049
|
-
const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
|
30050
|
-
if (decoded === "") {
|
30051
|
-
continue;
|
30052
|
-
}
|
30053
|
-
const text = `${this.parsingLeftover}${decoded}`;
|
30054
|
-
const regex = /data:.*\n\n/g;
|
30055
30511
|
const matches = [...text.matchAll(regex)].flatMap((match) => match);
|
30056
|
-
matches.
|
30512
|
+
if (matches.length > 0) {
|
30057
30513
|
try {
|
30058
|
-
|
30514
|
+
const event = JSON.parse(matches[0].replace(/^data:/, ""));
|
30515
|
+
return {
|
30516
|
+
event,
|
30517
|
+
done: false,
|
30518
|
+
parsingLeftover: text.replace(matches[0], "")
|
30519
|
+
};
|
30059
30520
|
} catch (e) {
|
30060
30521
|
throw new FuelError(
|
30061
30522
|
ErrorCode.STREAM_PARSING_ERROR,
|
30062
30523
|
`Error while parsing stream data response: ${text}`
|
30063
30524
|
);
|
30064
30525
|
}
|
30065
|
-
}
|
30066
|
-
|
30526
|
+
}
|
30527
|
+
const { value, done } = await reader.read();
|
30528
|
+
if (done) {
|
30529
|
+
return { event: void 0, done, parsingLeftover: "" };
|
30530
|
+
}
|
30531
|
+
const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
|
30532
|
+
text += decoded;
|
30533
|
+
}
|
30534
|
+
}
|
30535
|
+
events = [];
|
30536
|
+
parsingLeftover = "";
|
30537
|
+
/**
|
30538
|
+
* Gets automatically called when iterating in a `for-await-of` loop.
|
30539
|
+
* It can also be called manually.
|
30540
|
+
*
|
30541
|
+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next
|
30542
|
+
*/
|
30543
|
+
async next() {
|
30544
|
+
while (true) {
|
30545
|
+
const nextEvent = this.events.shift();
|
30546
|
+
if (nextEvent) {
|
30547
|
+
this.onEvent?.(nextEvent);
|
30548
|
+
assertGqlResponseHasNoErrors(
|
30549
|
+
nextEvent.errors,
|
30550
|
+
_FuelGraphqlSubscriber.incompatibleNodeVersionMessage
|
30551
|
+
);
|
30552
|
+
return { value: nextEvent.data, done: false };
|
30553
|
+
}
|
30554
|
+
const { event, done, parsingLeftover } = await _FuelGraphqlSubscriber.readEvent(
|
30555
|
+
this.stream,
|
30556
|
+
this.parsingLeftover
|
30557
|
+
);
|
30558
|
+
this.parsingLeftover = parsingLeftover;
|
30559
|
+
if (done) {
|
30560
|
+
return { value: void 0, done: true };
|
30561
|
+
}
|
30562
|
+
this.events.push(event);
|
30067
30563
|
}
|
30068
30564
|
}
|
30069
30565
|
/**
|
@@ -30109,7 +30605,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
30109
30605
|
case InputType.Contract: {
|
30110
30606
|
return {
|
30111
30607
|
type: InputType.Contract,
|
30112
|
-
txID: ZeroBytes32,
|
30608
|
+
txID: hexlify(value.txID || ZeroBytes32),
|
30113
30609
|
outputIndex: 0,
|
30114
30610
|
balanceRoot: ZeroBytes32,
|
30115
30611
|
stateRoot: ZeroBytes32,
|
@@ -30180,9 +30676,9 @@ ${incompatibleNodeVersionMessage}`,
|
|
30180
30676
|
case OutputType.Variable: {
|
30181
30677
|
return {
|
30182
30678
|
type: OutputType.Variable,
|
30183
|
-
to: ZeroBytes32,
|
30184
|
-
amount: bn(
|
30185
|
-
assetId: ZeroBytes32
|
30679
|
+
to: hexlify(value.to || ZeroBytes32),
|
30680
|
+
amount: bn(value.amount),
|
30681
|
+
assetId: hexlify(value.assetId || ZeroBytes32)
|
30186
30682
|
};
|
30187
30683
|
}
|
30188
30684
|
case OutputType.ContractCreated: {
|
@@ -30226,6 +30722,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
30226
30722
|
"BlobIdAlreadyUploaded",
|
30227
30723
|
"BlobNotFound",
|
30228
30724
|
"BytecodeAlreadyUploaded",
|
30725
|
+
"CanNotGetGasPriceInPredicate",
|
30229
30726
|
"ContractIdAlreadyDeployed",
|
30230
30727
|
"ContractInstructionNotAllowed",
|
30231
30728
|
"ContractMaxSize",
|
@@ -30249,6 +30746,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
30249
30746
|
"InvalidImmediateValue",
|
30250
30747
|
"InvalidInstruction",
|
30251
30748
|
"InvalidMetadataIdentifier",
|
30749
|
+
"InvalidUpgradePurposeType",
|
30252
30750
|
"MalformedCallStructure",
|
30253
30751
|
"MaxStaticContractsReached",
|
30254
30752
|
"MemoryGrowthOverlap",
|
@@ -30265,8 +30763,10 @@ ${incompatibleNodeVersionMessage}`,
|
|
30265
30763
|
"PolicyIsNotSet",
|
30266
30764
|
"PolicyNotFound",
|
30267
30765
|
"PredicateReturnedNonOne",
|
30766
|
+
"ProofInUploadNotFound",
|
30268
30767
|
"ReservedRegisterNotWritable",
|
30269
30768
|
"Revert",
|
30769
|
+
"StorageSlotsNotFound",
|
30270
30770
|
"ThePartIsNotSequentiallyConnected",
|
30271
30771
|
"TooManyReceipts",
|
30272
30772
|
"TooManySlots",
|
@@ -30620,16 +31120,151 @@ ${incompatibleNodeVersionMessage}`,
|
|
30620
31120
|
throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);
|
30621
31121
|
}
|
30622
31122
|
}, "deserializeReceipt");
|
30623
|
-
|
30624
|
-
|
30625
|
-
|
30626
|
-
|
30627
|
-
|
30628
|
-
|
30629
|
-
|
30630
|
-
|
30631
|
-
|
30632
|
-
|
31123
|
+
var deserializeInput = /* @__PURE__ */ __name((input) => {
|
31124
|
+
let parsedInput;
|
31125
|
+
switch (input.type) {
|
31126
|
+
case "InputCoin":
|
31127
|
+
parsedInput = {
|
31128
|
+
type: InputType.Coin,
|
31129
|
+
id: input.utxoId,
|
31130
|
+
amount: bn(input.amount),
|
31131
|
+
assetId: input.assetId,
|
31132
|
+
owner: input.owner,
|
31133
|
+
txPointer: `0x${input.txPointer}`,
|
31134
|
+
witnessIndex: Number(input.coinWitnessIndex),
|
31135
|
+
predicate: input.predicate,
|
31136
|
+
predicateData: input.predicateData,
|
31137
|
+
predicateGasUsed: bn(input.predicateGasUsed)
|
31138
|
+
};
|
31139
|
+
break;
|
31140
|
+
case "InputMessage":
|
31141
|
+
parsedInput = {
|
31142
|
+
type: InputType.Message,
|
31143
|
+
nonce: input.nonce,
|
31144
|
+
amount: bn(input.amount),
|
31145
|
+
recipient: input.recipient,
|
31146
|
+
sender: input.sender,
|
31147
|
+
data: input.data,
|
31148
|
+
witnessIndex: Number(input.messageWitnessIndex),
|
31149
|
+
predicate: input.predicate,
|
31150
|
+
predicateData: input.predicateData,
|
31151
|
+
predicateGasUsed: bn(input.predicateGasUsed)
|
31152
|
+
};
|
31153
|
+
break;
|
31154
|
+
case "InputContract":
|
31155
|
+
parsedInput = {
|
31156
|
+
type: InputType.Contract,
|
31157
|
+
contractId: input.contractId,
|
31158
|
+
txPointer: `0x${input.txPointer}`,
|
31159
|
+
txID: hexlify(arrayify(input.utxoId).slice(0, 32))
|
31160
|
+
};
|
31161
|
+
break;
|
31162
|
+
default:
|
31163
|
+
assertUnreachable(input);
|
31164
|
+
}
|
31165
|
+
return parsedInput;
|
31166
|
+
}, "deserializeInput");
|
31167
|
+
var deserializeOutput = /* @__PURE__ */ __name((output) => {
|
31168
|
+
let parsedOutput;
|
31169
|
+
switch (output.type) {
|
31170
|
+
case "CoinOutput":
|
31171
|
+
parsedOutput = {
|
31172
|
+
type: OutputType.Coin,
|
31173
|
+
amount: bn(output.amount),
|
31174
|
+
assetId: output.assetId,
|
31175
|
+
to: output.to
|
31176
|
+
};
|
31177
|
+
break;
|
31178
|
+
case "ContractOutput":
|
31179
|
+
parsedOutput = {
|
31180
|
+
type: OutputType.Contract,
|
31181
|
+
inputIndex: Number(output.inputIndex)
|
31182
|
+
};
|
31183
|
+
break;
|
31184
|
+
case "ChangeOutput":
|
31185
|
+
parsedOutput = {
|
31186
|
+
type: OutputType.Change,
|
31187
|
+
assetId: output.assetId,
|
31188
|
+
to: output.to
|
31189
|
+
};
|
31190
|
+
break;
|
31191
|
+
case "ContractCreated":
|
31192
|
+
parsedOutput = {
|
31193
|
+
type: OutputType.ContractCreated,
|
31194
|
+
stateRoot: output.stateRoot,
|
31195
|
+
contractId: output.contract
|
31196
|
+
};
|
31197
|
+
break;
|
31198
|
+
case "VariableOutput":
|
31199
|
+
parsedOutput = {
|
31200
|
+
type: OutputType.Variable,
|
31201
|
+
amount: bn(output.amount),
|
31202
|
+
assetId: output.assetId,
|
31203
|
+
to: output.to
|
31204
|
+
};
|
31205
|
+
break;
|
31206
|
+
default:
|
31207
|
+
assertUnreachable(output);
|
31208
|
+
}
|
31209
|
+
return parsedOutput;
|
31210
|
+
}, "deserializeOutput");
|
31211
|
+
var deserializeProcessedTxOutput = /* @__PURE__ */ __name((output) => {
|
31212
|
+
let parsedOutput;
|
31213
|
+
switch (output.type) {
|
31214
|
+
case "CoinOutput":
|
31215
|
+
parsedOutput = {
|
31216
|
+
type: OutputType.Coin,
|
31217
|
+
amount: bn(output.amount),
|
31218
|
+
assetId: output.assetId,
|
31219
|
+
to: output.to
|
31220
|
+
};
|
31221
|
+
break;
|
31222
|
+
case "ContractOutput":
|
31223
|
+
parsedOutput = {
|
31224
|
+
type: OutputType.Contract,
|
31225
|
+
inputIndex: Number(output.inputIndex),
|
31226
|
+
balanceRoot: output.balanceRoot,
|
31227
|
+
stateRoot: output.stateRoot
|
31228
|
+
};
|
31229
|
+
break;
|
31230
|
+
case "ChangeOutput":
|
31231
|
+
parsedOutput = {
|
31232
|
+
type: OutputType.Change,
|
31233
|
+
assetId: output.assetId,
|
31234
|
+
to: output.to,
|
31235
|
+
amount: bn(output.amount)
|
31236
|
+
};
|
31237
|
+
break;
|
31238
|
+
case "ContractCreated":
|
31239
|
+
parsedOutput = {
|
31240
|
+
type: OutputType.ContractCreated,
|
31241
|
+
stateRoot: output.stateRoot,
|
31242
|
+
contractId: output.contract
|
31243
|
+
};
|
31244
|
+
break;
|
31245
|
+
case "VariableOutput":
|
31246
|
+
parsedOutput = {
|
31247
|
+
type: OutputType.Variable,
|
31248
|
+
amount: bn(output.amount),
|
31249
|
+
assetId: output.assetId,
|
31250
|
+
to: output.to
|
31251
|
+
};
|
31252
|
+
break;
|
31253
|
+
default:
|
31254
|
+
assertUnreachable(output);
|
31255
|
+
}
|
31256
|
+
return parsedOutput;
|
31257
|
+
}, "deserializeProcessedTxOutput");
|
31258
|
+
|
31259
|
+
// src/providers/utils/receipts.ts
|
31260
|
+
var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
|
31261
|
+
var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
|
31262
|
+
var getReceiptsWithMissingData = /* @__PURE__ */ __name((receipts) => receipts.reduce(
|
31263
|
+
(memo, receipt) => {
|
31264
|
+
if (doesReceiptHaveMissingOutputVariables(receipt)) {
|
31265
|
+
memo.missingOutputVariables.push(receipt);
|
31266
|
+
}
|
31267
|
+
if (doesReceiptHaveMissingContractId(receipt)) {
|
30633
31268
|
memo.missingOutputContractIds.push(receipt);
|
30634
31269
|
}
|
30635
31270
|
return memo;
|
@@ -30900,6 +31535,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
30900
31535
|
return assembleRevertError(receipts, logs, metadata);
|
30901
31536
|
}, "extractTxError");
|
30902
31537
|
|
31538
|
+
// src/providers/utils/merge-quantities.ts
|
31539
|
+
var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
|
31540
|
+
const resultMap = {};
|
31541
|
+
function addToMap({ amount, assetId }) {
|
31542
|
+
if (resultMap[assetId]) {
|
31543
|
+
resultMap[assetId] = resultMap[assetId].add(amount);
|
31544
|
+
} else {
|
31545
|
+
resultMap[assetId] = amount;
|
31546
|
+
}
|
31547
|
+
}
|
31548
|
+
__name(addToMap, "addToMap");
|
31549
|
+
coinQuantities.forEach((arr) => arr.forEach(addToMap));
|
31550
|
+
return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
|
31551
|
+
}, "mergeQuantities");
|
31552
|
+
|
30903
31553
|
// src/providers/transaction-request/errors.ts
|
30904
31554
|
var NoWitnessAtIndexError = class extends Error {
|
30905
31555
|
constructor(index) {
|
@@ -31819,6 +32469,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31819
32469
|
* @param account - The account to fund the transaction.
|
31820
32470
|
* @param params - The parameters for the transaction cost.
|
31821
32471
|
* @returns The current instance of the `ScriptTransactionRequest` funded.
|
32472
|
+
*
|
32473
|
+
* @deprecated Use `provider.assembleTx` instead.
|
32474
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
31822
32475
|
*/
|
31823
32476
|
async estimateAndFund(account, { signatureCallback, quantities = [] } = {}) {
|
31824
32477
|
const txCost = await account.getTransactionCost(this, { signatureCallback, quantities });
|
@@ -31902,6 +32555,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31902
32555
|
}
|
31903
32556
|
return this.outputs.length - 1;
|
31904
32557
|
}
|
32558
|
+
/**
|
32559
|
+
* Adds a variable output to the transaction request.
|
32560
|
+
*
|
32561
|
+
* @param to - The recipient address as a BytesLike object. Defaults to ZeroBytes32 if not provided.
|
32562
|
+
* @param amount - The amount to be transferred as a BigNumberish object. Defaults to 0 if not provided.
|
32563
|
+
* @param assetId - The asset ID as a BytesLike object. Defaults to ZeroBytes32 if not provided.
|
32564
|
+
*/
|
32565
|
+
addVariableOutput(to, amount, assetId) {
|
32566
|
+
this.pushOutput({
|
32567
|
+
type: OutputType.Variable,
|
32568
|
+
to,
|
32569
|
+
amount,
|
32570
|
+
assetId
|
32571
|
+
});
|
32572
|
+
}
|
31905
32573
|
/**
|
31906
32574
|
* Calculates the maximum gas for the transaction.
|
31907
32575
|
*
|
@@ -32978,6 +33646,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32978
33646
|
return "submitted" /* submitted */;
|
32979
33647
|
case "SqueezedOutStatus":
|
32980
33648
|
return "squeezedout" /* squeezedout */;
|
33649
|
+
case "PreconfirmationSuccessStatus":
|
33650
|
+
return "preconfirmationSuccess" /* preconfirmationSuccess */;
|
33651
|
+
case "PreconfirmationFailureStatus":
|
33652
|
+
return "preconfirmationFailure" /* preconfirmationFailure */;
|
32981
33653
|
default:
|
32982
33654
|
throw new FuelError(
|
32983
33655
|
ErrorCode.INVALID_TRANSACTION_STATUS,
|
@@ -32985,15 +33657,30 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32985
33657
|
);
|
32986
33658
|
}
|
32987
33659
|
}, "getTransactionStatusName");
|
33660
|
+
var extractResolvedOutputs = /* @__PURE__ */ __name((serializedOutputs) => {
|
33661
|
+
const resolvedOutputs = [];
|
33662
|
+
serializedOutputs?.forEach(
|
33663
|
+
({ utxoId, output }) => resolvedOutputs.push({
|
33664
|
+
utxoId,
|
33665
|
+
output: deserializeProcessedTxOutput(output)
|
33666
|
+
})
|
33667
|
+
);
|
33668
|
+
return resolvedOutputs;
|
33669
|
+
}, "extractResolvedOutputs");
|
32988
33670
|
var processGraphqlStatus = /* @__PURE__ */ __name((gqlTransactionStatus) => {
|
32989
33671
|
let time;
|
32990
33672
|
let blockId;
|
32991
33673
|
let status;
|
32992
33674
|
let totalFee;
|
32993
33675
|
let totalGas;
|
33676
|
+
let receipts;
|
33677
|
+
let resolvedOutputs = [];
|
33678
|
+
let errorReason;
|
32994
33679
|
let isStatusFailure = false;
|
32995
33680
|
let isStatusSuccess = false;
|
32996
33681
|
let isStatusPending = false;
|
33682
|
+
let isStatusPreConfirmationSuccess = false;
|
33683
|
+
let isStatusPreConfirmationFailure = false;
|
32997
33684
|
if (gqlTransactionStatus?.type) {
|
32998
33685
|
status = getTransactionStatusName(gqlTransactionStatus.type);
|
32999
33686
|
switch (gqlTransactionStatus.type) {
|
@@ -33001,6 +33688,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33001
33688
|
time = gqlTransactionStatus.time;
|
33002
33689
|
blockId = gqlTransactionStatus.block?.id;
|
33003
33690
|
isStatusSuccess = true;
|
33691
|
+
receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
|
33004
33692
|
totalFee = bn(gqlTransactionStatus.totalFee);
|
33005
33693
|
totalGas = bn(gqlTransactionStatus.totalGas);
|
33006
33694
|
break;
|
@@ -33009,12 +33697,28 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33009
33697
|
blockId = gqlTransactionStatus.block?.id;
|
33010
33698
|
isStatusFailure = true;
|
33011
33699
|
totalFee = bn(gqlTransactionStatus.totalFee);
|
33700
|
+
receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
|
33012
33701
|
totalGas = bn(gqlTransactionStatus.totalGas);
|
33013
33702
|
break;
|
33014
33703
|
case "SubmittedStatus":
|
33015
33704
|
time = gqlTransactionStatus.time;
|
33016
33705
|
isStatusPending = true;
|
33017
33706
|
break;
|
33707
|
+
case "PreconfirmationSuccessStatus":
|
33708
|
+
isStatusPreConfirmationSuccess = true;
|
33709
|
+
totalFee = bn(gqlTransactionStatus.totalFee);
|
33710
|
+
totalGas = bn(gqlTransactionStatus.totalGas);
|
33711
|
+
receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
|
33712
|
+
resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
|
33713
|
+
break;
|
33714
|
+
case "PreconfirmationFailureStatus":
|
33715
|
+
isStatusPreConfirmationFailure = true;
|
33716
|
+
totalFee = bn(gqlTransactionStatus.totalFee);
|
33717
|
+
totalGas = bn(gqlTransactionStatus.totalGas);
|
33718
|
+
receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
|
33719
|
+
resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
|
33720
|
+
errorReason = gqlTransactionStatus.reason;
|
33721
|
+
break;
|
33018
33722
|
default:
|
33019
33723
|
}
|
33020
33724
|
}
|
@@ -33024,9 +33728,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33024
33728
|
status,
|
33025
33729
|
totalFee,
|
33026
33730
|
totalGas,
|
33731
|
+
receipts,
|
33027
33732
|
isStatusFailure,
|
33028
33733
|
isStatusSuccess,
|
33029
|
-
isStatusPending
|
33734
|
+
isStatusPending,
|
33735
|
+
isStatusPreConfirmationSuccess,
|
33736
|
+
isStatusPreConfirmationFailure,
|
33737
|
+
resolvedOutputs,
|
33738
|
+
errorReason
|
33030
33739
|
};
|
33031
33740
|
return processedGraphqlStatus;
|
33032
33741
|
}, "processGraphqlStatus");
|
@@ -33111,6 +33820,81 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33111
33820
|
return transactionSummary;
|
33112
33821
|
}
|
33113
33822
|
__name(assembleTransactionSummary, "assembleTransactionSummary");
|
33823
|
+
function assemblePreConfirmationTransactionSummary(params) {
|
33824
|
+
const { id, gqlTransactionStatus, transactionRequest, baseAssetId, maxInputs, abiMap } = params;
|
33825
|
+
let type3;
|
33826
|
+
let operations;
|
33827
|
+
let gasUsed;
|
33828
|
+
let tip;
|
33829
|
+
let transaction;
|
33830
|
+
let mintedAssets;
|
33831
|
+
let burnedAssets;
|
33832
|
+
const {
|
33833
|
+
isStatusFailure,
|
33834
|
+
isStatusSuccess,
|
33835
|
+
isStatusPending,
|
33836
|
+
status,
|
33837
|
+
receipts,
|
33838
|
+
resolvedOutputs,
|
33839
|
+
errorReason,
|
33840
|
+
totalFee,
|
33841
|
+
isStatusPreConfirmationFailure,
|
33842
|
+
isStatusPreConfirmationSuccess
|
33843
|
+
} = processGraphqlStatus(gqlTransactionStatus);
|
33844
|
+
if (receipts) {
|
33845
|
+
gasUsed = getGasUsedFromReceipts(receipts);
|
33846
|
+
mintedAssets = extractMintedAssetsFromReceipts(receipts);
|
33847
|
+
burnedAssets = extractBurnedAssetsFromReceipts(receipts);
|
33848
|
+
}
|
33849
|
+
if (transactionRequest) {
|
33850
|
+
transaction = transactionRequest.toTransaction();
|
33851
|
+
type3 = getTransactionTypeName(transaction.type);
|
33852
|
+
tip = bn(transaction.policies?.find((policy) => policy.type === PolicyType.Tip)?.data);
|
33853
|
+
if (receipts) {
|
33854
|
+
const rawPayload = hexlify(new TransactionCoder().encode(transaction));
|
33855
|
+
operations = getOperations({
|
33856
|
+
transactionType: transaction.type,
|
33857
|
+
inputs: transaction.inputs || [],
|
33858
|
+
outputs: transaction.outputs || [],
|
33859
|
+
receipts,
|
33860
|
+
rawPayload,
|
33861
|
+
abiMap,
|
33862
|
+
maxInputs,
|
33863
|
+
baseAssetId
|
33864
|
+
});
|
33865
|
+
}
|
33866
|
+
}
|
33867
|
+
const transactionSummary = {
|
33868
|
+
id,
|
33869
|
+
fee: totalFee,
|
33870
|
+
type: type3,
|
33871
|
+
status,
|
33872
|
+
receipts,
|
33873
|
+
gasUsed,
|
33874
|
+
tip,
|
33875
|
+
isStatusPreConfirmationFailure,
|
33876
|
+
isStatusPreConfirmationSuccess,
|
33877
|
+
isStatusFailure,
|
33878
|
+
isStatusSuccess,
|
33879
|
+
isStatusPending,
|
33880
|
+
...transaction && {
|
33881
|
+
isTypeMint: isTypeMint(transaction.type),
|
33882
|
+
isTypeCreate: isTypeCreate(transaction.type),
|
33883
|
+
isTypeScript: isTypeScript(transaction.type),
|
33884
|
+
isTypeUpgrade: isTypeUpgrade(transaction.type),
|
33885
|
+
isTypeUpload: isTypeUpload(transaction.type),
|
33886
|
+
isTypeBlob: isTypeBlob(transaction.type)
|
33887
|
+
},
|
33888
|
+
mintedAssets,
|
33889
|
+
burnedAssets,
|
33890
|
+
resolvedOutputs,
|
33891
|
+
errorReason,
|
33892
|
+
transaction,
|
33893
|
+
operations
|
33894
|
+
};
|
33895
|
+
return transactionSummary;
|
33896
|
+
}
|
33897
|
+
__name(assemblePreConfirmationTransactionSummary, "assemblePreConfirmationTransactionSummary");
|
33114
33898
|
|
33115
33899
|
// src/providers/transaction-response/getAllDecodedLogs.ts
|
33116
33900
|
function getAllDecodedLogs(opts) {
|
@@ -33143,37 +33927,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33143
33927
|
__name(getAllDecodedLogs, "getAllDecodedLogs");
|
33144
33928
|
|
33145
33929
|
// src/providers/transaction-response/transaction-response.ts
|
33146
|
-
function mapGqlOutputsToTxOutputs(outputs) {
|
33147
|
-
return outputs.map((o) => {
|
33148
|
-
const obj = "amount" in o ? { ...o, amount: bn(o.amount) } : o;
|
33149
|
-
switch (obj.type) {
|
33150
|
-
case "CoinOutput":
|
33151
|
-
return { ...obj, type: OutputType.Coin };
|
33152
|
-
case "ContractOutput":
|
33153
|
-
return {
|
33154
|
-
...obj,
|
33155
|
-
type: OutputType.Contract,
|
33156
|
-
inputIndex: parseInt(obj.inputIndex, 10)
|
33157
|
-
};
|
33158
|
-
case "ChangeOutput":
|
33159
|
-
return {
|
33160
|
-
...obj,
|
33161
|
-
type: OutputType.Change
|
33162
|
-
};
|
33163
|
-
case "VariableOutput":
|
33164
|
-
return { ...obj, type: OutputType.Variable };
|
33165
|
-
case "ContractCreated":
|
33166
|
-
return {
|
33167
|
-
...obj,
|
33168
|
-
type: OutputType.ContractCreated,
|
33169
|
-
contractId: obj.contract
|
33170
|
-
};
|
33171
|
-
default:
|
33172
|
-
return assertUnreachable(obj);
|
33173
|
-
}
|
33174
|
-
});
|
33175
|
-
}
|
33176
|
-
__name(mapGqlOutputsToTxOutputs, "mapGqlOutputsToTxOutputs");
|
33177
33930
|
var TransactionResponse = class _TransactionResponse {
|
33178
33931
|
/**
|
33179
33932
|
* Constructor for `TransactionResponse`.
|
@@ -33183,11 +33936,16 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33183
33936
|
*/
|
33184
33937
|
constructor(tx, provider, chainId, abis, submitTxSubscription) {
|
33185
33938
|
this.submitTxSubscription = submitTxSubscription;
|
33186
|
-
|
33939
|
+
if (typeof tx === "string") {
|
33940
|
+
this.id = tx;
|
33941
|
+
} else {
|
33942
|
+
this.id = tx.getTransactionId(chainId);
|
33943
|
+
this.request = tx;
|
33944
|
+
}
|
33187
33945
|
this.provider = provider;
|
33188
33946
|
this.abis = abis;
|
33189
|
-
this.request = typeof tx === "string" ? void 0 : tx;
|
33190
33947
|
this.waitForResult = this.waitForResult.bind(this);
|
33948
|
+
this.waitForPreConfirmation = this.waitForPreConfirmation.bind(this);
|
33191
33949
|
}
|
33192
33950
|
static {
|
33193
33951
|
__name(this, "TransactionResponse");
|
@@ -33203,6 +33961,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33203
33961
|
request;
|
33204
33962
|
status;
|
33205
33963
|
abis;
|
33964
|
+
waitingForStreamData = false;
|
33965
|
+
statusResolvers = /* @__PURE__ */ new Map();
|
33966
|
+
preConfirmationStatus;
|
33206
33967
|
/**
|
33207
33968
|
* Async constructor for `TransactionResponse`. This method can be used to create
|
33208
33969
|
* an instance of `TransactionResponse` and wait for the transaction to be fetched
|
@@ -33234,29 +33995,38 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33234
33995
|
}
|
33235
33996
|
return input;
|
33236
33997
|
});
|
33237
|
-
tx.outputs =
|
33238
|
-
if (
|
33998
|
+
tx.outputs = status.transaction.outputs.map(deserializeProcessedTxOutput);
|
33999
|
+
if (status.transaction.receiptsRoot) {
|
33239
34000
|
tx.receiptsRoot = status.transaction.receiptsRoot;
|
33240
34001
|
}
|
33241
34002
|
}
|
33242
34003
|
}
|
33243
34004
|
async getTransaction() {
|
33244
34005
|
if (this.request) {
|
33245
|
-
const
|
33246
|
-
this.applyMalleableSubscriptionFields(
|
34006
|
+
const tx2 = this.request.toTransaction();
|
34007
|
+
this.applyMalleableSubscriptionFields(tx2);
|
33247
34008
|
return {
|
33248
|
-
tx,
|
34009
|
+
tx: tx2,
|
33249
34010
|
bytes: this.request.toTransactionBytes()
|
33250
34011
|
};
|
33251
34012
|
}
|
33252
34013
|
const gqlTransaction = this.gqlTransaction ?? await this.fetch();
|
34014
|
+
const { rawPayload } = gqlTransaction;
|
34015
|
+
const bytes = arrayify(rawPayload);
|
34016
|
+
const [tx] = new TransactionCoder().decode(bytes, 0);
|
33253
34017
|
return {
|
33254
|
-
tx
|
33255
|
-
bytes
|
34018
|
+
tx,
|
34019
|
+
bytes
|
33256
34020
|
};
|
33257
34021
|
}
|
34022
|
+
/**
|
34023
|
+
*
|
34024
|
+
* NOTE: This method is only called within `getTransactionSummary`, which is invoked after `getTransaction`.
|
34025
|
+
* Since `getTransaction` only resolves once the transaction has been processed,
|
34026
|
+
* the status at this point is guaranteed to be either `SuccessStatus` or `FailureStatus`.
|
34027
|
+
*/
|
33258
34028
|
getReceipts() {
|
33259
|
-
const status = this.
|
34029
|
+
const status = this.getTransactionStatus();
|
33260
34030
|
switch (status?.type) {
|
33261
34031
|
case "SuccessStatus":
|
33262
34032
|
case "FailureStatus":
|
@@ -33289,18 +34059,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33289
34059
|
this.gqlTransaction = response.transaction;
|
33290
34060
|
return response.transaction;
|
33291
34061
|
}
|
33292
|
-
/**
|
33293
|
-
* Decode the raw payload of the transaction.
|
33294
|
-
*
|
33295
|
-
* @param transactionWithReceipts - The transaction with receipts object.
|
33296
|
-
* @returns The decoded transaction.
|
33297
|
-
*/
|
33298
|
-
decodeTransaction(transactionWithReceipts) {
|
33299
|
-
return new TransactionCoder().decode(
|
33300
|
-
arrayify(transactionWithReceipts.rawPayload),
|
33301
|
-
0
|
33302
|
-
)?.[0];
|
33303
|
-
}
|
33304
34062
|
/**
|
33305
34063
|
* Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will
|
33306
34064
|
* fetch it from the provider
|
@@ -33311,7 +34069,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33311
34069
|
async getTransactionSummary(contractsAbiMap) {
|
33312
34070
|
const { tx: transaction, bytes: transactionBytes } = await this.getTransaction();
|
33313
34071
|
const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = await this.provider.getGasConfig();
|
33314
|
-
const
|
34072
|
+
const transactionStatus = this.getTransactionStatus();
|
34073
|
+
const totalFee = getTotalFeeFromStatus(transactionStatus);
|
33315
34074
|
const gasPrice = totalFee ? bn(0) : await this.provider.getLatestGasPrice();
|
33316
34075
|
const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
|
33317
34076
|
const baseAssetId = await this.provider.getBaseAssetId();
|
@@ -33320,7 +34079,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33320
34079
|
receipts: this.getReceipts(),
|
33321
34080
|
transaction,
|
33322
34081
|
transactionBytes,
|
33323
|
-
gqlTransactionStatus:
|
34082
|
+
gqlTransactionStatus: transactionStatus,
|
33324
34083
|
gasPerByte,
|
33325
34084
|
gasPriceFactor,
|
33326
34085
|
abiMap: contractsAbiMap,
|
@@ -33332,29 +34091,92 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33332
34091
|
});
|
33333
34092
|
return transactionSummary;
|
33334
34093
|
}
|
34094
|
+
async getPreConfirmationTransactionSummary(contractsAbiMap) {
|
34095
|
+
const baseAssetId = await this.provider.getBaseAssetId();
|
34096
|
+
const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
|
34097
|
+
const transactionSummary = assemblePreConfirmationTransactionSummary({
|
34098
|
+
id: this.id,
|
34099
|
+
gqlTransactionStatus: this.preConfirmationStatus || this.status,
|
34100
|
+
baseAssetId,
|
34101
|
+
maxInputs,
|
34102
|
+
abiMap: contractsAbiMap,
|
34103
|
+
transactionRequest: this.request
|
34104
|
+
});
|
34105
|
+
return transactionSummary;
|
34106
|
+
}
|
34107
|
+
resolveStatus(type3) {
|
34108
|
+
const resolvers = this.statusResolvers.get(type3) || [];
|
34109
|
+
resolvers.forEach((resolve) => resolve());
|
34110
|
+
this.statusResolvers.delete(type3);
|
34111
|
+
}
|
34112
|
+
async waitForStatus(type3) {
|
34113
|
+
return new Promise((resolve, reject) => {
|
34114
|
+
const resolvers = this.statusResolvers.get(type3) || [];
|
34115
|
+
resolvers.push(() => {
|
34116
|
+
resolve();
|
34117
|
+
});
|
34118
|
+
this.statusResolvers.set(type3, resolvers);
|
34119
|
+
this.waitForStatusChange().catch(reject);
|
34120
|
+
});
|
34121
|
+
}
|
34122
|
+
/**
|
34123
|
+
* Waits for the status change of the transaction.
|
34124
|
+
* If the transaction is already in a final state, it will return immediately.
|
34125
|
+
* If the transaction is not in a final state, it will wait for the status change.
|
34126
|
+
* If we are already subscribed to the status change, it will return immediately.
|
34127
|
+
*/
|
33335
34128
|
async waitForStatusChange() {
|
33336
|
-
const
|
33337
|
-
if (
|
34129
|
+
const type3 = this.status?.type;
|
34130
|
+
if (type3 && (type3 === "FailureStatus" || type3 === "SuccessStatus")) {
|
34131
|
+
this.resolveStatus("preConfirmation");
|
34132
|
+
this.resolveStatus("confirmation");
|
34133
|
+
return;
|
34134
|
+
}
|
34135
|
+
if (this.waitingForStreamData) {
|
33338
34136
|
return;
|
33339
34137
|
}
|
34138
|
+
this.waitingForStreamData = true;
|
33340
34139
|
const subscription = this.submitTxSubscription ?? await this.provider.operations.statusChange({
|
33341
|
-
transactionId: this.id
|
34140
|
+
transactionId: this.id,
|
34141
|
+
includePreConfirmation: true
|
33342
34142
|
});
|
33343
34143
|
for await (const sub of subscription) {
|
33344
34144
|
const statusChange = "statusChange" in sub ? sub.statusChange : sub.submitAndAwaitStatus;
|
33345
34145
|
this.status = statusChange;
|
33346
34146
|
if (statusChange.type === "SqueezedOutStatus") {
|
33347
|
-
this.unsetResourceCache();
|
33348
34147
|
throw new FuelError(
|
33349
34148
|
ErrorCode.TRANSACTION_SQUEEZED_OUT,
|
33350
34149
|
`Transaction Squeezed Out with reason: ${statusChange.reason}`
|
33351
34150
|
);
|
33352
34151
|
}
|
33353
|
-
if (statusChange.type
|
34152
|
+
if (statusChange.type === "PreconfirmationSuccessStatus" || statusChange.type === "PreconfirmationFailureStatus") {
|
34153
|
+
this.preConfirmationStatus = statusChange;
|
34154
|
+
this.resolveStatus("preConfirmation");
|
34155
|
+
}
|
34156
|
+
if (statusChange.type === "SuccessStatus" || statusChange.type === "FailureStatus") {
|
34157
|
+
this.resolveStatus("confirmation");
|
34158
|
+
this.resolveStatus("preConfirmation");
|
34159
|
+
this.waitingForStreamData = false;
|
33354
34160
|
break;
|
33355
34161
|
}
|
33356
34162
|
}
|
33357
34163
|
}
|
34164
|
+
async waitForConfirmationStatuses() {
|
34165
|
+
try {
|
34166
|
+
await this.waitForStatus("confirmation");
|
34167
|
+
} catch (error2) {
|
34168
|
+
this.unsetResourceCache();
|
34169
|
+
throw error2;
|
34170
|
+
}
|
34171
|
+
}
|
34172
|
+
async waitForPreConfirmationStatuses() {
|
34173
|
+
try {
|
34174
|
+
await this.waitForStatus("preConfirmation");
|
34175
|
+
} catch (error2) {
|
34176
|
+
this.unsetResourceCache();
|
34177
|
+
throw error2;
|
34178
|
+
}
|
34179
|
+
}
|
33358
34180
|
/**
|
33359
34181
|
* Assembles the result of a transaction by retrieving the transaction summary,
|
33360
34182
|
* decoding logs (if available), and handling transaction failure.
|
@@ -33383,7 +34205,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33383
34205
|
transactionResult.groupedLogs = groupedLogs;
|
33384
34206
|
}
|
33385
34207
|
const { receipts } = transactionResult;
|
33386
|
-
const status = this.
|
34208
|
+
const status = this.getTransactionStatus();
|
33387
34209
|
if (status?.type === "FailureStatus") {
|
33388
34210
|
const { reason } = status;
|
33389
34211
|
throw extractTxError({
|
@@ -33395,16 +34217,46 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33395
34217
|
}
|
33396
34218
|
return transactionResult;
|
33397
34219
|
}
|
34220
|
+
async assemblePreConfirmationResult(contractsAbiMap) {
|
34221
|
+
const transactionSummary = await this.getPreConfirmationTransactionSummary(contractsAbiMap);
|
34222
|
+
const transactionResult = {
|
34223
|
+
...transactionSummary,
|
34224
|
+
logs: [],
|
34225
|
+
groupedLogs: {}
|
34226
|
+
};
|
34227
|
+
let { logs, groupedLogs } = { logs: [], groupedLogs: {} };
|
34228
|
+
if (this.abis && transactionSummary.receipts) {
|
34229
|
+
({ logs, groupedLogs } = getAllDecodedLogs({
|
34230
|
+
receipts: transactionSummary.receipts,
|
34231
|
+
mainAbi: this.abis.main,
|
34232
|
+
externalAbis: this.abis.otherContractsAbis
|
34233
|
+
}));
|
34234
|
+
transactionResult.logs = logs;
|
34235
|
+
transactionResult.groupedLogs = groupedLogs;
|
34236
|
+
}
|
34237
|
+
return transactionResult;
|
34238
|
+
}
|
33398
34239
|
/**
|
33399
34240
|
* Waits for transaction to complete and returns the result.
|
33400
34241
|
*
|
33401
34242
|
* @returns The completed transaction result
|
33402
34243
|
*/
|
33403
34244
|
async waitForResult(contractsAbiMap) {
|
33404
|
-
await this.
|
34245
|
+
await this.waitForConfirmationStatuses();
|
33405
34246
|
this.unsetResourceCache();
|
33406
34247
|
return this.assembleResult(contractsAbiMap);
|
33407
34248
|
}
|
34249
|
+
/**
|
34250
|
+
* Waits for the transaction's pre-confirmation and returns the result.
|
34251
|
+
*
|
34252
|
+
* @param contractsAbiMap - The contracts ABI map.
|
34253
|
+
* @returns The pre-confirmed transaction result
|
34254
|
+
*/
|
34255
|
+
async waitForPreConfirmation(contractsAbiMap) {
|
34256
|
+
await this.waitForPreConfirmationStatuses();
|
34257
|
+
this.unsetResourceCache();
|
34258
|
+
return this.assemblePreConfirmationResult(contractsAbiMap);
|
34259
|
+
}
|
33408
34260
|
/**
|
33409
34261
|
* Waits for transaction to complete and returns the result.
|
33410
34262
|
*
|
@@ -33416,6 +34268,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33416
34268
|
unsetResourceCache() {
|
33417
34269
|
this.provider.cache?.unset(this.id);
|
33418
34270
|
}
|
34271
|
+
getTransactionStatus() {
|
34272
|
+
return this.status ?? this.gqlTransaction?.status;
|
34273
|
+
}
|
33419
34274
|
};
|
33420
34275
|
|
33421
34276
|
// src/providers/utils/auto-retry-fetch.ts
|
@@ -33456,21 +34311,22 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33456
34311
|
}
|
33457
34312
|
__name(autoRetryFetch, "autoRetryFetch");
|
33458
34313
|
|
33459
|
-
// src/providers/utils/
|
33460
|
-
var
|
33461
|
-
const {
|
33462
|
-
|
33463
|
-
|
33464
|
-
if (
|
33465
|
-
|
33466
|
-
|
33467
|
-
|
33468
|
-
|
33469
|
-
|
33470
|
-
final.messages = [...final.messages, ...cached.messages.slice(0, maxInputs - total)];
|
34314
|
+
// src/providers/utils/parse-graphql-response.ts
|
34315
|
+
var parseGraphqlResponse = /* @__PURE__ */ __name(async (options) => {
|
34316
|
+
const { response, isSubscription } = options;
|
34317
|
+
let extensions;
|
34318
|
+
const responseClone = response.clone();
|
34319
|
+
if (isSubscription) {
|
34320
|
+
const reader = responseClone.body?.getReader();
|
34321
|
+
const { event } = await FuelGraphqlSubscriber.readEvent(reader);
|
34322
|
+
extensions = event?.extensions;
|
34323
|
+
} else {
|
34324
|
+
extensions = (await responseClone.json()).extensions;
|
33471
34325
|
}
|
33472
|
-
return
|
33473
|
-
|
34326
|
+
return {
|
34327
|
+
extensions
|
34328
|
+
};
|
34329
|
+
}, "parseGraphqlResponse");
|
33474
34330
|
|
33475
34331
|
// src/providers/utils/validate-pagination-args.ts
|
33476
34332
|
var validatePaginationArgs = /* @__PURE__ */ __name((params) => {
|
@@ -33515,22 +34371,48 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33515
34371
|
var BLOCKS_PAGE_SIZE_LIMIT = 5;
|
33516
34372
|
var DEFAULT_RESOURCE_CACHE_TTL = 2e4;
|
33517
34373
|
var GAS_USED_MODIFIER = 1.2;
|
34374
|
+
var WRITE_OPERATIONS = [
|
34375
|
+
"submit",
|
34376
|
+
"submitAndAwaitStatus",
|
34377
|
+
"produceBlocks"
|
34378
|
+
];
|
33518
34379
|
var Provider = class _Provider {
|
33519
34380
|
static {
|
33520
34381
|
__name(this, "Provider");
|
33521
34382
|
}
|
33522
34383
|
operations;
|
33523
34384
|
cache;
|
33524
|
-
/**
|
33525
|
-
|
34385
|
+
/**
|
34386
|
+
* @hidden
|
34387
|
+
* @param url - If provided, clears cache only for given url
|
34388
|
+
*/
|
34389
|
+
static clearChainAndNodeCaches(url) {
|
34390
|
+
if (url) {
|
34391
|
+
delete _Provider.inflightFetchChainAndNodeInfoRequests[url];
|
34392
|
+
delete _Provider.chainInfoCache[url];
|
34393
|
+
delete _Provider.nodeInfoCache[url];
|
34394
|
+
delete _Provider.currentBlockHeightCache[url];
|
34395
|
+
return;
|
34396
|
+
}
|
33526
34397
|
_Provider.inflightFetchChainAndNodeInfoRequests = {};
|
33527
34398
|
_Provider.nodeInfoCache = {};
|
33528
34399
|
_Provider.chainInfoCache = {};
|
34400
|
+
_Provider.currentBlockHeightCache = {};
|
33529
34401
|
}
|
33530
34402
|
/** @hidden */
|
33531
34403
|
url;
|
33532
34404
|
/** @hidden */
|
33533
34405
|
urlWithoutAuth;
|
34406
|
+
/**
|
34407
|
+
* Governs whether to include the required block height in the request body
|
34408
|
+
* for block-sensitive operations like when submitting a transaction.
|
34409
|
+
*
|
34410
|
+
* This ensures that the operation is executed at the correct block height,
|
34411
|
+
* regardless of which node in the network the request is routed to.
|
34412
|
+
*
|
34413
|
+
* `true` by default.
|
34414
|
+
*/
|
34415
|
+
static ENABLE_RPC_CONSISTENCY = true;
|
33534
34416
|
/** @hidden */
|
33535
34417
|
static inflightFetchChainAndNodeInfoRequests = {};
|
33536
34418
|
/** @hidden */
|
@@ -33538,6 +34420,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33538
34420
|
/** @hidden */
|
33539
34421
|
static nodeInfoCache = {};
|
33540
34422
|
/** @hidden */
|
34423
|
+
static currentBlockHeightCache = {};
|
34424
|
+
/** @hidden */
|
33541
34425
|
static incompatibleNodeVersionMessage = "";
|
33542
34426
|
/** @hidden */
|
33543
34427
|
consensusParametersTimestamp;
|
@@ -33549,6 +34433,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33549
34433
|
headers: void 0,
|
33550
34434
|
cache: void 0
|
33551
34435
|
};
|
34436
|
+
static extractOperationName(body) {
|
34437
|
+
return body?.toString().match(/"operationName":"(.+)"/)?.[1];
|
34438
|
+
}
|
34439
|
+
static isWriteOperation(body) {
|
34440
|
+
return WRITE_OPERATIONS.includes(this.extractOperationName(body));
|
34441
|
+
}
|
34442
|
+
static normalizeUrl(url) {
|
34443
|
+
return url.replace(/-sub$/, "");
|
34444
|
+
}
|
34445
|
+
static hasWriteOperationHappened(url) {
|
34446
|
+
return isDefined(_Provider.currentBlockHeightCache[this.normalizeUrl(url)]);
|
34447
|
+
}
|
33552
34448
|
/**
|
33553
34449
|
* @hidden
|
33554
34450
|
*/
|
@@ -33566,9 +34462,57 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33566
34462
|
if (options.requestMiddleware) {
|
33567
34463
|
fullRequest = await options.requestMiddleware(fullRequest);
|
33568
34464
|
}
|
33569
|
-
|
34465
|
+
if (_Provider.ENABLE_RPC_CONSISTENCY && _Provider.hasWriteOperationHappened(url)) {
|
34466
|
+
_Provider.applyBlockHeight(fullRequest, url);
|
34467
|
+
}
|
34468
|
+
return _Provider.fetchAndProcessBlockHeight(url, fullRequest, options);
|
33570
34469
|
}, retryOptions);
|
33571
34470
|
}
|
34471
|
+
static applyBlockHeight(request, url) {
|
34472
|
+
const normalizedUrl = this.normalizeUrl(url);
|
34473
|
+
const currentBlockHeight = _Provider.currentBlockHeightCache[normalizedUrl] ?? 0;
|
34474
|
+
request.body = request.body?.toString().replace(/}$/, `,"extensions":{"required_fuel_block_height":${currentBlockHeight}}}`);
|
34475
|
+
}
|
34476
|
+
static async fetchAndProcessBlockHeight(url, request, options) {
|
34477
|
+
const fetchFn = /* @__PURE__ */ __name(() => options.fetch ? options.fetch(url, request, options) : fetch(url, request), "fetchFn");
|
34478
|
+
const isWriteOperation = _Provider.isWriteOperation(request.body);
|
34479
|
+
if (isWriteOperation && !_Provider.hasWriteOperationHappened(url)) {
|
34480
|
+
_Provider.currentBlockHeightCache[_Provider.normalizeUrl(url)] = 0;
|
34481
|
+
}
|
34482
|
+
let response = await fetchFn();
|
34483
|
+
if (!_Provider.ENABLE_RPC_CONSISTENCY) {
|
34484
|
+
return response;
|
34485
|
+
}
|
34486
|
+
const retryOptions = {
|
34487
|
+
maxRetries: 5,
|
34488
|
+
baseDelay: 500
|
34489
|
+
};
|
34490
|
+
for (let retriesLeft = retryOptions.maxRetries; retriesLeft > 0; --retriesLeft) {
|
34491
|
+
const { extensions } = await parseGraphqlResponse({
|
34492
|
+
response,
|
34493
|
+
isSubscription: url.endsWith("-sub")
|
34494
|
+
});
|
34495
|
+
_Provider.setCurrentBlockHeight(url, extensions?.current_fuel_block_height);
|
34496
|
+
if (!extensions?.fuel_block_height_precondition_failed) {
|
34497
|
+
break;
|
34498
|
+
}
|
34499
|
+
const retryAttempt = retryOptions.maxRetries - retriesLeft + 1;
|
34500
|
+
const sleepTime = getWaitDelay(retryOptions, retryAttempt);
|
34501
|
+
await sleep(sleepTime);
|
34502
|
+
response = await fetchFn();
|
34503
|
+
}
|
34504
|
+
return response;
|
34505
|
+
}
|
34506
|
+
static setCurrentBlockHeight(url, height) {
|
34507
|
+
const writeOperationHappened = _Provider.hasWriteOperationHappened(url);
|
34508
|
+
if (!isDefined(height) || !writeOperationHappened) {
|
34509
|
+
return;
|
34510
|
+
}
|
34511
|
+
const normalizedUrl = _Provider.normalizeUrl(url);
|
34512
|
+
if (height > _Provider.currentBlockHeightCache[normalizedUrl]) {
|
34513
|
+
_Provider.currentBlockHeightCache[normalizedUrl] = height;
|
34514
|
+
}
|
34515
|
+
}
|
33572
34516
|
/**
|
33573
34517
|
* Constructor to initialize a Provider.
|
33574
34518
|
*
|
@@ -33654,6 +34598,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33654
34598
|
* Returns some helpful parameters related to gas fees.
|
33655
34599
|
*/
|
33656
34600
|
async getGasConfig() {
|
34601
|
+
await this.init();
|
33657
34602
|
const {
|
33658
34603
|
txParameters: { maxGasPerTx },
|
33659
34604
|
predicateParameters: { maxGasPerPredicate },
|
@@ -33778,7 +34723,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33778
34723
|
url: this.urlWithoutAuth,
|
33779
34724
|
query,
|
33780
34725
|
fetchFn: /* @__PURE__ */ __name((url, requestInit) => fetchFn(url, requestInit, this.options), "fetchFn"),
|
33781
|
-
variables: vars
|
34726
|
+
variables: vars,
|
34727
|
+
operationName: opDefinition.name.value,
|
34728
|
+
onEvent: /* @__PURE__ */ __name((event) => {
|
34729
|
+
_Provider.setCurrentBlockHeight(
|
34730
|
+
this.urlWithoutAuth,
|
34731
|
+
event.extensions?.current_fuel_block_height
|
34732
|
+
);
|
34733
|
+
}, "onEvent")
|
33782
34734
|
});
|
33783
34735
|
}
|
33784
34736
|
return gqlClient.request(query, vars);
|
@@ -33936,7 +34888,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33936
34888
|
* @param sendTransactionParams - The provider send transaction parameters (optional).
|
33937
34889
|
* @returns A promise that resolves to the transaction response object.
|
33938
34890
|
*/
|
33939
|
-
async sendTransaction(transactionRequestLike, {
|
34891
|
+
async sendTransaction(transactionRequestLike, {
|
34892
|
+
enableAssetBurn,
|
34893
|
+
estimateTxDependencies = true,
|
34894
|
+
includePreConfirmation: _includePreConfirmation = true
|
34895
|
+
} = {}) {
|
33940
34896
|
const transactionRequest = transactionRequestify(transactionRequestLike);
|
33941
34897
|
validateTransactionForAssetBurn(
|
33942
34898
|
await this.getBaseAssetId(),
|
@@ -33952,7 +34908,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33952
34908
|
if (isTransactionTypeScript(transactionRequest)) {
|
33953
34909
|
abis = transactionRequest.abis;
|
33954
34910
|
}
|
33955
|
-
const subscription = await this.operations.submitAndAwaitStatus({
|
34911
|
+
const subscription = await this.operations.submitAndAwaitStatus({
|
34912
|
+
encodedTransaction,
|
34913
|
+
includePreConfirmation: true
|
34914
|
+
});
|
33956
34915
|
this.#cacheInputs(
|
33957
34916
|
transactionRequest.inputs,
|
33958
34917
|
transactionRequest.getTransactionId(await this.getChainId())
|
@@ -34304,6 +35263,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34304
35263
|
* @param transactionCostParams - The transaction cost parameters (optional).
|
34305
35264
|
*
|
34306
35265
|
* @returns A promise that resolves to the transaction cost object.
|
35266
|
+
*
|
35267
|
+
* @deprecated Use provider.assembleTx instead
|
35268
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
34307
35269
|
*/
|
34308
35270
|
async getTransactionCost(transactionRequestLike, { signatureCallback, gasPrice: gasPriceParam } = {}) {
|
34309
35271
|
const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
|
@@ -34346,7 +35308,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34346
35308
|
}
|
34347
35309
|
({ rawReceipts, receipts, missingContractIds, outputVariables, dryRunStatus } = await this.estimateTxDependencies(txRequestClone, { gasPrice }));
|
34348
35310
|
if (dryRunStatus && "reason" in dryRunStatus) {
|
34349
|
-
throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus);
|
35311
|
+
throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus.reason);
|
34350
35312
|
}
|
34351
35313
|
const { maxGasPerTx } = await this.getGasConfig();
|
34352
35314
|
const pristineGasUsed = getGasUsedFromReceipts(receipts);
|
@@ -34379,6 +35341,102 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34379
35341
|
transactionSummary
|
34380
35342
|
};
|
34381
35343
|
}
|
35344
|
+
/**
|
35345
|
+
* Assembles a transaction by completely estimating and funding it.
|
35346
|
+
*
|
35347
|
+
* @param params - Parameters used to assemble the transaction.
|
35348
|
+
*
|
35349
|
+
* @returns The assembled transaction request, estimated gas price, and receipts
|
35350
|
+
*/
|
35351
|
+
async assembleTx(params) {
|
35352
|
+
const {
|
35353
|
+
request,
|
35354
|
+
reserveGas,
|
35355
|
+
resourcesIdsToIgnore,
|
35356
|
+
feePayerAccount,
|
35357
|
+
blockHorizon = 10,
|
35358
|
+
estimatePredicates = true,
|
35359
|
+
accountCoinQuantities = []
|
35360
|
+
} = params;
|
35361
|
+
const allAddresses = /* @__PURE__ */ new Set();
|
35362
|
+
const baseAssetId = await this.getBaseAssetId();
|
35363
|
+
let feePayerIndex = -1;
|
35364
|
+
let baseAssetChange;
|
35365
|
+
const requiredBalances = accountCoinQuantities.map((quantity, index) => {
|
35366
|
+
const { amount, assetId, account = feePayerAccount, changeOutputAccount } = quantity;
|
35367
|
+
const changeAccountAddress = changeOutputAccount ? changeOutputAccount.address.toB256() : account.address.toB256();
|
35368
|
+
allAddresses.add(account.address.toB256());
|
35369
|
+
const changePolicy = {
|
35370
|
+
change: changeAccountAddress
|
35371
|
+
};
|
35372
|
+
if (assetId === baseAssetId) {
|
35373
|
+
baseAssetChange = changePolicy.change;
|
35374
|
+
}
|
35375
|
+
if (account.address.equals(feePayerAccount.address)) {
|
35376
|
+
feePayerIndex = index;
|
35377
|
+
}
|
35378
|
+
const requiredBalance = {
|
35379
|
+
account: resolveAccountForAssembleTxParams(account),
|
35380
|
+
amount: bn(amount).toString(10),
|
35381
|
+
assetId,
|
35382
|
+
changePolicy
|
35383
|
+
};
|
35384
|
+
return requiredBalance;
|
35385
|
+
});
|
35386
|
+
if (feePayerIndex === -1) {
|
35387
|
+
allAddresses.add(feePayerAccount.address.toB256());
|
35388
|
+
const newLength = requiredBalances.push({
|
35389
|
+
account: resolveAccountForAssembleTxParams(feePayerAccount),
|
35390
|
+
amount: bn(0).toString(10),
|
35391
|
+
// Since the correct fee amount cannot be determined yet, we can use 0
|
35392
|
+
assetId: baseAssetId,
|
35393
|
+
changePolicy: {
|
35394
|
+
change: baseAssetChange || feePayerAccount.address.toB256()
|
35395
|
+
}
|
35396
|
+
});
|
35397
|
+
feePayerIndex = newLength - 1;
|
35398
|
+
}
|
35399
|
+
const excludeInput = await this.adjustResourcesToIgnoreForAddresses(
|
35400
|
+
Array.from(allAddresses),
|
35401
|
+
resourcesIdsToIgnore
|
35402
|
+
);
|
35403
|
+
const {
|
35404
|
+
assembleTx: { status, transaction: gqlTransaction, gasPrice }
|
35405
|
+
} = await this.operations.assembleTx({
|
35406
|
+
tx: hexlify(request.toTransactionBytes()),
|
35407
|
+
blockHorizon: String(blockHorizon),
|
35408
|
+
feeAddressIndex: String(feePayerIndex),
|
35409
|
+
requiredBalances,
|
35410
|
+
estimatePredicates,
|
35411
|
+
excludeInput,
|
35412
|
+
reserveGas: reserveGas ? reserveGas.toString(10) : void 0
|
35413
|
+
});
|
35414
|
+
if (status.type === "DryRunFailureStatus") {
|
35415
|
+
const parsedReceipts = status.receipts.map(deserializeReceipt);
|
35416
|
+
throw this.extractDryRunError(request, parsedReceipts, status.reason);
|
35417
|
+
}
|
35418
|
+
request.witnesses = gqlTransaction.witnesses || request.witnesses;
|
35419
|
+
request.inputs = gqlTransaction.inputs?.map(deserializeInput) || request.inputs;
|
35420
|
+
request.outputs = gqlTransaction.outputs?.map(deserializeOutput) || request.outputs;
|
35421
|
+
if (gqlTransaction.policies?.maxFee) {
|
35422
|
+
request.maxFee = bn(gqlTransaction.policies.maxFee);
|
35423
|
+
}
|
35424
|
+
if (gqlTransaction.scriptGasLimit) {
|
35425
|
+
request.gasLimit = bn(gqlTransaction.scriptGasLimit);
|
35426
|
+
}
|
35427
|
+
const rawReceipts = status.receipts;
|
35428
|
+
const chainId = await this.getChainId();
|
35429
|
+
request.updateState(chainId, "funded", {
|
35430
|
+
gasPrice: gasPrice.toString(),
|
35431
|
+
receipts: rawReceipts
|
35432
|
+
});
|
35433
|
+
return {
|
35434
|
+
assembledRequest: request,
|
35435
|
+
gasPrice: bn(gasPrice),
|
35436
|
+
receipts: status.receipts.map(deserializeReceipt),
|
35437
|
+
rawReceipts
|
35438
|
+
};
|
35439
|
+
}
|
34382
35440
|
/**
|
34383
35441
|
* Returns coins for the given owner.
|
34384
35442
|
*
|
@@ -34417,30 +35475,15 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34417
35475
|
*
|
34418
35476
|
* @param owner - The address to get resources for.
|
34419
35477
|
* @param quantities - The coin quantities to get.
|
34420
|
-
* @param
|
35478
|
+
* @param resourcesIdsToIgnore - IDs of excluded resources from the selection (optional).
|
34421
35479
|
* @returns A promise that resolves to the resources.
|
34422
35480
|
*/
|
34423
|
-
async getResourcesToSpend(owner, quantities,
|
35481
|
+
async getResourcesToSpend(owner, quantities, resourcesIdsToIgnore) {
|
34424
35482
|
const ownerAddress = new Address(owner);
|
34425
|
-
|
34426
|
-
|
34427
|
-
|
34428
|
-
|
34429
|
-
if (this.cache) {
|
34430
|
-
const cached = this.cache.getActiveData(ownerAddress.toB256());
|
34431
|
-
if (cached.utxos.length || cached.messages.length) {
|
34432
|
-
const {
|
34433
|
-
consensusParameters: {
|
34434
|
-
txParameters: { maxInputs }
|
34435
|
-
}
|
34436
|
-
} = await this.getChain();
|
34437
|
-
idsToExclude = adjustResourcesToExclude({
|
34438
|
-
userInput: idsToExclude,
|
34439
|
-
cached,
|
34440
|
-
maxInputs: maxInputs.toNumber()
|
34441
|
-
});
|
34442
|
-
}
|
34443
|
-
}
|
35483
|
+
const excludedIds = await this.adjustResourcesToIgnoreForAddresses(
|
35484
|
+
[ownerAddress.b256Address],
|
35485
|
+
resourcesIdsToIgnore
|
35486
|
+
);
|
34444
35487
|
const coinsQuery = {
|
34445
35488
|
owner: ownerAddress.toB256(),
|
34446
35489
|
queryPerAsset: quantities.map(coinQuantityfy).map(({ assetId, amount, max: maxPerAsset }) => ({
|
@@ -34448,7 +35491,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34448
35491
|
amount: (amount.eqn(0) ? bn(1) : amount).toString(10),
|
34449
35492
|
max: maxPerAsset ? maxPerAsset.toString(10) : void 0
|
34450
35493
|
})),
|
34451
|
-
excludedIds
|
35494
|
+
excludedIds
|
34452
35495
|
};
|
34453
35496
|
const result = await this.operations.getCoinsToSpend(coinsQuery);
|
34454
35497
|
const coins = result.coinsToSpend.flat().map((coin) => {
|
@@ -35015,11 +36058,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35015
36058
|
/**
|
35016
36059
|
* @hidden
|
35017
36060
|
*/
|
35018
|
-
extractDryRunError(transactionRequest, receipts,
|
35019
|
-
const status = dryRunStatus;
|
36061
|
+
extractDryRunError(transactionRequest, receipts, reason) {
|
35020
36062
|
let logs = [];
|
35021
36063
|
let groupedLogs = {};
|
35022
|
-
if (transactionRequest.abis) {
|
36064
|
+
if (transactionRequest.type === TransactionType.Script && transactionRequest.abis) {
|
35023
36065
|
({ logs, groupedLogs } = getAllDecodedLogs({
|
35024
36066
|
receipts,
|
35025
36067
|
mainAbi: transactionRequest.abis.main,
|
@@ -35030,7 +36072,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35030
36072
|
logs,
|
35031
36073
|
groupedLogs,
|
35032
36074
|
receipts,
|
35033
|
-
statusReason:
|
36075
|
+
statusReason: reason
|
35034
36076
|
});
|
35035
36077
|
}
|
35036
36078
|
/**
|
@@ -35057,6 +36099,45 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35057
36099
|
}
|
35058
36100
|
return transactionRequest;
|
35059
36101
|
}
|
36102
|
+
/**
|
36103
|
+
* @hidden
|
36104
|
+
*
|
36105
|
+
* This helper adjusts the resources to be excluded for a given set of addresses.
|
36106
|
+
* Supporting multiple addresses is important because of the `assembleTx` method,
|
36107
|
+
* which may be invoked with different addresses. It handles both messages and UTXOs,
|
36108
|
+
* ensuring the total number of inputs does not exceed the maximum allowed by the chain's
|
36109
|
+
* consensus parameters. The resources specified in the `resourcesIdsToIgnore` parameter have priority
|
36110
|
+
* over those retrieved from the cache.
|
36111
|
+
*/
|
36112
|
+
async adjustResourcesToIgnoreForAddresses(addresses, resourcesIdsToIgnore) {
|
36113
|
+
const final = {
|
36114
|
+
messages: resourcesIdsToIgnore?.messages?.map((nonce) => hexlify(nonce)) || [],
|
36115
|
+
utxos: resourcesIdsToIgnore?.utxos?.map((id) => hexlify(id)) || []
|
36116
|
+
};
|
36117
|
+
if (this.cache) {
|
36118
|
+
const cache2 = this.cache;
|
36119
|
+
const allCached = addresses.map((address) => cache2.getActiveData(address));
|
36120
|
+
const {
|
36121
|
+
consensusParameters: {
|
36122
|
+
txParameters: { maxInputs: maxInputsBn }
|
36123
|
+
}
|
36124
|
+
} = await this.getChain();
|
36125
|
+
const maxInputs = maxInputsBn.toNumber();
|
36126
|
+
for (let i = 0; i < allCached.length; i++) {
|
36127
|
+
let total = final.utxos.length + final.messages.length;
|
36128
|
+
if (total >= maxInputs) {
|
36129
|
+
break;
|
36130
|
+
}
|
36131
|
+
final.utxos = [...final.utxos, ...allCached[i].utxos.slice(0, maxInputs - total)];
|
36132
|
+
total = final.utxos.length + final.messages.length;
|
36133
|
+
if (total >= maxInputs) {
|
36134
|
+
break;
|
36135
|
+
}
|
36136
|
+
final.messages = [...final.messages, ...allCached[i].messages.slice(0, maxInputs - total)];
|
36137
|
+
}
|
36138
|
+
}
|
36139
|
+
return final;
|
36140
|
+
}
|
35060
36141
|
};
|
35061
36142
|
|
35062
36143
|
// src/test-utils/test-asset-id.ts
|
@@ -35082,21 +36163,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35082
36163
|
}
|
35083
36164
|
};
|
35084
36165
|
|
35085
|
-
// src/providers/utils/merge-quantities.ts
|
35086
|
-
var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
|
35087
|
-
const resultMap = {};
|
35088
|
-
function addToMap({ amount, assetId }) {
|
35089
|
-
if (resultMap[assetId]) {
|
35090
|
-
resultMap[assetId] = resultMap[assetId].add(amount);
|
35091
|
-
} else {
|
35092
|
-
resultMap[assetId] = amount;
|
35093
|
-
}
|
35094
|
-
}
|
35095
|
-
__name(addToMap, "addToMap");
|
35096
|
-
coinQuantities.forEach((arr) => arr.forEach(addToMap));
|
35097
|
-
return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
|
35098
|
-
}, "mergeQuantities");
|
35099
|
-
|
35100
36166
|
// src/types.ts
|
35101
36167
|
var AbstractAccount = class {
|
35102
36168
|
static {
|
@@ -35141,6 +36207,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35141
36207
|
return { script, scriptData };
|
35142
36208
|
}, "assembleTransferToContractScript");
|
35143
36209
|
|
36210
|
+
// src/utils/split-coins-into-batches.ts
|
36211
|
+
var splitCoinsIntoBatches = /* @__PURE__ */ __name((coins, maxBatchLength) => {
|
36212
|
+
const batchesNum = Math.ceil(coins.length / maxBatchLength);
|
36213
|
+
const batches = [];
|
36214
|
+
for (let i = 0; i < batchesNum; i += 1) {
|
36215
|
+
const batchStart = i * maxBatchLength;
|
36216
|
+
const batchEnd = (i + 1) * maxBatchLength;
|
36217
|
+
batches.push(coins.slice(batchStart, batchEnd));
|
36218
|
+
}
|
36219
|
+
return batches;
|
36220
|
+
}, "splitCoinsIntoBatches");
|
36221
|
+
|
35144
36222
|
// src/account.ts
|
35145
36223
|
var MAX_FUNDING_ATTEMPTS = 5;
|
35146
36224
|
var Account = class extends AbstractAccount {
|
@@ -35207,11 +36285,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35207
36285
|
* Retrieves resources satisfying the spend query for the account.
|
35208
36286
|
*
|
35209
36287
|
* @param quantities - Quantities of resources to be obtained.
|
35210
|
-
* @param
|
36288
|
+
* @param resourcesIdsToIgnore - IDs of resources to be excluded from the query (optional).
|
35211
36289
|
* @returns A promise that resolves to an array of Resources.
|
35212
36290
|
*/
|
35213
|
-
async getResourcesToSpend(quantities,
|
35214
|
-
return this.provider.getResourcesToSpend(this.address, quantities,
|
36291
|
+
async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
|
36292
|
+
return this.provider.getResourcesToSpend(this.address, quantities, resourcesIdsToIgnore);
|
35215
36293
|
}
|
35216
36294
|
/**
|
35217
36295
|
* Retrieves coins owned by the account.
|
@@ -35256,6 +36334,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35256
36334
|
* @param request - The transaction request to fund.
|
35257
36335
|
* @param params - The estimated transaction parameters.
|
35258
36336
|
* @returns A promise that resolves to the funded transaction request.
|
36337
|
+
*
|
36338
|
+
* @deprecated Use provider.assembleTx instead
|
36339
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
35259
36340
|
*/
|
35260
36341
|
async fund(request, params) {
|
35261
36342
|
const {
|
@@ -35378,7 +36459,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35378
36459
|
amount,
|
35379
36460
|
assetId: assetId || await this.provider.getBaseAssetId()
|
35380
36461
|
});
|
35381
|
-
|
36462
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request);
|
36463
|
+
request = await setAndValidateGasAndFeeForAssembledTx({
|
36464
|
+
gasPrice,
|
36465
|
+
provider: this.provider,
|
36466
|
+
transactionRequest,
|
36467
|
+
setGasLimit: txParams?.gasLimit,
|
36468
|
+
setMaxFee: txParams?.maxFee
|
36469
|
+
});
|
35382
36470
|
return request;
|
35383
36471
|
}
|
35384
36472
|
/**
|
@@ -35404,7 +36492,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35404
36492
|
async batchTransfer(transferParams, txParams = {}) {
|
35405
36493
|
let request = new ScriptTransactionRequest(txParams);
|
35406
36494
|
request = this.addBatchTransfer(request, transferParams);
|
35407
|
-
|
36495
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request);
|
36496
|
+
request = await setAndValidateGasAndFeeForAssembledTx({
|
36497
|
+
gasPrice,
|
36498
|
+
provider: this.provider,
|
36499
|
+
transactionRequest,
|
36500
|
+
setGasLimit: txParams?.gasLimit,
|
36501
|
+
setMaxFee: txParams?.maxFee
|
36502
|
+
});
|
35408
36503
|
return this.sendTransaction(request, { estimateTxDependencies: false });
|
35409
36504
|
}
|
35410
36505
|
/**
|
@@ -35476,7 +36571,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35476
36571
|
const { script, scriptData } = await assembleTransferToContractScript(transferParams);
|
35477
36572
|
request.script = script;
|
35478
36573
|
request.scriptData = scriptData;
|
35479
|
-
|
36574
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request, quantities);
|
36575
|
+
request = await setAndValidateGasAndFeeForAssembledTx({
|
36576
|
+
gasPrice,
|
36577
|
+
provider: this.provider,
|
36578
|
+
transactionRequest,
|
36579
|
+
setGasLimit: txParams?.gasLimit,
|
36580
|
+
setMaxFee: txParams?.maxFee
|
36581
|
+
});
|
35480
36582
|
return this.sendTransaction(request);
|
35481
36583
|
}
|
35482
36584
|
/**
|
@@ -35504,16 +36606,144 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35504
36606
|
const baseAssetId = await this.provider.getBaseAssetId();
|
35505
36607
|
let request = new ScriptTransactionRequest(params);
|
35506
36608
|
const quantities = [{ amount: bn(amount), assetId: baseAssetId }];
|
35507
|
-
const
|
35508
|
-
request =
|
35509
|
-
|
35510
|
-
|
35511
|
-
|
35512
|
-
txParams
|
36609
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request, quantities);
|
36610
|
+
request = await setAndValidateGasAndFeeForAssembledTx({
|
36611
|
+
gasPrice,
|
36612
|
+
provider: this.provider,
|
36613
|
+
transactionRequest,
|
36614
|
+
setGasLimit: txParams?.gasLimit,
|
36615
|
+
setMaxFee: txParams?.maxFee
|
35513
36616
|
});
|
35514
|
-
await this.fund(request, txCost);
|
35515
36617
|
return this.sendTransaction(request);
|
35516
36618
|
}
|
36619
|
+
/**
|
36620
|
+
* Consolidates base asset UTXOs into fewer, larger ones.
|
36621
|
+
*
|
36622
|
+
* Retrieves a limited number of base asset coins (as defined by `Provider.RESOURCES_PAGE_SIZE_LIMIT`),
|
36623
|
+
* assembles consolidation transactions, and submits them to the network.
|
36624
|
+
*
|
36625
|
+
* Note: This method currently supports only the base asset.
|
36626
|
+
*
|
36627
|
+
* @param params - The parameters for coin consolidation, including the asset ID, mode, and output number.
|
36628
|
+
* @returns A promise that resolves to the response of the submitted transactions.
|
36629
|
+
* @throws Will throw an error if the asset is not a base asset as non-base asset consolidation is not implemented.
|
36630
|
+
*/
|
36631
|
+
async consolidateCoins(params) {
|
36632
|
+
const { assetId } = params;
|
36633
|
+
const { coins } = await this.getCoins(assetId);
|
36634
|
+
const baseAssetId = await this.provider.getBaseAssetId();
|
36635
|
+
const isBaseAsset = baseAssetId === assetId;
|
36636
|
+
let submitAll;
|
36637
|
+
const consolidationParams = {
|
36638
|
+
coins,
|
36639
|
+
mode: params.mode,
|
36640
|
+
outputNum: params.outputNum
|
36641
|
+
};
|
36642
|
+
if (isBaseAsset) {
|
36643
|
+
({ submitAll } = await this.assembleBaseAssetConsolidationTxs(consolidationParams));
|
36644
|
+
} else {
|
36645
|
+
throw new FuelError(
|
36646
|
+
ErrorCode.UNSUPPORTED_FEATURE,
|
36647
|
+
"Consolidation for non-base assets is not supported yet."
|
36648
|
+
);
|
36649
|
+
}
|
36650
|
+
return submitAll();
|
36651
|
+
}
|
36652
|
+
/**
|
36653
|
+
* Assembles transactions for consolidating base asset coins into fewer UTXOs.
|
36654
|
+
*
|
36655
|
+
* This method splits the provided coins into batches and creates transaction requests
|
36656
|
+
* to consolidate them. It calculates the necessary fee and sets up the transactions
|
36657
|
+
* to be submitted either in parallel (default) or sequentially.
|
36658
|
+
*
|
36659
|
+
* @param params - The parameters for assembling base asset consolidation transactions.
|
36660
|
+
*
|
36661
|
+
* @returns An object containing the assembled transactions, the total fee cost, and a callback to submit all transactions.
|
36662
|
+
*/
|
36663
|
+
async assembleBaseAssetConsolidationTxs(params) {
|
36664
|
+
const { coins, mode = "parallel", outputNum = 1 } = params;
|
36665
|
+
const baseAssetId = await this.provider.getBaseAssetId();
|
36666
|
+
this.validateConsolidationTxsCoins(coins, baseAssetId);
|
36667
|
+
const chainInfo = await this.provider.getChain();
|
36668
|
+
const maxInputsNumber = chainInfo.consensusParameters.txParameters.maxInputs.toNumber();
|
36669
|
+
let totalFeeCost = bn(0);
|
36670
|
+
const txs = [];
|
36671
|
+
const coinsBatches = splitCoinsIntoBatches(coins, maxInputsNumber);
|
36672
|
+
const gasPrice = await this.provider.estimateGasPrice(10);
|
36673
|
+
const consolidateMoreThanOneCoin = outputNum > 1;
|
36674
|
+
coinsBatches.filter((batch) => batch.length > 1).forEach((coinBatch) => {
|
36675
|
+
const request = new ScriptTransactionRequest({
|
36676
|
+
script: "0x"
|
36677
|
+
});
|
36678
|
+
request.addResources(coinBatch);
|
36679
|
+
if (consolidateMoreThanOneCoin) {
|
36680
|
+
Array.from({ length: outputNum - 1 }).forEach(() => {
|
36681
|
+
request.addCoinOutput(this.address, 0, baseAssetId);
|
36682
|
+
});
|
36683
|
+
}
|
36684
|
+
const minGas = request.calculateMinGas(chainInfo);
|
36685
|
+
const fee = calculateGasFee({
|
36686
|
+
gasPrice,
|
36687
|
+
gas: minGas,
|
36688
|
+
priceFactor: chainInfo.consensusParameters.feeParameters.gasPriceFactor,
|
36689
|
+
tip: request.tip
|
36690
|
+
});
|
36691
|
+
request.maxFee = fee;
|
36692
|
+
if (consolidateMoreThanOneCoin) {
|
36693
|
+
const total = request.inputs.filter(isRequestInputCoin).reduce((acc, input) => acc.add(input.amount), bn(0));
|
36694
|
+
const amountPerNewUtxo = total.div(outputNum + 1);
|
36695
|
+
request.outputs.forEach((output) => {
|
36696
|
+
if (output.type === OutputType.Coin) {
|
36697
|
+
output.amount = amountPerNewUtxo;
|
36698
|
+
}
|
36699
|
+
});
|
36700
|
+
}
|
36701
|
+
totalFeeCost = totalFeeCost.add(fee);
|
36702
|
+
txs.push(request);
|
36703
|
+
});
|
36704
|
+
const submitAll = this.prepareSubmitAll({ txs, mode });
|
36705
|
+
return { txs, totalFeeCost, submitAll };
|
36706
|
+
}
|
36707
|
+
/**
|
36708
|
+
* Prepares a function to submit all transactions either sequentially or in parallel.
|
36709
|
+
*
|
36710
|
+
* @param params - The parameters for preparing the submitAll callback.
|
36711
|
+
*
|
36712
|
+
* @returns A callback that, when called, submits all transactions and returns their results and any errors encountered.
|
36713
|
+
*/
|
36714
|
+
prepareSubmitAll = /* @__PURE__ */ __name((params) => {
|
36715
|
+
const { txs, mode = "sequential" } = params;
|
36716
|
+
return async () => {
|
36717
|
+
const txResponses = [];
|
36718
|
+
const errors2 = [];
|
36719
|
+
if (mode === "sequential") {
|
36720
|
+
for (const tx of txs) {
|
36721
|
+
try {
|
36722
|
+
const submit = await this.sendTransaction(tx);
|
36723
|
+
const response = await submit.waitForResult();
|
36724
|
+
txResponses.push(response);
|
36725
|
+
} catch (error2) {
|
36726
|
+
errors2.push(error2);
|
36727
|
+
}
|
36728
|
+
}
|
36729
|
+
} else {
|
36730
|
+
const results = await Promise.allSettled(
|
36731
|
+
txs.map(async (tx) => {
|
36732
|
+
const submit = await this.sendTransaction(tx);
|
36733
|
+
return submit.waitForResult();
|
36734
|
+
})
|
36735
|
+
);
|
36736
|
+
results.forEach((result) => {
|
36737
|
+
if (result.status === "fulfilled") {
|
36738
|
+
txResponses.push(result.value);
|
36739
|
+
} else {
|
36740
|
+
errors2.push(result.reason);
|
36741
|
+
}
|
36742
|
+
});
|
36743
|
+
}
|
36744
|
+
return { txResponses, errors: errors2 };
|
36745
|
+
};
|
36746
|
+
}, "prepareSubmitAll");
|
35517
36747
|
/**
|
35518
36748
|
* Returns a transaction cost to enable user
|
35519
36749
|
* to set gasLimit and also reserve balance amounts
|
@@ -35523,6 +36753,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35523
36753
|
* @param transactionCostParams - The transaction cost parameters (optional).
|
35524
36754
|
*
|
35525
36755
|
* @returns A promise that resolves to the transaction cost object.
|
36756
|
+
*
|
36757
|
+
* @deprecated Use provider.assembleTx instead
|
36758
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
35526
36759
|
*/
|
35527
36760
|
async getTransactionCost(transactionRequestLike, { signatureCallback, quantities = [], gasPrice } = {}) {
|
35528
36761
|
const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
|
@@ -35684,6 +36917,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35684
36917
|
} : void 0;
|
35685
36918
|
}
|
35686
36919
|
/** @hidden * */
|
36920
|
+
async assembleTx(transactionRequest, quantities = []) {
|
36921
|
+
const outputQuantities = transactionRequest.outputs.filter((o) => o.type === OutputType.Coin).map(({ amount, assetId }) => ({ assetId: String(assetId), amount: bn(amount) }));
|
36922
|
+
transactionRequest.gasLimit = bn(0);
|
36923
|
+
transactionRequest.maxFee = bn(0);
|
36924
|
+
const { assembledRequest, gasPrice } = await this.provider.assembleTx({
|
36925
|
+
request: transactionRequest,
|
36926
|
+
accountCoinQuantities: mergeQuantities(outputQuantities, quantities),
|
36927
|
+
feePayerAccount: this
|
36928
|
+
});
|
36929
|
+
return { transactionRequest: assembledRequest, gasPrice };
|
36930
|
+
}
|
36931
|
+
/** @hidden * */
|
35687
36932
|
validateTransferAmount(amount) {
|
35688
36933
|
if (bn(amount).lte(0)) {
|
35689
36934
|
throw new FuelError(
|
@@ -35731,6 +36976,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35731
36976
|
}
|
35732
36977
|
return request;
|
35733
36978
|
}
|
36979
|
+
/** @hidden * */
|
36980
|
+
validateConsolidationTxsCoins(coins, assetId) {
|
36981
|
+
if (coins.length <= 1) {
|
36982
|
+
throw new FuelError(ErrorCode.NO_COINS_TO_CONSOLIDATE, "No coins to consolidate.");
|
36983
|
+
}
|
36984
|
+
if (!coins.every((c) => c.assetId === assetId)) {
|
36985
|
+
throw new FuelError(
|
36986
|
+
ErrorCode.COINS_ASSET_ID_MISMATCH,
|
36987
|
+
"All coins to consolidate must be from the same asset id."
|
36988
|
+
);
|
36989
|
+
}
|
36990
|
+
}
|
35734
36991
|
};
|
35735
36992
|
|
35736
36993
|
// src/wallet/keystore-wallet.ts
|
@@ -38800,23 +40057,26 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
38800
40057
|
),
|
38801
40058
|
port: nodeOptions.port || "0"
|
38802
40059
|
};
|
38803
|
-
let
|
40060
|
+
let killNode;
|
38804
40061
|
let url;
|
38805
40062
|
if (launchNodeServerPort) {
|
38806
40063
|
const serverUrl = `http://localhost:${launchNodeServerPort}`;
|
38807
40064
|
url = await (await fetch(serverUrl, { method: "POST", body: JSON.stringify(launchNodeOptions) })).text();
|
38808
|
-
|
40065
|
+
killNode = /* @__PURE__ */ __name(() => {
|
38809
40066
|
fetch(`${serverUrl}/cleanup/${url}`);
|
38810
|
-
}, "
|
40067
|
+
}, "killNode");
|
38811
40068
|
} else {
|
38812
40069
|
const settings = await launchNode(launchNodeOptions);
|
38813
40070
|
url = settings.url;
|
38814
|
-
|
40071
|
+
killNode = settings.cleanup;
|
38815
40072
|
}
|
40073
|
+
const cleanup = /* @__PURE__ */ __name(() => {
|
40074
|
+
Provider.clearChainAndNodeCaches(url);
|
40075
|
+
killNode();
|
40076
|
+
}, "cleanup");
|
38816
40077
|
let provider;
|
38817
40078
|
try {
|
38818
40079
|
provider = new Provider(url, providerOptions);
|
38819
|
-
await provider.init();
|
38820
40080
|
} catch (err) {
|
38821
40081
|
cleanup();
|
38822
40082
|
throw err;
|