@fuel-ts/account 0.100.3 → 0.100.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account.d.ts +71 -3
- package/dist/account.d.ts.map +1 -1
- package/dist/index.global.js +1467 -217
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +2165 -1005
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1976 -818
- package/dist/index.mjs.map +1 -1
- package/dist/predicate/predicate.d.ts +9 -4
- package/dist/predicate/predicate.d.ts.map +1 -1
- package/dist/providers/__generated__/operations.d.ts +1183 -87
- package/dist/providers/__generated__/operations.d.ts.map +1 -1
- package/dist/providers/assemble-tx-helpers.d.ts +39 -0
- package/dist/providers/assemble-tx-helpers.d.ts.map +1 -0
- package/dist/providers/fuel-graphql-subscriber.d.ts +28 -0
- package/dist/providers/fuel-graphql-subscriber.d.ts.map +1 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/provider.d.ts +80 -6
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/providers/resource.d.ts +4 -1
- package/dist/providers/resource.d.ts.map +1 -1
- package/dist/providers/transaction-request/helpers.d.ts +3 -3
- package/dist/providers/transaction-request/helpers.d.ts.map +1 -1
- package/dist/providers/transaction-request/input.d.ts +2 -0
- package/dist/providers/transaction-request/input.d.ts.map +1 -1
- package/dist/providers/transaction-request/output.d.ts +6 -0
- package/dist/providers/transaction-request/output.d.ts.map +1 -1
- package/dist/providers/transaction-request/script-transaction-request.d.ts +11 -0
- package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-response/transaction-response.d.ts +38 -11
- package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +12 -1
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
- package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
- package/dist/providers/transaction-summary/status.d.ts +16 -2
- package/dist/providers/transaction-summary/status.d.ts.map +1 -1
- package/dist/providers/transaction-summary/types.d.ts +85 -4
- package/dist/providers/transaction-summary/types.d.ts.map +1 -1
- package/dist/providers/utils/handle-gql-error-message.d.ts.map +1 -1
- package/dist/providers/utils/index.d.ts +1 -0
- package/dist/providers/utils/index.d.ts.map +1 -1
- package/dist/providers/utils/parse-graphql-response.d.ts +12 -0
- package/dist/providers/utils/parse-graphql-response.d.ts.map +1 -0
- package/dist/providers/utils/serialization.d.ts +9 -0
- package/dist/providers/utils/serialization.d.ts.map +1 -1
- package/dist/test-utils/launchNode.d.ts.map +1 -1
- package/dist/test-utils/setup-test-provider-and-wallets.d.ts.map +1 -1
- package/dist/test-utils.global.js +1461 -201
- package/dist/test-utils.global.js.map +1 -1
- package/dist/test-utils.js +2046 -891
- package/dist/test-utils.js.map +1 -1
- package/dist/test-utils.mjs +1892 -731
- package/dist/test-utils.mjs.map +1 -1
- package/dist/utils/deployScriptOrPredicate.d.ts.map +1 -1
- package/dist/utils/split-coins-into-batches.d.ts +3 -0
- package/dist/utils/split-coins-into-batches.d.ts.map +1 -0
- package/package.json +15 -15
- package/dist/providers/utils/helpers.d.ts +0 -14
- package/dist/providers/utils/helpers.d.ts.map +0 -1
package/dist/index.global.js
CHANGED
@@ -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();
|
@@ -17889,9 +17989,9 @@
|
|
17889
17989
|
var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name", { value, configurable: true }), "__name");
|
17890
17990
|
function getBuiltinVersions() {
|
17891
17991
|
return {
|
17892
|
-
FUEL_CORE: "0.
|
17893
|
-
FORC: "0.
|
17894
|
-
FUELS: "0.100.
|
17992
|
+
FUEL_CORE: "0.43.1",
|
17993
|
+
FORC: "0.68.1",
|
17994
|
+
FUELS: "0.100.4"
|
17895
17995
|
};
|
17896
17996
|
}
|
17897
17997
|
__name(getBuiltinVersions, "getBuiltinVersions");
|
@@ -18044,6 +18144,8 @@ This unreleased fuel-core build may include features and updates not yet support
|
|
18044
18144
|
ErrorCode2["FUNDS_TOO_LOW"] = "funds-too-low";
|
18045
18145
|
ErrorCode2["MAX_OUTPUTS_EXCEEDED"] = "max-outputs-exceeded";
|
18046
18146
|
ErrorCode2["ASSET_BURN_DETECTED"] = "asset-burn-detected";
|
18147
|
+
ErrorCode2["CHANGE_OUTPUT_COLLISION"] = "change-output-collision";
|
18148
|
+
ErrorCode2["DUPLICATE_CHANGE_OUTPUT_ACCOUNT"] = "duplicate-change-output-account";
|
18047
18149
|
ErrorCode2["INVALID_RECEIPT_TYPE"] = "invalid-receipt-type";
|
18048
18150
|
ErrorCode2["INVALID_WORD_LIST"] = "invalid-word-list";
|
18049
18151
|
ErrorCode2["INVALID_MNEMONIC"] = "invalid-mnemonic";
|
@@ -18053,9 +18155,12 @@ This unreleased fuel-core build may include features and updates not yet support
|
|
18053
18155
|
ErrorCode2["INVALID_PASSWORD"] = "invalid-password";
|
18054
18156
|
ErrorCode2["ACCOUNT_REQUIRED"] = "account-required";
|
18055
18157
|
ErrorCode2["UNLOCKED_WALLET_REQUIRED"] = "unlocked-wallet-required";
|
18158
|
+
ErrorCode2["NO_COINS_TO_CONSOLIDATE"] = "no-coins-to-consolidate";
|
18159
|
+
ErrorCode2["COINS_ASSET_ID_MISMATCH"] = "coins-asset-id-mismatch";
|
18056
18160
|
ErrorCode2["ASSET_NOT_FOUND"] = "asset-not-found";
|
18057
18161
|
ErrorCode2["NUMBER_TOO_BIG"] = "number-too-big";
|
18058
18162
|
ErrorCode2["ERROR_BUILDING_BLOCK_EXPLORER_URL"] = "error-building-block-explorer-url";
|
18163
|
+
ErrorCode2["RPC_CONSISTENCY"] = "rpc-consistency";
|
18059
18164
|
ErrorCode2["VITEPRESS_PLUGIN_ERROR"] = "vitepress-plugin-error";
|
18060
18165
|
ErrorCode2["SCRIPT_REVERTED"] = "script-reverted";
|
18061
18166
|
ErrorCode2["SCRIPT_RETURN_INVALID_TYPE"] = "script-return-invalid-type";
|
@@ -27014,6 +27119,83 @@ spurious results.`);
|
|
27014
27119
|
var lib_default2 = gql;
|
27015
27120
|
|
27016
27121
|
// src/providers/__generated__/operations.ts
|
27122
|
+
var InputCoinFragmentDoc = lib_default2`
|
27123
|
+
fragment InputCoinFragment on InputCoin {
|
27124
|
+
type: __typename
|
27125
|
+
utxoId
|
27126
|
+
owner
|
27127
|
+
amount
|
27128
|
+
assetId
|
27129
|
+
txPointer
|
27130
|
+
coinWitnessIndex: witnessIndex
|
27131
|
+
predicateGasUsed
|
27132
|
+
predicate
|
27133
|
+
predicateData
|
27134
|
+
}
|
27135
|
+
`;
|
27136
|
+
var InputMessageFragmentDoc = lib_default2`
|
27137
|
+
fragment InputMessageFragment on InputMessage {
|
27138
|
+
type: __typename
|
27139
|
+
sender
|
27140
|
+
recipient
|
27141
|
+
amount
|
27142
|
+
nonce
|
27143
|
+
messageWitnessIndex: witnessIndex
|
27144
|
+
predicateGasUsed
|
27145
|
+
data
|
27146
|
+
predicate
|
27147
|
+
predicateData
|
27148
|
+
}
|
27149
|
+
`;
|
27150
|
+
var InputContractFragmentDoc = lib_default2`
|
27151
|
+
fragment InputContractFragment on InputContract {
|
27152
|
+
type: __typename
|
27153
|
+
utxoId
|
27154
|
+
balanceRoot
|
27155
|
+
stateRoot
|
27156
|
+
txPointer
|
27157
|
+
contractId
|
27158
|
+
}
|
27159
|
+
`;
|
27160
|
+
var OutputCoinFragmentDoc = lib_default2`
|
27161
|
+
fragment OutputCoinFragment on CoinOutput {
|
27162
|
+
type: __typename
|
27163
|
+
to
|
27164
|
+
amount
|
27165
|
+
assetId
|
27166
|
+
}
|
27167
|
+
`;
|
27168
|
+
var OutputContractFragmentDoc = lib_default2`
|
27169
|
+
fragment OutputContractFragment on ContractOutput {
|
27170
|
+
type: __typename
|
27171
|
+
inputIndex
|
27172
|
+
balanceRoot
|
27173
|
+
stateRoot
|
27174
|
+
}
|
27175
|
+
`;
|
27176
|
+
var OutputChangeFragmentDoc = lib_default2`
|
27177
|
+
fragment OutputChangeFragment on ChangeOutput {
|
27178
|
+
type: __typename
|
27179
|
+
to
|
27180
|
+
amount
|
27181
|
+
assetId
|
27182
|
+
}
|
27183
|
+
`;
|
27184
|
+
var OutputVariableFragmentDoc = lib_default2`
|
27185
|
+
fragment OutputVariableFragment on VariableOutput {
|
27186
|
+
type: __typename
|
27187
|
+
to
|
27188
|
+
amount
|
27189
|
+
assetId
|
27190
|
+
}
|
27191
|
+
`;
|
27192
|
+
var OutputContractCreatedFragmentDoc = lib_default2`
|
27193
|
+
fragment OutputContractCreatedFragment on ContractCreated {
|
27194
|
+
type: __typename
|
27195
|
+
contract
|
27196
|
+
stateRoot
|
27197
|
+
}
|
27198
|
+
`;
|
27017
27199
|
var SubmittedStatusFragmentDoc = lib_default2`
|
27018
27200
|
fragment SubmittedStatusFragment on SubmittedStatus {
|
27019
27201
|
type: __typename
|
@@ -27142,6 +27324,87 @@ spurious results.`);
|
|
27142
27324
|
reason
|
27143
27325
|
}
|
27144
27326
|
`;
|
27327
|
+
var PreconfirmationSuccessStatusFragmentDoc = lib_default2`
|
27328
|
+
fragment PreconfirmationSuccessStatusFragment on PreconfirmationSuccessStatus {
|
27329
|
+
type: __typename
|
27330
|
+
totalGas
|
27331
|
+
totalFee
|
27332
|
+
resolvedOutputs {
|
27333
|
+
utxoId
|
27334
|
+
output {
|
27335
|
+
type: __typename
|
27336
|
+
... on CoinOutput {
|
27337
|
+
to
|
27338
|
+
amount
|
27339
|
+
assetId
|
27340
|
+
}
|
27341
|
+
... on ContractOutput {
|
27342
|
+
inputIndex
|
27343
|
+
balanceRoot
|
27344
|
+
stateRoot
|
27345
|
+
}
|
27346
|
+
... on ChangeOutput {
|
27347
|
+
to
|
27348
|
+
amount
|
27349
|
+
assetId
|
27350
|
+
}
|
27351
|
+
... on VariableOutput {
|
27352
|
+
to
|
27353
|
+
amount
|
27354
|
+
assetId
|
27355
|
+
}
|
27356
|
+
... on ContractCreated {
|
27357
|
+
contract
|
27358
|
+
stateRoot
|
27359
|
+
}
|
27360
|
+
}
|
27361
|
+
}
|
27362
|
+
preconfirmationReceipts: receipts {
|
27363
|
+
...receiptFragment
|
27364
|
+
}
|
27365
|
+
}
|
27366
|
+
${ReceiptFragmentDoc}`;
|
27367
|
+
var PreconfirmationFailureStatusFragmentDoc = lib_default2`
|
27368
|
+
fragment PreconfirmationFailureStatusFragment on PreconfirmationFailureStatus {
|
27369
|
+
type: __typename
|
27370
|
+
reason
|
27371
|
+
totalGas
|
27372
|
+
totalFee
|
27373
|
+
resolvedOutputs {
|
27374
|
+
utxoId
|
27375
|
+
output {
|
27376
|
+
type: __typename
|
27377
|
+
... on CoinOutput {
|
27378
|
+
to
|
27379
|
+
amount
|
27380
|
+
assetId
|
27381
|
+
}
|
27382
|
+
... on ContractOutput {
|
27383
|
+
inputIndex
|
27384
|
+
balanceRoot
|
27385
|
+
stateRoot
|
27386
|
+
}
|
27387
|
+
... on ChangeOutput {
|
27388
|
+
to
|
27389
|
+
amount
|
27390
|
+
assetId
|
27391
|
+
}
|
27392
|
+
... on VariableOutput {
|
27393
|
+
to
|
27394
|
+
amount
|
27395
|
+
assetId
|
27396
|
+
}
|
27397
|
+
... on ContractCreated {
|
27398
|
+
contract
|
27399
|
+
stateRoot
|
27400
|
+
}
|
27401
|
+
}
|
27402
|
+
}
|
27403
|
+
preconfirmationReceipts: receipts {
|
27404
|
+
...receiptFragment
|
27405
|
+
}
|
27406
|
+
}
|
27407
|
+
${ReceiptFragmentDoc}`;
|
27145
27408
|
var TransactionStatusSubscriptionFragmentDoc = lib_default2`
|
27146
27409
|
fragment transactionStatusSubscriptionFragment on TransactionStatus {
|
27147
27410
|
... on SubmittedStatus {
|
@@ -27162,12 +27425,20 @@ spurious results.`);
|
|
27162
27425
|
... on SqueezedOutStatus {
|
27163
27426
|
...SqueezedOutStatusFragment
|
27164
27427
|
}
|
27428
|
+
... on PreconfirmationSuccessStatus {
|
27429
|
+
...PreconfirmationSuccessStatusFragment
|
27430
|
+
}
|
27431
|
+
... on PreconfirmationFailureStatus {
|
27432
|
+
...PreconfirmationFailureStatusFragment
|
27433
|
+
}
|
27165
27434
|
}
|
27166
27435
|
${SubmittedStatusFragmentDoc}
|
27167
27436
|
${SuccessStatusWithBlockIdFragmentDoc}
|
27168
27437
|
${MalleableTransactionFieldsFragmentDoc}
|
27169
27438
|
${FailureStatusWithBlockIdFragmentDoc}
|
27170
|
-
${SqueezedOutStatusFragmentDoc}
|
27439
|
+
${SqueezedOutStatusFragmentDoc}
|
27440
|
+
${PreconfirmationSuccessStatusFragmentDoc}
|
27441
|
+
${PreconfirmationFailureStatusFragmentDoc}`;
|
27171
27442
|
var TransactionStatusFragmentDoc = lib_default2`
|
27172
27443
|
fragment transactionStatusFragment on TransactionStatus {
|
27173
27444
|
... on SubmittedStatus {
|
@@ -27219,6 +27490,23 @@ ${SqueezedOutStatusFragmentDoc}`;
|
|
27219
27490
|
}
|
27220
27491
|
}
|
27221
27492
|
${InputEstimatePredicatesFragmentDoc}`;
|
27493
|
+
var DryRunFailureAssembleTxFragmentDoc = lib_default2`
|
27494
|
+
fragment dryRunFailureAssembleTxFragment on DryRunFailureStatus {
|
27495
|
+
type: __typename
|
27496
|
+
reason
|
27497
|
+
receipts {
|
27498
|
+
...receiptFragment
|
27499
|
+
}
|
27500
|
+
}
|
27501
|
+
${ReceiptFragmentDoc}`;
|
27502
|
+
var DryRunSuccessAssembleTxFragmentDoc = lib_default2`
|
27503
|
+
fragment dryRunSuccessAssembleTxFragment on DryRunSuccessStatus {
|
27504
|
+
type: __typename
|
27505
|
+
receipts {
|
27506
|
+
...receiptFragment
|
27507
|
+
}
|
27508
|
+
}
|
27509
|
+
${ReceiptFragmentDoc}`;
|
27222
27510
|
var DryRunFailureStatusFragmentDoc = lib_default2`
|
27223
27511
|
fragment dryRunFailureStatusFragment on DryRunFailureStatus {
|
27224
27512
|
type: __typename
|
@@ -27575,13 +27863,21 @@ ${NodeInfoFragmentDoc}`;
|
|
27575
27863
|
... on SqueezedOutStatus {
|
27576
27864
|
...SqueezedOutStatusFragment
|
27577
27865
|
}
|
27866
|
+
... on PreconfirmationSuccessStatus {
|
27867
|
+
...PreconfirmationSuccessStatusFragment
|
27868
|
+
}
|
27869
|
+
... on PreconfirmationFailureStatus {
|
27870
|
+
...PreconfirmationFailureStatusFragment
|
27871
|
+
}
|
27578
27872
|
}
|
27579
27873
|
}
|
27580
27874
|
}
|
27581
27875
|
${SubmittedStatusFragmentDoc}
|
27582
27876
|
${SuccessStatusWithBlockIdFragmentDoc}
|
27583
27877
|
${FailureStatusWithBlockIdFragmentDoc}
|
27584
|
-
${SqueezedOutStatusFragmentDoc}
|
27878
|
+
${SqueezedOutStatusFragmentDoc}
|
27879
|
+
${PreconfirmationSuccessStatusFragmentDoc}
|
27880
|
+
${PreconfirmationFailureStatusFragmentDoc}`;
|
27585
27881
|
var GetTransactionsDocument = lib_default2`
|
27586
27882
|
query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
|
27587
27883
|
transactions(after: $after, before: $before, first: $first, last: $last) {
|
@@ -27872,6 +28168,77 @@ ${GetMessageFragmentDoc}`;
|
|
27872
28168
|
}
|
27873
28169
|
}
|
27874
28170
|
`;
|
28171
|
+
var AssembleTxDocument = lib_default2`
|
28172
|
+
query assembleTx($tx: HexString!, $blockHorizon: U32!, $requiredBalances: [RequiredBalance!]!, $feeAddressIndex: U16!, $excludeInput: ExcludeInput, $estimatePredicates: Boolean, $reserveGas: U64) {
|
28173
|
+
assembleTx(
|
28174
|
+
tx: $tx
|
28175
|
+
blockHorizon: $blockHorizon
|
28176
|
+
requiredBalances: $requiredBalances
|
28177
|
+
feeAddressIndex: $feeAddressIndex
|
28178
|
+
excludeInput: $excludeInput
|
28179
|
+
estimatePredicates: $estimatePredicates
|
28180
|
+
reserveGas: $reserveGas
|
28181
|
+
) {
|
28182
|
+
transaction {
|
28183
|
+
id
|
28184
|
+
inputs {
|
28185
|
+
... on InputCoin {
|
28186
|
+
...InputCoinFragment
|
28187
|
+
}
|
28188
|
+
... on InputContract {
|
28189
|
+
...InputContractFragment
|
28190
|
+
}
|
28191
|
+
... on InputMessage {
|
28192
|
+
...InputMessageFragment
|
28193
|
+
}
|
28194
|
+
}
|
28195
|
+
outputs {
|
28196
|
+
... on CoinOutput {
|
28197
|
+
...OutputCoinFragment
|
28198
|
+
}
|
28199
|
+
... on ContractOutput {
|
28200
|
+
...OutputContractFragment
|
28201
|
+
}
|
28202
|
+
... on ChangeOutput {
|
28203
|
+
...OutputChangeFragment
|
28204
|
+
}
|
28205
|
+
... on VariableOutput {
|
28206
|
+
...OutputVariableFragment
|
28207
|
+
}
|
28208
|
+
... on ContractCreated {
|
28209
|
+
...OutputContractCreatedFragment
|
28210
|
+
}
|
28211
|
+
}
|
28212
|
+
policies {
|
28213
|
+
tip
|
28214
|
+
witnessLimit
|
28215
|
+
maturity
|
28216
|
+
maxFee
|
28217
|
+
}
|
28218
|
+
witnesses
|
28219
|
+
scriptGasLimit
|
28220
|
+
}
|
28221
|
+
status {
|
28222
|
+
... on DryRunFailureStatus {
|
28223
|
+
...dryRunFailureAssembleTxFragment
|
28224
|
+
}
|
28225
|
+
... on DryRunSuccessStatus {
|
28226
|
+
...dryRunSuccessAssembleTxFragment
|
28227
|
+
}
|
28228
|
+
}
|
28229
|
+
gasPrice
|
28230
|
+
}
|
28231
|
+
}
|
28232
|
+
${InputCoinFragmentDoc}
|
28233
|
+
${InputContractFragmentDoc}
|
28234
|
+
${InputMessageFragmentDoc}
|
28235
|
+
${OutputCoinFragmentDoc}
|
28236
|
+
${OutputContractFragmentDoc}
|
28237
|
+
${OutputChangeFragmentDoc}
|
28238
|
+
${OutputVariableFragmentDoc}
|
28239
|
+
${OutputContractCreatedFragmentDoc}
|
28240
|
+
${DryRunFailureAssembleTxFragmentDoc}
|
28241
|
+
${DryRunSuccessAssembleTxFragmentDoc}`;
|
27875
28242
|
var DryRunDocument = lib_default2`
|
27876
28243
|
mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean, $gasPrice: U64) {
|
27877
28244
|
dryRun(
|
@@ -27930,15 +28297,22 @@ ${GetMessageFragmentDoc}`;
|
|
27930
28297
|
}
|
27931
28298
|
`;
|
27932
28299
|
var SubmitAndAwaitStatusDocument = lib_default2`
|
27933
|
-
subscription submitAndAwaitStatus($encodedTransaction: HexString
|
27934
|
-
submitAndAwaitStatus(
|
28300
|
+
subscription submitAndAwaitStatus($encodedTransaction: HexString!, $estimatePredicates: Boolean, $includePreConfirmation: Boolean) {
|
28301
|
+
submitAndAwaitStatus(
|
28302
|
+
tx: $encodedTransaction
|
28303
|
+
estimatePredicates: $estimatePredicates
|
28304
|
+
includePreconfirmation: $includePreConfirmation
|
28305
|
+
) {
|
27935
28306
|
...transactionStatusSubscriptionFragment
|
27936
28307
|
}
|
27937
28308
|
}
|
27938
28309
|
${TransactionStatusSubscriptionFragmentDoc}`;
|
27939
28310
|
var StatusChangeDocument = lib_default2`
|
27940
|
-
subscription statusChange($transactionId: TransactionId
|
27941
|
-
statusChange(
|
28311
|
+
subscription statusChange($transactionId: TransactionId!, $includePreConfirmation: Boolean) {
|
28312
|
+
statusChange(
|
28313
|
+
id: $transactionId
|
28314
|
+
includePreconfirmation: $includePreConfirmation
|
28315
|
+
) {
|
27942
28316
|
...transactionStatusSubscriptionFragment
|
27943
28317
|
}
|
27944
28318
|
}
|
@@ -28041,6 +28415,9 @@ ${GetMessageFragmentDoc}`;
|
|
28041
28415
|
getAssetDetails(variables, options) {
|
28042
28416
|
return requester(GetAssetDetailsDocument, variables, options);
|
28043
28417
|
},
|
28418
|
+
assembleTx(variables, options) {
|
28419
|
+
return requester(AssembleTxDocument, variables, options);
|
28420
|
+
},
|
28044
28421
|
dryRun(variables, options) {
|
28045
28422
|
return requester(DryRunDocument, variables, options);
|
28046
28423
|
},
|
@@ -28069,9 +28446,67 @@ ${GetMessageFragmentDoc}`;
|
|
28069
28446
|
}
|
28070
28447
|
__name(getSdk, "getSdk");
|
28071
28448
|
|
28449
|
+
// src/providers/assemble-tx-helpers.ts
|
28450
|
+
var resolveAccountForAssembleTxParams = /* @__PURE__ */ __name((account) => {
|
28451
|
+
const assembleTxAccount = {};
|
28452
|
+
const accountIsPredicate = "bytes" in account;
|
28453
|
+
if (accountIsPredicate) {
|
28454
|
+
assembleTxAccount.predicate = {
|
28455
|
+
predicate: hexlify(account.bytes),
|
28456
|
+
predicateAddress: account.address.toB256(),
|
28457
|
+
predicateData: hexlify(account.getPredicateData())
|
28458
|
+
};
|
28459
|
+
} else {
|
28460
|
+
assembleTxAccount.address = account.address.toB256();
|
28461
|
+
}
|
28462
|
+
return assembleTxAccount;
|
28463
|
+
}, "resolveAccountForAssembleTxParams");
|
28464
|
+
var setAndValidateGasAndFeeForAssembledTx = /* @__PURE__ */ __name(async (params) => {
|
28465
|
+
const { gasPrice, transactionRequest, setGasLimit, setMaxFee, provider } = params;
|
28466
|
+
const gasLimitSpecified = isDefined(setGasLimit);
|
28467
|
+
const maxFeeSpecified = isDefined(setMaxFee);
|
28468
|
+
const isScriptTx = transactionRequest.type === TransactionType.Script;
|
28469
|
+
if (gasLimitSpecified && isScriptTx) {
|
28470
|
+
const requiredGasLimit = transactionRequest.gasLimit;
|
28471
|
+
if (bn(setGasLimit).lt(bn(requiredGasLimit))) {
|
28472
|
+
throw new FuelError(
|
28473
|
+
ErrorCode.GAS_LIMIT_TOO_LOW,
|
28474
|
+
`Gas limit '${setGasLimit}' is lower than the required: '${requiredGasLimit}'.`
|
28475
|
+
);
|
28476
|
+
}
|
28477
|
+
transactionRequest.gasLimit = bn(setGasLimit);
|
28478
|
+
}
|
28479
|
+
if (maxFeeSpecified) {
|
28480
|
+
const requiredMaxFee = transactionRequest.maxFee;
|
28481
|
+
if (bn(setMaxFee).lt(requiredMaxFee)) {
|
28482
|
+
throw new FuelError(
|
28483
|
+
ErrorCode.MAX_FEE_TOO_LOW,
|
28484
|
+
`Max fee '${setMaxFee}' is lower than the required: '${requiredMaxFee}'.`
|
28485
|
+
);
|
28486
|
+
}
|
28487
|
+
transactionRequest.maxFee = bn(setMaxFee);
|
28488
|
+
}
|
28489
|
+
if (gasLimitSpecified && !maxFeeSpecified) {
|
28490
|
+
const { maxFee: feeForGasPrice } = await provider.estimateTxGasAndFee({
|
28491
|
+
transactionRequest,
|
28492
|
+
gasPrice
|
28493
|
+
});
|
28494
|
+
transactionRequest.maxFee = feeForGasPrice;
|
28495
|
+
}
|
28496
|
+
return transactionRequest;
|
28497
|
+
}, "setAndValidateGasAndFeeForAssembledTx");
|
28498
|
+
|
28072
28499
|
// src/providers/utils/handle-gql-error-message.ts
|
28500
|
+
var gqlErrorMessage = {
|
28501
|
+
RPC_CONSISTENCY: /The required fuel block height is higher than the current block height. Required: \d+, Current: \d+/,
|
28502
|
+
NOT_ENOUGH_COINS_MAX_COINS: /the target cannot be met due to no coins available or exceeding the \d+ coin limit./,
|
28503
|
+
ASSET_NOT_FOUND: /resource was not found in table/,
|
28504
|
+
MULTIPLE_CHANGE_POLICIES: /The asset ([a-fA-F0-9]{64}) has multiple change policies/,
|
28505
|
+
DUPLICATE_CHANGE_OUTPUT_ACCOUNT: /required balances contain duplicate \(asset, account\) pair/,
|
28506
|
+
INSUFFICIENT_FEE_AMOUNT: /InsufficientFeeAmount { expected: (\d+), provided: (\d+) }/
|
28507
|
+
};
|
28073
28508
|
var mapGqlErrorMessage = /* @__PURE__ */ __name((error2) => {
|
28074
|
-
if (
|
28509
|
+
if (gqlErrorMessage.NOT_ENOUGH_COINS_MAX_COINS.test(error2.message)) {
|
28075
28510
|
return new FuelError(
|
28076
28511
|
ErrorCode.INSUFFICIENT_FUNDS_OR_MAX_COINS,
|
28077
28512
|
`Insufficient funds or too many small value coins. Consider combining UTXOs.`,
|
@@ -28079,7 +28514,25 @@ ${GetMessageFragmentDoc}`;
|
|
28079
28514
|
error2
|
28080
28515
|
);
|
28081
28516
|
}
|
28082
|
-
if (
|
28517
|
+
if (gqlErrorMessage.MULTIPLE_CHANGE_POLICIES.test(error2.message)) {
|
28518
|
+
const match = error2.message.match(/asset ([a-fA-F0-9]{64})/);
|
28519
|
+
const assetId = match?.[1] || "";
|
28520
|
+
return new FuelError(
|
28521
|
+
ErrorCode.CHANGE_OUTPUT_COLLISION,
|
28522
|
+
`OutputChange address for asset 0x${assetId} differs between transaction request and assembleTx parameters.`,
|
28523
|
+
{},
|
28524
|
+
error2
|
28525
|
+
);
|
28526
|
+
}
|
28527
|
+
if (gqlErrorMessage.DUPLICATE_CHANGE_OUTPUT_ACCOUNT.test(error2.message)) {
|
28528
|
+
return new FuelError(
|
28529
|
+
ErrorCode.DUPLICATE_CHANGE_OUTPUT_ACCOUNT,
|
28530
|
+
`The parameter 'accountCoinQuantities' of assembleTx contains duplicate entries for the same assetId with different 'changeOutputAccount'.`,
|
28531
|
+
{},
|
28532
|
+
error2
|
28533
|
+
);
|
28534
|
+
}
|
28535
|
+
if (gqlErrorMessage.ASSET_NOT_FOUND.test(error2.message)) {
|
28083
28536
|
return new FuelError(
|
28084
28537
|
ErrorCode.ASSET_NOT_FOUND,
|
28085
28538
|
`Asset not found for given asset id.`,
|
@@ -28087,6 +28540,13 @@ ${GetMessageFragmentDoc}`;
|
|
28087
28540
|
error2
|
28088
28541
|
);
|
28089
28542
|
}
|
28543
|
+
if (gqlErrorMessage.RPC_CONSISTENCY.test(error2.message)) {
|
28544
|
+
return new FuelError(ErrorCode.RPC_CONSISTENCY, error2.message, {}, error2);
|
28545
|
+
}
|
28546
|
+
if (gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT.test(error2.message)) {
|
28547
|
+
const match = error2.message.match(gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT);
|
28548
|
+
return new FuelError(ErrorCode.FUNDS_TOO_LOW, match?.[0] || error2.message, {}, error2);
|
28549
|
+
}
|
28090
28550
|
return new FuelError(ErrorCode.INVALID_REQUEST, error2.message, {}, error2);
|
28091
28551
|
}, "mapGqlErrorMessage");
|
28092
28552
|
var mapGqlErrorWithIncompatibleNodeVersion = /* @__PURE__ */ __name((error2, incompatibleNodeVersionMessage) => {
|
@@ -28119,8 +28579,9 @@ ${incompatibleNodeVersionMessage}`,
|
|
28119
28579
|
|
28120
28580
|
// src/providers/fuel-graphql-subscriber.ts
|
28121
28581
|
var FuelGraphqlSubscriber = class _FuelGraphqlSubscriber {
|
28122
|
-
constructor(stream) {
|
28582
|
+
constructor(stream, onEvent) {
|
28123
28583
|
this.stream = stream;
|
28584
|
+
this.onEvent = onEvent;
|
28124
28585
|
}
|
28125
28586
|
static {
|
28126
28587
|
__name(this, "FuelGraphqlSubscriber");
|
@@ -28128,12 +28589,13 @@ ${incompatibleNodeVersionMessage}`,
|
|
28128
28589
|
static incompatibleNodeVersionMessage = false;
|
28129
28590
|
static textDecoder = new TextDecoder();
|
28130
28591
|
static async create(options) {
|
28131
|
-
const { url, query, variables, fetchFn } = options;
|
28592
|
+
const { url, query, variables, fetchFn, operationName, onEvent } = options;
|
28132
28593
|
const response = await fetchFn(`${url}-sub`, {
|
28133
28594
|
method: "POST",
|
28134
28595
|
body: JSON.stringify({
|
28135
28596
|
query: print(query),
|
28136
|
-
variables
|
28597
|
+
variables,
|
28598
|
+
operationName
|
28137
28599
|
}),
|
28138
28600
|
headers: {
|
28139
28601
|
"Content-Type": "application/json",
|
@@ -28142,39 +28604,71 @@ ${incompatibleNodeVersionMessage}`,
|
|
28142
28604
|
});
|
28143
28605
|
const [errorReader, resultReader] = response.body.tee().map((stream) => stream.getReader());
|
28144
28606
|
await new _FuelGraphqlSubscriber(errorReader).next();
|
28145
|
-
return new _FuelGraphqlSubscriber(resultReader);
|
28607
|
+
return new _FuelGraphqlSubscriber(resultReader, onEvent);
|
28146
28608
|
}
|
28147
|
-
|
28148
|
-
|
28149
|
-
|
28609
|
+
/**
|
28610
|
+
* This method will take a stream reader and parse the event from the stream.
|
28611
|
+
*
|
28612
|
+
* @param reader - The reader of the SSE stream
|
28613
|
+
* @param parsingLeftover - The leftover string from parsing the previous event
|
28614
|
+
* @returns The event parsed as a full GraphQL response, whether the stream is done and the leftover string after parsing
|
28615
|
+
*/
|
28616
|
+
static async readEvent(reader, parsingLeftover = "") {
|
28617
|
+
let text = parsingLeftover;
|
28618
|
+
const regex = /data:.*\n\n/g;
|
28150
28619
|
while (true) {
|
28151
|
-
if (this.events.length > 0) {
|
28152
|
-
const { data, errors: errors2 } = this.events.shift();
|
28153
|
-
assertGqlResponseHasNoErrors(errors2, _FuelGraphqlSubscriber.incompatibleNodeVersionMessage);
|
28154
|
-
return { value: data, done: false };
|
28155
|
-
}
|
28156
|
-
const { value, done } = await this.stream.read();
|
28157
|
-
if (done) {
|
28158
|
-
return { value, done };
|
28159
|
-
}
|
28160
|
-
const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
|
28161
|
-
if (decoded === "") {
|
28162
|
-
continue;
|
28163
|
-
}
|
28164
|
-
const text = `${this.parsingLeftover}${decoded}`;
|
28165
|
-
const regex = /data:.*\n\n/g;
|
28166
28620
|
const matches = [...text.matchAll(regex)].flatMap((match) => match);
|
28167
|
-
matches.
|
28621
|
+
if (matches.length > 0) {
|
28168
28622
|
try {
|
28169
|
-
|
28623
|
+
const event = JSON.parse(matches[0].replace(/^data:/, ""));
|
28624
|
+
return {
|
28625
|
+
event,
|
28626
|
+
done: false,
|
28627
|
+
parsingLeftover: text.replace(matches[0], "")
|
28628
|
+
};
|
28170
28629
|
} catch (e) {
|
28171
28630
|
throw new FuelError(
|
28172
28631
|
ErrorCode.STREAM_PARSING_ERROR,
|
28173
28632
|
`Error while parsing stream data response: ${text}`
|
28174
28633
|
);
|
28175
28634
|
}
|
28176
|
-
}
|
28177
|
-
|
28635
|
+
}
|
28636
|
+
const { value, done } = await reader.read();
|
28637
|
+
if (done) {
|
28638
|
+
return { event: void 0, done, parsingLeftover: "" };
|
28639
|
+
}
|
28640
|
+
const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
|
28641
|
+
text += decoded;
|
28642
|
+
}
|
28643
|
+
}
|
28644
|
+
events = [];
|
28645
|
+
parsingLeftover = "";
|
28646
|
+
/**
|
28647
|
+
* Gets automatically called when iterating in a `for-await-of` loop.
|
28648
|
+
* It can also be called manually.
|
28649
|
+
*
|
28650
|
+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next
|
28651
|
+
*/
|
28652
|
+
async next() {
|
28653
|
+
while (true) {
|
28654
|
+
const nextEvent = this.events.shift();
|
28655
|
+
if (nextEvent) {
|
28656
|
+
this.onEvent?.(nextEvent);
|
28657
|
+
assertGqlResponseHasNoErrors(
|
28658
|
+
nextEvent.errors,
|
28659
|
+
_FuelGraphqlSubscriber.incompatibleNodeVersionMessage
|
28660
|
+
);
|
28661
|
+
return { value: nextEvent.data, done: false };
|
28662
|
+
}
|
28663
|
+
const { event, done, parsingLeftover } = await _FuelGraphqlSubscriber.readEvent(
|
28664
|
+
this.stream,
|
28665
|
+
this.parsingLeftover
|
28666
|
+
);
|
28667
|
+
this.parsingLeftover = parsingLeftover;
|
28668
|
+
if (done) {
|
28669
|
+
return { value: void 0, done: true };
|
28670
|
+
}
|
28671
|
+
this.events.push(event);
|
28178
28672
|
}
|
28179
28673
|
}
|
28180
28674
|
/**
|
@@ -28220,7 +28714,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
28220
28714
|
case InputType.Contract: {
|
28221
28715
|
return {
|
28222
28716
|
type: InputType.Contract,
|
28223
|
-
txID: ZeroBytes32,
|
28717
|
+
txID: hexlify(value.txID || ZeroBytes32),
|
28224
28718
|
outputIndex: 0,
|
28225
28719
|
balanceRoot: ZeroBytes32,
|
28226
28720
|
stateRoot: ZeroBytes32,
|
@@ -28291,9 +28785,9 @@ ${incompatibleNodeVersionMessage}`,
|
|
28291
28785
|
case OutputType.Variable: {
|
28292
28786
|
return {
|
28293
28787
|
type: OutputType.Variable,
|
28294
|
-
to: ZeroBytes32,
|
28295
|
-
amount: bn(
|
28296
|
-
assetId: ZeroBytes32
|
28788
|
+
to: hexlify(value.to || ZeroBytes32),
|
28789
|
+
amount: bn(value.amount),
|
28790
|
+
assetId: hexlify(value.assetId || ZeroBytes32)
|
28297
28791
|
};
|
28298
28792
|
}
|
28299
28793
|
case OutputType.ContractCreated: {
|
@@ -28340,6 +28834,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
28340
28834
|
"BlobIdAlreadyUploaded",
|
28341
28835
|
"BlobNotFound",
|
28342
28836
|
"BytecodeAlreadyUploaded",
|
28837
|
+
"CanNotGetGasPriceInPredicate",
|
28343
28838
|
"ContractIdAlreadyDeployed",
|
28344
28839
|
"ContractInstructionNotAllowed",
|
28345
28840
|
"ContractMaxSize",
|
@@ -28363,6 +28858,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
28363
28858
|
"InvalidImmediateValue",
|
28364
28859
|
"InvalidInstruction",
|
28365
28860
|
"InvalidMetadataIdentifier",
|
28861
|
+
"InvalidUpgradePurposeType",
|
28366
28862
|
"MalformedCallStructure",
|
28367
28863
|
"MaxStaticContractsReached",
|
28368
28864
|
"MemoryGrowthOverlap",
|
@@ -28379,8 +28875,10 @@ ${incompatibleNodeVersionMessage}`,
|
|
28379
28875
|
"PolicyIsNotSet",
|
28380
28876
|
"PolicyNotFound",
|
28381
28877
|
"PredicateReturnedNonOne",
|
28878
|
+
"ProofInUploadNotFound",
|
28382
28879
|
"ReservedRegisterNotWritable",
|
28383
28880
|
"Revert",
|
28881
|
+
"StorageSlotsNotFound",
|
28384
28882
|
"ThePartIsNotSequentiallyConnected",
|
28385
28883
|
"TooManyReceipts",
|
28386
28884
|
"TooManySlots",
|
@@ -28734,16 +29232,151 @@ ${incompatibleNodeVersionMessage}`,
|
|
28734
29232
|
throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);
|
28735
29233
|
}
|
28736
29234
|
}, "deserializeReceipt");
|
28737
|
-
|
28738
|
-
|
28739
|
-
|
28740
|
-
|
28741
|
-
|
28742
|
-
|
28743
|
-
|
28744
|
-
|
28745
|
-
|
28746
|
-
|
29235
|
+
var deserializeInput = /* @__PURE__ */ __name((input) => {
|
29236
|
+
let parsedInput;
|
29237
|
+
switch (input.type) {
|
29238
|
+
case "InputCoin":
|
29239
|
+
parsedInput = {
|
29240
|
+
type: InputType.Coin,
|
29241
|
+
id: input.utxoId,
|
29242
|
+
amount: bn(input.amount),
|
29243
|
+
assetId: input.assetId,
|
29244
|
+
owner: input.owner,
|
29245
|
+
txPointer: `0x${input.txPointer}`,
|
29246
|
+
witnessIndex: Number(input.coinWitnessIndex),
|
29247
|
+
predicate: input.predicate,
|
29248
|
+
predicateData: input.predicateData,
|
29249
|
+
predicateGasUsed: bn(input.predicateGasUsed)
|
29250
|
+
};
|
29251
|
+
break;
|
29252
|
+
case "InputMessage":
|
29253
|
+
parsedInput = {
|
29254
|
+
type: InputType.Message,
|
29255
|
+
nonce: input.nonce,
|
29256
|
+
amount: bn(input.amount),
|
29257
|
+
recipient: input.recipient,
|
29258
|
+
sender: input.sender,
|
29259
|
+
data: input.data,
|
29260
|
+
witnessIndex: Number(input.messageWitnessIndex),
|
29261
|
+
predicate: input.predicate,
|
29262
|
+
predicateData: input.predicateData,
|
29263
|
+
predicateGasUsed: bn(input.predicateGasUsed)
|
29264
|
+
};
|
29265
|
+
break;
|
29266
|
+
case "InputContract":
|
29267
|
+
parsedInput = {
|
29268
|
+
type: InputType.Contract,
|
29269
|
+
contractId: input.contractId,
|
29270
|
+
txPointer: `0x${input.txPointer}`,
|
29271
|
+
txID: hexlify(arrayify(input.utxoId).slice(0, 32))
|
29272
|
+
};
|
29273
|
+
break;
|
29274
|
+
default:
|
29275
|
+
assertUnreachable(input);
|
29276
|
+
}
|
29277
|
+
return parsedInput;
|
29278
|
+
}, "deserializeInput");
|
29279
|
+
var deserializeOutput = /* @__PURE__ */ __name((output) => {
|
29280
|
+
let parsedOutput;
|
29281
|
+
switch (output.type) {
|
29282
|
+
case "CoinOutput":
|
29283
|
+
parsedOutput = {
|
29284
|
+
type: OutputType.Coin,
|
29285
|
+
amount: bn(output.amount),
|
29286
|
+
assetId: output.assetId,
|
29287
|
+
to: output.to
|
29288
|
+
};
|
29289
|
+
break;
|
29290
|
+
case "ContractOutput":
|
29291
|
+
parsedOutput = {
|
29292
|
+
type: OutputType.Contract,
|
29293
|
+
inputIndex: Number(output.inputIndex)
|
29294
|
+
};
|
29295
|
+
break;
|
29296
|
+
case "ChangeOutput":
|
29297
|
+
parsedOutput = {
|
29298
|
+
type: OutputType.Change,
|
29299
|
+
assetId: output.assetId,
|
29300
|
+
to: output.to
|
29301
|
+
};
|
29302
|
+
break;
|
29303
|
+
case "ContractCreated":
|
29304
|
+
parsedOutput = {
|
29305
|
+
type: OutputType.ContractCreated,
|
29306
|
+
stateRoot: output.stateRoot,
|
29307
|
+
contractId: output.contract
|
29308
|
+
};
|
29309
|
+
break;
|
29310
|
+
case "VariableOutput":
|
29311
|
+
parsedOutput = {
|
29312
|
+
type: OutputType.Variable,
|
29313
|
+
amount: bn(output.amount),
|
29314
|
+
assetId: output.assetId,
|
29315
|
+
to: output.to
|
29316
|
+
};
|
29317
|
+
break;
|
29318
|
+
default:
|
29319
|
+
assertUnreachable(output);
|
29320
|
+
}
|
29321
|
+
return parsedOutput;
|
29322
|
+
}, "deserializeOutput");
|
29323
|
+
var deserializeProcessedTxOutput = /* @__PURE__ */ __name((output) => {
|
29324
|
+
let parsedOutput;
|
29325
|
+
switch (output.type) {
|
29326
|
+
case "CoinOutput":
|
29327
|
+
parsedOutput = {
|
29328
|
+
type: OutputType.Coin,
|
29329
|
+
amount: bn(output.amount),
|
29330
|
+
assetId: output.assetId,
|
29331
|
+
to: output.to
|
29332
|
+
};
|
29333
|
+
break;
|
29334
|
+
case "ContractOutput":
|
29335
|
+
parsedOutput = {
|
29336
|
+
type: OutputType.Contract,
|
29337
|
+
inputIndex: Number(output.inputIndex),
|
29338
|
+
balanceRoot: output.balanceRoot,
|
29339
|
+
stateRoot: output.stateRoot
|
29340
|
+
};
|
29341
|
+
break;
|
29342
|
+
case "ChangeOutput":
|
29343
|
+
parsedOutput = {
|
29344
|
+
type: OutputType.Change,
|
29345
|
+
assetId: output.assetId,
|
29346
|
+
to: output.to,
|
29347
|
+
amount: bn(output.amount)
|
29348
|
+
};
|
29349
|
+
break;
|
29350
|
+
case "ContractCreated":
|
29351
|
+
parsedOutput = {
|
29352
|
+
type: OutputType.ContractCreated,
|
29353
|
+
stateRoot: output.stateRoot,
|
29354
|
+
contractId: output.contract
|
29355
|
+
};
|
29356
|
+
break;
|
29357
|
+
case "VariableOutput":
|
29358
|
+
parsedOutput = {
|
29359
|
+
type: OutputType.Variable,
|
29360
|
+
amount: bn(output.amount),
|
29361
|
+
assetId: output.assetId,
|
29362
|
+
to: output.to
|
29363
|
+
};
|
29364
|
+
break;
|
29365
|
+
default:
|
29366
|
+
assertUnreachable(output);
|
29367
|
+
}
|
29368
|
+
return parsedOutput;
|
29369
|
+
}, "deserializeProcessedTxOutput");
|
29370
|
+
|
29371
|
+
// src/providers/utils/receipts.ts
|
29372
|
+
var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
|
29373
|
+
var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
|
29374
|
+
var getReceiptsWithMissingData = /* @__PURE__ */ __name((receipts) => receipts.reduce(
|
29375
|
+
(memo, receipt) => {
|
29376
|
+
if (doesReceiptHaveMissingOutputVariables(receipt)) {
|
29377
|
+
memo.missingOutputVariables.push(receipt);
|
29378
|
+
}
|
29379
|
+
if (doesReceiptHaveMissingContractId(receipt)) {
|
28747
29380
|
memo.missingOutputContractIds.push(receipt);
|
28748
29381
|
}
|
28749
29382
|
return memo;
|
@@ -29076,6 +29709,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
29076
29709
|
return assembleRevertError(receipts, logs, metadata);
|
29077
29710
|
}, "extractTxError");
|
29078
29711
|
|
29712
|
+
// src/providers/utils/merge-quantities.ts
|
29713
|
+
var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
|
29714
|
+
const resultMap = {};
|
29715
|
+
function addToMap({ amount, assetId }) {
|
29716
|
+
if (resultMap[assetId]) {
|
29717
|
+
resultMap[assetId] = resultMap[assetId].add(amount);
|
29718
|
+
} else {
|
29719
|
+
resultMap[assetId] = amount;
|
29720
|
+
}
|
29721
|
+
}
|
29722
|
+
__name(addToMap, "addToMap");
|
29723
|
+
coinQuantities.forEach((arr) => arr.forEach(addToMap));
|
29724
|
+
return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
|
29725
|
+
}, "mergeQuantities");
|
29726
|
+
|
29079
29727
|
// src/providers/transaction-request/errors.ts
|
29080
29728
|
var ChangeOutputCollisionError = class extends Error {
|
29081
29729
|
static {
|
@@ -30027,6 +30675,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
30027
30675
|
* @param account - The account to fund the transaction.
|
30028
30676
|
* @param params - The parameters for the transaction cost.
|
30029
30677
|
* @returns The current instance of the `ScriptTransactionRequest` funded.
|
30678
|
+
*
|
30679
|
+
* @deprecated Use `provider.assembleTx` instead.
|
30680
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
30030
30681
|
*/
|
30031
30682
|
async estimateAndFund(account, { signatureCallback, quantities = [] } = {}) {
|
30032
30683
|
const txCost = await account.getTransactionCost(this, { signatureCallback, quantities });
|
@@ -30110,6 +30761,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
30110
30761
|
}
|
30111
30762
|
return this.outputs.length - 1;
|
30112
30763
|
}
|
30764
|
+
/**
|
30765
|
+
* Adds a variable output to the transaction request.
|
30766
|
+
*
|
30767
|
+
* @param to - The recipient address as a BytesLike object. Defaults to ZeroBytes32 if not provided.
|
30768
|
+
* @param amount - The amount to be transferred as a BigNumberish object. Defaults to 0 if not provided.
|
30769
|
+
* @param assetId - The asset ID as a BytesLike object. Defaults to ZeroBytes32 if not provided.
|
30770
|
+
*/
|
30771
|
+
addVariableOutput(to, amount, assetId) {
|
30772
|
+
this.pushOutput({
|
30773
|
+
type: OutputType.Variable,
|
30774
|
+
to,
|
30775
|
+
amount,
|
30776
|
+
assetId
|
30777
|
+
});
|
30778
|
+
}
|
30113
30779
|
/**
|
30114
30780
|
* Calculates the maximum gas for the transaction.
|
30115
30781
|
*
|
@@ -30780,6 +31446,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
30780
31446
|
TransactionStatus2["success"] = "success";
|
30781
31447
|
TransactionStatus2["squeezedout"] = "squeezedout";
|
30782
31448
|
TransactionStatus2["failure"] = "failure";
|
31449
|
+
TransactionStatus2["preconfirmationSuccess"] = "preconfirmationSuccess";
|
31450
|
+
TransactionStatus2["preconfirmationFailure"] = "preconfirmationFailure";
|
30783
31451
|
return TransactionStatus2;
|
30784
31452
|
})(TransactionStatus || {});
|
30785
31453
|
var OperationName = /* @__PURE__ */ ((OperationName2) => {
|
@@ -31246,6 +31914,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31246
31914
|
return "submitted" /* submitted */;
|
31247
31915
|
case "SqueezedOutStatus":
|
31248
31916
|
return "squeezedout" /* squeezedout */;
|
31917
|
+
case "PreconfirmationSuccessStatus":
|
31918
|
+
return "preconfirmationSuccess" /* preconfirmationSuccess */;
|
31919
|
+
case "PreconfirmationFailureStatus":
|
31920
|
+
return "preconfirmationFailure" /* preconfirmationFailure */;
|
31249
31921
|
default:
|
31250
31922
|
throw new FuelError(
|
31251
31923
|
ErrorCode.INVALID_TRANSACTION_STATUS,
|
@@ -31253,15 +31925,30 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31253
31925
|
);
|
31254
31926
|
}
|
31255
31927
|
}, "getTransactionStatusName");
|
31928
|
+
var extractResolvedOutputs = /* @__PURE__ */ __name((serializedOutputs) => {
|
31929
|
+
const resolvedOutputs = [];
|
31930
|
+
serializedOutputs?.forEach(
|
31931
|
+
({ utxoId, output }) => resolvedOutputs.push({
|
31932
|
+
utxoId,
|
31933
|
+
output: deserializeProcessedTxOutput(output)
|
31934
|
+
})
|
31935
|
+
);
|
31936
|
+
return resolvedOutputs;
|
31937
|
+
}, "extractResolvedOutputs");
|
31256
31938
|
var processGraphqlStatus = /* @__PURE__ */ __name((gqlTransactionStatus) => {
|
31257
31939
|
let time;
|
31258
31940
|
let blockId;
|
31259
31941
|
let status;
|
31260
31942
|
let totalFee;
|
31261
31943
|
let totalGas;
|
31944
|
+
let receipts;
|
31945
|
+
let resolvedOutputs = [];
|
31946
|
+
let errorReason;
|
31262
31947
|
let isStatusFailure = false;
|
31263
31948
|
let isStatusSuccess = false;
|
31264
31949
|
let isStatusPending = false;
|
31950
|
+
let isStatusPreConfirmationSuccess = false;
|
31951
|
+
let isStatusPreConfirmationFailure = false;
|
31265
31952
|
if (gqlTransactionStatus?.type) {
|
31266
31953
|
status = getTransactionStatusName(gqlTransactionStatus.type);
|
31267
31954
|
switch (gqlTransactionStatus.type) {
|
@@ -31269,6 +31956,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31269
31956
|
time = gqlTransactionStatus.time;
|
31270
31957
|
blockId = gqlTransactionStatus.block?.id;
|
31271
31958
|
isStatusSuccess = true;
|
31959
|
+
receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
|
31272
31960
|
totalFee = bn(gqlTransactionStatus.totalFee);
|
31273
31961
|
totalGas = bn(gqlTransactionStatus.totalGas);
|
31274
31962
|
break;
|
@@ -31277,12 +31965,28 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31277
31965
|
blockId = gqlTransactionStatus.block?.id;
|
31278
31966
|
isStatusFailure = true;
|
31279
31967
|
totalFee = bn(gqlTransactionStatus.totalFee);
|
31968
|
+
receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
|
31280
31969
|
totalGas = bn(gqlTransactionStatus.totalGas);
|
31281
31970
|
break;
|
31282
31971
|
case "SubmittedStatus":
|
31283
31972
|
time = gqlTransactionStatus.time;
|
31284
31973
|
isStatusPending = true;
|
31285
31974
|
break;
|
31975
|
+
case "PreconfirmationSuccessStatus":
|
31976
|
+
isStatusPreConfirmationSuccess = true;
|
31977
|
+
totalFee = bn(gqlTransactionStatus.totalFee);
|
31978
|
+
totalGas = bn(gqlTransactionStatus.totalGas);
|
31979
|
+
receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
|
31980
|
+
resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
|
31981
|
+
break;
|
31982
|
+
case "PreconfirmationFailureStatus":
|
31983
|
+
isStatusPreConfirmationFailure = true;
|
31984
|
+
totalFee = bn(gqlTransactionStatus.totalFee);
|
31985
|
+
totalGas = bn(gqlTransactionStatus.totalGas);
|
31986
|
+
receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
|
31987
|
+
resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
|
31988
|
+
errorReason = gqlTransactionStatus.reason;
|
31989
|
+
break;
|
31286
31990
|
default:
|
31287
31991
|
}
|
31288
31992
|
}
|
@@ -31292,9 +31996,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31292
31996
|
status,
|
31293
31997
|
totalFee,
|
31294
31998
|
totalGas,
|
31999
|
+
receipts,
|
31295
32000
|
isStatusFailure,
|
31296
32001
|
isStatusSuccess,
|
31297
|
-
isStatusPending
|
32002
|
+
isStatusPending,
|
32003
|
+
isStatusPreConfirmationSuccess,
|
32004
|
+
isStatusPreConfirmationFailure,
|
32005
|
+
resolvedOutputs,
|
32006
|
+
errorReason
|
31298
32007
|
};
|
31299
32008
|
return processedGraphqlStatus;
|
31300
32009
|
}, "processGraphqlStatus");
|
@@ -31379,6 +32088,81 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31379
32088
|
return transactionSummary;
|
31380
32089
|
}
|
31381
32090
|
__name(assembleTransactionSummary, "assembleTransactionSummary");
|
32091
|
+
function assemblePreConfirmationTransactionSummary(params) {
|
32092
|
+
const { id, gqlTransactionStatus, transactionRequest, baseAssetId, maxInputs, abiMap } = params;
|
32093
|
+
let type3;
|
32094
|
+
let operations;
|
32095
|
+
let gasUsed;
|
32096
|
+
let tip;
|
32097
|
+
let transaction;
|
32098
|
+
let mintedAssets;
|
32099
|
+
let burnedAssets;
|
32100
|
+
const {
|
32101
|
+
isStatusFailure,
|
32102
|
+
isStatusSuccess,
|
32103
|
+
isStatusPending,
|
32104
|
+
status,
|
32105
|
+
receipts,
|
32106
|
+
resolvedOutputs,
|
32107
|
+
errorReason,
|
32108
|
+
totalFee,
|
32109
|
+
isStatusPreConfirmationFailure,
|
32110
|
+
isStatusPreConfirmationSuccess
|
32111
|
+
} = processGraphqlStatus(gqlTransactionStatus);
|
32112
|
+
if (receipts) {
|
32113
|
+
gasUsed = getGasUsedFromReceipts(receipts);
|
32114
|
+
mintedAssets = extractMintedAssetsFromReceipts(receipts);
|
32115
|
+
burnedAssets = extractBurnedAssetsFromReceipts(receipts);
|
32116
|
+
}
|
32117
|
+
if (transactionRequest) {
|
32118
|
+
transaction = transactionRequest.toTransaction();
|
32119
|
+
type3 = getTransactionTypeName(transaction.type);
|
32120
|
+
tip = bn(transaction.policies?.find((policy) => policy.type === PolicyType.Tip)?.data);
|
32121
|
+
if (receipts) {
|
32122
|
+
const rawPayload = hexlify(new TransactionCoder().encode(transaction));
|
32123
|
+
operations = getOperations({
|
32124
|
+
transactionType: transaction.type,
|
32125
|
+
inputs: transaction.inputs || [],
|
32126
|
+
outputs: transaction.outputs || [],
|
32127
|
+
receipts,
|
32128
|
+
rawPayload,
|
32129
|
+
abiMap,
|
32130
|
+
maxInputs,
|
32131
|
+
baseAssetId
|
32132
|
+
});
|
32133
|
+
}
|
32134
|
+
}
|
32135
|
+
const transactionSummary = {
|
32136
|
+
id,
|
32137
|
+
fee: totalFee,
|
32138
|
+
type: type3,
|
32139
|
+
status,
|
32140
|
+
receipts,
|
32141
|
+
gasUsed,
|
32142
|
+
tip,
|
32143
|
+
isStatusPreConfirmationFailure,
|
32144
|
+
isStatusPreConfirmationSuccess,
|
32145
|
+
isStatusFailure,
|
32146
|
+
isStatusSuccess,
|
32147
|
+
isStatusPending,
|
32148
|
+
...transaction && {
|
32149
|
+
isTypeMint: isTypeMint(transaction.type),
|
32150
|
+
isTypeCreate: isTypeCreate(transaction.type),
|
32151
|
+
isTypeScript: isTypeScript(transaction.type),
|
32152
|
+
isTypeUpgrade: isTypeUpgrade(transaction.type),
|
32153
|
+
isTypeUpload: isTypeUpload(transaction.type),
|
32154
|
+
isTypeBlob: isTypeBlob(transaction.type)
|
32155
|
+
},
|
32156
|
+
mintedAssets,
|
32157
|
+
burnedAssets,
|
32158
|
+
resolvedOutputs,
|
32159
|
+
errorReason,
|
32160
|
+
transaction,
|
32161
|
+
operations
|
32162
|
+
};
|
32163
|
+
return transactionSummary;
|
32164
|
+
}
|
32165
|
+
__name(assemblePreConfirmationTransactionSummary, "assemblePreConfirmationTransactionSummary");
|
31382
32166
|
|
31383
32167
|
// src/providers/transaction-response/getAllDecodedLogs.ts
|
31384
32168
|
function getAllDecodedLogs(opts) {
|
@@ -31411,37 +32195,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31411
32195
|
__name(getAllDecodedLogs, "getAllDecodedLogs");
|
31412
32196
|
|
31413
32197
|
// src/providers/transaction-response/transaction-response.ts
|
31414
|
-
function mapGqlOutputsToTxOutputs(outputs) {
|
31415
|
-
return outputs.map((o) => {
|
31416
|
-
const obj = "amount" in o ? { ...o, amount: bn(o.amount) } : o;
|
31417
|
-
switch (obj.type) {
|
31418
|
-
case "CoinOutput":
|
31419
|
-
return { ...obj, type: OutputType.Coin };
|
31420
|
-
case "ContractOutput":
|
31421
|
-
return {
|
31422
|
-
...obj,
|
31423
|
-
type: OutputType.Contract,
|
31424
|
-
inputIndex: parseInt(obj.inputIndex, 10)
|
31425
|
-
};
|
31426
|
-
case "ChangeOutput":
|
31427
|
-
return {
|
31428
|
-
...obj,
|
31429
|
-
type: OutputType.Change
|
31430
|
-
};
|
31431
|
-
case "VariableOutput":
|
31432
|
-
return { ...obj, type: OutputType.Variable };
|
31433
|
-
case "ContractCreated":
|
31434
|
-
return {
|
31435
|
-
...obj,
|
31436
|
-
type: OutputType.ContractCreated,
|
31437
|
-
contractId: obj.contract
|
31438
|
-
};
|
31439
|
-
default:
|
31440
|
-
return assertUnreachable(obj);
|
31441
|
-
}
|
31442
|
-
});
|
31443
|
-
}
|
31444
|
-
__name(mapGqlOutputsToTxOutputs, "mapGqlOutputsToTxOutputs");
|
31445
32198
|
var TransactionResponse = class _TransactionResponse {
|
31446
32199
|
/**
|
31447
32200
|
* Constructor for `TransactionResponse`.
|
@@ -31451,11 +32204,16 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31451
32204
|
*/
|
31452
32205
|
constructor(tx, provider, chainId, abis, submitTxSubscription) {
|
31453
32206
|
this.submitTxSubscription = submitTxSubscription;
|
31454
|
-
|
32207
|
+
if (typeof tx === "string") {
|
32208
|
+
this.id = tx;
|
32209
|
+
} else {
|
32210
|
+
this.id = tx.getTransactionId(chainId);
|
32211
|
+
this.request = tx;
|
32212
|
+
}
|
31455
32213
|
this.provider = provider;
|
31456
32214
|
this.abis = abis;
|
31457
|
-
this.request = typeof tx === "string" ? void 0 : tx;
|
31458
32215
|
this.waitForResult = this.waitForResult.bind(this);
|
32216
|
+
this.waitForPreConfirmation = this.waitForPreConfirmation.bind(this);
|
31459
32217
|
}
|
31460
32218
|
static {
|
31461
32219
|
__name(this, "TransactionResponse");
|
@@ -31471,6 +32229,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31471
32229
|
request;
|
31472
32230
|
status;
|
31473
32231
|
abis;
|
32232
|
+
waitingForStreamData = false;
|
32233
|
+
statusResolvers = /* @__PURE__ */ new Map();
|
32234
|
+
preConfirmationStatus;
|
31474
32235
|
/**
|
31475
32236
|
* Async constructor for `TransactionResponse`. This method can be used to create
|
31476
32237
|
* an instance of `TransactionResponse` and wait for the transaction to be fetched
|
@@ -31502,29 +32263,38 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31502
32263
|
}
|
31503
32264
|
return input;
|
31504
32265
|
});
|
31505
|
-
tx.outputs =
|
31506
|
-
if (
|
32266
|
+
tx.outputs = status.transaction.outputs.map(deserializeProcessedTxOutput);
|
32267
|
+
if (status.transaction.receiptsRoot) {
|
31507
32268
|
tx.receiptsRoot = status.transaction.receiptsRoot;
|
31508
32269
|
}
|
31509
32270
|
}
|
31510
32271
|
}
|
31511
32272
|
async getTransaction() {
|
31512
32273
|
if (this.request) {
|
31513
|
-
const
|
31514
|
-
this.applyMalleableSubscriptionFields(
|
32274
|
+
const tx2 = this.request.toTransaction();
|
32275
|
+
this.applyMalleableSubscriptionFields(tx2);
|
31515
32276
|
return {
|
31516
|
-
tx,
|
32277
|
+
tx: tx2,
|
31517
32278
|
bytes: this.request.toTransactionBytes()
|
31518
32279
|
};
|
31519
32280
|
}
|
31520
32281
|
const gqlTransaction = this.gqlTransaction ?? await this.fetch();
|
32282
|
+
const { rawPayload } = gqlTransaction;
|
32283
|
+
const bytes = arrayify(rawPayload);
|
32284
|
+
const [tx] = new TransactionCoder().decode(bytes, 0);
|
31521
32285
|
return {
|
31522
|
-
tx
|
31523
|
-
bytes
|
32286
|
+
tx,
|
32287
|
+
bytes
|
31524
32288
|
};
|
31525
32289
|
}
|
32290
|
+
/**
|
32291
|
+
*
|
32292
|
+
* NOTE: This method is only called within `getTransactionSummary`, which is invoked after `getTransaction`.
|
32293
|
+
* Since `getTransaction` only resolves once the transaction has been processed,
|
32294
|
+
* the status at this point is guaranteed to be either `SuccessStatus` or `FailureStatus`.
|
32295
|
+
*/
|
31526
32296
|
getReceipts() {
|
31527
|
-
const status = this.
|
32297
|
+
const status = this.getTransactionStatus();
|
31528
32298
|
switch (status?.type) {
|
31529
32299
|
case "SuccessStatus":
|
31530
32300
|
case "FailureStatus":
|
@@ -31557,18 +32327,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31557
32327
|
this.gqlTransaction = response.transaction;
|
31558
32328
|
return response.transaction;
|
31559
32329
|
}
|
31560
|
-
/**
|
31561
|
-
* Decode the raw payload of the transaction.
|
31562
|
-
*
|
31563
|
-
* @param transactionWithReceipts - The transaction with receipts object.
|
31564
|
-
* @returns The decoded transaction.
|
31565
|
-
*/
|
31566
|
-
decodeTransaction(transactionWithReceipts) {
|
31567
|
-
return new TransactionCoder().decode(
|
31568
|
-
arrayify(transactionWithReceipts.rawPayload),
|
31569
|
-
0
|
31570
|
-
)?.[0];
|
31571
|
-
}
|
31572
32330
|
/**
|
31573
32331
|
* Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will
|
31574
32332
|
* fetch it from the provider
|
@@ -31579,7 +32337,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31579
32337
|
async getTransactionSummary(contractsAbiMap) {
|
31580
32338
|
const { tx: transaction, bytes: transactionBytes } = await this.getTransaction();
|
31581
32339
|
const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = await this.provider.getGasConfig();
|
31582
|
-
const
|
32340
|
+
const transactionStatus = this.getTransactionStatus();
|
32341
|
+
const totalFee = getTotalFeeFromStatus(transactionStatus);
|
31583
32342
|
const gasPrice = totalFee ? bn(0) : await this.provider.getLatestGasPrice();
|
31584
32343
|
const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
|
31585
32344
|
const baseAssetId = await this.provider.getBaseAssetId();
|
@@ -31588,7 +32347,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31588
32347
|
receipts: this.getReceipts(),
|
31589
32348
|
transaction,
|
31590
32349
|
transactionBytes,
|
31591
|
-
gqlTransactionStatus:
|
32350
|
+
gqlTransactionStatus: transactionStatus,
|
31592
32351
|
gasPerByte,
|
31593
32352
|
gasPriceFactor,
|
31594
32353
|
abiMap: contractsAbiMap,
|
@@ -31600,29 +32359,92 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31600
32359
|
});
|
31601
32360
|
return transactionSummary;
|
31602
32361
|
}
|
32362
|
+
async getPreConfirmationTransactionSummary(contractsAbiMap) {
|
32363
|
+
const baseAssetId = await this.provider.getBaseAssetId();
|
32364
|
+
const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
|
32365
|
+
const transactionSummary = assemblePreConfirmationTransactionSummary({
|
32366
|
+
id: this.id,
|
32367
|
+
gqlTransactionStatus: this.preConfirmationStatus || this.status,
|
32368
|
+
baseAssetId,
|
32369
|
+
maxInputs,
|
32370
|
+
abiMap: contractsAbiMap,
|
32371
|
+
transactionRequest: this.request
|
32372
|
+
});
|
32373
|
+
return transactionSummary;
|
32374
|
+
}
|
32375
|
+
resolveStatus(type3) {
|
32376
|
+
const resolvers = this.statusResolvers.get(type3) || [];
|
32377
|
+
resolvers.forEach((resolve) => resolve());
|
32378
|
+
this.statusResolvers.delete(type3);
|
32379
|
+
}
|
32380
|
+
async waitForStatus(type3) {
|
32381
|
+
return new Promise((resolve, reject) => {
|
32382
|
+
const resolvers = this.statusResolvers.get(type3) || [];
|
32383
|
+
resolvers.push(() => {
|
32384
|
+
resolve();
|
32385
|
+
});
|
32386
|
+
this.statusResolvers.set(type3, resolvers);
|
32387
|
+
this.waitForStatusChange().catch(reject);
|
32388
|
+
});
|
32389
|
+
}
|
32390
|
+
/**
|
32391
|
+
* Waits for the status change of the transaction.
|
32392
|
+
* If the transaction is already in a final state, it will return immediately.
|
32393
|
+
* If the transaction is not in a final state, it will wait for the status change.
|
32394
|
+
* If we are already subscribed to the status change, it will return immediately.
|
32395
|
+
*/
|
31603
32396
|
async waitForStatusChange() {
|
31604
|
-
const
|
31605
|
-
if (
|
32397
|
+
const type3 = this.status?.type;
|
32398
|
+
if (type3 && (type3 === "FailureStatus" || type3 === "SuccessStatus")) {
|
32399
|
+
this.resolveStatus("preConfirmation");
|
32400
|
+
this.resolveStatus("confirmation");
|
31606
32401
|
return;
|
31607
32402
|
}
|
32403
|
+
if (this.waitingForStreamData) {
|
32404
|
+
return;
|
32405
|
+
}
|
32406
|
+
this.waitingForStreamData = true;
|
31608
32407
|
const subscription = this.submitTxSubscription ?? await this.provider.operations.statusChange({
|
31609
|
-
transactionId: this.id
|
32408
|
+
transactionId: this.id,
|
32409
|
+
includePreConfirmation: true
|
31610
32410
|
});
|
31611
32411
|
for await (const sub2 of subscription) {
|
31612
32412
|
const statusChange = "statusChange" in sub2 ? sub2.statusChange : sub2.submitAndAwaitStatus;
|
31613
32413
|
this.status = statusChange;
|
31614
32414
|
if (statusChange.type === "SqueezedOutStatus") {
|
31615
|
-
this.unsetResourceCache();
|
31616
32415
|
throw new FuelError(
|
31617
32416
|
ErrorCode.TRANSACTION_SQUEEZED_OUT,
|
31618
32417
|
`Transaction Squeezed Out with reason: ${statusChange.reason}`
|
31619
32418
|
);
|
31620
32419
|
}
|
31621
|
-
if (statusChange.type
|
32420
|
+
if (statusChange.type === "PreconfirmationSuccessStatus" || statusChange.type === "PreconfirmationFailureStatus") {
|
32421
|
+
this.preConfirmationStatus = statusChange;
|
32422
|
+
this.resolveStatus("preConfirmation");
|
32423
|
+
}
|
32424
|
+
if (statusChange.type === "SuccessStatus" || statusChange.type === "FailureStatus") {
|
32425
|
+
this.resolveStatus("confirmation");
|
32426
|
+
this.resolveStatus("preConfirmation");
|
32427
|
+
this.waitingForStreamData = false;
|
31622
32428
|
break;
|
31623
32429
|
}
|
31624
32430
|
}
|
31625
32431
|
}
|
32432
|
+
async waitForConfirmationStatuses() {
|
32433
|
+
try {
|
32434
|
+
await this.waitForStatus("confirmation");
|
32435
|
+
} catch (error2) {
|
32436
|
+
this.unsetResourceCache();
|
32437
|
+
throw error2;
|
32438
|
+
}
|
32439
|
+
}
|
32440
|
+
async waitForPreConfirmationStatuses() {
|
32441
|
+
try {
|
32442
|
+
await this.waitForStatus("preConfirmation");
|
32443
|
+
} catch (error2) {
|
32444
|
+
this.unsetResourceCache();
|
32445
|
+
throw error2;
|
32446
|
+
}
|
32447
|
+
}
|
31626
32448
|
/**
|
31627
32449
|
* Assembles the result of a transaction by retrieving the transaction summary,
|
31628
32450
|
* decoding logs (if available), and handling transaction failure.
|
@@ -31651,7 +32473,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31651
32473
|
transactionResult.groupedLogs = groupedLogs;
|
31652
32474
|
}
|
31653
32475
|
const { receipts } = transactionResult;
|
31654
|
-
const status = this.
|
32476
|
+
const status = this.getTransactionStatus();
|
31655
32477
|
if (status?.type === "FailureStatus") {
|
31656
32478
|
const { reason } = status;
|
31657
32479
|
throw extractTxError({
|
@@ -31663,16 +32485,46 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31663
32485
|
}
|
31664
32486
|
return transactionResult;
|
31665
32487
|
}
|
32488
|
+
async assemblePreConfirmationResult(contractsAbiMap) {
|
32489
|
+
const transactionSummary = await this.getPreConfirmationTransactionSummary(contractsAbiMap);
|
32490
|
+
const transactionResult = {
|
32491
|
+
...transactionSummary,
|
32492
|
+
logs: [],
|
32493
|
+
groupedLogs: {}
|
32494
|
+
};
|
32495
|
+
let { logs, groupedLogs } = { logs: [], groupedLogs: {} };
|
32496
|
+
if (this.abis && transactionSummary.receipts) {
|
32497
|
+
({ logs, groupedLogs } = getAllDecodedLogs({
|
32498
|
+
receipts: transactionSummary.receipts,
|
32499
|
+
mainAbi: this.abis.main,
|
32500
|
+
externalAbis: this.abis.otherContractsAbis
|
32501
|
+
}));
|
32502
|
+
transactionResult.logs = logs;
|
32503
|
+
transactionResult.groupedLogs = groupedLogs;
|
32504
|
+
}
|
32505
|
+
return transactionResult;
|
32506
|
+
}
|
31666
32507
|
/**
|
31667
32508
|
* Waits for transaction to complete and returns the result.
|
31668
32509
|
*
|
31669
32510
|
* @returns The completed transaction result
|
31670
32511
|
*/
|
31671
32512
|
async waitForResult(contractsAbiMap) {
|
31672
|
-
await this.
|
32513
|
+
await this.waitForConfirmationStatuses();
|
31673
32514
|
this.unsetResourceCache();
|
31674
32515
|
return this.assembleResult(contractsAbiMap);
|
31675
32516
|
}
|
32517
|
+
/**
|
32518
|
+
* Waits for the transaction's pre-confirmation and returns the result.
|
32519
|
+
*
|
32520
|
+
* @param contractsAbiMap - The contracts ABI map.
|
32521
|
+
* @returns The pre-confirmed transaction result
|
32522
|
+
*/
|
32523
|
+
async waitForPreConfirmation(contractsAbiMap) {
|
32524
|
+
await this.waitForPreConfirmationStatuses();
|
32525
|
+
this.unsetResourceCache();
|
32526
|
+
return this.assemblePreConfirmationResult(contractsAbiMap);
|
32527
|
+
}
|
31676
32528
|
/**
|
31677
32529
|
* Waits for transaction to complete and returns the result.
|
31678
32530
|
*
|
@@ -31684,6 +32536,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31684
32536
|
unsetResourceCache() {
|
31685
32537
|
this.provider.cache?.unset(this.id);
|
31686
32538
|
}
|
32539
|
+
getTransactionStatus() {
|
32540
|
+
return this.status ?? this.gqlTransaction?.status;
|
32541
|
+
}
|
31687
32542
|
};
|
31688
32543
|
|
31689
32544
|
// src/providers/transaction-response/getDecodedLogs.ts
|
@@ -31749,21 +32604,22 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31749
32604
|
}
|
31750
32605
|
__name(autoRetryFetch, "autoRetryFetch");
|
31751
32606
|
|
31752
|
-
// src/providers/utils/
|
31753
|
-
var
|
31754
|
-
const {
|
31755
|
-
|
31756
|
-
|
31757
|
-
if (
|
31758
|
-
|
31759
|
-
|
31760
|
-
|
31761
|
-
|
31762
|
-
|
31763
|
-
final.messages = [...final.messages, ...cached.messages.slice(0, maxInputs - total)];
|
32607
|
+
// src/providers/utils/parse-graphql-response.ts
|
32608
|
+
var parseGraphqlResponse = /* @__PURE__ */ __name(async (options) => {
|
32609
|
+
const { response, isSubscription } = options;
|
32610
|
+
let extensions;
|
32611
|
+
const responseClone = response.clone();
|
32612
|
+
if (isSubscription) {
|
32613
|
+
const reader = responseClone.body?.getReader();
|
32614
|
+
const { event } = await FuelGraphqlSubscriber.readEvent(reader);
|
32615
|
+
extensions = event?.extensions;
|
32616
|
+
} else {
|
32617
|
+
extensions = (await responseClone.json()).extensions;
|
31764
32618
|
}
|
31765
|
-
return
|
31766
|
-
|
32619
|
+
return {
|
32620
|
+
extensions
|
32621
|
+
};
|
32622
|
+
}, "parseGraphqlResponse");
|
31767
32623
|
|
31768
32624
|
// src/providers/utils/validate-pagination-args.ts
|
31769
32625
|
var validatePaginationArgs = /* @__PURE__ */ __name((params) => {
|
@@ -31808,22 +32664,48 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31808
32664
|
var BLOCKS_PAGE_SIZE_LIMIT = 5;
|
31809
32665
|
var DEFAULT_RESOURCE_CACHE_TTL = 2e4;
|
31810
32666
|
var GAS_USED_MODIFIER = 1.2;
|
32667
|
+
var WRITE_OPERATIONS = [
|
32668
|
+
"submit",
|
32669
|
+
"submitAndAwaitStatus",
|
32670
|
+
"produceBlocks"
|
32671
|
+
];
|
31811
32672
|
var Provider = class _Provider {
|
31812
32673
|
static {
|
31813
32674
|
__name(this, "Provider");
|
31814
32675
|
}
|
31815
32676
|
operations;
|
31816
32677
|
cache;
|
31817
|
-
/**
|
31818
|
-
|
32678
|
+
/**
|
32679
|
+
* @hidden
|
32680
|
+
* @param url - If provided, clears cache only for given url
|
32681
|
+
*/
|
32682
|
+
static clearChainAndNodeCaches(url) {
|
32683
|
+
if (url) {
|
32684
|
+
delete _Provider.inflightFetchChainAndNodeInfoRequests[url];
|
32685
|
+
delete _Provider.chainInfoCache[url];
|
32686
|
+
delete _Provider.nodeInfoCache[url];
|
32687
|
+
delete _Provider.currentBlockHeightCache[url];
|
32688
|
+
return;
|
32689
|
+
}
|
31819
32690
|
_Provider.inflightFetchChainAndNodeInfoRequests = {};
|
31820
32691
|
_Provider.nodeInfoCache = {};
|
31821
32692
|
_Provider.chainInfoCache = {};
|
32693
|
+
_Provider.currentBlockHeightCache = {};
|
31822
32694
|
}
|
31823
32695
|
/** @hidden */
|
31824
32696
|
url;
|
31825
32697
|
/** @hidden */
|
31826
32698
|
urlWithoutAuth;
|
32699
|
+
/**
|
32700
|
+
* Governs whether to include the required block height in the request body
|
32701
|
+
* for block-sensitive operations like when submitting a transaction.
|
32702
|
+
*
|
32703
|
+
* This ensures that the operation is executed at the correct block height,
|
32704
|
+
* regardless of which node in the network the request is routed to.
|
32705
|
+
*
|
32706
|
+
* `true` by default.
|
32707
|
+
*/
|
32708
|
+
static ENABLE_RPC_CONSISTENCY = true;
|
31827
32709
|
/** @hidden */
|
31828
32710
|
static inflightFetchChainAndNodeInfoRequests = {};
|
31829
32711
|
/** @hidden */
|
@@ -31831,6 +32713,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31831
32713
|
/** @hidden */
|
31832
32714
|
static nodeInfoCache = {};
|
31833
32715
|
/** @hidden */
|
32716
|
+
static currentBlockHeightCache = {};
|
32717
|
+
/** @hidden */
|
31834
32718
|
static incompatibleNodeVersionMessage = "";
|
31835
32719
|
/** @hidden */
|
31836
32720
|
consensusParametersTimestamp;
|
@@ -31842,6 +32726,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31842
32726
|
headers: void 0,
|
31843
32727
|
cache: void 0
|
31844
32728
|
};
|
32729
|
+
static extractOperationName(body) {
|
32730
|
+
return body?.toString().match(/"operationName":"(.+)"/)?.[1];
|
32731
|
+
}
|
32732
|
+
static isWriteOperation(body) {
|
32733
|
+
return WRITE_OPERATIONS.includes(this.extractOperationName(body));
|
32734
|
+
}
|
32735
|
+
static normalizeUrl(url) {
|
32736
|
+
return url.replace(/-sub$/, "");
|
32737
|
+
}
|
32738
|
+
static hasWriteOperationHappened(url) {
|
32739
|
+
return isDefined(_Provider.currentBlockHeightCache[this.normalizeUrl(url)]);
|
32740
|
+
}
|
31845
32741
|
/**
|
31846
32742
|
* @hidden
|
31847
32743
|
*/
|
@@ -31859,9 +32755,57 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31859
32755
|
if (options.requestMiddleware) {
|
31860
32756
|
fullRequest = await options.requestMiddleware(fullRequest);
|
31861
32757
|
}
|
31862
|
-
|
32758
|
+
if (_Provider.ENABLE_RPC_CONSISTENCY && _Provider.hasWriteOperationHappened(url)) {
|
32759
|
+
_Provider.applyBlockHeight(fullRequest, url);
|
32760
|
+
}
|
32761
|
+
return _Provider.fetchAndProcessBlockHeight(url, fullRequest, options);
|
31863
32762
|
}, retryOptions);
|
31864
32763
|
}
|
32764
|
+
static applyBlockHeight(request2, url) {
|
32765
|
+
const normalizedUrl = this.normalizeUrl(url);
|
32766
|
+
const currentBlockHeight = _Provider.currentBlockHeightCache[normalizedUrl] ?? 0;
|
32767
|
+
request2.body = request2.body?.toString().replace(/}$/, `,"extensions":{"required_fuel_block_height":${currentBlockHeight}}}`);
|
32768
|
+
}
|
32769
|
+
static async fetchAndProcessBlockHeight(url, request2, options) {
|
32770
|
+
const fetchFn = /* @__PURE__ */ __name(() => options.fetch ? options.fetch(url, request2, options) : fetch(url, request2), "fetchFn");
|
32771
|
+
const isWriteOperation = _Provider.isWriteOperation(request2.body);
|
32772
|
+
if (isWriteOperation && !_Provider.hasWriteOperationHappened(url)) {
|
32773
|
+
_Provider.currentBlockHeightCache[_Provider.normalizeUrl(url)] = 0;
|
32774
|
+
}
|
32775
|
+
let response = await fetchFn();
|
32776
|
+
if (!_Provider.ENABLE_RPC_CONSISTENCY) {
|
32777
|
+
return response;
|
32778
|
+
}
|
32779
|
+
const retryOptions = {
|
32780
|
+
maxRetries: 5,
|
32781
|
+
baseDelay: 500
|
32782
|
+
};
|
32783
|
+
for (let retriesLeft = retryOptions.maxRetries; retriesLeft > 0; --retriesLeft) {
|
32784
|
+
const { extensions } = await parseGraphqlResponse({
|
32785
|
+
response,
|
32786
|
+
isSubscription: url.endsWith("-sub")
|
32787
|
+
});
|
32788
|
+
_Provider.setCurrentBlockHeight(url, extensions?.current_fuel_block_height);
|
32789
|
+
if (!extensions?.fuel_block_height_precondition_failed) {
|
32790
|
+
break;
|
32791
|
+
}
|
32792
|
+
const retryAttempt = retryOptions.maxRetries - retriesLeft + 1;
|
32793
|
+
const sleepTime = getWaitDelay(retryOptions, retryAttempt);
|
32794
|
+
await sleep(sleepTime);
|
32795
|
+
response = await fetchFn();
|
32796
|
+
}
|
32797
|
+
return response;
|
32798
|
+
}
|
32799
|
+
static setCurrentBlockHeight(url, height) {
|
32800
|
+
const writeOperationHappened = _Provider.hasWriteOperationHappened(url);
|
32801
|
+
if (!isDefined(height) || !writeOperationHappened) {
|
32802
|
+
return;
|
32803
|
+
}
|
32804
|
+
const normalizedUrl = _Provider.normalizeUrl(url);
|
32805
|
+
if (height > _Provider.currentBlockHeightCache[normalizedUrl]) {
|
32806
|
+
_Provider.currentBlockHeightCache[normalizedUrl] = height;
|
32807
|
+
}
|
32808
|
+
}
|
31865
32809
|
/**
|
31866
32810
|
* Constructor to initialize a Provider.
|
31867
32811
|
*
|
@@ -31947,6 +32891,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31947
32891
|
* Returns some helpful parameters related to gas fees.
|
31948
32892
|
*/
|
31949
32893
|
async getGasConfig() {
|
32894
|
+
await this.init();
|
31950
32895
|
const {
|
31951
32896
|
txParameters: { maxGasPerTx },
|
31952
32897
|
predicateParameters: { maxGasPerPredicate },
|
@@ -32071,7 +33016,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32071
33016
|
url: this.urlWithoutAuth,
|
32072
33017
|
query,
|
32073
33018
|
fetchFn: /* @__PURE__ */ __name((url, requestInit) => fetchFn(url, requestInit, this.options), "fetchFn"),
|
32074
|
-
variables: vars
|
33019
|
+
variables: vars,
|
33020
|
+
operationName: opDefinition.name.value,
|
33021
|
+
onEvent: /* @__PURE__ */ __name((event) => {
|
33022
|
+
_Provider.setCurrentBlockHeight(
|
33023
|
+
this.urlWithoutAuth,
|
33024
|
+
event.extensions?.current_fuel_block_height
|
33025
|
+
);
|
33026
|
+
}, "onEvent")
|
32075
33027
|
});
|
32076
33028
|
}
|
32077
33029
|
return gqlClient.request(query, vars);
|
@@ -32229,7 +33181,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32229
33181
|
* @param sendTransactionParams - The provider send transaction parameters (optional).
|
32230
33182
|
* @returns A promise that resolves to the transaction response object.
|
32231
33183
|
*/
|
32232
|
-
async sendTransaction(transactionRequestLike, {
|
33184
|
+
async sendTransaction(transactionRequestLike, {
|
33185
|
+
enableAssetBurn,
|
33186
|
+
estimateTxDependencies = true,
|
33187
|
+
includePreConfirmation: _includePreConfirmation = true
|
33188
|
+
} = {}) {
|
32233
33189
|
const transactionRequest = transactionRequestify(transactionRequestLike);
|
32234
33190
|
validateTransactionForAssetBurn(
|
32235
33191
|
await this.getBaseAssetId(),
|
@@ -32245,7 +33201,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32245
33201
|
if (isTransactionTypeScript(transactionRequest)) {
|
32246
33202
|
abis = transactionRequest.abis;
|
32247
33203
|
}
|
32248
|
-
const subscription = await this.operations.submitAndAwaitStatus({
|
33204
|
+
const subscription = await this.operations.submitAndAwaitStatus({
|
33205
|
+
encodedTransaction,
|
33206
|
+
includePreConfirmation: true
|
33207
|
+
});
|
32249
33208
|
this.#cacheInputs(
|
32250
33209
|
transactionRequest.inputs,
|
32251
33210
|
transactionRequest.getTransactionId(await this.getChainId())
|
@@ -32597,6 +33556,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32597
33556
|
* @param transactionCostParams - The transaction cost parameters (optional).
|
32598
33557
|
*
|
32599
33558
|
* @returns A promise that resolves to the transaction cost object.
|
33559
|
+
*
|
33560
|
+
* @deprecated Use provider.assembleTx instead
|
33561
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
32600
33562
|
*/
|
32601
33563
|
async getTransactionCost(transactionRequestLike, { signatureCallback, gasPrice: gasPriceParam } = {}) {
|
32602
33564
|
const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
|
@@ -32639,7 +33601,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32639
33601
|
}
|
32640
33602
|
({ rawReceipts, receipts, missingContractIds, outputVariables, dryRunStatus } = await this.estimateTxDependencies(txRequestClone, { gasPrice }));
|
32641
33603
|
if (dryRunStatus && "reason" in dryRunStatus) {
|
32642
|
-
throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus);
|
33604
|
+
throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus.reason);
|
32643
33605
|
}
|
32644
33606
|
const { maxGasPerTx } = await this.getGasConfig();
|
32645
33607
|
const pristineGasUsed = getGasUsedFromReceipts(receipts);
|
@@ -32672,6 +33634,102 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32672
33634
|
transactionSummary
|
32673
33635
|
};
|
32674
33636
|
}
|
33637
|
+
/**
|
33638
|
+
* Assembles a transaction by completely estimating and funding it.
|
33639
|
+
*
|
33640
|
+
* @param params - Parameters used to assemble the transaction.
|
33641
|
+
*
|
33642
|
+
* @returns The assembled transaction request, estimated gas price, and receipts
|
33643
|
+
*/
|
33644
|
+
async assembleTx(params) {
|
33645
|
+
const {
|
33646
|
+
request: request2,
|
33647
|
+
reserveGas,
|
33648
|
+
resourcesIdsToIgnore,
|
33649
|
+
feePayerAccount,
|
33650
|
+
blockHorizon = 10,
|
33651
|
+
estimatePredicates = true,
|
33652
|
+
accountCoinQuantities = []
|
33653
|
+
} = params;
|
33654
|
+
const allAddresses = /* @__PURE__ */ new Set();
|
33655
|
+
const baseAssetId = await this.getBaseAssetId();
|
33656
|
+
let feePayerIndex = -1;
|
33657
|
+
let baseAssetChange;
|
33658
|
+
const requiredBalances = accountCoinQuantities.map((quantity, index) => {
|
33659
|
+
const { amount, assetId, account = feePayerAccount, changeOutputAccount } = quantity;
|
33660
|
+
const changeAccountAddress = changeOutputAccount ? changeOutputAccount.address.toB256() : account.address.toB256();
|
33661
|
+
allAddresses.add(account.address.toB256());
|
33662
|
+
const changePolicy = {
|
33663
|
+
change: changeAccountAddress
|
33664
|
+
};
|
33665
|
+
if (assetId === baseAssetId) {
|
33666
|
+
baseAssetChange = changePolicy.change;
|
33667
|
+
}
|
33668
|
+
if (account.address.equals(feePayerAccount.address)) {
|
33669
|
+
feePayerIndex = index;
|
33670
|
+
}
|
33671
|
+
const requiredBalance = {
|
33672
|
+
account: resolveAccountForAssembleTxParams(account),
|
33673
|
+
amount: bn(amount).toString(10),
|
33674
|
+
assetId,
|
33675
|
+
changePolicy
|
33676
|
+
};
|
33677
|
+
return requiredBalance;
|
33678
|
+
});
|
33679
|
+
if (feePayerIndex === -1) {
|
33680
|
+
allAddresses.add(feePayerAccount.address.toB256());
|
33681
|
+
const newLength = requiredBalances.push({
|
33682
|
+
account: resolveAccountForAssembleTxParams(feePayerAccount),
|
33683
|
+
amount: bn(0).toString(10),
|
33684
|
+
// Since the correct fee amount cannot be determined yet, we can use 0
|
33685
|
+
assetId: baseAssetId,
|
33686
|
+
changePolicy: {
|
33687
|
+
change: baseAssetChange || feePayerAccount.address.toB256()
|
33688
|
+
}
|
33689
|
+
});
|
33690
|
+
feePayerIndex = newLength - 1;
|
33691
|
+
}
|
33692
|
+
const excludeInput = await this.adjustResourcesToIgnoreForAddresses(
|
33693
|
+
Array.from(allAddresses),
|
33694
|
+
resourcesIdsToIgnore
|
33695
|
+
);
|
33696
|
+
const {
|
33697
|
+
assembleTx: { status, transaction: gqlTransaction, gasPrice }
|
33698
|
+
} = await this.operations.assembleTx({
|
33699
|
+
tx: hexlify(request2.toTransactionBytes()),
|
33700
|
+
blockHorizon: String(blockHorizon),
|
33701
|
+
feeAddressIndex: String(feePayerIndex),
|
33702
|
+
requiredBalances,
|
33703
|
+
estimatePredicates,
|
33704
|
+
excludeInput,
|
33705
|
+
reserveGas: reserveGas ? reserveGas.toString(10) : void 0
|
33706
|
+
});
|
33707
|
+
if (status.type === "DryRunFailureStatus") {
|
33708
|
+
const parsedReceipts = status.receipts.map(deserializeReceipt);
|
33709
|
+
throw this.extractDryRunError(request2, parsedReceipts, status.reason);
|
33710
|
+
}
|
33711
|
+
request2.witnesses = gqlTransaction.witnesses || request2.witnesses;
|
33712
|
+
request2.inputs = gqlTransaction.inputs?.map(deserializeInput) || request2.inputs;
|
33713
|
+
request2.outputs = gqlTransaction.outputs?.map(deserializeOutput) || request2.outputs;
|
33714
|
+
if (gqlTransaction.policies?.maxFee) {
|
33715
|
+
request2.maxFee = bn(gqlTransaction.policies.maxFee);
|
33716
|
+
}
|
33717
|
+
if (gqlTransaction.scriptGasLimit) {
|
33718
|
+
request2.gasLimit = bn(gqlTransaction.scriptGasLimit);
|
33719
|
+
}
|
33720
|
+
const rawReceipts = status.receipts;
|
33721
|
+
const chainId = await this.getChainId();
|
33722
|
+
request2.updateState(chainId, "funded", {
|
33723
|
+
gasPrice: gasPrice.toString(),
|
33724
|
+
receipts: rawReceipts
|
33725
|
+
});
|
33726
|
+
return {
|
33727
|
+
assembledRequest: request2,
|
33728
|
+
gasPrice: bn(gasPrice),
|
33729
|
+
receipts: status.receipts.map(deserializeReceipt),
|
33730
|
+
rawReceipts
|
33731
|
+
};
|
33732
|
+
}
|
32675
33733
|
/**
|
32676
33734
|
* Returns coins for the given owner.
|
32677
33735
|
*
|
@@ -32710,30 +33768,15 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32710
33768
|
*
|
32711
33769
|
* @param owner - The address to get resources for.
|
32712
33770
|
* @param quantities - The coin quantities to get.
|
32713
|
-
* @param
|
33771
|
+
* @param resourcesIdsToIgnore - IDs of excluded resources from the selection (optional).
|
32714
33772
|
* @returns A promise that resolves to the resources.
|
32715
33773
|
*/
|
32716
|
-
async getResourcesToSpend(owner, quantities,
|
33774
|
+
async getResourcesToSpend(owner, quantities, resourcesIdsToIgnore) {
|
32717
33775
|
const ownerAddress = new Address(owner);
|
32718
|
-
|
32719
|
-
|
32720
|
-
|
32721
|
-
|
32722
|
-
if (this.cache) {
|
32723
|
-
const cached = this.cache.getActiveData(ownerAddress.toB256());
|
32724
|
-
if (cached.utxos.length || cached.messages.length) {
|
32725
|
-
const {
|
32726
|
-
consensusParameters: {
|
32727
|
-
txParameters: { maxInputs }
|
32728
|
-
}
|
32729
|
-
} = await this.getChain();
|
32730
|
-
idsToExclude = adjustResourcesToExclude({
|
32731
|
-
userInput: idsToExclude,
|
32732
|
-
cached,
|
32733
|
-
maxInputs: maxInputs.toNumber()
|
32734
|
-
});
|
32735
|
-
}
|
32736
|
-
}
|
33776
|
+
const excludedIds = await this.adjustResourcesToIgnoreForAddresses(
|
33777
|
+
[ownerAddress.b256Address],
|
33778
|
+
resourcesIdsToIgnore
|
33779
|
+
);
|
32737
33780
|
const coinsQuery = {
|
32738
33781
|
owner: ownerAddress.toB256(),
|
32739
33782
|
queryPerAsset: quantities.map(coinQuantityfy).map(({ assetId, amount, max: maxPerAsset }) => ({
|
@@ -32741,7 +33784,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32741
33784
|
amount: (amount.eqn(0) ? bn(1) : amount).toString(10),
|
32742
33785
|
max: maxPerAsset ? maxPerAsset.toString(10) : void 0
|
32743
33786
|
})),
|
32744
|
-
excludedIds
|
33787
|
+
excludedIds
|
32745
33788
|
};
|
32746
33789
|
const result = await this.operations.getCoinsToSpend(coinsQuery);
|
32747
33790
|
const coins = result.coinsToSpend.flat().map((coin) => {
|
@@ -33308,11 +34351,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33308
34351
|
/**
|
33309
34352
|
* @hidden
|
33310
34353
|
*/
|
33311
|
-
extractDryRunError(transactionRequest, receipts,
|
33312
|
-
const status = dryRunStatus;
|
34354
|
+
extractDryRunError(transactionRequest, receipts, reason) {
|
33313
34355
|
let logs = [];
|
33314
34356
|
let groupedLogs = {};
|
33315
|
-
if (transactionRequest.abis) {
|
34357
|
+
if (transactionRequest.type === TransactionType.Script && transactionRequest.abis) {
|
33316
34358
|
({ logs, groupedLogs } = getAllDecodedLogs({
|
33317
34359
|
receipts,
|
33318
34360
|
mainAbi: transactionRequest.abis.main,
|
@@ -33323,7 +34365,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33323
34365
|
logs,
|
33324
34366
|
groupedLogs,
|
33325
34367
|
receipts,
|
33326
|
-
statusReason:
|
34368
|
+
statusReason: reason
|
33327
34369
|
});
|
33328
34370
|
}
|
33329
34371
|
/**
|
@@ -33350,6 +34392,45 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33350
34392
|
}
|
33351
34393
|
return transactionRequest;
|
33352
34394
|
}
|
34395
|
+
/**
|
34396
|
+
* @hidden
|
34397
|
+
*
|
34398
|
+
* This helper adjusts the resources to be excluded for a given set of addresses.
|
34399
|
+
* Supporting multiple addresses is important because of the `assembleTx` method,
|
34400
|
+
* which may be invoked with different addresses. It handles both messages and UTXOs,
|
34401
|
+
* ensuring the total number of inputs does not exceed the maximum allowed by the chain's
|
34402
|
+
* consensus parameters. The resources specified in the `resourcesIdsToIgnore` parameter have priority
|
34403
|
+
* over those retrieved from the cache.
|
34404
|
+
*/
|
34405
|
+
async adjustResourcesToIgnoreForAddresses(addresses, resourcesIdsToIgnore) {
|
34406
|
+
const final = {
|
34407
|
+
messages: resourcesIdsToIgnore?.messages?.map((nonce) => hexlify(nonce)) || [],
|
34408
|
+
utxos: resourcesIdsToIgnore?.utxos?.map((id) => hexlify(id)) || []
|
34409
|
+
};
|
34410
|
+
if (this.cache) {
|
34411
|
+
const cache2 = this.cache;
|
34412
|
+
const allCached = addresses.map((address) => cache2.getActiveData(address));
|
34413
|
+
const {
|
34414
|
+
consensusParameters: {
|
34415
|
+
txParameters: { maxInputs: maxInputsBn }
|
34416
|
+
}
|
34417
|
+
} = await this.getChain();
|
34418
|
+
const maxInputs = maxInputsBn.toNumber();
|
34419
|
+
for (let i = 0; i < allCached.length; i++) {
|
34420
|
+
let total = final.utxos.length + final.messages.length;
|
34421
|
+
if (total >= maxInputs) {
|
34422
|
+
break;
|
34423
|
+
}
|
34424
|
+
final.utxos = [...final.utxos, ...allCached[i].utxos.slice(0, maxInputs - total)];
|
34425
|
+
total = final.utxos.length + final.messages.length;
|
34426
|
+
if (total >= maxInputs) {
|
34427
|
+
break;
|
34428
|
+
}
|
34429
|
+
final.messages = [...final.messages, ...allCached[i].messages.slice(0, maxInputs - total)];
|
34430
|
+
}
|
34431
|
+
}
|
34432
|
+
return final;
|
34433
|
+
}
|
33353
34434
|
};
|
33354
34435
|
|
33355
34436
|
// src/providers/transaction-summary/get-transaction-summary.ts
|
@@ -33516,21 +34597,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33516
34597
|
});
|
33517
34598
|
}, "assembleTransactionSummaryFromJson");
|
33518
34599
|
|
33519
|
-
// src/providers/utils/merge-quantities.ts
|
33520
|
-
var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
|
33521
|
-
const resultMap = {};
|
33522
|
-
function addToMap({ amount, assetId }) {
|
33523
|
-
if (resultMap[assetId]) {
|
33524
|
-
resultMap[assetId] = resultMap[assetId].add(amount);
|
33525
|
-
} else {
|
33526
|
-
resultMap[assetId] = amount;
|
33527
|
-
}
|
33528
|
-
}
|
33529
|
-
__name(addToMap, "addToMap");
|
33530
|
-
coinQuantities.forEach((arr) => arr.forEach(addToMap));
|
33531
|
-
return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
|
33532
|
-
}, "mergeQuantities");
|
33533
|
-
|
33534
34600
|
// src/types.ts
|
33535
34601
|
var AbstractAccount = class {
|
33536
34602
|
static {
|
@@ -33575,6 +34641,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33575
34641
|
return { script, scriptData };
|
33576
34642
|
}, "assembleTransferToContractScript");
|
33577
34643
|
|
34644
|
+
// src/utils/split-coins-into-batches.ts
|
34645
|
+
var splitCoinsIntoBatches = /* @__PURE__ */ __name((coins, maxBatchLength) => {
|
34646
|
+
const batchesNum = Math.ceil(coins.length / maxBatchLength);
|
34647
|
+
const batches = [];
|
34648
|
+
for (let i = 0; i < batchesNum; i += 1) {
|
34649
|
+
const batchStart = i * maxBatchLength;
|
34650
|
+
const batchEnd = (i + 1) * maxBatchLength;
|
34651
|
+
batches.push(coins.slice(batchStart, batchEnd));
|
34652
|
+
}
|
34653
|
+
return batches;
|
34654
|
+
}, "splitCoinsIntoBatches");
|
34655
|
+
|
33578
34656
|
// src/account.ts
|
33579
34657
|
var MAX_FUNDING_ATTEMPTS = 5;
|
33580
34658
|
var Account = class extends AbstractAccount {
|
@@ -33641,11 +34719,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33641
34719
|
* Retrieves resources satisfying the spend query for the account.
|
33642
34720
|
*
|
33643
34721
|
* @param quantities - Quantities of resources to be obtained.
|
33644
|
-
* @param
|
34722
|
+
* @param resourcesIdsToIgnore - IDs of resources to be excluded from the query (optional).
|
33645
34723
|
* @returns A promise that resolves to an array of Resources.
|
33646
34724
|
*/
|
33647
|
-
async getResourcesToSpend(quantities,
|
33648
|
-
return this.provider.getResourcesToSpend(this.address, quantities,
|
34725
|
+
async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
|
34726
|
+
return this.provider.getResourcesToSpend(this.address, quantities, resourcesIdsToIgnore);
|
33649
34727
|
}
|
33650
34728
|
/**
|
33651
34729
|
* Retrieves coins owned by the account.
|
@@ -33690,6 +34768,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33690
34768
|
* @param request - The transaction request to fund.
|
33691
34769
|
* @param params - The estimated transaction parameters.
|
33692
34770
|
* @returns A promise that resolves to the funded transaction request.
|
34771
|
+
*
|
34772
|
+
* @deprecated Use provider.assembleTx instead
|
34773
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
33693
34774
|
*/
|
33694
34775
|
async fund(request2, params) {
|
33695
34776
|
const {
|
@@ -33812,7 +34893,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33812
34893
|
amount,
|
33813
34894
|
assetId: assetId || await this.provider.getBaseAssetId()
|
33814
34895
|
});
|
33815
|
-
|
34896
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request2);
|
34897
|
+
request2 = await setAndValidateGasAndFeeForAssembledTx({
|
34898
|
+
gasPrice,
|
34899
|
+
provider: this.provider,
|
34900
|
+
transactionRequest,
|
34901
|
+
setGasLimit: txParams?.gasLimit,
|
34902
|
+
setMaxFee: txParams?.maxFee
|
34903
|
+
});
|
33816
34904
|
return request2;
|
33817
34905
|
}
|
33818
34906
|
/**
|
@@ -33838,7 +34926,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33838
34926
|
async batchTransfer(transferParams, txParams = {}) {
|
33839
34927
|
let request2 = new ScriptTransactionRequest(txParams);
|
33840
34928
|
request2 = this.addBatchTransfer(request2, transferParams);
|
33841
|
-
|
34929
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request2);
|
34930
|
+
request2 = await setAndValidateGasAndFeeForAssembledTx({
|
34931
|
+
gasPrice,
|
34932
|
+
provider: this.provider,
|
34933
|
+
transactionRequest,
|
34934
|
+
setGasLimit: txParams?.gasLimit,
|
34935
|
+
setMaxFee: txParams?.maxFee
|
34936
|
+
});
|
33842
34937
|
return this.sendTransaction(request2, { estimateTxDependencies: false });
|
33843
34938
|
}
|
33844
34939
|
/**
|
@@ -33910,7 +35005,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33910
35005
|
const { script, scriptData } = await assembleTransferToContractScript(transferParams);
|
33911
35006
|
request2.script = script;
|
33912
35007
|
request2.scriptData = scriptData;
|
33913
|
-
|
35008
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request2, quantities);
|
35009
|
+
request2 = await setAndValidateGasAndFeeForAssembledTx({
|
35010
|
+
gasPrice,
|
35011
|
+
provider: this.provider,
|
35012
|
+
transactionRequest,
|
35013
|
+
setGasLimit: txParams?.gasLimit,
|
35014
|
+
setMaxFee: txParams?.maxFee
|
35015
|
+
});
|
33914
35016
|
return this.sendTransaction(request2);
|
33915
35017
|
}
|
33916
35018
|
/**
|
@@ -33938,16 +35040,144 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33938
35040
|
const baseAssetId = await this.provider.getBaseAssetId();
|
33939
35041
|
let request2 = new ScriptTransactionRequest(params);
|
33940
35042
|
const quantities = [{ amount: bn(amount), assetId: baseAssetId }];
|
33941
|
-
const
|
33942
|
-
request2 =
|
33943
|
-
|
33944
|
-
|
33945
|
-
|
33946
|
-
txParams
|
35043
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request2, quantities);
|
35044
|
+
request2 = await setAndValidateGasAndFeeForAssembledTx({
|
35045
|
+
gasPrice,
|
35046
|
+
provider: this.provider,
|
35047
|
+
transactionRequest,
|
35048
|
+
setGasLimit: txParams?.gasLimit,
|
35049
|
+
setMaxFee: txParams?.maxFee
|
33947
35050
|
});
|
33948
|
-
await this.fund(request2, txCost);
|
33949
35051
|
return this.sendTransaction(request2);
|
33950
35052
|
}
|
35053
|
+
/**
|
35054
|
+
* Consolidates base asset UTXOs into fewer, larger ones.
|
35055
|
+
*
|
35056
|
+
* Retrieves a limited number of base asset coins (as defined by `Provider.RESOURCES_PAGE_SIZE_LIMIT`),
|
35057
|
+
* assembles consolidation transactions, and submits them to the network.
|
35058
|
+
*
|
35059
|
+
* Note: This method currently supports only the base asset.
|
35060
|
+
*
|
35061
|
+
* @param params - The parameters for coin consolidation, including the asset ID, mode, and output number.
|
35062
|
+
* @returns A promise that resolves to the response of the submitted transactions.
|
35063
|
+
* @throws Will throw an error if the asset is not a base asset as non-base asset consolidation is not implemented.
|
35064
|
+
*/
|
35065
|
+
async consolidateCoins(params) {
|
35066
|
+
const { assetId } = params;
|
35067
|
+
const { coins } = await this.getCoins(assetId);
|
35068
|
+
const baseAssetId = await this.provider.getBaseAssetId();
|
35069
|
+
const isBaseAsset = baseAssetId === assetId;
|
35070
|
+
let submitAll;
|
35071
|
+
const consolidationParams = {
|
35072
|
+
coins,
|
35073
|
+
mode: params.mode,
|
35074
|
+
outputNum: params.outputNum
|
35075
|
+
};
|
35076
|
+
if (isBaseAsset) {
|
35077
|
+
({ submitAll } = await this.assembleBaseAssetConsolidationTxs(consolidationParams));
|
35078
|
+
} else {
|
35079
|
+
throw new FuelError(
|
35080
|
+
ErrorCode.UNSUPPORTED_FEATURE,
|
35081
|
+
"Consolidation for non-base assets is not supported yet."
|
35082
|
+
);
|
35083
|
+
}
|
35084
|
+
return submitAll();
|
35085
|
+
}
|
35086
|
+
/**
|
35087
|
+
* Assembles transactions for consolidating base asset coins into fewer UTXOs.
|
35088
|
+
*
|
35089
|
+
* This method splits the provided coins into batches and creates transaction requests
|
35090
|
+
* to consolidate them. It calculates the necessary fee and sets up the transactions
|
35091
|
+
* to be submitted either in parallel (default) or sequentially.
|
35092
|
+
*
|
35093
|
+
* @param params - The parameters for assembling base asset consolidation transactions.
|
35094
|
+
*
|
35095
|
+
* @returns An object containing the assembled transactions, the total fee cost, and a callback to submit all transactions.
|
35096
|
+
*/
|
35097
|
+
async assembleBaseAssetConsolidationTxs(params) {
|
35098
|
+
const { coins, mode = "parallel", outputNum = 1 } = params;
|
35099
|
+
const baseAssetId = await this.provider.getBaseAssetId();
|
35100
|
+
this.validateConsolidationTxsCoins(coins, baseAssetId);
|
35101
|
+
const chainInfo = await this.provider.getChain();
|
35102
|
+
const maxInputsNumber = chainInfo.consensusParameters.txParameters.maxInputs.toNumber();
|
35103
|
+
let totalFeeCost = bn(0);
|
35104
|
+
const txs = [];
|
35105
|
+
const coinsBatches = splitCoinsIntoBatches(coins, maxInputsNumber);
|
35106
|
+
const gasPrice = await this.provider.estimateGasPrice(10);
|
35107
|
+
const consolidateMoreThanOneCoin = outputNum > 1;
|
35108
|
+
coinsBatches.filter((batch) => batch.length > 1).forEach((coinBatch) => {
|
35109
|
+
const request2 = new ScriptTransactionRequest({
|
35110
|
+
script: "0x"
|
35111
|
+
});
|
35112
|
+
request2.addResources(coinBatch);
|
35113
|
+
if (consolidateMoreThanOneCoin) {
|
35114
|
+
Array.from({ length: outputNum - 1 }).forEach(() => {
|
35115
|
+
request2.addCoinOutput(this.address, 0, baseAssetId);
|
35116
|
+
});
|
35117
|
+
}
|
35118
|
+
const minGas = request2.calculateMinGas(chainInfo);
|
35119
|
+
const fee = calculateGasFee({
|
35120
|
+
gasPrice,
|
35121
|
+
gas: minGas,
|
35122
|
+
priceFactor: chainInfo.consensusParameters.feeParameters.gasPriceFactor,
|
35123
|
+
tip: request2.tip
|
35124
|
+
});
|
35125
|
+
request2.maxFee = fee;
|
35126
|
+
if (consolidateMoreThanOneCoin) {
|
35127
|
+
const total = request2.inputs.filter(isRequestInputCoin).reduce((acc, input) => acc.add(input.amount), bn(0));
|
35128
|
+
const amountPerNewUtxo = total.div(outputNum + 1);
|
35129
|
+
request2.outputs.forEach((output) => {
|
35130
|
+
if (output.type === OutputType.Coin) {
|
35131
|
+
output.amount = amountPerNewUtxo;
|
35132
|
+
}
|
35133
|
+
});
|
35134
|
+
}
|
35135
|
+
totalFeeCost = totalFeeCost.add(fee);
|
35136
|
+
txs.push(request2);
|
35137
|
+
});
|
35138
|
+
const submitAll = this.prepareSubmitAll({ txs, mode });
|
35139
|
+
return { txs, totalFeeCost, submitAll };
|
35140
|
+
}
|
35141
|
+
/**
|
35142
|
+
* Prepares a function to submit all transactions either sequentially or in parallel.
|
35143
|
+
*
|
35144
|
+
* @param params - The parameters for preparing the submitAll callback.
|
35145
|
+
*
|
35146
|
+
* @returns A callback that, when called, submits all transactions and returns their results and any errors encountered.
|
35147
|
+
*/
|
35148
|
+
prepareSubmitAll = /* @__PURE__ */ __name((params) => {
|
35149
|
+
const { txs, mode = "sequential" } = params;
|
35150
|
+
return async () => {
|
35151
|
+
const txResponses = [];
|
35152
|
+
const errors2 = [];
|
35153
|
+
if (mode === "sequential") {
|
35154
|
+
for (const tx of txs) {
|
35155
|
+
try {
|
35156
|
+
const submit = await this.sendTransaction(tx);
|
35157
|
+
const response = await submit.waitForResult();
|
35158
|
+
txResponses.push(response);
|
35159
|
+
} catch (error2) {
|
35160
|
+
errors2.push(error2);
|
35161
|
+
}
|
35162
|
+
}
|
35163
|
+
} else {
|
35164
|
+
const results = await Promise.allSettled(
|
35165
|
+
txs.map(async (tx) => {
|
35166
|
+
const submit = await this.sendTransaction(tx);
|
35167
|
+
return submit.waitForResult();
|
35168
|
+
})
|
35169
|
+
);
|
35170
|
+
results.forEach((result) => {
|
35171
|
+
if (result.status === "fulfilled") {
|
35172
|
+
txResponses.push(result.value);
|
35173
|
+
} else {
|
35174
|
+
errors2.push(result.reason);
|
35175
|
+
}
|
35176
|
+
});
|
35177
|
+
}
|
35178
|
+
return { txResponses, errors: errors2 };
|
35179
|
+
};
|
35180
|
+
}, "prepareSubmitAll");
|
33951
35181
|
/**
|
33952
35182
|
* Returns a transaction cost to enable user
|
33953
35183
|
* to set gasLimit and also reserve balance amounts
|
@@ -33957,6 +35187,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33957
35187
|
* @param transactionCostParams - The transaction cost parameters (optional).
|
33958
35188
|
*
|
33959
35189
|
* @returns A promise that resolves to the transaction cost object.
|
35190
|
+
*
|
35191
|
+
* @deprecated Use provider.assembleTx instead
|
35192
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
33960
35193
|
*/
|
33961
35194
|
async getTransactionCost(transactionRequestLike, { signatureCallback, quantities = [], gasPrice } = {}) {
|
33962
35195
|
const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
|
@@ -34118,6 +35351,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34118
35351
|
} : void 0;
|
34119
35352
|
}
|
34120
35353
|
/** @hidden * */
|
35354
|
+
async assembleTx(transactionRequest, quantities = []) {
|
35355
|
+
const outputQuantities = transactionRequest.outputs.filter((o) => o.type === OutputType.Coin).map(({ amount, assetId }) => ({ assetId: String(assetId), amount: bn(amount) }));
|
35356
|
+
transactionRequest.gasLimit = bn(0);
|
35357
|
+
transactionRequest.maxFee = bn(0);
|
35358
|
+
const { assembledRequest, gasPrice } = await this.provider.assembleTx({
|
35359
|
+
request: transactionRequest,
|
35360
|
+
accountCoinQuantities: mergeQuantities(outputQuantities, quantities),
|
35361
|
+
feePayerAccount: this
|
35362
|
+
});
|
35363
|
+
return { transactionRequest: assembledRequest, gasPrice };
|
35364
|
+
}
|
35365
|
+
/** @hidden * */
|
34121
35366
|
validateTransferAmount(amount) {
|
34122
35367
|
if (bn(amount).lte(0)) {
|
34123
35368
|
throw new FuelError(
|
@@ -34165,6 +35410,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34165
35410
|
}
|
34166
35411
|
return request2;
|
34167
35412
|
}
|
35413
|
+
/** @hidden * */
|
35414
|
+
validateConsolidationTxsCoins(coins, assetId) {
|
35415
|
+
if (coins.length <= 1) {
|
35416
|
+
throw new FuelError(ErrorCode.NO_COINS_TO_CONSOLIDATE, "No coins to consolidate.");
|
35417
|
+
}
|
35418
|
+
if (!coins.every((c) => c.assetId === assetId)) {
|
35419
|
+
throw new FuelError(
|
35420
|
+
ErrorCode.COINS_ASSET_ID_MISMATCH,
|
35421
|
+
"All coins to consolidate must be from the same asset id."
|
35422
|
+
);
|
35423
|
+
}
|
35424
|
+
}
|
34168
35425
|
};
|
34169
35426
|
|
34170
35427
|
// ../../node_modules/.pnpm/@noble+curves@1.8.1/node_modules/@noble/curves/esm/abstract/utils.js
|
@@ -39574,24 +40831,12 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
39574
40831
|
|
39575
40832
|
// src/utils/deployScriptOrPredicate.ts
|
39576
40833
|
async function fundBlobTx(deployer, blobTxRequest) {
|
39577
|
-
|
39578
|
-
|
39579
|
-
|
39580
|
-
|
39581
|
-
|
39582
|
-
|
39583
|
-
gasPrice,
|
39584
|
-
gas: minGas,
|
39585
|
-
priceFactor,
|
39586
|
-
tip: blobTxRequest.tip
|
39587
|
-
}).add(1);
|
39588
|
-
totalCost = totalCost.add(minFee);
|
39589
|
-
if (totalCost.gt(await deployer.getBalance())) {
|
39590
|
-
throw new FuelError(ErrorCode.FUNDS_TOO_LOW, "Insufficient balance to deploy predicate.");
|
39591
|
-
}
|
39592
|
-
const txCost = await deployer.getTransactionCost(blobTxRequest);
|
39593
|
-
blobTxRequest.maxFee = txCost.maxFee;
|
39594
|
-
return deployer.fund(blobTxRequest, txCost);
|
40834
|
+
const { assembledRequest } = await deployer.provider.assembleTx({
|
40835
|
+
request: blobTxRequest,
|
40836
|
+
feePayerAccount: deployer,
|
40837
|
+
accountCoinQuantities: []
|
40838
|
+
});
|
40839
|
+
return assembledRequest;
|
39595
40840
|
}
|
39596
40841
|
__name(fundBlobTx, "fundBlobTx");
|
39597
40842
|
function adjustConfigurableOffsets(jsonAbi, configurableOffsetDiff) {
|
@@ -40187,6 +41432,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
40187
41432
|
const transactionRequest = transactionRequestify(transactionRequestLike);
|
40188
41433
|
return super.simulateTransaction(transactionRequest, { estimateTxDependencies: false });
|
40189
41434
|
}
|
41435
|
+
/**
|
41436
|
+
* Retrieves the properly encoded predicate data.
|
41437
|
+
*
|
41438
|
+
* @returns A Uint8Array containing the encoded predicate data. If no predicate data is available, returns an empty Uint8Array.
|
41439
|
+
*/
|
40190
41440
|
getPredicateData() {
|
40191
41441
|
if (!this.predicateData.length) {
|
40192
41442
|
return new Uint8Array();
|
@@ -40241,14 +41491,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
40241
41491
|
* Retrieves resources satisfying the spend query for the account.
|
40242
41492
|
*
|
40243
41493
|
* @param quantities - IDs of coins to exclude.
|
40244
|
-
* @param
|
41494
|
+
* @param resourcesIdsToIgnore - IDs of resources to be excluded from the query.
|
40245
41495
|
* @returns A promise that resolves to an array of Resources.
|
40246
41496
|
*/
|
40247
|
-
async getResourcesToSpend(quantities,
|
41497
|
+
async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
|
40248
41498
|
const resources = await this.provider.getResourcesToSpend(
|
40249
41499
|
this.address,
|
40250
41500
|
quantities,
|
40251
|
-
|
41501
|
+
resourcesIdsToIgnore
|
40252
41502
|
);
|
40253
41503
|
return resources.map((resource) => ({
|
40254
41504
|
...resource,
|