@fuel-ts/account 0.100.2 → 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 +1587 -289
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +2133 -920
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2041 -831
- 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/getAllDecodedLogs.d.ts +30 -0
- package/dist/providers/transaction-response/getAllDecodedLogs.d.ts.map +1 -0
- package/dist/providers/transaction-response/getDecodedLogs.d.ts +20 -1
- package/dist/providers/transaction-response/getDecodedLogs.d.ts.map +1 -1
- package/dist/providers/transaction-response/index.d.ts +1 -0
- package/dist/providers/transaction-response/index.d.ts.map +1 -1
- package/dist/providers/transaction-response/transaction-response.d.ts +41 -12
- 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/extract-tx-error.d.ts +4 -3
- package/dist/providers/utils/extract-tx-error.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 +1540 -268
- package/dist/test-utils.global.js.map +1 -1
- package/dist/test-utils.js +2008 -837
- package/dist/test-utils.js.map +1 -1
- package/dist/test-utils.mjs +1931 -754
- 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/IwBBEGsiASQAIAFBBGogABAgIAEoAgQi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AUKBgICAEDcCACABIACtQv///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],
|
@@ -28902,18 +29009,84 @@ spurious results.`);
|
|
28902
29009
|
gql["default"] = gql;
|
28903
29010
|
var lib_default2 = gql;
|
28904
29011
|
|
28905
|
-
// src/connectors/utils/promises.ts
|
28906
|
-
function deferPromise() {
|
28907
|
-
const defer = {};
|
28908
|
-
defer.promise = new Promise((resolve, reject) => {
|
28909
|
-
defer.reject = reject;
|
28910
|
-
defer.resolve = resolve;
|
28911
|
-
});
|
28912
|
-
return defer;
|
28913
|
-
}
|
28914
|
-
__name(deferPromise, "deferPromise");
|
28915
|
-
|
28916
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
|
+
`;
|
28917
29090
|
var SubmittedStatusFragmentDoc = lib_default2`
|
28918
29091
|
fragment SubmittedStatusFragment on SubmittedStatus {
|
28919
29092
|
type: __typename
|
@@ -29042,6 +29215,87 @@ spurious results.`);
|
|
29042
29215
|
reason
|
29043
29216
|
}
|
29044
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}`;
|
29045
29299
|
var TransactionStatusSubscriptionFragmentDoc = lib_default2`
|
29046
29300
|
fragment transactionStatusSubscriptionFragment on TransactionStatus {
|
29047
29301
|
... on SubmittedStatus {
|
@@ -29062,12 +29316,20 @@ spurious results.`);
|
|
29062
29316
|
... on SqueezedOutStatus {
|
29063
29317
|
...SqueezedOutStatusFragment
|
29064
29318
|
}
|
29319
|
+
... on PreconfirmationSuccessStatus {
|
29320
|
+
...PreconfirmationSuccessStatusFragment
|
29321
|
+
}
|
29322
|
+
... on PreconfirmationFailureStatus {
|
29323
|
+
...PreconfirmationFailureStatusFragment
|
29324
|
+
}
|
29065
29325
|
}
|
29066
29326
|
${SubmittedStatusFragmentDoc}
|
29067
29327
|
${SuccessStatusWithBlockIdFragmentDoc}
|
29068
29328
|
${MalleableTransactionFieldsFragmentDoc}
|
29069
29329
|
${FailureStatusWithBlockIdFragmentDoc}
|
29070
|
-
${SqueezedOutStatusFragmentDoc}
|
29330
|
+
${SqueezedOutStatusFragmentDoc}
|
29331
|
+
${PreconfirmationSuccessStatusFragmentDoc}
|
29332
|
+
${PreconfirmationFailureStatusFragmentDoc}`;
|
29071
29333
|
var TransactionStatusFragmentDoc = lib_default2`
|
29072
29334
|
fragment transactionStatusFragment on TransactionStatus {
|
29073
29335
|
... on SubmittedStatus {
|
@@ -29119,6 +29381,23 @@ ${SqueezedOutStatusFragmentDoc}`;
|
|
29119
29381
|
}
|
29120
29382
|
}
|
29121
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}`;
|
29122
29401
|
var DryRunFailureStatusFragmentDoc = lib_default2`
|
29123
29402
|
fragment dryRunFailureStatusFragment on DryRunFailureStatus {
|
29124
29403
|
type: __typename
|
@@ -29475,13 +29754,21 @@ ${NodeInfoFragmentDoc}`;
|
|
29475
29754
|
... on SqueezedOutStatus {
|
29476
29755
|
...SqueezedOutStatusFragment
|
29477
29756
|
}
|
29757
|
+
... on PreconfirmationSuccessStatus {
|
29758
|
+
...PreconfirmationSuccessStatusFragment
|
29759
|
+
}
|
29760
|
+
... on PreconfirmationFailureStatus {
|
29761
|
+
...PreconfirmationFailureStatusFragment
|
29762
|
+
}
|
29478
29763
|
}
|
29479
29764
|
}
|
29480
29765
|
}
|
29481
29766
|
${SubmittedStatusFragmentDoc}
|
29482
29767
|
${SuccessStatusWithBlockIdFragmentDoc}
|
29483
29768
|
${FailureStatusWithBlockIdFragmentDoc}
|
29484
|
-
${SqueezedOutStatusFragmentDoc}
|
29769
|
+
${SqueezedOutStatusFragmentDoc}
|
29770
|
+
${PreconfirmationSuccessStatusFragmentDoc}
|
29771
|
+
${PreconfirmationFailureStatusFragmentDoc}`;
|
29485
29772
|
var GetTransactionsDocument = lib_default2`
|
29486
29773
|
query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
|
29487
29774
|
transactions(after: $after, before: $before, first: $first, last: $last) {
|
@@ -29772,6 +30059,77 @@ ${GetMessageFragmentDoc}`;
|
|
29772
30059
|
}
|
29773
30060
|
}
|
29774
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}`;
|
29775
30133
|
var DryRunDocument = lib_default2`
|
29776
30134
|
mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean, $gasPrice: U64) {
|
29777
30135
|
dryRun(
|
@@ -29830,15 +30188,22 @@ ${GetMessageFragmentDoc}`;
|
|
29830
30188
|
}
|
29831
30189
|
`;
|
29832
30190
|
var SubmitAndAwaitStatusDocument = lib_default2`
|
29833
|
-
subscription submitAndAwaitStatus($encodedTransaction: HexString
|
29834
|
-
submitAndAwaitStatus(
|
30191
|
+
subscription submitAndAwaitStatus($encodedTransaction: HexString!, $estimatePredicates: Boolean, $includePreConfirmation: Boolean) {
|
30192
|
+
submitAndAwaitStatus(
|
30193
|
+
tx: $encodedTransaction
|
30194
|
+
estimatePredicates: $estimatePredicates
|
30195
|
+
includePreconfirmation: $includePreConfirmation
|
30196
|
+
) {
|
29835
30197
|
...transactionStatusSubscriptionFragment
|
29836
30198
|
}
|
29837
30199
|
}
|
29838
30200
|
${TransactionStatusSubscriptionFragmentDoc}`;
|
29839
30201
|
var StatusChangeDocument = lib_default2`
|
29840
|
-
subscription statusChange($transactionId: TransactionId
|
29841
|
-
statusChange(
|
30202
|
+
subscription statusChange($transactionId: TransactionId!, $includePreConfirmation: Boolean) {
|
30203
|
+
statusChange(
|
30204
|
+
id: $transactionId
|
30205
|
+
includePreconfirmation: $includePreConfirmation
|
30206
|
+
) {
|
29842
30207
|
...transactionStatusSubscriptionFragment
|
29843
30208
|
}
|
29844
30209
|
}
|
@@ -29941,6 +30306,9 @@ ${GetMessageFragmentDoc}`;
|
|
29941
30306
|
getAssetDetails(variables, options) {
|
29942
30307
|
return requester(GetAssetDetailsDocument, variables, options);
|
29943
30308
|
},
|
30309
|
+
assembleTx(variables, options) {
|
30310
|
+
return requester(AssembleTxDocument, variables, options);
|
30311
|
+
},
|
29944
30312
|
dryRun(variables, options) {
|
29945
30313
|
return requester(DryRunDocument, variables, options);
|
29946
30314
|
},
|
@@ -29969,9 +30337,67 @@ ${GetMessageFragmentDoc}`;
|
|
29969
30337
|
}
|
29970
30338
|
__name(getSdk, "getSdk");
|
29971
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
|
+
|
29972
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
|
+
};
|
29973
30399
|
var mapGqlErrorMessage = /* @__PURE__ */ __name((error2) => {
|
29974
|
-
if (
|
30400
|
+
if (gqlErrorMessage.NOT_ENOUGH_COINS_MAX_COINS.test(error2.message)) {
|
29975
30401
|
return new FuelError(
|
29976
30402
|
ErrorCode.INSUFFICIENT_FUNDS_OR_MAX_COINS,
|
29977
30403
|
`Insufficient funds or too many small value coins. Consider combining UTXOs.`,
|
@@ -29979,7 +30405,25 @@ ${GetMessageFragmentDoc}`;
|
|
29979
30405
|
error2
|
29980
30406
|
);
|
29981
30407
|
}
|
29982
|
-
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)) {
|
29983
30427
|
return new FuelError(
|
29984
30428
|
ErrorCode.ASSET_NOT_FOUND,
|
29985
30429
|
`Asset not found for given asset id.`,
|
@@ -29987,6 +30431,13 @@ ${GetMessageFragmentDoc}`;
|
|
29987
30431
|
error2
|
29988
30432
|
);
|
29989
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
|
+
}
|
29990
30441
|
return new FuelError(ErrorCode.INVALID_REQUEST, error2.message, {}, error2);
|
29991
30442
|
}, "mapGqlErrorMessage");
|
29992
30443
|
var mapGqlErrorWithIncompatibleNodeVersion = /* @__PURE__ */ __name((error2, incompatibleNodeVersionMessage) => {
|
@@ -30019,8 +30470,9 @@ ${incompatibleNodeVersionMessage}`,
|
|
30019
30470
|
|
30020
30471
|
// src/providers/fuel-graphql-subscriber.ts
|
30021
30472
|
var FuelGraphqlSubscriber = class _FuelGraphqlSubscriber {
|
30022
|
-
constructor(stream) {
|
30473
|
+
constructor(stream, onEvent) {
|
30023
30474
|
this.stream = stream;
|
30475
|
+
this.onEvent = onEvent;
|
30024
30476
|
}
|
30025
30477
|
static {
|
30026
30478
|
__name(this, "FuelGraphqlSubscriber");
|
@@ -30028,12 +30480,13 @@ ${incompatibleNodeVersionMessage}`,
|
|
30028
30480
|
static incompatibleNodeVersionMessage = false;
|
30029
30481
|
static textDecoder = new TextDecoder();
|
30030
30482
|
static async create(options) {
|
30031
|
-
const { url, query, variables, fetchFn } = options;
|
30483
|
+
const { url, query, variables, fetchFn, operationName, onEvent } = options;
|
30032
30484
|
const response = await fetchFn(`${url}-sub`, {
|
30033
30485
|
method: "POST",
|
30034
30486
|
body: JSON.stringify({
|
30035
30487
|
query: print(query),
|
30036
|
-
variables
|
30488
|
+
variables,
|
30489
|
+
operationName
|
30037
30490
|
}),
|
30038
30491
|
headers: {
|
30039
30492
|
"Content-Type": "application/json",
|
@@ -30042,39 +30495,71 @@ ${incompatibleNodeVersionMessage}`,
|
|
30042
30495
|
});
|
30043
30496
|
const [errorReader, resultReader] = response.body.tee().map((stream) => stream.getReader());
|
30044
30497
|
await new _FuelGraphqlSubscriber(errorReader).next();
|
30045
|
-
return new _FuelGraphqlSubscriber(resultReader);
|
30498
|
+
return new _FuelGraphqlSubscriber(resultReader, onEvent);
|
30046
30499
|
}
|
30047
|
-
|
30048
|
-
|
30049
|
-
|
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;
|
30050
30510
|
while (true) {
|
30051
|
-
if (this.events.length > 0) {
|
30052
|
-
const { data, errors: errors2 } = this.events.shift();
|
30053
|
-
assertGqlResponseHasNoErrors(errors2, _FuelGraphqlSubscriber.incompatibleNodeVersionMessage);
|
30054
|
-
return { value: data, done: false };
|
30055
|
-
}
|
30056
|
-
const { value, done } = await this.stream.read();
|
30057
|
-
if (done) {
|
30058
|
-
return { value, done };
|
30059
|
-
}
|
30060
|
-
const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
|
30061
|
-
if (decoded === "") {
|
30062
|
-
continue;
|
30063
|
-
}
|
30064
|
-
const text = `${this.parsingLeftover}${decoded}`;
|
30065
|
-
const regex = /data:.*\n\n/g;
|
30066
30511
|
const matches = [...text.matchAll(regex)].flatMap((match) => match);
|
30067
|
-
matches.
|
30512
|
+
if (matches.length > 0) {
|
30068
30513
|
try {
|
30069
|
-
|
30514
|
+
const event = JSON.parse(matches[0].replace(/^data:/, ""));
|
30515
|
+
return {
|
30516
|
+
event,
|
30517
|
+
done: false,
|
30518
|
+
parsingLeftover: text.replace(matches[0], "")
|
30519
|
+
};
|
30070
30520
|
} catch (e) {
|
30071
30521
|
throw new FuelError(
|
30072
30522
|
ErrorCode.STREAM_PARSING_ERROR,
|
30073
30523
|
`Error while parsing stream data response: ${text}`
|
30074
30524
|
);
|
30075
30525
|
}
|
30076
|
-
}
|
30077
|
-
|
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);
|
30078
30563
|
}
|
30079
30564
|
}
|
30080
30565
|
/**
|
@@ -30120,7 +30605,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
30120
30605
|
case InputType.Contract: {
|
30121
30606
|
return {
|
30122
30607
|
type: InputType.Contract,
|
30123
|
-
txID: ZeroBytes32,
|
30608
|
+
txID: hexlify(value.txID || ZeroBytes32),
|
30124
30609
|
outputIndex: 0,
|
30125
30610
|
balanceRoot: ZeroBytes32,
|
30126
30611
|
stateRoot: ZeroBytes32,
|
@@ -30191,9 +30676,9 @@ ${incompatibleNodeVersionMessage}`,
|
|
30191
30676
|
case OutputType.Variable: {
|
30192
30677
|
return {
|
30193
30678
|
type: OutputType.Variable,
|
30194
|
-
to: ZeroBytes32,
|
30195
|
-
amount: bn(
|
30196
|
-
assetId: ZeroBytes32
|
30679
|
+
to: hexlify(value.to || ZeroBytes32),
|
30680
|
+
amount: bn(value.amount),
|
30681
|
+
assetId: hexlify(value.assetId || ZeroBytes32)
|
30197
30682
|
};
|
30198
30683
|
}
|
30199
30684
|
case OutputType.ContractCreated: {
|
@@ -30237,6 +30722,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
30237
30722
|
"BlobIdAlreadyUploaded",
|
30238
30723
|
"BlobNotFound",
|
30239
30724
|
"BytecodeAlreadyUploaded",
|
30725
|
+
"CanNotGetGasPriceInPredicate",
|
30240
30726
|
"ContractIdAlreadyDeployed",
|
30241
30727
|
"ContractInstructionNotAllowed",
|
30242
30728
|
"ContractMaxSize",
|
@@ -30260,6 +30746,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
30260
30746
|
"InvalidImmediateValue",
|
30261
30747
|
"InvalidInstruction",
|
30262
30748
|
"InvalidMetadataIdentifier",
|
30749
|
+
"InvalidUpgradePurposeType",
|
30263
30750
|
"MalformedCallStructure",
|
30264
30751
|
"MaxStaticContractsReached",
|
30265
30752
|
"MemoryGrowthOverlap",
|
@@ -30276,8 +30763,10 @@ ${incompatibleNodeVersionMessage}`,
|
|
30276
30763
|
"PolicyIsNotSet",
|
30277
30764
|
"PolicyNotFound",
|
30278
30765
|
"PredicateReturnedNonOne",
|
30766
|
+
"ProofInUploadNotFound",
|
30279
30767
|
"ReservedRegisterNotWritable",
|
30280
30768
|
"Revert",
|
30769
|
+
"StorageSlotsNotFound",
|
30281
30770
|
"ThePartIsNotSequentiallyConnected",
|
30282
30771
|
"TooManyReceipts",
|
30283
30772
|
"TooManySlots",
|
@@ -30631,13 +31120,148 @@ ${incompatibleNodeVersionMessage}`,
|
|
30631
31120
|
throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);
|
30632
31121
|
}
|
30633
31122
|
}, "deserializeReceipt");
|
30634
|
-
|
30635
|
-
|
30636
|
-
|
30637
|
-
|
30638
|
-
|
30639
|
-
|
30640
|
-
|
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)) {
|
30641
31265
|
memo.missingOutputVariables.push(receipt);
|
30642
31266
|
}
|
30643
31267
|
if (doesReceiptHaveMissingContractId(receipt)) {
|
@@ -30894,11 +31518,12 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
30894
31518
|
});
|
30895
31519
|
}, "assembleRevertError");
|
30896
31520
|
var extractTxError = /* @__PURE__ */ __name((params) => {
|
30897
|
-
const { receipts, statusReason, logs } = params;
|
31521
|
+
const { receipts, statusReason, logs, groupedLogs } = params;
|
30898
31522
|
const isPanic = receipts.some(({ type: type3 }) => type3 === ReceiptType.Panic);
|
30899
31523
|
const isRevert = receipts.some(({ type: type3 }) => type3 === ReceiptType.Revert);
|
30900
31524
|
const metadata = {
|
30901
31525
|
logs,
|
31526
|
+
groupedLogs,
|
30902
31527
|
receipts,
|
30903
31528
|
panic: isPanic,
|
30904
31529
|
revert: isRevert,
|
@@ -30910,6 +31535,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
30910
31535
|
return assembleRevertError(receipts, logs, metadata);
|
30911
31536
|
}, "extractTxError");
|
30912
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
|
+
|
30913
31553
|
// src/providers/transaction-request/errors.ts
|
30914
31554
|
var NoWitnessAtIndexError = class extends Error {
|
30915
31555
|
constructor(index) {
|
@@ -31829,6 +32469,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31829
32469
|
* @param account - The account to fund the transaction.
|
31830
32470
|
* @param params - The parameters for the transaction cost.
|
31831
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.
|
31832
32475
|
*/
|
31833
32476
|
async estimateAndFund(account, { signatureCallback, quantities = [] } = {}) {
|
31834
32477
|
const txCost = await account.getTransactionCost(this, { signatureCallback, quantities });
|
@@ -31912,6 +32555,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31912
32555
|
}
|
31913
32556
|
return this.outputs.length - 1;
|
31914
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
|
+
}
|
31915
32573
|
/**
|
31916
32574
|
* Calculates the maximum gas for the transaction.
|
31917
32575
|
*
|
@@ -32988,6 +33646,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32988
33646
|
return "submitted" /* submitted */;
|
32989
33647
|
case "SqueezedOutStatus":
|
32990
33648
|
return "squeezedout" /* squeezedout */;
|
33649
|
+
case "PreconfirmationSuccessStatus":
|
33650
|
+
return "preconfirmationSuccess" /* preconfirmationSuccess */;
|
33651
|
+
case "PreconfirmationFailureStatus":
|
33652
|
+
return "preconfirmationFailure" /* preconfirmationFailure */;
|
32991
33653
|
default:
|
32992
33654
|
throw new FuelError(
|
32993
33655
|
ErrorCode.INVALID_TRANSACTION_STATUS,
|
@@ -32995,15 +33657,30 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32995
33657
|
);
|
32996
33658
|
}
|
32997
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");
|
32998
33670
|
var processGraphqlStatus = /* @__PURE__ */ __name((gqlTransactionStatus) => {
|
32999
33671
|
let time;
|
33000
33672
|
let blockId;
|
33001
33673
|
let status;
|
33002
33674
|
let totalFee;
|
33003
33675
|
let totalGas;
|
33676
|
+
let receipts;
|
33677
|
+
let resolvedOutputs = [];
|
33678
|
+
let errorReason;
|
33004
33679
|
let isStatusFailure = false;
|
33005
33680
|
let isStatusSuccess = false;
|
33006
33681
|
let isStatusPending = false;
|
33682
|
+
let isStatusPreConfirmationSuccess = false;
|
33683
|
+
let isStatusPreConfirmationFailure = false;
|
33007
33684
|
if (gqlTransactionStatus?.type) {
|
33008
33685
|
status = getTransactionStatusName(gqlTransactionStatus.type);
|
33009
33686
|
switch (gqlTransactionStatus.type) {
|
@@ -33011,6 +33688,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33011
33688
|
time = gqlTransactionStatus.time;
|
33012
33689
|
blockId = gqlTransactionStatus.block?.id;
|
33013
33690
|
isStatusSuccess = true;
|
33691
|
+
receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
|
33014
33692
|
totalFee = bn(gqlTransactionStatus.totalFee);
|
33015
33693
|
totalGas = bn(gqlTransactionStatus.totalGas);
|
33016
33694
|
break;
|
@@ -33019,12 +33697,28 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33019
33697
|
blockId = gqlTransactionStatus.block?.id;
|
33020
33698
|
isStatusFailure = true;
|
33021
33699
|
totalFee = bn(gqlTransactionStatus.totalFee);
|
33700
|
+
receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
|
33022
33701
|
totalGas = bn(gqlTransactionStatus.totalGas);
|
33023
33702
|
break;
|
33024
33703
|
case "SubmittedStatus":
|
33025
33704
|
time = gqlTransactionStatus.time;
|
33026
33705
|
isStatusPending = true;
|
33027
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;
|
33028
33722
|
default:
|
33029
33723
|
}
|
33030
33724
|
}
|
@@ -33034,9 +33728,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33034
33728
|
status,
|
33035
33729
|
totalFee,
|
33036
33730
|
totalGas,
|
33731
|
+
receipts,
|
33037
33732
|
isStatusFailure,
|
33038
33733
|
isStatusSuccess,
|
33039
|
-
isStatusPending
|
33734
|
+
isStatusPending,
|
33735
|
+
isStatusPreConfirmationSuccess,
|
33736
|
+
isStatusPreConfirmationFailure,
|
33737
|
+
resolvedOutputs,
|
33738
|
+
errorReason
|
33040
33739
|
};
|
33041
33740
|
return processedGraphqlStatus;
|
33042
33741
|
}, "processGraphqlStatus");
|
@@ -33121,9 +33820,85 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33121
33820
|
return transactionSummary;
|
33122
33821
|
}
|
33123
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");
|
33124
33898
|
|
33125
|
-
// src/providers/transaction-response/
|
33126
|
-
function
|
33899
|
+
// src/providers/transaction-response/getAllDecodedLogs.ts
|
33900
|
+
function getAllDecodedLogs(opts) {
|
33901
|
+
const { receipts, mainAbi, externalAbis = {} } = opts;
|
33127
33902
|
let mainContract = "";
|
33128
33903
|
if (mainAbi.programType === "contract") {
|
33129
33904
|
const firstCallReceipt = receipts.find(
|
@@ -33131,54 +33906,27 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33131
33906
|
);
|
33132
33907
|
mainContract = firstCallReceipt.to;
|
33133
33908
|
}
|
33134
|
-
return receipts.reduce(
|
33135
|
-
|
33136
|
-
|
33137
|
-
|
33138
|
-
|
33139
|
-
|
33140
|
-
|
33141
|
-
|
33142
|
-
|
33909
|
+
return receipts.reduce(
|
33910
|
+
({ logs, groupedLogs }, receipt) => {
|
33911
|
+
if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {
|
33912
|
+
const isLogFromMainAbi = receipt.id === ZeroBytes32 || mainContract === receipt.id;
|
33913
|
+
const isDecodable = isLogFromMainAbi || externalAbis[receipt.id];
|
33914
|
+
if (isDecodable) {
|
33915
|
+
const interfaceToUse = isLogFromMainAbi ? new Interface(mainAbi) : new Interface(externalAbis[receipt.id]);
|
33916
|
+
const data = receipt.type === ReceiptType.Log ? new BigNumberCoder("u64").encode(receipt.ra) : receipt.data;
|
33917
|
+
const [decodedLog] = interfaceToUse.decodeLog(data, receipt.rb.toString());
|
33918
|
+
logs.push(decodedLog);
|
33919
|
+
groupedLogs[receipt.id] = [...groupedLogs[receipt.id] || [], decodedLog];
|
33920
|
+
}
|
33143
33921
|
}
|
33144
|
-
|
33145
|
-
|
33146
|
-
|
33922
|
+
return { logs, groupedLogs };
|
33923
|
+
},
|
33924
|
+
{ logs: [], groupedLogs: {} }
|
33925
|
+
);
|
33147
33926
|
}
|
33148
|
-
__name(
|
33927
|
+
__name(getAllDecodedLogs, "getAllDecodedLogs");
|
33149
33928
|
|
33150
33929
|
// src/providers/transaction-response/transaction-response.ts
|
33151
|
-
function mapGqlOutputsToTxOutputs(outputs) {
|
33152
|
-
return outputs.map((o) => {
|
33153
|
-
const obj = "amount" in o ? { ...o, amount: bn(o.amount) } : o;
|
33154
|
-
switch (obj.type) {
|
33155
|
-
case "CoinOutput":
|
33156
|
-
return { ...obj, type: OutputType.Coin };
|
33157
|
-
case "ContractOutput":
|
33158
|
-
return {
|
33159
|
-
...obj,
|
33160
|
-
type: OutputType.Contract,
|
33161
|
-
inputIndex: parseInt(obj.inputIndex, 10)
|
33162
|
-
};
|
33163
|
-
case "ChangeOutput":
|
33164
|
-
return {
|
33165
|
-
...obj,
|
33166
|
-
type: OutputType.Change
|
33167
|
-
};
|
33168
|
-
case "VariableOutput":
|
33169
|
-
return { ...obj, type: OutputType.Variable };
|
33170
|
-
case "ContractCreated":
|
33171
|
-
return {
|
33172
|
-
...obj,
|
33173
|
-
type: OutputType.ContractCreated,
|
33174
|
-
contractId: obj.contract
|
33175
|
-
};
|
33176
|
-
default:
|
33177
|
-
return assertUnreachable(obj);
|
33178
|
-
}
|
33179
|
-
});
|
33180
|
-
}
|
33181
|
-
__name(mapGqlOutputsToTxOutputs, "mapGqlOutputsToTxOutputs");
|
33182
33930
|
var TransactionResponse = class _TransactionResponse {
|
33183
33931
|
/**
|
33184
33932
|
* Constructor for `TransactionResponse`.
|
@@ -33188,11 +33936,16 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33188
33936
|
*/
|
33189
33937
|
constructor(tx, provider, chainId, abis, submitTxSubscription) {
|
33190
33938
|
this.submitTxSubscription = submitTxSubscription;
|
33191
|
-
|
33939
|
+
if (typeof tx === "string") {
|
33940
|
+
this.id = tx;
|
33941
|
+
} else {
|
33942
|
+
this.id = tx.getTransactionId(chainId);
|
33943
|
+
this.request = tx;
|
33944
|
+
}
|
33192
33945
|
this.provider = provider;
|
33193
33946
|
this.abis = abis;
|
33194
|
-
this.request = typeof tx === "string" ? void 0 : tx;
|
33195
33947
|
this.waitForResult = this.waitForResult.bind(this);
|
33948
|
+
this.waitForPreConfirmation = this.waitForPreConfirmation.bind(this);
|
33196
33949
|
}
|
33197
33950
|
static {
|
33198
33951
|
__name(this, "TransactionResponse");
|
@@ -33208,6 +33961,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33208
33961
|
request;
|
33209
33962
|
status;
|
33210
33963
|
abis;
|
33964
|
+
waitingForStreamData = false;
|
33965
|
+
statusResolvers = /* @__PURE__ */ new Map();
|
33966
|
+
preConfirmationStatus;
|
33211
33967
|
/**
|
33212
33968
|
* Async constructor for `TransactionResponse`. This method can be used to create
|
33213
33969
|
* an instance of `TransactionResponse` and wait for the transaction to be fetched
|
@@ -33239,29 +33995,38 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33239
33995
|
}
|
33240
33996
|
return input;
|
33241
33997
|
});
|
33242
|
-
tx.outputs =
|
33243
|
-
if (
|
33998
|
+
tx.outputs = status.transaction.outputs.map(deserializeProcessedTxOutput);
|
33999
|
+
if (status.transaction.receiptsRoot) {
|
33244
34000
|
tx.receiptsRoot = status.transaction.receiptsRoot;
|
33245
34001
|
}
|
33246
34002
|
}
|
33247
34003
|
}
|
33248
34004
|
async getTransaction() {
|
33249
34005
|
if (this.request) {
|
33250
|
-
const
|
33251
|
-
this.applyMalleableSubscriptionFields(
|
34006
|
+
const tx2 = this.request.toTransaction();
|
34007
|
+
this.applyMalleableSubscriptionFields(tx2);
|
33252
34008
|
return {
|
33253
|
-
tx,
|
34009
|
+
tx: tx2,
|
33254
34010
|
bytes: this.request.toTransactionBytes()
|
33255
34011
|
};
|
33256
34012
|
}
|
33257
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);
|
33258
34017
|
return {
|
33259
|
-
tx
|
33260
|
-
bytes
|
34018
|
+
tx,
|
34019
|
+
bytes
|
33261
34020
|
};
|
33262
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
|
+
*/
|
33263
34028
|
getReceipts() {
|
33264
|
-
const status = this.
|
34029
|
+
const status = this.getTransactionStatus();
|
33265
34030
|
switch (status?.type) {
|
33266
34031
|
case "SuccessStatus":
|
33267
34032
|
case "FailureStatus":
|
@@ -33294,18 +34059,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33294
34059
|
this.gqlTransaction = response.transaction;
|
33295
34060
|
return response.transaction;
|
33296
34061
|
}
|
33297
|
-
/**
|
33298
|
-
* Decode the raw payload of the transaction.
|
33299
|
-
*
|
33300
|
-
* @param transactionWithReceipts - The transaction with receipts object.
|
33301
|
-
* @returns The decoded transaction.
|
33302
|
-
*/
|
33303
|
-
decodeTransaction(transactionWithReceipts) {
|
33304
|
-
return new TransactionCoder().decode(
|
33305
|
-
arrayify(transactionWithReceipts.rawPayload),
|
33306
|
-
0
|
33307
|
-
)?.[0];
|
33308
|
-
}
|
33309
34062
|
/**
|
33310
34063
|
* Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will
|
33311
34064
|
* fetch it from the provider
|
@@ -33316,7 +34069,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33316
34069
|
async getTransactionSummary(contractsAbiMap) {
|
33317
34070
|
const { tx: transaction, bytes: transactionBytes } = await this.getTransaction();
|
33318
34071
|
const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = await this.provider.getGasConfig();
|
33319
|
-
const
|
34072
|
+
const transactionStatus = this.getTransactionStatus();
|
34073
|
+
const totalFee = getTotalFeeFromStatus(transactionStatus);
|
33320
34074
|
const gasPrice = totalFee ? bn(0) : await this.provider.getLatestGasPrice();
|
33321
34075
|
const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
|
33322
34076
|
const baseAssetId = await this.provider.getBaseAssetId();
|
@@ -33325,7 +34079,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33325
34079
|
receipts: this.getReceipts(),
|
33326
34080
|
transaction,
|
33327
34081
|
transactionBytes,
|
33328
|
-
gqlTransactionStatus:
|
34082
|
+
gqlTransactionStatus: transactionStatus,
|
33329
34083
|
gasPerByte,
|
33330
34084
|
gasPriceFactor,
|
33331
34085
|
abiMap: contractsAbiMap,
|
@@ -33337,29 +34091,92 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33337
34091
|
});
|
33338
34092
|
return transactionSummary;
|
33339
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
|
+
*/
|
33340
34128
|
async waitForStatusChange() {
|
33341
|
-
const
|
33342
|
-
if (
|
34129
|
+
const type3 = this.status?.type;
|
34130
|
+
if (type3 && (type3 === "FailureStatus" || type3 === "SuccessStatus")) {
|
34131
|
+
this.resolveStatus("preConfirmation");
|
34132
|
+
this.resolveStatus("confirmation");
|
33343
34133
|
return;
|
33344
34134
|
}
|
34135
|
+
if (this.waitingForStreamData) {
|
34136
|
+
return;
|
34137
|
+
}
|
34138
|
+
this.waitingForStreamData = true;
|
33345
34139
|
const subscription = this.submitTxSubscription ?? await this.provider.operations.statusChange({
|
33346
|
-
transactionId: this.id
|
34140
|
+
transactionId: this.id,
|
34141
|
+
includePreConfirmation: true
|
33347
34142
|
});
|
33348
34143
|
for await (const sub of subscription) {
|
33349
34144
|
const statusChange = "statusChange" in sub ? sub.statusChange : sub.submitAndAwaitStatus;
|
33350
34145
|
this.status = statusChange;
|
33351
34146
|
if (statusChange.type === "SqueezedOutStatus") {
|
33352
|
-
this.unsetResourceCache();
|
33353
34147
|
throw new FuelError(
|
33354
34148
|
ErrorCode.TRANSACTION_SQUEEZED_OUT,
|
33355
34149
|
`Transaction Squeezed Out with reason: ${statusChange.reason}`
|
33356
34150
|
);
|
33357
34151
|
}
|
33358
|
-
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;
|
33359
34160
|
break;
|
33360
34161
|
}
|
33361
34162
|
}
|
33362
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
|
+
}
|
33363
34180
|
/**
|
33364
34181
|
* Assembles the result of a transaction by retrieving the transaction summary,
|
33365
34182
|
* decoding logs (if available), and handling transaction failure.
|
@@ -33377,37 +34194,69 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33377
34194
|
const transactionResult = {
|
33378
34195
|
...transactionSummary
|
33379
34196
|
};
|
33380
|
-
let logs = [];
|
34197
|
+
let { logs, groupedLogs } = { logs: [], groupedLogs: {} };
|
33381
34198
|
if (this.abis) {
|
33382
|
-
logs =
|
33383
|
-
transactionSummary.receipts,
|
33384
|
-
this.abis.main,
|
33385
|
-
this.abis.otherContractsAbis
|
33386
|
-
);
|
34199
|
+
({ logs, groupedLogs } = getAllDecodedLogs({
|
34200
|
+
receipts: transactionSummary.receipts,
|
34201
|
+
mainAbi: this.abis.main,
|
34202
|
+
externalAbis: this.abis.otherContractsAbis
|
34203
|
+
}));
|
33387
34204
|
transactionResult.logs = logs;
|
34205
|
+
transactionResult.groupedLogs = groupedLogs;
|
33388
34206
|
}
|
33389
34207
|
const { receipts } = transactionResult;
|
33390
|
-
const status = this.
|
34208
|
+
const status = this.getTransactionStatus();
|
33391
34209
|
if (status?.type === "FailureStatus") {
|
33392
34210
|
const { reason } = status;
|
33393
34211
|
throw extractTxError({
|
33394
34212
|
receipts,
|
33395
34213
|
statusReason: reason,
|
33396
|
-
logs
|
34214
|
+
logs,
|
34215
|
+
groupedLogs
|
33397
34216
|
});
|
33398
34217
|
}
|
33399
34218
|
return transactionResult;
|
33400
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
|
+
}
|
33401
34239
|
/**
|
33402
34240
|
* Waits for transaction to complete and returns the result.
|
33403
34241
|
*
|
33404
34242
|
* @returns The completed transaction result
|
33405
34243
|
*/
|
33406
34244
|
async waitForResult(contractsAbiMap) {
|
33407
|
-
await this.
|
34245
|
+
await this.waitForConfirmationStatuses();
|
33408
34246
|
this.unsetResourceCache();
|
33409
34247
|
return this.assembleResult(contractsAbiMap);
|
33410
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
|
+
}
|
33411
34260
|
/**
|
33412
34261
|
* Waits for transaction to complete and returns the result.
|
33413
34262
|
*
|
@@ -33419,6 +34268,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33419
34268
|
unsetResourceCache() {
|
33420
34269
|
this.provider.cache?.unset(this.id);
|
33421
34270
|
}
|
34271
|
+
getTransactionStatus() {
|
34272
|
+
return this.status ?? this.gqlTransaction?.status;
|
34273
|
+
}
|
33422
34274
|
};
|
33423
34275
|
|
33424
34276
|
// src/providers/utils/auto-retry-fetch.ts
|
@@ -33459,21 +34311,22 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33459
34311
|
}
|
33460
34312
|
__name(autoRetryFetch, "autoRetryFetch");
|
33461
34313
|
|
33462
|
-
// src/providers/utils/
|
33463
|
-
var
|
33464
|
-
const {
|
33465
|
-
|
33466
|
-
|
33467
|
-
if (
|
33468
|
-
|
33469
|
-
|
33470
|
-
|
33471
|
-
|
33472
|
-
|
33473
|
-
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;
|
33474
34325
|
}
|
33475
|
-
return
|
33476
|
-
|
34326
|
+
return {
|
34327
|
+
extensions
|
34328
|
+
};
|
34329
|
+
}, "parseGraphqlResponse");
|
33477
34330
|
|
33478
34331
|
// src/providers/utils/validate-pagination-args.ts
|
33479
34332
|
var validatePaginationArgs = /* @__PURE__ */ __name((params) => {
|
@@ -33518,22 +34371,48 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33518
34371
|
var BLOCKS_PAGE_SIZE_LIMIT = 5;
|
33519
34372
|
var DEFAULT_RESOURCE_CACHE_TTL = 2e4;
|
33520
34373
|
var GAS_USED_MODIFIER = 1.2;
|
34374
|
+
var WRITE_OPERATIONS = [
|
34375
|
+
"submit",
|
34376
|
+
"submitAndAwaitStatus",
|
34377
|
+
"produceBlocks"
|
34378
|
+
];
|
33521
34379
|
var Provider = class _Provider {
|
33522
34380
|
static {
|
33523
34381
|
__name(this, "Provider");
|
33524
34382
|
}
|
33525
34383
|
operations;
|
33526
34384
|
cache;
|
33527
|
-
/**
|
33528
|
-
|
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
|
+
}
|
33529
34397
|
_Provider.inflightFetchChainAndNodeInfoRequests = {};
|
33530
34398
|
_Provider.nodeInfoCache = {};
|
33531
34399
|
_Provider.chainInfoCache = {};
|
34400
|
+
_Provider.currentBlockHeightCache = {};
|
33532
34401
|
}
|
33533
34402
|
/** @hidden */
|
33534
34403
|
url;
|
33535
34404
|
/** @hidden */
|
33536
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;
|
33537
34416
|
/** @hidden */
|
33538
34417
|
static inflightFetchChainAndNodeInfoRequests = {};
|
33539
34418
|
/** @hidden */
|
@@ -33541,6 +34420,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33541
34420
|
/** @hidden */
|
33542
34421
|
static nodeInfoCache = {};
|
33543
34422
|
/** @hidden */
|
34423
|
+
static currentBlockHeightCache = {};
|
34424
|
+
/** @hidden */
|
33544
34425
|
static incompatibleNodeVersionMessage = "";
|
33545
34426
|
/** @hidden */
|
33546
34427
|
consensusParametersTimestamp;
|
@@ -33552,6 +34433,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33552
34433
|
headers: void 0,
|
33553
34434
|
cache: void 0
|
33554
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
|
+
}
|
33555
34448
|
/**
|
33556
34449
|
* @hidden
|
33557
34450
|
*/
|
@@ -33569,9 +34462,57 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33569
34462
|
if (options.requestMiddleware) {
|
33570
34463
|
fullRequest = await options.requestMiddleware(fullRequest);
|
33571
34464
|
}
|
33572
|
-
|
34465
|
+
if (_Provider.ENABLE_RPC_CONSISTENCY && _Provider.hasWriteOperationHappened(url)) {
|
34466
|
+
_Provider.applyBlockHeight(fullRequest, url);
|
34467
|
+
}
|
34468
|
+
return _Provider.fetchAndProcessBlockHeight(url, fullRequest, options);
|
33573
34469
|
}, retryOptions);
|
33574
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
|
+
}
|
33575
34516
|
/**
|
33576
34517
|
* Constructor to initialize a Provider.
|
33577
34518
|
*
|
@@ -33657,6 +34598,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33657
34598
|
* Returns some helpful parameters related to gas fees.
|
33658
34599
|
*/
|
33659
34600
|
async getGasConfig() {
|
34601
|
+
await this.init();
|
33660
34602
|
const {
|
33661
34603
|
txParameters: { maxGasPerTx },
|
33662
34604
|
predicateParameters: { maxGasPerPredicate },
|
@@ -33692,39 +34634,52 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33692
34634
|
* @returns A promise that resolves to the Chain and NodeInfo.
|
33693
34635
|
*/
|
33694
34636
|
async fetchChainAndNodeInfo(ignoreCache = false) {
|
33695
|
-
|
33696
|
-
|
33697
|
-
|
33698
|
-
|
33699
|
-
chain
|
33700
|
-
|
33701
|
-
|
33702
|
-
|
33703
|
-
|
33704
|
-
|
33705
|
-
|
33706
|
-
|
33707
|
-
|
33708
|
-
|
33709
|
-
|
33710
|
-
}
|
33711
|
-
const { promise, resolve } = deferPromise();
|
33712
|
-
_Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth] = promise;
|
33713
|
-
const data = await this.operations.getChainAndNodeInfo();
|
33714
|
-
nodeInfo = deserializeNodeInfo(data.nodeInfo);
|
33715
|
-
chain = deserializeChain(data.chain);
|
33716
|
-
_Provider.setIncompatibleNodeVersionMessage(nodeInfo);
|
33717
|
-
_Provider.chainInfoCache[this.urlWithoutAuth] = chain;
|
33718
|
-
_Provider.nodeInfoCache[this.urlWithoutAuth] = nodeInfo;
|
33719
|
-
const now = Date.now();
|
33720
|
-
this.consensusParametersTimestamp = now;
|
33721
|
-
resolve(now);
|
33722
|
-
delete _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth];
|
34637
|
+
const nodeInfo = _Provider.nodeInfoCache[this.urlWithoutAuth];
|
34638
|
+
const chain = _Provider.chainInfoCache[this.urlWithoutAuth];
|
34639
|
+
const hasCache = nodeInfo && chain;
|
34640
|
+
if (hasCache && !ignoreCache) {
|
34641
|
+
return { nodeInfo, chain };
|
34642
|
+
}
|
34643
|
+
const inflightRequest = _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth];
|
34644
|
+
if (inflightRequest) {
|
34645
|
+
return inflightRequest.then((data) => {
|
34646
|
+
this.consensusParametersTimestamp = data.consensusParametersTimestamp;
|
34647
|
+
return {
|
34648
|
+
nodeInfo: _Provider.nodeInfoCache[this.urlWithoutAuth],
|
34649
|
+
chain: _Provider.chainInfoCache[this.urlWithoutAuth]
|
34650
|
+
};
|
34651
|
+
});
|
33723
34652
|
}
|
33724
|
-
|
33725
|
-
chain,
|
33726
|
-
nodeInfo
|
33727
|
-
|
34653
|
+
const getChainAndNodeInfoFromNetwork = this.operations.getChainAndNodeInfo().then((data) => ({
|
34654
|
+
chain: deserializeChain(data.chain),
|
34655
|
+
nodeInfo: deserializeNodeInfo(data.nodeInfo),
|
34656
|
+
consensusParametersTimestamp: Date.now()
|
34657
|
+
})).then((data) => {
|
34658
|
+
_Provider.setIncompatibleNodeVersionMessage(data.nodeInfo);
|
34659
|
+
_Provider.chainInfoCache[this.urlWithoutAuth] = data.chain;
|
34660
|
+
_Provider.nodeInfoCache[this.urlWithoutAuth] = data.nodeInfo;
|
34661
|
+
this.consensusParametersTimestamp = data.consensusParametersTimestamp;
|
34662
|
+
return data;
|
34663
|
+
}).catch((err) => {
|
34664
|
+
const error2 = new FuelError(
|
34665
|
+
FuelError.CODES.CONNECTION_REFUSED,
|
34666
|
+
"Unable to fetch chain and node info from the network",
|
34667
|
+
{ url: this.urlWithoutAuth },
|
34668
|
+
err
|
34669
|
+
);
|
34670
|
+
error2.cause = { code: "ECONNREFUSED" };
|
34671
|
+
throw error2;
|
34672
|
+
}).finally(() => {
|
34673
|
+
delete _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth];
|
34674
|
+
});
|
34675
|
+
_Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth] = getChainAndNodeInfoFromNetwork;
|
34676
|
+
return _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth].then((data) => {
|
34677
|
+
this.consensusParametersTimestamp = data.consensusParametersTimestamp;
|
34678
|
+
return {
|
34679
|
+
nodeInfo: _Provider.nodeInfoCache[this.urlWithoutAuth],
|
34680
|
+
chain: _Provider.chainInfoCache[this.urlWithoutAuth]
|
34681
|
+
};
|
34682
|
+
});
|
33728
34683
|
}
|
33729
34684
|
/**
|
33730
34685
|
* @hidden
|
@@ -33768,7 +34723,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33768
34723
|
url: this.urlWithoutAuth,
|
33769
34724
|
query,
|
33770
34725
|
fetchFn: /* @__PURE__ */ __name((url, requestInit) => fetchFn(url, requestInit, this.options), "fetchFn"),
|
33771
|
-
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")
|
33772
34734
|
});
|
33773
34735
|
}
|
33774
34736
|
return gqlClient.request(query, vars);
|
@@ -33926,7 +34888,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33926
34888
|
* @param sendTransactionParams - The provider send transaction parameters (optional).
|
33927
34889
|
* @returns A promise that resolves to the transaction response object.
|
33928
34890
|
*/
|
33929
|
-
async sendTransaction(transactionRequestLike, {
|
34891
|
+
async sendTransaction(transactionRequestLike, {
|
34892
|
+
enableAssetBurn,
|
34893
|
+
estimateTxDependencies = true,
|
34894
|
+
includePreConfirmation: _includePreConfirmation = true
|
34895
|
+
} = {}) {
|
33930
34896
|
const transactionRequest = transactionRequestify(transactionRequestLike);
|
33931
34897
|
validateTransactionForAssetBurn(
|
33932
34898
|
await this.getBaseAssetId(),
|
@@ -33942,7 +34908,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33942
34908
|
if (isTransactionTypeScript(transactionRequest)) {
|
33943
34909
|
abis = transactionRequest.abis;
|
33944
34910
|
}
|
33945
|
-
const subscription = await this.operations.submitAndAwaitStatus({
|
34911
|
+
const subscription = await this.operations.submitAndAwaitStatus({
|
34912
|
+
encodedTransaction,
|
34913
|
+
includePreConfirmation: true
|
34914
|
+
});
|
33946
34915
|
this.#cacheInputs(
|
33947
34916
|
transactionRequest.inputs,
|
33948
34917
|
transactionRequest.getTransactionId(await this.getChainId())
|
@@ -34294,6 +35263,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34294
35263
|
* @param transactionCostParams - The transaction cost parameters (optional).
|
34295
35264
|
*
|
34296
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.
|
34297
35269
|
*/
|
34298
35270
|
async getTransactionCost(transactionRequestLike, { signatureCallback, gasPrice: gasPriceParam } = {}) {
|
34299
35271
|
const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
|
@@ -34336,7 +35308,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34336
35308
|
}
|
34337
35309
|
({ rawReceipts, receipts, missingContractIds, outputVariables, dryRunStatus } = await this.estimateTxDependencies(txRequestClone, { gasPrice }));
|
34338
35310
|
if (dryRunStatus && "reason" in dryRunStatus) {
|
34339
|
-
throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus);
|
35311
|
+
throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus.reason);
|
34340
35312
|
}
|
34341
35313
|
const { maxGasPerTx } = await this.getGasConfig();
|
34342
35314
|
const pristineGasUsed = getGasUsedFromReceipts(receipts);
|
@@ -34369,6 +35341,102 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34369
35341
|
transactionSummary
|
34370
35342
|
};
|
34371
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
|
+
}
|
34372
35440
|
/**
|
34373
35441
|
* Returns coins for the given owner.
|
34374
35442
|
*
|
@@ -34407,30 +35475,15 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34407
35475
|
*
|
34408
35476
|
* @param owner - The address to get resources for.
|
34409
35477
|
* @param quantities - The coin quantities to get.
|
34410
|
-
* @param
|
35478
|
+
* @param resourcesIdsToIgnore - IDs of excluded resources from the selection (optional).
|
34411
35479
|
* @returns A promise that resolves to the resources.
|
34412
35480
|
*/
|
34413
|
-
async getResourcesToSpend(owner, quantities,
|
35481
|
+
async getResourcesToSpend(owner, quantities, resourcesIdsToIgnore) {
|
34414
35482
|
const ownerAddress = new Address(owner);
|
34415
|
-
|
34416
|
-
|
34417
|
-
|
34418
|
-
|
34419
|
-
if (this.cache) {
|
34420
|
-
const cached = this.cache.getActiveData(ownerAddress.toB256());
|
34421
|
-
if (cached.utxos.length || cached.messages.length) {
|
34422
|
-
const {
|
34423
|
-
consensusParameters: {
|
34424
|
-
txParameters: { maxInputs }
|
34425
|
-
}
|
34426
|
-
} = await this.getChain();
|
34427
|
-
idsToExclude = adjustResourcesToExclude({
|
34428
|
-
userInput: idsToExclude,
|
34429
|
-
cached,
|
34430
|
-
maxInputs: maxInputs.toNumber()
|
34431
|
-
});
|
34432
|
-
}
|
34433
|
-
}
|
35483
|
+
const excludedIds = await this.adjustResourcesToIgnoreForAddresses(
|
35484
|
+
[ownerAddress.b256Address],
|
35485
|
+
resourcesIdsToIgnore
|
35486
|
+
);
|
34434
35487
|
const coinsQuery = {
|
34435
35488
|
owner: ownerAddress.toB256(),
|
34436
35489
|
queryPerAsset: quantities.map(coinQuantityfy).map(({ assetId, amount, max: maxPerAsset }) => ({
|
@@ -34438,7 +35491,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34438
35491
|
amount: (amount.eqn(0) ? bn(1) : amount).toString(10),
|
34439
35492
|
max: maxPerAsset ? maxPerAsset.toString(10) : void 0
|
34440
35493
|
})),
|
34441
|
-
excludedIds
|
35494
|
+
excludedIds
|
34442
35495
|
};
|
34443
35496
|
const result = await this.operations.getCoinsToSpend(coinsQuery);
|
34444
35497
|
const coins = result.coinsToSpend.flat().map((coin) => {
|
@@ -35005,20 +36058,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35005
36058
|
/**
|
35006
36059
|
* @hidden
|
35007
36060
|
*/
|
35008
|
-
extractDryRunError(transactionRequest, receipts,
|
35009
|
-
const status = dryRunStatus;
|
36061
|
+
extractDryRunError(transactionRequest, receipts, reason) {
|
35010
36062
|
let logs = [];
|
35011
|
-
|
35012
|
-
|
36063
|
+
let groupedLogs = {};
|
36064
|
+
if (transactionRequest.type === TransactionType.Script && transactionRequest.abis) {
|
36065
|
+
({ logs, groupedLogs } = getAllDecodedLogs({
|
35013
36066
|
receipts,
|
35014
|
-
transactionRequest.abis.main,
|
35015
|
-
transactionRequest.abis.otherContractsAbis
|
35016
|
-
);
|
36067
|
+
mainAbi: transactionRequest.abis.main,
|
36068
|
+
externalAbis: transactionRequest.abis.otherContractsAbis
|
36069
|
+
}));
|
35017
36070
|
}
|
35018
36071
|
return extractTxError({
|
35019
36072
|
logs,
|
36073
|
+
groupedLogs,
|
35020
36074
|
receipts,
|
35021
|
-
statusReason:
|
36075
|
+
statusReason: reason
|
35022
36076
|
});
|
35023
36077
|
}
|
35024
36078
|
/**
|
@@ -35045,6 +36099,45 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35045
36099
|
}
|
35046
36100
|
return transactionRequest;
|
35047
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
|
+
}
|
35048
36141
|
};
|
35049
36142
|
|
35050
36143
|
// src/test-utils/test-asset-id.ts
|
@@ -35070,21 +36163,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35070
36163
|
}
|
35071
36164
|
};
|
35072
36165
|
|
35073
|
-
// src/providers/utils/merge-quantities.ts
|
35074
|
-
var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
|
35075
|
-
const resultMap = {};
|
35076
|
-
function addToMap({ amount, assetId }) {
|
35077
|
-
if (resultMap[assetId]) {
|
35078
|
-
resultMap[assetId] = resultMap[assetId].add(amount);
|
35079
|
-
} else {
|
35080
|
-
resultMap[assetId] = amount;
|
35081
|
-
}
|
35082
|
-
}
|
35083
|
-
__name(addToMap, "addToMap");
|
35084
|
-
coinQuantities.forEach((arr) => arr.forEach(addToMap));
|
35085
|
-
return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
|
35086
|
-
}, "mergeQuantities");
|
35087
|
-
|
35088
36166
|
// src/types.ts
|
35089
36167
|
var AbstractAccount = class {
|
35090
36168
|
static {
|
@@ -35129,6 +36207,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35129
36207
|
return { script, scriptData };
|
35130
36208
|
}, "assembleTransferToContractScript");
|
35131
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
|
+
|
35132
36222
|
// src/account.ts
|
35133
36223
|
var MAX_FUNDING_ATTEMPTS = 5;
|
35134
36224
|
var Account = class extends AbstractAccount {
|
@@ -35195,11 +36285,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35195
36285
|
* Retrieves resources satisfying the spend query for the account.
|
35196
36286
|
*
|
35197
36287
|
* @param quantities - Quantities of resources to be obtained.
|
35198
|
-
* @param
|
36288
|
+
* @param resourcesIdsToIgnore - IDs of resources to be excluded from the query (optional).
|
35199
36289
|
* @returns A promise that resolves to an array of Resources.
|
35200
36290
|
*/
|
35201
|
-
async getResourcesToSpend(quantities,
|
35202
|
-
return this.provider.getResourcesToSpend(this.address, quantities,
|
36291
|
+
async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
|
36292
|
+
return this.provider.getResourcesToSpend(this.address, quantities, resourcesIdsToIgnore);
|
35203
36293
|
}
|
35204
36294
|
/**
|
35205
36295
|
* Retrieves coins owned by the account.
|
@@ -35244,6 +36334,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35244
36334
|
* @param request - The transaction request to fund.
|
35245
36335
|
* @param params - The estimated transaction parameters.
|
35246
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.
|
35247
36340
|
*/
|
35248
36341
|
async fund(request, params) {
|
35249
36342
|
const {
|
@@ -35366,7 +36459,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35366
36459
|
amount,
|
35367
36460
|
assetId: assetId || await this.provider.getBaseAssetId()
|
35368
36461
|
});
|
35369
|
-
|
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
|
+
});
|
35370
36470
|
return request;
|
35371
36471
|
}
|
35372
36472
|
/**
|
@@ -35392,7 +36492,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35392
36492
|
async batchTransfer(transferParams, txParams = {}) {
|
35393
36493
|
let request = new ScriptTransactionRequest(txParams);
|
35394
36494
|
request = this.addBatchTransfer(request, transferParams);
|
35395
|
-
|
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
|
+
});
|
35396
36503
|
return this.sendTransaction(request, { estimateTxDependencies: false });
|
35397
36504
|
}
|
35398
36505
|
/**
|
@@ -35464,7 +36571,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35464
36571
|
const { script, scriptData } = await assembleTransferToContractScript(transferParams);
|
35465
36572
|
request.script = script;
|
35466
36573
|
request.scriptData = scriptData;
|
35467
|
-
|
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
|
+
});
|
35468
36582
|
return this.sendTransaction(request);
|
35469
36583
|
}
|
35470
36584
|
/**
|
@@ -35492,16 +36606,144 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35492
36606
|
const baseAssetId = await this.provider.getBaseAssetId();
|
35493
36607
|
let request = new ScriptTransactionRequest(params);
|
35494
36608
|
const quantities = [{ amount: bn(amount), assetId: baseAssetId }];
|
35495
|
-
const
|
35496
|
-
request =
|
35497
|
-
|
35498
|
-
|
35499
|
-
|
35500
|
-
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
|
35501
36616
|
});
|
35502
|
-
await this.fund(request, txCost);
|
35503
36617
|
return this.sendTransaction(request);
|
35504
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");
|
35505
36747
|
/**
|
35506
36748
|
* Returns a transaction cost to enable user
|
35507
36749
|
* to set gasLimit and also reserve balance amounts
|
@@ -35511,6 +36753,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35511
36753
|
* @param transactionCostParams - The transaction cost parameters (optional).
|
35512
36754
|
*
|
35513
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.
|
35514
36759
|
*/
|
35515
36760
|
async getTransactionCost(transactionRequestLike, { signatureCallback, quantities = [], gasPrice } = {}) {
|
35516
36761
|
const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
|
@@ -35672,6 +36917,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35672
36917
|
} : void 0;
|
35673
36918
|
}
|
35674
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 * */
|
35675
36932
|
validateTransferAmount(amount) {
|
35676
36933
|
if (bn(amount).lte(0)) {
|
35677
36934
|
throw new FuelError(
|
@@ -35719,6 +36976,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35719
36976
|
}
|
35720
36977
|
return request;
|
35721
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
|
+
}
|
35722
36991
|
};
|
35723
36992
|
|
35724
36993
|
// src/wallet/keystore-wallet.ts
|
@@ -38788,23 +40057,26 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
38788
40057
|
),
|
38789
40058
|
port: nodeOptions.port || "0"
|
38790
40059
|
};
|
38791
|
-
let
|
40060
|
+
let killNode;
|
38792
40061
|
let url;
|
38793
40062
|
if (launchNodeServerPort) {
|
38794
40063
|
const serverUrl = `http://localhost:${launchNodeServerPort}`;
|
38795
40064
|
url = await (await fetch(serverUrl, { method: "POST", body: JSON.stringify(launchNodeOptions) })).text();
|
38796
|
-
|
40065
|
+
killNode = /* @__PURE__ */ __name(() => {
|
38797
40066
|
fetch(`${serverUrl}/cleanup/${url}`);
|
38798
|
-
}, "
|
40067
|
+
}, "killNode");
|
38799
40068
|
} else {
|
38800
40069
|
const settings = await launchNode(launchNodeOptions);
|
38801
40070
|
url = settings.url;
|
38802
|
-
|
40071
|
+
killNode = settings.cleanup;
|
38803
40072
|
}
|
40073
|
+
const cleanup = /* @__PURE__ */ __name(() => {
|
40074
|
+
Provider.clearChainAndNodeCaches(url);
|
40075
|
+
killNode();
|
40076
|
+
}, "cleanup");
|
38804
40077
|
let provider;
|
38805
40078
|
try {
|
38806
40079
|
provider = new Provider(url, providerOptions);
|
38807
|
-
await provider.init();
|
38808
40080
|
} catch (err) {
|
38809
40081
|
cleanup();
|
38810
40082
|
throw err;
|