@fuel-ts/account 0.100.3 → 0.100.5
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/connectors/fuel-connector.d.ts +3 -3
- package/dist/connectors/fuel-connector.d.ts.map +1 -1
- package/dist/index.global.js +1506 -221
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +2222 -1027
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2021 -828
- 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 +1187 -76
- 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 +85 -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-request/transaction-request.d.ts +3 -3
- package/dist/providers/transaction-request/transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-response/getAllDecodedLogs.d.ts.map +1 -1
- package/dist/providers/transaction-response/transaction-response.d.ts +54 -15
- package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +12 -1
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
- package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
- package/dist/providers/transaction-summary/status.d.ts +16 -2
- package/dist/providers/transaction-summary/status.d.ts.map +1 -1
- package/dist/providers/transaction-summary/types.d.ts +85 -4
- package/dist/providers/transaction-summary/types.d.ts.map +1 -1
- package/dist/providers/utils/handle-gql-error-message.d.ts.map +1 -1
- package/dist/providers/utils/index.d.ts +1 -0
- package/dist/providers/utils/index.d.ts.map +1 -1
- package/dist/providers/utils/parse-graphql-response.d.ts +12 -0
- package/dist/providers/utils/parse-graphql-response.d.ts.map +1 -0
- package/dist/providers/utils/serialization.d.ts +9 -0
- package/dist/providers/utils/serialization.d.ts.map +1 -1
- package/dist/providers/utils/transaction-response-serialization.d.ts +8 -0
- package/dist/providers/utils/transaction-response-serialization.d.ts.map +1 -0
- 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 +1500 -205
- package/dist/test-utils.global.js.map +1 -1
- package/dist/test-utils.js +2091 -901
- package/dist/test-utils.js.map +1 -1
- package/dist/test-utils.mjs +1938 -742
- 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.5"
|
17193
17293
|
};
|
17194
17294
|
}
|
17195
17295
|
__name(getBuiltinVersions, "getBuiltinVersions");
|
@@ -17342,6 +17442,8 @@ This unreleased fuel-core build may include features and updates not yet support
|
|
17342
17442
|
ErrorCode2["FUNDS_TOO_LOW"] = "funds-too-low";
|
17343
17443
|
ErrorCode2["MAX_OUTPUTS_EXCEEDED"] = "max-outputs-exceeded";
|
17344
17444
|
ErrorCode2["ASSET_BURN_DETECTED"] = "asset-burn-detected";
|
17445
|
+
ErrorCode2["CHANGE_OUTPUT_COLLISION"] = "change-output-collision";
|
17446
|
+
ErrorCode2["DUPLICATE_CHANGE_OUTPUT_ACCOUNT"] = "duplicate-change-output-account";
|
17345
17447
|
ErrorCode2["INVALID_RECEIPT_TYPE"] = "invalid-receipt-type";
|
17346
17448
|
ErrorCode2["INVALID_WORD_LIST"] = "invalid-word-list";
|
17347
17449
|
ErrorCode2["INVALID_MNEMONIC"] = "invalid-mnemonic";
|
@@ -17351,9 +17453,12 @@ This unreleased fuel-core build may include features and updates not yet support
|
|
17351
17453
|
ErrorCode2["INVALID_PASSWORD"] = "invalid-password";
|
17352
17454
|
ErrorCode2["ACCOUNT_REQUIRED"] = "account-required";
|
17353
17455
|
ErrorCode2["UNLOCKED_WALLET_REQUIRED"] = "unlocked-wallet-required";
|
17456
|
+
ErrorCode2["NO_COINS_TO_CONSOLIDATE"] = "no-coins-to-consolidate";
|
17457
|
+
ErrorCode2["COINS_ASSET_ID_MISMATCH"] = "coins-asset-id-mismatch";
|
17354
17458
|
ErrorCode2["ASSET_NOT_FOUND"] = "asset-not-found";
|
17355
17459
|
ErrorCode2["NUMBER_TOO_BIG"] = "number-too-big";
|
17356
17460
|
ErrorCode2["ERROR_BUILDING_BLOCK_EXPLORER_URL"] = "error-building-block-explorer-url";
|
17461
|
+
ErrorCode2["RPC_CONSISTENCY"] = "rpc-consistency";
|
17357
17462
|
ErrorCode2["VITEPRESS_PLUGIN_ERROR"] = "vitepress-plugin-error";
|
17358
17463
|
ErrorCode2["SCRIPT_REVERTED"] = "script-reverted";
|
17359
17464
|
ErrorCode2["SCRIPT_RETURN_INVALID_TYPE"] = "script-return-invalid-type";
|
@@ -23248,6 +23353,7 @@ If you are attempting to transform a hex value, please make sure it is being pas
|
|
23248
23353
|
const poaInstant = poaInstantFlagValue === "true" || poaInstantFlagValue === void 0;
|
23249
23354
|
const nativeExecutorVersion = getFlagValueFromArgs(args, "--native-executor-version") || "0";
|
23250
23355
|
const minGasPrice = getFlagValueFromArgs(args, "--min-gas-price") || "1";
|
23356
|
+
const startingGasPrice = getFlagValueFromArgs(args, "--starting-gas-price") || "1";
|
23251
23357
|
const graphQLStartSubstring = "Binding GraphQL provider to";
|
23252
23358
|
const command = fuelCorePath || "fuel-core";
|
23253
23359
|
const ipToUse = ip || "0.0.0.0";
|
@@ -23289,6 +23395,7 @@ If you are attempting to transform a hex value, please make sure it is being pas
|
|
23289
23395
|
["--port", portToUse],
|
23290
23396
|
useInMemoryDb ? ["--db-type", "in-memory"] : ["--db-path", tempDir],
|
23291
23397
|
["--min-gas-price", minGasPrice],
|
23398
|
+
["--starting-gas-price", startingGasPrice],
|
23292
23399
|
poaInstant ? ["--poa-instant", "true"] : [],
|
23293
23400
|
["--native-executor-version", nativeExecutorVersion],
|
23294
23401
|
["--consensus-key", consensusKey],
|
@@ -28903,6 +29010,83 @@ spurious results.`);
|
|
28903
29010
|
var lib_default2 = gql;
|
28904
29011
|
|
28905
29012
|
// src/providers/__generated__/operations.ts
|
29013
|
+
var InputCoinFragmentDoc = lib_default2`
|
29014
|
+
fragment InputCoinFragment on InputCoin {
|
29015
|
+
type: __typename
|
29016
|
+
utxoId
|
29017
|
+
owner
|
29018
|
+
amount
|
29019
|
+
assetId
|
29020
|
+
txPointer
|
29021
|
+
coinWitnessIndex: witnessIndex
|
29022
|
+
predicateGasUsed
|
29023
|
+
predicate
|
29024
|
+
predicateData
|
29025
|
+
}
|
29026
|
+
`;
|
29027
|
+
var InputMessageFragmentDoc = lib_default2`
|
29028
|
+
fragment InputMessageFragment on InputMessage {
|
29029
|
+
type: __typename
|
29030
|
+
sender
|
29031
|
+
recipient
|
29032
|
+
amount
|
29033
|
+
nonce
|
29034
|
+
messageWitnessIndex: witnessIndex
|
29035
|
+
predicateGasUsed
|
29036
|
+
data
|
29037
|
+
predicate
|
29038
|
+
predicateData
|
29039
|
+
}
|
29040
|
+
`;
|
29041
|
+
var InputContractFragmentDoc = lib_default2`
|
29042
|
+
fragment InputContractFragment on InputContract {
|
29043
|
+
type: __typename
|
29044
|
+
utxoId
|
29045
|
+
balanceRoot
|
29046
|
+
stateRoot
|
29047
|
+
txPointer
|
29048
|
+
contractId
|
29049
|
+
}
|
29050
|
+
`;
|
29051
|
+
var OutputCoinFragmentDoc = lib_default2`
|
29052
|
+
fragment OutputCoinFragment on CoinOutput {
|
29053
|
+
type: __typename
|
29054
|
+
to
|
29055
|
+
amount
|
29056
|
+
assetId
|
29057
|
+
}
|
29058
|
+
`;
|
29059
|
+
var OutputContractFragmentDoc = lib_default2`
|
29060
|
+
fragment OutputContractFragment on ContractOutput {
|
29061
|
+
type: __typename
|
29062
|
+
inputIndex
|
29063
|
+
balanceRoot
|
29064
|
+
stateRoot
|
29065
|
+
}
|
29066
|
+
`;
|
29067
|
+
var OutputChangeFragmentDoc = lib_default2`
|
29068
|
+
fragment OutputChangeFragment on ChangeOutput {
|
29069
|
+
type: __typename
|
29070
|
+
to
|
29071
|
+
amount
|
29072
|
+
assetId
|
29073
|
+
}
|
29074
|
+
`;
|
29075
|
+
var OutputVariableFragmentDoc = lib_default2`
|
29076
|
+
fragment OutputVariableFragment on VariableOutput {
|
29077
|
+
type: __typename
|
29078
|
+
to
|
29079
|
+
amount
|
29080
|
+
assetId
|
29081
|
+
}
|
29082
|
+
`;
|
29083
|
+
var OutputContractCreatedFragmentDoc = lib_default2`
|
29084
|
+
fragment OutputContractCreatedFragment on ContractCreated {
|
29085
|
+
type: __typename
|
29086
|
+
contract
|
29087
|
+
stateRoot
|
29088
|
+
}
|
29089
|
+
`;
|
28906
29090
|
var SubmittedStatusFragmentDoc = lib_default2`
|
28907
29091
|
fragment SubmittedStatusFragment on SubmittedStatus {
|
28908
29092
|
type: __typename
|
@@ -29031,6 +29215,87 @@ spurious results.`);
|
|
29031
29215
|
reason
|
29032
29216
|
}
|
29033
29217
|
`;
|
29218
|
+
var PreconfirmationSuccessStatusFragmentDoc = lib_default2`
|
29219
|
+
fragment PreconfirmationSuccessStatusFragment on PreconfirmationSuccessStatus {
|
29220
|
+
type: __typename
|
29221
|
+
totalGas
|
29222
|
+
totalFee
|
29223
|
+
resolvedOutputs {
|
29224
|
+
utxoId
|
29225
|
+
output {
|
29226
|
+
type: __typename
|
29227
|
+
... on CoinOutput {
|
29228
|
+
to
|
29229
|
+
amount
|
29230
|
+
assetId
|
29231
|
+
}
|
29232
|
+
... on ContractOutput {
|
29233
|
+
inputIndex
|
29234
|
+
balanceRoot
|
29235
|
+
stateRoot
|
29236
|
+
}
|
29237
|
+
... on ChangeOutput {
|
29238
|
+
to
|
29239
|
+
amount
|
29240
|
+
assetId
|
29241
|
+
}
|
29242
|
+
... on VariableOutput {
|
29243
|
+
to
|
29244
|
+
amount
|
29245
|
+
assetId
|
29246
|
+
}
|
29247
|
+
... on ContractCreated {
|
29248
|
+
contract
|
29249
|
+
stateRoot
|
29250
|
+
}
|
29251
|
+
}
|
29252
|
+
}
|
29253
|
+
preconfirmationReceipts: receipts {
|
29254
|
+
...receiptFragment
|
29255
|
+
}
|
29256
|
+
}
|
29257
|
+
${ReceiptFragmentDoc}`;
|
29258
|
+
var PreconfirmationFailureStatusFragmentDoc = lib_default2`
|
29259
|
+
fragment PreconfirmationFailureStatusFragment on PreconfirmationFailureStatus {
|
29260
|
+
type: __typename
|
29261
|
+
reason
|
29262
|
+
totalGas
|
29263
|
+
totalFee
|
29264
|
+
resolvedOutputs {
|
29265
|
+
utxoId
|
29266
|
+
output {
|
29267
|
+
type: __typename
|
29268
|
+
... on CoinOutput {
|
29269
|
+
to
|
29270
|
+
amount
|
29271
|
+
assetId
|
29272
|
+
}
|
29273
|
+
... on ContractOutput {
|
29274
|
+
inputIndex
|
29275
|
+
balanceRoot
|
29276
|
+
stateRoot
|
29277
|
+
}
|
29278
|
+
... on ChangeOutput {
|
29279
|
+
to
|
29280
|
+
amount
|
29281
|
+
assetId
|
29282
|
+
}
|
29283
|
+
... on VariableOutput {
|
29284
|
+
to
|
29285
|
+
amount
|
29286
|
+
assetId
|
29287
|
+
}
|
29288
|
+
... on ContractCreated {
|
29289
|
+
contract
|
29290
|
+
stateRoot
|
29291
|
+
}
|
29292
|
+
}
|
29293
|
+
}
|
29294
|
+
preconfirmationReceipts: receipts {
|
29295
|
+
...receiptFragment
|
29296
|
+
}
|
29297
|
+
}
|
29298
|
+
${ReceiptFragmentDoc}`;
|
29034
29299
|
var TransactionStatusSubscriptionFragmentDoc = lib_default2`
|
29035
29300
|
fragment transactionStatusSubscriptionFragment on TransactionStatus {
|
29036
29301
|
... on SubmittedStatus {
|
@@ -29051,12 +29316,20 @@ spurious results.`);
|
|
29051
29316
|
... on SqueezedOutStatus {
|
29052
29317
|
...SqueezedOutStatusFragment
|
29053
29318
|
}
|
29319
|
+
... on PreconfirmationSuccessStatus {
|
29320
|
+
...PreconfirmationSuccessStatusFragment
|
29321
|
+
}
|
29322
|
+
... on PreconfirmationFailureStatus {
|
29323
|
+
...PreconfirmationFailureStatusFragment
|
29324
|
+
}
|
29054
29325
|
}
|
29055
29326
|
${SubmittedStatusFragmentDoc}
|
29056
29327
|
${SuccessStatusWithBlockIdFragmentDoc}
|
29057
29328
|
${MalleableTransactionFieldsFragmentDoc}
|
29058
29329
|
${FailureStatusWithBlockIdFragmentDoc}
|
29059
|
-
${SqueezedOutStatusFragmentDoc}
|
29330
|
+
${SqueezedOutStatusFragmentDoc}
|
29331
|
+
${PreconfirmationSuccessStatusFragmentDoc}
|
29332
|
+
${PreconfirmationFailureStatusFragmentDoc}`;
|
29060
29333
|
var TransactionStatusFragmentDoc = lib_default2`
|
29061
29334
|
fragment transactionStatusFragment on TransactionStatus {
|
29062
29335
|
... on SubmittedStatus {
|
@@ -29108,6 +29381,23 @@ ${SqueezedOutStatusFragmentDoc}`;
|
|
29108
29381
|
}
|
29109
29382
|
}
|
29110
29383
|
${InputEstimatePredicatesFragmentDoc}`;
|
29384
|
+
var DryRunFailureAssembleTxFragmentDoc = lib_default2`
|
29385
|
+
fragment dryRunFailureAssembleTxFragment on DryRunFailureStatus {
|
29386
|
+
type: __typename
|
29387
|
+
reason
|
29388
|
+
receipts {
|
29389
|
+
...receiptFragment
|
29390
|
+
}
|
29391
|
+
}
|
29392
|
+
${ReceiptFragmentDoc}`;
|
29393
|
+
var DryRunSuccessAssembleTxFragmentDoc = lib_default2`
|
29394
|
+
fragment dryRunSuccessAssembleTxFragment on DryRunSuccessStatus {
|
29395
|
+
type: __typename
|
29396
|
+
receipts {
|
29397
|
+
...receiptFragment
|
29398
|
+
}
|
29399
|
+
}
|
29400
|
+
${ReceiptFragmentDoc}`;
|
29111
29401
|
var DryRunFailureStatusFragmentDoc = lib_default2`
|
29112
29402
|
fragment dryRunFailureStatusFragment on DryRunFailureStatus {
|
29113
29403
|
type: __typename
|
@@ -29368,6 +29658,11 @@ ${GasCostsFragmentDoc}`;
|
|
29368
29658
|
consensusParameters {
|
29369
29659
|
...consensusParametersFragment
|
29370
29660
|
}
|
29661
|
+
latestBlock {
|
29662
|
+
header {
|
29663
|
+
consensusParametersVersion
|
29664
|
+
}
|
29665
|
+
}
|
29371
29666
|
}
|
29372
29667
|
${ConsensusParametersFragmentDoc}`;
|
29373
29668
|
var ContractBalanceFragmentDoc = lib_default2`
|
@@ -29464,13 +29759,21 @@ ${NodeInfoFragmentDoc}`;
|
|
29464
29759
|
... on SqueezedOutStatus {
|
29465
29760
|
...SqueezedOutStatusFragment
|
29466
29761
|
}
|
29762
|
+
... on PreconfirmationSuccessStatus {
|
29763
|
+
...PreconfirmationSuccessStatusFragment
|
29764
|
+
}
|
29765
|
+
... on PreconfirmationFailureStatus {
|
29766
|
+
...PreconfirmationFailureStatusFragment
|
29767
|
+
}
|
29467
29768
|
}
|
29468
29769
|
}
|
29469
29770
|
}
|
29470
29771
|
${SubmittedStatusFragmentDoc}
|
29471
29772
|
${SuccessStatusWithBlockIdFragmentDoc}
|
29472
29773
|
${FailureStatusWithBlockIdFragmentDoc}
|
29473
|
-
${SqueezedOutStatusFragmentDoc}
|
29774
|
+
${SqueezedOutStatusFragmentDoc}
|
29775
|
+
${PreconfirmationSuccessStatusFragmentDoc}
|
29776
|
+
${PreconfirmationFailureStatusFragmentDoc}`;
|
29474
29777
|
var GetTransactionsDocument = lib_default2`
|
29475
29778
|
query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
|
29476
29779
|
transactions(after: $after, before: $before, first: $first, last: $last) {
|
@@ -29761,8 +30064,79 @@ ${GetMessageFragmentDoc}`;
|
|
29761
30064
|
}
|
29762
30065
|
}
|
29763
30066
|
`;
|
30067
|
+
var AssembleTxDocument = lib_default2`
|
30068
|
+
query assembleTx($tx: HexString!, $blockHorizon: U32!, $requiredBalances: [RequiredBalance!]!, $feeAddressIndex: U16!, $excludeInput: ExcludeInput, $estimatePredicates: Boolean, $reserveGas: U64) {
|
30069
|
+
assembleTx(
|
30070
|
+
tx: $tx
|
30071
|
+
blockHorizon: $blockHorizon
|
30072
|
+
requiredBalances: $requiredBalances
|
30073
|
+
feeAddressIndex: $feeAddressIndex
|
30074
|
+
excludeInput: $excludeInput
|
30075
|
+
estimatePredicates: $estimatePredicates
|
30076
|
+
reserveGas: $reserveGas
|
30077
|
+
) {
|
30078
|
+
transaction {
|
30079
|
+
id
|
30080
|
+
inputs {
|
30081
|
+
... on InputCoin {
|
30082
|
+
...InputCoinFragment
|
30083
|
+
}
|
30084
|
+
... on InputContract {
|
30085
|
+
...InputContractFragment
|
30086
|
+
}
|
30087
|
+
... on InputMessage {
|
30088
|
+
...InputMessageFragment
|
30089
|
+
}
|
30090
|
+
}
|
30091
|
+
outputs {
|
30092
|
+
... on CoinOutput {
|
30093
|
+
...OutputCoinFragment
|
30094
|
+
}
|
30095
|
+
... on ContractOutput {
|
30096
|
+
...OutputContractFragment
|
30097
|
+
}
|
30098
|
+
... on ChangeOutput {
|
30099
|
+
...OutputChangeFragment
|
30100
|
+
}
|
30101
|
+
... on VariableOutput {
|
30102
|
+
...OutputVariableFragment
|
30103
|
+
}
|
30104
|
+
... on ContractCreated {
|
30105
|
+
...OutputContractCreatedFragment
|
30106
|
+
}
|
30107
|
+
}
|
30108
|
+
policies {
|
30109
|
+
tip
|
30110
|
+
witnessLimit
|
30111
|
+
maturity
|
30112
|
+
maxFee
|
30113
|
+
}
|
30114
|
+
witnesses
|
30115
|
+
scriptGasLimit
|
30116
|
+
}
|
30117
|
+
status {
|
30118
|
+
... on DryRunFailureStatus {
|
30119
|
+
...dryRunFailureAssembleTxFragment
|
30120
|
+
}
|
30121
|
+
... on DryRunSuccessStatus {
|
30122
|
+
...dryRunSuccessAssembleTxFragment
|
30123
|
+
}
|
30124
|
+
}
|
30125
|
+
gasPrice
|
30126
|
+
}
|
30127
|
+
}
|
30128
|
+
${InputCoinFragmentDoc}
|
30129
|
+
${InputContractFragmentDoc}
|
30130
|
+
${InputMessageFragmentDoc}
|
30131
|
+
${OutputCoinFragmentDoc}
|
30132
|
+
${OutputContractFragmentDoc}
|
30133
|
+
${OutputChangeFragmentDoc}
|
30134
|
+
${OutputVariableFragmentDoc}
|
30135
|
+
${OutputContractCreatedFragmentDoc}
|
30136
|
+
${DryRunFailureAssembleTxFragmentDoc}
|
30137
|
+
${DryRunSuccessAssembleTxFragmentDoc}`;
|
29764
30138
|
var DryRunDocument = lib_default2`
|
29765
|
-
|
30139
|
+
query dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean, $gasPrice: U64) {
|
29766
30140
|
dryRun(
|
29767
30141
|
txs: $encodedTransactions
|
29768
30142
|
utxoValidation: $utxoValidation
|
@@ -29819,15 +30193,22 @@ ${GetMessageFragmentDoc}`;
|
|
29819
30193
|
}
|
29820
30194
|
`;
|
29821
30195
|
var SubmitAndAwaitStatusDocument = lib_default2`
|
29822
|
-
subscription submitAndAwaitStatus($encodedTransaction: HexString
|
29823
|
-
submitAndAwaitStatus(
|
30196
|
+
subscription submitAndAwaitStatus($encodedTransaction: HexString!, $estimatePredicates: Boolean, $includePreConfirmation: Boolean) {
|
30197
|
+
submitAndAwaitStatus(
|
30198
|
+
tx: $encodedTransaction
|
30199
|
+
estimatePredicates: $estimatePredicates
|
30200
|
+
includePreconfirmation: $includePreConfirmation
|
30201
|
+
) {
|
29824
30202
|
...transactionStatusSubscriptionFragment
|
29825
30203
|
}
|
29826
30204
|
}
|
29827
30205
|
${TransactionStatusSubscriptionFragmentDoc}`;
|
29828
30206
|
var StatusChangeDocument = lib_default2`
|
29829
|
-
subscription statusChange($transactionId: TransactionId
|
29830
|
-
statusChange(
|
30207
|
+
subscription statusChange($transactionId: TransactionId!, $includePreConfirmation: Boolean) {
|
30208
|
+
statusChange(
|
30209
|
+
id: $transactionId
|
30210
|
+
includePreconfirmation: $includePreConfirmation
|
30211
|
+
) {
|
29831
30212
|
...transactionStatusSubscriptionFragment
|
29832
30213
|
}
|
29833
30214
|
}
|
@@ -29930,6 +30311,9 @@ ${GetMessageFragmentDoc}`;
|
|
29930
30311
|
getAssetDetails(variables, options) {
|
29931
30312
|
return requester(GetAssetDetailsDocument, variables, options);
|
29932
30313
|
},
|
30314
|
+
assembleTx(variables, options) {
|
30315
|
+
return requester(AssembleTxDocument, variables, options);
|
30316
|
+
},
|
29933
30317
|
dryRun(variables, options) {
|
29934
30318
|
return requester(DryRunDocument, variables, options);
|
29935
30319
|
},
|
@@ -29958,9 +30342,67 @@ ${GetMessageFragmentDoc}`;
|
|
29958
30342
|
}
|
29959
30343
|
__name(getSdk, "getSdk");
|
29960
30344
|
|
30345
|
+
// src/providers/assemble-tx-helpers.ts
|
30346
|
+
var resolveAccountForAssembleTxParams = /* @__PURE__ */ __name((account) => {
|
30347
|
+
const assembleTxAccount = {};
|
30348
|
+
const accountIsPredicate = "bytes" in account;
|
30349
|
+
if (accountIsPredicate) {
|
30350
|
+
assembleTxAccount.predicate = {
|
30351
|
+
predicate: hexlify(account.bytes),
|
30352
|
+
predicateAddress: account.address.toB256(),
|
30353
|
+
predicateData: hexlify(account.getPredicateData())
|
30354
|
+
};
|
30355
|
+
} else {
|
30356
|
+
assembleTxAccount.address = account.address.toB256();
|
30357
|
+
}
|
30358
|
+
return assembleTxAccount;
|
30359
|
+
}, "resolveAccountForAssembleTxParams");
|
30360
|
+
var setAndValidateGasAndFeeForAssembledTx = /* @__PURE__ */ __name(async (params) => {
|
30361
|
+
const { gasPrice, transactionRequest, setGasLimit, setMaxFee, provider } = params;
|
30362
|
+
const gasLimitSpecified = isDefined(setGasLimit);
|
30363
|
+
const maxFeeSpecified = isDefined(setMaxFee);
|
30364
|
+
const isScriptTx = transactionRequest.type === TransactionType.Script;
|
30365
|
+
if (gasLimitSpecified && isScriptTx) {
|
30366
|
+
const requiredGasLimit = transactionRequest.gasLimit;
|
30367
|
+
if (bn(setGasLimit).lt(bn(requiredGasLimit))) {
|
30368
|
+
throw new FuelError(
|
30369
|
+
ErrorCode.GAS_LIMIT_TOO_LOW,
|
30370
|
+
`Gas limit '${setGasLimit}' is lower than the required: '${requiredGasLimit}'.`
|
30371
|
+
);
|
30372
|
+
}
|
30373
|
+
transactionRequest.gasLimit = bn(setGasLimit);
|
30374
|
+
}
|
30375
|
+
if (maxFeeSpecified) {
|
30376
|
+
const requiredMaxFee = transactionRequest.maxFee;
|
30377
|
+
if (bn(setMaxFee).lt(requiredMaxFee)) {
|
30378
|
+
throw new FuelError(
|
30379
|
+
ErrorCode.MAX_FEE_TOO_LOW,
|
30380
|
+
`Max fee '${setMaxFee}' is lower than the required: '${requiredMaxFee}'.`
|
30381
|
+
);
|
30382
|
+
}
|
30383
|
+
transactionRequest.maxFee = bn(setMaxFee);
|
30384
|
+
}
|
30385
|
+
if (gasLimitSpecified && !maxFeeSpecified) {
|
30386
|
+
const { maxFee: feeForGasPrice } = await provider.estimateTxGasAndFee({
|
30387
|
+
transactionRequest,
|
30388
|
+
gasPrice
|
30389
|
+
});
|
30390
|
+
transactionRequest.maxFee = feeForGasPrice;
|
30391
|
+
}
|
30392
|
+
return transactionRequest;
|
30393
|
+
}, "setAndValidateGasAndFeeForAssembledTx");
|
30394
|
+
|
29961
30395
|
// src/providers/utils/handle-gql-error-message.ts
|
30396
|
+
var gqlErrorMessage = {
|
30397
|
+
RPC_CONSISTENCY: /The required fuel block height is higher than the current block height. Required: \d+, Current: \d+/,
|
30398
|
+
NOT_ENOUGH_COINS_MAX_COINS: /the target cannot be met due to no coins available or exceeding the \d+ coin limit./,
|
30399
|
+
ASSET_NOT_FOUND: /resource was not found in table/,
|
30400
|
+
MULTIPLE_CHANGE_POLICIES: /The asset ([a-fA-F0-9]{64}) has multiple change policies/,
|
30401
|
+
DUPLICATE_CHANGE_OUTPUT_ACCOUNT: /required balances contain duplicate \(asset, account\) pair/,
|
30402
|
+
INSUFFICIENT_FEE_AMOUNT: /InsufficientFeeAmount { expected: (\d+), provided: (\d+) }/
|
30403
|
+
};
|
29962
30404
|
var mapGqlErrorMessage = /* @__PURE__ */ __name((error2) => {
|
29963
|
-
if (
|
30405
|
+
if (gqlErrorMessage.NOT_ENOUGH_COINS_MAX_COINS.test(error2.message)) {
|
29964
30406
|
return new FuelError(
|
29965
30407
|
ErrorCode.INSUFFICIENT_FUNDS_OR_MAX_COINS,
|
29966
30408
|
`Insufficient funds or too many small value coins. Consider combining UTXOs.`,
|
@@ -29968,7 +30410,25 @@ ${GetMessageFragmentDoc}`;
|
|
29968
30410
|
error2
|
29969
30411
|
);
|
29970
30412
|
}
|
29971
|
-
if (
|
30413
|
+
if (gqlErrorMessage.MULTIPLE_CHANGE_POLICIES.test(error2.message)) {
|
30414
|
+
const match = error2.message.match(/asset ([a-fA-F0-9]{64})/);
|
30415
|
+
const assetId = match?.[1] || "";
|
30416
|
+
return new FuelError(
|
30417
|
+
ErrorCode.CHANGE_OUTPUT_COLLISION,
|
30418
|
+
`OutputChange address for asset 0x${assetId} differs between transaction request and assembleTx parameters.`,
|
30419
|
+
{},
|
30420
|
+
error2
|
30421
|
+
);
|
30422
|
+
}
|
30423
|
+
if (gqlErrorMessage.DUPLICATE_CHANGE_OUTPUT_ACCOUNT.test(error2.message)) {
|
30424
|
+
return new FuelError(
|
30425
|
+
ErrorCode.DUPLICATE_CHANGE_OUTPUT_ACCOUNT,
|
30426
|
+
`The parameter 'accountCoinQuantities' of assembleTx contains duplicate entries for the same assetId with different 'changeOutputAccount'.`,
|
30427
|
+
{},
|
30428
|
+
error2
|
30429
|
+
);
|
30430
|
+
}
|
30431
|
+
if (gqlErrorMessage.ASSET_NOT_FOUND.test(error2.message)) {
|
29972
30432
|
return new FuelError(
|
29973
30433
|
ErrorCode.ASSET_NOT_FOUND,
|
29974
30434
|
`Asset not found for given asset id.`,
|
@@ -29976,6 +30436,13 @@ ${GetMessageFragmentDoc}`;
|
|
29976
30436
|
error2
|
29977
30437
|
);
|
29978
30438
|
}
|
30439
|
+
if (gqlErrorMessage.RPC_CONSISTENCY.test(error2.message)) {
|
30440
|
+
return new FuelError(ErrorCode.RPC_CONSISTENCY, error2.message, {}, error2);
|
30441
|
+
}
|
30442
|
+
if (gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT.test(error2.message)) {
|
30443
|
+
const match = error2.message.match(gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT);
|
30444
|
+
return new FuelError(ErrorCode.FUNDS_TOO_LOW, match?.[0] || error2.message, {}, error2);
|
30445
|
+
}
|
29979
30446
|
return new FuelError(ErrorCode.INVALID_REQUEST, error2.message, {}, error2);
|
29980
30447
|
}, "mapGqlErrorMessage");
|
29981
30448
|
var mapGqlErrorWithIncompatibleNodeVersion = /* @__PURE__ */ __name((error2, incompatibleNodeVersionMessage) => {
|
@@ -30008,8 +30475,9 @@ ${incompatibleNodeVersionMessage}`,
|
|
30008
30475
|
|
30009
30476
|
// src/providers/fuel-graphql-subscriber.ts
|
30010
30477
|
var FuelGraphqlSubscriber = class _FuelGraphqlSubscriber {
|
30011
|
-
constructor(stream) {
|
30478
|
+
constructor(stream, onEvent) {
|
30012
30479
|
this.stream = stream;
|
30480
|
+
this.onEvent = onEvent;
|
30013
30481
|
}
|
30014
30482
|
static {
|
30015
30483
|
__name(this, "FuelGraphqlSubscriber");
|
@@ -30017,12 +30485,13 @@ ${incompatibleNodeVersionMessage}`,
|
|
30017
30485
|
static incompatibleNodeVersionMessage = false;
|
30018
30486
|
static textDecoder = new TextDecoder();
|
30019
30487
|
static async create(options) {
|
30020
|
-
const { url, query, variables, fetchFn } = options;
|
30488
|
+
const { url, query, variables, fetchFn, operationName, onEvent } = options;
|
30021
30489
|
const response = await fetchFn(`${url}-sub`, {
|
30022
30490
|
method: "POST",
|
30023
30491
|
body: JSON.stringify({
|
30024
30492
|
query: print(query),
|
30025
|
-
variables
|
30493
|
+
variables,
|
30494
|
+
operationName
|
30026
30495
|
}),
|
30027
30496
|
headers: {
|
30028
30497
|
"Content-Type": "application/json",
|
@@ -30031,39 +30500,71 @@ ${incompatibleNodeVersionMessage}`,
|
|
30031
30500
|
});
|
30032
30501
|
const [errorReader, resultReader] = response.body.tee().map((stream) => stream.getReader());
|
30033
30502
|
await new _FuelGraphqlSubscriber(errorReader).next();
|
30034
|
-
return new _FuelGraphqlSubscriber(resultReader);
|
30503
|
+
return new _FuelGraphqlSubscriber(resultReader, onEvent);
|
30035
30504
|
}
|
30036
|
-
|
30037
|
-
|
30038
|
-
|
30505
|
+
/**
|
30506
|
+
* This method will take a stream reader and parse the event from the stream.
|
30507
|
+
*
|
30508
|
+
* @param reader - The reader of the SSE stream
|
30509
|
+
* @param parsingLeftover - The leftover string from parsing the previous event
|
30510
|
+
* @returns The event parsed as a full GraphQL response, whether the stream is done and the leftover string after parsing
|
30511
|
+
*/
|
30512
|
+
static async readEvent(reader, parsingLeftover = "") {
|
30513
|
+
let text = parsingLeftover;
|
30514
|
+
const regex = /data:.*\n\n/g;
|
30039
30515
|
while (true) {
|
30040
|
-
if (this.events.length > 0) {
|
30041
|
-
const { data, errors: errors2 } = this.events.shift();
|
30042
|
-
assertGqlResponseHasNoErrors(errors2, _FuelGraphqlSubscriber.incompatibleNodeVersionMessage);
|
30043
|
-
return { value: data, done: false };
|
30044
|
-
}
|
30045
|
-
const { value, done } = await this.stream.read();
|
30046
|
-
if (done) {
|
30047
|
-
return { value, done };
|
30048
|
-
}
|
30049
|
-
const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
|
30050
|
-
if (decoded === "") {
|
30051
|
-
continue;
|
30052
|
-
}
|
30053
|
-
const text = `${this.parsingLeftover}${decoded}`;
|
30054
|
-
const regex = /data:.*\n\n/g;
|
30055
30516
|
const matches = [...text.matchAll(regex)].flatMap((match) => match);
|
30056
|
-
matches.
|
30517
|
+
if (matches.length > 0) {
|
30057
30518
|
try {
|
30058
|
-
|
30519
|
+
const event = JSON.parse(matches[0].replace(/^data:/, ""));
|
30520
|
+
return {
|
30521
|
+
event,
|
30522
|
+
done: false,
|
30523
|
+
parsingLeftover: text.replace(matches[0], "")
|
30524
|
+
};
|
30059
30525
|
} catch (e) {
|
30060
30526
|
throw new FuelError(
|
30061
30527
|
ErrorCode.STREAM_PARSING_ERROR,
|
30062
30528
|
`Error while parsing stream data response: ${text}`
|
30063
30529
|
);
|
30064
30530
|
}
|
30065
|
-
}
|
30066
|
-
|
30531
|
+
}
|
30532
|
+
const { value, done } = await reader.read();
|
30533
|
+
if (done) {
|
30534
|
+
return { event: void 0, done, parsingLeftover: "" };
|
30535
|
+
}
|
30536
|
+
const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
|
30537
|
+
text += decoded;
|
30538
|
+
}
|
30539
|
+
}
|
30540
|
+
events = [];
|
30541
|
+
parsingLeftover = "";
|
30542
|
+
/**
|
30543
|
+
* Gets automatically called when iterating in a `for-await-of` loop.
|
30544
|
+
* It can also be called manually.
|
30545
|
+
*
|
30546
|
+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next
|
30547
|
+
*/
|
30548
|
+
async next() {
|
30549
|
+
while (true) {
|
30550
|
+
const nextEvent = this.events.shift();
|
30551
|
+
if (nextEvent) {
|
30552
|
+
this.onEvent?.(nextEvent);
|
30553
|
+
assertGqlResponseHasNoErrors(
|
30554
|
+
nextEvent.errors,
|
30555
|
+
_FuelGraphqlSubscriber.incompatibleNodeVersionMessage
|
30556
|
+
);
|
30557
|
+
return { value: nextEvent.data, done: false };
|
30558
|
+
}
|
30559
|
+
const { event, done, parsingLeftover } = await _FuelGraphqlSubscriber.readEvent(
|
30560
|
+
this.stream,
|
30561
|
+
this.parsingLeftover
|
30562
|
+
);
|
30563
|
+
this.parsingLeftover = parsingLeftover;
|
30564
|
+
if (done) {
|
30565
|
+
return { value: void 0, done: true };
|
30566
|
+
}
|
30567
|
+
this.events.push(event);
|
30067
30568
|
}
|
30068
30569
|
}
|
30069
30570
|
/**
|
@@ -30109,7 +30610,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
30109
30610
|
case InputType.Contract: {
|
30110
30611
|
return {
|
30111
30612
|
type: InputType.Contract,
|
30112
|
-
txID: ZeroBytes32,
|
30613
|
+
txID: hexlify(value.txID || ZeroBytes32),
|
30113
30614
|
outputIndex: 0,
|
30114
30615
|
balanceRoot: ZeroBytes32,
|
30115
30616
|
stateRoot: ZeroBytes32,
|
@@ -30180,9 +30681,9 @@ ${incompatibleNodeVersionMessage}`,
|
|
30180
30681
|
case OutputType.Variable: {
|
30181
30682
|
return {
|
30182
30683
|
type: OutputType.Variable,
|
30183
|
-
to: ZeroBytes32,
|
30184
|
-
amount: bn(
|
30185
|
-
assetId: ZeroBytes32
|
30684
|
+
to: hexlify(value.to || ZeroBytes32),
|
30685
|
+
amount: bn(value.amount),
|
30686
|
+
assetId: hexlify(value.assetId || ZeroBytes32)
|
30186
30687
|
};
|
30187
30688
|
}
|
30188
30689
|
case OutputType.ContractCreated: {
|
@@ -30226,6 +30727,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
30226
30727
|
"BlobIdAlreadyUploaded",
|
30227
30728
|
"BlobNotFound",
|
30228
30729
|
"BytecodeAlreadyUploaded",
|
30730
|
+
"CanNotGetGasPriceInPredicate",
|
30229
30731
|
"ContractIdAlreadyDeployed",
|
30230
30732
|
"ContractInstructionNotAllowed",
|
30231
30733
|
"ContractMaxSize",
|
@@ -30249,6 +30751,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
30249
30751
|
"InvalidImmediateValue",
|
30250
30752
|
"InvalidInstruction",
|
30251
30753
|
"InvalidMetadataIdentifier",
|
30754
|
+
"InvalidUpgradePurposeType",
|
30252
30755
|
"MalformedCallStructure",
|
30253
30756
|
"MaxStaticContractsReached",
|
30254
30757
|
"MemoryGrowthOverlap",
|
@@ -30265,8 +30768,10 @@ ${incompatibleNodeVersionMessage}`,
|
|
30265
30768
|
"PolicyIsNotSet",
|
30266
30769
|
"PolicyNotFound",
|
30267
30770
|
"PredicateReturnedNonOne",
|
30771
|
+
"ProofInUploadNotFound",
|
30268
30772
|
"ReservedRegisterNotWritable",
|
30269
30773
|
"Revert",
|
30774
|
+
"StorageSlotsNotFound",
|
30270
30775
|
"ThePartIsNotSequentiallyConnected",
|
30271
30776
|
"TooManyReceipts",
|
30272
30777
|
"TooManySlots",
|
@@ -30285,7 +30790,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
30285
30790
|
|
30286
30791
|
// src/providers/utils/serialization.ts
|
30287
30792
|
var deserializeChain = /* @__PURE__ */ __name((chain) => {
|
30288
|
-
const { name, daHeight, consensusParameters } = chain;
|
30793
|
+
const { name, daHeight, consensusParameters, latestBlock } = chain;
|
30289
30794
|
const {
|
30290
30795
|
contractParams,
|
30291
30796
|
feeParams,
|
@@ -30336,11 +30841,12 @@ ${incompatibleNodeVersionMessage}`,
|
|
30336
30841
|
maxScriptDataLength: bn(scriptParams.maxScriptDataLength)
|
30337
30842
|
},
|
30338
30843
|
gasCosts
|
30339
|
-
}
|
30844
|
+
},
|
30845
|
+
latestBlock
|
30340
30846
|
};
|
30341
30847
|
}, "deserializeChain");
|
30342
30848
|
var serializeChain = /* @__PURE__ */ __name((chain) => {
|
30343
|
-
const { name, baseChainHeight, consensusParameters } = chain;
|
30849
|
+
const { name, baseChainHeight, consensusParameters, latestBlock } = chain;
|
30344
30850
|
const {
|
30345
30851
|
contractParameters,
|
30346
30852
|
feeParameters,
|
@@ -30391,7 +30897,8 @@ ${incompatibleNodeVersionMessage}`,
|
|
30391
30897
|
maxScriptDataLength: scriptParameters.maxScriptDataLength.toString()
|
30392
30898
|
},
|
30393
30899
|
gasCosts
|
30394
|
-
}
|
30900
|
+
},
|
30901
|
+
latestBlock
|
30395
30902
|
};
|
30396
30903
|
}, "serializeChain");
|
30397
30904
|
var deserializeNodeInfo = /* @__PURE__ */ __name((nodeInfo) => {
|
@@ -30620,10 +31127,145 @@ ${incompatibleNodeVersionMessage}`,
|
|
30620
31127
|
throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);
|
30621
31128
|
}
|
30622
31129
|
}, "deserializeReceipt");
|
30623
|
-
|
30624
|
-
|
30625
|
-
|
30626
|
-
|
31130
|
+
var deserializeInput = /* @__PURE__ */ __name((input) => {
|
31131
|
+
let parsedInput;
|
31132
|
+
switch (input.type) {
|
31133
|
+
case "InputCoin":
|
31134
|
+
parsedInput = {
|
31135
|
+
type: InputType.Coin,
|
31136
|
+
id: input.utxoId,
|
31137
|
+
amount: bn(input.amount),
|
31138
|
+
assetId: input.assetId,
|
31139
|
+
owner: input.owner,
|
31140
|
+
txPointer: `0x${input.txPointer}`,
|
31141
|
+
witnessIndex: Number(input.coinWitnessIndex),
|
31142
|
+
predicate: input.predicate,
|
31143
|
+
predicateData: input.predicateData,
|
31144
|
+
predicateGasUsed: bn(input.predicateGasUsed)
|
31145
|
+
};
|
31146
|
+
break;
|
31147
|
+
case "InputMessage":
|
31148
|
+
parsedInput = {
|
31149
|
+
type: InputType.Message,
|
31150
|
+
nonce: input.nonce,
|
31151
|
+
amount: bn(input.amount),
|
31152
|
+
recipient: input.recipient,
|
31153
|
+
sender: input.sender,
|
31154
|
+
data: input.data,
|
31155
|
+
witnessIndex: Number(input.messageWitnessIndex),
|
31156
|
+
predicate: input.predicate,
|
31157
|
+
predicateData: input.predicateData,
|
31158
|
+
predicateGasUsed: bn(input.predicateGasUsed)
|
31159
|
+
};
|
31160
|
+
break;
|
31161
|
+
case "InputContract":
|
31162
|
+
parsedInput = {
|
31163
|
+
type: InputType.Contract,
|
31164
|
+
contractId: input.contractId,
|
31165
|
+
txPointer: `0x${input.txPointer}`,
|
31166
|
+
txID: hexlify(arrayify(input.utxoId).slice(0, 32))
|
31167
|
+
};
|
31168
|
+
break;
|
31169
|
+
default:
|
31170
|
+
assertUnreachable(input);
|
31171
|
+
}
|
31172
|
+
return parsedInput;
|
31173
|
+
}, "deserializeInput");
|
31174
|
+
var deserializeOutput = /* @__PURE__ */ __name((output) => {
|
31175
|
+
let parsedOutput;
|
31176
|
+
switch (output.type) {
|
31177
|
+
case "CoinOutput":
|
31178
|
+
parsedOutput = {
|
31179
|
+
type: OutputType.Coin,
|
31180
|
+
amount: bn(output.amount),
|
31181
|
+
assetId: output.assetId,
|
31182
|
+
to: output.to
|
31183
|
+
};
|
31184
|
+
break;
|
31185
|
+
case "ContractOutput":
|
31186
|
+
parsedOutput = {
|
31187
|
+
type: OutputType.Contract,
|
31188
|
+
inputIndex: Number(output.inputIndex)
|
31189
|
+
};
|
31190
|
+
break;
|
31191
|
+
case "ChangeOutput":
|
31192
|
+
parsedOutput = {
|
31193
|
+
type: OutputType.Change,
|
31194
|
+
assetId: output.assetId,
|
31195
|
+
to: output.to
|
31196
|
+
};
|
31197
|
+
break;
|
31198
|
+
case "ContractCreated":
|
31199
|
+
parsedOutput = {
|
31200
|
+
type: OutputType.ContractCreated,
|
31201
|
+
stateRoot: output.stateRoot,
|
31202
|
+
contractId: output.contract
|
31203
|
+
};
|
31204
|
+
break;
|
31205
|
+
case "VariableOutput":
|
31206
|
+
parsedOutput = {
|
31207
|
+
type: OutputType.Variable,
|
31208
|
+
amount: bn(output.amount),
|
31209
|
+
assetId: output.assetId,
|
31210
|
+
to: output.to
|
31211
|
+
};
|
31212
|
+
break;
|
31213
|
+
default:
|
31214
|
+
assertUnreachable(output);
|
31215
|
+
}
|
31216
|
+
return parsedOutput;
|
31217
|
+
}, "deserializeOutput");
|
31218
|
+
var deserializeProcessedTxOutput = /* @__PURE__ */ __name((output) => {
|
31219
|
+
let parsedOutput;
|
31220
|
+
switch (output.type) {
|
31221
|
+
case "CoinOutput":
|
31222
|
+
parsedOutput = {
|
31223
|
+
type: OutputType.Coin,
|
31224
|
+
amount: bn(output.amount),
|
31225
|
+
assetId: output.assetId,
|
31226
|
+
to: output.to
|
31227
|
+
};
|
31228
|
+
break;
|
31229
|
+
case "ContractOutput":
|
31230
|
+
parsedOutput = {
|
31231
|
+
type: OutputType.Contract,
|
31232
|
+
inputIndex: Number(output.inputIndex),
|
31233
|
+
balanceRoot: output.balanceRoot,
|
31234
|
+
stateRoot: output.stateRoot
|
31235
|
+
};
|
31236
|
+
break;
|
31237
|
+
case "ChangeOutput":
|
31238
|
+
parsedOutput = {
|
31239
|
+
type: OutputType.Change,
|
31240
|
+
assetId: output.assetId,
|
31241
|
+
to: output.to,
|
31242
|
+
amount: bn(output.amount)
|
31243
|
+
};
|
31244
|
+
break;
|
31245
|
+
case "ContractCreated":
|
31246
|
+
parsedOutput = {
|
31247
|
+
type: OutputType.ContractCreated,
|
31248
|
+
stateRoot: output.stateRoot,
|
31249
|
+
contractId: output.contract
|
31250
|
+
};
|
31251
|
+
break;
|
31252
|
+
case "VariableOutput":
|
31253
|
+
parsedOutput = {
|
31254
|
+
type: OutputType.Variable,
|
31255
|
+
amount: bn(output.amount),
|
31256
|
+
assetId: output.assetId,
|
31257
|
+
to: output.to
|
31258
|
+
};
|
31259
|
+
break;
|
31260
|
+
default:
|
31261
|
+
assertUnreachable(output);
|
31262
|
+
}
|
31263
|
+
return parsedOutput;
|
31264
|
+
}, "deserializeProcessedTxOutput");
|
31265
|
+
|
31266
|
+
// src/providers/utils/receipts.ts
|
31267
|
+
var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
|
31268
|
+
var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
|
30627
31269
|
var getReceiptsWithMissingData = /* @__PURE__ */ __name((receipts) => receipts.reduce(
|
30628
31270
|
(memo, receipt) => {
|
30629
31271
|
if (doesReceiptHaveMissingOutputVariables(receipt)) {
|
@@ -30900,6 +31542,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
30900
31542
|
return assembleRevertError(receipts, logs, metadata);
|
30901
31543
|
}, "extractTxError");
|
30902
31544
|
|
31545
|
+
// src/providers/utils/merge-quantities.ts
|
31546
|
+
var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
|
31547
|
+
const resultMap = {};
|
31548
|
+
function addToMap({ amount, assetId }) {
|
31549
|
+
if (resultMap[assetId]) {
|
31550
|
+
resultMap[assetId] = resultMap[assetId].add(amount);
|
31551
|
+
} else {
|
31552
|
+
resultMap[assetId] = amount;
|
31553
|
+
}
|
31554
|
+
}
|
31555
|
+
__name(addToMap, "addToMap");
|
31556
|
+
coinQuantities.forEach((arr) => arr.forEach(addToMap));
|
31557
|
+
return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
|
31558
|
+
}, "mergeQuantities");
|
31559
|
+
|
30903
31560
|
// src/providers/transaction-request/errors.ts
|
30904
31561
|
var NoWitnessAtIndexError = class extends Error {
|
30905
31562
|
constructor(index) {
|
@@ -31003,8 +31660,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31003
31660
|
/** List of witnesses */
|
31004
31661
|
witnesses = [];
|
31005
31662
|
/**
|
31006
|
-
* @hidden
|
31007
|
-
*
|
31008
31663
|
* The current status of the transaction
|
31009
31664
|
*/
|
31010
31665
|
flag = { state: void 0, transactionId: void 0, summary: void 0 };
|
@@ -31021,7 +31676,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31021
31676
|
witnessLimit,
|
31022
31677
|
inputs,
|
31023
31678
|
outputs,
|
31024
|
-
witnesses
|
31679
|
+
witnesses,
|
31680
|
+
flag
|
31025
31681
|
} = {}) {
|
31026
31682
|
this.tip = tip ? bn(tip) : void 0;
|
31027
31683
|
this.maturity = maturity && maturity > 0 ? maturity : void 0;
|
@@ -31031,6 +31687,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31031
31687
|
this.inputs = inputs ?? [];
|
31032
31688
|
this.outputs = outputs ?? [];
|
31033
31689
|
this.witnesses = witnesses ?? [];
|
31690
|
+
this.flag = flag ?? { state: void 0, transactionId: void 0, summary: void 0 };
|
31034
31691
|
}
|
31035
31692
|
static getPolicyMeta(req) {
|
31036
31693
|
let policyTypes = 0;
|
@@ -31819,6 +32476,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31819
32476
|
* @param account - The account to fund the transaction.
|
31820
32477
|
* @param params - The parameters for the transaction cost.
|
31821
32478
|
* @returns The current instance of the `ScriptTransactionRequest` funded.
|
32479
|
+
*
|
32480
|
+
* @deprecated Use `provider.assembleTx` instead.
|
32481
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
31822
32482
|
*/
|
31823
32483
|
async estimateAndFund(account, { signatureCallback, quantities = [] } = {}) {
|
31824
32484
|
const txCost = await account.getTransactionCost(this, { signatureCallback, quantities });
|
@@ -31902,6 +32562,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31902
32562
|
}
|
31903
32563
|
return this.outputs.length - 1;
|
31904
32564
|
}
|
32565
|
+
/**
|
32566
|
+
* Adds a variable output to the transaction request.
|
32567
|
+
*
|
32568
|
+
* @param to - The recipient address as a BytesLike object. Defaults to ZeroBytes32 if not provided.
|
32569
|
+
* @param amount - The amount to be transferred as a BigNumberish object. Defaults to 0 if not provided.
|
32570
|
+
* @param assetId - The asset ID as a BytesLike object. Defaults to ZeroBytes32 if not provided.
|
32571
|
+
*/
|
32572
|
+
addVariableOutput(to, amount, assetId) {
|
32573
|
+
this.pushOutput({
|
32574
|
+
type: OutputType.Variable,
|
32575
|
+
to,
|
32576
|
+
amount,
|
32577
|
+
assetId
|
32578
|
+
});
|
32579
|
+
}
|
31905
32580
|
/**
|
31906
32581
|
* Calculates the maximum gas for the transaction.
|
31907
32582
|
*
|
@@ -32978,6 +33653,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32978
33653
|
return "submitted" /* submitted */;
|
32979
33654
|
case "SqueezedOutStatus":
|
32980
33655
|
return "squeezedout" /* squeezedout */;
|
33656
|
+
case "PreconfirmationSuccessStatus":
|
33657
|
+
return "preconfirmationSuccess" /* preconfirmationSuccess */;
|
33658
|
+
case "PreconfirmationFailureStatus":
|
33659
|
+
return "preconfirmationFailure" /* preconfirmationFailure */;
|
32981
33660
|
default:
|
32982
33661
|
throw new FuelError(
|
32983
33662
|
ErrorCode.INVALID_TRANSACTION_STATUS,
|
@@ -32985,15 +33664,30 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32985
33664
|
);
|
32986
33665
|
}
|
32987
33666
|
}, "getTransactionStatusName");
|
33667
|
+
var extractResolvedOutputs = /* @__PURE__ */ __name((serializedOutputs) => {
|
33668
|
+
const resolvedOutputs = [];
|
33669
|
+
serializedOutputs?.forEach(
|
33670
|
+
({ utxoId, output }) => resolvedOutputs.push({
|
33671
|
+
utxoId,
|
33672
|
+
output: deserializeProcessedTxOutput(output)
|
33673
|
+
})
|
33674
|
+
);
|
33675
|
+
return resolvedOutputs;
|
33676
|
+
}, "extractResolvedOutputs");
|
32988
33677
|
var processGraphqlStatus = /* @__PURE__ */ __name((gqlTransactionStatus) => {
|
32989
33678
|
let time;
|
32990
33679
|
let blockId;
|
32991
33680
|
let status;
|
32992
33681
|
let totalFee;
|
32993
33682
|
let totalGas;
|
33683
|
+
let receipts;
|
33684
|
+
let resolvedOutputs = [];
|
33685
|
+
let errorReason;
|
32994
33686
|
let isStatusFailure = false;
|
32995
33687
|
let isStatusSuccess = false;
|
32996
33688
|
let isStatusPending = false;
|
33689
|
+
let isStatusPreConfirmationSuccess = false;
|
33690
|
+
let isStatusPreConfirmationFailure = false;
|
32997
33691
|
if (gqlTransactionStatus?.type) {
|
32998
33692
|
status = getTransactionStatusName(gqlTransactionStatus.type);
|
32999
33693
|
switch (gqlTransactionStatus.type) {
|
@@ -33001,6 +33695,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33001
33695
|
time = gqlTransactionStatus.time;
|
33002
33696
|
blockId = gqlTransactionStatus.block?.id;
|
33003
33697
|
isStatusSuccess = true;
|
33698
|
+
receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
|
33004
33699
|
totalFee = bn(gqlTransactionStatus.totalFee);
|
33005
33700
|
totalGas = bn(gqlTransactionStatus.totalGas);
|
33006
33701
|
break;
|
@@ -33009,12 +33704,28 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33009
33704
|
blockId = gqlTransactionStatus.block?.id;
|
33010
33705
|
isStatusFailure = true;
|
33011
33706
|
totalFee = bn(gqlTransactionStatus.totalFee);
|
33707
|
+
receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
|
33012
33708
|
totalGas = bn(gqlTransactionStatus.totalGas);
|
33013
33709
|
break;
|
33014
33710
|
case "SubmittedStatus":
|
33015
33711
|
time = gqlTransactionStatus.time;
|
33016
33712
|
isStatusPending = true;
|
33017
33713
|
break;
|
33714
|
+
case "PreconfirmationSuccessStatus":
|
33715
|
+
isStatusPreConfirmationSuccess = true;
|
33716
|
+
totalFee = bn(gqlTransactionStatus.totalFee);
|
33717
|
+
totalGas = bn(gqlTransactionStatus.totalGas);
|
33718
|
+
receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
|
33719
|
+
resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
|
33720
|
+
break;
|
33721
|
+
case "PreconfirmationFailureStatus":
|
33722
|
+
isStatusPreConfirmationFailure = true;
|
33723
|
+
totalFee = bn(gqlTransactionStatus.totalFee);
|
33724
|
+
totalGas = bn(gqlTransactionStatus.totalGas);
|
33725
|
+
receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
|
33726
|
+
resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
|
33727
|
+
errorReason = gqlTransactionStatus.reason;
|
33728
|
+
break;
|
33018
33729
|
default:
|
33019
33730
|
}
|
33020
33731
|
}
|
@@ -33024,9 +33735,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33024
33735
|
status,
|
33025
33736
|
totalFee,
|
33026
33737
|
totalGas,
|
33738
|
+
receipts,
|
33027
33739
|
isStatusFailure,
|
33028
33740
|
isStatusSuccess,
|
33029
|
-
isStatusPending
|
33741
|
+
isStatusPending,
|
33742
|
+
isStatusPreConfirmationSuccess,
|
33743
|
+
isStatusPreConfirmationFailure,
|
33744
|
+
resolvedOutputs,
|
33745
|
+
errorReason
|
33030
33746
|
};
|
33031
33747
|
return processedGraphqlStatus;
|
33032
33748
|
}, "processGraphqlStatus");
|
@@ -33111,6 +33827,81 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33111
33827
|
return transactionSummary;
|
33112
33828
|
}
|
33113
33829
|
__name(assembleTransactionSummary, "assembleTransactionSummary");
|
33830
|
+
function assemblePreConfirmationTransactionSummary(params) {
|
33831
|
+
const { id, gqlTransactionStatus, transactionRequest, baseAssetId, maxInputs, abiMap } = params;
|
33832
|
+
let type3;
|
33833
|
+
let operations;
|
33834
|
+
let gasUsed;
|
33835
|
+
let tip;
|
33836
|
+
let transaction;
|
33837
|
+
let mintedAssets;
|
33838
|
+
let burnedAssets;
|
33839
|
+
const {
|
33840
|
+
isStatusFailure,
|
33841
|
+
isStatusSuccess,
|
33842
|
+
isStatusPending,
|
33843
|
+
status,
|
33844
|
+
receipts,
|
33845
|
+
resolvedOutputs,
|
33846
|
+
errorReason,
|
33847
|
+
totalFee,
|
33848
|
+
isStatusPreConfirmationFailure,
|
33849
|
+
isStatusPreConfirmationSuccess
|
33850
|
+
} = processGraphqlStatus(gqlTransactionStatus);
|
33851
|
+
if (receipts) {
|
33852
|
+
gasUsed = getGasUsedFromReceipts(receipts);
|
33853
|
+
mintedAssets = extractMintedAssetsFromReceipts(receipts);
|
33854
|
+
burnedAssets = extractBurnedAssetsFromReceipts(receipts);
|
33855
|
+
}
|
33856
|
+
if (transactionRequest) {
|
33857
|
+
transaction = transactionRequest.toTransaction();
|
33858
|
+
type3 = getTransactionTypeName(transaction.type);
|
33859
|
+
tip = bn(transaction.policies?.find((policy) => policy.type === PolicyType.Tip)?.data);
|
33860
|
+
if (receipts) {
|
33861
|
+
const rawPayload = hexlify(new TransactionCoder().encode(transaction));
|
33862
|
+
operations = getOperations({
|
33863
|
+
transactionType: transaction.type,
|
33864
|
+
inputs: transaction.inputs || [],
|
33865
|
+
outputs: transaction.outputs || [],
|
33866
|
+
receipts,
|
33867
|
+
rawPayload,
|
33868
|
+
abiMap,
|
33869
|
+
maxInputs,
|
33870
|
+
baseAssetId
|
33871
|
+
});
|
33872
|
+
}
|
33873
|
+
}
|
33874
|
+
const transactionSummary = {
|
33875
|
+
id,
|
33876
|
+
fee: totalFee,
|
33877
|
+
type: type3,
|
33878
|
+
status,
|
33879
|
+
receipts,
|
33880
|
+
gasUsed,
|
33881
|
+
tip,
|
33882
|
+
isStatusPreConfirmationFailure,
|
33883
|
+
isStatusPreConfirmationSuccess,
|
33884
|
+
isStatusFailure,
|
33885
|
+
isStatusSuccess,
|
33886
|
+
isStatusPending,
|
33887
|
+
...transaction && {
|
33888
|
+
isTypeMint: isTypeMint(transaction.type),
|
33889
|
+
isTypeCreate: isTypeCreate(transaction.type),
|
33890
|
+
isTypeScript: isTypeScript(transaction.type),
|
33891
|
+
isTypeUpgrade: isTypeUpgrade(transaction.type),
|
33892
|
+
isTypeUpload: isTypeUpload(transaction.type),
|
33893
|
+
isTypeBlob: isTypeBlob(transaction.type)
|
33894
|
+
},
|
33895
|
+
mintedAssets,
|
33896
|
+
burnedAssets,
|
33897
|
+
resolvedOutputs,
|
33898
|
+
errorReason,
|
33899
|
+
transaction,
|
33900
|
+
operations
|
33901
|
+
};
|
33902
|
+
return transactionSummary;
|
33903
|
+
}
|
33904
|
+
__name(assemblePreConfirmationTransactionSummary, "assemblePreConfirmationTransactionSummary");
|
33114
33905
|
|
33115
33906
|
// src/providers/transaction-response/getAllDecodedLogs.ts
|
33116
33907
|
function getAllDecodedLogs(opts) {
|
@@ -33120,7 +33911,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33120
33911
|
const firstCallReceipt = receipts.find(
|
33121
33912
|
(r) => r.type === ReceiptType.Call && r.id === ZeroBytes32
|
33122
33913
|
);
|
33123
|
-
|
33914
|
+
if (firstCallReceipt) {
|
33915
|
+
mainContract = firstCallReceipt.to;
|
33916
|
+
}
|
33124
33917
|
}
|
33125
33918
|
return receipts.reduce(
|
33126
33919
|
({ logs, groupedLogs }, receipt) => {
|
@@ -33143,37 +33936,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33143
33936
|
__name(getAllDecodedLogs, "getAllDecodedLogs");
|
33144
33937
|
|
33145
33938
|
// src/providers/transaction-response/transaction-response.ts
|
33146
|
-
function mapGqlOutputsToTxOutputs(outputs) {
|
33147
|
-
return outputs.map((o) => {
|
33148
|
-
const obj = "amount" in o ? { ...o, amount: bn(o.amount) } : o;
|
33149
|
-
switch (obj.type) {
|
33150
|
-
case "CoinOutput":
|
33151
|
-
return { ...obj, type: OutputType.Coin };
|
33152
|
-
case "ContractOutput":
|
33153
|
-
return {
|
33154
|
-
...obj,
|
33155
|
-
type: OutputType.Contract,
|
33156
|
-
inputIndex: parseInt(obj.inputIndex, 10)
|
33157
|
-
};
|
33158
|
-
case "ChangeOutput":
|
33159
|
-
return {
|
33160
|
-
...obj,
|
33161
|
-
type: OutputType.Change
|
33162
|
-
};
|
33163
|
-
case "VariableOutput":
|
33164
|
-
return { ...obj, type: OutputType.Variable };
|
33165
|
-
case "ContractCreated":
|
33166
|
-
return {
|
33167
|
-
...obj,
|
33168
|
-
type: OutputType.ContractCreated,
|
33169
|
-
contractId: obj.contract
|
33170
|
-
};
|
33171
|
-
default:
|
33172
|
-
return assertUnreachable(obj);
|
33173
|
-
}
|
33174
|
-
});
|
33175
|
-
}
|
33176
|
-
__name(mapGqlOutputsToTxOutputs, "mapGqlOutputsToTxOutputs");
|
33177
33939
|
var TransactionResponse = class _TransactionResponse {
|
33178
33940
|
/**
|
33179
33941
|
* Constructor for `TransactionResponse`.
|
@@ -33183,11 +33945,16 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33183
33945
|
*/
|
33184
33946
|
constructor(tx, provider, chainId, abis, submitTxSubscription) {
|
33185
33947
|
this.submitTxSubscription = submitTxSubscription;
|
33186
|
-
|
33948
|
+
if (typeof tx === "string") {
|
33949
|
+
this.id = tx;
|
33950
|
+
} else {
|
33951
|
+
this.id = tx.getTransactionId(chainId);
|
33952
|
+
this.request = tx;
|
33953
|
+
}
|
33187
33954
|
this.provider = provider;
|
33188
33955
|
this.abis = abis;
|
33189
|
-
this.request = typeof tx === "string" ? void 0 : tx;
|
33190
33956
|
this.waitForResult = this.waitForResult.bind(this);
|
33957
|
+
this.waitForPreConfirmation = this.waitForPreConfirmation.bind(this);
|
33191
33958
|
}
|
33192
33959
|
static {
|
33193
33960
|
__name(this, "TransactionResponse");
|
@@ -33203,6 +33970,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33203
33970
|
request;
|
33204
33971
|
status;
|
33205
33972
|
abis;
|
33973
|
+
preConfirmationStatus;
|
33974
|
+
waitingForStreamData = false;
|
33975
|
+
statusResolvers = /* @__PURE__ */ new Map();
|
33206
33976
|
/**
|
33207
33977
|
* Async constructor for `TransactionResponse`. This method can be used to create
|
33208
33978
|
* an instance of `TransactionResponse` and wait for the transaction to be fetched
|
@@ -33234,29 +34004,38 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33234
34004
|
}
|
33235
34005
|
return input;
|
33236
34006
|
});
|
33237
|
-
tx.outputs =
|
33238
|
-
if (
|
34007
|
+
tx.outputs = status.transaction.outputs.map(deserializeProcessedTxOutput);
|
34008
|
+
if (status.transaction.receiptsRoot) {
|
33239
34009
|
tx.receiptsRoot = status.transaction.receiptsRoot;
|
33240
34010
|
}
|
33241
34011
|
}
|
33242
34012
|
}
|
33243
34013
|
async getTransaction() {
|
33244
34014
|
if (this.request) {
|
33245
|
-
const
|
33246
|
-
this.applyMalleableSubscriptionFields(
|
34015
|
+
const tx2 = this.request.toTransaction();
|
34016
|
+
this.applyMalleableSubscriptionFields(tx2);
|
33247
34017
|
return {
|
33248
|
-
tx,
|
34018
|
+
tx: tx2,
|
33249
34019
|
bytes: this.request.toTransactionBytes()
|
33250
34020
|
};
|
33251
34021
|
}
|
33252
34022
|
const gqlTransaction = this.gqlTransaction ?? await this.fetch();
|
34023
|
+
const { rawPayload } = gqlTransaction;
|
34024
|
+
const bytes = arrayify(rawPayload);
|
34025
|
+
const [tx] = new TransactionCoder().decode(bytes, 0);
|
33253
34026
|
return {
|
33254
|
-
tx
|
33255
|
-
bytes
|
34027
|
+
tx,
|
34028
|
+
bytes
|
33256
34029
|
};
|
33257
34030
|
}
|
34031
|
+
/**
|
34032
|
+
*
|
34033
|
+
* NOTE: This method is only called within `getTransactionSummary`, which is invoked after `getTransaction`.
|
34034
|
+
* Since `getTransaction` only resolves once the transaction has been processed,
|
34035
|
+
* the status at this point is guaranteed to be either `SuccessStatus` or `FailureStatus`.
|
34036
|
+
*/
|
33258
34037
|
getReceipts() {
|
33259
|
-
const status = this.
|
34038
|
+
const status = this.getTransactionStatus();
|
33260
34039
|
switch (status?.type) {
|
33261
34040
|
case "SuccessStatus":
|
33262
34041
|
case "FailureStatus":
|
@@ -33289,18 +34068,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33289
34068
|
this.gqlTransaction = response.transaction;
|
33290
34069
|
return response.transaction;
|
33291
34070
|
}
|
33292
|
-
/**
|
33293
|
-
* Decode the raw payload of the transaction.
|
33294
|
-
*
|
33295
|
-
* @param transactionWithReceipts - The transaction with receipts object.
|
33296
|
-
* @returns The decoded transaction.
|
33297
|
-
*/
|
33298
|
-
decodeTransaction(transactionWithReceipts) {
|
33299
|
-
return new TransactionCoder().decode(
|
33300
|
-
arrayify(transactionWithReceipts.rawPayload),
|
33301
|
-
0
|
33302
|
-
)?.[0];
|
33303
|
-
}
|
33304
34071
|
/**
|
33305
34072
|
* Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will
|
33306
34073
|
* fetch it from the provider
|
@@ -33311,7 +34078,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33311
34078
|
async getTransactionSummary(contractsAbiMap) {
|
33312
34079
|
const { tx: transaction, bytes: transactionBytes } = await this.getTransaction();
|
33313
34080
|
const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = await this.provider.getGasConfig();
|
33314
|
-
const
|
34081
|
+
const transactionStatus = this.getTransactionStatus();
|
34082
|
+
const totalFee = getTotalFeeFromStatus(transactionStatus);
|
33315
34083
|
const gasPrice = totalFee ? bn(0) : await this.provider.getLatestGasPrice();
|
33316
34084
|
const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
|
33317
34085
|
const baseAssetId = await this.provider.getBaseAssetId();
|
@@ -33320,7 +34088,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33320
34088
|
receipts: this.getReceipts(),
|
33321
34089
|
transaction,
|
33322
34090
|
transactionBytes,
|
33323
|
-
gqlTransactionStatus:
|
34091
|
+
gqlTransactionStatus: transactionStatus,
|
33324
34092
|
gasPerByte,
|
33325
34093
|
gasPriceFactor,
|
33326
34094
|
abiMap: contractsAbiMap,
|
@@ -33332,29 +34100,92 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33332
34100
|
});
|
33333
34101
|
return transactionSummary;
|
33334
34102
|
}
|
34103
|
+
async getPreConfirmationTransactionSummary(contractsAbiMap) {
|
34104
|
+
const baseAssetId = await this.provider.getBaseAssetId();
|
34105
|
+
const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
|
34106
|
+
const transactionSummary = assemblePreConfirmationTransactionSummary({
|
34107
|
+
id: this.id,
|
34108
|
+
gqlTransactionStatus: this.preConfirmationStatus || this.status,
|
34109
|
+
baseAssetId,
|
34110
|
+
maxInputs,
|
34111
|
+
abiMap: contractsAbiMap,
|
34112
|
+
transactionRequest: this.request
|
34113
|
+
});
|
34114
|
+
return transactionSummary;
|
34115
|
+
}
|
34116
|
+
resolveStatus(type3) {
|
34117
|
+
const resolvers = this.statusResolvers.get(type3) || [];
|
34118
|
+
resolvers.forEach((resolve) => resolve());
|
34119
|
+
this.statusResolvers.delete(type3);
|
34120
|
+
}
|
34121
|
+
async waitForStatus(type3) {
|
34122
|
+
return new Promise((resolve, reject) => {
|
34123
|
+
const resolvers = this.statusResolvers.get(type3) || [];
|
34124
|
+
resolvers.push(() => {
|
34125
|
+
resolve();
|
34126
|
+
});
|
34127
|
+
this.statusResolvers.set(type3, resolvers);
|
34128
|
+
this.waitForStatusChange().catch(reject);
|
34129
|
+
});
|
34130
|
+
}
|
34131
|
+
/**
|
34132
|
+
* Waits for the status change of the transaction.
|
34133
|
+
* If the transaction is already in a final state, it will return immediately.
|
34134
|
+
* If the transaction is not in a final state, it will wait for the status change.
|
34135
|
+
* If we are already subscribed to the status change, it will return immediately.
|
34136
|
+
*/
|
33335
34137
|
async waitForStatusChange() {
|
33336
|
-
const
|
33337
|
-
if (
|
34138
|
+
const type3 = this.status?.type;
|
34139
|
+
if (type3 && (type3 === "FailureStatus" || type3 === "SuccessStatus")) {
|
34140
|
+
this.resolveStatus("preConfirmation");
|
34141
|
+
this.resolveStatus("confirmation");
|
34142
|
+
return;
|
34143
|
+
}
|
34144
|
+
if (this.waitingForStreamData) {
|
33338
34145
|
return;
|
33339
34146
|
}
|
34147
|
+
this.waitingForStreamData = true;
|
33340
34148
|
const subscription = this.submitTxSubscription ?? await this.provider.operations.statusChange({
|
33341
|
-
transactionId: this.id
|
34149
|
+
transactionId: this.id,
|
34150
|
+
includePreConfirmation: true
|
33342
34151
|
});
|
33343
34152
|
for await (const sub of subscription) {
|
33344
34153
|
const statusChange = "statusChange" in sub ? sub.statusChange : sub.submitAndAwaitStatus;
|
33345
34154
|
this.status = statusChange;
|
33346
34155
|
if (statusChange.type === "SqueezedOutStatus") {
|
33347
|
-
this.unsetResourceCache();
|
33348
34156
|
throw new FuelError(
|
33349
34157
|
ErrorCode.TRANSACTION_SQUEEZED_OUT,
|
33350
34158
|
`Transaction Squeezed Out with reason: ${statusChange.reason}`
|
33351
34159
|
);
|
33352
34160
|
}
|
33353
|
-
if (statusChange.type
|
34161
|
+
if (statusChange.type === "PreconfirmationSuccessStatus" || statusChange.type === "PreconfirmationFailureStatus") {
|
34162
|
+
this.preConfirmationStatus = statusChange;
|
34163
|
+
this.resolveStatus("preConfirmation");
|
34164
|
+
}
|
34165
|
+
if (statusChange.type === "SuccessStatus" || statusChange.type === "FailureStatus") {
|
34166
|
+
this.resolveStatus("confirmation");
|
34167
|
+
this.resolveStatus("preConfirmation");
|
34168
|
+
this.waitingForStreamData = false;
|
33354
34169
|
break;
|
33355
34170
|
}
|
33356
34171
|
}
|
33357
34172
|
}
|
34173
|
+
async waitForConfirmationStatuses() {
|
34174
|
+
try {
|
34175
|
+
await this.waitForStatus("confirmation");
|
34176
|
+
} catch (error2) {
|
34177
|
+
this.unsetResourceCache();
|
34178
|
+
throw error2;
|
34179
|
+
}
|
34180
|
+
}
|
34181
|
+
async waitForPreConfirmationStatuses() {
|
34182
|
+
try {
|
34183
|
+
await this.waitForStatus("preConfirmation");
|
34184
|
+
} catch (error2) {
|
34185
|
+
this.unsetResourceCache();
|
34186
|
+
throw error2;
|
34187
|
+
}
|
34188
|
+
}
|
33358
34189
|
/**
|
33359
34190
|
* Assembles the result of a transaction by retrieving the transaction summary,
|
33360
34191
|
* decoding logs (if available), and handling transaction failure.
|
@@ -33383,7 +34214,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33383
34214
|
transactionResult.groupedLogs = groupedLogs;
|
33384
34215
|
}
|
33385
34216
|
const { receipts } = transactionResult;
|
33386
|
-
const status = this.
|
34217
|
+
const status = this.getTransactionStatus();
|
33387
34218
|
if (status?.type === "FailureStatus") {
|
33388
34219
|
const { reason } = status;
|
33389
34220
|
throw extractTxError({
|
@@ -33395,16 +34226,46 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33395
34226
|
}
|
33396
34227
|
return transactionResult;
|
33397
34228
|
}
|
34229
|
+
async assemblePreConfirmationResult(contractsAbiMap) {
|
34230
|
+
const transactionSummary = await this.getPreConfirmationTransactionSummary(contractsAbiMap);
|
34231
|
+
const transactionResult = {
|
34232
|
+
...transactionSummary,
|
34233
|
+
logs: [],
|
34234
|
+
groupedLogs: {}
|
34235
|
+
};
|
34236
|
+
let { logs, groupedLogs } = { logs: [], groupedLogs: {} };
|
34237
|
+
if (this.abis && transactionSummary.receipts) {
|
34238
|
+
({ logs, groupedLogs } = getAllDecodedLogs({
|
34239
|
+
receipts: transactionSummary.receipts,
|
34240
|
+
mainAbi: this.abis.main,
|
34241
|
+
externalAbis: this.abis.otherContractsAbis
|
34242
|
+
}));
|
34243
|
+
transactionResult.logs = logs;
|
34244
|
+
transactionResult.groupedLogs = groupedLogs;
|
34245
|
+
}
|
34246
|
+
return transactionResult;
|
34247
|
+
}
|
33398
34248
|
/**
|
33399
34249
|
* Waits for transaction to complete and returns the result.
|
33400
34250
|
*
|
33401
34251
|
* @returns The completed transaction result
|
33402
34252
|
*/
|
33403
34253
|
async waitForResult(contractsAbiMap) {
|
33404
|
-
await this.
|
34254
|
+
await this.waitForConfirmationStatuses();
|
33405
34255
|
this.unsetResourceCache();
|
33406
34256
|
return this.assembleResult(contractsAbiMap);
|
33407
34257
|
}
|
34258
|
+
/**
|
34259
|
+
* Waits for the transaction's pre-confirmation and returns the result.
|
34260
|
+
*
|
34261
|
+
* @param contractsAbiMap - The contracts ABI map.
|
34262
|
+
* @returns The pre-confirmed transaction result
|
34263
|
+
*/
|
34264
|
+
async waitForPreConfirmation(contractsAbiMap) {
|
34265
|
+
await this.waitForPreConfirmationStatuses();
|
34266
|
+
this.unsetResourceCache();
|
34267
|
+
return this.assemblePreConfirmationResult(contractsAbiMap);
|
34268
|
+
}
|
33408
34269
|
/**
|
33409
34270
|
* Waits for transaction to complete and returns the result.
|
33410
34271
|
*
|
@@ -33416,6 +34277,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33416
34277
|
unsetResourceCache() {
|
33417
34278
|
this.provider.cache?.unset(this.id);
|
33418
34279
|
}
|
34280
|
+
getTransactionStatus() {
|
34281
|
+
return this.status ?? this.gqlTransaction?.status;
|
34282
|
+
}
|
33419
34283
|
};
|
33420
34284
|
|
33421
34285
|
// src/providers/utils/auto-retry-fetch.ts
|
@@ -33456,21 +34320,22 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33456
34320
|
}
|
33457
34321
|
__name(autoRetryFetch, "autoRetryFetch");
|
33458
34322
|
|
33459
|
-
// src/providers/utils/
|
33460
|
-
var
|
33461
|
-
const {
|
33462
|
-
|
33463
|
-
|
33464
|
-
if (
|
33465
|
-
|
33466
|
-
|
33467
|
-
|
33468
|
-
|
33469
|
-
|
33470
|
-
final.messages = [...final.messages, ...cached.messages.slice(0, maxInputs - total)];
|
34323
|
+
// src/providers/utils/parse-graphql-response.ts
|
34324
|
+
var parseGraphqlResponse = /* @__PURE__ */ __name(async (options) => {
|
34325
|
+
const { response, isSubscription } = options;
|
34326
|
+
let extensions;
|
34327
|
+
const responseClone = response.clone();
|
34328
|
+
if (isSubscription) {
|
34329
|
+
const reader = responseClone.body?.getReader();
|
34330
|
+
const { event } = await FuelGraphqlSubscriber.readEvent(reader);
|
34331
|
+
extensions = event?.extensions;
|
34332
|
+
} else {
|
34333
|
+
extensions = (await responseClone.json()).extensions;
|
33471
34334
|
}
|
33472
|
-
return
|
33473
|
-
|
34335
|
+
return {
|
34336
|
+
extensions
|
34337
|
+
};
|
34338
|
+
}, "parseGraphqlResponse");
|
33474
34339
|
|
33475
34340
|
// src/providers/utils/validate-pagination-args.ts
|
33476
34341
|
var validatePaginationArgs = /* @__PURE__ */ __name((params) => {
|
@@ -33515,22 +34380,48 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33515
34380
|
var BLOCKS_PAGE_SIZE_LIMIT = 5;
|
33516
34381
|
var DEFAULT_RESOURCE_CACHE_TTL = 2e4;
|
33517
34382
|
var GAS_USED_MODIFIER = 1.2;
|
34383
|
+
var WRITE_OPERATIONS = [
|
34384
|
+
"submit",
|
34385
|
+
"submitAndAwaitStatus",
|
34386
|
+
"produceBlocks"
|
34387
|
+
];
|
33518
34388
|
var Provider = class _Provider {
|
33519
34389
|
static {
|
33520
34390
|
__name(this, "Provider");
|
33521
34391
|
}
|
33522
34392
|
operations;
|
33523
34393
|
cache;
|
33524
|
-
/**
|
33525
|
-
|
34394
|
+
/**
|
34395
|
+
* @hidden
|
34396
|
+
* @param url - If provided, clears cache only for given url
|
34397
|
+
*/
|
34398
|
+
static clearChainAndNodeCaches(url) {
|
34399
|
+
if (url) {
|
34400
|
+
delete _Provider.inflightFetchChainAndNodeInfoRequests[url];
|
34401
|
+
delete _Provider.chainInfoCache[url];
|
34402
|
+
delete _Provider.nodeInfoCache[url];
|
34403
|
+
delete _Provider.currentBlockHeightCache[url];
|
34404
|
+
return;
|
34405
|
+
}
|
33526
34406
|
_Provider.inflightFetchChainAndNodeInfoRequests = {};
|
33527
34407
|
_Provider.nodeInfoCache = {};
|
33528
34408
|
_Provider.chainInfoCache = {};
|
34409
|
+
_Provider.currentBlockHeightCache = {};
|
33529
34410
|
}
|
33530
34411
|
/** @hidden */
|
33531
34412
|
url;
|
33532
34413
|
/** @hidden */
|
33533
34414
|
urlWithoutAuth;
|
34415
|
+
/**
|
34416
|
+
* Governs whether to include the required block height in the request body
|
34417
|
+
* for block-sensitive operations like when submitting a transaction.
|
34418
|
+
*
|
34419
|
+
* This ensures that the operation is executed at the correct block height,
|
34420
|
+
* regardless of which node in the network the request is routed to.
|
34421
|
+
*
|
34422
|
+
* `true` by default.
|
34423
|
+
*/
|
34424
|
+
static ENABLE_RPC_CONSISTENCY = true;
|
33534
34425
|
/** @hidden */
|
33535
34426
|
static inflightFetchChainAndNodeInfoRequests = {};
|
33536
34427
|
/** @hidden */
|
@@ -33538,6 +34429,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33538
34429
|
/** @hidden */
|
33539
34430
|
static nodeInfoCache = {};
|
33540
34431
|
/** @hidden */
|
34432
|
+
static currentBlockHeightCache = {};
|
34433
|
+
/** @hidden */
|
33541
34434
|
static incompatibleNodeVersionMessage = "";
|
33542
34435
|
/** @hidden */
|
33543
34436
|
consensusParametersTimestamp;
|
@@ -33549,6 +34442,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33549
34442
|
headers: void 0,
|
33550
34443
|
cache: void 0
|
33551
34444
|
};
|
34445
|
+
static extractOperationName(body) {
|
34446
|
+
return body?.toString().match(/"operationName":"(.+)"/)?.[1];
|
34447
|
+
}
|
34448
|
+
static isWriteOperation(body) {
|
34449
|
+
return WRITE_OPERATIONS.includes(this.extractOperationName(body));
|
34450
|
+
}
|
34451
|
+
static normalizeUrl(url) {
|
34452
|
+
return url.replace(/-sub$/, "");
|
34453
|
+
}
|
34454
|
+
static hasWriteOperationHappened(url) {
|
34455
|
+
return isDefined(_Provider.currentBlockHeightCache[this.normalizeUrl(url)]);
|
34456
|
+
}
|
33552
34457
|
/**
|
33553
34458
|
* @hidden
|
33554
34459
|
*/
|
@@ -33566,9 +34471,57 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33566
34471
|
if (options.requestMiddleware) {
|
33567
34472
|
fullRequest = await options.requestMiddleware(fullRequest);
|
33568
34473
|
}
|
33569
|
-
|
34474
|
+
if (_Provider.ENABLE_RPC_CONSISTENCY && _Provider.hasWriteOperationHappened(url)) {
|
34475
|
+
_Provider.applyBlockHeight(fullRequest, url);
|
34476
|
+
}
|
34477
|
+
return _Provider.fetchAndProcessBlockHeight(url, fullRequest, options);
|
33570
34478
|
}, retryOptions);
|
33571
34479
|
}
|
34480
|
+
static applyBlockHeight(request, url) {
|
34481
|
+
const normalizedUrl = this.normalizeUrl(url);
|
34482
|
+
const currentBlockHeight = _Provider.currentBlockHeightCache[normalizedUrl] ?? 0;
|
34483
|
+
request.body = request.body?.toString().replace(/}$/, `,"extensions":{"required_fuel_block_height":${currentBlockHeight}}}`);
|
34484
|
+
}
|
34485
|
+
static async fetchAndProcessBlockHeight(url, request, options) {
|
34486
|
+
const fetchFn = /* @__PURE__ */ __name(() => options.fetch ? options.fetch(url, request, options) : fetch(url, request), "fetchFn");
|
34487
|
+
const isWriteOperation = _Provider.isWriteOperation(request.body);
|
34488
|
+
if (isWriteOperation && !_Provider.hasWriteOperationHappened(url)) {
|
34489
|
+
_Provider.currentBlockHeightCache[_Provider.normalizeUrl(url)] = 0;
|
34490
|
+
}
|
34491
|
+
let response = await fetchFn();
|
34492
|
+
if (!_Provider.ENABLE_RPC_CONSISTENCY) {
|
34493
|
+
return response;
|
34494
|
+
}
|
34495
|
+
const retryOptions = {
|
34496
|
+
maxRetries: 5,
|
34497
|
+
baseDelay: 500
|
34498
|
+
};
|
34499
|
+
for (let retriesLeft = retryOptions.maxRetries; retriesLeft > 0; --retriesLeft) {
|
34500
|
+
const { extensions } = await parseGraphqlResponse({
|
34501
|
+
response,
|
34502
|
+
isSubscription: url.endsWith("-sub")
|
34503
|
+
});
|
34504
|
+
_Provider.setCurrentBlockHeight(url, extensions?.current_fuel_block_height);
|
34505
|
+
if (!extensions?.fuel_block_height_precondition_failed) {
|
34506
|
+
break;
|
34507
|
+
}
|
34508
|
+
const retryAttempt = retryOptions.maxRetries - retriesLeft + 1;
|
34509
|
+
const sleepTime = getWaitDelay(retryOptions, retryAttempt);
|
34510
|
+
await sleep(sleepTime);
|
34511
|
+
response = await fetchFn();
|
34512
|
+
}
|
34513
|
+
return response;
|
34514
|
+
}
|
34515
|
+
static setCurrentBlockHeight(url, height) {
|
34516
|
+
const writeOperationHappened = _Provider.hasWriteOperationHappened(url);
|
34517
|
+
if (!isDefined(height) || !writeOperationHappened) {
|
34518
|
+
return;
|
34519
|
+
}
|
34520
|
+
const normalizedUrl = _Provider.normalizeUrl(url);
|
34521
|
+
if (height > _Provider.currentBlockHeightCache[normalizedUrl]) {
|
34522
|
+
_Provider.currentBlockHeightCache[normalizedUrl] = height;
|
34523
|
+
}
|
34524
|
+
}
|
33572
34525
|
/**
|
33573
34526
|
* Constructor to initialize a Provider.
|
33574
34527
|
*
|
@@ -33654,6 +34607,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33654
34607
|
* Returns some helpful parameters related to gas fees.
|
33655
34608
|
*/
|
33656
34609
|
async getGasConfig() {
|
34610
|
+
await this.init();
|
33657
34611
|
const {
|
33658
34612
|
txParameters: { maxGasPerTx },
|
33659
34613
|
predicateParameters: { maxGasPerPredicate },
|
@@ -33778,7 +34732,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33778
34732
|
url: this.urlWithoutAuth,
|
33779
34733
|
query,
|
33780
34734
|
fetchFn: /* @__PURE__ */ __name((url, requestInit) => fetchFn(url, requestInit, this.options), "fetchFn"),
|
33781
|
-
variables: vars
|
34735
|
+
variables: vars,
|
34736
|
+
operationName: opDefinition.name.value,
|
34737
|
+
onEvent: /* @__PURE__ */ __name((event) => {
|
34738
|
+
_Provider.setCurrentBlockHeight(
|
34739
|
+
this.urlWithoutAuth,
|
34740
|
+
event.extensions?.current_fuel_block_height
|
34741
|
+
);
|
34742
|
+
}, "onEvent")
|
33782
34743
|
});
|
33783
34744
|
}
|
33784
34745
|
return gqlClient.request(query, vars);
|
@@ -33936,7 +34897,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33936
34897
|
* @param sendTransactionParams - The provider send transaction parameters (optional).
|
33937
34898
|
* @returns A promise that resolves to the transaction response object.
|
33938
34899
|
*/
|
33939
|
-
async sendTransaction(transactionRequestLike, {
|
34900
|
+
async sendTransaction(transactionRequestLike, {
|
34901
|
+
enableAssetBurn,
|
34902
|
+
estimateTxDependencies = true,
|
34903
|
+
includePreConfirmation: _includePreConfirmation = true
|
34904
|
+
} = {}) {
|
33940
34905
|
const transactionRequest = transactionRequestify(transactionRequestLike);
|
33941
34906
|
validateTransactionForAssetBurn(
|
33942
34907
|
await this.getBaseAssetId(),
|
@@ -33952,7 +34917,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33952
34917
|
if (isTransactionTypeScript(transactionRequest)) {
|
33953
34918
|
abis = transactionRequest.abis;
|
33954
34919
|
}
|
33955
|
-
const subscription = await this.operations.submitAndAwaitStatus({
|
34920
|
+
const subscription = await this.operations.submitAndAwaitStatus({
|
34921
|
+
encodedTransaction,
|
34922
|
+
includePreConfirmation: true
|
34923
|
+
});
|
33956
34924
|
this.#cacheInputs(
|
33957
34925
|
transactionRequest.inputs,
|
33958
34926
|
transactionRequest.getTransactionId(await this.getChainId())
|
@@ -34204,7 +35172,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34204
35172
|
}
|
34205
35173
|
const chainInfo = _Provider.chainInfoCache[this.urlWithoutAuth];
|
34206
35174
|
const {
|
34207
|
-
|
35175
|
+
latestBlock: {
|
35176
|
+
header: { consensusParametersVersion: previous }
|
35177
|
+
}
|
34208
35178
|
} = chainInfo;
|
34209
35179
|
const {
|
34210
35180
|
chain: {
|
@@ -34304,6 +35274,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34304
35274
|
* @param transactionCostParams - The transaction cost parameters (optional).
|
34305
35275
|
*
|
34306
35276
|
* @returns A promise that resolves to the transaction cost object.
|
35277
|
+
*
|
35278
|
+
* @deprecated Use provider.assembleTx instead
|
35279
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
34307
35280
|
*/
|
34308
35281
|
async getTransactionCost(transactionRequestLike, { signatureCallback, gasPrice: gasPriceParam } = {}) {
|
34309
35282
|
const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
|
@@ -34346,7 +35319,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34346
35319
|
}
|
34347
35320
|
({ rawReceipts, receipts, missingContractIds, outputVariables, dryRunStatus } = await this.estimateTxDependencies(txRequestClone, { gasPrice }));
|
34348
35321
|
if (dryRunStatus && "reason" in dryRunStatus) {
|
34349
|
-
throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus);
|
35322
|
+
throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus.reason);
|
34350
35323
|
}
|
34351
35324
|
const { maxGasPerTx } = await this.getGasConfig();
|
34352
35325
|
const pristineGasUsed = getGasUsedFromReceipts(receipts);
|
@@ -34379,6 +35352,102 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34379
35352
|
transactionSummary
|
34380
35353
|
};
|
34381
35354
|
}
|
35355
|
+
/**
|
35356
|
+
* Assembles a transaction by completely estimating and funding it.
|
35357
|
+
*
|
35358
|
+
* @param params - Parameters used to assemble the transaction.
|
35359
|
+
*
|
35360
|
+
* @returns The assembled transaction request, estimated gas price, and receipts
|
35361
|
+
*/
|
35362
|
+
async assembleTx(params) {
|
35363
|
+
const {
|
35364
|
+
request,
|
35365
|
+
reserveGas,
|
35366
|
+
resourcesIdsToIgnore,
|
35367
|
+
feePayerAccount,
|
35368
|
+
blockHorizon = 10,
|
35369
|
+
estimatePredicates = true,
|
35370
|
+
accountCoinQuantities = []
|
35371
|
+
} = params;
|
35372
|
+
const allAddresses = /* @__PURE__ */ new Set();
|
35373
|
+
const baseAssetId = await this.getBaseAssetId();
|
35374
|
+
let feePayerIndex = -1;
|
35375
|
+
let baseAssetChange;
|
35376
|
+
const requiredBalances = accountCoinQuantities.map((quantity, index) => {
|
35377
|
+
const { amount, assetId, account = feePayerAccount, changeOutputAccount } = quantity;
|
35378
|
+
const changeAccountAddress = changeOutputAccount ? changeOutputAccount.address.toB256() : account.address.toB256();
|
35379
|
+
allAddresses.add(account.address.toB256());
|
35380
|
+
const changePolicy = {
|
35381
|
+
change: changeAccountAddress
|
35382
|
+
};
|
35383
|
+
if (assetId === baseAssetId) {
|
35384
|
+
baseAssetChange = changePolicy.change;
|
35385
|
+
}
|
35386
|
+
if (account.address.equals(feePayerAccount.address)) {
|
35387
|
+
feePayerIndex = index;
|
35388
|
+
}
|
35389
|
+
const requiredBalance = {
|
35390
|
+
account: resolveAccountForAssembleTxParams(account),
|
35391
|
+
amount: bn(amount).toString(10),
|
35392
|
+
assetId,
|
35393
|
+
changePolicy
|
35394
|
+
};
|
35395
|
+
return requiredBalance;
|
35396
|
+
});
|
35397
|
+
if (feePayerIndex === -1) {
|
35398
|
+
allAddresses.add(feePayerAccount.address.toB256());
|
35399
|
+
const newLength = requiredBalances.push({
|
35400
|
+
account: resolveAccountForAssembleTxParams(feePayerAccount),
|
35401
|
+
amount: bn(0).toString(10),
|
35402
|
+
// Since the correct fee amount cannot be determined yet, we can use 0
|
35403
|
+
assetId: baseAssetId,
|
35404
|
+
changePolicy: {
|
35405
|
+
change: baseAssetChange || feePayerAccount.address.toB256()
|
35406
|
+
}
|
35407
|
+
});
|
35408
|
+
feePayerIndex = newLength - 1;
|
35409
|
+
}
|
35410
|
+
const excludeInput = await this.adjustResourcesToIgnoreForAddresses(
|
35411
|
+
Array.from(allAddresses),
|
35412
|
+
resourcesIdsToIgnore
|
35413
|
+
);
|
35414
|
+
const {
|
35415
|
+
assembleTx: { status, transaction: gqlTransaction, gasPrice }
|
35416
|
+
} = await this.operations.assembleTx({
|
35417
|
+
tx: hexlify(request.toTransactionBytes()),
|
35418
|
+
blockHorizon: String(blockHorizon),
|
35419
|
+
feeAddressIndex: String(feePayerIndex),
|
35420
|
+
requiredBalances,
|
35421
|
+
estimatePredicates,
|
35422
|
+
excludeInput,
|
35423
|
+
reserveGas: reserveGas ? reserveGas.toString(10) : void 0
|
35424
|
+
});
|
35425
|
+
if (status.type === "DryRunFailureStatus") {
|
35426
|
+
const parsedReceipts = status.receipts.map(deserializeReceipt);
|
35427
|
+
throw this.extractDryRunError(request, parsedReceipts, status.reason);
|
35428
|
+
}
|
35429
|
+
request.witnesses = gqlTransaction.witnesses || request.witnesses;
|
35430
|
+
request.inputs = gqlTransaction.inputs?.map(deserializeInput) || request.inputs;
|
35431
|
+
request.outputs = gqlTransaction.outputs?.map(deserializeOutput) || request.outputs;
|
35432
|
+
if (gqlTransaction.policies?.maxFee) {
|
35433
|
+
request.maxFee = bn(gqlTransaction.policies.maxFee);
|
35434
|
+
}
|
35435
|
+
if (gqlTransaction.scriptGasLimit) {
|
35436
|
+
request.gasLimit = bn(gqlTransaction.scriptGasLimit);
|
35437
|
+
}
|
35438
|
+
const rawReceipts = status.receipts;
|
35439
|
+
const chainId = await this.getChainId();
|
35440
|
+
request.updateState(chainId, "funded", {
|
35441
|
+
gasPrice: gasPrice.toString(),
|
35442
|
+
receipts: rawReceipts
|
35443
|
+
});
|
35444
|
+
return {
|
35445
|
+
assembledRequest: request,
|
35446
|
+
gasPrice: bn(gasPrice),
|
35447
|
+
receipts: status.receipts.map(deserializeReceipt),
|
35448
|
+
rawReceipts
|
35449
|
+
};
|
35450
|
+
}
|
34382
35451
|
/**
|
34383
35452
|
* Returns coins for the given owner.
|
34384
35453
|
*
|
@@ -34417,30 +35486,15 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34417
35486
|
*
|
34418
35487
|
* @param owner - The address to get resources for.
|
34419
35488
|
* @param quantities - The coin quantities to get.
|
34420
|
-
* @param
|
35489
|
+
* @param resourcesIdsToIgnore - IDs of excluded resources from the selection (optional).
|
34421
35490
|
* @returns A promise that resolves to the resources.
|
34422
35491
|
*/
|
34423
|
-
async getResourcesToSpend(owner, quantities,
|
35492
|
+
async getResourcesToSpend(owner, quantities, resourcesIdsToIgnore) {
|
34424
35493
|
const ownerAddress = new Address(owner);
|
34425
|
-
|
34426
|
-
|
34427
|
-
|
34428
|
-
|
34429
|
-
if (this.cache) {
|
34430
|
-
const cached = this.cache.getActiveData(ownerAddress.toB256());
|
34431
|
-
if (cached.utxos.length || cached.messages.length) {
|
34432
|
-
const {
|
34433
|
-
consensusParameters: {
|
34434
|
-
txParameters: { maxInputs }
|
34435
|
-
}
|
34436
|
-
} = await this.getChain();
|
34437
|
-
idsToExclude = adjustResourcesToExclude({
|
34438
|
-
userInput: idsToExclude,
|
34439
|
-
cached,
|
34440
|
-
maxInputs: maxInputs.toNumber()
|
34441
|
-
});
|
34442
|
-
}
|
34443
|
-
}
|
35494
|
+
const excludedIds = await this.adjustResourcesToIgnoreForAddresses(
|
35495
|
+
[ownerAddress.b256Address],
|
35496
|
+
resourcesIdsToIgnore
|
35497
|
+
);
|
34444
35498
|
const coinsQuery = {
|
34445
35499
|
owner: ownerAddress.toB256(),
|
34446
35500
|
queryPerAsset: quantities.map(coinQuantityfy).map(({ assetId, amount, max: maxPerAsset }) => ({
|
@@ -34448,7 +35502,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34448
35502
|
amount: (amount.eqn(0) ? bn(1) : amount).toString(10),
|
34449
35503
|
max: maxPerAsset ? maxPerAsset.toString(10) : void 0
|
34450
35504
|
})),
|
34451
|
-
excludedIds
|
35505
|
+
excludedIds
|
34452
35506
|
};
|
34453
35507
|
const result = await this.operations.getCoinsToSpend(coinsQuery);
|
34454
35508
|
const coins = result.coinsToSpend.flat().map((coin) => {
|
@@ -35015,11 +36069,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35015
36069
|
/**
|
35016
36070
|
* @hidden
|
35017
36071
|
*/
|
35018
|
-
extractDryRunError(transactionRequest, receipts,
|
35019
|
-
const status = dryRunStatus;
|
36072
|
+
extractDryRunError(transactionRequest, receipts, reason) {
|
35020
36073
|
let logs = [];
|
35021
36074
|
let groupedLogs = {};
|
35022
|
-
if (transactionRequest.abis) {
|
36075
|
+
if (transactionRequest.type === TransactionType.Script && transactionRequest.abis) {
|
35023
36076
|
({ logs, groupedLogs } = getAllDecodedLogs({
|
35024
36077
|
receipts,
|
35025
36078
|
mainAbi: transactionRequest.abis.main,
|
@@ -35030,7 +36083,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35030
36083
|
logs,
|
35031
36084
|
groupedLogs,
|
35032
36085
|
receipts,
|
35033
|
-
statusReason:
|
36086
|
+
statusReason: reason
|
35034
36087
|
});
|
35035
36088
|
}
|
35036
36089
|
/**
|
@@ -35057,6 +36110,45 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35057
36110
|
}
|
35058
36111
|
return transactionRequest;
|
35059
36112
|
}
|
36113
|
+
/**
|
36114
|
+
* @hidden
|
36115
|
+
*
|
36116
|
+
* This helper adjusts the resources to be excluded for a given set of addresses.
|
36117
|
+
* Supporting multiple addresses is important because of the `assembleTx` method,
|
36118
|
+
* which may be invoked with different addresses. It handles both messages and UTXOs,
|
36119
|
+
* ensuring the total number of inputs does not exceed the maximum allowed by the chain's
|
36120
|
+
* consensus parameters. The resources specified in the `resourcesIdsToIgnore` parameter have priority
|
36121
|
+
* over those retrieved from the cache.
|
36122
|
+
*/
|
36123
|
+
async adjustResourcesToIgnoreForAddresses(addresses, resourcesIdsToIgnore) {
|
36124
|
+
const final = {
|
36125
|
+
messages: resourcesIdsToIgnore?.messages?.map((nonce) => hexlify(nonce)) || [],
|
36126
|
+
utxos: resourcesIdsToIgnore?.utxos?.map((id) => hexlify(id)) || []
|
36127
|
+
};
|
36128
|
+
if (this.cache) {
|
36129
|
+
const cache2 = this.cache;
|
36130
|
+
const allCached = addresses.map((address) => cache2.getActiveData(address));
|
36131
|
+
const {
|
36132
|
+
consensusParameters: {
|
36133
|
+
txParameters: { maxInputs: maxInputsBn }
|
36134
|
+
}
|
36135
|
+
} = await this.getChain();
|
36136
|
+
const maxInputs = maxInputsBn.toNumber();
|
36137
|
+
for (let i = 0; i < allCached.length; i++) {
|
36138
|
+
let total = final.utxos.length + final.messages.length;
|
36139
|
+
if (total >= maxInputs) {
|
36140
|
+
break;
|
36141
|
+
}
|
36142
|
+
final.utxos = [...final.utxos, ...allCached[i].utxos.slice(0, maxInputs - total)];
|
36143
|
+
total = final.utxos.length + final.messages.length;
|
36144
|
+
if (total >= maxInputs) {
|
36145
|
+
break;
|
36146
|
+
}
|
36147
|
+
final.messages = [...final.messages, ...allCached[i].messages.slice(0, maxInputs - total)];
|
36148
|
+
}
|
36149
|
+
}
|
36150
|
+
return final;
|
36151
|
+
}
|
35060
36152
|
};
|
35061
36153
|
|
35062
36154
|
// src/test-utils/test-asset-id.ts
|
@@ -35082,20 +36174,29 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35082
36174
|
}
|
35083
36175
|
};
|
35084
36176
|
|
35085
|
-
// src/providers/utils/
|
35086
|
-
var
|
35087
|
-
const
|
35088
|
-
|
35089
|
-
|
35090
|
-
|
35091
|
-
|
35092
|
-
|
35093
|
-
|
35094
|
-
|
35095
|
-
|
35096
|
-
|
35097
|
-
|
35098
|
-
|
36177
|
+
// src/providers/utils/transaction-response-serialization.ts
|
36178
|
+
var deserializeTransactionResponseJson = /* @__PURE__ */ __name((json) => {
|
36179
|
+
const {
|
36180
|
+
id,
|
36181
|
+
abis,
|
36182
|
+
status,
|
36183
|
+
providerUrl,
|
36184
|
+
requestJson,
|
36185
|
+
providerCache,
|
36186
|
+
gqlTransaction,
|
36187
|
+
preConfirmationStatus
|
36188
|
+
} = json;
|
36189
|
+
const provider = new Provider(providerUrl, { cache: providerCache });
|
36190
|
+
const { chainId } = providerCache.chain.consensusParameters;
|
36191
|
+
const response = new TransactionResponse(id, provider, Number(chainId), abis);
|
36192
|
+
if (requestJson) {
|
36193
|
+
response.request = transactionRequestify(JSON.parse(requestJson));
|
36194
|
+
}
|
36195
|
+
response.status = status;
|
36196
|
+
response.gqlTransaction = gqlTransaction;
|
36197
|
+
response.preConfirmationStatus = preConfirmationStatus;
|
36198
|
+
return response;
|
36199
|
+
}, "deserializeTransactionResponseJson");
|
35099
36200
|
|
35100
36201
|
// src/types.ts
|
35101
36202
|
var AbstractAccount = class {
|
@@ -35141,6 +36242,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35141
36242
|
return { script, scriptData };
|
35142
36243
|
}, "assembleTransferToContractScript");
|
35143
36244
|
|
36245
|
+
// src/utils/split-coins-into-batches.ts
|
36246
|
+
var splitCoinsIntoBatches = /* @__PURE__ */ __name((coins, maxBatchLength) => {
|
36247
|
+
const batchesNum = Math.ceil(coins.length / maxBatchLength);
|
36248
|
+
const batches = [];
|
36249
|
+
for (let i = 0; i < batchesNum; i += 1) {
|
36250
|
+
const batchStart = i * maxBatchLength;
|
36251
|
+
const batchEnd = (i + 1) * maxBatchLength;
|
36252
|
+
batches.push(coins.slice(batchStart, batchEnd));
|
36253
|
+
}
|
36254
|
+
return batches;
|
36255
|
+
}, "splitCoinsIntoBatches");
|
36256
|
+
|
35144
36257
|
// src/account.ts
|
35145
36258
|
var MAX_FUNDING_ATTEMPTS = 5;
|
35146
36259
|
var Account = class extends AbstractAccount {
|
@@ -35207,11 +36320,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35207
36320
|
* Retrieves resources satisfying the spend query for the account.
|
35208
36321
|
*
|
35209
36322
|
* @param quantities - Quantities of resources to be obtained.
|
35210
|
-
* @param
|
36323
|
+
* @param resourcesIdsToIgnore - IDs of resources to be excluded from the query (optional).
|
35211
36324
|
* @returns A promise that resolves to an array of Resources.
|
35212
36325
|
*/
|
35213
|
-
async getResourcesToSpend(quantities,
|
35214
|
-
return this.provider.getResourcesToSpend(this.address, quantities,
|
36326
|
+
async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
|
36327
|
+
return this.provider.getResourcesToSpend(this.address, quantities, resourcesIdsToIgnore);
|
35215
36328
|
}
|
35216
36329
|
/**
|
35217
36330
|
* Retrieves coins owned by the account.
|
@@ -35256,6 +36369,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35256
36369
|
* @param request - The transaction request to fund.
|
35257
36370
|
* @param params - The estimated transaction parameters.
|
35258
36371
|
* @returns A promise that resolves to the funded transaction request.
|
36372
|
+
*
|
36373
|
+
* @deprecated Use provider.assembleTx instead
|
36374
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
35259
36375
|
*/
|
35260
36376
|
async fund(request, params) {
|
35261
36377
|
const {
|
@@ -35378,7 +36494,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35378
36494
|
amount,
|
35379
36495
|
assetId: assetId || await this.provider.getBaseAssetId()
|
35380
36496
|
});
|
35381
|
-
|
36497
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request);
|
36498
|
+
request = await setAndValidateGasAndFeeForAssembledTx({
|
36499
|
+
gasPrice,
|
36500
|
+
provider: this.provider,
|
36501
|
+
transactionRequest,
|
36502
|
+
setGasLimit: txParams?.gasLimit,
|
36503
|
+
setMaxFee: txParams?.maxFee
|
36504
|
+
});
|
35382
36505
|
return request;
|
35383
36506
|
}
|
35384
36507
|
/**
|
@@ -35404,7 +36527,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35404
36527
|
async batchTransfer(transferParams, txParams = {}) {
|
35405
36528
|
let request = new ScriptTransactionRequest(txParams);
|
35406
36529
|
request = this.addBatchTransfer(request, transferParams);
|
35407
|
-
|
36530
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request);
|
36531
|
+
request = await setAndValidateGasAndFeeForAssembledTx({
|
36532
|
+
gasPrice,
|
36533
|
+
provider: this.provider,
|
36534
|
+
transactionRequest,
|
36535
|
+
setGasLimit: txParams?.gasLimit,
|
36536
|
+
setMaxFee: txParams?.maxFee
|
36537
|
+
});
|
35408
36538
|
return this.sendTransaction(request, { estimateTxDependencies: false });
|
35409
36539
|
}
|
35410
36540
|
/**
|
@@ -35476,7 +36606,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35476
36606
|
const { script, scriptData } = await assembleTransferToContractScript(transferParams);
|
35477
36607
|
request.script = script;
|
35478
36608
|
request.scriptData = scriptData;
|
35479
|
-
|
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
|
36616
|
+
});
|
35480
36617
|
return this.sendTransaction(request);
|
35481
36618
|
}
|
35482
36619
|
/**
|
@@ -35504,16 +36641,144 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35504
36641
|
const baseAssetId = await this.provider.getBaseAssetId();
|
35505
36642
|
let request = new ScriptTransactionRequest(params);
|
35506
36643
|
const quantities = [{ amount: bn(amount), assetId: baseAssetId }];
|
35507
|
-
const
|
35508
|
-
request =
|
35509
|
-
|
35510
|
-
|
35511
|
-
|
35512
|
-
txParams
|
36644
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request, quantities);
|
36645
|
+
request = await setAndValidateGasAndFeeForAssembledTx({
|
36646
|
+
gasPrice,
|
36647
|
+
provider: this.provider,
|
36648
|
+
transactionRequest,
|
36649
|
+
setGasLimit: txParams?.gasLimit,
|
36650
|
+
setMaxFee: txParams?.maxFee
|
35513
36651
|
});
|
35514
|
-
await this.fund(request, txCost);
|
35515
36652
|
return this.sendTransaction(request);
|
35516
36653
|
}
|
36654
|
+
/**
|
36655
|
+
* Consolidates base asset UTXOs into fewer, larger ones.
|
36656
|
+
*
|
36657
|
+
* Retrieves a limited number of base asset coins (as defined by `Provider.RESOURCES_PAGE_SIZE_LIMIT`),
|
36658
|
+
* assembles consolidation transactions, and submits them to the network.
|
36659
|
+
*
|
36660
|
+
* Note: This method currently supports only the base asset.
|
36661
|
+
*
|
36662
|
+
* @param params - The parameters for coin consolidation, including the asset ID, mode, and output number.
|
36663
|
+
* @returns A promise that resolves to the response of the submitted transactions.
|
36664
|
+
* @throws Will throw an error if the asset is not a base asset as non-base asset consolidation is not implemented.
|
36665
|
+
*/
|
36666
|
+
async consolidateCoins(params) {
|
36667
|
+
const { assetId } = params;
|
36668
|
+
const { coins } = await this.getCoins(assetId);
|
36669
|
+
const baseAssetId = await this.provider.getBaseAssetId();
|
36670
|
+
const isBaseAsset = baseAssetId === assetId;
|
36671
|
+
let submitAll;
|
36672
|
+
const consolidationParams = {
|
36673
|
+
coins,
|
36674
|
+
mode: params.mode,
|
36675
|
+
outputNum: params.outputNum
|
36676
|
+
};
|
36677
|
+
if (isBaseAsset) {
|
36678
|
+
({ submitAll } = await this.assembleBaseAssetConsolidationTxs(consolidationParams));
|
36679
|
+
} else {
|
36680
|
+
throw new FuelError(
|
36681
|
+
ErrorCode.UNSUPPORTED_FEATURE,
|
36682
|
+
"Consolidation for non-base assets is not supported yet."
|
36683
|
+
);
|
36684
|
+
}
|
36685
|
+
return submitAll();
|
36686
|
+
}
|
36687
|
+
/**
|
36688
|
+
* Assembles transactions for consolidating base asset coins into fewer UTXOs.
|
36689
|
+
*
|
36690
|
+
* This method splits the provided coins into batches and creates transaction requests
|
36691
|
+
* to consolidate them. It calculates the necessary fee and sets up the transactions
|
36692
|
+
* to be submitted either in parallel (default) or sequentially.
|
36693
|
+
*
|
36694
|
+
* @param params - The parameters for assembling base asset consolidation transactions.
|
36695
|
+
*
|
36696
|
+
* @returns An object containing the assembled transactions, the total fee cost, and a callback to submit all transactions.
|
36697
|
+
*/
|
36698
|
+
async assembleBaseAssetConsolidationTxs(params) {
|
36699
|
+
const { coins, mode = "parallel", outputNum = 1 } = params;
|
36700
|
+
const baseAssetId = await this.provider.getBaseAssetId();
|
36701
|
+
this.validateConsolidationTxsCoins(coins, baseAssetId);
|
36702
|
+
const chainInfo = await this.provider.getChain();
|
36703
|
+
const maxInputsNumber = chainInfo.consensusParameters.txParameters.maxInputs.toNumber();
|
36704
|
+
let totalFeeCost = bn(0);
|
36705
|
+
const txs = [];
|
36706
|
+
const coinsBatches = splitCoinsIntoBatches(coins, maxInputsNumber);
|
36707
|
+
const gasPrice = await this.provider.estimateGasPrice(10);
|
36708
|
+
const consolidateMoreThanOneCoin = outputNum > 1;
|
36709
|
+
coinsBatches.filter((batch) => batch.length > 1).forEach((coinBatch) => {
|
36710
|
+
const request = new ScriptTransactionRequest({
|
36711
|
+
script: "0x"
|
36712
|
+
});
|
36713
|
+
request.addResources(coinBatch);
|
36714
|
+
if (consolidateMoreThanOneCoin) {
|
36715
|
+
Array.from({ length: outputNum - 1 }).forEach(() => {
|
36716
|
+
request.addCoinOutput(this.address, 0, baseAssetId);
|
36717
|
+
});
|
36718
|
+
}
|
36719
|
+
const minGas = request.calculateMinGas(chainInfo);
|
36720
|
+
const fee = calculateGasFee({
|
36721
|
+
gasPrice,
|
36722
|
+
gas: minGas,
|
36723
|
+
priceFactor: chainInfo.consensusParameters.feeParameters.gasPriceFactor,
|
36724
|
+
tip: request.tip
|
36725
|
+
});
|
36726
|
+
request.maxFee = fee;
|
36727
|
+
if (consolidateMoreThanOneCoin) {
|
36728
|
+
const total = request.inputs.filter(isRequestInputCoin).reduce((acc, input) => acc.add(input.amount), bn(0));
|
36729
|
+
const amountPerNewUtxo = total.div(outputNum + 1);
|
36730
|
+
request.outputs.forEach((output) => {
|
36731
|
+
if (output.type === OutputType.Coin) {
|
36732
|
+
output.amount = amountPerNewUtxo;
|
36733
|
+
}
|
36734
|
+
});
|
36735
|
+
}
|
36736
|
+
totalFeeCost = totalFeeCost.add(fee);
|
36737
|
+
txs.push(request);
|
36738
|
+
});
|
36739
|
+
const submitAll = this.prepareSubmitAll({ txs, mode });
|
36740
|
+
return { txs, totalFeeCost, submitAll };
|
36741
|
+
}
|
36742
|
+
/**
|
36743
|
+
* Prepares a function to submit all transactions either sequentially or in parallel.
|
36744
|
+
*
|
36745
|
+
* @param params - The parameters for preparing the submitAll callback.
|
36746
|
+
*
|
36747
|
+
* @returns A callback that, when called, submits all transactions and returns their results and any errors encountered.
|
36748
|
+
*/
|
36749
|
+
prepareSubmitAll = /* @__PURE__ */ __name((params) => {
|
36750
|
+
const { txs, mode = "sequential" } = params;
|
36751
|
+
return async () => {
|
36752
|
+
const txResponses = [];
|
36753
|
+
const errors2 = [];
|
36754
|
+
if (mode === "sequential") {
|
36755
|
+
for (const tx of txs) {
|
36756
|
+
try {
|
36757
|
+
const submit = await this.sendTransaction(tx);
|
36758
|
+
const response = await submit.waitForResult();
|
36759
|
+
txResponses.push(response);
|
36760
|
+
} catch (error2) {
|
36761
|
+
errors2.push(error2);
|
36762
|
+
}
|
36763
|
+
}
|
36764
|
+
} else {
|
36765
|
+
const results = await Promise.allSettled(
|
36766
|
+
txs.map(async (tx) => {
|
36767
|
+
const submit = await this.sendTransaction(tx);
|
36768
|
+
return submit.waitForResult();
|
36769
|
+
})
|
36770
|
+
);
|
36771
|
+
results.forEach((result) => {
|
36772
|
+
if (result.status === "fulfilled") {
|
36773
|
+
txResponses.push(result.value);
|
36774
|
+
} else {
|
36775
|
+
errors2.push(result.reason);
|
36776
|
+
}
|
36777
|
+
});
|
36778
|
+
}
|
36779
|
+
return { txResponses, errors: errors2 };
|
36780
|
+
};
|
36781
|
+
}, "prepareSubmitAll");
|
35517
36782
|
/**
|
35518
36783
|
* Returns a transaction cost to enable user
|
35519
36784
|
* to set gasLimit and also reserve balance amounts
|
@@ -35523,6 +36788,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35523
36788
|
* @param transactionCostParams - The transaction cost parameters (optional).
|
35524
36789
|
*
|
35525
36790
|
* @returns A promise that resolves to the transaction cost object.
|
36791
|
+
*
|
36792
|
+
* @deprecated Use provider.assembleTx instead
|
36793
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
35526
36794
|
*/
|
35527
36795
|
async getTransactionCost(transactionRequestLike, { signatureCallback, quantities = [], gasPrice } = {}) {
|
35528
36796
|
const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
|
@@ -35623,7 +36891,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35623
36891
|
transactionRequest,
|
35624
36892
|
params
|
35625
36893
|
);
|
35626
|
-
return typeof transaction === "string" ? this.provider.getTransactionResponse(transaction) : transaction;
|
36894
|
+
return typeof transaction === "string" ? this.provider.getTransactionResponse(transaction) : deserializeTransactionResponseJson(transaction);
|
35627
36895
|
}
|
35628
36896
|
if (estimateTxDependencies) {
|
35629
36897
|
await this.provider.estimateTxDependencies(transactionRequest);
|
@@ -35684,6 +36952,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35684
36952
|
} : void 0;
|
35685
36953
|
}
|
35686
36954
|
/** @hidden * */
|
36955
|
+
async assembleTx(transactionRequest, quantities = []) {
|
36956
|
+
const outputQuantities = transactionRequest.outputs.filter((o) => o.type === OutputType.Coin).map(({ amount, assetId }) => ({ assetId: String(assetId), amount: bn(amount) }));
|
36957
|
+
transactionRequest.gasLimit = bn(0);
|
36958
|
+
transactionRequest.maxFee = bn(0);
|
36959
|
+
const { assembledRequest, gasPrice } = await this.provider.assembleTx({
|
36960
|
+
request: transactionRequest,
|
36961
|
+
accountCoinQuantities: mergeQuantities(outputQuantities, quantities),
|
36962
|
+
feePayerAccount: this
|
36963
|
+
});
|
36964
|
+
return { transactionRequest: assembledRequest, gasPrice };
|
36965
|
+
}
|
36966
|
+
/** @hidden * */
|
35687
36967
|
validateTransferAmount(amount) {
|
35688
36968
|
if (bn(amount).lte(0)) {
|
35689
36969
|
throw new FuelError(
|
@@ -35731,6 +37011,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
35731
37011
|
}
|
35732
37012
|
return request;
|
35733
37013
|
}
|
37014
|
+
/** @hidden * */
|
37015
|
+
validateConsolidationTxsCoins(coins, assetId) {
|
37016
|
+
if (coins.length <= 1) {
|
37017
|
+
throw new FuelError(ErrorCode.NO_COINS_TO_CONSOLIDATE, "No coins to consolidate.");
|
37018
|
+
}
|
37019
|
+
if (!coins.every((c) => c.assetId === assetId)) {
|
37020
|
+
throw new FuelError(
|
37021
|
+
ErrorCode.COINS_ASSET_ID_MISMATCH,
|
37022
|
+
"All coins to consolidate must be from the same asset id."
|
37023
|
+
);
|
37024
|
+
}
|
37025
|
+
}
|
35734
37026
|
};
|
35735
37027
|
|
35736
37028
|
// src/wallet/keystore-wallet.ts
|
@@ -38800,23 +40092,26 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
38800
40092
|
),
|
38801
40093
|
port: nodeOptions.port || "0"
|
38802
40094
|
};
|
38803
|
-
let
|
40095
|
+
let killNode;
|
38804
40096
|
let url;
|
38805
40097
|
if (launchNodeServerPort) {
|
38806
40098
|
const serverUrl = `http://localhost:${launchNodeServerPort}`;
|
38807
40099
|
url = await (await fetch(serverUrl, { method: "POST", body: JSON.stringify(launchNodeOptions) })).text();
|
38808
|
-
|
40100
|
+
killNode = /* @__PURE__ */ __name(() => {
|
38809
40101
|
fetch(`${serverUrl}/cleanup/${url}`);
|
38810
|
-
}, "
|
40102
|
+
}, "killNode");
|
38811
40103
|
} else {
|
38812
40104
|
const settings = await launchNode(launchNodeOptions);
|
38813
40105
|
url = settings.url;
|
38814
|
-
|
40106
|
+
killNode = settings.cleanup;
|
38815
40107
|
}
|
40108
|
+
const cleanup = /* @__PURE__ */ __name(() => {
|
40109
|
+
Provider.clearChainAndNodeCaches(url);
|
40110
|
+
killNode();
|
40111
|
+
}, "cleanup");
|
38816
40112
|
let provider;
|
38817
40113
|
try {
|
38818
40114
|
provider = new Provider(url, providerOptions);
|
38819
|
-
await provider.init();
|
38820
40115
|
} catch (err) {
|
38821
40116
|
cleanup();
|
38822
40117
|
throw err;
|