@fuel-ts/account 0.81.0 → 0.83.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @fuel-ts/account might be problematic. Click here for more details.
- package/README.md +3 -3
- package/dist/account.d.ts +7 -6
- package/dist/account.d.ts.map +1 -1
- package/dist/configs.d.ts.map +1 -1
- package/dist/configs.global.js +1 -1
- package/dist/configs.global.js.map +1 -1
- package/dist/configs.js +1 -1
- package/dist/configs.js.map +1 -1
- package/dist/configs.mjs +1 -1
- package/dist/configs.mjs.map +1 -1
- package/dist/index.global.js +890 -619
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +853 -604
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +696 -448
- package/dist/index.mjs.map +1 -1
- package/dist/predicate/predicate.d.ts +12 -24
- package/dist/predicate/predicate.d.ts.map +1 -1
- package/dist/providers/__generated__/operations.d.ts +810 -359
- package/dist/providers/__generated__/operations.d.ts.map +1 -1
- package/dist/providers/coin-quantity.d.ts +3 -3
- package/dist/providers/coin-quantity.d.ts.map +1 -1
- package/dist/providers/coin.d.ts +4 -2
- package/dist/providers/coin.d.ts.map +1 -1
- package/dist/providers/message.d.ts +7 -1
- package/dist/providers/message.d.ts.map +1 -1
- package/dist/providers/provider.d.ts +44 -27
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/providers/transaction-request/create-transaction-request.d.ts +1 -1
- package/dist/providers/transaction-request/create-transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-request/input.d.ts +2 -2
- package/dist/providers/transaction-request/input.d.ts.map +1 -1
- package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-request/transaction-request.d.ts +13 -33
- package/dist/providers/transaction-request/transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-request/utils.d.ts +3 -0
- package/dist/providers/transaction-request/utils.d.ts.map +1 -1
- package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +2 -0
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
- package/dist/providers/transaction-summary/calculate-transaction-fee.d.ts +3 -2
- package/dist/providers/transaction-summary/calculate-transaction-fee.d.ts.map +1 -1
- package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
- package/dist/providers/utils/gas.d.ts +8 -2
- package/dist/providers/utils/gas.d.ts.map +1 -1
- package/dist/providers/utils/merge-quantities.d.ts +1 -1
- package/dist/providers/utils/merge-quantities.d.ts.map +1 -1
- package/dist/test-utils/launchNode.d.ts +1 -1
- package/dist/test-utils/launchNode.d.ts.map +1 -1
- package/dist/test-utils.global.js +1615 -1114
- package/dist/test-utils.global.js.map +1 -1
- package/dist/test-utils.js +841 -596
- package/dist/test-utils.js.map +1 -1
- package/dist/test-utils.mjs +696 -451
- package/dist/test-utils.mjs.map +1 -1
- package/dist/wallet/base-wallet-unlocked.d.ts.map +1 -1
- package/package.json +16 -16
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/account.ts","../src/providers/coin-quantity.ts","../src/providers/provider.ts","../src/providers/__generated__/operations.ts","../src/providers/fuel-graphql-subscriber.ts","../src/providers/memory-cache.ts","../src/providers/transaction-request/input.ts","../src/providers/transaction-request/output.ts","../src/providers/transaction-request/transaction-request.ts","../src/providers/resource.ts","../src/providers/utils/receipts.ts","../src/providers/utils/block-explorer.ts","../src/providers/utils/gas.ts","../src/providers/utils/json.ts","../src/providers/utils/sleep.ts","../src/providers/utils/extract-tx-error.ts","../src/providers/transaction-request/errors.ts","../src/providers/transaction-request/witness.ts","../src/providers/transaction-request/create-transaction-request.ts","../src/providers/transaction-request/hash-transaction.ts","../src/providers/transaction-request/storage-slot.ts","../src/providers/transaction-request/script-transaction-request.ts","../src/providers/transaction-request/scripts.ts","../src/providers/transaction-request/utils.ts","../src/providers/transaction-response/transaction-response.ts","../src/providers/transaction-summary/assemble-transaction-summary.ts","../src/providers/transaction-summary/calculate-transaction-fee.ts","../src/providers/transaction-summary/operations.ts","../src/providers/transaction-summary/call.ts","../src/providers/transaction-summary/input.ts","../src/providers/transaction-summary/output.ts","../src/providers/transaction-summary/types.ts","../src/providers/transaction-summary/receipt.ts","../src/providers/transaction-summary/status.ts","../src/providers/transaction-response/getDecodedLogs.ts","../src/providers/utils/auto-retry-fetch.ts","../src/providers/utils/merge-quantities.ts","../src/providers/transaction-summary/get-transaction-summary.ts","../src/providers/chains.ts","../src/providers/assets/utils/network.ts","../src/providers/assets/utils/url.ts","../src/providers/assets/utils/resolveIconPaths.ts","../src/providers/assets/index.ts","../src/utils/formatTransferToContractScriptData.ts","../src/wallet/base-wallet-unlocked.ts","../src/signer/signer.ts","../src/wallet/keystore-wallet.ts","../src/hdwallet/hdwallet.ts","../src/mnemonic/mnemonic.ts","../src/wordlists/words/english.ts","../src/wordlists/index.ts","../src/mnemonic/utils.ts","../src/wallet/wallets.ts","../src/wallet/wallet.ts","../src/wallet-manager/wallet-manager.ts","../src/wallet-manager/storages/memory-storage.ts","../src/wallet-manager/vaults/mnemonic-vault.ts","../src/wallet-manager/vaults/privatekey-vault.ts","../src/wallet-manager/types.ts","../src/predicate/predicate.ts","../src/predicate/utils/getPredicateRoot.ts","../src/connectors/fuel.ts","../src/connectors/fuel-connector.ts","../src/connectors/types/connector-types.ts","../src/connectors/types/local-storage.ts","../src/connectors/utils/cache.ts","../src/connectors/utils/dispatch-fuel-connector-event.ts","../src/connectors/utils/promises.ts"],"sourcesContent":["export * from './account';\nexport * from './wallet';\nexport * from './hdwallet';\nexport * from './mnemonic';\nexport * from './wordlists';\nexport * from './signer';\nexport * from './wallet-manager';\nexport * from './predicate';\nexport * from './providers';\nexport * from './connectors';\n","import { Address } from '@fuel-ts/address';\nimport { BaseAssetId } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { AbstractAccount } from '@fuel-ts/interfaces';\nimport type { AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish, BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { FuelConnector } from './connectors';\nimport type {\n TransactionRequestLike,\n CallResult,\n TransactionRequest,\n Coin,\n CoinQuantityLike,\n CoinQuantity,\n Message,\n Resource,\n ExcludeResourcesOption,\n Provider,\n ScriptTransactionRequestLike,\n ProviderSendTxParams,\n TransactionResponse,\n EstimateTransactionParams,\n} from './providers';\nimport {\n withdrawScript,\n ScriptTransactionRequest,\n transactionRequestify,\n addAmountToAsset,\n} from './providers';\nimport { assembleTransferToContractScript } from './utils/formatTransferToContractScriptData';\n\nexport type TxParamsType = Pick<\n ScriptTransactionRequestLike,\n 'gasLimit' | 'gasPrice' | 'maturity' | 'maxFee' | 'witnessLimit'\n>;\n\n/**\n * `Account` provides an abstraction for interacting with accounts or wallets on the network.\n */\nexport class Account extends AbstractAccount {\n /**\n * The address associated with the account.\n */\n readonly address: AbstractAddress;\n\n /**\n * The provider used to interact with the network.\n */\n protected _provider?: Provider;\n\n protected _connector?: FuelConnector;\n\n /**\n * Creates a new Account instance.\n *\n * @param address - The address of the account.\n * @param provider - A Provider instance (optional).\n */\n constructor(address: string | AbstractAddress, provider?: Provider, connector?: FuelConnector) {\n super();\n this._provider = provider;\n this._connector = connector;\n this.address = Address.fromDynamicInput(address);\n }\n\n /**\n * The provider used to interact with the network.\n *\n * @returns A Provider instance.\n *\n * @throws `FuelError` if the provider is not set.\n */\n get provider(): Provider {\n if (!this._provider) {\n throw new FuelError(ErrorCode.MISSING_PROVIDER, 'Provider not set');\n }\n\n return this._provider;\n }\n\n /**\n * Sets the provider for the account.\n *\n * @param provider - A Provider instance.\n */\n set provider(provider: Provider) {\n this._provider = provider;\n }\n\n /**\n * Changes the provider connection for the account.\n *\n * @param provider - A Provider instance.\n * @returns The updated Provider instance.\n */\n connect(provider: Provider): Provider {\n this._provider = provider;\n return this.provider;\n }\n\n /**\n * Retrieves resources satisfying the spend query for the account.\n *\n * @param quantities - IDs of coins to exclude.\n * @param excludedIds - IDs of resources to be excluded from the query.\n * @returns A promise that resolves to an array of Resources.\n */\n async getResourcesToSpend(\n quantities: CoinQuantityLike[] /** IDs of coins to exclude */,\n excludedIds?: ExcludeResourcesOption\n ): Promise<Resource[]> {\n return this.provider.getResourcesToSpend(this.address, quantities, excludedIds);\n }\n\n /**\n * Retrieves coins owned by the account.\n *\n * @param assetId - The asset ID of the coins to retrieve.\n * @returns A promise that resolves to an array of Coins.\n */\n async getCoins(assetId?: BytesLike): Promise<Coin[]> {\n const coins = [];\n\n const pageSize = 9999;\n let cursor;\n // eslint-disable-next-line no-unreachable-loop\n for (;;) {\n const pageCoins = await this.provider.getCoins(this.address, assetId, {\n first: pageSize,\n after: cursor,\n });\n\n coins.push(...pageCoins);\n\n const hasNextPage = pageCoins.length >= pageSize;\n if (!hasNextPage) {\n break;\n }\n\n // TODO: implement pagination\n throw new FuelError(\n ErrorCode.NOT_SUPPORTED,\n `Wallets containing more than ${pageSize} coins exceed the current supported limit.`\n );\n }\n\n return coins;\n }\n\n /**\n * Retrieves messages owned by the account.\n *\n * @returns A promise that resolves to an array of Messages.\n */\n async getMessages(): Promise<Message[]> {\n const messages = [];\n\n const pageSize = 9999;\n let cursor;\n // eslint-disable-next-line no-unreachable-loop\n for (;;) {\n const pageMessages = await this.provider.getMessages(this.address, {\n first: pageSize,\n after: cursor,\n });\n\n messages.push(...pageMessages);\n\n const hasNextPage = pageMessages.length >= pageSize;\n if (!hasNextPage) {\n break;\n }\n\n // TODO: implement pagination\n throw new FuelError(\n ErrorCode.NOT_SUPPORTED,\n `Wallets containing more than ${pageSize} messages exceed the current supported limit.`\n );\n }\n\n return messages;\n }\n\n /**\n * Retrieves the balance of the account for the given asset.\n *\n * @param assetId - The asset ID to check the balance for.\n * @returns A promise that resolves to the balance amount.\n */\n async getBalance(assetId: BytesLike = BaseAssetId): Promise<BN> {\n const amount = await this.provider.getBalance(this.address, assetId);\n return amount;\n }\n\n /**\n * Retrieves all the balances for the account.\n *\n * @returns A promise that resolves to an array of Coins and their quantities.\n */\n async getBalances(): Promise<CoinQuantity[]> {\n const balances = [];\n\n const pageSize = 9999;\n let cursor;\n // eslint-disable-next-line no-unreachable-loop\n for (;;) {\n const pageBalances = await this.provider.getBalances(this.address, {\n first: pageSize,\n after: cursor,\n });\n\n balances.push(...pageBalances);\n\n const hasNextPage = pageBalances.length >= pageSize;\n if (!hasNextPage) {\n break;\n }\n\n // TODO: implement pagination\n throw new FuelError(\n ErrorCode.NOT_SUPPORTED,\n `Wallets containing more than ${pageSize} balances exceed the current supported limit.`\n );\n }\n\n return balances;\n }\n\n /**\n * Adds resources to the transaction enough to fund it.\n *\n * @param request - The transaction request.\n * @param coinQuantities - The coin quantities required to execute the transaction.\n * @param fee - The estimated transaction fee.\n * @returns A promise that resolves when the resources are added to the transaction.\n */\n async fund<T extends TransactionRequest>(\n request: T,\n coinQuantities: CoinQuantity[],\n fee: BN\n ): Promise<void> {\n const updatedQuantities = addAmountToAsset({\n amount: bn(fee),\n assetId: BaseAssetId,\n coinQuantities,\n });\n\n const quantitiesDict: Record<string, { required: BN; owned: BN }> = {};\n\n updatedQuantities.forEach(({ amount, assetId }) => {\n quantitiesDict[assetId] = {\n required: amount,\n owned: bn(0),\n };\n });\n\n const cachedUtxos: BytesLike[] = [];\n const cachedMessages: BytesLike[] = [];\n\n const owner = this.address.toB256();\n\n request.inputs.forEach((input) => {\n const isResource = 'amount' in input;\n\n if (isResource) {\n const isCoin = 'owner' in input;\n\n if (isCoin) {\n const assetId = String(input.assetId);\n if (input.owner === owner && quantitiesDict[assetId]) {\n const amount = bn(input.amount);\n quantitiesDict[assetId].owned = quantitiesDict[assetId].owned.add(amount);\n\n // caching this utxo to avoid fetching it again if requests needs to be funded\n cachedUtxos.push(input.id);\n }\n } else if (input.recipient === owner && input.amount && quantitiesDict[BaseAssetId]) {\n quantitiesDict[BaseAssetId].owned = quantitiesDict[BaseAssetId].owned.add(input.amount);\n\n // caching this message to avoid fetching it again if requests needs to be funded\n cachedMessages.push(input.nonce);\n }\n }\n });\n\n const missingQuantities: CoinQuantity[] = [];\n Object.entries(quantitiesDict).forEach(([assetId, { owned, required }]) => {\n if (owned.lt(required)) {\n missingQuantities.push({\n assetId,\n amount: required.sub(owned),\n });\n }\n });\n\n const needsToBeFunded = missingQuantities.length;\n\n if (needsToBeFunded) {\n const resources = await this.getResourcesToSpend(missingQuantities, {\n messages: cachedMessages,\n utxos: cachedUtxos,\n });\n request.addResources(resources);\n }\n }\n\n /**\n * A helper that creates a transfer transaction request and returns it.\n *\n * @param destination - The address of the destination.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The transaction parameters (gasLimit, gasPrice, maturity).\n * @returns A promise that resolves to the prepared transaction request.\n */\n async createTransfer(\n /** Address of the destination */\n destination: string | AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId: BytesLike = BaseAssetId,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionRequest> {\n const { minGasPrice } = this.provider.getGasConfig();\n const params = { gasPrice: minGasPrice, ...txParams };\n const request = new ScriptTransactionRequest(params);\n request.addCoinOutput(Address.fromAddressOrString(destination), amount, assetId);\n const { maxFee, requiredQuantities, gasUsed, estimatedInputs } =\n await this.provider.getTransactionCost(request, [], {\n estimateTxDependencies: true,\n resourcesOwner: this,\n });\n\n request.gasPrice = bn(txParams.gasPrice ?? minGasPrice);\n request.gasLimit = bn(txParams.gasLimit ?? gasUsed);\n\n this.validateGas({\n gasUsed,\n gasPrice: request.gasPrice,\n gasLimit: request.gasLimit,\n minGasPrice,\n });\n\n await this.fund(request, requiredQuantities, maxFee);\n\n request.updatePredicateInputs(estimatedInputs);\n\n return request;\n }\n\n /**\n * Transfers coins to a destination address.\n *\n * @param destination - The address of the destination.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The transaction parameters (gasLimit, gasPrice, maturity).\n * @returns A promise that resolves to the transaction response.\n */\n async transfer(\n /** Address of the destination */\n destination: string | AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId: BytesLike = BaseAssetId,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionResponse> {\n if (bn(amount).lte(0)) {\n throw new FuelError(\n ErrorCode.INVALID_TRANSFER_AMOUNT,\n 'Transfer amount must be a positive number.'\n );\n }\n const request = await this.createTransfer(destination, amount, assetId, txParams);\n return this.sendTransaction(request, { estimateTxDependencies: false });\n }\n\n /**\n * Transfers coins to a contract address.\n *\n * @param contractId - The address of the contract.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The optional transaction parameters.\n * @returns A promise that resolves to the transaction response.\n */\n async transferToContract(\n /** Contract address */\n contractId: string | AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId: BytesLike = BaseAssetId,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionResponse> {\n if (bn(amount).lte(0)) {\n throw new FuelError(\n ErrorCode.INVALID_TRANSFER_AMOUNT,\n 'Transfer amount must be a positive number.'\n );\n }\n\n const contractAddress = Address.fromAddressOrString(contractId);\n const { minGasPrice } = this.provider.getGasConfig();\n const params = { gasPrice: minGasPrice, ...txParams };\n\n const { script, scriptData } = await assembleTransferToContractScript({\n hexlifiedContractId: contractAddress.toB256(),\n amountToTransfer: bn(amount),\n assetId,\n });\n\n const request = new ScriptTransactionRequest({\n ...params,\n script,\n scriptData,\n });\n\n request.addContractInputAndOutput(contractAddress);\n\n const { maxFee, requiredQuantities, gasUsed } = await this.provider.getTransactionCost(\n request,\n [{ amount: bn(amount), assetId: String(assetId) }]\n );\n\n request.gasLimit = bn(params.gasLimit ?? gasUsed);\n\n this.validateGas({\n gasUsed,\n gasPrice: request.gasPrice,\n gasLimit: request.gasLimit,\n minGasPrice,\n });\n\n await this.fund(request, requiredQuantities, maxFee);\n\n return this.sendTransaction(request);\n }\n\n /**\n * Withdraws an amount of the base asset to the base chain.\n *\n * @param recipient - Address of the recipient on the base chain.\n * @param amount - Amount of base asset.\n * @param txParams - The optional transaction parameters.\n * @returns A promise that resolves to the transaction response.\n */\n async withdrawToBaseLayer(\n /** Address of the recipient on the base chain */\n recipient: string | AbstractAddress,\n /** Amount of base asset */\n amount: BigNumberish,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionResponse> {\n const { minGasPrice } = this.provider.getGasConfig();\n\n const recipientAddress = Address.fromAddressOrString(recipient);\n // add recipient and amount to the transaction script code\n const recipientDataArray = arrayify(\n '0x'.concat(recipientAddress.toHexString().substring(2).padStart(64, '0'))\n );\n const amountDataArray = arrayify(\n '0x'.concat(bn(amount).toHex().substring(2).padStart(16, '0'))\n );\n const script = new Uint8Array([\n ...arrayify(withdrawScript.bytes),\n ...recipientDataArray,\n ...amountDataArray,\n ]);\n\n const params: ScriptTransactionRequestLike = { script, gasPrice: minGasPrice, ...txParams };\n\n const request = new ScriptTransactionRequest(params);\n const forwardingQuantities = [{ amount: bn(amount), assetId: BaseAssetId }];\n\n const { requiredQuantities, maxFee, gasUsed } = await this.provider.getTransactionCost(\n request,\n forwardingQuantities\n );\n\n request.gasLimit = bn(params.gasLimit ?? gasUsed);\n\n this.validateGas({\n gasUsed,\n gasPrice: request.gasPrice,\n gasLimit: request.gasLimit,\n minGasPrice,\n });\n\n await this.fund(request, requiredQuantities, maxFee);\n\n return this.sendTransaction(request);\n }\n\n async signMessage(message: string): Promise<string> {\n if (!this._connector) {\n throw new FuelError(ErrorCode.MISSING_CONNECTOR, 'A connector is required to sign messages.');\n }\n return this._connector.signMessage(this.address.toString(), message);\n }\n\n /**\n * Signs a transaction with the wallet's private key.\n *\n * @param transactionRequestLike - The transaction request to sign.\n * @returns A promise that resolves to the signature of the transaction.\n */\n async signTransaction(transactionRequestLike: TransactionRequestLike): Promise<string> {\n if (!this._connector) {\n throw new FuelError(\n ErrorCode.MISSING_CONNECTOR,\n 'A connector is required to sign transactions.'\n );\n }\n return this._connector.signTransaction(this.address.toString(), transactionRequestLike);\n }\n\n /**\n * Sends a transaction to the network.\n *\n * @param transactionRequestLike - The transaction request to be sent.\n * @returns A promise that resolves to the transaction response.\n */\n async sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true, awaitExecution }: ProviderSendTxParams = {}\n ): Promise<TransactionResponse> {\n if (this._connector) {\n return this.provider.getTransactionResponse(\n await this._connector.sendTransaction(this.address.toString(), transactionRequestLike)\n );\n }\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.sendTransaction(transactionRequest, {\n awaitExecution,\n estimateTxDependencies: false,\n });\n }\n\n /**\n * Simulates a transaction.\n *\n * @param transactionRequestLike - The transaction request to be simulated.\n * @returns A promise that resolves to the call result.\n */\n async simulateTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true }: EstimateTransactionParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.simulate(transactionRequest, { estimateTxDependencies: false });\n }\n\n private validateGas({\n gasUsed,\n gasPrice,\n gasLimit,\n minGasPrice,\n }: {\n gasUsed: BN;\n gasPrice: BN;\n gasLimit: BN;\n minGasPrice: BN;\n }) {\n if (minGasPrice.gt(gasPrice)) {\n throw new FuelError(\n ErrorCode.GAS_PRICE_TOO_LOW,\n `Gas price '${gasPrice}' is lower than the required: '${minGasPrice}'.`\n );\n }\n\n if (gasUsed.gt(gasLimit)) {\n throw new FuelError(\n ErrorCode.GAS_LIMIT_TOO_LOW,\n `Gas limit '${gasLimit}' is lower than the required: '${gasUsed}'.`\n );\n }\n }\n}\n","import { BaseAssetId } from '@fuel-ts/address/configs';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish, BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport { hexlify } from '@fuel-ts/utils';\n\nexport type CoinQuantityLike =\n | [amount: BigNumberish, assetId?: BytesLike, max?: BigNumberish]\n | { amount: BigNumberish; assetId?: BytesLike; max?: BigNumberish };\nexport type CoinQuantity = { amount: BN; assetId: string; max?: BN };\n\n/** @hidden */\nexport const coinQuantityfy = (coinQuantityLike: CoinQuantityLike): CoinQuantity => {\n let assetId;\n let amount;\n let max;\n if (Array.isArray(coinQuantityLike)) {\n amount = coinQuantityLike[0];\n assetId = coinQuantityLike[1] ?? BaseAssetId;\n max = coinQuantityLike[2] ?? undefined;\n } else {\n amount = coinQuantityLike.amount;\n assetId = coinQuantityLike.assetId ?? BaseAssetId;\n max = coinQuantityLike.max ?? undefined;\n }\n\n const bnAmount = bn(amount);\n return {\n assetId: hexlify(assetId),\n amount: bnAmount.lt(1) ? bn(1) : bnAmount,\n max: max ? bn(max) : undefined,\n };\n};\n\nexport interface IAddAmountToAssetParams {\n assetId: string;\n amount: BN;\n coinQuantities: CoinQuantity[];\n}\n\nexport const addAmountToAsset = (params: IAddAmountToAssetParams): CoinQuantity[] => {\n const { amount, assetId } = params;\n\n const coinQuantities = [...params.coinQuantities];\n\n const assetIdx = coinQuantities.findIndex((coinQuantity) => coinQuantity.assetId === assetId);\n\n if (assetIdx !== -1) {\n coinQuantities[assetIdx].amount = coinQuantities[assetIdx].amount.add(amount);\n } else {\n coinQuantities.push({ assetId, amount });\n }\n\n return coinQuantities;\n};\n","import { Address } from '@fuel-ts/address';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAccount, AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport { BN, bn, max } from '@fuel-ts/math';\nimport type { Transaction } from '@fuel-ts/transactions';\nimport {\n InputType,\n TransactionType,\n InputMessageCoder,\n TransactionCoder,\n} from '@fuel-ts/transactions';\nimport { arrayify, hexlify, DateTime } from '@fuel-ts/utils';\nimport { checkFuelCoreVersionCompatibility } from '@fuel-ts/versions';\nimport { equalBytes } from '@noble/curves/abstract/utils';\nimport { Network } from 'ethers';\nimport type { DocumentNode } from 'graphql';\nimport { GraphQLClient } from 'graphql-request';\nimport { clone } from 'ramda';\n\nimport type { Predicate } from '../predicate';\n\nimport { getSdk as getOperationsSdk } from './__generated__/operations';\nimport type {\n GqlChainInfoFragmentFragment,\n GqlGasCosts,\n GqlGetBlocksQueryVariables,\n GqlPeerInfo,\n} from './__generated__/operations';\nimport type { Coin } from './coin';\nimport type { CoinQuantity, CoinQuantityLike } from './coin-quantity';\nimport { coinQuantityfy } from './coin-quantity';\nimport { FuelGraphqlSubscriber } from './fuel-graphql-subscriber';\nimport { MemoryCache } from './memory-cache';\nimport type { Message, MessageCoin, MessageProof, MessageStatus } from './message';\nimport type { ExcludeResourcesOption, Resource } from './resource';\nimport type {\n TransactionRequestLike,\n TransactionRequest,\n TransactionRequestInput,\n CoinTransactionRequestInput,\n ScriptTransactionRequest,\n JsonAbisFromAllCalls,\n} from './transaction-request';\nimport { transactionRequestify } from './transaction-request';\nimport type { TransactionResultReceipt } from './transaction-response';\nimport { TransactionResponse } from './transaction-response';\nimport { processGqlReceipt } from './transaction-summary/receipt';\nimport {\n calculatePriceWithFactor,\n getGasUsedFromReceipts,\n getReceiptsWithMissingData,\n} from './utils';\nimport type { RetryOptions } from './utils/auto-retry-fetch';\nimport { autoRetryFetch } from './utils/auto-retry-fetch';\nimport { mergeQuantities } from './utils/merge-quantities';\n\nconst MAX_RETRIES = 10;\n\nexport type CallResult = {\n receipts: TransactionResultReceipt[];\n};\n\nexport type EstimateTxDependenciesReturns = CallResult & {\n outputVariables: number;\n missingContractIds: string[];\n};\n\n/**\n * A Fuel block\n */\nexport type Block = {\n id: string;\n height: BN;\n time: string;\n transactionIds: string[];\n};\n\n/**\n * Deployed Contract bytecode and contract id\n */\nexport type ContractResult = {\n id: string;\n bytecode: string;\n};\n\ntype ConsensusParameters = {\n contractMaxSize: BN;\n maxInputs: BN;\n maxOutputs: BN;\n maxWitnesses: BN;\n maxGasPerTx: BN;\n maxScriptLength: BN;\n maxScriptDataLength: BN;\n maxStorageSlots: BN;\n maxPredicateLength: BN;\n maxPredicateDataLength: BN;\n maxGasPerPredicate: BN;\n gasPriceFactor: BN;\n gasPerByte: BN;\n maxMessageDataLength: BN;\n chainId: BN;\n gasCosts: GqlGasCosts;\n};\n\n/**\n * Chain information\n */\nexport type ChainInfo = {\n name: string;\n baseChainHeight: BN;\n consensusParameters: ConsensusParameters;\n gasCosts: GqlGasCosts;\n latestBlock: {\n id: string;\n height: BN;\n time: string;\n transactions: Array<{ id: string }>;\n };\n};\n\n/**\n * Node information\n */\nexport type NodeInfo = {\n utxoValidation: boolean;\n vmBacktrace: boolean;\n minGasPrice: BN;\n maxTx: BN;\n maxDepth: BN;\n nodeVersion: string;\n peers: GqlPeerInfo[];\n};\n\nexport type NodeInfoAndConsensusParameters = {\n minGasPrice: BN;\n nodeVersion: string;\n gasPerByte: BN;\n gasPriceFactor: BN;\n maxGasPerTx: BN;\n};\n\n// #region cost-estimation-1\nexport type TransactionCost = {\n requiredQuantities: CoinQuantity[];\n receipts: TransactionResultReceipt[];\n minGasPrice: BN;\n gasPrice: BN;\n minGas: BN;\n maxGas: BN;\n gasUsed: BN;\n minFee: BN;\n maxFee: BN;\n outputVariables: number;\n missingContractIds: string[];\n estimatedInputs: TransactionRequest['inputs'];\n};\n// #endregion cost-estimation-1\n\nconst processGqlChain = (chain: GqlChainInfoFragmentFragment): ChainInfo => {\n const { name, daHeight, consensusParameters, latestBlock } = chain;\n\n const { contractParams, feeParams, predicateParams, scriptParams, txParams, gasCosts } =\n consensusParameters;\n\n return {\n name,\n baseChainHeight: bn(daHeight),\n consensusParameters: {\n contractMaxSize: bn(contractParams.contractMaxSize),\n maxInputs: bn(txParams.maxInputs),\n maxOutputs: bn(txParams.maxOutputs),\n maxWitnesses: bn(txParams.maxWitnesses),\n maxGasPerTx: bn(txParams.maxGasPerTx),\n maxScriptLength: bn(scriptParams.maxScriptLength),\n maxScriptDataLength: bn(scriptParams.maxScriptDataLength),\n maxStorageSlots: bn(contractParams.maxStorageSlots),\n maxPredicateLength: bn(predicateParams.maxPredicateLength),\n maxPredicateDataLength: bn(predicateParams.maxPredicateDataLength),\n maxGasPerPredicate: bn(predicateParams.maxGasPerPredicate),\n gasPriceFactor: bn(feeParams.gasPriceFactor),\n gasPerByte: bn(feeParams.gasPerByte),\n maxMessageDataLength: bn(predicateParams.maxMessageDataLength),\n chainId: bn(consensusParameters.chainId),\n gasCosts,\n },\n gasCosts,\n latestBlock: {\n id: latestBlock.id,\n height: bn(latestBlock.header.height),\n time: latestBlock.header.time,\n transactions: latestBlock.transactions.map((i) => ({\n id: i.id,\n })),\n },\n };\n};\n\n/**\n * @hidden\n *\n * Cursor pagination arguments\n *\n * https://relay.dev/graphql/connections.htm#sec-Arguments\n */\nexport type CursorPaginationArgs = {\n /** Forward pagination limit */\n first?: number | null;\n /** Forward pagination cursor */\n after?: string | null;\n /** Backward pagination limit */\n last?: number | null;\n /** Backward pagination cursor */\n before?: string | null;\n};\n\n/*\n * Provider initialization options\n */\nexport type ProviderOptions = {\n /**\n * Custom fetch function to use for making requests.\n */\n fetch?: (\n url: string,\n requestInit?: RequestInit,\n providerOptions?: Omit<ProviderOptions, 'fetch'>\n ) => Promise<Response>;\n /**\n * Timeout [ms] after which every request will be aborted.\n */\n timeout?: number;\n /**\n * Cache UTXOs for the given time [ms].\n */\n cacheUtxo?: number;\n /**\n * Retry options to use when fetching data from the node.\n */\n retryOptions?: RetryOptions;\n /**\n * Middleware to modify the request before it is sent.\n * This can be used to add headers, modify the body, etc.\n */\n requestMiddleware?: (request: RequestInit) => RequestInit | Promise<RequestInit>;\n};\n\n/**\n * UTXO Validation Param\n */\nexport type UTXOValidationParams = {\n utxoValidation?: boolean;\n};\n\n/**\n * Transaction estimation Param\n */\nexport type EstimateTransactionParams = {\n estimateTxDependencies?: boolean;\n};\n\nexport type EstimatePredicateParams = {\n estimatePredicates?: boolean;\n};\n\nexport type TransactionCostParams = EstimateTransactionParams &\n EstimatePredicateParams & {\n resourcesOwner?: AbstractAccount;\n signatureCallback?: (request: ScriptTransactionRequest) => Promise<ScriptTransactionRequest>;\n };\n\n/**\n * Provider Call transaction params\n */\nexport type ProviderCallParams = UTXOValidationParams & EstimateTransactionParams;\n\n/**\n * Provider Send transaction params\n */\nexport type ProviderSendTxParams = EstimateTransactionParams & {\n /**\n * By default, the promise will resolve immediately after the transaction is submitted.\n *\n * If set to true, the promise will resolve only when the transaction changes status\n * from `SubmittedStatus` to one of `SuccessStatus`, `FailureStatus` or `SqueezedOutStatus`.\n *\n */\n awaitExecution?: boolean;\n};\n\n/**\n * URL - Consensus Params mapping.\n */\ntype ChainInfoCache = Record<string, ChainInfo>;\n\n/**\n * URL - Node Info mapping.\n */\ntype NodeInfoCache = Record<string, NodeInfo>;\n\n/**\n * A provider for connecting to a node\n */\nexport default class Provider {\n operations: ReturnType<typeof getOperationsSdk>;\n cache?: MemoryCache;\n\n static clearChainAndNodeCaches() {\n Provider.nodeInfoCache = {};\n Provider.chainInfoCache = {};\n }\n\n private static chainInfoCache: ChainInfoCache = {};\n private static nodeInfoCache: NodeInfoCache = {};\n\n options: ProviderOptions = {\n timeout: undefined,\n cacheUtxo: undefined,\n fetch: undefined,\n retryOptions: undefined,\n };\n\n private static getFetchFn(options: ProviderOptions): NonNullable<ProviderOptions['fetch']> {\n const { retryOptions, timeout } = options;\n\n return autoRetryFetch(async (...args) => {\n const url = args[0];\n const request = args[1];\n const signal = timeout ? AbortSignal.timeout(timeout) : undefined;\n\n let fullRequest: RequestInit = { ...request, signal };\n\n if (options.requestMiddleware) {\n fullRequest = await options.requestMiddleware(fullRequest);\n }\n\n return options.fetch ? options.fetch(url, fullRequest, options) : fetch(url, fullRequest);\n }, retryOptions);\n }\n\n /**\n * Constructor to initialize a Provider.\n *\n * @param url - GraphQL endpoint of the Fuel node\n * @param chainInfo - Chain info of the Fuel node\n * @param options - Additional options for the provider\n * @hidden\n */\n protected constructor(\n /** GraphQL endpoint of the Fuel node */\n public url: string,\n options: ProviderOptions = {}\n ) {\n this.options = { ...this.options, ...options };\n this.url = url;\n\n this.operations = this.createOperations();\n this.cache = options.cacheUtxo ? new MemoryCache(options.cacheUtxo) : undefined;\n }\n\n /**\n * Creates a new instance of the Provider class. This is the recommended way to initialize a Provider.\n * @param url - GraphQL endpoint of the Fuel node\n * @param options - Additional options for the provider\n */\n static async create(url: string, options: ProviderOptions = {}) {\n const provider = new Provider(url, options);\n await provider.fetchChainAndNodeInfo();\n return provider;\n }\n\n /**\n * Returns the cached chainInfo for the current URL.\n */\n getChain() {\n const chain = Provider.chainInfoCache[this.url];\n if (!chain) {\n throw new FuelError(\n ErrorCode.CHAIN_INFO_CACHE_EMPTY,\n 'Chain info cache is empty. Make sure you have called `Provider.create` to initialize the provider.'\n );\n }\n return chain;\n }\n\n /**\n * Returns the cached nodeInfo for the current URL.\n */\n getNode() {\n const node = Provider.nodeInfoCache[this.url];\n if (!node) {\n throw new FuelError(\n ErrorCode.NODE_INFO_CACHE_EMPTY,\n 'Node info cache is empty. Make sure you have called `Provider.create` to initialize the provider.'\n );\n }\n return node;\n }\n\n /**\n * Returns some helpful parameters related to gas fees.\n */\n getGasConfig() {\n const { minGasPrice } = this.getNode();\n const { maxGasPerTx, maxGasPerPredicate, gasPriceFactor, gasPerByte, gasCosts } =\n this.getChain().consensusParameters;\n return {\n minGasPrice,\n maxGasPerTx,\n maxGasPerPredicate,\n gasPriceFactor,\n gasPerByte,\n gasCosts,\n };\n }\n\n /**\n * Updates the URL for the provider and fetches the consensus parameters for the new URL, if needed.\n */\n async connect(url: string, options?: ProviderOptions) {\n this.url = url;\n this.options = options ?? this.options;\n this.operations = this.createOperations();\n await this.fetchChainAndNodeInfo();\n }\n\n /**\n * Fetches both the chain and node information, saves it to the cache, and return it.\n *\n * @returns NodeInfo and Chain\n */\n async fetchChainAndNodeInfo() {\n const chain = await this.fetchChain();\n const nodeInfo = await this.fetchNode();\n\n Provider.ensureClientVersionIsSupported(nodeInfo);\n\n return {\n chain,\n nodeInfo,\n };\n }\n\n private static ensureClientVersionIsSupported(nodeInfo: NodeInfo) {\n const { isMajorSupported, isMinorSupported, supportedVersion } =\n checkFuelCoreVersionCompatibility(nodeInfo.nodeVersion);\n\n if (!isMajorSupported || !isMinorSupported) {\n throw new FuelError(\n FuelError.CODES.UNSUPPORTED_FUEL_CLIENT_VERSION,\n `Fuel client version: ${nodeInfo.nodeVersion}, Supported version: ${supportedVersion}`\n );\n }\n }\n\n /**\n * Create GraphQL client and set operations.\n *\n * @returns The operation SDK object\n */\n private createOperations() {\n const fetchFn = Provider.getFetchFn(this.options);\n const gqlClient = new GraphQLClient(this.url, {\n fetch: (url: string, requestInit: RequestInit) => fetchFn(url, requestInit, this.options),\n });\n\n const executeQuery = (query: DocumentNode, vars: Record<string, unknown>) => {\n const opDefinition = query.definitions.find((x) => x.kind === 'OperationDefinition') as {\n operation: string;\n };\n const isSubscription = opDefinition?.operation === 'subscription';\n\n if (isSubscription) {\n return new FuelGraphqlSubscriber({\n url: this.url,\n query,\n fetchFn: (url, requestInit) => fetchFn(url as string, requestInit, this.options),\n variables: vars,\n });\n }\n return gqlClient.request(query, vars);\n };\n\n // @ts-expect-error This is due to this function being generic. Its type is specified when calling a specific operation via provider.operations.xyz.\n return getOperationsSdk(executeQuery);\n }\n\n /**\n * Returns the version of the connected node.\n *\n * @returns A promise that resolves to the version string.\n */\n async getVersion(): Promise<string> {\n const {\n nodeInfo: { nodeVersion },\n } = await this.operations.getVersion();\n return nodeVersion;\n }\n\n /**\n * @hidden\n *\n * Returns the network configuration of the connected Fuel node.\n *\n * @returns A promise that resolves to the network configuration object\n */\n async getNetwork(): Promise<Network> {\n const {\n name,\n consensusParameters: { chainId },\n } = await this.getChain();\n const network = new Network(name, chainId.toNumber());\n return Promise.resolve(network);\n }\n\n /**\n * Returns the block number.\n *\n * @returns A promise that resolves to the block number\n */\n async getBlockNumber(): Promise<BN> {\n const { chain } = await this.operations.getChain();\n return bn(chain.latestBlock.header.height, 10);\n }\n\n /**\n * Returns the chain information.\n * @param url - The URL of the Fuel node\n * @returns NodeInfo object\n */\n async fetchNode(): Promise<NodeInfo> {\n const { nodeInfo } = await this.operations.getNodeInfo();\n\n const processedNodeInfo: NodeInfo = {\n maxDepth: bn(nodeInfo.maxDepth),\n maxTx: bn(nodeInfo.maxTx),\n minGasPrice: bn(nodeInfo.minGasPrice),\n nodeVersion: nodeInfo.nodeVersion,\n utxoValidation: nodeInfo.utxoValidation,\n vmBacktrace: nodeInfo.vmBacktrace,\n peers: nodeInfo.peers,\n };\n\n Provider.nodeInfoCache[this.url] = processedNodeInfo;\n\n return processedNodeInfo;\n }\n\n /**\n * Fetches the `chainInfo` for the given node URL.\n * @param url - The URL of the Fuel node\n * @returns ChainInfo object\n */\n async fetchChain(): Promise<ChainInfo> {\n const { chain } = await this.operations.getChain();\n\n const processedChain = processGqlChain(chain);\n\n Provider.chainInfoCache[this.url] = processedChain;\n\n return processedChain;\n }\n\n /**\n * Returns the chain ID\n * @returns A promise that resolves to the chain ID number\n */\n getChainId() {\n const {\n consensusParameters: { chainId },\n } = this.getChain();\n return chainId.toNumber();\n }\n\n /**\n * @hidden\n */\n #cacheInputs(inputs: TransactionRequestInput[]): void {\n if (!this.cache) {\n return;\n }\n\n inputs.forEach((input) => {\n if (input.type === InputType.Coin) {\n this.cache?.set(input.id);\n }\n });\n }\n\n /**\n * Submits a transaction to the chain to be executed.\n *\n * If the transaction is missing any dependencies,\n * the transaction will be mutated and those dependencies will be added.\n *\n * @param transactionRequestLike - The transaction request object.\n * @returns A promise that resolves to the transaction response object.\n */\n // #region Provider-sendTransaction\n async sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true, awaitExecution = false }: ProviderSendTxParams = {}\n ): Promise<TransactionResponse> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n this.#cacheInputs(transactionRequest.inputs);\n if (estimateTxDependencies) {\n await this.estimateTxDependencies(transactionRequest);\n }\n // #endregion Provider-sendTransaction\n\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n\n let abis: JsonAbisFromAllCalls | undefined;\n\n if (transactionRequest.type === TransactionType.Script) {\n abis = transactionRequest.abis;\n }\n\n if (awaitExecution) {\n const subscription = this.operations.submitAndAwait({ encodedTransaction });\n for await (const { submitAndAwait } of subscription) {\n if (submitAndAwait.type === 'SqueezedOutStatus') {\n throw new FuelError(\n ErrorCode.TRANSACTION_SQUEEZED_OUT,\n `Transaction Squeezed Out with reason: ${submitAndAwait.reason}`\n );\n }\n\n if (submitAndAwait.type !== 'SubmittedStatus') {\n break;\n }\n }\n\n const transactionId = transactionRequest.getTransactionId(this.getChainId());\n const response = new TransactionResponse(transactionId, this, abis);\n await response.fetch();\n return response;\n }\n\n const {\n submit: { id: transactionId },\n } = await this.operations.submit({ encodedTransaction });\n\n return new TransactionResponse(transactionId, this, abis);\n }\n\n /**\n * Executes a transaction without actually submitting it to the chain.\n *\n * If the transaction is missing any dependencies,\n * the transaction will be mutated and those dependencies will be added.\n *\n * @param transactionRequestLike - The transaction request object.\n * @param utxoValidation - Additional provider call parameters.\n * @returns A promise that resolves to the call result object.\n */\n async call(\n transactionRequestLike: TransactionRequestLike,\n { utxoValidation, estimateTxDependencies = true }: ProviderCallParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n return this.estimateTxDependencies(transactionRequest);\n }\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n const { dryRun: gqlReceipts } = await this.operations.dryRun({\n encodedTransaction,\n utxoValidation: utxoValidation || false,\n });\n const receipts = gqlReceipts.map(processGqlReceipt);\n return {\n receipts,\n };\n }\n\n /**\n * Verifies whether enough gas is available to complete transaction.\n *\n * @param transactionRequest - The transaction request object.\n * @returns A promise that resolves to the estimated transaction request object.\n */\n async estimatePredicates(transactionRequest: TransactionRequest): Promise<TransactionRequest> {\n const shouldEstimatePredicates = Boolean(\n transactionRequest.inputs.find(\n (input) =>\n 'predicate' in input &&\n input.predicate &&\n !equalBytes(arrayify(input.predicate), arrayify('0x')) &&\n new BN(input.predicateGasUsed).isZero()\n )\n );\n if (!shouldEstimatePredicates) {\n return transactionRequest;\n }\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n const response = await this.operations.estimatePredicates({\n encodedTransaction,\n });\n\n const {\n estimatePredicates: { inputs },\n } = response;\n\n if (inputs) {\n inputs.forEach((input, index) => {\n if ('predicateGasUsed' in input && bn(input.predicateGasUsed).gt(0)) {\n // eslint-disable-next-line no-param-reassign\n (<CoinTransactionRequestInput>transactionRequest.inputs[index]).predicateGasUsed =\n input.predicateGasUsed;\n }\n });\n }\n\n return transactionRequest;\n }\n\n /**\n * Will dryRun a transaction and check for missing dependencies.\n *\n * If there are missing variable outputs,\n * `addVariableOutputs` is called on the transaction.\n *\n * @privateRemarks\n * TODO: Investigate support for missing contract IDs\n * TODO: Add support for missing output messages\n *\n * @param transactionRequest - The transaction request object.\n * @returns A promise.\n */\n async estimateTxDependencies(\n transactionRequest: TransactionRequest\n ): Promise<EstimateTxDependenciesReturns> {\n if (transactionRequest.type === TransactionType.Create) {\n return {\n receipts: [],\n outputVariables: 0,\n missingContractIds: [],\n };\n }\n\n await this.estimatePredicates(transactionRequest);\n\n let receipts: TransactionResultReceipt[] = [];\n const missingContractIds: string[] = [];\n let outputVariables = 0;\n\n for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {\n const { dryRun: gqlReceipts } = await this.operations.dryRun({\n encodedTransaction: hexlify(transactionRequest.toTransactionBytes()),\n utxoValidation: false,\n });\n receipts = gqlReceipts.map(processGqlReceipt);\n const { missingOutputVariables, missingOutputContractIds } =\n getReceiptsWithMissingData(receipts);\n\n const hasMissingOutputs =\n missingOutputVariables.length !== 0 || missingOutputContractIds.length !== 0;\n\n if (hasMissingOutputs) {\n outputVariables += missingOutputVariables.length;\n transactionRequest.addVariableOutputs(missingOutputVariables.length);\n missingOutputContractIds.forEach(({ contractId }) => {\n transactionRequest.addContractInputAndOutput(Address.fromString(contractId));\n missingContractIds.push(contractId);\n });\n } else {\n break;\n }\n }\n\n return {\n receipts,\n outputVariables,\n missingContractIds,\n };\n }\n\n /**\n * Estimates the transaction gas and fee based on the provided transaction request.\n * @param transactionRequest - The transaction request object.\n * @returns An object containing the estimated minimum gas, minimum fee, maximum gas, and maximum fee.\n */\n estimateTxGasAndFee(params: { transactionRequest: TransactionRequest }) {\n const { transactionRequest } = params;\n const { gasPriceFactor, minGasPrice, maxGasPerTx } = this.getGasConfig();\n\n const chainInfo = this.getChain();\n\n const gasPrice = transactionRequest.gasPrice.eq(0) ? minGasPrice : transactionRequest.gasPrice;\n transactionRequest.gasPrice = gasPrice;\n\n const minGas = transactionRequest.calculateMinGas(chainInfo);\n const minFee = calculatePriceWithFactor(minGas, gasPrice, gasPriceFactor).normalizeZeroToOne();\n\n // Only Script transactions consume gas\n if (transactionRequest.type === TransactionType.Script) {\n // If the gasLimit is set to 0, it means we need to estimate it.\n if (transactionRequest.gasLimit.eq(0)) {\n transactionRequest.gasLimit = minGas;\n\n /*\n * Adjusting the gasLimit of a transaction (TX) impacts its maxGas.\n * Consequently, this affects the maxFee, as it is derived from the maxGas. To accurately estimate the\n * gasLimit for a transaction, especially when the exact gas consumption is uncertain (as in an estimation dry-run),\n * the following steps are required:\n * 1 - Initially, set the gasLimit using the calculated minGas.\n * 2 - Based on this initial gasLimit, calculate the maxGas.\n * 3 - Get the maximum gas per transaction allowed by the chain, and subtract the previously calculated maxGas from this limit.\n * 4 - The result of this subtraction should then be adopted as the new, definitive gasLimit.\n * 5 - Recalculate the maxGas with the updated gasLimit. This new maxGas is then used to compute the maxFee.\n * 6 - The calculated maxFee represents the safe, estimated cost required to fund the transaction.\n */\n transactionRequest.gasLimit = maxGasPerTx.sub(\n transactionRequest.calculateMaxGas(chainInfo, minGas)\n );\n }\n }\n\n const maxGas = transactionRequest.calculateMaxGas(chainInfo, minGas);\n const maxFee = calculatePriceWithFactor(maxGas, gasPrice, gasPriceFactor).normalizeZeroToOne();\n\n return {\n minGas,\n minFee,\n maxGas,\n maxFee,\n };\n }\n\n /**\n * Executes a signed transaction without applying the states changes\n * on the chain.\n *\n * If the transaction is missing any dependencies,\n * the transaction will be mutated and those dependencies will be added\n *\n * @param transactionRequestLike - The transaction request object.\n * @returns A promise that resolves to the call result object.\n */\n async simulate(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true }: EstimateTransactionParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n return this.estimateTxDependencies(transactionRequest);\n }\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n const { dryRun: gqlReceipts } = await this.operations.dryRun({\n encodedTransaction,\n utxoValidation: true,\n });\n const receipts = gqlReceipts.map(processGqlReceipt);\n return {\n receipts,\n };\n }\n\n /**\n * Returns a transaction cost to enable user\n * to set gasLimit and also reserve balance amounts\n * on the the transaction.\n *\n * @privateRemarks\n * The tolerance is add on top of the gasUsed calculated\n * from the node, this create a safe margin costs like\n * change states on transfer that don't occur on the dryRun\n * transaction. The default value is 0.2 or 20%\n *\n * @param transactionRequestLike - The transaction request object.\n * @param tolerance - The tolerance to add on top of the gasUsed.\n * @returns A promise that resolves to the transaction cost object.\n */\n async getTransactionCost(\n transactionRequestLike: TransactionRequestLike,\n forwardingQuantities: CoinQuantity[] = [],\n {\n estimateTxDependencies = true,\n estimatePredicates = true,\n resourcesOwner,\n signatureCallback,\n }: TransactionCostParams = {}\n ): Promise<TransactionCost> {\n const txRequestClone = clone(transactionRequestify(transactionRequestLike));\n const { minGasPrice } = this.getGasConfig();\n const setGasPrice = max(txRequestClone.gasPrice, minGasPrice);\n const isScriptTransaction = txRequestClone.type === TransactionType.Script;\n\n // Fund with fake UTXOs to avoid not enough funds error\n // Getting coin quantities from amounts being transferred\n const coinOutputsQuantities = txRequestClone.getCoinOutputsQuantities();\n // Combining coin quantities from amounts being transferred and forwarding to contracts\n const allQuantities = mergeQuantities(coinOutputsQuantities, forwardingQuantities);\n // Funding transaction with fake utxos\n txRequestClone.fundWithFakeUtxos(allQuantities, resourcesOwner?.address);\n\n if (isScriptTransaction) {\n txRequestClone.gasLimit = bn(0);\n }\n\n /**\n * Estimate predicates gasUsed\n */\n if (estimatePredicates) {\n /**\n * The fake utxos added above can be from a predicate\n * If the resources owner is a predicate,\n * we need to populate the resources with the predicate's data\n * so that predicate estimation can happen.\n */\n if (resourcesOwner && 'populateTransactionPredicateData' in resourcesOwner) {\n (resourcesOwner as Predicate<[]>).populateTransactionPredicateData(txRequestClone);\n }\n await this.estimatePredicates(txRequestClone);\n }\n\n if (signatureCallback && isScriptTransaction) {\n await signatureCallback(txRequestClone);\n }\n\n /**\n * Calculate minGas and maxGas based on the real transaction\n */\n let { maxFee, maxGas, minFee, minGas } = this.estimateTxGasAndFee({\n transactionRequest: txRequestClone,\n });\n\n /**\n * Estimate gasUsed for script transactions\n */\n let receipts: TransactionResultReceipt[] = [];\n let missingContractIds: string[] = [];\n let outputVariables = 0;\n let gasUsed = bn(0);\n // Transactions of type Create does not consume any gas so we can the dryRun\n if (isScriptTransaction && estimateTxDependencies) {\n /**\n * Setting the gasPrice to 0 on a dryRun will result in no fees being charged.\n * This simplifies the funding with fake utxos, since the coin quantities required\n * will only be amounts being transferred (coin outputs) and amounts being forwarded\n * to contract calls.\n */\n txRequestClone.gasPrice = bn(0);\n\n // Executing dryRun with fake utxos to get gasUsed\n const result = await this.estimateTxDependencies(txRequestClone);\n\n receipts = result.receipts;\n outputVariables = result.outputVariables;\n missingContractIds = result.missingContractIds;\n\n gasUsed = isScriptTransaction ? getGasUsedFromReceipts(receipts) : gasUsed;\n\n txRequestClone.gasLimit = gasUsed;\n txRequestClone.gasPrice = setGasPrice;\n\n // Estimating fee again with the real gas consumed and set gasPrice\n ({ maxFee, maxGas, minFee, minGas } = this.estimateTxGasAndFee({\n transactionRequest: txRequestClone,\n }));\n }\n\n return {\n requiredQuantities: allQuantities,\n receipts,\n gasUsed,\n minGasPrice,\n gasPrice: setGasPrice,\n minGas,\n maxGas,\n minFee,\n maxFee,\n estimatedInputs: txRequestClone.inputs,\n outputVariables,\n missingContractIds,\n };\n }\n\n async getResourcesForTransaction(\n owner: string | AbstractAddress,\n transactionRequestLike: TransactionRequestLike,\n forwardingQuantities: CoinQuantity[] = []\n ) {\n const ownerAddress = Address.fromAddressOrString(owner);\n const transactionRequest = transactionRequestify(clone(transactionRequestLike));\n const transactionCost = await this.getTransactionCost(transactionRequest, forwardingQuantities);\n\n // Add the required resources to the transaction from the owner\n transactionRequest.addResources(\n await this.getResourcesToSpend(ownerAddress, transactionCost.requiredQuantities)\n );\n // Refetch transaction costs with the new resources\n // TODO: we could find a way to avoid fetch estimatePredicates again, by returning the transaction or\n // returning a specific gasUsed by the predicate.\n // Also for the dryRun we could have the same issue as we are going to run twice the dryRun and the\n // estimateTxDependencies as we don't have access to the transaction, maybe returning the transaction would\n // be better.\n const { requiredQuantities, ...txCost } = await this.getTransactionCost(\n transactionRequest,\n forwardingQuantities\n );\n const resources = await this.getResourcesToSpend(ownerAddress, requiredQuantities);\n\n return {\n resources,\n requiredQuantities,\n ...txCost,\n };\n }\n\n /**\n * Returns coins for the given owner.\n */\n async getCoins(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** The asset ID of coins to get */\n assetId?: BytesLike,\n /** Pagination arguments */\n paginationArgs?: CursorPaginationArgs\n ): Promise<Coin[]> {\n const ownerAddress = Address.fromAddressOrString(owner);\n const result = await this.operations.getCoins({\n first: 10,\n ...paginationArgs,\n filter: { owner: ownerAddress.toB256(), assetId: assetId && hexlify(assetId) },\n });\n\n const coins = result.coins.edges.map((edge) => edge.node);\n\n return coins.map((coin) => ({\n id: coin.utxoId,\n assetId: coin.assetId,\n amount: bn(coin.amount),\n owner: Address.fromAddressOrString(coin.owner),\n maturity: bn(coin.maturity).toNumber(),\n blockCreated: bn(coin.blockCreated),\n txCreatedIdx: bn(coin.txCreatedIdx),\n }));\n }\n\n /**\n * Returns resources for the given owner satisfying the spend query.\n *\n * @param owner - The address to get resources for.\n * @param quantities - The quantities to get.\n * @param excludedIds - IDs of excluded resources from the selection.\n * @returns A promise that resolves to the resources.\n */\n async getResourcesToSpend(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** The quantities to get */\n quantities: CoinQuantityLike[],\n /** IDs of excluded resources from the selection. */\n excludedIds?: ExcludeResourcesOption\n ): Promise<Resource[]> {\n const ownerAddress = Address.fromAddressOrString(owner);\n const excludeInput = {\n messages: excludedIds?.messages?.map((nonce) => hexlify(nonce)) || [],\n utxos: excludedIds?.utxos?.map((id) => hexlify(id)) || [],\n };\n\n if (this.cache) {\n const uniqueUtxos = new Set(\n excludeInput.utxos.concat(this.cache?.getActiveData().map((id) => hexlify(id)))\n );\n excludeInput.utxos = Array.from(uniqueUtxos);\n }\n const coinsQuery = {\n owner: ownerAddress.toB256(),\n queryPerAsset: quantities\n .map(coinQuantityfy)\n .map(({ assetId, amount, max: maxPerAsset }) => ({\n assetId: hexlify(assetId),\n amount: amount.toString(10),\n max: maxPerAsset ? maxPerAsset.toString(10) : undefined,\n })),\n excludedIds: excludeInput,\n };\n\n const result = await this.operations.getCoinsToSpend(coinsQuery);\n\n const coins = result.coinsToSpend\n .flat()\n .map((coin) => {\n switch (coin.__typename) {\n case 'MessageCoin':\n return {\n amount: bn(coin.amount),\n assetId: coin.assetId,\n daHeight: bn(coin.daHeight),\n sender: Address.fromAddressOrString(coin.sender),\n recipient: Address.fromAddressOrString(coin.recipient),\n nonce: coin.nonce,\n } as MessageCoin;\n case 'Coin':\n return {\n id: coin.utxoId,\n amount: bn(coin.amount),\n assetId: coin.assetId,\n owner: Address.fromAddressOrString(coin.owner),\n maturity: bn(coin.maturity).toNumber(),\n blockCreated: bn(coin.blockCreated),\n txCreatedIdx: bn(coin.txCreatedIdx),\n } as Coin;\n default:\n return null;\n }\n })\n .filter((v) => !!v) as Array<Resource>;\n\n return coins;\n }\n\n /**\n * Returns block matching the given ID or height.\n *\n * @param idOrHeight - ID or height of the block.\n * @returns A promise that resolves to the block.\n */\n async getBlock(\n /** ID or height of the block */\n idOrHeight: string | number | 'latest'\n ): Promise<Block | null> {\n let variables;\n if (typeof idOrHeight === 'number') {\n variables = { height: bn(idOrHeight).toString(10) };\n } else if (idOrHeight === 'latest') {\n variables = { height: (await this.getBlockNumber()).toString(10) };\n } else if (idOrHeight.length === 66) {\n variables = { blockId: idOrHeight };\n } else {\n variables = { blockId: bn(idOrHeight).toString(10) };\n }\n\n const { block } = await this.operations.getBlock(variables);\n\n if (!block) {\n return null;\n }\n\n return {\n id: block.id,\n height: bn(block.header.height),\n time: block.header.time,\n transactionIds: block.transactions.map((tx) => tx.id),\n };\n }\n\n /**\n * Returns all the blocks matching the given parameters.\n *\n * @param params - The parameters to query blocks.\n * @returns A promise that resolves to the blocks.\n */\n async getBlocks(params: GqlGetBlocksQueryVariables): Promise<Block[]> {\n const { blocks: fetchedData } = await this.operations.getBlocks(params);\n\n const blocks: Block[] = fetchedData.edges.map(({ node: block }) => ({\n id: block.id,\n height: bn(block.header.height),\n time: block.header.time,\n transactionIds: block.transactions.map((tx) => tx.id),\n }));\n\n return blocks;\n }\n\n /**\n * Returns block matching the given ID or type, including transaction data.\n *\n * @param idOrHeight - ID or height of the block.\n * @returns A promise that resolves to the block.\n */\n async getBlockWithTransactions(\n /** ID or height of the block */\n idOrHeight: string | number | 'latest'\n ): Promise<(Block & { transactions: Transaction[] }) | null> {\n let variables;\n if (typeof idOrHeight === 'number') {\n variables = { blockHeight: bn(idOrHeight).toString(10) };\n } else if (idOrHeight === 'latest') {\n variables = { blockHeight: (await this.getBlockNumber()).toString() };\n } else {\n variables = { blockId: idOrHeight };\n }\n\n const { block } = await this.operations.getBlockWithTransactions(variables);\n\n if (!block) {\n return null;\n }\n\n return {\n id: block.id,\n height: bn(block.header.height, 10),\n time: block.header.time,\n transactionIds: block.transactions.map((tx) => tx.id),\n transactions: block.transactions.map(\n (tx) => new TransactionCoder().decode(arrayify(tx.rawPayload), 0)?.[0]\n ),\n };\n }\n\n /**\n * Get transaction with the given ID.\n *\n * @param transactionId - ID of the transaction.\n * @returns A promise that resolves to the transaction.\n */\n async getTransaction<TTransactionType = void>(\n transactionId: string\n ): Promise<Transaction<TTransactionType> | null> {\n const { transaction } = await this.operations.getTransaction({ transactionId });\n if (!transaction) {\n return null;\n }\n return new TransactionCoder().decode(\n arrayify(transaction.rawPayload),\n 0\n )?.[0] as Transaction<TTransactionType>;\n }\n\n /**\n * Get deployed contract with the given ID.\n *\n * @param contractId - ID of the contract.\n * @returns A promise that resolves to the contract.\n */\n async getContract(contractId: string): Promise<ContractResult | null> {\n const { contract } = await this.operations.getContract({ contractId });\n if (!contract) {\n return null;\n }\n return contract;\n }\n\n /**\n * Returns the balance for the given contract for the given asset ID.\n *\n * @param contractId - The contract ID to get the balance for.\n * @param assetId - The asset ID of coins to get.\n * @returns A promise that resolves to the balance.\n */\n async getContractBalance(\n /** The contract ID to get the balance for */\n contractId: string | AbstractAddress,\n /** The asset ID of coins to get */\n assetId: BytesLike\n ): Promise<BN> {\n const { contractBalance } = await this.operations.getContractBalance({\n contract: Address.fromAddressOrString(contractId).toB256(),\n asset: hexlify(assetId),\n });\n return bn(contractBalance.amount, 10);\n }\n\n /**\n * Returns the balance for the given owner for the given asset ID.\n *\n * @param owner - The address to get coins for.\n * @param assetId - The asset ID of coins to get.\n * @returns A promise that resolves to the balance.\n */\n async getBalance(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** The asset ID of coins to get */\n assetId: BytesLike\n ): Promise<BN> {\n const { balance } = await this.operations.getBalance({\n owner: Address.fromAddressOrString(owner).toB256(),\n assetId: hexlify(assetId),\n });\n return bn(balance.amount, 10);\n }\n\n /**\n * Returns balances for the given owner.\n *\n * @param owner - The address to get coins for.\n * @param paginationArgs - Pagination arguments.\n * @returns A promise that resolves to the balances.\n */\n async getBalances(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** Pagination arguments */\n paginationArgs?: CursorPaginationArgs\n ): Promise<CoinQuantity[]> {\n const result = await this.operations.getBalances({\n first: 10,\n ...paginationArgs,\n filter: { owner: Address.fromAddressOrString(owner).toB256() },\n });\n\n const balances = result.balances.edges.map((edge) => edge.node);\n\n return balances.map((balance) => ({\n assetId: balance.assetId,\n amount: bn(balance.amount),\n }));\n }\n\n /**\n * Returns message for the given address.\n *\n * @param address - The address to get message from.\n * @param paginationArgs - Pagination arguments.\n * @returns A promise that resolves to the messages.\n */\n async getMessages(\n /** The address to get message from */\n address: string | AbstractAddress,\n /** Pagination arguments */\n paginationArgs?: CursorPaginationArgs\n ): Promise<Message[]> {\n const result = await this.operations.getMessages({\n first: 10,\n ...paginationArgs,\n owner: Address.fromAddressOrString(address).toB256(),\n });\n\n const messages = result.messages.edges.map((edge) => edge.node);\n\n return messages.map((message) => ({\n messageId: InputMessageCoder.getMessageId({\n sender: message.sender,\n recipient: message.recipient,\n nonce: message.nonce,\n amount: bn(message.amount),\n data: message.data,\n }),\n sender: Address.fromAddressOrString(message.sender),\n recipient: Address.fromAddressOrString(message.recipient),\n nonce: message.nonce,\n amount: bn(message.amount),\n data: InputMessageCoder.decodeData(message.data),\n daHeight: bn(message.daHeight),\n }));\n }\n\n /**\n * Returns Message Proof for given transaction id and the message id from MessageOut receipt.\n *\n * @param transactionId - The transaction to get message from.\n * @param messageId - The message id from MessageOut receipt.\n * @param commitBlockId - The commit block id.\n * @param commitBlockHeight - The commit block height.\n * @returns A promise that resolves to the message proof.\n */\n async getMessageProof(\n /** The transaction to get message from */\n transactionId: string,\n nonce: string,\n commitBlockId?: string,\n commitBlockHeight?: BN\n ): Promise<MessageProof | null> {\n let inputObject: {\n /** The transaction to get message from */\n transactionId: string;\n /** The message id from MessageOut receipt */\n nonce: string;\n commitBlockId?: string;\n commitBlockHeight?: string;\n } = {\n transactionId,\n nonce,\n };\n\n if (commitBlockId && commitBlockHeight) {\n throw new FuelError(\n ErrorCode.INVALID_INPUT_PARAMETERS,\n 'commitBlockId and commitBlockHeight cannot be used together'\n );\n }\n\n if (commitBlockId) {\n inputObject = {\n ...inputObject,\n commitBlockId,\n };\n }\n\n if (commitBlockHeight) {\n inputObject = {\n ...inputObject,\n // Conver BN into a number string required on the query\n // This should problably be fixed on the fuel client side\n commitBlockHeight: commitBlockHeight.toNumber().toString(),\n };\n }\n\n const result = await this.operations.getMessageProof(inputObject);\n\n if (!result.messageProof) {\n return null;\n }\n\n const {\n messageProof,\n messageBlockHeader,\n commitBlockHeader,\n blockProof,\n sender,\n recipient,\n amount,\n data,\n } = result.messageProof;\n\n return {\n messageProof: {\n proofIndex: bn(messageProof.proofIndex),\n proofSet: messageProof.proofSet,\n },\n blockProof: {\n proofIndex: bn(blockProof.proofIndex),\n proofSet: blockProof.proofSet,\n },\n messageBlockHeader: {\n id: messageBlockHeader.id,\n daHeight: bn(messageBlockHeader.daHeight),\n transactionsCount: bn(messageBlockHeader.transactionsCount),\n transactionsRoot: messageBlockHeader.transactionsRoot,\n height: bn(messageBlockHeader.height),\n prevRoot: messageBlockHeader.prevRoot,\n time: messageBlockHeader.time,\n applicationHash: messageBlockHeader.applicationHash,\n messageReceiptRoot: messageBlockHeader.messageReceiptRoot,\n messageReceiptCount: bn(messageBlockHeader.messageReceiptCount),\n },\n commitBlockHeader: {\n id: commitBlockHeader.id,\n daHeight: bn(commitBlockHeader.daHeight),\n transactionsCount: bn(commitBlockHeader.transactionsCount),\n transactionsRoot: commitBlockHeader.transactionsRoot,\n height: bn(commitBlockHeader.height),\n prevRoot: commitBlockHeader.prevRoot,\n time: commitBlockHeader.time,\n applicationHash: commitBlockHeader.applicationHash,\n messageReceiptRoot: commitBlockHeader.messageReceiptRoot,\n messageReceiptCount: bn(commitBlockHeader.messageReceiptCount),\n },\n sender: Address.fromAddressOrString(sender),\n recipient: Address.fromAddressOrString(recipient),\n nonce,\n amount: bn(amount),\n data,\n };\n }\n\n /**\n * Returns Message Proof for given transaction id and the message id from MessageOut receipt.\n *\n * @param nonce - The nonce of the message to get status from.\n * @returns A promise that resolves to the message status\n */\n async getMessageStatus(\n /** The nonce of the message to get status from */\n nonce: string\n ): Promise<MessageStatus> {\n const result = await this.operations.getMessageStatus({ nonce });\n return result.messageStatus;\n }\n\n /**\n * Lets you produce blocks with custom timestamps and the block number of the last block produced.\n *\n * @param amount - The amount of blocks to produce\n * @param startTime - The UNIX timestamp (milliseconds) to set for the first produced block\n * @returns A promise that resolves to the block number of the last produced block.\n */\n async produceBlocks(amount: number, startTime?: number) {\n const { produceBlocks: latestBlockHeight } = await this.operations.produceBlocks({\n blocksToProduce: bn(amount).toString(10),\n startTimestamp: startTime ? DateTime.fromUnixMilliseconds(startTime).toTai64() : undefined,\n });\n return bn(latestBlockHeight);\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async getTransactionResponse(transactionId: string): Promise<TransactionResponse> {\n return new TransactionResponse(transactionId, this);\n }\n}\n","import type { DocumentNode } from 'graphql';\nimport gql from 'graphql-tag';\nexport type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n Address: string;\n AssetId: string;\n BlockId: string;\n Bytes32: string;\n ContractId: string;\n HexString: string;\n Nonce: string;\n Salt: string;\n Signature: any;\n Tai64Timestamp: string;\n TransactionId: string;\n TxPointer: any;\n U8: any;\n U32: any;\n U64: string;\n UtxoId: string;\n};\n\nexport type GqlBalance = {\n __typename: 'Balance';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n owner: Scalars['Address'];\n};\n\nexport type GqlBalanceConnection = {\n __typename: 'BalanceConnection';\n /** A list of edges. */\n edges: Array<GqlBalanceEdge>;\n /** A list of nodes. */\n nodes: Array<GqlBalance>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlBalanceEdge = {\n __typename: 'BalanceEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlBalance;\n};\n\nexport type GqlBalanceFilterInput = {\n /** Filter coins based on the `owner` field */\n owner: Scalars['Address'];\n};\n\nexport type GqlBlock = {\n __typename: 'Block';\n consensus: GqlConsensus;\n header: GqlHeader;\n id: Scalars['BlockId'];\n transactions: Array<GqlTransaction>;\n};\n\nexport type GqlBlockConnection = {\n __typename: 'BlockConnection';\n /** A list of edges. */\n edges: Array<GqlBlockEdge>;\n /** A list of nodes. */\n nodes: Array<GqlBlock>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlBlockEdge = {\n __typename: 'BlockEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlBlock;\n};\n\nexport type GqlBreakpoint = {\n contract: Scalars['ContractId'];\n pc: Scalars['U64'];\n};\n\nexport type GqlChainInfo = {\n __typename: 'ChainInfo';\n consensusParameters: GqlConsensusParameters;\n daHeight: Scalars['U64'];\n gasCosts: GqlGasCosts;\n latestBlock: GqlBlock;\n name: Scalars['String'];\n};\n\nexport type GqlChangeOutput = {\n __typename: 'ChangeOutput';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n to: Scalars['Address'];\n};\n\nexport type GqlCoin = {\n __typename: 'Coin';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n /** TxPointer - the height of the block this coin was created in */\n blockCreated: Scalars['U32'];\n maturity: Scalars['U32'];\n owner: Scalars['Address'];\n /** TxPointer - the index of the transaction that created this coin */\n txCreatedIdx: Scalars['U64'];\n utxoId: Scalars['UtxoId'];\n};\n\nexport type GqlCoinConnection = {\n __typename: 'CoinConnection';\n /** A list of edges. */\n edges: Array<GqlCoinEdge>;\n /** A list of nodes. */\n nodes: Array<GqlCoin>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlCoinEdge = {\n __typename: 'CoinEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlCoin;\n};\n\nexport type GqlCoinFilterInput = {\n /** Returns coins only with `asset_id`. */\n assetId?: InputMaybe<Scalars['AssetId']>;\n /** Returns coins owned by the `owner`. */\n owner: Scalars['Address'];\n};\n\nexport type GqlCoinOutput = {\n __typename: 'CoinOutput';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n to: Scalars['Address'];\n};\n\n/** The schema analog of the [`coins::CoinType`]. */\nexport type GqlCoinType = GqlCoin | GqlMessageCoin;\n\nexport type GqlConsensus = GqlGenesis | GqlPoAConsensus;\n\nexport type GqlConsensusParameters = {\n __typename: 'ConsensusParameters';\n baseAssetId: Scalars['AssetId'];\n chainId: Scalars['U64'];\n contractParams: GqlContractParameters;\n feeParams: GqlFeeParameters;\n gasCosts: GqlGasCosts;\n predicateParams: GqlPredicateParameters;\n scriptParams: GqlScriptParameters;\n txParams: GqlTxParameters;\n};\n\nexport type GqlContract = {\n __typename: 'Contract';\n bytecode: Scalars['HexString'];\n id: Scalars['ContractId'];\n salt: Scalars['Salt'];\n};\n\nexport type GqlContractBalance = {\n __typename: 'ContractBalance';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n contract: Scalars['ContractId'];\n};\n\nexport type GqlContractBalanceConnection = {\n __typename: 'ContractBalanceConnection';\n /** A list of edges. */\n edges: Array<GqlContractBalanceEdge>;\n /** A list of nodes. */\n nodes: Array<GqlContractBalance>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlContractBalanceEdge = {\n __typename: 'ContractBalanceEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlContractBalance;\n};\n\nexport type GqlContractBalanceFilterInput = {\n /** Filter assets based on the `contractId` field */\n contract: Scalars['ContractId'];\n};\n\nexport type GqlContractCreated = {\n __typename: 'ContractCreated';\n contract: GqlContract;\n stateRoot: Scalars['Bytes32'];\n};\n\nexport type GqlContractOutput = {\n __typename: 'ContractOutput';\n balanceRoot: Scalars['Bytes32'];\n inputIndex: Scalars['Int'];\n stateRoot: Scalars['Bytes32'];\n};\n\nexport type GqlContractParameters = {\n __typename: 'ContractParameters';\n contractMaxSize: Scalars['U64'];\n maxStorageSlots: Scalars['U64'];\n};\n\nexport type GqlDependentCost = GqlHeavyOperation | GqlLightOperation;\n\nexport type GqlExcludeInput = {\n /** Messages to exclude from the selection. */\n messages: Array<Scalars['Nonce']>;\n /** Utxos to exclude from the selection. */\n utxos: Array<Scalars['UtxoId']>;\n};\n\nexport type GqlFailureStatus = {\n __typename: 'FailureStatus';\n block: GqlBlock;\n programState?: Maybe<GqlProgramState>;\n reason: Scalars['String'];\n receipts: Array<GqlReceipt>;\n time: Scalars['Tai64Timestamp'];\n transactionId: Scalars['TransactionId'];\n};\n\nexport type GqlFeeParameters = {\n __typename: 'FeeParameters';\n gasPerByte: Scalars['U64'];\n gasPriceFactor: Scalars['U64'];\n};\n\nexport type GqlGasCosts = {\n __typename: 'GasCosts';\n add: Scalars['U64'];\n addi: Scalars['U64'];\n aloc: Scalars['U64'];\n and: Scalars['U64'];\n andi: Scalars['U64'];\n bal: Scalars['U64'];\n bhei: Scalars['U64'];\n bhsh: Scalars['U64'];\n burn: Scalars['U64'];\n call: GqlDependentCost;\n cb: Scalars['U64'];\n ccp: GqlDependentCost;\n cfei: Scalars['U64'];\n cfsi: Scalars['U64'];\n contractRoot: GqlDependentCost;\n croo: Scalars['U64'];\n csiz: GqlDependentCost;\n div: Scalars['U64'];\n divi: Scalars['U64'];\n eck1: Scalars['U64'];\n ecr1: Scalars['U64'];\n ed19: Scalars['U64'];\n eq: Scalars['U64'];\n exp: Scalars['U64'];\n expi: Scalars['U64'];\n flag: Scalars['U64'];\n gm: Scalars['U64'];\n gt: Scalars['U64'];\n gtf: Scalars['U64'];\n ji: Scalars['U64'];\n jmp: Scalars['U64'];\n jmpb: Scalars['U64'];\n jmpf: Scalars['U64'];\n jne: Scalars['U64'];\n jneb: Scalars['U64'];\n jnef: Scalars['U64'];\n jnei: Scalars['U64'];\n jnzb: Scalars['U64'];\n jnzf: Scalars['U64'];\n jnzi: Scalars['U64'];\n k256: GqlDependentCost;\n lb: Scalars['U64'];\n ldc: GqlDependentCost;\n log: Scalars['U64'];\n logd: GqlDependentCost;\n lt: Scalars['U64'];\n lw: Scalars['U64'];\n mcl: GqlDependentCost;\n mcli: GqlDependentCost;\n mcp: GqlDependentCost;\n mcpi: GqlDependentCost;\n meq: GqlDependentCost;\n mint: Scalars['U64'];\n mldv: Scalars['U64'];\n mlog: Scalars['U64'];\n modOp: Scalars['U64'];\n modi: Scalars['U64'];\n moveOp: Scalars['U64'];\n movi: Scalars['U64'];\n mroo: Scalars['U64'];\n mul: Scalars['U64'];\n muli: Scalars['U64'];\n newStoragePerByte: Scalars['U64'];\n noop: Scalars['U64'];\n not: Scalars['U64'];\n or: Scalars['U64'];\n ori: Scalars['U64'];\n poph: Scalars['U64'];\n popl: Scalars['U64'];\n pshh: Scalars['U64'];\n pshl: Scalars['U64'];\n ret: Scalars['U64'];\n retd: GqlDependentCost;\n rvrt: Scalars['U64'];\n s256: GqlDependentCost;\n sb: Scalars['U64'];\n scwq: GqlDependentCost;\n sll: Scalars['U64'];\n slli: Scalars['U64'];\n smo: GqlDependentCost;\n srl: Scalars['U64'];\n srli: Scalars['U64'];\n srw: Scalars['U64'];\n srwq: GqlDependentCost;\n stateRoot: GqlDependentCost;\n sub: Scalars['U64'];\n subi: Scalars['U64'];\n sw: Scalars['U64'];\n sww: Scalars['U64'];\n swwq: GqlDependentCost;\n time: Scalars['U64'];\n tr: Scalars['U64'];\n tro: Scalars['U64'];\n vmInitialization: GqlDependentCost;\n wdam: Scalars['U64'];\n wdcm: Scalars['U64'];\n wddv: Scalars['U64'];\n wdmd: Scalars['U64'];\n wdml: Scalars['U64'];\n wdmm: Scalars['U64'];\n wdop: Scalars['U64'];\n wqam: Scalars['U64'];\n wqcm: Scalars['U64'];\n wqdv: Scalars['U64'];\n wqmd: Scalars['U64'];\n wqml: Scalars['U64'];\n wqmm: Scalars['U64'];\n wqop: Scalars['U64'];\n xor: Scalars['U64'];\n xori: Scalars['U64'];\n};\n\nexport type GqlGenesis = {\n __typename: 'Genesis';\n /**\n * The chain configs define what consensus type to use, what settlement layer to use,\n * rules of block validity, etc.\n */\n chainConfigHash: Scalars['Bytes32'];\n /** The Binary Merkle Tree root of all genesis coins. */\n coinsRoot: Scalars['Bytes32'];\n /** The Binary Merkle Tree root of state, balances, contracts code hash of each contract. */\n contractsRoot: Scalars['Bytes32'];\n /** The Binary Merkle Tree root of all genesis messages. */\n messagesRoot: Scalars['Bytes32'];\n};\n\nexport type GqlHeader = {\n __typename: 'Header';\n /** Hash of the application header. */\n applicationHash: Scalars['Bytes32'];\n /** The layer 1 height of messages and events to include since the last layer 1 block number. */\n daHeight: Scalars['U64'];\n /** Fuel block height. */\n height: Scalars['U32'];\n /** Hash of the header */\n id: Scalars['BlockId'];\n /** Number of message receipts in this block. */\n messageReceiptCount: Scalars['U64'];\n /** Merkle root of message receipts in this block. */\n messageReceiptRoot: Scalars['Bytes32'];\n /** Merkle root of all previous block header hashes. */\n prevRoot: Scalars['Bytes32'];\n /** The block producer time. */\n time: Scalars['Tai64Timestamp'];\n /** Number of transactions in this block. */\n transactionsCount: Scalars['U64'];\n /** Merkle root of transactions. */\n transactionsRoot: Scalars['Bytes32'];\n};\n\nexport type GqlHeavyOperation = {\n __typename: 'HeavyOperation';\n base: Scalars['U64'];\n gasPerUnit: Scalars['U64'];\n};\n\nexport type GqlInput = GqlInputCoin | GqlInputContract | GqlInputMessage;\n\nexport type GqlInputCoin = {\n __typename: 'InputCoin';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n maturity: Scalars['U32'];\n owner: Scalars['Address'];\n predicate: Scalars['HexString'];\n predicateData: Scalars['HexString'];\n predicateGasUsed: Scalars['U64'];\n txPointer: Scalars['TxPointer'];\n utxoId: Scalars['UtxoId'];\n witnessIndex: Scalars['Int'];\n};\n\nexport type GqlInputContract = {\n __typename: 'InputContract';\n balanceRoot: Scalars['Bytes32'];\n contract: GqlContract;\n stateRoot: Scalars['Bytes32'];\n txPointer: Scalars['TxPointer'];\n utxoId: Scalars['UtxoId'];\n};\n\nexport type GqlInputMessage = {\n __typename: 'InputMessage';\n amount: Scalars['U64'];\n data: Scalars['HexString'];\n nonce: Scalars['Nonce'];\n predicate: Scalars['HexString'];\n predicateData: Scalars['HexString'];\n predicateGasUsed: Scalars['U64'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n witnessIndex: Scalars['Int'];\n};\n\nexport type GqlLightOperation = {\n __typename: 'LightOperation';\n base: Scalars['U64'];\n unitsPerGas: Scalars['U64'];\n};\n\nexport type GqlMerkleProof = {\n __typename: 'MerkleProof';\n proofIndex: Scalars['U64'];\n proofSet: Array<Scalars['Bytes32']>;\n};\n\nexport type GqlMessage = {\n __typename: 'Message';\n amount: Scalars['U64'];\n daHeight: Scalars['U64'];\n data: Scalars['HexString'];\n nonce: Scalars['Nonce'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n};\n\nexport type GqlMessageCoin = {\n __typename: 'MessageCoin';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n daHeight: Scalars['U64'];\n nonce: Scalars['Nonce'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n};\n\nexport type GqlMessageConnection = {\n __typename: 'MessageConnection';\n /** A list of edges. */\n edges: Array<GqlMessageEdge>;\n /** A list of nodes. */\n nodes: Array<GqlMessage>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlMessageEdge = {\n __typename: 'MessageEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlMessage;\n};\n\nexport type GqlMessageProof = {\n __typename: 'MessageProof';\n amount: Scalars['U64'];\n blockProof: GqlMerkleProof;\n commitBlockHeader: GqlHeader;\n data: Scalars['HexString'];\n messageBlockHeader: GqlHeader;\n messageProof: GqlMerkleProof;\n nonce: Scalars['Nonce'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n};\n\nexport enum GqlMessageState {\n NotFound = 'NOT_FOUND',\n Spent = 'SPENT',\n Unspent = 'UNSPENT'\n}\n\nexport type GqlMessageStatus = {\n __typename: 'MessageStatus';\n state: GqlMessageState;\n};\n\nexport type GqlMutation = {\n __typename: 'Mutation';\n continueTx: GqlRunResult;\n /** Execute a dry-run of the transaction using a fork of current state, no changes are committed. */\n dryRun: Array<GqlReceipt>;\n endSession: Scalars['Boolean'];\n execute: Scalars['Boolean'];\n /**\n * Sequentially produces `blocks_to_produce` blocks. The first block starts with\n * `start_timestamp`. If the block production in the [`crate::service::Config`] is\n * `Trigger::Interval { block_time }`, produces blocks with `block_time ` intervals between\n * them. The `start_timestamp` is the timestamp in seconds.\n */\n produceBlocks: Scalars['U32'];\n reset: Scalars['Boolean'];\n setBreakpoint: Scalars['Boolean'];\n setSingleStepping: Scalars['Boolean'];\n startSession: Scalars['ID'];\n startTx: GqlRunResult;\n /**\n * Submits transaction to the `TxPool`.\n *\n * Returns submitted transaction if the transaction is included in the `TxPool` without problems.\n */\n submit: GqlTransaction;\n};\n\n\nexport type GqlMutationContinueTxArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationDryRunArgs = {\n tx: Scalars['HexString'];\n utxoValidation?: InputMaybe<Scalars['Boolean']>;\n};\n\n\nexport type GqlMutationEndSessionArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationExecuteArgs = {\n id: Scalars['ID'];\n op: Scalars['String'];\n};\n\n\nexport type GqlMutationProduceBlocksArgs = {\n blocksToProduce: Scalars['U32'];\n startTimestamp?: InputMaybe<Scalars['Tai64Timestamp']>;\n};\n\n\nexport type GqlMutationResetArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationSetBreakpointArgs = {\n breakpoint: GqlBreakpoint;\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationSetSingleSteppingArgs = {\n enable: Scalars['Boolean'];\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationStartTxArgs = {\n id: Scalars['ID'];\n txJson: Scalars['String'];\n};\n\n\nexport type GqlMutationSubmitArgs = {\n tx: Scalars['HexString'];\n};\n\nexport type GqlNodeInfo = {\n __typename: 'NodeInfo';\n maxDepth: Scalars['U64'];\n maxTx: Scalars['U64'];\n minGasPrice: Scalars['U64'];\n nodeVersion: Scalars['String'];\n peers: Array<GqlPeerInfo>;\n utxoValidation: Scalars['Boolean'];\n vmBacktrace: Scalars['Boolean'];\n};\n\nexport type GqlOutput = GqlChangeOutput | GqlCoinOutput | GqlContractCreated | GqlContractOutput | GqlVariableOutput;\n\n/**\n * A separate `Breakpoint` type to be used as an output, as a single\n * type cannot act as both input and output type in async-graphql\n */\nexport type GqlOutputBreakpoint = {\n __typename: 'OutputBreakpoint';\n contract: Scalars['ContractId'];\n pc: Scalars['U64'];\n};\n\n/** Information about pagination in a connection */\nexport type GqlPageInfo = {\n __typename: 'PageInfo';\n /** When paginating forwards, the cursor to continue. */\n endCursor?: Maybe<Scalars['String']>;\n /** When paginating forwards, are there more items? */\n hasNextPage: Scalars['Boolean'];\n /** When paginating backwards, are there more items? */\n hasPreviousPage: Scalars['Boolean'];\n /** When paginating backwards, the cursor to continue. */\n startCursor?: Maybe<Scalars['String']>;\n};\n\nexport type GqlPeerInfo = {\n __typename: 'PeerInfo';\n /** The advertised multi-addrs that can be used to connect to this peer */\n addresses: Array<Scalars['String']>;\n /** The internal fuel p2p reputation of this peer */\n appScore: Scalars['Float'];\n /** The last reported height of the peer */\n blockHeight?: Maybe<Scalars['U32']>;\n /** The self-reported version of the client the peer is using */\n clientVersion?: Maybe<Scalars['String']>;\n /** The libp2p peer id */\n id: Scalars['String'];\n /** The last heartbeat from this peer in unix epoch time ms */\n lastHeartbeatMs: Scalars['U64'];\n};\n\nexport type GqlPoAConsensus = {\n __typename: 'PoAConsensus';\n /** Gets the signature of the block produced by `PoA` consensus. */\n signature: Scalars['Signature'];\n};\n\nexport type GqlPolicies = {\n __typename: 'Policies';\n gasPrice?: Maybe<Scalars['U64']>;\n maturity?: Maybe<Scalars['U32']>;\n maxFee?: Maybe<Scalars['U64']>;\n witnessLimit?: Maybe<Scalars['U64']>;\n};\n\nexport type GqlPredicateParameters = {\n __typename: 'PredicateParameters';\n maxGasPerPredicate: Scalars['U64'];\n maxMessageDataLength: Scalars['U64'];\n maxPredicateDataLength: Scalars['U64'];\n maxPredicateLength: Scalars['U64'];\n};\n\nexport type GqlProgramState = {\n __typename: 'ProgramState';\n data: Scalars['HexString'];\n returnType: GqlReturnType;\n};\n\nexport type GqlQuery = {\n __typename: 'Query';\n balance: GqlBalance;\n balances: GqlBalanceConnection;\n block?: Maybe<GqlBlock>;\n blocks: GqlBlockConnection;\n chain: GqlChainInfo;\n /** Gets the coin by `utxo_id`. */\n coin?: Maybe<GqlCoin>;\n /** Gets all unspent coins of some `owner` maybe filtered with by `asset_id` per page. */\n coins: GqlCoinConnection;\n /**\n * For each `query_per_asset`, get some spendable coins(of asset specified by the query) owned by\n * `owner` that add up at least the query amount. The returned coins can be spent.\n * The number of coins is optimized to prevent dust accumulation.\n *\n * The query supports excluding and maximum the number of coins.\n *\n * Returns:\n * The list of spendable coins per asset from the query. The length of the result is\n * the same as the length of `query_per_asset`. The ordering of assets and `query_per_asset`\n * is the same.\n */\n coinsToSpend: Array<Array<GqlCoinType>>;\n contract?: Maybe<GqlContract>;\n contractBalance: GqlContractBalance;\n contractBalances: GqlContractBalanceConnection;\n /** Estimate the predicate gas for the provided transaction */\n estimatePredicates: GqlTransaction;\n /** Returns true when the GraphQL API is serving requests. */\n health: Scalars['Boolean'];\n memory: Scalars['String'];\n messageProof?: Maybe<GqlMessageProof>;\n messageStatus: GqlMessageStatus;\n messages: GqlMessageConnection;\n nodeInfo: GqlNodeInfo;\n register: Scalars['U64'];\n transaction?: Maybe<GqlTransaction>;\n transactions: GqlTransactionConnection;\n transactionsByOwner: GqlTransactionConnection;\n};\n\n\nexport type GqlQueryBalanceArgs = {\n assetId: Scalars['AssetId'];\n owner: Scalars['Address'];\n};\n\n\nexport type GqlQueryBalancesArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n filter: GqlBalanceFilterInput;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryBlockArgs = {\n height?: InputMaybe<Scalars['U32']>;\n id?: InputMaybe<Scalars['BlockId']>;\n};\n\n\nexport type GqlQueryBlocksArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryCoinArgs = {\n utxoId: Scalars['UtxoId'];\n};\n\n\nexport type GqlQueryCoinsArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n filter: GqlCoinFilterInput;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryCoinsToSpendArgs = {\n excludedIds?: InputMaybe<GqlExcludeInput>;\n owner: Scalars['Address'];\n queryPerAsset: Array<GqlSpendQueryElementInput>;\n};\n\n\nexport type GqlQueryContractArgs = {\n id: Scalars['ContractId'];\n};\n\n\nexport type GqlQueryContractBalanceArgs = {\n asset: Scalars['AssetId'];\n contract: Scalars['ContractId'];\n};\n\n\nexport type GqlQueryContractBalancesArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n filter: GqlContractBalanceFilterInput;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryEstimatePredicatesArgs = {\n tx: Scalars['HexString'];\n};\n\n\nexport type GqlQueryMemoryArgs = {\n id: Scalars['ID'];\n size: Scalars['U32'];\n start: Scalars['U32'];\n};\n\n\nexport type GqlQueryMessageProofArgs = {\n commitBlockHeight?: InputMaybe<Scalars['U32']>;\n commitBlockId?: InputMaybe<Scalars['BlockId']>;\n nonce: Scalars['Nonce'];\n transactionId: Scalars['TransactionId'];\n};\n\n\nexport type GqlQueryMessageStatusArgs = {\n nonce: Scalars['Nonce'];\n};\n\n\nexport type GqlQueryMessagesArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n owner?: InputMaybe<Scalars['Address']>;\n};\n\n\nexport type GqlQueryRegisterArgs = {\n id: Scalars['ID'];\n register: Scalars['U32'];\n};\n\n\nexport type GqlQueryTransactionArgs = {\n id: Scalars['TransactionId'];\n};\n\n\nexport type GqlQueryTransactionsArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryTransactionsByOwnerArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n owner: Scalars['Address'];\n};\n\nexport type GqlReceipt = {\n __typename: 'Receipt';\n amount?: Maybe<Scalars['U64']>;\n assetId?: Maybe<Scalars['AssetId']>;\n contract?: Maybe<GqlContract>;\n contractId?: Maybe<Scalars['ContractId']>;\n data?: Maybe<Scalars['HexString']>;\n digest?: Maybe<Scalars['Bytes32']>;\n gas?: Maybe<Scalars['U64']>;\n gasUsed?: Maybe<Scalars['U64']>;\n is?: Maybe<Scalars['U64']>;\n len?: Maybe<Scalars['U64']>;\n nonce?: Maybe<Scalars['Nonce']>;\n param1?: Maybe<Scalars['U64']>;\n param2?: Maybe<Scalars['U64']>;\n pc?: Maybe<Scalars['U64']>;\n ptr?: Maybe<Scalars['U64']>;\n ra?: Maybe<Scalars['U64']>;\n rb?: Maybe<Scalars['U64']>;\n rc?: Maybe<Scalars['U64']>;\n rd?: Maybe<Scalars['U64']>;\n reason?: Maybe<Scalars['U64']>;\n receiptType: GqlReceiptType;\n recipient?: Maybe<Scalars['Address']>;\n result?: Maybe<Scalars['U64']>;\n sender?: Maybe<Scalars['Address']>;\n subId?: Maybe<Scalars['Bytes32']>;\n to?: Maybe<GqlContract>;\n toAddress?: Maybe<Scalars['Address']>;\n val?: Maybe<Scalars['U64']>;\n};\n\nexport enum GqlReceiptType {\n Burn = 'BURN',\n Call = 'CALL',\n Log = 'LOG',\n LogData = 'LOG_DATA',\n MessageOut = 'MESSAGE_OUT',\n Mint = 'MINT',\n Panic = 'PANIC',\n Return = 'RETURN',\n ReturnData = 'RETURN_DATA',\n Revert = 'REVERT',\n ScriptResult = 'SCRIPT_RESULT',\n Transfer = 'TRANSFER',\n TransferOut = 'TRANSFER_OUT'\n}\n\nexport enum GqlReturnType {\n Return = 'RETURN',\n ReturnData = 'RETURN_DATA',\n Revert = 'REVERT'\n}\n\nexport type GqlRunResult = {\n __typename: 'RunResult';\n breakpoint?: Maybe<GqlOutputBreakpoint>;\n jsonReceipts: Array<Scalars['String']>;\n state: GqlRunState;\n};\n\nexport enum GqlRunState {\n /** Stopped on a breakpoint */\n Breakpoint = 'BREAKPOINT',\n /** All breakpoints have been processed, and the program has terminated */\n Completed = 'COMPLETED'\n}\n\nexport type GqlScriptParameters = {\n __typename: 'ScriptParameters';\n maxScriptDataLength: Scalars['U64'];\n maxScriptLength: Scalars['U64'];\n};\n\nexport type GqlSpendQueryElementInput = {\n /** Target amount for the query. */\n amount: Scalars['U64'];\n /** Identifier of the asset to spend. */\n assetId: Scalars['AssetId'];\n /** The maximum number of currencies for selection. */\n max?: InputMaybe<Scalars['U32']>;\n};\n\nexport type GqlSqueezedOutStatus = {\n __typename: 'SqueezedOutStatus';\n reason: Scalars['String'];\n};\n\nexport type GqlSubmittedStatus = {\n __typename: 'SubmittedStatus';\n time: Scalars['Tai64Timestamp'];\n};\n\nexport type GqlSubscription = {\n __typename: 'Subscription';\n /**\n * Returns a stream of status updates for the given transaction id.\n * If the current status is [`TransactionStatus::Success`], [`TransactionStatus::SqueezedOut`]\n * or [`TransactionStatus::Failed`] the stream will return that and end immediately.\n * If the current status is [`TransactionStatus::Submitted`] this will be returned\n * and the stream will wait for a future update.\n *\n * This stream will wait forever so it's advised to use within a timeout.\n *\n * It is possible for the stream to miss an update if it is polled slower\n * then the updates arrive. In such a case the stream will close without\n * a status. If this occurs the stream can simply be restarted to return\n * the latest status.\n */\n statusChange: GqlTransactionStatus;\n /** Submits transaction to the `TxPool` and await either confirmation or failure. */\n submitAndAwait: GqlTransactionStatus;\n};\n\n\nexport type GqlSubscriptionStatusChangeArgs = {\n id: Scalars['TransactionId'];\n};\n\n\nexport type GqlSubscriptionSubmitAndAwaitArgs = {\n tx: Scalars['HexString'];\n};\n\nexport type GqlSuccessStatus = {\n __typename: 'SuccessStatus';\n block: GqlBlock;\n programState?: Maybe<GqlProgramState>;\n receipts: Array<GqlReceipt>;\n time: Scalars['Tai64Timestamp'];\n transactionId: Scalars['TransactionId'];\n};\n\nexport type GqlTransaction = {\n __typename: 'Transaction';\n bytecodeLength?: Maybe<Scalars['U64']>;\n bytecodeWitnessIndex?: Maybe<Scalars['Int']>;\n gasPrice?: Maybe<Scalars['U64']>;\n id: Scalars['TransactionId'];\n inputAssetIds?: Maybe<Array<Scalars['AssetId']>>;\n inputContract?: Maybe<GqlInputContract>;\n inputContracts?: Maybe<Array<GqlContract>>;\n inputs?: Maybe<Array<GqlInput>>;\n isCreate: Scalars['Boolean'];\n isMint: Scalars['Boolean'];\n isScript: Scalars['Boolean'];\n maturity?: Maybe<Scalars['U32']>;\n mintAmount?: Maybe<Scalars['U64']>;\n mintAssetId?: Maybe<Scalars['AssetId']>;\n outputContract?: Maybe<GqlContractOutput>;\n outputs: Array<GqlOutput>;\n policies?: Maybe<GqlPolicies>;\n /** Return the transaction bytes using canonical encoding */\n rawPayload: Scalars['HexString'];\n receipts?: Maybe<Array<GqlReceipt>>;\n receiptsRoot?: Maybe<Scalars['Bytes32']>;\n salt?: Maybe<Scalars['Salt']>;\n script?: Maybe<Scalars['HexString']>;\n scriptData?: Maybe<Scalars['HexString']>;\n scriptGasLimit?: Maybe<Scalars['U64']>;\n status?: Maybe<GqlTransactionStatus>;\n storageSlots?: Maybe<Array<Scalars['HexString']>>;\n txPointer?: Maybe<Scalars['TxPointer']>;\n witnesses?: Maybe<Array<Scalars['HexString']>>;\n};\n\nexport type GqlTransactionConnection = {\n __typename: 'TransactionConnection';\n /** A list of edges. */\n edges: Array<GqlTransactionEdge>;\n /** A list of nodes. */\n nodes: Array<GqlTransaction>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlTransactionEdge = {\n __typename: 'TransactionEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlTransaction;\n};\n\nexport type GqlTransactionStatus = GqlFailureStatus | GqlSqueezedOutStatus | GqlSubmittedStatus | GqlSuccessStatus;\n\nexport type GqlTxParameters = {\n __typename: 'TxParameters';\n maxGasPerTx: Scalars['U64'];\n maxInputs: Scalars['U8'];\n maxOutputs: Scalars['U8'];\n maxSize: Scalars['U64'];\n maxWitnesses: Scalars['U32'];\n};\n\nexport type GqlVariableOutput = {\n __typename: 'VariableOutput';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n to: Scalars['Address'];\n};\n\ntype GqlTransactionStatusFragment_FailureStatus_Fragment = { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } };\n\ntype GqlTransactionStatusFragment_SqueezedOutStatus_Fragment = { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' };\n\ntype GqlTransactionStatusFragment_SubmittedStatus_Fragment = { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' };\n\ntype GqlTransactionStatusFragment_SuccessStatus_Fragment = { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null };\n\nexport type GqlTransactionStatusFragmentFragment = GqlTransactionStatusFragment_FailureStatus_Fragment | GqlTransactionStatusFragment_SqueezedOutStatus_Fragment | GqlTransactionStatusFragment_SubmittedStatus_Fragment | GqlTransactionStatusFragment_SuccessStatus_Fragment;\n\nexport type GqlTransactionFragmentFragment = { __typename: 'Transaction', id: string, rawPayload: string, gasPrice?: string | null, receipts?: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> | null, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null };\n\ntype GqlInputEstimatePredicatesFragment_InputCoin_Fragment = { __typename: 'InputCoin', predicateGasUsed: string };\n\ntype GqlInputEstimatePredicatesFragment_InputContract_Fragment = { __typename: 'InputContract' };\n\ntype GqlInputEstimatePredicatesFragment_InputMessage_Fragment = { __typename: 'InputMessage', predicateGasUsed: string };\n\nexport type GqlInputEstimatePredicatesFragmentFragment = GqlInputEstimatePredicatesFragment_InputCoin_Fragment | GqlInputEstimatePredicatesFragment_InputContract_Fragment | GqlInputEstimatePredicatesFragment_InputMessage_Fragment;\n\nexport type GqlTransactionEstimatePredicatesFragmentFragment = { __typename: 'Transaction', inputs?: Array<{ __typename: 'InputCoin', predicateGasUsed: string } | { __typename: 'InputContract' } | { __typename: 'InputMessage', predicateGasUsed: string }> | null };\n\nexport type GqlReceiptFragmentFragment = { __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null };\n\nexport type GqlBlockFragmentFragment = { __typename: 'Block', id: string, header: { __typename: 'Header', height: any, time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> };\n\nexport type GqlCoinFragmentFragment = { __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, maturity: any, blockCreated: any, txCreatedIdx: string };\n\nexport type GqlMessageCoinFragmentFragment = { __typename: 'MessageCoin', sender: string, recipient: string, nonce: string, amount: string, assetId: string, daHeight: string };\n\nexport type GqlMessageFragmentFragment = { __typename: 'Message', amount: string, sender: string, recipient: string, data: string, nonce: string, daHeight: string };\n\nexport type GqlMessageProofFragmentFragment = { __typename: 'MessageProof', sender: string, recipient: string, nonce: string, amount: string, data: string, messageProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, blockProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, messageBlockHeader: { __typename: 'Header', id: string, daHeight: string, transactionsCount: string, transactionsRoot: string, height: any, prevRoot: string, time: string, applicationHash: string, messageReceiptRoot: string, messageReceiptCount: string }, commitBlockHeader: { __typename: 'Header', id: string, daHeight: string, transactionsCount: string, transactionsRoot: string, height: any, prevRoot: string, time: string, applicationHash: string, messageReceiptRoot: string, messageReceiptCount: string } };\n\nexport type GqlBalanceFragmentFragment = { __typename: 'Balance', owner: string, amount: string, assetId: string };\n\nexport type GqlTxParametersFragmentFragment = { __typename: 'TxParameters', maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string };\n\nexport type GqlPredicateParametersFragmentFragment = { __typename: 'PredicateParameters', maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string };\n\nexport type GqlScriptParametersFragmentFragment = { __typename: 'ScriptParameters', maxScriptLength: string, maxScriptDataLength: string };\n\nexport type GqlContractParametersFragmentFragment = { __typename: 'ContractParameters', contractMaxSize: string, maxStorageSlots: string };\n\nexport type GqlFeeParametersFragmentFragment = { __typename: 'FeeParameters', gasPriceFactor: string, gasPerByte: string };\n\ntype GqlDependentCostFragment_HeavyOperation_Fragment = { __typename: 'HeavyOperation', base: string, gasPerUnit: string };\n\ntype GqlDependentCostFragment_LightOperation_Fragment = { __typename: 'LightOperation', base: string, unitsPerGas: string };\n\nexport type GqlDependentCostFragmentFragment = GqlDependentCostFragment_HeavyOperation_Fragment | GqlDependentCostFragment_LightOperation_Fragment;\n\nexport type GqlGasCostsFragmentFragment = { __typename: 'GasCosts', add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, croo: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } };\n\nexport type GqlConsensusParametersFragmentFragment = { __typename: 'ConsensusParameters', baseAssetId: string, chainId: string, txParams: { __typename: 'TxParameters', maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string }, predicateParams: { __typename: 'PredicateParameters', maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string }, scriptParams: { __typename: 'ScriptParameters', maxScriptLength: string, maxScriptDataLength: string }, contractParams: { __typename: 'ContractParameters', contractMaxSize: string, maxStorageSlots: string }, feeParams: { __typename: 'FeeParameters', gasPriceFactor: string, gasPerByte: string }, gasCosts: { __typename: 'GasCosts', add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, croo: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } } };\n\nexport type GqlChainInfoFragmentFragment = { __typename: 'ChainInfo', name: string, daHeight: string, latestBlock: { __typename: 'Block', id: string, header: { __typename: 'Header', height: any, time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> }, consensusParameters: { __typename: 'ConsensusParameters', baseAssetId: string, chainId: string, txParams: { __typename: 'TxParameters', maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string }, predicateParams: { __typename: 'PredicateParameters', maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string }, scriptParams: { __typename: 'ScriptParameters', maxScriptLength: string, maxScriptDataLength: string }, contractParams: { __typename: 'ContractParameters', contractMaxSize: string, maxStorageSlots: string }, feeParams: { __typename: 'FeeParameters', gasPriceFactor: string, gasPerByte: string }, gasCosts: { __typename: 'GasCosts', add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, croo: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } } } };\n\nexport type GqlContractBalanceFragmentFragment = { __typename: 'ContractBalance', contract: string, amount: string, assetId: string };\n\nexport type GqlPageInfoFragmentFragment = { __typename: 'PageInfo', hasPreviousPage: boolean, hasNextPage: boolean, startCursor?: string | null, endCursor?: string | null };\n\nexport type GqlGetVersionQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetVersionQuery = { __typename: 'Query', nodeInfo: { __typename: 'NodeInfo', nodeVersion: string } };\n\nexport type GqlNodeInfoFragmentFragment = { __typename: 'NodeInfo', utxoValidation: boolean, vmBacktrace: boolean, minGasPrice: string, maxTx: string, maxDepth: string, nodeVersion: string, peers: Array<{ __typename: 'PeerInfo', id: string, addresses: Array<string>, clientVersion?: string | null, blockHeight?: any | null, lastHeartbeatMs: string, appScore: number }> };\n\nexport type GqlGetNodeInfoQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetNodeInfoQuery = { __typename: 'Query', nodeInfo: { __typename: 'NodeInfo', utxoValidation: boolean, vmBacktrace: boolean, minGasPrice: string, maxTx: string, maxDepth: string, nodeVersion: string, peers: Array<{ __typename: 'PeerInfo', id: string, addresses: Array<string>, clientVersion?: string | null, blockHeight?: any | null, lastHeartbeatMs: string, appScore: number }> } };\n\nexport type GqlGetChainQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetChainQuery = { __typename: 'Query', chain: { __typename: 'ChainInfo', name: string, daHeight: string, latestBlock: { __typename: 'Block', id: string, header: { __typename: 'Header', height: any, time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> }, consensusParameters: { __typename: 'ConsensusParameters', baseAssetId: string, chainId: string, txParams: { __typename: 'TxParameters', maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string }, predicateParams: { __typename: 'PredicateParameters', maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string }, scriptParams: { __typename: 'ScriptParameters', maxScriptLength: string, maxScriptDataLength: string }, contractParams: { __typename: 'ContractParameters', contractMaxSize: string, maxStorageSlots: string }, feeParams: { __typename: 'FeeParameters', gasPriceFactor: string, gasPerByte: string }, gasCosts: { __typename: 'GasCosts', add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, croo: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } } } } };\n\nexport type GqlGetTransactionQueryVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n}>;\n\n\nexport type GqlGetTransactionQuery = { __typename: 'Query', transaction?: { __typename: 'Transaction', id: string, rawPayload: string, gasPrice?: string | null, receipts?: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> | null, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } | null };\n\nexport type GqlGetTransactionWithReceiptsQueryVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n}>;\n\n\nexport type GqlGetTransactionWithReceiptsQuery = { __typename: 'Query', transaction?: { __typename: 'Transaction', id: string, rawPayload: string, gasPrice?: string | null, receipts?: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> | null, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } | null };\n\nexport type GqlGetTransactionsQueryVariables = Exact<{\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetTransactionsQuery = { __typename: 'Query', transactions: { __typename: 'TransactionConnection', edges: Array<{ __typename: 'TransactionEdge', node: { __typename: 'Transaction', id: string, rawPayload: string, gasPrice?: string | null, receipts?: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> | null, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } }> } };\n\nexport type GqlGetTransactionsByOwnerQueryVariables = Exact<{\n owner: Scalars['Address'];\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetTransactionsByOwnerQuery = { __typename: 'Query', transactionsByOwner: { __typename: 'TransactionConnection', pageInfo: { __typename: 'PageInfo', hasPreviousPage: boolean, hasNextPage: boolean, startCursor?: string | null, endCursor?: string | null }, edges: Array<{ __typename: 'TransactionEdge', node: { __typename: 'Transaction', id: string, rawPayload: string, gasPrice?: string | null, receipts?: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> | null, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } }> } };\n\nexport type GqlEstimatePredicatesQueryVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n}>;\n\n\nexport type GqlEstimatePredicatesQuery = { __typename: 'Query', estimatePredicates: { __typename: 'Transaction', inputs?: Array<{ __typename: 'InputCoin', predicateGasUsed: string } | { __typename: 'InputContract' } | { __typename: 'InputMessage', predicateGasUsed: string }> | null } };\n\nexport type GqlGetBlockQueryVariables = Exact<{\n blockId?: InputMaybe<Scalars['BlockId']>;\n height?: InputMaybe<Scalars['U32']>;\n}>;\n\n\nexport type GqlGetBlockQuery = { __typename: 'Query', block?: { __typename: 'Block', id: string, header: { __typename: 'Header', height: any, time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> } | null };\n\nexport type GqlGetBlockWithTransactionsQueryVariables = Exact<{\n blockId?: InputMaybe<Scalars['BlockId']>;\n blockHeight?: InputMaybe<Scalars['U32']>;\n}>;\n\n\nexport type GqlGetBlockWithTransactionsQuery = { __typename: 'Query', block?: { __typename: 'Block', id: string, transactions: Array<{ __typename: 'Transaction', id: string, rawPayload: string, gasPrice?: string | null, receipts?: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> | null, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null }>, header: { __typename: 'Header', height: any, time: string } } | null };\n\nexport type GqlGetBlocksQueryVariables = Exact<{\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetBlocksQuery = { __typename: 'Query', blocks: { __typename: 'BlockConnection', edges: Array<{ __typename: 'BlockEdge', node: { __typename: 'Block', id: string, header: { __typename: 'Header', height: any, time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> } }> } };\n\nexport type GqlGetCoinQueryVariables = Exact<{\n coinId: Scalars['UtxoId'];\n}>;\n\n\nexport type GqlGetCoinQuery = { __typename: 'Query', coin?: { __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, maturity: any, blockCreated: any, txCreatedIdx: string } | null };\n\nexport type GqlGetCoinsQueryVariables = Exact<{\n filter: GqlCoinFilterInput;\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetCoinsQuery = { __typename: 'Query', coins: { __typename: 'CoinConnection', edges: Array<{ __typename: 'CoinEdge', node: { __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, maturity: any, blockCreated: any, txCreatedIdx: string } }> } };\n\nexport type GqlGetCoinsToSpendQueryVariables = Exact<{\n owner: Scalars['Address'];\n queryPerAsset: Array<GqlSpendQueryElementInput> | GqlSpendQueryElementInput;\n excludedIds?: InputMaybe<GqlExcludeInput>;\n}>;\n\n\nexport type GqlGetCoinsToSpendQuery = { __typename: 'Query', coinsToSpend: Array<Array<{ __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, maturity: any, blockCreated: any, txCreatedIdx: string } | { __typename: 'MessageCoin', sender: string, recipient: string, nonce: string, amount: string, assetId: string, daHeight: string }>> };\n\nexport type GqlGetContractQueryVariables = Exact<{\n contractId: Scalars['ContractId'];\n}>;\n\n\nexport type GqlGetContractQuery = { __typename: 'Query', contract?: { __typename: 'Contract', bytecode: string, id: string } | null };\n\nexport type GqlGetContractBalanceQueryVariables = Exact<{\n contract: Scalars['ContractId'];\n asset: Scalars['AssetId'];\n}>;\n\n\nexport type GqlGetContractBalanceQuery = { __typename: 'Query', contractBalance: { __typename: 'ContractBalance', contract: string, amount: string, assetId: string } };\n\nexport type GqlGetBalanceQueryVariables = Exact<{\n owner: Scalars['Address'];\n assetId: Scalars['AssetId'];\n}>;\n\n\nexport type GqlGetBalanceQuery = { __typename: 'Query', balance: { __typename: 'Balance', owner: string, amount: string, assetId: string } };\n\nexport type GqlGetBalancesQueryVariables = Exact<{\n filter: GqlBalanceFilterInput;\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetBalancesQuery = { __typename: 'Query', balances: { __typename: 'BalanceConnection', edges: Array<{ __typename: 'BalanceEdge', node: { __typename: 'Balance', owner: string, amount: string, assetId: string } }> } };\n\nexport type GqlGetMessagesQueryVariables = Exact<{\n owner: Scalars['Address'];\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetMessagesQuery = { __typename: 'Query', messages: { __typename: 'MessageConnection', edges: Array<{ __typename: 'MessageEdge', node: { __typename: 'Message', amount: string, sender: string, recipient: string, data: string, nonce: string, daHeight: string } }> } };\n\nexport type GqlGetMessageProofQueryVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n nonce: Scalars['Nonce'];\n commitBlockId?: InputMaybe<Scalars['BlockId']>;\n commitBlockHeight?: InputMaybe<Scalars['U32']>;\n}>;\n\n\nexport type GqlGetMessageProofQuery = { __typename: 'Query', messageProof?: { __typename: 'MessageProof', sender: string, recipient: string, nonce: string, amount: string, data: string, messageProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, blockProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, messageBlockHeader: { __typename: 'Header', id: string, daHeight: string, transactionsCount: string, transactionsRoot: string, height: any, prevRoot: string, time: string, applicationHash: string, messageReceiptRoot: string, messageReceiptCount: string }, commitBlockHeader: { __typename: 'Header', id: string, daHeight: string, transactionsCount: string, transactionsRoot: string, height: any, prevRoot: string, time: string, applicationHash: string, messageReceiptRoot: string, messageReceiptCount: string } } | null };\n\nexport type GqlGetMessageStatusQueryVariables = Exact<{\n nonce: Scalars['Nonce'];\n}>;\n\n\nexport type GqlGetMessageStatusQuery = { __typename: 'Query', messageStatus: { __typename: 'MessageStatus', state: GqlMessageState } };\n\nexport type GqlDryRunMutationVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n utxoValidation?: InputMaybe<Scalars['Boolean']>;\n}>;\n\n\nexport type GqlDryRunMutation = { __typename: 'Mutation', dryRun: Array<{ __typename: 'Receipt', pc?: string | null, is?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null, contract?: { __typename: 'Contract', id: string } | null, to?: { __typename: 'Contract', id: string } | null }> };\n\nexport type GqlSubmitMutationVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n}>;\n\n\nexport type GqlSubmitMutation = { __typename: 'Mutation', submit: { __typename: 'Transaction', id: string } };\n\nexport type GqlProduceBlocksMutationVariables = Exact<{\n startTimestamp?: InputMaybe<Scalars['Tai64Timestamp']>;\n blocksToProduce: Scalars['U32'];\n}>;\n\n\nexport type GqlProduceBlocksMutation = { __typename: 'Mutation', produceBlocks: any };\n\nexport type GqlSubmitAndAwaitSubscriptionVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n}>;\n\n\nexport type GqlSubmitAndAwaitSubscription = { __typename: 'Subscription', submitAndAwait: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } };\n\nexport type GqlStatusChangeSubscriptionVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n}>;\n\n\nexport type GqlStatusChangeSubscription = { __typename: 'Subscription', statusChange: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string } } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } };\n\nexport const ReceiptFragmentFragmentDoc = gql`\n fragment receiptFragment on Receipt {\n contract {\n id\n }\n pc\n is\n to {\n id\n }\n toAddress\n amount\n assetId\n gas\n param1\n param2\n val\n ptr\n digest\n reason\n ra\n rb\n rc\n rd\n len\n receiptType\n result\n gasUsed\n data\n sender\n recipient\n nonce\n contractId\n subId\n}\n `;\nexport const TransactionStatusFragmentFragmentDoc = gql`\n fragment transactionStatusFragment on TransactionStatus {\n type: __typename\n ... on SubmittedStatus {\n time\n }\n ... on SuccessStatus {\n block {\n id\n }\n time\n programState {\n returnType\n data\n }\n }\n ... on FailureStatus {\n block {\n id\n }\n time\n reason\n }\n ... on SqueezedOutStatus {\n reason\n }\n}\n `;\nexport const TransactionFragmentFragmentDoc = gql`\n fragment transactionFragment on Transaction {\n id\n rawPayload\n gasPrice\n receipts {\n ...receiptFragment\n }\n status {\n ...transactionStatusFragment\n }\n}\n ${ReceiptFragmentFragmentDoc}\n${TransactionStatusFragmentFragmentDoc}`;\nexport const InputEstimatePredicatesFragmentFragmentDoc = gql`\n fragment inputEstimatePredicatesFragment on Input {\n ... on InputCoin {\n predicateGasUsed\n }\n ... on InputMessage {\n predicateGasUsed\n }\n}\n `;\nexport const TransactionEstimatePredicatesFragmentFragmentDoc = gql`\n fragment transactionEstimatePredicatesFragment on Transaction {\n inputs {\n ...inputEstimatePredicatesFragment\n }\n}\n ${InputEstimatePredicatesFragmentFragmentDoc}`;\nexport const CoinFragmentFragmentDoc = gql`\n fragment coinFragment on Coin {\n __typename\n utxoId\n owner\n amount\n assetId\n maturity\n blockCreated\n txCreatedIdx\n}\n `;\nexport const MessageCoinFragmentFragmentDoc = gql`\n fragment messageCoinFragment on MessageCoin {\n __typename\n sender\n recipient\n nonce\n amount\n assetId\n daHeight\n}\n `;\nexport const MessageFragmentFragmentDoc = gql`\n fragment messageFragment on Message {\n amount\n sender\n recipient\n data\n nonce\n daHeight\n}\n `;\nexport const MessageProofFragmentFragmentDoc = gql`\n fragment messageProofFragment on MessageProof {\n messageProof {\n proofSet\n proofIndex\n }\n blockProof {\n proofSet\n proofIndex\n }\n messageBlockHeader {\n id\n daHeight\n transactionsCount\n transactionsRoot\n height\n prevRoot\n time\n applicationHash\n messageReceiptRoot\n messageReceiptCount\n }\n commitBlockHeader {\n id\n daHeight\n transactionsCount\n transactionsRoot\n height\n prevRoot\n time\n applicationHash\n messageReceiptRoot\n messageReceiptCount\n }\n sender\n recipient\n nonce\n amount\n data\n}\n `;\nexport const BalanceFragmentFragmentDoc = gql`\n fragment balanceFragment on Balance {\n owner\n amount\n assetId\n}\n `;\nexport const BlockFragmentFragmentDoc = gql`\n fragment blockFragment on Block {\n id\n header {\n height\n time\n }\n transactions {\n id\n }\n}\n `;\nexport const TxParametersFragmentFragmentDoc = gql`\n fragment TxParametersFragment on TxParameters {\n maxInputs\n maxOutputs\n maxWitnesses\n maxGasPerTx\n maxSize\n}\n `;\nexport const PredicateParametersFragmentFragmentDoc = gql`\n fragment PredicateParametersFragment on PredicateParameters {\n maxPredicateLength\n maxPredicateDataLength\n maxGasPerPredicate\n maxMessageDataLength\n}\n `;\nexport const ScriptParametersFragmentFragmentDoc = gql`\n fragment ScriptParametersFragment on ScriptParameters {\n maxScriptLength\n maxScriptDataLength\n}\n `;\nexport const ContractParametersFragmentFragmentDoc = gql`\n fragment ContractParametersFragment on ContractParameters {\n contractMaxSize\n maxStorageSlots\n}\n `;\nexport const FeeParametersFragmentFragmentDoc = gql`\n fragment FeeParametersFragment on FeeParameters {\n gasPriceFactor\n gasPerByte\n}\n `;\nexport const DependentCostFragmentFragmentDoc = gql`\n fragment DependentCostFragment on DependentCost {\n __typename\n ... on LightOperation {\n base\n unitsPerGas\n }\n ... on HeavyOperation {\n base\n gasPerUnit\n }\n}\n `;\nexport const GasCostsFragmentFragmentDoc = gql`\n fragment GasCostsFragment on GasCosts {\n add\n addi\n aloc\n and\n andi\n bal\n bhei\n bhsh\n burn\n cb\n cfei\n cfsi\n croo\n div\n divi\n ecr1\n eck1\n ed19\n eq\n exp\n expi\n flag\n gm\n gt\n gtf\n ji\n jmp\n jne\n jnei\n jnzi\n jmpf\n jmpb\n jnzf\n jnzb\n jnef\n jneb\n lb\n log\n lt\n lw\n mint\n mlog\n modOp\n modi\n moveOp\n movi\n mroo\n mul\n muli\n mldv\n noop\n not\n or\n ori\n poph\n popl\n pshh\n pshl\n ret\n rvrt\n sb\n sll\n slli\n srl\n srli\n srw\n sub\n subi\n sw\n sww\n time\n tr\n tro\n wdcm\n wqcm\n wdop\n wqop\n wdml\n wqml\n wddv\n wqdv\n wdmd\n wqmd\n wdam\n wqam\n wdmm\n wqmm\n xor\n xori\n call {\n ...DependentCostFragment\n }\n ccp {\n ...DependentCostFragment\n }\n csiz {\n ...DependentCostFragment\n }\n k256 {\n ...DependentCostFragment\n }\n ldc {\n ...DependentCostFragment\n }\n logd {\n ...DependentCostFragment\n }\n mcl {\n ...DependentCostFragment\n }\n mcli {\n ...DependentCostFragment\n }\n mcp {\n ...DependentCostFragment\n }\n mcpi {\n ...DependentCostFragment\n }\n meq {\n ...DependentCostFragment\n }\n retd {\n ...DependentCostFragment\n }\n s256 {\n ...DependentCostFragment\n }\n scwq {\n ...DependentCostFragment\n }\n smo {\n ...DependentCostFragment\n }\n srwq {\n ...DependentCostFragment\n }\n swwq {\n ...DependentCostFragment\n }\n contractRoot {\n ...DependentCostFragment\n }\n stateRoot {\n ...DependentCostFragment\n }\n vmInitialization {\n ...DependentCostFragment\n }\n newStoragePerByte\n}\n ${DependentCostFragmentFragmentDoc}`;\nexport const ConsensusParametersFragmentFragmentDoc = gql`\n fragment consensusParametersFragment on ConsensusParameters {\n txParams {\n ...TxParametersFragment\n }\n predicateParams {\n ...PredicateParametersFragment\n }\n scriptParams {\n ...ScriptParametersFragment\n }\n contractParams {\n ...ContractParametersFragment\n }\n feeParams {\n ...FeeParametersFragment\n }\n gasCosts {\n ...GasCostsFragment\n }\n baseAssetId\n chainId\n}\n ${TxParametersFragmentFragmentDoc}\n${PredicateParametersFragmentFragmentDoc}\n${ScriptParametersFragmentFragmentDoc}\n${ContractParametersFragmentFragmentDoc}\n${FeeParametersFragmentFragmentDoc}\n${GasCostsFragmentFragmentDoc}`;\nexport const ChainInfoFragmentFragmentDoc = gql`\n fragment chainInfoFragment on ChainInfo {\n name\n latestBlock {\n ...blockFragment\n }\n daHeight\n consensusParameters {\n ...consensusParametersFragment\n }\n}\n ${BlockFragmentFragmentDoc}\n${ConsensusParametersFragmentFragmentDoc}`;\nexport const ContractBalanceFragmentFragmentDoc = gql`\n fragment contractBalanceFragment on ContractBalance {\n contract\n amount\n assetId\n}\n `;\nexport const PageInfoFragmentFragmentDoc = gql`\n fragment pageInfoFragment on PageInfo {\n hasPreviousPage\n hasNextPage\n startCursor\n endCursor\n}\n `;\nexport const NodeInfoFragmentFragmentDoc = gql`\n fragment nodeInfoFragment on NodeInfo {\n utxoValidation\n vmBacktrace\n minGasPrice\n maxTx\n maxDepth\n nodeVersion\n peers {\n id\n addresses\n clientVersion\n blockHeight\n lastHeartbeatMs\n appScore\n }\n}\n `;\nexport const GetVersionDocument = gql`\n query getVersion {\n nodeInfo {\n nodeVersion\n }\n}\n `;\nexport const GetNodeInfoDocument = gql`\n query getNodeInfo {\n nodeInfo {\n ...nodeInfoFragment\n }\n}\n ${NodeInfoFragmentFragmentDoc}`;\nexport const GetChainDocument = gql`\n query getChain {\n chain {\n ...chainInfoFragment\n }\n}\n ${ChainInfoFragmentFragmentDoc}`;\nexport const GetTransactionDocument = gql`\n query getTransaction($transactionId: TransactionId!) {\n transaction(id: $transactionId) {\n ...transactionFragment\n }\n}\n ${TransactionFragmentFragmentDoc}`;\nexport const GetTransactionWithReceiptsDocument = gql`\n query getTransactionWithReceipts($transactionId: TransactionId!) {\n transaction(id: $transactionId) {\n ...transactionFragment\n receipts {\n ...receiptFragment\n }\n }\n}\n ${TransactionFragmentFragmentDoc}\n${ReceiptFragmentFragmentDoc}`;\nexport const GetTransactionsDocument = gql`\n query getTransactions($after: String, $before: String, $first: Int, $last: Int) {\n transactions(after: $after, before: $before, first: $first, last: $last) {\n edges {\n node {\n ...transactionFragment\n }\n }\n }\n}\n ${TransactionFragmentFragmentDoc}`;\nexport const GetTransactionsByOwnerDocument = gql`\n query getTransactionsByOwner($owner: Address!, $after: String, $before: String, $first: Int, $last: Int) {\n transactionsByOwner(\n owner: $owner\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n pageInfo {\n ...pageInfoFragment\n }\n edges {\n node {\n ...transactionFragment\n }\n }\n }\n}\n ${PageInfoFragmentFragmentDoc}\n${TransactionFragmentFragmentDoc}`;\nexport const EstimatePredicatesDocument = gql`\n query estimatePredicates($encodedTransaction: HexString!) {\n estimatePredicates(tx: $encodedTransaction) {\n ...transactionEstimatePredicatesFragment\n }\n}\n ${TransactionEstimatePredicatesFragmentFragmentDoc}`;\nexport const GetBlockDocument = gql`\n query getBlock($blockId: BlockId, $height: U32) {\n block(id: $blockId, height: $height) {\n ...blockFragment\n }\n}\n ${BlockFragmentFragmentDoc}`;\nexport const GetBlockWithTransactionsDocument = gql`\n query getBlockWithTransactions($blockId: BlockId, $blockHeight: U32) {\n block(id: $blockId, height: $blockHeight) {\n ...blockFragment\n transactions {\n ...transactionFragment\n }\n }\n}\n ${BlockFragmentFragmentDoc}\n${TransactionFragmentFragmentDoc}`;\nexport const GetBlocksDocument = gql`\n query getBlocks($after: String, $before: String, $first: Int, $last: Int) {\n blocks(after: $after, before: $before, first: $first, last: $last) {\n edges {\n node {\n ...blockFragment\n }\n }\n }\n}\n ${BlockFragmentFragmentDoc}`;\nexport const GetCoinDocument = gql`\n query getCoin($coinId: UtxoId!) {\n coin(utxoId: $coinId) {\n ...coinFragment\n }\n}\n ${CoinFragmentFragmentDoc}`;\nexport const GetCoinsDocument = gql`\n query getCoins($filter: CoinFilterInput!, $after: String, $before: String, $first: Int, $last: Int) {\n coins(\n filter: $filter\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n edges {\n node {\n ...coinFragment\n }\n }\n }\n}\n ${CoinFragmentFragmentDoc}`;\nexport const GetCoinsToSpendDocument = gql`\n query getCoinsToSpend($owner: Address!, $queryPerAsset: [SpendQueryElementInput!]!, $excludedIds: ExcludeInput) {\n coinsToSpend(\n owner: $owner\n queryPerAsset: $queryPerAsset\n excludedIds: $excludedIds\n ) {\n ...coinFragment\n ...messageCoinFragment\n }\n}\n ${CoinFragmentFragmentDoc}\n${MessageCoinFragmentFragmentDoc}`;\nexport const GetContractDocument = gql`\n query getContract($contractId: ContractId!) {\n contract(id: $contractId) {\n bytecode\n id\n }\n}\n `;\nexport const GetContractBalanceDocument = gql`\n query getContractBalance($contract: ContractId!, $asset: AssetId!) {\n contractBalance(contract: $contract, asset: $asset) {\n ...contractBalanceFragment\n }\n}\n ${ContractBalanceFragmentFragmentDoc}`;\nexport const GetBalanceDocument = gql`\n query getBalance($owner: Address!, $assetId: AssetId!) {\n balance(owner: $owner, assetId: $assetId) {\n ...balanceFragment\n }\n}\n ${BalanceFragmentFragmentDoc}`;\nexport const GetBalancesDocument = gql`\n query getBalances($filter: BalanceFilterInput!, $after: String, $before: String, $first: Int, $last: Int) {\n balances(\n filter: $filter\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n edges {\n node {\n ...balanceFragment\n }\n }\n }\n}\n ${BalanceFragmentFragmentDoc}`;\nexport const GetMessagesDocument = gql`\n query getMessages($owner: Address!, $after: String, $before: String, $first: Int, $last: Int) {\n messages(\n owner: $owner\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n edges {\n node {\n ...messageFragment\n }\n }\n }\n}\n ${MessageFragmentFragmentDoc}`;\nexport const GetMessageProofDocument = gql`\n query getMessageProof($transactionId: TransactionId!, $nonce: Nonce!, $commitBlockId: BlockId, $commitBlockHeight: U32) {\n messageProof(\n transactionId: $transactionId\n nonce: $nonce\n commitBlockId: $commitBlockId\n commitBlockHeight: $commitBlockHeight\n ) {\n ...messageProofFragment\n }\n}\n ${MessageProofFragmentFragmentDoc}`;\nexport const GetMessageStatusDocument = gql`\n query getMessageStatus($nonce: Nonce!) {\n messageStatus(nonce: $nonce) {\n state\n }\n}\n `;\nexport const DryRunDocument = gql`\n mutation dryRun($encodedTransaction: HexString!, $utxoValidation: Boolean) {\n dryRun(tx: $encodedTransaction, utxoValidation: $utxoValidation) {\n ...receiptFragment\n }\n}\n ${ReceiptFragmentFragmentDoc}`;\nexport const SubmitDocument = gql`\n mutation submit($encodedTransaction: HexString!) {\n submit(tx: $encodedTransaction) {\n id\n }\n}\n `;\nexport const ProduceBlocksDocument = gql`\n mutation produceBlocks($startTimestamp: Tai64Timestamp, $blocksToProduce: U32!) {\n produceBlocks(\n blocksToProduce: $blocksToProduce\n startTimestamp: $startTimestamp\n )\n}\n `;\nexport const SubmitAndAwaitDocument = gql`\n subscription submitAndAwait($encodedTransaction: HexString!) {\n submitAndAwait(tx: $encodedTransaction) {\n ...transactionStatusFragment\n }\n}\n ${TransactionStatusFragmentFragmentDoc}`;\nexport const StatusChangeDocument = gql`\n subscription statusChange($transactionId: TransactionId!) {\n statusChange(id: $transactionId) {\n ...transactionStatusFragment\n }\n}\n ${TransactionStatusFragmentFragmentDoc}`;\nexport type Requester<C = {}, E = unknown> = <R, V>(doc: DocumentNode, vars?: V, options?: C) => Promise<R> | AsyncIterable<R>\nexport function getSdk<C, E>(requester: Requester<C, E>) {\n return {\n getVersion(variables?: GqlGetVersionQueryVariables, options?: C): Promise<GqlGetVersionQuery> {\n return requester<GqlGetVersionQuery, GqlGetVersionQueryVariables>(GetVersionDocument, variables, options) as Promise<GqlGetVersionQuery>;\n },\n getNodeInfo(variables?: GqlGetNodeInfoQueryVariables, options?: C): Promise<GqlGetNodeInfoQuery> {\n return requester<GqlGetNodeInfoQuery, GqlGetNodeInfoQueryVariables>(GetNodeInfoDocument, variables, options) as Promise<GqlGetNodeInfoQuery>;\n },\n getChain(variables?: GqlGetChainQueryVariables, options?: C): Promise<GqlGetChainQuery> {\n return requester<GqlGetChainQuery, GqlGetChainQueryVariables>(GetChainDocument, variables, options) as Promise<GqlGetChainQuery>;\n },\n getTransaction(variables: GqlGetTransactionQueryVariables, options?: C): Promise<GqlGetTransactionQuery> {\n return requester<GqlGetTransactionQuery, GqlGetTransactionQueryVariables>(GetTransactionDocument, variables, options) as Promise<GqlGetTransactionQuery>;\n },\n getTransactionWithReceipts(variables: GqlGetTransactionWithReceiptsQueryVariables, options?: C): Promise<GqlGetTransactionWithReceiptsQuery> {\n return requester<GqlGetTransactionWithReceiptsQuery, GqlGetTransactionWithReceiptsQueryVariables>(GetTransactionWithReceiptsDocument, variables, options) as Promise<GqlGetTransactionWithReceiptsQuery>;\n },\n getTransactions(variables?: GqlGetTransactionsQueryVariables, options?: C): Promise<GqlGetTransactionsQuery> {\n return requester<GqlGetTransactionsQuery, GqlGetTransactionsQueryVariables>(GetTransactionsDocument, variables, options) as Promise<GqlGetTransactionsQuery>;\n },\n getTransactionsByOwner(variables: GqlGetTransactionsByOwnerQueryVariables, options?: C): Promise<GqlGetTransactionsByOwnerQuery> {\n return requester<GqlGetTransactionsByOwnerQuery, GqlGetTransactionsByOwnerQueryVariables>(GetTransactionsByOwnerDocument, variables, options) as Promise<GqlGetTransactionsByOwnerQuery>;\n },\n estimatePredicates(variables: GqlEstimatePredicatesQueryVariables, options?: C): Promise<GqlEstimatePredicatesQuery> {\n return requester<GqlEstimatePredicatesQuery, GqlEstimatePredicatesQueryVariables>(EstimatePredicatesDocument, variables, options) as Promise<GqlEstimatePredicatesQuery>;\n },\n getBlock(variables?: GqlGetBlockQueryVariables, options?: C): Promise<GqlGetBlockQuery> {\n return requester<GqlGetBlockQuery, GqlGetBlockQueryVariables>(GetBlockDocument, variables, options) as Promise<GqlGetBlockQuery>;\n },\n getBlockWithTransactions(variables?: GqlGetBlockWithTransactionsQueryVariables, options?: C): Promise<GqlGetBlockWithTransactionsQuery> {\n return requester<GqlGetBlockWithTransactionsQuery, GqlGetBlockWithTransactionsQueryVariables>(GetBlockWithTransactionsDocument, variables, options) as Promise<GqlGetBlockWithTransactionsQuery>;\n },\n getBlocks(variables?: GqlGetBlocksQueryVariables, options?: C): Promise<GqlGetBlocksQuery> {\n return requester<GqlGetBlocksQuery, GqlGetBlocksQueryVariables>(GetBlocksDocument, variables, options) as Promise<GqlGetBlocksQuery>;\n },\n getCoin(variables: GqlGetCoinQueryVariables, options?: C): Promise<GqlGetCoinQuery> {\n return requester<GqlGetCoinQuery, GqlGetCoinQueryVariables>(GetCoinDocument, variables, options) as Promise<GqlGetCoinQuery>;\n },\n getCoins(variables: GqlGetCoinsQueryVariables, options?: C): Promise<GqlGetCoinsQuery> {\n return requester<GqlGetCoinsQuery, GqlGetCoinsQueryVariables>(GetCoinsDocument, variables, options) as Promise<GqlGetCoinsQuery>;\n },\n getCoinsToSpend(variables: GqlGetCoinsToSpendQueryVariables, options?: C): Promise<GqlGetCoinsToSpendQuery> {\n return requester<GqlGetCoinsToSpendQuery, GqlGetCoinsToSpendQueryVariables>(GetCoinsToSpendDocument, variables, options) as Promise<GqlGetCoinsToSpendQuery>;\n },\n getContract(variables: GqlGetContractQueryVariables, options?: C): Promise<GqlGetContractQuery> {\n return requester<GqlGetContractQuery, GqlGetContractQueryVariables>(GetContractDocument, variables, options) as Promise<GqlGetContractQuery>;\n },\n getContractBalance(variables: GqlGetContractBalanceQueryVariables, options?: C): Promise<GqlGetContractBalanceQuery> {\n return requester<GqlGetContractBalanceQuery, GqlGetContractBalanceQueryVariables>(GetContractBalanceDocument, variables, options) as Promise<GqlGetContractBalanceQuery>;\n },\n getBalance(variables: GqlGetBalanceQueryVariables, options?: C): Promise<GqlGetBalanceQuery> {\n return requester<GqlGetBalanceQuery, GqlGetBalanceQueryVariables>(GetBalanceDocument, variables, options) as Promise<GqlGetBalanceQuery>;\n },\n getBalances(variables: GqlGetBalancesQueryVariables, options?: C): Promise<GqlGetBalancesQuery> {\n return requester<GqlGetBalancesQuery, GqlGetBalancesQueryVariables>(GetBalancesDocument, variables, options) as Promise<GqlGetBalancesQuery>;\n },\n getMessages(variables: GqlGetMessagesQueryVariables, options?: C): Promise<GqlGetMessagesQuery> {\n return requester<GqlGetMessagesQuery, GqlGetMessagesQueryVariables>(GetMessagesDocument, variables, options) as Promise<GqlGetMessagesQuery>;\n },\n getMessageProof(variables: GqlGetMessageProofQueryVariables, options?: C): Promise<GqlGetMessageProofQuery> {\n return requester<GqlGetMessageProofQuery, GqlGetMessageProofQueryVariables>(GetMessageProofDocument, variables, options) as Promise<GqlGetMessageProofQuery>;\n },\n getMessageStatus(variables: GqlGetMessageStatusQueryVariables, options?: C): Promise<GqlGetMessageStatusQuery> {\n return requester<GqlGetMessageStatusQuery, GqlGetMessageStatusQueryVariables>(GetMessageStatusDocument, variables, options) as Promise<GqlGetMessageStatusQuery>;\n },\n dryRun(variables: GqlDryRunMutationVariables, options?: C): Promise<GqlDryRunMutation> {\n return requester<GqlDryRunMutation, GqlDryRunMutationVariables>(DryRunDocument, variables, options) as Promise<GqlDryRunMutation>;\n },\n submit(variables: GqlSubmitMutationVariables, options?: C): Promise<GqlSubmitMutation> {\n return requester<GqlSubmitMutation, GqlSubmitMutationVariables>(SubmitDocument, variables, options) as Promise<GqlSubmitMutation>;\n },\n produceBlocks(variables: GqlProduceBlocksMutationVariables, options?: C): Promise<GqlProduceBlocksMutation> {\n return requester<GqlProduceBlocksMutation, GqlProduceBlocksMutationVariables>(ProduceBlocksDocument, variables, options) as Promise<GqlProduceBlocksMutation>;\n },\n submitAndAwait(variables: GqlSubmitAndAwaitSubscriptionVariables, options?: C): AsyncIterable<GqlSubmitAndAwaitSubscription> {\n return requester<GqlSubmitAndAwaitSubscription, GqlSubmitAndAwaitSubscriptionVariables>(SubmitAndAwaitDocument, variables, options) as AsyncIterable<GqlSubmitAndAwaitSubscription>;\n },\n statusChange(variables: GqlStatusChangeSubscriptionVariables, options?: C): AsyncIterable<GqlStatusChangeSubscription> {\n return requester<GqlStatusChangeSubscription, GqlStatusChangeSubscriptionVariables>(StatusChangeDocument, variables, options) as AsyncIterable<GqlStatusChangeSubscription>;\n }\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { DocumentNode } from 'graphql';\nimport { print } from 'graphql';\n\ntype FuelGraphQLSubscriberOptions = {\n url: string;\n query: DocumentNode;\n variables?: Record<string, unknown>;\n fetchFn: typeof fetch;\n};\n\nexport class FuelGraphqlSubscriber implements AsyncIterator<unknown> {\n private stream!: ReadableStreamDefaultReader<Uint8Array>;\n private static textDecoder = new TextDecoder();\n\n public constructor(private options: FuelGraphQLSubscriberOptions) {}\n\n private async setStream() {\n const { url, query, variables, fetchFn } = this.options;\n\n const response = await fetchFn(`${url}-sub`, {\n method: 'POST',\n body: JSON.stringify({\n query: print(query),\n variables,\n }),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.stream = response.body!.getReader();\n }\n\n private events: Array<{ data: unknown; errors?: { message: string }[] }> = [];\n private parsingLeftover = '';\n\n async next(): Promise<IteratorResult<unknown, unknown>> {\n if (!this.stream) {\n await this.setStream();\n }\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (this.events.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { data, errors } = this.events.shift()!;\n if (Array.isArray(errors)) {\n throw new FuelError(\n FuelError.CODES.INVALID_REQUEST,\n errors.map((err) => err.message).join('\\n\\n')\n );\n }\n return { value: data, done: false };\n }\n const { value, done } = await this.stream.read();\n if (done) {\n return { value, done };\n }\n\n /**\n * We don't care about keep-alive messages.\n * The only responses that I came across from the node are either 200 responses with \"data:.*\" or keep-alive messages.\n * You can find the keep-alive message in the fuel-core codebase (latest permalink as of writing):\n * https://github.com/FuelLabs/fuel-core/blob/e1e631902f762081d2124d9c457ddfe13ac366dc/crates/fuel-core/src/graphql_api/service.rs#L247\n * To get the actual latest info you need to check out the master branch (might change):\n * https://github.com/FuelLabs/fuel-core/blob/master/crates/fuel-core/src/graphql_api/service.rs#L247\n * */\n const decoded = FuelGraphqlSubscriber.textDecoder\n .decode(value)\n .replace(':keep-alive-text\\n\\n', '');\n\n if (decoded === '') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const text = `${this.parsingLeftover}${decoded}`;\n const regex = /data:.*\\n\\n/g;\n\n const matches = [...text.matchAll(regex)].flatMap((match) => match);\n\n matches.forEach((match) => {\n try {\n this.events.push(JSON.parse(match.replace(/^data:/, '')));\n } catch (e) {\n throw new FuelError(\n ErrorCode.STREAM_PARSING_ERROR,\n `Error while parsing stream data response: ${text}`\n );\n }\n });\n\n this.parsingLeftover = text.replace(matches.join(), '');\n }\n }\n\n /**\n * Gets called when `break` is called in a `for-await-of` loop.\n */\n async return(): Promise<IteratorResult<unknown, undefined>> {\n await this.stream.cancel();\n this.stream.releaseLock();\n return { done: true, value: undefined };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown, unknown, undefined> {\n return this;\n }\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { hexlify } from '@fuel-ts/utils';\n\ntype Cache = {\n [key: string]: {\n expires: number;\n value: BytesLike;\n };\n};\nconst cache: Cache = {}; // it's a cache hash ~~> cash?\n\nconst DEFAULT_TTL_IN_MS = 30 * 1000; // 30seconds\n\nexport class MemoryCache {\n ttl: number;\n constructor(ttlInMs: number = DEFAULT_TTL_IN_MS) {\n this.ttl = ttlInMs;\n\n if (typeof ttlInMs !== 'number' || this.ttl <= 0) {\n throw new FuelError(\n ErrorCode.INVALID_TTL,\n `Invalid TTL: ${this.ttl}. Use a value greater than zero.`\n );\n }\n }\n\n get(value: BytesLike, isAutoExpiring = true): BytesLike | undefined {\n const key = hexlify(value);\n if (cache[key]) {\n if (!isAutoExpiring || cache[key].expires > Date.now()) {\n return cache[key].value;\n }\n\n this.del(value);\n }\n\n return undefined;\n }\n\n set(value: BytesLike): number {\n const expiresAt = Date.now() + this.ttl;\n const key = hexlify(value);\n cache[key] = {\n expires: expiresAt,\n value,\n };\n\n return expiresAt;\n }\n\n getAllData(): BytesLike[] {\n return Object.keys(cache).reduce((list, key) => {\n const data = this.get(key, false);\n if (data) {\n list.push(data);\n }\n\n return list;\n }, [] as BytesLike[]);\n }\n\n getActiveData(): BytesLike[] {\n return Object.keys(cache).reduce((list, key) => {\n const data = this.get(key);\n if (data) {\n list.push(data);\n }\n\n return list;\n }, [] as BytesLike[]);\n }\n\n del(value: BytesLike) {\n const key = hexlify(value);\n delete cache[key];\n }\n}\n","import { BYTES_32, UTXO_ID_LEN } from '@fuel-ts/abi-coder';\nimport { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish } from '@fuel-ts/math';\nimport { bn, toNumber } from '@fuel-ts/math';\nimport type { Input } from '@fuel-ts/transactions';\nimport { InputType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nexport type CoinTransactionRequestInput = {\n type: InputType.Coin;\n\n /** UTXO ID */\n id: BytesLike;\n\n /** Owning address or script hash */\n owner: BytesLike;\n\n /** Amount of coins */\n amount: BigNumberish;\n\n /** Asset ID of the coins */\n assetId: BytesLike;\n\n /** Points to the TX whose output is being spent. (TxPointer) */\n txPointer: BytesLike;\n\n /** Index of witness that authorizes spending the coin */\n witnessIndex: number;\n\n /** UTXO being spent must have been created at least this many blocks ago */\n maturity?: number;\n\n /** Gas used by predicate */\n predicateGasUsed?: BigNumberish;\n\n /** Predicate bytecode */\n predicate?: BytesLike;\n\n /** Predicate input data (parameters) */\n predicateData?: BytesLike;\n};\n\nexport type MessageTransactionRequestInput = {\n type: InputType.Message;\n\n /** Address of sender */\n sender: BytesLike;\n\n /** Address of recipient */\n recipient: BytesLike;\n\n /** Amount of coins */\n amount: BigNumberish;\n\n /** Index of witness that authorizes the message */\n witnessIndex: number;\n\n /** Unique nonce of message */\n nonce: BytesLike;\n\n /** Gas used by predicate */\n predicateGasUsed?: BigNumberish;\n\n /** Predicate bytecode */\n predicate?: BytesLike;\n\n /** Predicate input data (parameters) */\n predicateData?: BytesLike;\n\n /** data of message */\n data?: BytesLike;\n};\n\nexport type ContractTransactionRequestInput = {\n type: InputType.Contract;\n\n /** Points to the TX whose output is being spent. (TxPointer) */\n txPointer: BytesLike;\n\n /** Contract ID */\n contractId: BytesLike;\n};\nexport type TransactionRequestInput =\n | CoinTransactionRequestInput\n | ContractTransactionRequestInput\n | MessageTransactionRequestInput;\n\n/** @hidden */\nexport const inputify = (value: TransactionRequestInput): Input => {\n const { type } = value;\n\n switch (value.type) {\n case InputType.Coin: {\n const predicate = arrayify(value.predicate ?? '0x');\n const predicateData = arrayify(value.predicateData ?? '0x');\n return {\n type: InputType.Coin,\n txID: hexlify(arrayify(value.id).slice(0, BYTES_32)),\n outputIndex: toNumber(arrayify(value.id).slice(BYTES_32, UTXO_ID_LEN)),\n owner: hexlify(value.owner),\n amount: bn(value.amount),\n assetId: hexlify(value.assetId),\n txPointer: {\n blockHeight: toNumber(arrayify(value.txPointer).slice(0, 8)),\n txIndex: toNumber(arrayify(value.txPointer).slice(8, 16)),\n },\n witnessIndex: value.witnessIndex,\n maturity: value.maturity ?? 0,\n predicateGasUsed: bn(value.predicateGasUsed),\n predicateLength: predicate.length,\n predicateDataLength: predicateData.length,\n predicate: hexlify(predicate),\n predicateData: hexlify(predicateData),\n };\n }\n case InputType.Contract: {\n return {\n type: InputType.Contract,\n txID: ZeroBytes32,\n outputIndex: 0,\n balanceRoot: ZeroBytes32,\n stateRoot: ZeroBytes32,\n txPointer: {\n blockHeight: toNumber(arrayify(value.txPointer).slice(0, 8)),\n txIndex: toNumber(arrayify(value.txPointer).slice(8, 16)),\n },\n contractID: hexlify(value.contractId),\n };\n }\n case InputType.Message: {\n const predicate = arrayify(value.predicate ?? '0x');\n const predicateData = arrayify(value.predicateData ?? '0x');\n const data = arrayify(value.data ?? '0x');\n return {\n type: InputType.Message,\n sender: hexlify(value.sender),\n recipient: hexlify(value.recipient),\n amount: bn(value.amount),\n nonce: hexlify(value.nonce),\n witnessIndex: value.witnessIndex,\n predicateGasUsed: bn(value.predicateGasUsed),\n predicateLength: predicate.length,\n predicateDataLength: predicateData.length,\n predicate: hexlify(predicate),\n predicateData: hexlify(predicateData),\n data: hexlify(data),\n dataLength: data.length,\n };\n }\n default: {\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_INPUT,\n `Invalid transaction input type: ${type}.`\n );\n }\n }\n};\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { Output } from '@fuel-ts/transactions';\nimport { OutputType } from '@fuel-ts/transactions';\nimport { hexlify } from '@fuel-ts/utils';\n\nexport type CoinTransactionRequestOutput = {\n type: OutputType.Coin;\n /** Receiving address or script hash */\n to: BytesLike;\n /** Amount of coins to send */\n amount: BigNumberish;\n /** Asset ID of coins */\n assetId: BytesLike;\n};\nexport type ContractTransactionRequestOutput = {\n type: OutputType.Contract;\n /** Index of input contract */\n inputIndex: number;\n};\nexport type ChangeTransactionRequestOutput = {\n type: OutputType.Change;\n /** Receiving address or script hash */\n to: BytesLike;\n /** Asset ID of coins */\n assetId: BytesLike;\n};\nexport type VariableTransactionRequestOutput = {\n type: OutputType.Variable;\n};\nexport type ContractCreatedTransactionRequestOutput = {\n type: OutputType.ContractCreated;\n /** Contract ID */\n contractId: BytesLike;\n /** State Root */\n stateRoot: BytesLike;\n};\nexport type TransactionRequestOutput =\n | CoinTransactionRequestOutput\n | ContractTransactionRequestOutput\n | ChangeTransactionRequestOutput\n | VariableTransactionRequestOutput\n | ContractCreatedTransactionRequestOutput;\n\n/** @hidden */\nexport const outputify = (value: TransactionRequestOutput): Output => {\n const { type } = value;\n\n switch (type) {\n case OutputType.Coin: {\n return {\n type: OutputType.Coin,\n to: hexlify(value.to),\n amount: bn(value.amount),\n assetId: hexlify(value.assetId),\n };\n }\n case OutputType.Contract: {\n return {\n type: OutputType.Contract,\n inputIndex: value.inputIndex,\n balanceRoot: ZeroBytes32,\n stateRoot: ZeroBytes32,\n };\n }\n case OutputType.Change: {\n return {\n type: OutputType.Change,\n to: hexlify(value.to),\n amount: bn(0),\n assetId: hexlify(value.assetId),\n };\n }\n case OutputType.Variable: {\n return {\n type: OutputType.Variable,\n to: ZeroBytes32,\n amount: bn(0),\n assetId: ZeroBytes32,\n };\n }\n case OutputType.ContractCreated: {\n return {\n type: OutputType.ContractCreated,\n contractId: hexlify(value.contractId),\n stateRoot: hexlify(value.stateRoot),\n };\n }\n default: {\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_INPUT,\n `Invalid transaction output type: ${type}.`\n );\n }\n }\n};\n","import type { InputValue } from '@fuel-ts/abi-coder';\nimport { UTXO_ID_LEN } from '@fuel-ts/abi-coder';\nimport { Address, addressify } from '@fuel-ts/address';\nimport { BaseAssetId, ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { randomBytes } from '@fuel-ts/crypto';\nimport type { AddressLike, AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport type { BN, BigNumberish } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { TransactionScript, Policy, TransactionCreate } from '@fuel-ts/transactions';\nimport {\n PolicyType,\n TransactionCoder,\n InputType,\n OutputType,\n TransactionType,\n} from '@fuel-ts/transactions';\nimport { concat, hexlify } from '@fuel-ts/utils';\n\nimport type { Account } from '../../account';\nimport type { Predicate } from '../../predicate';\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport type { Coin } from '../coin';\nimport type { CoinQuantity, CoinQuantityLike } from '../coin-quantity';\nimport { coinQuantityfy } from '../coin-quantity';\nimport type { MessageCoin } from '../message';\nimport type { ChainInfo } from '../provider';\nimport type { Resource } from '../resource';\nimport { isCoin } from '../resource';\nimport { normalizeJSON } from '../utils';\nimport { getMaxGas, getMinGas } from '../utils/gas';\n\nimport { NoWitnessAtIndexError } from './errors';\nimport type {\n TransactionRequestInput,\n CoinTransactionRequestInput,\n MessageTransactionRequestInput,\n} from './input';\nimport { inputify } from './input';\nimport type {\n TransactionRequestOutput,\n ChangeTransactionRequestOutput,\n CoinTransactionRequestOutput,\n} from './output';\nimport { outputify } from './output';\nimport type { TransactionRequestLike } from './types';\nimport type { TransactionRequestWitness } from './witness';\nimport { witnessify } from './witness';\n\nexport {\n /**\n * @hidden\n */\n TransactionType,\n};\n\n/**\n * @hidden\n *\n * Interface defining a like structure for a base transaction request.\n */\nexport interface BaseTransactionRequestLike {\n /** Gas price for transaction */\n gasPrice?: BigNumberish;\n /** Block until which tx cannot be included */\n maturity?: number;\n /** The maximum fee payable by this transaction using BASE_ASSET. */\n maxFee?: BigNumberish;\n /** The maximum amount of witness data allowed for the transaction */\n witnessLimit?: BigNumberish;\n /** List of inputs */\n inputs?: TransactionRequestInput[];\n /** List of outputs */\n outputs?: TransactionRequestOutput[];\n /** List of witnesses */\n witnesses?: TransactionRequestWitness[];\n}\n\ntype ToBaseTransactionResponse = Pick<\n TransactionScript,\n | 'inputs'\n | 'inputsCount'\n | 'outputs'\n | 'outputsCount'\n | 'witnesses'\n | 'witnessesCount'\n | 'policies'\n | 'policyTypes'\n>;\n\n/**\n * Abstract class to define the functionalities of a transaction request transaction request.\n */\nexport abstract class BaseTransactionRequest implements BaseTransactionRequestLike {\n /** Type of the transaction */\n abstract type: TransactionType;\n /** Gas price for transaction */\n gasPrice: BN;\n /** Block until which tx cannot be included */\n maturity: number;\n /** The maximum fee payable by this transaction using BASE_ASSET. */\n maxFee?: BN;\n /** The maximum amount of witness data allowed for the transaction */\n witnessLimit?: BN | undefined;\n /** List of inputs */\n inputs: TransactionRequestInput[] = [];\n /** List of outputs */\n outputs: TransactionRequestOutput[] = [];\n /** List of witnesses */\n witnesses: TransactionRequestWitness[] = [];\n\n /**\n * Constructor for initializing a base transaction request.\n *\n * @param baseTransactionRequest - Optional object containing properties to initialize the transaction request.\n */\n constructor({\n gasPrice,\n maturity,\n maxFee,\n witnessLimit,\n inputs,\n outputs,\n witnesses,\n }: BaseTransactionRequestLike = {}) {\n this.gasPrice = bn(gasPrice);\n this.maturity = maturity ?? 0;\n this.witnessLimit = witnessLimit ? bn(witnessLimit) : undefined;\n this.maxFee = maxFee ? bn(maxFee) : undefined;\n this.inputs = inputs ?? [];\n this.outputs = outputs ?? [];\n this.witnesses = witnesses ?? [];\n }\n\n static getPolicyMeta(req: BaseTransactionRequest) {\n let policyTypes = 0;\n const policies: Policy[] = [];\n\n if (req.gasPrice) {\n policyTypes += PolicyType.GasPrice;\n policies.push({ data: req.gasPrice, type: PolicyType.GasPrice });\n }\n if (req.witnessLimit) {\n policyTypes += PolicyType.WitnessLimit;\n policies.push({ data: req.witnessLimit, type: PolicyType.WitnessLimit });\n }\n if (req.maturity > 0) {\n policyTypes += PolicyType.Maturity;\n policies.push({ data: req.maturity, type: PolicyType.Maturity });\n }\n if (req.maxFee) {\n policyTypes += PolicyType.MaxFee;\n policies.push({ data: req.maxFee, type: PolicyType.MaxFee });\n }\n\n return {\n policyTypes,\n policies,\n };\n }\n\n /**\n * Method to obtain the base transaction details.\n *\n * @returns The base transaction details.\n */\n\n protected getBaseTransaction(): ToBaseTransactionResponse {\n const inputs = this.inputs?.map(inputify) ?? [];\n const outputs = this.outputs?.map(outputify) ?? [];\n const witnesses = this.witnesses?.map(witnessify) ?? [];\n\n const { policyTypes, policies } = BaseTransactionRequest.getPolicyMeta(this);\n\n return {\n policyTypes,\n inputs,\n outputs,\n policies,\n witnesses,\n inputsCount: inputs.length,\n outputsCount: outputs.length,\n witnessesCount: witnesses.length,\n };\n }\n\n abstract toTransaction(): TransactionCreate | TransactionScript;\n\n /**\n * Converts the transaction request to a byte array.\n *\n * @returns The transaction bytes.\n */\n toTransactionBytes(): Uint8Array {\n return new TransactionCoder().encode(this.toTransaction());\n }\n\n /**\n * @hidden\n *\n * Pushes an input to the list without any side effects and returns the index\n */\n protected pushInput(input: TransactionRequestInput): number {\n this.inputs.push(input);\n return this.inputs.length - 1;\n }\n\n /**\n * @hidden\n *\n * Pushes an output to the list without any side effects and returns the index\n */\n protected pushOutput(output: TransactionRequestOutput): number {\n this.outputs.push(output);\n return this.outputs.length - 1;\n }\n\n /**\n * @hidden\n *\n * Pushes a witness to the list and returns the index\n *\n * @param signature - The signature to add to the witness.\n * @returns The index of the created witness.\n */\n addWitness(signature: BytesLike) {\n this.witnesses.push(signature);\n return this.witnesses.length - 1;\n }\n\n /**\n * @hidden\n *\n * Creates an empty witness without any side effects and returns the index\n *\n * @returns The index of the created witness.\n */\n protected addEmptyWitness(): number {\n // Push a dummy witness with same byte size as a real witness signature\n this.addWitness(concat([ZeroBytes32, ZeroBytes32]));\n return this.witnesses.length - 1;\n }\n\n /**\n * Updates the witness for a given owner and signature.\n *\n * @param address - The address to get the coin input witness index for.\n * @param signature - The signature to update the witness with.\n */\n updateWitnessByOwner(address: string | AbstractAddress, signature: BytesLike) {\n const ownerAddress = Address.fromAddressOrString(address);\n const witnessIndex = this.getCoinInputWitnessIndexByOwner(ownerAddress);\n if (typeof witnessIndex === 'number') {\n this.updateWitness(witnessIndex, signature);\n }\n }\n\n /**\n * Updates an existing witness without any side effects.\n *\n * @param index - The index of the witness to update.\n * @param witness - The new witness.\n * @throws If the witness does not exist.\n */\n updateWitness(index: number, witness: TransactionRequestWitness) {\n if (!this.witnesses[index]) {\n throw new NoWitnessAtIndexError(index);\n }\n this.witnesses[index] = witness;\n }\n\n /**\n * Helper function to add an external signature to the transaction.\n *\n * @param account - The account/s to sign to the transaction.\n * @returns The transaction with the signature witness added.\n */\n async addAccountWitnesses(account: Account | Account[]) {\n const accounts = Array.isArray(account) ? account : [account];\n await Promise.all(\n accounts.map(async (acc) => {\n this.addWitness(await acc.signTransaction(<TransactionRequestLike>this));\n })\n );\n\n return this;\n }\n\n /**\n * Gets the coin inputs for a transaction.\n *\n * @returns The coin inputs.\n */\n getCoinInputs(): CoinTransactionRequestInput[] {\n return this.inputs.filter(\n (input): input is CoinTransactionRequestInput => input.type === InputType.Coin\n );\n }\n\n /**\n * Gets the coin outputs for a transaction.\n *\n * @returns The coin outputs.\n */\n getCoinOutputs(): CoinTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is CoinTransactionRequestOutput => output.type === OutputType.Coin\n );\n }\n\n /**\n * Gets the change outputs for a transaction.\n *\n * @returns The change outputs.\n */\n getChangeOutputs(): ChangeTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is ChangeTransactionRequestOutput => output.type === OutputType.Change\n );\n }\n\n /**\n * @hidden\n *\n * Returns the witnessIndex of the found CoinInput.\n */\n getCoinInputWitnessIndexByOwner(owner: AddressLike): number | undefined {\n const ownerAddress = addressify(owner);\n\n const found = this.inputs.find((input) => {\n switch (input.type) {\n case InputType.Coin:\n return hexlify((<CoinTransactionRequestInput>input).owner) === ownerAddress.toB256();\n case InputType.Message:\n return (\n hexlify((<MessageTransactionRequestInput>input).recipient) === ownerAddress.toB256()\n );\n default:\n return false;\n }\n });\n\n return (<CoinTransactionRequestInput>found)?.witnessIndex;\n }\n\n /**\n * Adds a single coin input to the transaction and a change output for the related\n * assetId, if one it was not added yet.\n *\n * @param coin - Coin resource.\n * @param predicate - Predicate bytes.\n * @param predicateData - Predicate data bytes.\n */\n addCoinInput(coin: Coin, predicate?: Predicate<InputValue[]>) {\n const { assetId, owner, amount } = coin;\n\n let witnessIndex;\n\n if (predicate) {\n witnessIndex = 0;\n } else {\n witnessIndex = this.getCoinInputWitnessIndexByOwner(owner);\n\n // Insert a dummy witness if no witness exists\n if (typeof witnessIndex !== 'number') {\n witnessIndex = this.addEmptyWitness();\n }\n }\n\n const input: CoinTransactionRequestInput = {\n ...coin,\n type: InputType.Coin,\n owner: owner.toB256(),\n amount,\n assetId,\n txPointer: '0x00000000000000000000000000000000',\n witnessIndex,\n predicate: predicate?.bytes,\n };\n\n // Insert the Input\n this.pushInput(input);\n\n // Insert a ChangeOutput if it does not exist\n this.addChangeOutput(owner, assetId);\n }\n\n /**\n * Adds a single message input to the transaction and a change output for the\n * baseAssetId, if one it was not added yet.\n *\n * @param message - Message resource.\n * @param predicate - Predicate bytes.\n * @param predicateData - Predicate data bytes.\n */\n addMessageInput(message: MessageCoin, predicate?: Predicate<InputValue[]>) {\n const { recipient, sender, amount } = message;\n\n const assetId = BaseAssetId;\n\n let witnessIndex;\n\n if (predicate) {\n witnessIndex = 0;\n } else {\n witnessIndex = this.getCoinInputWitnessIndexByOwner(recipient);\n\n // Insert a dummy witness if no witness exists\n if (typeof witnessIndex !== 'number') {\n witnessIndex = this.addEmptyWitness();\n }\n }\n\n const input: MessageTransactionRequestInput = {\n ...message,\n type: InputType.Message,\n sender: sender.toB256(),\n recipient: recipient.toB256(),\n amount,\n witnessIndex,\n predicate: predicate?.bytes,\n };\n\n // Insert the Input\n this.pushInput(input);\n\n // Insert a ChangeOutput if it does not exist\n this.addChangeOutput(recipient, assetId);\n }\n\n /**\n * Adds a single resource to the transaction by adding a coin/message input and a\n * change output for the related assetId, if one it was not added yet.\n *\n * @param resource - The resource to add.\n * @returns This transaction.\n */\n addResource(resource: Resource) {\n if (isCoin(resource)) {\n this.addCoinInput(resource);\n } else {\n this.addMessageInput(resource);\n }\n\n return this;\n }\n\n /**\n * Adds multiple resources to the transaction by adding coin/message inputs and change\n * outputs from the related assetIds.\n *\n * @param resources - The resources to add.\n * @returns This transaction.\n */\n addResources(resources: ReadonlyArray<Resource>) {\n resources.forEach((resource) => this.addResource(resource));\n\n return this;\n }\n\n /**\n * Adds multiple resources to the transaction by adding coin/message inputs and change\n * outputs from the related assetIds.\n *\n * @param resources - The resources to add.\n * @returns This transaction.\n */\n addPredicateResource(resource: Resource, predicate: Predicate<InputValue[]>) {\n if (isCoin(resource)) {\n this.addCoinInput(resource, predicate);\n } else {\n this.addMessageInput(resource, predicate);\n }\n\n return this;\n }\n\n /**\n * Adds multiple predicate coin/message inputs to the transaction and change outputs\n * from the related assetIds.\n *\n * @param resources - The resources to add.\n * @returns This transaction.\n */\n addPredicateResources(resources: Resource[], predicate: Predicate<InputValue[]>) {\n resources.forEach((resource) => this.addPredicateResource(resource, predicate));\n\n return this;\n }\n\n /**\n * Adds a coin output to the transaction.\n *\n * @param to - Address of the owner.\n * @param amount - Amount of coin.\n * @param assetId - Asset ID of coin.\n */\n addCoinOutput(to: AddressLike, amount: BigNumberish, assetId: BytesLike = BaseAssetId) {\n this.pushOutput({\n type: OutputType.Coin,\n to: addressify(to).toB256(),\n amount,\n assetId,\n });\n\n return this;\n }\n\n /**\n * Adds multiple coin outputs to the transaction.\n *\n * @param to - Address of the destination.\n * @param quantities - Quantities of coins.\n */\n addCoinOutputs(to: AddressLike, quantities: CoinQuantityLike[]) {\n quantities.map(coinQuantityfy).forEach((quantity) => {\n this.pushOutput({\n type: OutputType.Coin,\n to: addressify(to).toB256(),\n amount: quantity.amount,\n assetId: quantity.assetId,\n });\n });\n\n return this;\n }\n\n /**\n * Adds a change output to the transaction.\n *\n * @param to - Address of the owner.\n * @param assetId - Asset ID of coin.\n */\n addChangeOutput(to: AddressLike, assetId: BytesLike = BaseAssetId) {\n // Find the ChangeOutput for the AssetId of the Resource\n const changeOutput = this.getChangeOutputs().find(\n (output) => hexlify(output.assetId) === assetId\n );\n\n // Insert a ChangeOutput if it does not exist\n if (!changeOutput) {\n this.pushOutput({\n type: OutputType.Change,\n to: addressify(to).toB256(),\n assetId,\n });\n }\n }\n\n /**\n * @hidden\n */\n byteSize() {\n return this.toTransactionBytes().length;\n }\n\n /**\n * @hidden\n */\n metadataGas(_gasCosts: GqlGasCosts): BN {\n throw new Error('Not implemented');\n }\n\n /**\n * @hidden\n */\n calculateMinGas(chainInfo: ChainInfo): BN {\n const { gasCosts, consensusParameters } = chainInfo;\n const { gasPerByte } = consensusParameters;\n return getMinGas({\n gasPerByte,\n gasCosts,\n inputs: this.inputs,\n txBytesSize: this.byteSize(),\n metadataGas: this.metadataGas(gasCosts),\n });\n }\n\n calculateMaxGas(chainInfo: ChainInfo, minGas: BN): BN {\n const { consensusParameters } = chainInfo;\n const { gasPerByte } = consensusParameters;\n\n const witnessesLength = this.toTransaction().witnesses.reduce(\n (acc, wit) => acc + wit.dataLength,\n 0\n );\n return getMaxGas({\n gasPerByte,\n minGas,\n witnessesLength,\n witnessLimit: this.witnessLimit,\n });\n }\n\n /**\n * Funds the transaction with fake UTXOs for each assetId and amount in the\n * quantities array.\n *\n * @param quantities - CoinQuantity Array.\n */\n fundWithFakeUtxos(quantities: CoinQuantity[], resourcesOwner?: AbstractAddress) {\n const findAssetInput = (assetId: string) =>\n this.inputs.find((input) => {\n if ('assetId' in input) {\n return input.assetId === assetId;\n }\n return false;\n });\n\n const updateAssetInput = (assetId: string, quantity: BN) => {\n const assetInput = findAssetInput(assetId);\n\n if (assetInput && 'assetId' in assetInput) {\n assetInput.id = hexlify(randomBytes(UTXO_ID_LEN));\n assetInput.amount = quantity;\n } else {\n this.addResources([\n {\n id: hexlify(randomBytes(UTXO_ID_LEN)),\n amount: quantity,\n assetId,\n owner: resourcesOwner || Address.fromRandom(),\n maturity: 0,\n blockCreated: bn(1),\n txCreatedIdx: bn(1),\n },\n ]);\n }\n };\n\n updateAssetInput(BaseAssetId, bn(100_000_000_000));\n quantities.forEach((q) => updateAssetInput(q.assetId, q.amount));\n }\n\n /**\n * Retrieves an array of CoinQuantity for each coin output present in the transaction.\n * a transaction.\n *\n * @returns CoinQuantity array.\n */\n getCoinOutputsQuantities(): CoinQuantity[] {\n const coinsQuantities = this.getCoinOutputs().map(({ amount, assetId }) => ({\n amount: bn(amount),\n assetId: assetId.toString(),\n }));\n\n return coinsQuantities;\n }\n\n /**\n * Gets the Transaction Request by hashing the transaction.\n *\n * @param chainId - The chain ID.\n *\n * @returns - A hash of the transaction, which is the transaction ID.\n */\n abstract getTransactionId(chainId: number): string;\n\n /**\n * Return the minimum amount in native coins required to create\n * a transaction.\n *\n * @returns The transaction as a JSON object.\n */\n toJSON() {\n return normalizeJSON(this);\n }\n\n updatePredicateInputs(inputs: TransactionRequestInput[]) {\n this.inputs.forEach((i) => {\n let correspondingInput: TransactionRequestInput | undefined;\n switch (i.type) {\n case InputType.Coin:\n correspondingInput = inputs.find((x) => x.type === InputType.Coin && x.owner === i.owner);\n break;\n case InputType.Message:\n correspondingInput = inputs.find(\n (x) => x.type === InputType.Message && x.sender === i.sender\n );\n break;\n default:\n return;\n }\n if (\n correspondingInput &&\n 'predicateGasUsed' in correspondingInput &&\n bn(correspondingInput.predicateGasUsed).gt(0)\n ) {\n // eslint-disable-next-line no-param-reassign\n i.predicate = correspondingInput.predicate;\n // eslint-disable-next-line no-param-reassign\n i.predicateData = correspondingInput.predicateData;\n // eslint-disable-next-line no-param-reassign\n i.predicateGasUsed = correspondingInput.predicateGasUsed;\n }\n });\n }\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\n\nimport type { Coin } from './coin';\nimport type { MessageCoin } from './message';\n\nexport type RawCoin = {\n utxoId: string;\n owner: string;\n amount: string;\n assetId: string;\n maturity: string;\n blockCreated: string;\n txCreatedIdx: string;\n};\n\nexport type RawMessage = {\n amount: string;\n sender: string;\n assetId: string;\n recipient: string;\n data: string;\n nonce: string;\n daHeight: string;\n};\n\nexport type RawResource = RawCoin | RawMessage;\nexport type Resource = Coin | MessageCoin;\n\n/** @hidden */\nexport type ExcludeResourcesOption = {\n utxos?: BytesLike[];\n messages?: BytesLike[];\n};\n\n/** @hidden */\nexport const isRawCoin = (resource: RawResource): resource is RawCoin => 'utxoId' in resource;\n/** @hidden */\nexport const isRawMessage = (resource: RawResource): resource is RawMessage =>\n 'recipient' in resource;\n/** @hidden */\nexport const isCoin = (resource: Resource): resource is Coin => 'id' in resource;\n/** @hidden */\nexport const isMessage = (resource: Resource): resource is MessageCoin => 'recipient' in resource;\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport type {\n ReceiptBurn,\n ReceiptCall,\n ReceiptLog,\n ReceiptLogData,\n ReceiptMessageOut,\n ReceiptMint,\n ReceiptPanic,\n ReceiptReturn,\n ReceiptReturnData,\n ReceiptRevert,\n ReceiptScriptResult,\n ReceiptTransfer,\n ReceiptTransferOut,\n} from '@fuel-ts/transactions';\nimport {\n ReceiptBurnCoder,\n ReceiptMessageOutCoder,\n ReceiptMintCoder,\n ReceiptType,\n} from '@fuel-ts/transactions';\nimport { FAILED_TRANSFER_TO_ADDRESS_SIGNAL } from '@fuel-ts/transactions/configs';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlReceiptFragmentFragment } from '../__generated__/operations';\nimport { GqlReceiptType } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\n\n/** @hidden */\nconst doesReceiptHaveMissingOutputVariables = (\n receipt: TransactionResultReceipt\n): receipt is ReceiptRevert =>\n receipt.type === ReceiptType.Revert &&\n receipt.val.toString('hex') === FAILED_TRANSFER_TO_ADDRESS_SIGNAL;\n\n/** @hidden */\nconst doesReceiptHaveMissingContractId = (\n receipt: TransactionResultReceipt\n): receipt is ReceiptPanic =>\n receipt.type === ReceiptType.Panic &&\n receipt.contractId !== '0x0000000000000000000000000000000000000000000000000000000000000000';\n\n/** @hidden */\nexport const getReceiptsWithMissingData = (receipts: Array<TransactionResultReceipt>) =>\n receipts.reduce<{\n missingOutputVariables: Array<ReceiptRevert>;\n missingOutputContractIds: Array<ReceiptPanic>;\n }>(\n (memo, receipt) => {\n if (doesReceiptHaveMissingOutputVariables(receipt)) {\n memo.missingOutputVariables.push(receipt);\n }\n if (doesReceiptHaveMissingContractId(receipt)) {\n memo.missingOutputContractIds.push(receipt);\n }\n return memo;\n },\n {\n missingOutputVariables: [],\n missingOutputContractIds: [],\n }\n );\n\nconst hexOrZero = (hex?: string | null) => hex || ZeroBytes32;\n\nexport function assembleReceiptByType(receipt: GqlReceiptFragmentFragment) {\n const { receiptType } = receipt;\n\n switch (receiptType) {\n case GqlReceiptType.Call: {\n const callReceipt: ReceiptCall = {\n type: ReceiptType.Call,\n from: hexOrZero(receipt.contract?.id),\n to: hexOrZero(receipt?.to?.id),\n amount: bn(receipt.amount),\n assetId: hexOrZero(receipt.assetId),\n gas: bn(receipt.gas),\n param1: bn(receipt.param1),\n param2: bn(receipt.param2),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return callReceipt;\n }\n\n case GqlReceiptType.Return: {\n const returnReceipt: ReceiptReturn = {\n type: ReceiptType.Return,\n id: hexOrZero(receipt.contract?.id),\n val: bn(receipt.val),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return returnReceipt;\n }\n\n case GqlReceiptType.ReturnData: {\n const returnDataReceipt: ReceiptReturnData = {\n type: ReceiptType.ReturnData,\n id: hexOrZero(receipt.contract?.id),\n ptr: bn(receipt.ptr),\n len: bn(receipt.len),\n digest: hexOrZero(receipt.digest),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return returnDataReceipt;\n }\n\n case GqlReceiptType.Panic: {\n const panicReceipt: ReceiptPanic = {\n type: ReceiptType.Panic,\n id: hexOrZero(receipt.contract?.id),\n reason: bn(receipt.reason),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n contractId: hexOrZero(receipt.contractId),\n };\n\n return panicReceipt;\n }\n\n case GqlReceiptType.Revert: {\n const revertReceipt: ReceiptRevert = {\n type: ReceiptType.Revert,\n id: hexOrZero(receipt.contract?.id),\n val: bn(receipt.ra),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n return revertReceipt;\n }\n\n case GqlReceiptType.Log: {\n const logReceipt: ReceiptLog = {\n type: ReceiptType.Log,\n id: hexOrZero(receipt.contract?.id),\n val0: bn(receipt.ra),\n val1: bn(receipt.rb),\n val2: bn(receipt.rc),\n val3: bn(receipt.rd),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return logReceipt;\n }\n\n case GqlReceiptType.LogData: {\n const logDataReceipt: ReceiptLogData = {\n type: ReceiptType.LogData,\n id: hexOrZero(receipt.contract?.id),\n val0: bn(receipt.ra),\n val1: bn(receipt.rb),\n ptr: bn(receipt.ptr),\n len: bn(receipt.len),\n digest: hexOrZero(receipt.digest),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n return logDataReceipt;\n }\n\n case GqlReceiptType.Transfer: {\n const transferReceipt: ReceiptTransfer = {\n type: ReceiptType.Transfer,\n from: hexOrZero(receipt.contract?.id),\n to: hexOrZero(receipt.toAddress || receipt?.to?.id),\n amount: bn(receipt.amount),\n assetId: hexOrZero(receipt.assetId),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return transferReceipt;\n }\n\n case GqlReceiptType.TransferOut: {\n const transferOutReceipt: ReceiptTransferOut = {\n type: ReceiptType.TransferOut,\n from: hexOrZero(receipt.contract?.id),\n to: hexOrZero(receipt.toAddress || receipt.to?.id),\n amount: bn(receipt.amount),\n assetId: hexOrZero(receipt.assetId),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n return transferOutReceipt;\n }\n\n case GqlReceiptType.ScriptResult: {\n const scriptResultReceipt: ReceiptScriptResult = {\n type: ReceiptType.ScriptResult,\n result: bn(receipt.result),\n gasUsed: bn(receipt.gasUsed),\n };\n\n return scriptResultReceipt;\n }\n\n case GqlReceiptType.MessageOut: {\n const sender = hexOrZero(receipt.sender);\n const recipient = hexOrZero(receipt.recipient);\n const nonce = hexOrZero(receipt.nonce);\n const amount = bn(receipt.amount);\n const data = receipt.data ? arrayify(receipt.data) : Uint8Array.from([]);\n const digest = hexOrZero(receipt.digest);\n\n const messageId = ReceiptMessageOutCoder.getMessageId({\n sender,\n recipient,\n nonce,\n amount,\n data,\n });\n\n const receiptMessageOut: ReceiptMessageOut = {\n type: ReceiptType.MessageOut,\n sender,\n recipient,\n amount,\n nonce,\n data,\n digest,\n messageId,\n };\n\n return receiptMessageOut;\n }\n\n case GqlReceiptType.Mint: {\n const contractId = hexOrZero(receipt.contract?.id);\n const subId = hexOrZero(receipt.subId);\n const assetId = ReceiptMintCoder.getAssetId(contractId, subId);\n\n const mintReceipt: ReceiptMint = {\n type: ReceiptType.Mint,\n subId,\n contractId,\n assetId,\n val: bn(receipt.val),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return mintReceipt;\n }\n\n case GqlReceiptType.Burn: {\n const contractId = hexOrZero(receipt.contract?.id);\n const subId = hexOrZero(receipt.subId);\n const assetId = ReceiptBurnCoder.getAssetId(contractId, subId);\n\n const burnReceipt: ReceiptBurn = {\n type: ReceiptType.Burn,\n subId,\n contractId,\n assetId,\n val: bn(receipt.val),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return burnReceipt;\n }\n\n default:\n throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);\n }\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\n\nconst DEFAULT_BLOCK_EXPLORER_URL = 'https://fuellabs.github.io/block-explorer-v2';\n\n/** @hidden */\nconst getPathFromInput = (\n key: BuildBlockExplorerUrlHelperParam,\n value: string | number | undefined\n) => {\n const pathMap = {\n address: `address`,\n txId: `transaction`,\n blockNumber: `block`,\n };\n const path = pathMap[key] || key;\n return `${path}/${value}`;\n};\n\ntype BuildBlockExplorerUrlHelperParam = 'address' | 'txId' | 'blockNumber';\n\n/**\n * @hidden\n *\n * Builds a block explorer url based on and the given path, block explorer URL and provider URL\n */\nexport const buildBlockExplorerUrl = (\n options: {\n blockExplorerUrl?: string;\n path?: string;\n providerUrl?: string;\n address?: string;\n txId?: string;\n blockNumber?: number;\n } = {}\n) => {\n const { blockExplorerUrl, path, providerUrl, address, txId, blockNumber } = options;\n const explorerUrl = blockExplorerUrl || DEFAULT_BLOCK_EXPLORER_URL;\n\n // make sure that only ONE or none of the following is defined: address, txId, blockNumber\n const customInputParams = [\n {\n key: 'address',\n value: address,\n },\n {\n key: 'txId',\n value: txId,\n },\n {\n key: 'blockNumber',\n value: blockNumber,\n },\n ];\n\n const definedValues = customInputParams\n .filter((param) => !!param.value)\n .map(({ key, value }) => ({\n key,\n value,\n }));\n\n const hasAnyDefinedValues = definedValues.length > 0;\n\n if (definedValues.length > 1) {\n throw new FuelError(\n ErrorCode.ERROR_BUILDING_BLOCK_EXPLORER_URL,\n `Only one of the following can be passed in to buildBlockExplorerUrl: ${customInputParams\n .map((param) => param.key)\n .join(', ')}.`\n );\n }\n\n if (path && definedValues.length > 0) {\n const inputKeys = customInputParams.map(({ key }) => key).join(', ');\n throw new FuelError(\n ErrorCode.ERROR_BUILDING_BLOCK_EXPLORER_URL,\n `You cannot pass in a path to 'buildBlockExplorerUrl' along with any of the following: ${inputKeys}.`\n );\n }\n\n const pathGeneratedFromInputParams = hasAnyDefinedValues\n ? getPathFromInput(\n definedValues[0].key as BuildBlockExplorerUrlHelperParam,\n definedValues[0].value\n )\n : '';\n\n // Remove leading and trailing slashes from the path and block explorer url respectively, if present\n const trimSlashes = /^\\/|\\/$/gm;\n const cleanPath = path ? path.replace(trimSlashes, '') : pathGeneratedFromInputParams;\n const cleanBlockExplorerUrl = explorerUrl.replace(trimSlashes, '');\n const cleanProviderUrl = providerUrl?.replace(trimSlashes, '');\n const encodedProviderUrl = cleanProviderUrl ? encodeURIComponent(cleanProviderUrl) : undefined;\n\n // if the block explorer url doesn't have a protocol i.e. http:// or https://, add https://\n const protocol = cleanBlockExplorerUrl.match(/^https?:\\/\\//) ? '' : 'https://';\n const providerUrlProtocol = cleanProviderUrl?.match(/^https?:\\/\\//) ? '' : 'https://';\n\n const url = `${protocol}${cleanBlockExplorerUrl}/${cleanPath}${\n encodedProviderUrl ? `?providerUrl=${providerUrlProtocol}${encodedProviderUrl}` : ''\n }`;\n\n return url;\n};\n","import type { BN, BNInput } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport { ReceiptType, type Input } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlDependentCost, GqlGasCosts } from '../__generated__/operations';\nimport type { TransactionRequestInput } from '../transaction-request';\nimport type {\n TransactionResultReceipt,\n TransactionResultScriptResultReceipt,\n} from '../transaction-response';\n\n/** @hidden */\nexport const calculatePriceWithFactor = (gas: BN, gasPrice: BN, priceFactor: BN): BN =>\n bn(Math.ceil(gas.mul(gasPrice).toNumber() / priceFactor.toNumber()));\n\n/** @hidden */\nexport const getGasUsedFromReceipts = (receipts: Array<TransactionResultReceipt>): BN => {\n const scriptResult = receipts.filter(\n (receipt) => receipt.type === ReceiptType.ScriptResult\n ) as TransactionResultScriptResultReceipt[];\n\n const gasUsed = scriptResult.reduce((prev, receipt) => prev.add(receipt.gasUsed), bn(0));\n\n return gasUsed;\n};\n\nexport function resolveGasDependentCosts(byteSize: BNInput, gasDependentCost: GqlDependentCost) {\n const base = bn(gasDependentCost.base);\n let dependentValue = bn(0);\n if (gasDependentCost.__typename === 'LightOperation') {\n dependentValue = bn(byteSize).div(bn(gasDependentCost.unitsPerGas));\n }\n if (gasDependentCost.__typename === 'HeavyOperation') {\n dependentValue = bn(byteSize).mul(bn(gasDependentCost.gasPerUnit));\n }\n return base.add(dependentValue);\n}\n\nexport function gasUsedByInputs(\n inputs: Array<TransactionRequestInput | Input>,\n txBytesSize: number,\n gasCosts: GqlGasCosts\n) {\n const witnessCache: Array<number> = [];\n const totalGas = inputs.reduce((total, input) => {\n if ('predicate' in input && input.predicate && input.predicate !== '0x') {\n return total.add(\n resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization)\n .add(resolveGasDependentCosts(arrayify(input.predicate).length, gasCosts.contractRoot))\n .add(bn(input.predicateGasUsed))\n );\n }\n if ('witnessIndex' in input && !witnessCache.includes(input.witnessIndex)) {\n witnessCache.push(input.witnessIndex);\n return total.add(gasCosts.ecr1);\n }\n return total;\n }, bn());\n // Never allow gas to exceed MAX_U64\n return totalGas;\n}\n\nexport interface IGetMinGasParams {\n inputs: Array<TransactionRequestInput | Input>;\n gasCosts: GqlGasCosts;\n txBytesSize: number;\n metadataGas: BN;\n gasPerByte: BN;\n}\n\nexport function getMinGas(params: IGetMinGasParams) {\n const { gasCosts, gasPerByte, inputs, metadataGas, txBytesSize } = params;\n\n const vmInitGas = resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization);\n const bytesGas = bn(txBytesSize).mul(gasPerByte);\n const inputsGas = gasUsedByInputs(inputs, txBytesSize, gasCosts);\n\n const minGas = vmInitGas.add(bytesGas).add(inputsGas).add(metadataGas).maxU64();\n\n return minGas;\n}\n\nexport interface IGetMaxGasParams {\n witnessesLength: number;\n witnessLimit?: BN;\n gasPerByte: BN;\n minGas: BN;\n gasLimit?: BN;\n}\n\nexport function getMaxGas(params: IGetMaxGasParams) {\n const { gasPerByte, witnessesLength, witnessLimit, minGas, gasLimit = bn(0) } = params;\n\n let remainingAllowedWitnessGas = bn(0);\n\n if (witnessLimit?.gt(0) && witnessLimit.gte(witnessesLength)) {\n remainingAllowedWitnessGas = bn(witnessLimit).sub(witnessesLength).mul(gasPerByte);\n }\n\n return remainingAllowedWitnessGas.add(minGas).add(gasLimit);\n}\n\nexport function calculateMetadataGasForTxCreate({\n gasCosts,\n stateRootSize,\n txBytesSize,\n contractBytesSize,\n}: {\n gasCosts: GqlGasCosts;\n contractBytesSize: BN;\n stateRootSize: number;\n txBytesSize: number;\n}) {\n const contractRootGas = resolveGasDependentCosts(contractBytesSize, gasCosts.contractRoot);\n const stateRootGas = resolveGasDependentCosts(stateRootSize, gasCosts.stateRoot);\n const txIdGas = resolveGasDependentCosts(txBytesSize, gasCosts.s256);\n // See https://github.com/FuelLabs/fuel-specs/blob/master/src/identifiers/contract-id.md\n const contractIdInputSize = bn(4 + 32 + 32 + 32);\n const contractIdGas = resolveGasDependentCosts(contractIdInputSize, gasCosts.s256);\n const metadataGas = contractRootGas.add(stateRootGas).add(txIdGas).add(contractIdGas);\n return metadataGas.maxU64();\n}\n\nexport function calculateMetadataGasForTxScript({\n gasCosts,\n txBytesSize,\n}: {\n gasCosts: GqlGasCosts;\n txBytesSize: number;\n}) {\n return resolveGasDependentCosts(txBytesSize, gasCosts.s256);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-param-reassign */\nimport { hexlify } from '@fuel-ts/utils';\nimport { clone } from 'ramda';\n\n// When parsing a Transaction to JSON we need\n// to convert special types into each respective\n// JSON friendly value. This enables a tx to be\n// stringified and parsed back into a Transaction\n/** @hidden */\nfunction normalize(object: any) {\n Object.keys(object).forEach((key) => {\n switch (object[key]?.constructor.name) {\n case 'Uint8Array':\n object[key] = hexlify(object[key]);\n break;\n case 'Array':\n object[key] = normalize(object[key]);\n break;\n case 'BN':\n object[key] = object[key].toHex();\n break;\n case 'Address':\n object[key] = object[key].toB256();\n break;\n case 'Object':\n object[key] = normalize(object[key]);\n break;\n default:\n break;\n }\n });\n return object;\n}\n\n/**\n * Stringify Transaction to a JSON object\n * compatible with the Transaction class constructor.\n */\n/** @hidden */\nexport function normalizeJSON(root: any) {\n // Do a single deep clone before normalizing\n // to avoid mutating the original object\n // and doing extra clones on each iteration\n return normalize(clone(root));\n}\n","/** @hidden */\nexport function sleep(time: number) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true);\n }, time);\n });\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport type { ReceiptRevert } from '@fuel-ts/transactions';\nimport { ReceiptType } from '@fuel-ts/transactions';\nimport {\n FAILED_REQUIRE_SIGNAL,\n FAILED_ASSERT_EQ_SIGNAL,\n FAILED_ASSERT_NE_SIGNAL,\n FAILED_ASSERT_SIGNAL,\n FAILED_TRANSFER_TO_ADDRESS_SIGNAL,\n PANIC_REASONS,\n PANIC_DOC_URL,\n} from '@fuel-ts/transactions/configs';\n\nimport type { GqlTransactionStatusFragmentFragment } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\nimport type { FailureStatus } from '../transaction-summary';\n\n/**\n * Assembles an error message for a panic status.\n * @param status - The transaction failure status.\n * @returns The error message.\n */\nexport const assemblePanicError = (status: FailureStatus) => {\n let errorMessage = `The transaction reverted with reason: \"${status.reason}\".`;\n const reason = status.reason;\n\n if (PANIC_REASONS.includes(status.reason)) {\n errorMessage = `${errorMessage}\\n\\nYou can read more about this error at:\\n\\n${PANIC_DOC_URL}#variant.${status.reason}`;\n }\n\n return { errorMessage, reason };\n};\n\n/** @hidden */\nconst stringify = (obj: unknown) => JSON.stringify(obj, null, 2);\n\n/**\n * Assembles an error message for a revert status.\n * @param receipts - The transaction result processed receipts.\n * @param logs - The transaction decoded logs.\n * @returns The error message.\n */\nexport const assembleRevertError = (\n receipts: Array<TransactionResultReceipt>,\n logs: Array<unknown>\n) => {\n let errorMessage = 'The transaction reverted with an unknown reason.';\n\n const revertReceipt = receipts.find(({ type }) => type === ReceiptType.Revert) as ReceiptRevert;\n let reason = '';\n\n if (revertReceipt) {\n const reasonHex = bn(revertReceipt.val).toHex();\n\n switch (reasonHex) {\n case FAILED_REQUIRE_SIGNAL: {\n reason = 'require';\n errorMessage = `The transaction reverted because a \"require\" statement has thrown ${\n logs.length ? stringify(logs[0]) : 'an error.'\n }.`;\n break;\n }\n\n case FAILED_ASSERT_EQ_SIGNAL: {\n const sufix =\n logs.length >= 2 ? ` comparing ${stringify(logs[1])} and ${stringify(logs[0])}.` : '.';\n\n reason = 'assert_eq';\n errorMessage = `The transaction reverted because of an \"assert_eq\" statement${sufix}`;\n break;\n }\n\n case FAILED_ASSERT_NE_SIGNAL: {\n const sufix =\n logs.length >= 2 ? ` comparing ${stringify(logs[1])} and ${stringify(logs[0])}.` : '.';\n\n reason = 'assert_ne';\n errorMessage = `The transaction reverted because of an \"assert_ne\" statement${sufix}`;\n break;\n }\n\n case FAILED_ASSERT_SIGNAL:\n reason = 'assert';\n errorMessage = `The transaction reverted because an \"assert\" statement failed to evaluate to true.`;\n break;\n\n case FAILED_TRANSFER_TO_ADDRESS_SIGNAL:\n reason = 'MissingOutputChange';\n errorMessage = `The transaction reverted because it's missing an \"OutputChange\".`;\n break;\n\n default:\n reason = 'unknown';\n errorMessage = `The transaction reverted with an unknown reason: ${revertReceipt.val}`;\n }\n }\n\n return { errorMessage, reason };\n};\n\ninterface IExtractTxError {\n receipts: Array<TransactionResultReceipt>;\n status?: GqlTransactionStatusFragmentFragment | null;\n logs: Array<unknown>;\n}\n\n/**\n * Extracts the transaction error and returns a FuelError object.\n * @param IExtractTxError - The parameters for extracting the error.\n * @returns The FuelError object.\n */\nexport const extractTxError = (params: IExtractTxError): FuelError => {\n const { receipts, status, logs } = params;\n\n const isPanic = receipts.some(({ type }) => type === ReceiptType.Panic);\n const isRevert = receipts.some(({ type }) => type === ReceiptType.Revert);\n\n const { errorMessage, reason } =\n status?.type === 'FailureStatus' && isPanic\n ? assemblePanicError(status)\n : assembleRevertError(receipts, logs);\n\n const metadata = {\n logs,\n receipts,\n panic: isPanic,\n revert: isRevert,\n reason,\n };\n\n return new FuelError(ErrorCode.SCRIPT_REVERTED, errorMessage, metadata);\n};\n","/* eslint-disable max-classes-per-file */\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\n\n/**\n * @hidden\n */\nexport class ChangeOutputCollisionError extends Error {\n name = 'ChangeOutputCollisionError';\n message = 'A ChangeOutput with the same \"assetId\" already exists for a different \"to\" address';\n}\n\n/**\n * @hidden\n */\nexport class NoWitnessAtIndexError extends Error {\n name = 'NoWitnessAtIndexError';\n constructor(public readonly index: number) {\n super();\n this.message = `Witness at index \"${index}\" was not found`;\n }\n}\n\n/**\n * @hidden\n */\nexport class NoWitnessByOwnerError extends Error {\n name = 'NoWitnessByOwnerError';\n constructor(public readonly owner: AbstractAddress) {\n super();\n this.message = `A witness for the given owner \"${owner}\" was not found`;\n }\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\nimport type { Witness } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nexport type TransactionRequestWitness = BytesLike;\n\nexport const witnessify = (value: TransactionRequestWitness): Witness => {\n const data = arrayify(value);\n\n return {\n data: hexlify(data),\n dataLength: data.length,\n };\n};\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { bn, type BN } from '@fuel-ts/math';\nimport type { TransactionCreate } from '@fuel-ts/transactions';\nimport { TransactionType, OutputType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport { calculateMetadataGasForTxCreate } from '../utils/gas';\n\nimport { hashTransaction } from './hash-transaction';\nimport type { ContractCreatedTransactionRequestOutput } from './output';\nimport type { TransactionRequestStorageSlot } from './storage-slot';\nimport { storageSlotify } from './storage-slot';\nimport { BaseTransactionRequest } from './transaction-request';\nimport type { BaseTransactionRequestLike } from './transaction-request';\n\n/**\n * @hidden\n */\nexport interface CreateTransactionRequestLike extends BaseTransactionRequestLike {\n /** Witness index of contract bytecode to create */\n bytecodeWitnessIndex?: number;\n /** Salt */\n salt?: BytesLike;\n /** List of storage slots to initialize */\n storageSlots?: TransactionRequestStorageSlot[];\n}\n\n/**\n * `CreateTransactionRequest` provides functionalities for creating a transaction request that creates a contract.\n */\nexport class CreateTransactionRequest extends BaseTransactionRequest {\n static from(obj: CreateTransactionRequestLike) {\n if (obj instanceof this) {\n return obj;\n }\n return new this(obj);\n }\n\n /** Type of the transaction */\n type = TransactionType.Create as const;\n /** Witness index of contract bytecode to create */\n bytecodeWitnessIndex: number;\n /** Salt */\n salt: string;\n /** List of storage slots to initialize */\n storageSlots: TransactionRequestStorageSlot[];\n\n /**\n * Creates an instance `CreateTransactionRequest`.\n *\n * @param createTransactionRequestLike - The initial values for the instance\n */\n constructor({\n bytecodeWitnessIndex,\n salt,\n storageSlots,\n ...rest\n }: CreateTransactionRequestLike = {}) {\n super(rest);\n this.bytecodeWitnessIndex = bytecodeWitnessIndex ?? 0;\n this.salt = hexlify(salt ?? ZeroBytes32);\n this.storageSlots = [...(storageSlots ?? [])];\n }\n\n /**\n * Converts the transaction request to a `TransactionCreate`.\n *\n * @returns The transaction create object.\n */\n toTransaction(): TransactionCreate {\n const baseTransaction = this.getBaseTransaction();\n const bytecodeWitnessIndex = this.bytecodeWitnessIndex;\n const storageSlots = this.storageSlots?.map(storageSlotify) ?? [];\n return {\n type: TransactionType.Create,\n ...baseTransaction,\n bytecodeLength: baseTransaction.witnesses[bytecodeWitnessIndex].dataLength / 4,\n bytecodeWitnessIndex,\n storageSlotsCount: storageSlots.length,\n salt: this.salt ? hexlify(this.salt) : ZeroBytes32,\n storageSlots,\n };\n }\n\n /**\n * Get contract created outputs for the transaction.\n *\n * @returns An array of contract created transaction request outputs.\n */\n getContractCreatedOutputs(): ContractCreatedTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is ContractCreatedTransactionRequestOutput =>\n output.type === OutputType.ContractCreated\n );\n }\n\n /**\n * Gets the Transaction Request by hashing the transaction.\n *\n * @param chainId - The chain ID.\n *\n * @returns - A hash of the transaction, which is the transaction ID.\n */\n getTransactionId(chainId: number): string {\n return hashTransaction(this, chainId);\n }\n\n /**\n * Adds a contract created output to the transaction request.\n *\n * @param contractId - The contract ID.\n * @param stateRoot - The state root.\n */\n addContractCreatedOutput(\n /** Contract ID */\n contractId: BytesLike,\n /** State Root */\n stateRoot: BytesLike\n ) {\n this.pushOutput({\n type: OutputType.ContractCreated,\n contractId,\n stateRoot,\n });\n }\n\n metadataGas(gasCosts: GqlGasCosts): BN {\n return calculateMetadataGasForTxCreate({\n contractBytesSize: bn(arrayify(this.witnesses[this.bytecodeWitnessIndex] || '0x').length),\n gasCosts,\n stateRootSize: this.storageSlots.length,\n txBytesSize: this.byteSize(),\n });\n }\n}\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { uint64ToBytesBE, sha256 } from '@fuel-ts/hasher';\nimport { bn } from '@fuel-ts/math';\nimport { TransactionType, InputType, OutputType, TransactionCoder } from '@fuel-ts/transactions';\nimport { concat } from '@fuel-ts/utils';\nimport { clone } from 'ramda';\n\nimport type { TransactionRequest } from './types';\n\n/**\n * Hash transaction request with sha256. [Read more](https://github.com/FuelLabs/fuel-specs/blob/master/specs/protocol/identifiers.md#transaction-id)\n *\n * @param transactionRequest - Transaction request to be hashed\n * @returns sha256 hash of the transaction\n */\nexport function hashTransaction(transactionRequest: TransactionRequest, chainId: number) {\n const transaction = transactionRequest.toTransaction();\n\n if (transaction.type === TransactionType.Script) {\n transaction.receiptsRoot = ZeroBytes32;\n }\n\n // Zero out input fields\n transaction.inputs = transaction.inputs.map((input) => {\n const inputClone = clone(input);\n\n switch (inputClone.type) {\n // Zero out on signing: txPointer, predicateGasUsed\n case InputType.Coin: {\n inputClone.txPointer = {\n blockHeight: 0,\n txIndex: 0,\n };\n inputClone.predicateGasUsed = bn(0);\n return inputClone;\n }\n // Zero out on signing: predicateGasUsed\n case InputType.Message: {\n inputClone.predicateGasUsed = bn(0);\n return inputClone;\n }\n // Zero out on signing: txID, outputIndex, balanceRoot, stateRoot, and txPointer\n case InputType.Contract: {\n inputClone.txPointer = {\n blockHeight: 0,\n txIndex: 0,\n };\n inputClone.txID = ZeroBytes32;\n inputClone.outputIndex = 0;\n inputClone.balanceRoot = ZeroBytes32;\n inputClone.stateRoot = ZeroBytes32;\n return inputClone;\n }\n default:\n return inputClone;\n }\n });\n // Zero out output fields\n transaction.outputs = transaction.outputs.map((output) => {\n const outputClone = clone(output);\n\n switch (outputClone.type) {\n // Zero out on signing: balanceRoot, stateRoot\n case OutputType.Contract: {\n outputClone.balanceRoot = ZeroBytes32;\n outputClone.stateRoot = ZeroBytes32;\n return outputClone;\n }\n // Zero out on signing: amount\n case OutputType.Change: {\n outputClone.amount = bn(0);\n return outputClone;\n }\n // Zero out on signing: amount, to and assetId\n case OutputType.Variable: {\n outputClone.to = ZeroBytes32;\n outputClone.amount = bn(0);\n outputClone.assetId = ZeroBytes32;\n return outputClone;\n }\n default:\n return outputClone;\n }\n });\n transaction.witnessesCount = 0;\n transaction.witnesses = [];\n\n const chainIdBytes = uint64ToBytesBE(chainId);\n const concatenatedData = concat([chainIdBytes, new TransactionCoder().encode(transaction)]);\n return sha256(concatenatedData);\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\nimport type { StorageSlot } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nexport type TransactionRequestStorageSlot =\n | {\n /** Key */\n key: BytesLike;\n /** Value */\n value: BytesLike;\n }\n | [key: BytesLike, value: BytesLike];\n\n// Make sure all values have 32 bytes\nconst getStorageValue = (value: BytesLike): Uint8Array => {\n const v = new Uint8Array(32);\n v.set(arrayify(value));\n return v;\n};\n\nexport const storageSlotify = (storageSlot: TransactionRequestStorageSlot): StorageSlot => {\n let key;\n let value;\n\n if (Array.isArray(storageSlot)) {\n key = storageSlot[0];\n value = storageSlot[1];\n } else {\n key = storageSlot.key;\n value = storageSlot.value;\n }\n\n return {\n key: hexlify(key),\n value: hexlify(getStorageValue(value)),\n };\n};\n","import type { InputValue, JsonAbi } from '@fuel-ts/abi-coder';\nimport { Interface } from '@fuel-ts/abi-coder';\nimport { addressify } from '@fuel-ts/address';\nimport { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport type { AbstractScriptRequest, ContractIdLike, BytesLike } from '@fuel-ts/interfaces';\nimport { bn } from '@fuel-ts/math';\nimport type { BN, BigNumberish } from '@fuel-ts/math';\nimport type { TransactionScript } from '@fuel-ts/transactions';\nimport { InputType, OutputType, TransactionType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport type { ChainInfo } from '../provider';\nimport { calculateMetadataGasForTxScript, getMaxGas } from '../utils/gas';\n\nimport { hashTransaction } from './hash-transaction';\nimport type { ContractTransactionRequestInput } from './input';\nimport type { ContractTransactionRequestOutput, VariableTransactionRequestOutput } from './output';\nimport { returnZeroScript } from './scripts';\nimport type { BaseTransactionRequestLike } from './transaction-request';\nimport { BaseTransactionRequest } from './transaction-request';\nimport type { JsonAbisFromAllCalls } from './types';\n\n/**\n * @hidden\n */\nexport interface ScriptTransactionRequestLike extends BaseTransactionRequestLike {\n /** Gas limit for transaction */\n gasLimit?: BigNumberish;\n /** Script to execute */\n script?: BytesLike;\n /** Script input data (parameters) */\n scriptData?: BytesLike;\n\n abis?: JsonAbisFromAllCalls;\n}\n\n/**\n * `ScriptTransactionRequest` provides functionalities for creating a transaction request that uses a script.\n */\nexport class ScriptTransactionRequest extends BaseTransactionRequest {\n static from(obj: ScriptTransactionRequestLike) {\n if (obj instanceof this) {\n return obj;\n }\n return new this(obj);\n }\n\n /** Type of the transaction */\n type = TransactionType.Script as const;\n /** Gas limit for transaction */\n gasLimit: BN;\n /** Script to execute */\n script: Uint8Array;\n /** Script input data (parameters) */\n scriptData: Uint8Array;\n\n abis?: JsonAbisFromAllCalls;\n\n /**\n * Constructor for `ScriptTransactionRequest`.\n *\n * @param scriptTransactionRequestLike - The initial values for the instance.\n */\n constructor({ script, scriptData, gasLimit, ...rest }: ScriptTransactionRequestLike = {}) {\n super(rest);\n this.gasLimit = bn(gasLimit);\n this.script = arrayify(script ?? returnZeroScript.bytes);\n this.scriptData = arrayify(scriptData ?? returnZeroScript.encodeScriptData());\n this.abis = rest.abis;\n }\n\n /**\n * Converts the transaction request to a `TransactionScript`.\n *\n * @returns The transaction script object.\n */\n toTransaction(): TransactionScript {\n const script = arrayify(this.script ?? '0x');\n const scriptData = arrayify(this.scriptData ?? '0x');\n return {\n type: TransactionType.Script,\n scriptGasLimit: this.gasLimit,\n ...super.getBaseTransaction(),\n scriptLength: script.length,\n scriptDataLength: scriptData.length,\n receiptsRoot: ZeroBytes32,\n script: hexlify(script),\n scriptData: hexlify(scriptData),\n };\n }\n\n /**\n * Get contract inputs for the transaction.\n *\n * @returns An array of contract transaction request inputs.\n */\n getContractInputs(): ContractTransactionRequestInput[] {\n return this.inputs.filter(\n (input): input is ContractTransactionRequestInput => input.type === InputType.Contract\n );\n }\n\n /**\n * Get contract outputs for the transaction.\n *\n * @returns An array of contract transaction request outputs.\n */\n getContractOutputs(): ContractTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is ContractTransactionRequestOutput => output.type === OutputType.Contract\n );\n }\n\n /**\n * Get variable outputs for the transaction.\n *\n * @returns An array of variable transaction request outputs.\n */\n getVariableOutputs(): VariableTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is VariableTransactionRequestOutput => output.type === OutputType.Variable\n );\n }\n\n /**\n * Set the script and its data.\n *\n * @param script - The abstract script request.\n * @param data - The script data.\n */\n setScript<T>(script: AbstractScriptRequest<T>, data: T) {\n this.scriptData = script.encodeScriptData(data);\n this.script = script.bytes;\n }\n\n /**\n * Adds variable outputs to the transaction request.\n *\n * @param numberOfVariables - The number of variables to add.\n * @returns The new length of the outputs array.\n */\n addVariableOutputs(numberOfVariables: number = 1) {\n let outputsNumber = numberOfVariables;\n\n while (outputsNumber) {\n this.pushOutput({\n type: OutputType.Variable,\n });\n outputsNumber -= 1;\n }\n\n return this.outputs.length - 1;\n }\n\n calculateMaxGas(chainInfo: ChainInfo, minGas: BN): BN {\n const { consensusParameters } = chainInfo;\n const { gasPerByte } = consensusParameters;\n\n const witnessesLength = this.toTransaction().witnesses.reduce(\n (acc, wit) => acc + wit.dataLength,\n 0\n );\n\n return getMaxGas({\n gasPerByte,\n minGas,\n witnessesLength,\n witnessLimit: this.witnessLimit,\n gasLimit: this.gasLimit,\n });\n }\n\n /**\n * Adds a contract input and output to the transaction request.\n *\n * @param contract - The contract ID.\n * @returns The current instance of the `ScriptTransactionRequest`.\n */\n addContractInputAndOutput(contract: ContractIdLike): ScriptTransactionRequest {\n const contractAddress = addressify(contract);\n\n // Add only one input contract per contractId\n if (this.getContractInputs().find((i) => i.contractId === contractAddress.toB256())) {\n return this;\n }\n\n const inputIndex = super.pushInput({\n type: InputType.Contract,\n contractId: contractAddress.toB256(),\n txPointer: '0x00000000000000000000000000000000',\n });\n\n this.pushOutput({\n type: OutputType.Contract,\n inputIndex,\n });\n\n return this;\n }\n\n /**\n * Gets the Transaction Request by hashing the transaction.\n *\n * @param chainId - The chain ID.\n *\n * @returns - A hash of the transaction, which is the transaction ID.\n */\n getTransactionId(chainId: number): string {\n return hashTransaction(this, chainId);\n }\n\n /**\n * Sets the data for the transaction request.\n *\n * @param abi - Script JSON ABI.\n * @param args - The input arguments.\n * @returns The current instance of the `ScriptTransactionRequest`.\n */\n setData(abi: JsonAbi, args: InputValue[]): ScriptTransactionRequest {\n const abiInterface = new Interface(abi);\n this.scriptData = abiInterface.functions.main.encodeArguments(args);\n return this;\n }\n\n metadataGas(gasCosts: GqlGasCosts): BN {\n return calculateMetadataGasForTxScript({\n gasCosts,\n txBytesSize: this.byteSize(),\n });\n }\n}\n","import type { AbstractScriptRequest } from '@fuel-ts/interfaces';\nimport { arrayify } from '@fuel-ts/utils';\n\n// We can't import this from `@fuel-ts/script` because it causes\n// cyclic dependency errors so we duplicate it here.\n/** @hidden */\nexport const returnZeroScript: AbstractScriptRequest<void> = {\n /*\n Opcode::RET(REG_ZERO)\n Opcode::NOOP\n */\n // TODO: Don't use hardcoded scripts: https://github.com/FuelLabs/fuels-ts/issues/281\n bytes: arrayify('0x24000000'),\n encodeScriptData: () => new Uint8Array(0),\n};\n\n/** @hidden */\nexport const withdrawScript: AbstractScriptRequest<void> = {\n /*\n The following code loads some basic values into registers and calls SMO to create an output message\n 5040C010 \t- ADDI r16 $is i16 [r16 now points to memory 16 bytes from the start of this program (start of receiver data)]\n 5D44C006\t- LW r17 $is i6 [r17 set to the 6th word in this program (6*8=48 bytes from the start of this program)]\n 4C400011\t- SMO r16 r0 r0 r17 [send message out to address starting at memory position r16 with amount in r17]\n 24000000\t- RET [return 0]\n 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [recipient address]\n 00000000 00000000 [amount value]\n */\n // TODO: Don't use hardcoded scripts: https://github.com/FuelLabs/fuels-ts/issues/281\n bytes: arrayify('0x5040C0105D44C0064C40001124000000'),\n encodeScriptData: () => new Uint8Array(0),\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { TransactionType } from '@fuel-ts/transactions';\n\nimport { CreateTransactionRequest } from './create-transaction-request';\nimport { ScriptTransactionRequest } from './script-transaction-request';\nimport type { TransactionRequestLike, TransactionRequest } from './types';\n\n/** @hidden */\nexport const transactionRequestify = (obj: TransactionRequestLike): TransactionRequest => {\n if (obj instanceof ScriptTransactionRequest || obj instanceof CreateTransactionRequest) {\n return obj;\n }\n\n const { type } = obj;\n\n switch (obj.type) {\n case TransactionType.Script: {\n return ScriptTransactionRequest.from(obj);\n }\n case TransactionType.Create: {\n return CreateTransactionRequest.from(obj);\n }\n default: {\n throw new FuelError(ErrorCode.INVALID_TRANSACTION_TYPE, `Invalid transaction type: ${type}.`);\n }\n }\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type {\n ReceiptCall,\n ReceiptLog,\n ReceiptLogData,\n ReceiptPanic,\n ReceiptReturn,\n ReceiptReturnData,\n ReceiptRevert,\n ReceiptTransfer,\n ReceiptTransferOut,\n ReceiptScriptResult,\n ReceiptMessageOut,\n Transaction,\n ReceiptMint,\n ReceiptBurn,\n} from '@fuel-ts/transactions';\nimport { TransactionCoder } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type Provider from '../provider';\nimport type { JsonAbisFromAllCalls } from '../transaction-request';\nimport { assembleTransactionSummary } from '../transaction-summary/assemble-transaction-summary';\nimport { processGqlReceipt } from '../transaction-summary/receipt';\nimport type { TransactionSummary, GqlTransaction, AbiMap } from '../transaction-summary/types';\nimport { extractTxError } from '../utils';\n\nimport { getDecodedLogs } from './getDecodedLogs';\n\n/** @hidden */\nexport type TransactionResultCallReceipt = ReceiptCall;\n/** @hidden */\nexport type TransactionResultReturnReceipt = ReceiptReturn;\n/** @hidden */\nexport type TransactionResultReturnDataReceipt = ReceiptReturnData & { data: string };\n/** @hidden */\nexport type TransactionResultPanicReceipt = ReceiptPanic;\n/** @hidden */\nexport type TransactionResultRevertReceipt = ReceiptRevert;\n/** @hidden */\nexport type TransactionResultLogReceipt = ReceiptLog;\n/** @hidden */\nexport type TransactionResultLogDataReceipt = ReceiptLogData & { data: string };\n/** @hidden */\nexport type TransactionResultTransferReceipt = ReceiptTransfer;\n/** @hidden */\nexport type TransactionResultTransferOutReceipt = ReceiptTransferOut;\n/** @hidden */\nexport type TransactionResultScriptResultReceipt = ReceiptScriptResult;\n/** @hidden */\nexport type TransactionResultMessageOutReceipt = ReceiptMessageOut;\nexport type TransactionResultMintReceipt = ReceiptMint;\nexport type TransactionResultBurnReceipt = ReceiptBurn;\n\n/** @hidden */\nexport type TransactionResultReceipt =\n | ReceiptCall\n | ReceiptReturn\n | (ReceiptReturnData & { data: string })\n | ReceiptPanic\n | ReceiptRevert\n | ReceiptLog\n | (ReceiptLogData & { data: string })\n | ReceiptTransfer\n | ReceiptTransferOut\n | ReceiptScriptResult\n | ReceiptMessageOut\n | TransactionResultMintReceipt\n | TransactionResultBurnReceipt;\n\n/** @hidden */\nexport type TransactionResult<TTransactionType = void> = TransactionSummary<TTransactionType> & {\n gqlTransaction: GqlTransaction;\n logs?: Array<unknown>;\n};\n\n/**\n * Represents a response for a transaction.\n */\nexport class TransactionResponse {\n /** Transaction ID */\n id: string;\n /** Current provider */\n provider: Provider;\n /** Gas used on the transaction */\n gasUsed: BN = bn(0);\n /** The graphql Transaction with receipts object. */\n gqlTransaction?: GqlTransaction;\n\n abis?: JsonAbisFromAllCalls;\n\n /**\n * Constructor for `TransactionResponse`.\n *\n * @param id - The transaction ID.\n * @param provider - The provider.\n */\n constructor(id: string, provider: Provider, abis?: JsonAbisFromAllCalls) {\n this.id = id;\n this.provider = provider;\n this.abis = abis;\n }\n\n /**\n * Async constructor for `TransactionResponse`. This method can be used to create\n * an instance of `TransactionResponse` and wait for the transaction to be fetched\n * from the chain, ensuring that the `gqlTransaction` property is set.\n *\n * @param id - The transaction ID.\n * @param provider - The provider.\n */\n static async create(\n id: string,\n provider: Provider,\n abis?: JsonAbisFromAllCalls\n ): Promise<TransactionResponse> {\n const response = new TransactionResponse(id, provider, abis);\n await response.fetch();\n return response;\n }\n\n /**\n * Fetch the transaction with receipts from the provider.\n *\n * @returns Transaction with receipts query result.\n */\n async fetch(): Promise<GqlTransaction> {\n const response = await this.provider.operations.getTransactionWithReceipts({\n transactionId: this.id,\n });\n\n if (!response.transaction) {\n const subscription = this.provider.operations.statusChange({\n transactionId: this.id,\n });\n\n for await (const { statusChange } of subscription) {\n if (statusChange) {\n break;\n }\n }\n\n return this.fetch();\n }\n\n this.gqlTransaction = response.transaction;\n\n return response.transaction;\n }\n\n /**\n * Decode the raw payload of the transaction.\n *\n * @param transactionWithReceipts - The transaction with receipts object.\n * @returns The decoded transaction.\n */\n decodeTransaction<TTransactionType = void>(transactionWithReceipts: GqlTransaction) {\n return new TransactionCoder().decode(\n arrayify(transactionWithReceipts.rawPayload),\n 0\n )?.[0] as Transaction<TTransactionType>;\n }\n\n /**\n * Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will\n * fetch it from the provider\n *\n * @param contractsAbiMap - The contracts ABI map.\n * @returns\n */\n async getTransactionSummary<TTransactionType = void>(\n contractsAbiMap?: AbiMap\n ): Promise<TransactionSummary<TTransactionType>> {\n let transaction = this.gqlTransaction;\n\n if (!transaction) {\n transaction = await this.fetch();\n }\n\n const decodedTransaction = this.decodeTransaction<TTransactionType>(\n transaction\n ) as Transaction<TTransactionType>;\n\n const receipts = transaction.receipts?.map(processGqlReceipt) || [];\n\n const { gasPerByte, gasPriceFactor, gasCosts } = this.provider.getGasConfig();\n const maxInputs = this.provider.getChain().consensusParameters.maxInputs;\n\n const transactionSummary = assembleTransactionSummary<TTransactionType>({\n id: this.id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: arrayify(transaction.rawPayload),\n gqlTransactionStatus: transaction.status,\n gasPerByte,\n gasPriceFactor,\n abiMap: contractsAbiMap,\n maxInputs,\n gasCosts,\n });\n\n return transactionSummary;\n }\n\n private async waitForStatusChange() {\n const status = this.gqlTransaction?.status?.type;\n if (status && status !== 'SubmittedStatus') {\n return;\n }\n\n const subscription = this.provider.operations.statusChange({\n transactionId: this.id,\n });\n\n for await (const { statusChange } of subscription) {\n if (statusChange.type === 'SqueezedOutStatus') {\n throw new FuelError(\n ErrorCode.TRANSACTION_SQUEEZED_OUT,\n `Transaction Squeezed Out with reason: ${statusChange.reason}`\n );\n }\n if (statusChange.type !== 'SubmittedStatus') {\n break;\n }\n }\n\n await this.fetch();\n }\n\n /**\n * Waits for transaction to complete and returns the result.\n *\n * @returns The completed transaction result\n */\n async waitForResult<TTransactionType = void>(\n contractsAbiMap?: AbiMap\n ): Promise<TransactionResult<TTransactionType>> {\n await this.waitForStatusChange();\n\n const transactionSummary = await this.getTransactionSummary<TTransactionType>(contractsAbiMap);\n\n const transactionResult: TransactionResult<TTransactionType> = {\n gqlTransaction: this.gqlTransaction as GqlTransaction,\n ...transactionSummary,\n };\n\n let logs: Array<unknown> = [];\n\n if (this.abis) {\n logs = getDecodedLogs(\n transactionSummary.receipts,\n this.abis.main,\n this.abis.otherContractsAbis\n );\n\n transactionResult.logs = logs;\n }\n\n if (transactionResult.isStatusFailure) {\n const {\n receipts,\n gqlTransaction: { status },\n } = transactionResult;\n\n throw extractTxError({\n receipts,\n status,\n logs,\n });\n }\n\n return transactionResult;\n }\n\n /**\n * Waits for transaction to complete and returns the result.\n *\n * @param contractsAbiMap - The contracts ABI map.\n */\n async wait<TTransactionType = void>(\n contractsAbiMap?: AbiMap\n ): Promise<TransactionResult<TTransactionType>> {\n return this.waitForResult<TTransactionType>(contractsAbiMap);\n }\n}\n","import { type BN } from '@fuel-ts/math';\nimport { type Transaction } from '@fuel-ts/transactions';\nimport { DateTime, hexlify } from '@fuel-ts/utils';\n\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\nimport { getGasUsedFromReceipts } from '../utils';\n\nimport { calculateTransactionFee } from './calculate-transaction-fee';\nimport {\n getOperations,\n getTransactionTypeName,\n isTypeMint,\n isTypeCreate,\n isTypeScript,\n} from './operations';\nimport { extractBurnedAssetsFromReceipts, extractMintedAssetsFromReceipts } from './receipt';\nimport { processGraphqlStatus } from './status';\nimport type { AbiMap, GraphqlTransactionStatus, TransactionSummary } from './types';\n\nexport interface AssembleTransactionSummaryParams {\n gasPerByte: BN;\n gasPriceFactor: BN;\n transaction: Transaction;\n id?: string;\n transactionBytes: Uint8Array;\n gqlTransactionStatus?: GraphqlTransactionStatus;\n receipts: TransactionResultReceipt[];\n abiMap?: AbiMap;\n maxInputs: BN;\n gasCosts: GqlGasCosts;\n}\n\n/** @hidden */\nexport function assembleTransactionSummary<TTransactionType = void>(\n params: AssembleTransactionSummaryParams\n) {\n const {\n id,\n receipts,\n gasPerByte,\n gasPriceFactor,\n transaction,\n transactionBytes,\n gqlTransactionStatus,\n abiMap = {},\n maxInputs,\n gasCosts,\n } = params;\n\n const gasUsed = getGasUsedFromReceipts(receipts);\n\n const rawPayload = hexlify(transactionBytes);\n\n const operations = getOperations({\n transactionType: transaction.type,\n inputs: transaction.inputs || [],\n outputs: transaction.outputs || [],\n receipts,\n rawPayload,\n abiMap,\n maxInputs,\n });\n\n const typeName = getTransactionTypeName(transaction.type);\n\n const { fee } = calculateTransactionFee({\n gasUsed,\n rawPayload,\n consensusParameters: {\n gasCosts,\n feeParams: {\n gasPerByte,\n gasPriceFactor,\n },\n },\n });\n\n const { isStatusFailure, isStatusPending, isStatusSuccess, blockId, status, time } =\n processGraphqlStatus(gqlTransactionStatus);\n\n const mintedAssets = extractMintedAssetsFromReceipts(receipts);\n const burnedAssets = extractBurnedAssetsFromReceipts(receipts);\n\n let date: DateTime | undefined;\n\n if (time) {\n date = DateTime.fromTai64(time);\n }\n\n const transactionSummary: TransactionSummary<TTransactionType> = {\n id,\n fee,\n gasUsed,\n operations,\n type: typeName,\n blockId,\n time,\n status,\n receipts,\n mintedAssets,\n burnedAssets,\n isTypeMint: isTypeMint(transaction.type),\n isTypeCreate: isTypeCreate(transaction.type),\n isTypeScript: isTypeScript(transaction.type),\n isStatusFailure,\n isStatusSuccess,\n isStatusPending,\n date,\n transaction: transaction as Transaction<TTransactionType>,\n };\n\n return transactionSummary;\n}\n","import type { BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { TransactionCreate, TransactionScript } from '@fuel-ts/transactions';\nimport { PolicyType, TransactionCoder, TransactionType } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlConsensusParameters, GqlFeeParameters } from '../__generated__/operations';\nimport { calculatePriceWithFactor } from '../utils';\nimport {\n calculateMetadataGasForTxCreate,\n calculateMetadataGasForTxScript,\n getMaxGas,\n getMinGas,\n} from '../utils/gas';\n\ntype FeeParams =\n | Pick<GqlFeeParameters, 'gasPerByte' | 'gasPriceFactor'>\n | {\n gasPerByte: BN | number;\n gasPriceFactor: BN | number;\n };\n\nexport type CalculateTransactionFeeParams = {\n gasUsed: BN;\n rawPayload: string;\n consensusParameters: Pick<GqlConsensusParameters, 'gasCosts'> & { feeParams: FeeParams };\n};\n\nexport const calculateTransactionFee = (params: CalculateTransactionFeeParams) => {\n const {\n gasUsed,\n rawPayload,\n consensusParameters: { gasCosts, feeParams },\n } = params;\n\n const gasPerByte = bn(feeParams.gasPerByte);\n const gasPriceFactor = bn(feeParams.gasPriceFactor);\n\n const transactionBytes = arrayify(rawPayload);\n\n const [transaction] = new TransactionCoder().decode(transactionBytes, 0);\n\n if (transaction.type === TransactionType.Mint) {\n return {\n fee: bn(0),\n minFee: bn(0),\n maxFee: bn(0),\n feeFromGasUsed: bn(0),\n };\n }\n\n const { type, witnesses, inputs, policies } = transaction as\n | TransactionCreate\n | TransactionScript;\n\n let metadataGas = bn(0);\n let gasLimit = bn(0);\n\n if (type === TransactionType.Create) {\n const { bytecodeWitnessIndex, storageSlots } = transaction as TransactionCreate;\n\n const contractBytesSize = bn(arrayify(witnesses[bytecodeWitnessIndex].data).length);\n\n metadataGas = calculateMetadataGasForTxCreate({\n contractBytesSize,\n gasCosts,\n stateRootSize: storageSlots.length || 0,\n txBytesSize: transactionBytes.length,\n });\n } else {\n const { scriptGasLimit } = transaction;\n\n if (scriptGasLimit) {\n gasLimit = scriptGasLimit;\n }\n\n metadataGas = calculateMetadataGasForTxScript({\n gasCosts,\n txBytesSize: transactionBytes.length,\n });\n }\n\n const minGas = getMinGas({\n gasCosts,\n gasPerByte: bn(gasPerByte),\n inputs,\n metadataGas,\n txBytesSize: transactionBytes.length,\n });\n\n const gasPrice = bn(policies.find((policy) => policy.type === PolicyType.GasPrice)?.data);\n const witnessLimit = policies.find((policy) => policy.type === PolicyType.WitnessLimit)?.data as\n | BN\n | undefined;\n\n const witnessesLength = witnesses.reduce((acc, wit) => acc + wit.dataLength, 0);\n\n const maxGas = getMaxGas({\n gasPerByte,\n minGas,\n witnessesLength,\n gasLimit,\n witnessLimit,\n });\n\n const feeFromGasUsed = calculatePriceWithFactor(gasUsed, gasPrice, gasPriceFactor);\n const minFee = calculatePriceWithFactor(minGas, gasPrice, gasPriceFactor);\n const maxFee = calculatePriceWithFactor(maxGas, gasPrice, gasPriceFactor);\n const fee = minFee.add(feeFromGasUsed);\n\n return {\n fee,\n minFee,\n maxFee,\n feeFromGasUsed,\n };\n};\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport { ReceiptType, TransactionType } from '@fuel-ts/transactions';\nimport type { InputContract, Output, OutputChange } from '@fuel-ts/transactions';\n\nimport type {\n TransactionResultReceipt,\n TransactionResultCallReceipt,\n TransactionResultMessageOutReceipt,\n TransactionResultTransferOutReceipt,\n TransactionResultTransferReceipt,\n} from '../transaction-response';\n\nimport { getFunctionCall } from './call';\nimport {\n getInputFromAssetId,\n getInputAccountAddress,\n getInputContractFromIndex,\n getInputsContract,\n getInputsCoinAndMessage,\n} from './input';\nimport {\n getOutputsChange,\n getOutputsCoin,\n getOutputsContract,\n getOutputsContractCreated,\n} from './output';\nimport { AddressType, ChainName, OperationName, TransactionTypeName } from './types';\nimport type {\n InputOutputParam,\n InputParam,\n OperationCoin,\n RawPayloadParam,\n ReceiptParam,\n Operation,\n GetOperationParams,\n GetTransferOperationsParams,\n} from './types';\n\n/** @hidden */\nexport function getReceiptsByType<T = TransactionResultReceipt>(\n receipts: TransactionResultReceipt[],\n type: ReceiptType\n) {\n return (receipts ?? []).filter((r) => r.type === type) as T[];\n}\n\n/** @hidden */\nexport function getTransactionTypeName(transactionType: TransactionType): TransactionTypeName {\n switch (transactionType) {\n case TransactionType.Mint:\n return TransactionTypeName.Mint;\n case TransactionType.Create:\n return TransactionTypeName.Create;\n case TransactionType.Script:\n return TransactionTypeName.Script;\n default:\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_TYPE,\n `Invalid transaction type: ${transactionType}.`\n );\n }\n}\n\n/** @hidden */\nexport function isType(transactionType: TransactionType, type: TransactionTypeName) {\n const txType = getTransactionTypeName(transactionType);\n\n return txType === type;\n}\n\n/** @hidden */\nexport function isTypeMint(transactionType: TransactionType) {\n return isType(transactionType, TransactionTypeName.Mint);\n}\n\n/** @hidden */\nexport function isTypeCreate(transactionType: TransactionType) {\n return isType(transactionType, TransactionTypeName.Create);\n}\n\n/** @hidden */\nexport function isTypeScript(transactionType: TransactionType) {\n return isType(transactionType, TransactionTypeName.Script);\n}\n\n/** @hidden */\nexport function hasSameAssetId(a: OperationCoin) {\n return (b: OperationCoin) => a.assetId === b.assetId;\n}\n\n/** @hidden */\nexport function getReceiptsCall(receipts: TransactionResultReceipt[]) {\n return getReceiptsByType<TransactionResultCallReceipt>(receipts, ReceiptType.Call);\n}\n\n/** @hidden */\nexport function getReceiptsMessageOut(receipts: TransactionResultReceipt[]) {\n return getReceiptsByType<TransactionResultMessageOutReceipt>(receipts, ReceiptType.MessageOut);\n}\n\n/** @hidden */\nconst mergeAssets = (op1: Operation, op2: Operation) => {\n const assets1 = op1.assetsSent || [];\n const assets2 = op2.assetsSent || [];\n\n // Getting assets from op2 that don't exist in op1\n const filteredAssets = assets2.filter(\n (asset2) => !assets1.some((asset1) => asset1.assetId === asset2.assetId)\n );\n\n // Merge assets that already exist in op1\n const mergedAssets = assets1.map((asset1) => {\n // Find matching asset in op2\n const matchingAsset = assets2.find((asset2) => asset2.assetId === asset1.assetId);\n if (!matchingAsset) {\n // No matching asset found, return asset1\n return asset1;\n }\n // Matching asset found, merge amounts\n const mergedAmount = bn(asset1.amount).add(matchingAsset.amount);\n return { ...asset1, amount: mergedAmount };\n });\n\n // Return merged assets from op1 with filtered assets from op2\n return mergedAssets.concat(filteredAssets);\n};\n\n/** @hidden */\nfunction isSameOperation(a: Operation, b: Operation) {\n return (\n a.name === b.name &&\n a.from?.address === b.from?.address &&\n a.to?.address === b.to?.address &&\n a.from?.type === b.from?.type &&\n a.to?.type === b.to?.type\n );\n}\n\n/** @hidden */\nexport function addOperation(operations: Operation[], toAdd: Operation) {\n const allOperations = [...operations];\n\n // Verifying if the operation to add already exists.\n const index = allOperations.findIndex((op) => isSameOperation(op, toAdd));\n\n if (allOperations[index]) {\n // Existent operation, we want to edit it.\n const existentOperation = { ...allOperations[index] };\n\n if (toAdd.assetsSent?.length) {\n /**\n * If the assetSent already exists, we call 'mergeAssets' to merge possible\n * entries of the same 'assetId', otherwise we just add the new 'assetSent'.\n */\n existentOperation.assetsSent = existentOperation.assetsSent?.length\n ? mergeAssets(existentOperation, toAdd)\n : toAdd.assetsSent;\n }\n\n if (toAdd.calls?.length) {\n // We need to stack the new call(s) with the possible existent ones.\n existentOperation.calls = [...(existentOperation.calls || []), ...toAdd.calls];\n }\n\n allOperations[index] = existentOperation;\n } else {\n // New operation, we can simply add it.\n allOperations.push(toAdd);\n }\n\n return allOperations;\n}\n\n/** @hidden */\nexport function getReceiptsTransferOut(receipts: TransactionResultReceipt[]) {\n return getReceiptsByType<TransactionResultTransferOutReceipt>(receipts, ReceiptType.TransferOut);\n}\n\n/** @hidden */\nexport function getWithdrawFromFuelOperations({\n inputs,\n receipts,\n}: InputParam & ReceiptParam): Operation[] {\n const messageOutReceipts = getReceiptsMessageOut(receipts);\n\n const withdrawFromFuelOperations = messageOutReceipts.reduce(\n (prevWithdrawFromFuelOps, receipt) => {\n // TODO: replace this hardcode with receipt.assetId when assetId gets added to MessageOutReceipt\n const assetId = '0x0000000000000000000000000000000000000000000000000000000000000000';\n const input = getInputFromAssetId(inputs, assetId);\n if (input) {\n const inputAddress = getInputAccountAddress(input);\n const newWithdrawFromFuelOps = addOperation(prevWithdrawFromFuelOps, {\n name: OperationName.withdrawFromFuel,\n from: {\n type: AddressType.account,\n address: inputAddress,\n },\n to: {\n type: AddressType.account,\n address: receipt.recipient.toString(),\n chain: ChainName.ethereum,\n },\n assetsSent: [\n {\n amount: receipt.amount,\n assetId,\n },\n ],\n });\n\n return newWithdrawFromFuelOps;\n }\n\n return prevWithdrawFromFuelOps;\n },\n [] as Operation[]\n );\n\n return withdrawFromFuelOperations;\n}\n\n/** @hidden */\nexport function getContractCallOperations({\n inputs,\n outputs,\n receipts,\n abiMap,\n rawPayload,\n maxInputs,\n}: InputOutputParam &\n ReceiptParam &\n Pick<GetOperationParams, 'abiMap' | 'maxInputs'> &\n RawPayloadParam): Operation[] {\n const contractCallReceipts = getReceiptsCall(receipts);\n const contractOutputs = getOutputsContract(outputs);\n\n const contractCallOperations = contractOutputs.reduce((prevOutputCallOps, output) => {\n const contractInput = getInputContractFromIndex(inputs, output.inputIndex);\n\n if (contractInput) {\n const newCallOps = contractCallReceipts.reduce((prevContractCallOps, receipt) => {\n if (receipt.to === contractInput.contractID) {\n const input = getInputFromAssetId(inputs, receipt.assetId);\n if (input) {\n const inputAddress = getInputAccountAddress(input);\n const calls = [];\n\n const abi = abiMap?.[contractInput.contractID];\n if (abi) {\n calls.push(\n getFunctionCall({\n abi,\n receipt,\n rawPayload,\n maxInputs,\n })\n );\n }\n\n const newContractCallOps = addOperation(prevContractCallOps, {\n name: OperationName.contractCall,\n from: {\n type: AddressType.account,\n address: inputAddress,\n },\n to: {\n type: AddressType.contract,\n address: receipt.to,\n },\n // if no amount is forwarded to the contract, skip showing assetsSent\n assetsSent: receipt.amount?.isZero()\n ? undefined\n : [\n {\n amount: receipt.amount,\n assetId: receipt.assetId,\n },\n ],\n calls,\n });\n\n return newContractCallOps;\n }\n }\n return prevContractCallOps;\n }, prevOutputCallOps as Operation[]);\n\n return newCallOps;\n }\n\n return prevOutputCallOps;\n }, [] as Operation[]);\n\n return contractCallOperations;\n}\n\n/** @hidden */\nfunction extractTransferOperationFromReceipt(\n receipt: TransactionResultTransferReceipt | TransactionResultTransferOutReceipt,\n contractInputs: InputContract[],\n changeOutputs: OutputChange[]\n) {\n const { to: toAddress, assetId, amount } = receipt;\n let { from: fromAddress } = receipt;\n\n const toType = contractInputs.some((input) => input.contractID === toAddress)\n ? AddressType.contract\n : AddressType.account;\n\n if (ZeroBytes32 === fromAddress) {\n const change = changeOutputs.find((output) => output.assetId === assetId);\n\n fromAddress = change?.to || fromAddress;\n }\n\n const fromType = contractInputs.some((input) => input.contractID === fromAddress)\n ? AddressType.contract\n : AddressType.account;\n\n return {\n name: OperationName.transfer,\n from: {\n type: fromType,\n address: fromAddress,\n },\n to: {\n type: toType,\n address: toAddress,\n },\n assetsSent: [\n {\n assetId: assetId.toString(),\n amount,\n },\n ],\n };\n}\n\n/** @hidden */\nexport function getTransferOperations({\n inputs,\n outputs,\n receipts,\n}: GetTransferOperationsParams): Operation[] {\n let operations: Operation[] = [];\n\n const coinOutputs = getOutputsCoin(outputs);\n const contractInputs = getInputsContract(inputs);\n const changeOutputs = getOutputsChange(outputs);\n\n /**\n * Extracting transfer operations between wallets, as they do not produce receipts\n */\n coinOutputs.forEach((output) => {\n const { amount, assetId, to } = output;\n\n const changeOutput = changeOutputs.find((change) => change.assetId === assetId);\n\n if (changeOutput) {\n operations = addOperation(operations, {\n name: OperationName.transfer,\n from: {\n type: AddressType.account,\n address: changeOutput.to,\n },\n to: {\n type: AddressType.account,\n address: to,\n },\n assetsSent: [\n {\n assetId,\n amount,\n },\n ],\n });\n }\n });\n\n /**\n * `Transfer` receipts are produced from transfers:\n * - Wallet to Contract\n * - Contract to Contract\n */\n const transferReceipts = getReceiptsByType<TransactionResultTransferReceipt>(\n receipts,\n ReceiptType.Transfer\n );\n\n /**\n * `TransferOut` receipts are produced from transfer:\n * - Contract to Wallet\n */\n const transferOutReceipts = getReceiptsByType<TransactionResultTransferOutReceipt>(\n receipts,\n ReceiptType.TransferOut\n );\n\n [...transferReceipts, ...transferOutReceipts].forEach((receipt) => {\n const operation = extractTransferOperationFromReceipt(receipt, contractInputs, changeOutputs);\n\n operations = addOperation(operations, operation);\n });\n\n return operations;\n}\n\n/** @hidden */\nexport function getPayProducerOperations(outputs: Output[]): Operation[] {\n const coinOutputs = getOutputsCoin(outputs);\n const payProducerOperations = coinOutputs.reduce((prev, output) => {\n const operations = addOperation(prev, {\n name: OperationName.payBlockProducer,\n from: {\n type: AddressType.account,\n address: 'Network',\n },\n to: {\n type: AddressType.account,\n address: output.to.toString(),\n },\n assetsSent: [\n {\n assetId: output.assetId.toString(),\n amount: output.amount,\n },\n ],\n });\n\n return operations;\n }, [] as Operation[]);\n\n return payProducerOperations;\n}\n\n/** @hidden */\nexport function getContractCreatedOperations({ inputs, outputs }: InputOutputParam): Operation[] {\n const contractCreatedOutputs = getOutputsContractCreated(outputs);\n const input = getInputsCoinAndMessage(inputs)[0];\n const fromAddress = getInputAccountAddress(input);\n const contractCreatedOperations = contractCreatedOutputs.reduce((prev, contractCreatedOutput) => {\n const operations = addOperation(prev, {\n name: OperationName.contractCreated,\n from: {\n type: AddressType.account,\n address: fromAddress,\n },\n to: {\n type: AddressType.contract,\n address: contractCreatedOutput?.contractId || '',\n },\n });\n\n return operations;\n }, [] as Operation[]);\n\n return contractCreatedOperations;\n}\n\n/** @hidden */\nexport function getOperations({\n transactionType,\n inputs,\n outputs,\n receipts,\n abiMap,\n rawPayload,\n maxInputs,\n}: GetOperationParams): Operation[] {\n if (isTypeCreate(transactionType)) {\n return [\n ...getContractCreatedOperations({ inputs, outputs }),\n ...getTransferOperations({ inputs, outputs, receipts }),\n ];\n }\n\n if (isTypeScript(transactionType)) {\n return [\n ...getTransferOperations({ inputs, outputs, receipts }),\n ...getContractCallOperations({\n inputs,\n outputs,\n receipts,\n abiMap,\n rawPayload,\n maxInputs,\n }),\n ...getWithdrawFromFuelOperations({ inputs, receipts }),\n ];\n }\n // at this point we are sure it's a mint transaction\n return [...getPayProducerOperations(outputs)];\n}\n","import { Interface, type JsonAbi, calculateVmTxMemory } from '@fuel-ts/abi-coder';\nimport type { BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { ReceiptCall } from '@fuel-ts/transactions';\n\ntype GetFunctionCallProps = {\n abi: JsonAbi;\n receipt: ReceiptCall;\n rawPayload?: string;\n maxInputs: BN;\n};\n\nexport const getFunctionCall = ({ abi, receipt, rawPayload, maxInputs }: GetFunctionCallProps) => {\n const abiInterface = new Interface(abi);\n const callFunctionSelector = receipt.param1.toHex(8);\n const functionFragment = abiInterface.getFunction(callFunctionSelector);\n const inputs = functionFragment.jsonFn.inputs;\n\n let encodedArgs;\n\n // if has more than 1 input or input type is bigger than 8 bytes, then it's a pointer to data\n if (functionFragment.isInputDataPointer) {\n if (rawPayload) {\n // calculate offset to get function params from rawPayload. should also consider vm offset\n const argsOffset = bn(receipt.param2)\n .sub(calculateVmTxMemory({ maxInputs: maxInputs.toNumber() }))\n .toNumber();\n\n // slice(2) to remove first 0x, then slice again to remove offset and get only args\n encodedArgs = `0x${rawPayload.slice(2).slice(argsOffset * 2)}`;\n }\n } else {\n // for small inputs, param2 is directly the value\n encodedArgs = receipt.param2.toHex();\n }\n\n let argumentsProvided;\n if (encodedArgs) {\n // use bytes got from rawPayload to decode function params\n const data = functionFragment.decodeArguments(encodedArgs);\n if (data) {\n // put together decoded data with input names from abi\n argumentsProvided = inputs.reduce((prev, input, index) => {\n const value = data[index];\n const name = input.name;\n\n if (name) {\n return {\n ...prev,\n // reparse to remove bn\n [name]: JSON.parse(JSON.stringify(value)),\n };\n }\n\n return prev;\n }, {});\n }\n }\n\n const call = {\n functionSignature: functionFragment.signature,\n functionName: functionFragment.name,\n argumentsProvided,\n ...(receipt.amount?.isZero() ? {} : { amount: receipt.amount, assetId: receipt.assetId }),\n };\n\n return call;\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { Input, InputCoin, InputContract, InputMessage } from '@fuel-ts/transactions';\nimport { InputType } from '@fuel-ts/transactions';\n\n/** @hidden */\nexport function getInputsByTypes<T = Input>(inputs: Input[], types: Array<InputType>) {\n return inputs.filter((i) => types.includes(i.type)) as T[];\n}\n\n/** @hidden */\nexport function getInputsByType<T = Input>(inputs: Input[], type: InputType) {\n return inputs.filter((i) => i.type === type) as T[];\n}\n\n/** @hidden */\nexport function getInputsCoin(inputs: Input[]) {\n return getInputsByType<InputCoin>(inputs, InputType.Coin);\n}\n\n/** @hidden */\nexport function getInputsMessage(inputs: Input[]) {\n return getInputsByType<InputMessage>(inputs, InputType.Message);\n}\n\n/** @hidden */\nexport function getInputsCoinAndMessage(inputs: Input[]) {\n return getInputsByTypes<InputCoin | InputMessage>(inputs, [InputType.Coin, InputType.Message]);\n}\n\n/** @hidden */\nexport function getInputsContract(inputs: Input[]) {\n return getInputsByType<InputContract>(inputs, InputType.Contract);\n}\n\n/** @hidden */\nexport function getInputFromAssetId(inputs: Input[], assetId: string) {\n const coinInputs = getInputsCoin(inputs);\n const messageInputs = getInputsMessage(inputs);\n const coinInput = coinInputs.find((i) => i.assetId === assetId);\n // TODO: should include assetId in InputMessage as well. for now we're mocking ETH\n const messageInput = messageInputs.find(\n (_) => assetId === '0x0000000000000000000000000000000000000000000000000000000000000000'\n );\n\n return coinInput || messageInput;\n}\n\n/** @hidden */\nexport function getInputContractFromIndex(\n inputs: Input[],\n inputIndex: number\n): InputContract | undefined {\n if (inputIndex == null) {\n return undefined;\n }\n\n const contractInput = inputs?.[inputIndex];\n\n if (!contractInput) {\n return undefined;\n }\n if (contractInput.type !== InputType.Contract) {\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_INPUT,\n `Contract input should be of type 'contract'.`\n );\n }\n\n return contractInput as InputContract;\n}\n\n/** @hidden */\nexport function getInputAccountAddress(input: Input) {\n if (input.type === InputType.Coin) {\n return input.owner.toString();\n }\n\n if (input.type === InputType.Message) {\n return input.recipient.toString();\n }\n\n return '';\n}\n","import type {\n Output,\n OutputChange,\n OutputCoin,\n OutputContract,\n OutputContractCreated,\n OutputVariable,\n} from '@fuel-ts/transactions';\nimport { OutputType } from '@fuel-ts/transactions';\n\n/** @hidden */\nexport function getOutputsByType<T = Output>(outputs: Output[], type: OutputType) {\n return outputs.filter((o) => o.type === type) as T[];\n}\n\n/** @hidden */\nexport function getOutputsContractCreated(outputs: Output[]) {\n return getOutputsByType<OutputContractCreated>(outputs, OutputType.ContractCreated);\n}\n\n/** @hidden */\nexport function getOutputsCoin(outputs: Output[]) {\n return getOutputsByType<OutputCoin>(outputs, OutputType.Coin);\n}\n\n/** @hidden */\nexport function getOutputsChange(outputs: Output[]) {\n return getOutputsByType<OutputChange>(outputs, OutputType.Change);\n}\n\n/** @hidden */\nexport function getOutputsContract(outputs: Output[]) {\n return getOutputsByType<OutputContract>(outputs, OutputType.Contract);\n}\n\n/** @hidden */\nexport function getOutputsVariable(outputs: Output[]) {\n return getOutputsByType<OutputVariable>(outputs, OutputType.Variable);\n}\n","import type { JsonAbi } from '@fuel-ts/abi-coder';\nimport type { B256Address } from '@fuel-ts/interfaces';\nimport type { BN, BNInput } from '@fuel-ts/math';\nimport type { Input, Output, Transaction, TransactionType } from '@fuel-ts/transactions';\n\nimport type { GqlGetTransactionQuery } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\n\nexport type GqlTransaction = NonNullable<GqlGetTransactionQuery['transaction']>;\n\nexport type GraphqlTransactionStatus = GqlTransaction['status'];\n\nexport type SuccessStatus = Extract<GraphqlTransactionStatus, { __typename: 'SuccessStatus' }>;\nexport type FailureStatus = Extract<GraphqlTransactionStatus, { __typename: 'FailureStatus' }>;\nexport type SubmittedStatus = Extract<GraphqlTransactionStatus, { __typename: 'SubmittedStatus' }>;\nexport type SqueezedOutStatus = Extract<\n GraphqlTransactionStatus,\n { __typename: 'SqueezedOutStatus' }\n>;\n\nexport type Reason = FailureStatus['reason'];\nexport type ProgramState = SuccessStatus['programState'];\nexport type Time = SubmittedStatus['time'] | SuccessStatus['time'] | FailureStatus['time'];\nexport type BlockId = SuccessStatus['block']['id'] | FailureStatus['block']['id'];\n\n/**\n * @hidden\n */\nexport enum TransactionTypeName {\n Create = 'Create',\n Mint = 'Mint',\n Script = 'Script',\n}\n\n/**\n * @hidden\n */\nexport enum TransactionStatus {\n submitted = 'submitted',\n success = 'success',\n squeezedout = 'squeezedout',\n failure = 'failure',\n}\n\n/**\n * @hidden\n */\nexport type GqlTransactionStatusesNames =\n | 'FailureStatus'\n | 'SubmittedStatus'\n | 'SuccessStatus'\n | 'SqueezedOutStatus';\n\n/**\n * @hidden\n */\nexport enum OperationName {\n payBlockProducer = 'Pay network fee to block producer',\n contractCreated = 'Contract created',\n transfer = 'Transfer asset',\n contractCall = 'Contract call',\n receive = 'Receive asset',\n mint = 'Mint asset',\n predicatecall = 'Predicate call',\n script = 'Script',\n sent = 'Sent asset',\n withdrawFromFuel = 'Withdraw from Fuel',\n}\n\nexport type OperationCoin = {\n assetId: string;\n amount: BNInput;\n};\n\nexport type OperationFunctionCall = {\n functionSignature: string;\n functionName: string;\n argumentsProvided?: Record<string, unknown>;\n} & Partial<OperationCoin>;\n\nexport type Operation = {\n name?: OperationName;\n from?: OperationTransactionAddress;\n to?: OperationTransactionAddress;\n assetsSent?: Array<OperationCoin>;\n calls?: Array<OperationFunctionCall>;\n};\n\n/**\n * @hidden\n */\nexport enum AddressType {\n contract,\n account,\n}\n\n/**\n * @hidden\n */\nexport enum ChainName {\n ethereum = 'ethereum',\n fuel = 'fuel',\n}\n\nexport type OperationTransactionAddress = {\n address: string;\n type: AddressType;\n chain?: ChainName;\n};\n\nexport type InputParam = {\n inputs: Input[];\n};\n\nexport type OutputParam = {\n outputs: Output[];\n};\n\nexport type ReceiptParam = {\n receipts: TransactionResultReceipt[];\n};\n\nexport type AbiMap = Record<string, JsonAbi>;\n\nexport type RawPayloadParam = {\n rawPayload?: string;\n};\n\nexport type InputOutputParam = InputParam & OutputParam;\n\nexport interface GetTransferOperationsParams extends InputOutputParam {\n receipts: TransactionResultReceipt[];\n}\n\nexport type GetOperationParams = {\n transactionType: TransactionType;\n abiMap?: AbiMap;\n maxInputs: BN;\n} & InputOutputParam &\n ReceiptParam &\n RawPayloadParam;\n\nexport interface MintedAsset {\n subId: B256Address;\n contractId: B256Address;\n assetId: B256Address;\n amount: BN;\n}\n\nexport type BurnedAsset = MintedAsset;\n\nexport type TransactionSummary<TTransactionType = void> = {\n id?: string;\n time?: string;\n operations: Operation[];\n gasUsed: BN;\n fee: BN;\n type: TransactionTypeName;\n blockId?: BlockId;\n status?: TransactionStatus;\n isTypeMint: boolean;\n isTypeCreate: boolean;\n isTypeScript: boolean;\n isStatusPending: boolean;\n isStatusSuccess: boolean;\n isStatusFailure: boolean;\n mintedAssets: MintedAsset[];\n burnedAssets: BurnedAsset[];\n date?: Date;\n receipts: TransactionResultReceipt[];\n transaction: Transaction<TTransactionType>;\n};\n","import { ReceiptType } from '@fuel-ts/transactions';\n\nimport type { GqlReceiptFragmentFragment } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\nimport { assembleReceiptByType } from '../utils';\n\nimport type { BurnedAsset, MintedAsset } from './types';\n\nexport const processGqlReceipt = (\n gqlReceipt: GqlReceiptFragmentFragment\n): TransactionResultReceipt => {\n const receipt = assembleReceiptByType(gqlReceipt);\n\n switch (receipt.type) {\n case ReceiptType.ReturnData: {\n return {\n ...receipt,\n data: gqlReceipt.data || '0x',\n };\n }\n case ReceiptType.LogData: {\n return {\n ...receipt,\n data: gqlReceipt.data || '0x',\n };\n }\n default:\n return receipt;\n }\n};\n\nexport const extractMintedAssetsFromReceipts = (\n receipts: Array<TransactionResultReceipt>\n): MintedAsset[] => {\n const mintedAssets: MintedAsset[] = [];\n\n receipts.forEach((receipt) => {\n if (receipt.type === ReceiptType.Mint) {\n mintedAssets.push({\n subId: receipt.subId,\n contractId: receipt.contractId,\n assetId: receipt.assetId,\n amount: receipt.val,\n });\n }\n });\n\n return mintedAssets;\n};\n\nexport const extractBurnedAssetsFromReceipts = (\n receipts: Array<TransactionResultReceipt>\n): BurnedAsset[] => {\n const burnedAssets: BurnedAsset[] = [];\n\n receipts.forEach((receipt) => {\n if (receipt.type === ReceiptType.Burn) {\n burnedAssets.push({\n subId: receipt.subId,\n contractId: receipt.contractId,\n assetId: receipt.assetId,\n amount: receipt.val,\n });\n }\n });\n\n return burnedAssets;\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\n\nimport type {\n BlockId,\n GqlTransactionStatusesNames,\n GraphqlTransactionStatus,\n Time,\n TransactionSummary,\n} from './types';\nimport { TransactionStatus } from './types';\n\n/** @hidden */\nexport const getTransactionStatusName = (gqlStatus: GqlTransactionStatusesNames) => {\n switch (gqlStatus) {\n case 'FailureStatus':\n return TransactionStatus.failure;\n case 'SuccessStatus':\n return TransactionStatus.success;\n case 'SubmittedStatus':\n return TransactionStatus.submitted;\n case 'SqueezedOutStatus':\n return TransactionStatus.squeezedout;\n default:\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_STATUS,\n `Invalid transaction status: ${gqlStatus}.`\n );\n }\n};\n\ntype IProcessGraphqlStatusResponse = Pick<\n TransactionSummary,\n 'time' | 'blockId' | 'isStatusPending' | 'isStatusSuccess' | 'isStatusFailure' | 'status'\n>;\n\n/** @hidden */\nexport const processGraphqlStatus = (gqlTransactionStatus?: GraphqlTransactionStatus) => {\n let time: Time | undefined;\n let blockId: BlockId | undefined;\n let status: TransactionStatus | undefined;\n\n let isStatusFailure = false;\n let isStatusSuccess = false;\n let isStatusPending = false;\n\n if (gqlTransactionStatus?.type) {\n status = getTransactionStatusName(gqlTransactionStatus.type);\n\n switch (gqlTransactionStatus.type) {\n case 'SuccessStatus':\n time = gqlTransactionStatus.time;\n blockId = gqlTransactionStatus.block.id;\n isStatusSuccess = true;\n break;\n\n case 'FailureStatus':\n time = gqlTransactionStatus.time;\n blockId = gqlTransactionStatus.block.id;\n isStatusFailure = true;\n break;\n\n case 'SubmittedStatus':\n time = gqlTransactionStatus.time;\n isStatusPending = true;\n break;\n default:\n }\n }\n\n const processedGraphqlStatus: IProcessGraphqlStatusResponse = {\n time,\n blockId,\n status,\n isStatusFailure,\n isStatusSuccess,\n isStatusPending,\n };\n\n return processedGraphqlStatus;\n};\n","import type { JsonAbi } from '@fuel-ts/abi-coder';\nimport { Interface, BigNumberCoder } from '@fuel-ts/abi-coder';\nimport { ReceiptType } from '@fuel-ts/transactions';\n\nimport type { TransactionResultReceipt } from './transaction-response';\n\n/** @hidden */\nexport function getDecodedLogs<T = unknown>(\n receipts: Array<TransactionResultReceipt>,\n mainAbi: JsonAbi,\n externalAbis: Record<string, JsonAbi> = {}\n): T[] {\n /**\n * This helper decodes logs from transaction receipts.\n * It loops through all receipts and decodes two types of logs:\n * - ReceiptType.LogData\n * - ReceiptType.Log\n *\n * The \"mainAbi\" parameter represents the ABI of the main contract used to create the transaction\n * or the ABI from a script used within a \"BaseInvocationScope\" context.\n * The \"externalAbis\" parameter is a record of contract ABIs that are also part of the transaction.\n * These ABIs were added using `contract.addContracts` or through a multicall with `contract.multiCall`.\n *\n * @param receipts - The array of transaction result receipts.\n * @param mainAbi - The ABI of the script or main contract.\n * @param externalAbis - The record of external contract ABIs.\n * @returns An array of decoded logs from Sway projects.\n */\n return receipts.reduce((logs: T[], receipt) => {\n if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {\n const interfaceToUse = new Interface(externalAbis[receipt.id] || mainAbi);\n\n const data =\n receipt.type === ReceiptType.Log\n ? new BigNumberCoder('u64').encode(receipt.val0)\n : receipt.data;\n\n const [decodedLog] = interfaceToUse.decodeLog(data, receipt.val1.toNumber());\n logs.push(decodedLog);\n }\n\n return logs;\n }, []);\n}\n","import type { ProviderOptions } from '../provider';\n\nimport { sleep } from './sleep';\n\ntype Backoff = 'linear' | 'exponential' | 'fixed';\n\n/**\n * Retry options scheme\n */\nexport type RetryOptions = {\n /**\n * Amount of attempts to retry before failing the call.\n */\n maxRetries: number;\n /**\n * Backoff strategy to use when retrying. Default is exponential.\n */\n backoff?: Backoff;\n /**\n * Starting delay for backoff strategy. Default is 150ms.\n */\n baseDelay?: number;\n};\n\n/**\n * Calculate the delay for the next retry attempt\n * @param options - Retry options configuration\n * @param retryAttemptNum - 1-based, tells which retry attempt is this\n * @returns Next wait delay\n */\nexport function getWaitDelay(options: RetryOptions, retryAttemptNum: number) {\n const duration = options.baseDelay ?? 150;\n\n switch (options.backoff) {\n case 'linear':\n return duration * retryAttemptNum;\n case 'fixed':\n return duration;\n case 'exponential':\n default:\n return 2 ** (retryAttemptNum - 1) * duration;\n }\n}\n\n/**\n * Returns a wrapped fetch function that will auto-execute itself in case of errors, until it succeeds\n * @param fetchFn - Function to be auto-retried\n * @param options - Retry options configuration\n * @param retryAttemptNum - ZERO=first call, ONE=first retry, TWO=second retry, etc.\n * @returns Whatever is the output of the `fetchFn` function\n */\nexport function autoRetryFetch(\n fetchFn: NonNullable<ProviderOptions['fetch']>,\n options?: RetryOptions,\n retryAttemptNum: number = 0\n): NonNullable<ProviderOptions['fetch']> {\n if (options === undefined) {\n return fetchFn;\n }\n\n return async (...args) => {\n try {\n return await fetchFn(...args);\n } catch (_error: unknown) {\n const error = _error as Error & { cause?: { code: string } };\n\n /**\n * So far, we are auto-retrying only for `ECONNREFUSED` error.\n * TODO: Investigate if we should consider more errors.\n */\n if (error.cause?.code !== 'ECONNREFUSED') {\n throw error;\n }\n const retryNum = retryAttemptNum + 1;\n\n if (retryNum > options.maxRetries) {\n throw error;\n }\n\n const delay = getWaitDelay(options, retryNum);\n\n await sleep(delay);\n\n return autoRetryFetch(fetchFn, options, retryNum)(...args);\n }\n };\n}\n","import type { BN } from '@fuel-ts/math';\n\nimport type { CoinQuantity } from '../coin-quantity';\n\nexport const mergeQuantities = (arr1: CoinQuantity[], arr2: CoinQuantity[]): CoinQuantity[] => {\n const resultMap: { [key: string]: BN } = {};\n\n function addToMap({ amount, assetId }: CoinQuantity) {\n if (resultMap[assetId]) {\n resultMap[assetId] = resultMap[assetId].add(amount);\n } else {\n resultMap[assetId] = amount;\n }\n }\n\n // Process both arrays\n arr1.forEach(addToMap);\n arr2.forEach(addToMap);\n\n // Convert the resultMap back to an array\n return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport { TransactionCoder } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type {\n GqlGetTransactionsByOwnerQueryVariables,\n GqlPageInfo,\n} from '../__generated__/operations';\nimport type Provider from '../provider';\nimport type { TransactionRequest } from '../transaction-request';\nimport type { TransactionResult } from '../transaction-response';\n\nimport { assembleTransactionSummary } from './assemble-transaction-summary';\nimport { processGqlReceipt } from './receipt';\nimport type { AbiMap, TransactionSummary } from './types';\n\n/** @hidden */\nexport interface GetTransactionSummaryParams {\n id: string;\n provider: Provider;\n abiMap?: AbiMap;\n}\n\nexport async function getTransactionSummary<TTransactionType = void>(\n params: GetTransactionSummaryParams\n): Promise<TransactionResult> {\n const { id, provider, abiMap } = params;\n\n const { transaction: gqlTransaction } = await provider.operations.getTransactionWithReceipts({\n transactionId: id,\n });\n\n if (!gqlTransaction) {\n throw new FuelError(\n ErrorCode.TRANSACTION_NOT_FOUND,\n `Transaction not found for given id: ${id}.`\n );\n }\n\n const [decodedTransaction] = new TransactionCoder().decode(\n arrayify(gqlTransaction.rawPayload),\n 0\n );\n\n const receipts = gqlTransaction.receipts?.map(processGqlReceipt) || [];\n\n const {\n consensusParameters: { gasPerByte, gasPriceFactor, maxInputs, gasCosts },\n } = provider.getChain();\n\n const transactionInfo = assembleTransactionSummary<TTransactionType>({\n id: gqlTransaction.id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: arrayify(gqlTransaction.rawPayload),\n gqlTransactionStatus: gqlTransaction.status,\n gasPerByte: bn(gasPerByte),\n gasPriceFactor: bn(gasPriceFactor),\n abiMap,\n maxInputs,\n gasCosts,\n });\n\n return {\n gqlTransaction,\n ...transactionInfo,\n };\n}\n\nexport interface GetTransactionSummaryFromRequestParams {\n transactionRequest: TransactionRequest;\n provider: Provider;\n abiMap?: AbiMap;\n}\n\n/** @hidden */\nexport async function getTransactionSummaryFromRequest<TTransactionType = void>(\n params: GetTransactionSummaryFromRequestParams\n): Promise<TransactionSummary<TTransactionType>> {\n const { provider, transactionRequest, abiMap } = params;\n\n const { receipts } = await provider.call(transactionRequest);\n\n const { gasPerByte, gasPriceFactor, gasCosts } = provider.getGasConfig();\n const maxInputs = provider.getChain().consensusParameters.maxInputs;\n\n const transaction = transactionRequest.toTransaction();\n const transactionBytes = transactionRequest.toTransactionBytes();\n\n const transactionSummary = assembleTransactionSummary<TTransactionType>({\n receipts,\n transaction,\n transactionBytes,\n abiMap,\n gasPerByte,\n gasPriceFactor,\n maxInputs,\n gasCosts,\n });\n\n return transactionSummary;\n}\n\nexport interface GetTransactionsSummariesParams {\n provider: Provider;\n filters: GqlGetTransactionsByOwnerQueryVariables;\n abiMap?: AbiMap;\n}\n\nexport interface GetTransactionsSummariesReturns {\n transactions: TransactionResult[];\n pageInfo: GqlPageInfo;\n}\n\n/** @hidden */\nexport async function getTransactionsSummaries(\n params: GetTransactionsSummariesParams\n): Promise<GetTransactionsSummariesReturns> {\n const { filters, provider, abiMap } = params;\n\n const { transactionsByOwner } = await provider.operations.getTransactionsByOwner(filters);\n\n const { edges, pageInfo } = transactionsByOwner;\n\n const {\n consensusParameters: { gasPerByte, gasPriceFactor, maxInputs, gasCosts },\n } = provider.getChain();\n\n const transactions = edges.map((edge) => {\n const { node: gqlTransaction } = edge;\n\n const { id, rawPayload, receipts: gqlReceipts, status } = gqlTransaction;\n\n const [decodedTransaction] = new TransactionCoder().decode(arrayify(rawPayload), 0);\n\n const receipts = gqlReceipts?.map(processGqlReceipt) || [];\n\n const transactionSummary = assembleTransactionSummary({\n id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: arrayify(rawPayload),\n gqlTransactionStatus: status,\n abiMap,\n gasPerByte,\n gasPriceFactor,\n maxInputs,\n gasCosts,\n });\n\n const output: TransactionResult = {\n gqlTransaction,\n ...transactionSummary,\n };\n\n return output;\n });\n\n return {\n transactions,\n pageInfo,\n };\n}\n","export const CHAIN_IDS = {\n eth: {\n sepolia: 11155111,\n foundry: 31337,\n },\n fuel: {\n beta5: 0,\n devnet: 10,\n },\n};\n","import { CHAIN_IDS } from '../../chains';\nimport type { Asset, AssetEth, AssetFuel, NetworkEthereum, NetworkFuel } from '../types';\n\ntype Network = NetworkEthereum | NetworkFuel;\nexport type NetworkTypes = NetworkEthereum['type'] | NetworkFuel['type'];\ntype NetworkTypeToNetwork<T> = T extends 'ethereum' ? NetworkEthereum : T extends 'fuel' ? NetworkFuel : Network;\n\n/**\n * Returns the default chainId for the given network\n*/\nexport const getDefaultChainId = (networkType: NetworkTypes): number | undefined => {\n if (networkType === 'ethereum') {\n return CHAIN_IDS.eth.sepolia;\n }\n if (networkType === 'fuel') {\n return CHAIN_IDS.fuel.beta5;\n }\n\n return undefined;\n};\n\nexport type GetAssetNetworkParams<T extends NetworkTypes | undefined> = {\n asset: Asset;\n chainId?: number;\n networkType: T;\n};\n\n/**\n * Returns the asset's network on the given network\n * eg. getAssetNetwork({ asset, chainId: 1, networkType: 'ethereum' }) will return the asset's details on Ethereum mainnet\n*/\nexport const getAssetNetwork = <T extends NetworkTypes | undefined>({\n asset,\n chainId,\n networkType,\n}: GetAssetNetworkParams<T>): NetworkTypeToNetwork<T> => {\n const network = asset.networks.find(\n (item) => item.chainId === chainId && item.type === networkType\n ) as NetworkTypeToNetwork<T>;\n\n return network;\n};\n\n/**\n * Returns the asset's details on the given network alongwith the asset itself\n * eg. getAssetWithNetwork({ asset, chainId: 1, networkType: 'ethereum' }) will return the asset's details on Ethereum mainnet and the asset itself\n*/\nexport const getAssetWithNetwork = <T extends NetworkTypes>({\n asset,\n chainId,\n networkType,\n}: GetAssetNetworkParams<T>): AssetEth | AssetFuel | undefined => {\n const { networks: _, ...assetRest } = asset;\n\n const chainIdToUse = chainId ?? getDefaultChainId(networkType);\n // use two equals(==) cuz we wan't to keep 0 as a valid chainId\n if (chainIdToUse === undefined) {\n return undefined;\n }\n\n const assetNetwork = getAssetNetwork({\n asset,\n chainId: chainIdToUse,\n networkType,\n });\n\n if (!assetNetwork) {\n return undefined;\n }\n\n return {\n ...assetRest,\n ...assetNetwork,\n };\n};\n\n/**\n * Returns the asset's details on Ethereum\n*/\nexport const getAssetEth = (asset: Asset, chainId?: number): AssetEth | undefined =>\n getAssetWithNetwork({\n asset,\n networkType: 'ethereum',\n chainId,\n }) as AssetEth;\n\n/**\n * Returns the asset's details on Fuel\n*/\nexport const getAssetFuel = (asset: Asset, chainId?: number): AssetFuel | undefined =>\n getAssetWithNetwork({\n asset,\n networkType: 'fuel',\n chainId,\n }) as AssetFuel;\n","const DELIMITER_PATH = '/';\nconst trimRegex = /^\\/|\\/$/g;\nconst trimPath = (path = '') => path.replace(trimRegex, '');\n\nexport function urlJoin(baseUrl: string | undefined, ...paths: Array<string>): string {\n const hasBaseUrl = baseUrl !== null && baseUrl !== undefined;\n const rootPath = baseUrl?.[0] === '/' && baseUrl.length > 1;\n const allPaths = [baseUrl, ...paths].filter(Boolean).map(trimPath);\n if (rootPath && hasBaseUrl) {\n allPaths.unshift('');\n }\n return allPaths.join(DELIMITER_PATH);\n}\n","import type { Assets } from '../types';\n\nimport { urlJoin } from './url';\n\n/**\n * Returns the list of assets with the icon paths 'resolved'. eg. `./eth.svg` -> `https://some-url.com/eth.svg`\n * @param assets - List of assets\n * @param basePath - Base path for the icon URLs (default: './')\n * @returns The assets with the icon paths resolved\n */\nexport function resolveIconPaths(assets: Assets, basePath = './') {\n return assets.map((asset) => ({\n ...asset,\n icon: urlJoin(basePath, asset.icon),\n }));\n}\n","import { CHAIN_IDS } from '../chains';\n\nimport type { Assets } from './types';\n\nexport const assets: Assets = [\n {\n name: 'Ethereum',\n symbol: 'ETH',\n icon: 'eth.svg',\n networks: [\n {\n type: 'ethereum',\n chainId: CHAIN_IDS.eth.sepolia,\n decimals: 18,\n },\n {\n type: 'ethereum',\n chainId: CHAIN_IDS.eth.foundry,\n decimals: 18,\n },\n {\n type: 'fuel',\n chainId: CHAIN_IDS.fuel.beta5,\n decimals: 9,\n assetId: '0x0000000000000000000000000000000000000000000000000000000000000000',\n },\n {\n type: 'fuel',\n chainId: CHAIN_IDS.fuel.devnet,\n decimals: 9,\n assetId: '0x0000000000000000000000000000000000000000000000000000000000000000',\n },\n ],\n },\n];\n\nexport * from './utils';\nexport * from './types';\n","import { BigNumberCoder } from '@fuel-ts/abi-coder';\nimport type { B256Address, BytesLike } from '@fuel-ts/interfaces';\nimport { BN, type BigNumberish } from '@fuel-ts/math';\nimport { arrayify } from '@fuel-ts/utils';\nimport * as asm from '@fuels/vm-asm';\n\ninterface IAssembleTransferToContractScriptParams {\n hexlifiedContractId: B256Address;\n amountToTransfer: BigNumberish;\n assetId: BytesLike;\n}\n\nexport const formatTransferToContractScriptData = (\n params: IAssembleTransferToContractScriptParams\n) => {\n const { assetId, amountToTransfer, hexlifiedContractId } = params;\n\n const numberCoder = new BigNumberCoder('u64');\n\n const encoded = numberCoder.encode(new BN(amountToTransfer).toNumber());\n\n const scriptData = Uint8Array.from([\n ...arrayify(hexlifiedContractId),\n ...encoded,\n ...arrayify(assetId),\n ]);\n\n return scriptData;\n};\n\nexport const assembleTransferToContractScript = async (\n params: IAssembleTransferToContractScriptParams\n) => {\n const scriptData = formatTransferToContractScriptData(params);\n\n // implementation extracted from Rust SDK at:\n // https://github.com/FuelLabs/fuels-rs/blob/master/packages/fuels-core/src/types/transaction_builders.rs#L240-L272\n // This script loads:\n // - a pointer to the contract id,\n // - the actual amount\n // - a pointer to the asset id\n // into the registers 0x10, 0x12, 0x13\n // and calls the TR instruction\n\n // TODO: Remove ts-expect-error\n // @ts-expect-error method reference missing in DTS\n await asm.initWasm();\n\n // const gtf = fuelAsm.gtf(0x10, 0x00, 0xc);\n const gtf = asm.gtf(0x10, 0x00, asm.GTFArgs.ScriptData);\n const addi = asm.addi(0x11, 0x10, 0x20);\n const lw = asm.lw(0x12, 0x11, 0x0);\n const addi2 = asm.addi(0x13, 0x11, 0x8);\n const tr = asm.tr(0x10, 0x12, 0x13);\n const ret = asm.ret(0x1);\n\n const script = Uint8Array.from([\n ...gtf.to_bytes(),\n ...addi.to_bytes(),\n ...lw.to_bytes(),\n ...addi2.to_bytes(),\n ...tr.to_bytes(),\n ...ret.to_bytes(),\n ]);\n\n return { script, scriptData };\n};\n","import { hashMessage } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { hexlify } from '@fuel-ts/utils';\n\nimport { Account } from '../account';\nimport { transactionRequestify } from '../providers';\nimport type {\n TransactionResponse,\n TransactionRequestLike,\n CallResult,\n Provider,\n ProviderSendTxParams,\n EstimateTransactionParams,\n} from '../providers';\nimport { Signer } from '../signer';\n\nimport { encryptKeystoreWallet } from './keystore-wallet';\n\n/**\n * `BaseWalletUnlocked` provides the base functionalities for an unlocked wallet.\n */\nexport class BaseWalletUnlocked extends Account {\n /**\n * Default HDWallet path.\n */\n static defaultPath = \"m/44'/1179993420'/0'/0/0\";\n\n /**\n * A function that returns the wallet's signer.\n */\n signer: () => Signer;\n\n /**\n * Creates a new BaseWalletUnlocked instance.\n *\n * @param privateKey - The private key of the wallet.\n * @param provider - A Provider instance (optional).\n */\n constructor(privateKey: BytesLike, provider?: Provider) {\n const signer = new Signer(privateKey);\n super(signer.address, provider);\n this.signer = () => signer;\n }\n\n /**\n * Gets the private key of the wallet.\n *\n * @returns The private key of the wallet.\n */\n get privateKey(): string {\n return this.signer().privateKey;\n }\n\n /**\n * Gets the public key of the wallet.\n *\n * @returns\n */\n get publicKey(): string {\n return this.signer().publicKey;\n }\n\n /**\n * Signs a message with the wallet's private key.\n *\n * @param message - The message to sign.\n * @returns A promise that resolves to the signature as a ECDSA 64 bytes string.\n */\n async signMessage(message: string): Promise<string> {\n const signedMessage = await this.signer().sign(hashMessage(message));\n return hexlify(signedMessage);\n }\n\n /**\n * Signs a transaction with the wallet's private key.\n *\n * @param transactionRequestLike - The transaction request to sign.\n * @returns A promise that resolves to the signature as a ECDSA 64 bytes string.\n */\n async signTransaction(transactionRequestLike: TransactionRequestLike): Promise<string> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n const chainId = this.provider.getChainId();\n const hashedTransaction = transactionRequest.getTransactionId(chainId);\n const signature = await this.signer().sign(hashedTransaction);\n return hexlify(signature);\n }\n\n /**\n * Populates a transaction with the witnesses signature.\n *\n * @param transactionRequestLike - The transaction request to populate.\n * @returns The populated transaction request.\n */\n async populateTransactionWitnessesSignature(transactionRequestLike: TransactionRequestLike) {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n const signedTransaction = await this.signTransaction(transactionRequest);\n\n transactionRequest.updateWitnessByOwner(this.address, signedTransaction);\n\n return transactionRequest;\n }\n\n /**\n * Populates the witness signature for a transaction and sends it to the network using `provider.sendTransaction`.\n *\n * @param transactionRequestLike - The transaction request to send.\n * @returns A promise that resolves to the TransactionResponse object.\n */\n async sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true, awaitExecution }: ProviderSendTxParams = {}\n ): Promise<TransactionResponse> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.sendTransaction(\n await this.populateTransactionWitnessesSignature(transactionRequest),\n { awaitExecution, estimateTxDependencies: false }\n );\n }\n\n /**\n * Populates the witness signature for a transaction and sends a call to the network using `provider.call`.\n *\n * @param transactionRequestLike - The transaction request to simulate.\n * @returns A promise that resolves to the CallResult object.\n */\n async simulateTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true }: EstimateTransactionParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.call(\n await this.populateTransactionWitnessesSignature(transactionRequest),\n {\n utxoValidation: true,\n estimateTxDependencies: false,\n }\n );\n }\n\n async encrypt(password: string): Promise<string> {\n return encryptKeystoreWallet(this.privateKey, this.address, password);\n }\n}\n","import { Address } from '@fuel-ts/address';\nimport { randomBytes } from '@fuel-ts/crypto';\nimport { hash } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { toBytes } from '@fuel-ts/math';\nimport { hexlify, concat, arrayify } from '@fuel-ts/utils';\nimport { secp256k1 } from '@noble/curves/secp256k1';\n\nexport class Signer {\n readonly address: Address;\n\n readonly publicKey: string;\n\n readonly compressedPublicKey: string;\n\n readonly privateKey: string;\n\n /**\n * Create a Signer instance from a given private key\n *\n * @param privateKey - The private key to use for signing\n * @returns A new Signer instance\n */\n constructor(privateKey: BytesLike) {\n // A lot of common tools do not prefix private keys with a 0x\n if (typeof privateKey === 'string') {\n if (privateKey.match(/^[0-9a-f]*$/i) && privateKey.length === 64) {\n // eslint-disable-next-line no-param-reassign\n privateKey = `0x${privateKey}`;\n }\n }\n // Convert to byte array, normalize private key input allowing it to be BytesLike\n // like remove 0x prefix and accept array of bytes\n const privateKeyBytes = toBytes(privateKey, 32);\n\n this.privateKey = hexlify(privateKeyBytes);\n\n // Slice(1) removes the encoding scheme from the public key\n this.publicKey = hexlify(secp256k1.getPublicKey(privateKeyBytes, false).slice(1));\n this.compressedPublicKey = hexlify(secp256k1.getPublicKey(privateKeyBytes, true));\n this.address = Address.fromPublicKey(this.publicKey);\n }\n\n /**\n * Sign data using the Signer instance\n *\n * Signature is a 64 byte array of the concatenated r and s values with the compressed recoveryParam byte.\n * @ignore\n * [Read more](FuelLabs/fuel-specs/specs/protocol/cryptographic_primitives.md#public-key-cryptography)\n *\n * @param data - The data to be sign\n * @returns hashed signature\n */\n sign(data: BytesLike) {\n const signature = secp256k1.sign(arrayify(data), arrayify(this.privateKey));\n\n const r = toBytes(`0x${signature.r.toString(16)}`, 32);\n const s = toBytes(`0x${signature.s.toString(16)}`, 32);\n\n // add recoveryParam to first s byte\n s[0] |= (signature.recovery || 0) << 7;\n\n return hexlify(concat([r, s]));\n }\n\n /**\n * Add point on the current elliptic curve\n *\n * @param point - Point to add on the curve\n * @returns compressed point on the curve\n */\n addPoint(point: BytesLike) {\n const p0 = secp256k1.ProjectivePoint.fromHex(arrayify(this.compressedPublicKey));\n const p1 = secp256k1.ProjectivePoint.fromHex(arrayify(point));\n const result = p0.add(p1);\n return `0x${result.toHex(true)}`;\n }\n\n /**\n * Recover the public key from a signature performed with [`sign`](#sign).\n *\n * @param data - Data\n * @param signature - hashed signature\n * @returns public key from signature from the\n */\n static recoverPublicKey(data: BytesLike, signature: BytesLike): string {\n const signedMessageBytes = arrayify(signature);\n const r = signedMessageBytes.slice(0, 32);\n const s = signedMessageBytes.slice(32, 64);\n const recoveryParam = (s[0] & 0x80) >> 7;\n\n // remove recoveryParam from s first byte\n s[0] &= 0x7f;\n\n const sig = new secp256k1.Signature(BigInt(hexlify(r)), BigInt(hexlify(s))).addRecoveryBit(\n recoveryParam\n );\n\n const publicKey = sig.recoverPublicKey(arrayify(data)).toRawBytes(false).slice(1);\n return hexlify(publicKey);\n }\n\n /**\n * Recover the address from a signature performed with [`sign`](#sign).\n *\n * @param data - Data\n * @param signature - Signature\n * @returns Address from signature\n */\n static recoverAddress(data: BytesLike, signature: BytesLike): Address {\n return Address.fromPublicKey(Signer.recoverPublicKey(data, signature));\n }\n\n /**\n * Generate a random privateKey\n *\n * @param entropy - Adds extra entropy to generate the privateKey\n * @returns random 32-byte hashed\n */\n static generatePrivateKey(entropy?: BytesLike) {\n return entropy ? hash(concat([randomBytes(32), arrayify(entropy)])) : randomBytes(32);\n }\n\n /**\n * Extended publicKey from a compact publicKey\n *\n * @param publicKey - Compact publicKey\n * @returns extended publicKey\n */\n static extendPublicKey(publicKey: BytesLike) {\n const point = secp256k1.ProjectivePoint.fromHex(arrayify(publicKey));\n return hexlify(point.toRawBytes(false).slice(1));\n }\n}\n","import { Address } from '@fuel-ts/address';\nimport {\n bufferFromString,\n keccak256,\n randomBytes,\n scrypt,\n stringFromBuffer,\n decryptJsonWalletData,\n encryptJsonWalletData,\n} from '@fuel-ts/crypto';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\nimport { hexlify } from '@fuel-ts/utils';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport type KeystoreWallet = {\n id: string;\n version: number;\n address: string;\n crypto: KeystoreCrypto;\n};\n\ntype KeystoreCrypto = {\n cipher: 'aes-128-ctr';\n cipherparams: { iv: string };\n ciphertext: string;\n kdf: 'scrypt';\n mac: string;\n kdfparams: KDFParams;\n};\n\ntype KDFParams = {\n dklen: number;\n n: number;\n p: number;\n r: number;\n salt: string;\n};\n\n// Same values used in the Rust SDK\nexport const DEFAULT_KDF_PARAMS_LOG_N = 13;\nexport const DEFAULT_KDF_PARAMS_R = 8;\nexport const DEFAULT_KDF_PARAMS_P = 1;\nexport const DEFAULT_KEY_SIZE = 32;\nexport const DEFAULT_IV_SIZE = 16;\n\n/**\n * Removes the '0x' prefix from a hexadecimal string.\n * If the prefix does not exist, it returns the original string.\n */\nexport const removeHexPrefix = (hexString: string) => {\n if (/^0x/.test(hexString)) {\n return hexString.slice(2);\n }\n\n return hexString;\n};\n\nexport async function encryptKeystoreWallet(\n privateKey: string,\n address: string | AbstractAddress,\n password: string\n): Promise<string> {\n // Convert the hexlified private key string to a Buffer.\n const privateKeyBuffer = bufferFromString(removeHexPrefix(privateKey), 'hex');\n const ownerAddress = Address.fromAddressOrString(address);\n // Generate a random salt.\n const salt = randomBytes(DEFAULT_KEY_SIZE);\n\n const key = scrypt({\n password: bufferFromString(password),\n salt,\n dklen: DEFAULT_KEY_SIZE,\n n: 2 ** DEFAULT_KDF_PARAMS_LOG_N,\n r: DEFAULT_KDF_PARAMS_R,\n p: DEFAULT_KDF_PARAMS_P,\n });\n\n // Encrypt the private key using AES-128-CTR.\n const iv = randomBytes(DEFAULT_IV_SIZE);\n\n const ciphertext = await encryptJsonWalletData(privateKeyBuffer, key, iv);\n\n const data = Uint8Array.from([...key.subarray(16, 32), ...ciphertext]);\n\n // Calculate the MAC.\n const macHashUint8Array = keccak256(data);\n\n const mac = stringFromBuffer(macHashUint8Array, 'hex');\n\n // Construct keystore.\n const keystore: KeystoreWallet = {\n id: uuidv4(),\n version: 3,\n address: removeHexPrefix(ownerAddress.toHexString()),\n crypto: {\n cipher: 'aes-128-ctr',\n mac,\n cipherparams: { iv: stringFromBuffer(iv, 'hex') },\n ciphertext: stringFromBuffer(ciphertext, 'hex'),\n kdf: 'scrypt',\n kdfparams: {\n dklen: DEFAULT_KEY_SIZE,\n n: 2 ** DEFAULT_KDF_PARAMS_LOG_N,\n p: DEFAULT_KDF_PARAMS_P,\n r: DEFAULT_KDF_PARAMS_R,\n salt: stringFromBuffer(salt, 'hex'),\n },\n },\n };\n\n return JSON.stringify(keystore);\n}\n\nexport async function decryptKeystoreWallet(jsonWallet: string, password: string): Promise<string> {\n const keystoreWallet = JSON.parse(jsonWallet) as KeystoreWallet;\n\n // Extract the parameters needed for decryption.\n const {\n crypto: {\n mac,\n ciphertext,\n cipherparams: { iv },\n kdfparams: { dklen, n, r, p, salt },\n },\n } = keystoreWallet;\n\n const ciphertextBuffer = bufferFromString(ciphertext, 'hex');\n const ivBuffer = bufferFromString(iv, 'hex');\n const saltBuffer = bufferFromString(salt, 'hex');\n\n const passwordBuffer = bufferFromString(password);\n\n const key = scrypt({\n password: passwordBuffer,\n salt: saltBuffer,\n n,\n p,\n r,\n dklen,\n });\n\n // Verify the MAC. It should be the Keccak-256 hash of the concatenation of the second half of the derived key and the ciphertext.\n const data = Uint8Array.from([...key.subarray(16, 32), ...ciphertextBuffer]);\n\n const macHashUint8Array = keccak256(data);\n\n const macHash = stringFromBuffer(macHashUint8Array, 'hex');\n\n if (mac !== macHash) {\n throw new FuelError(\n ErrorCode.INVALID_PASSWORD,\n 'Failed to decrypt the keystore wallet, the provided password is incorrect.'\n );\n }\n\n // Decrypt the private key.\n const buffer = await decryptJsonWalletData(ciphertextBuffer, key, ivBuffer);\n\n const privateKey = hexlify(buffer);\n\n return privateKey;\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { sha256 } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { bn, toBytes, toHex } from '@fuel-ts/math';\nimport { arrayify, hexlify, concat } from '@fuel-ts/utils';\nimport { toBeHex, dataSlice, encodeBase58, decodeBase58, computeHmac, ripemd160 } from 'ethers';\n\nimport { Mnemonic } from '../mnemonic';\nimport { Signer } from '../signer';\n\n// \"Bitcoin seed\"\nconst HARDENED_INDEX = 0x80000000;\n\n// 4 byte: version bytes (mainnet: 0x0488B21E public, 0x0488ADE4 private; testnet: 0x043587CF public, 0x04358394 private)\nconst MainnetPRV = hexlify('0x0488ade4');\nconst MainnetPUB = hexlify('0x0488b21e');\nconst TestnetPRV = hexlify('0x04358394');\nconst TestnetPUB = hexlify('0x043587cf');\n\nfunction base58check(data: Uint8Array): string {\n return encodeBase58(concat([data, dataSlice(sha256(sha256(data)), 0, 4)]));\n}\n\nfunction getExtendedKeyPrefix(isPublic: boolean = false, testnet: boolean = false) {\n if (isPublic) {\n return testnet ? TestnetPUB : MainnetPUB;\n }\n return testnet ? TestnetPRV : MainnetPRV;\n}\n\nfunction isPublicExtendedKey(extendedKey: Uint8Array) {\n return [MainnetPUB, TestnetPUB].includes(hexlify(extendedKey.slice(0, 4)));\n}\n\nfunction isValidExtendedKey(extendedKey: Uint8Array) {\n return [MainnetPRV, TestnetPRV, MainnetPUB, TestnetPUB].includes(\n hexlify(extendedKey.slice(0, 4))\n );\n}\n\nfunction parsePath(path: string, depth: number = 0) {\n const components = path.split('/');\n\n if (components.length === 0 || (components[0] === 'm' && depth !== 0)) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, `invalid path - ${path}`);\n }\n\n if (components[0] === 'm') {\n components.shift();\n }\n\n return components.map((p) =>\n ~p.indexOf(`'`) ? parseInt(p, 10) + HARDENED_INDEX : parseInt(p, 10)\n );\n}\n\ntype HDWalletConfig = {\n privateKey?: BytesLike;\n publicKey?: BytesLike;\n chainCode: BytesLike;\n depth?: number;\n index?: number;\n parentFingerprint?: string;\n};\n\nclass HDWallet {\n depth: number = 0;\n index: number = 0;\n fingerprint: string = hexlify('0x00000000');\n parentFingerprint: string = hexlify('0x00000000');\n privateKey?: string;\n publicKey: string;\n chainCode: BytesLike;\n\n /**\n * HDWallet is a implementation of the BIP-0044 and BIP-0032, Multi-Account Hierarchy for Deterministic Wallets\n *\n * @param config - Wallet configurations\n */\n constructor(config: HDWalletConfig) {\n // TODO: set some asserts here\n\n if (config.privateKey) {\n const signer = new Signer(config.privateKey);\n this.publicKey = hexlify(signer.compressedPublicKey);\n this.privateKey = hexlify(config.privateKey);\n } else {\n if (!config.publicKey) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n 'Both public and private Key cannot be missing. At least one should be provided.'\n );\n }\n this.publicKey = hexlify(config.publicKey);\n }\n\n this.parentFingerprint = config.parentFingerprint || this.parentFingerprint;\n this.fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4);\n this.depth = config.depth || this.depth;\n this.index = config.index || this.index;\n this.chainCode = config.chainCode;\n }\n\n get extendedKey() {\n return this.toExtendedKey();\n }\n\n /**\n * Derive the current HDWallet instance navigating only on the index.\n * `Ex.: m/44'/0 -> Ex.: m/44'/1 -> m/44'/2`. [Learn more](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)\n *\n * @param index - Index of the child HDWallet.\n * @returns A new instance of HDWallet on the derived index\n */\n deriveIndex(index: number) {\n const privateKey = this.privateKey && arrayify(this.privateKey);\n const publicKey = arrayify(this.publicKey);\n const chainCode = arrayify(this.chainCode);\n const data = new Uint8Array(37);\n\n if (index & HARDENED_INDEX) {\n if (!privateKey) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n 'Cannot derive a hardened index without a private Key.'\n );\n }\n\n // 33 bytes: 0x00 || private key\n data.set(privateKey, 1);\n } else {\n data.set(arrayify(this.publicKey));\n }\n\n // child number: ser32(i)\n data.set(toBytes(index, 4), 33);\n\n const bytes = arrayify(computeHmac('sha512', chainCode, data));\n const IL = bytes.slice(0, 32);\n const IR = bytes.slice(32);\n\n if (privateKey) {\n const N = '0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141';\n // Child key ki is parse256(IL) + kpar (mod n).\n const ki = bn(IL).add(privateKey).mod(N).toBytes(32);\n\n return new HDWallet({\n privateKey: ki,\n chainCode: IR,\n index,\n depth: this.depth + 1,\n parentFingerprint: this.fingerprint,\n });\n }\n\n const signer = new Signer(hexlify(IL));\n const Ki = signer.addPoint(publicKey);\n\n return new HDWallet({\n publicKey: Ki,\n chainCode: IR,\n index,\n depth: this.depth + 1,\n parentFingerprint: this.fingerprint,\n });\n }\n\n /**\n * Derive the current HDWallet instance to the path. [Learn more](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)\n *\n * @param path - The string representation of the child HDWallet. `Ex.: m/44'/0'/0'/0/0`\n * @returns A new instance of HDWallet on the derived path\n */\n derivePath(path: string) {\n const paths = parsePath(path, this.depth);\n\n return paths.reduce((hdwallet, index) => hdwallet.deriveIndex(index), <HDWallet>this);\n }\n\n /**\n * Get the extendKey as defined on BIP-32 from the provided seed\n *\n * @param isPublic - enable to export public extendedKey, it not required when HDWallet didn't have the privateKey.\n * @param testnet - Inform if should use testnet or mainnet prefix, default value is true (`mainnet`).\n * @returns BIP-32 extended private key\n */\n toExtendedKey(isPublic: boolean = false, testnet: boolean = false): string {\n if (this.depth >= 256) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n `Exceeded max depth of 255. Current depth: ${this.depth}.`\n );\n }\n const prefix = getExtendedKeyPrefix(this.privateKey == null || isPublic, testnet);\n const depth = hexlify(Uint8Array.from([this.depth]));\n const parentFingerprint = this.parentFingerprint;\n const index = toHex(this.index, 4);\n // last 32 bites from the key\n const chainCode = this.chainCode;\n // first 32 bites from the key\n const key =\n this.privateKey != null && !isPublic ? concat(['0x00', this.privateKey]) : this.publicKey;\n const extendedKey = arrayify(concat([prefix, depth, parentFingerprint, index, chainCode, key]));\n\n return base58check(extendedKey);\n }\n\n /**\n * Create HDWallet instance from seed\n *\n * @param seed - Seed\n * @returns A new instance of HDWallet\n */\n static fromSeed(seed: string) {\n const masterKey = Mnemonic.masterKeysFromSeed(seed);\n\n return new HDWallet({\n chainCode: arrayify(masterKey.slice(32)),\n privateKey: arrayify(masterKey.slice(0, 32)),\n });\n }\n\n static fromExtendedKey(extendedKey: string) {\n const decoded = toBeHex(decodeBase58(extendedKey));\n const bytes = arrayify(decoded);\n const validChecksum = base58check(bytes.slice(0, 78)) === extendedKey;\n\n if (bytes.length !== 82 || !isValidExtendedKey(bytes)) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Provided key is not a valid extended key.');\n }\n if (!validChecksum) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Provided key has an invalid checksum.');\n }\n\n const depth = bytes[4];\n const parentFingerprint = hexlify(bytes.slice(5, 9));\n const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n const chainCode = hexlify(bytes.slice(13, 45));\n const key = bytes.slice(45, 78);\n\n if ((depth === 0 && parentFingerprint !== '0x00000000') || (depth === 0 && index !== 0)) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n 'Inconsistency detected: Depth is zero but fingerprint/index is non-zero.'\n );\n }\n\n if (isPublicExtendedKey(bytes)) {\n if (key[0] !== 3) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Invalid public extended key.');\n }\n\n return new HDWallet({\n publicKey: key,\n chainCode,\n index,\n depth,\n parentFingerprint,\n });\n }\n\n if (key[0] !== 0) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Invalid private extended key.');\n }\n\n return new HDWallet({\n privateKey: key.slice(1),\n chainCode,\n index,\n depth,\n parentFingerprint,\n });\n }\n}\n\nexport default HDWallet;\n","import { randomBytes } from '@fuel-ts/crypto';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { sha256 } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { arrayify, hexlify, concat } from '@fuel-ts/utils';\nimport { dataSlice, pbkdf2, computeHmac, encodeBase58 } from 'ethers';\n\nimport { english } from '../wordlists';\n\nimport type { MnemonicPhrase } from './utils';\nimport {\n entropyToMnemonicIndices,\n getWords,\n getPhrase,\n mnemonicWordsToEntropy,\n toUtf8Bytes,\n} from './utils';\n\n//\n// Constants\n//\n// \"Bitcoin seed\"\nconst MasterSecret = toUtf8Bytes('Bitcoin seed');\n// 4 byte: version bytes (mainnet: 0x0488B21E public, 0x0488ADE4 private; testnet: 0x043587CF public, 0x04358394 private)\nconst MainnetPRV = '0x0488ade4';\nconst TestnetPRV = '0x04358394';\nexport const MNEMONIC_SIZES = [12, 15, 18, 21, 24];\n\nfunction assertWordList(wordlist: Array<string>) {\n if (wordlist.length !== 2048) {\n throw new FuelError(\n ErrorCode.INVALID_WORD_LIST,\n `Expected word list length of 2048, but got ${wordlist.length}.`\n );\n }\n}\n\nfunction assertEntropy(entropy: BytesLike) {\n if (entropy.length % 4 !== 0 || entropy.length < 16 || entropy.length > 32) {\n throw new FuelError(\n ErrorCode.INVALID_ENTROPY,\n `Entropy should be between 16 and 32 bytes and a multiple of 4, but got ${entropy.length} bytes.`\n );\n }\n}\n\nfunction assertMnemonic(words: Array<string>) {\n if (!MNEMONIC_SIZES.includes(words.length)) {\n const errorMsg = `Invalid mnemonic size. Expected one of [${MNEMONIC_SIZES.join(\n ', '\n )}] words, but got ${words.length}.`;\n\n throw new FuelError(ErrorCode.INVALID_MNEMONIC, errorMsg);\n }\n}\n\nclass Mnemonic {\n wordlist: Array<string>;\n\n /**\n *\n * @param wordlist - Provide a wordlist with the list of words used to generate the mnemonic phrase. The default value is the English list.\n * @returns Mnemonic instance\n */\n constructor(wordlist: Array<string> = english) {\n this.wordlist = wordlist;\n\n assertWordList(this.wordlist);\n }\n\n /**\n *\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @returns Entropy hash\n */\n mnemonicToEntropy(phrase: MnemonicPhrase) {\n return Mnemonic.mnemonicToEntropy(phrase, this.wordlist);\n }\n\n /**\n *\n * @param entropy - Entropy source to the mnemonic phrase.\n * @returns Mnemonic phrase\n */\n entropyToMnemonic(entropy: BytesLike) {\n return Mnemonic.entropyToMnemonic(entropy, this.wordlist);\n }\n\n /**\n *\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @param wordlist - Provide a wordlist with the list of words used to generate the mnemonic phrase. The default value is the English list.\n * @returns Mnemonic phrase\n */\n static mnemonicToEntropy(phrase: MnemonicPhrase, wordlist: Array<string> = english): string {\n const words = getWords(phrase);\n\n assertMnemonic(words);\n\n return hexlify(mnemonicWordsToEntropy(words, wordlist));\n }\n\n /**\n * @param entropy - Entropy source to the mnemonic phrase.\n * @param testnet - Inform if should use testnet or mainnet prefix, default value is true (`mainnet`).\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static entropyToMnemonic(entropy: BytesLike, wordlist: Array<string> = english): string {\n const entropyBytes = arrayify(entropy);\n\n assertWordList(wordlist);\n assertEntropy(entropyBytes);\n\n return entropyToMnemonicIndices(entropyBytes)\n .map((i) => wordlist[i])\n .join(' ');\n }\n\n /**\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @param passphrase - Add additional security to protect the generated seed with a memorized passphrase. `Note: if the owner forgot the passphrase, all wallets and accounts derive from the phrase will be lost.`\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static mnemonicToSeed(phrase: MnemonicPhrase, passphrase: BytesLike = '') {\n assertMnemonic(getWords(phrase));\n\n const phraseBytes = toUtf8Bytes(getPhrase(phrase));\n const salt = toUtf8Bytes(`mnemonic${passphrase}`);\n\n return pbkdf2(phraseBytes, salt, 2048, 64, 'sha512');\n }\n\n /**\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @param passphrase - Add additional security to protect the generated seed with a memorized passphrase. `Note: if the owner forgot the passphrase, all wallets and accounts derive from the phrase will be lost.`\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static mnemonicToMasterKeys(phrase: MnemonicPhrase, passphrase: BytesLike = '') {\n const seed = Mnemonic.mnemonicToSeed(phrase, passphrase);\n return Mnemonic.masterKeysFromSeed(seed);\n }\n\n /**\n * Validates if given mnemonic is valid\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @returns true if phrase is a valid mnemonic\n */\n static isMnemonicValid(phrase: string) {\n const words = getWords(phrase);\n\n let i: number = 0;\n\n try {\n assertMnemonic(words);\n } catch {\n return false;\n }\n\n while (i < words.length) {\n if (Mnemonic.binarySearch(words[i]) === false) {\n return false;\n }\n i += 1;\n }\n\n return true;\n }\n\n static binarySearch(target: string): boolean {\n const words = english;\n let left: number = 0;\n let right: number = words.length - 1;\n\n while (left <= right) {\n const mid: number = Math.floor((left + right) / 2);\n\n if (words[mid] === target) {\n return true;\n }\n if (target < words[mid]) {\n right = mid - 1;\n } else {\n left = mid + 1;\n }\n }\n\n return false;\n }\n\n /**\n * @param seed - BIP39 seed\n * @param testnet - Inform if should use testnet or mainnet prefix, the default value is true (`mainnet`).\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static masterKeysFromSeed(seed: string): Uint8Array {\n const seedArray = arrayify(seed);\n\n if (seedArray.length < 16 || seedArray.length > 64) {\n throw new FuelError(\n ErrorCode.INVALID_SEED,\n `Seed length should be between 16 and 64 bytes, but received ${seedArray.length} bytes.`\n );\n }\n\n return arrayify(computeHmac('sha512', MasterSecret, seedArray));\n }\n\n /**\n * Get the extendKey as defined on BIP-32 from the provided seed\n *\n * @param seed - BIP39 seed\n * @param testnet - Inform if should use testnet or mainnet prefix, default value is true (`mainnet`).\n * @returns BIP-32 extended private key\n */\n static seedToExtendedKey(seed: string, testnet: boolean = false): string {\n const masterKey = Mnemonic.masterKeysFromSeed(seed);\n const prefix = arrayify(testnet ? TestnetPRV : MainnetPRV);\n const depth = '0x00';\n const fingerprint = '0x00000000';\n const index = '0x00000000';\n // last 32 bites from the key\n const chainCode = masterKey.slice(32);\n // first 32 bites from the key\n const privateKey = masterKey.slice(0, 32);\n const extendedKey = concat([\n prefix,\n depth,\n fingerprint,\n index,\n chainCode,\n concat(['0x00', privateKey]),\n ]);\n const checksum = dataSlice(sha256(sha256(extendedKey)), 0, 4);\n\n return encodeBase58(concat([extendedKey, checksum]));\n }\n\n /**\n * Create a new mnemonic using a randomly generated number as entropy.\n * As defined in BIP39, the entropy must be a multiple of 32 bits, and its size must be between 128 and 256 bits.\n * Therefore, the possible values for `strength` are 128, 160, 192, 224, and 256.\n * If not provided, the default entropy length will be set to 256 bits.\n * The return is a list of words that encodes the generated entropy.\n *\n *\n * @param size - Number of bytes used as an entropy\n * @param extraEntropy - Optional extra entropy to increase randomness\n * @returns A randomly generated mnemonic\n */\n static generate(size: number = 32, extraEntropy: BytesLike = '') {\n const entropy = extraEntropy\n ? sha256(concat([randomBytes(size), arrayify(extraEntropy)]))\n : randomBytes(size);\n return Mnemonic.entropyToMnemonic(entropy);\n }\n}\n\nexport default Mnemonic;\n","export const english = [\n 'abandon',\n 'ability',\n 'able',\n 'about',\n 'above',\n 'absent',\n 'absorb',\n 'abstract',\n 'absurd',\n 'abuse',\n 'access',\n 'accident',\n 'account',\n 'accuse',\n 'achieve',\n 'acid',\n 'acoustic',\n 'acquire',\n 'across',\n 'act',\n 'action',\n 'actor',\n 'actress',\n 'actual',\n 'adapt',\n 'add',\n 'addict',\n 'address',\n 'adjust',\n 'admit',\n 'adult',\n 'advance',\n 'advice',\n 'aerobic',\n 'affair',\n 'afford',\n 'afraid',\n 'again',\n 'age',\n 'agent',\n 'agree',\n 'ahead',\n 'aim',\n 'air',\n 'airport',\n 'aisle',\n 'alarm',\n 'album',\n 'alcohol',\n 'alert',\n 'alien',\n 'all',\n 'alley',\n 'allow',\n 'almost',\n 'alone',\n 'alpha',\n 'already',\n 'also',\n 'alter',\n 'always',\n 'amateur',\n 'amazing',\n 'among',\n 'amount',\n 'amused',\n 'analyst',\n 'anchor',\n 'ancient',\n 'anger',\n 'angle',\n 'angry',\n 'animal',\n 'ankle',\n 'announce',\n 'annual',\n 'another',\n 'answer',\n 'antenna',\n 'antique',\n 'anxiety',\n 'any',\n 'apart',\n 'apology',\n 'appear',\n 'apple',\n 'approve',\n 'april',\n 'arch',\n 'arctic',\n 'area',\n 'arena',\n 'argue',\n 'arm',\n 'armed',\n 'armor',\n 'army',\n 'around',\n 'arrange',\n 'arrest',\n 'arrive',\n 'arrow',\n 'art',\n 'artefact',\n 'artist',\n 'artwork',\n 'ask',\n 'aspect',\n 'assault',\n 'asset',\n 'assist',\n 'assume',\n 'asthma',\n 'athlete',\n 'atom',\n 'attack',\n 'attend',\n 'attitude',\n 'attract',\n 'auction',\n 'audit',\n 'august',\n 'aunt',\n 'author',\n 'auto',\n 'autumn',\n 'average',\n 'avocado',\n 'avoid',\n 'awake',\n 'aware',\n 'away',\n 'awesome',\n 'awful',\n 'awkward',\n 'axis',\n 'baby',\n 'bachelor',\n 'bacon',\n 'badge',\n 'bag',\n 'balance',\n 'balcony',\n 'ball',\n 'bamboo',\n 'banana',\n 'banner',\n 'bar',\n 'barely',\n 'bargain',\n 'barrel',\n 'base',\n 'basic',\n 'basket',\n 'battle',\n 'beach',\n 'bean',\n 'beauty',\n 'because',\n 'become',\n 'beef',\n 'before',\n 'begin',\n 'behave',\n 'behind',\n 'believe',\n 'below',\n 'belt',\n 'bench',\n 'benefit',\n 'best',\n 'betray',\n 'better',\n 'between',\n 'beyond',\n 'bicycle',\n 'bid',\n 'bike',\n 'bind',\n 'biology',\n 'bird',\n 'birth',\n 'bitter',\n 'black',\n 'blade',\n 'blame',\n 'blanket',\n 'blast',\n 'bleak',\n 'bless',\n 'blind',\n 'blood',\n 'blossom',\n 'blouse',\n 'blue',\n 'blur',\n 'blush',\n 'board',\n 'boat',\n 'body',\n 'boil',\n 'bomb',\n 'bone',\n 'bonus',\n 'book',\n 'boost',\n 'border',\n 'boring',\n 'borrow',\n 'boss',\n 'bottom',\n 'bounce',\n 'box',\n 'boy',\n 'bracket',\n 'brain',\n 'brand',\n 'brass',\n 'brave',\n 'bread',\n 'breeze',\n 'brick',\n 'bridge',\n 'brief',\n 'bright',\n 'bring',\n 'brisk',\n 'broccoli',\n 'broken',\n 'bronze',\n 'broom',\n 'brother',\n 'brown',\n 'brush',\n 'bubble',\n 'buddy',\n 'budget',\n 'buffalo',\n 'build',\n 'bulb',\n 'bulk',\n 'bullet',\n 'bundle',\n 'bunker',\n 'burden',\n 'burger',\n 'burst',\n 'bus',\n 'business',\n 'busy',\n 'butter',\n 'buyer',\n 'buzz',\n 'cabbage',\n 'cabin',\n 'cable',\n 'cactus',\n 'cage',\n 'cake',\n 'call',\n 'calm',\n 'camera',\n 'camp',\n 'can',\n 'canal',\n 'cancel',\n 'candy',\n 'cannon',\n 'canoe',\n 'canvas',\n 'canyon',\n 'capable',\n 'capital',\n 'captain',\n 'car',\n 'carbon',\n 'card',\n 'cargo',\n 'carpet',\n 'carry',\n 'cart',\n 'case',\n 'cash',\n 'casino',\n 'castle',\n 'casual',\n 'cat',\n 'catalog',\n 'catch',\n 'category',\n 'cattle',\n 'caught',\n 'cause',\n 'caution',\n 'cave',\n 'ceiling',\n 'celery',\n 'cement',\n 'census',\n 'century',\n 'cereal',\n 'certain',\n 'chair',\n 'chalk',\n 'champion',\n 'change',\n 'chaos',\n 'chapter',\n 'charge',\n 'chase',\n 'chat',\n 'cheap',\n 'check',\n 'cheese',\n 'chef',\n 'cherry',\n 'chest',\n 'chicken',\n 'chief',\n 'child',\n 'chimney',\n 'choice',\n 'choose',\n 'chronic',\n 'chuckle',\n 'chunk',\n 'churn',\n 'cigar',\n 'cinnamon',\n 'circle',\n 'citizen',\n 'city',\n 'civil',\n 'claim',\n 'clap',\n 'clarify',\n 'claw',\n 'clay',\n 'clean',\n 'clerk',\n 'clever',\n 'click',\n 'client',\n 'cliff',\n 'climb',\n 'clinic',\n 'clip',\n 'clock',\n 'clog',\n 'close',\n 'cloth',\n 'cloud',\n 'clown',\n 'club',\n 'clump',\n 'cluster',\n 'clutch',\n 'coach',\n 'coast',\n 'coconut',\n 'code',\n 'coffee',\n 'coil',\n 'coin',\n 'collect',\n 'color',\n 'column',\n 'combine',\n 'come',\n 'comfort',\n 'comic',\n 'common',\n 'company',\n 'concert',\n 'conduct',\n 'confirm',\n 'congress',\n 'connect',\n 'consider',\n 'control',\n 'convince',\n 'cook',\n 'cool',\n 'copper',\n 'copy',\n 'coral',\n 'core',\n 'corn',\n 'correct',\n 'cost',\n 'cotton',\n 'couch',\n 'country',\n 'couple',\n 'course',\n 'cousin',\n 'cover',\n 'coyote',\n 'crack',\n 'cradle',\n 'craft',\n 'cram',\n 'crane',\n 'crash',\n 'crater',\n 'crawl',\n 'crazy',\n 'cream',\n 'credit',\n 'creek',\n 'crew',\n 'cricket',\n 'crime',\n 'crisp',\n 'critic',\n 'crop',\n 'cross',\n 'crouch',\n 'crowd',\n 'crucial',\n 'cruel',\n 'cruise',\n 'crumble',\n 'crunch',\n 'crush',\n 'cry',\n 'crystal',\n 'cube',\n 'culture',\n 'cup',\n 'cupboard',\n 'curious',\n 'current',\n 'curtain',\n 'curve',\n 'cushion',\n 'custom',\n 'cute',\n 'cycle',\n 'dad',\n 'damage',\n 'damp',\n 'dance',\n 'danger',\n 'daring',\n 'dash',\n 'daughter',\n 'dawn',\n 'day',\n 'deal',\n 'debate',\n 'debris',\n 'decade',\n 'december',\n 'decide',\n 'decline',\n 'decorate',\n 'decrease',\n 'deer',\n 'defense',\n 'define',\n 'defy',\n 'degree',\n 'delay',\n 'deliver',\n 'demand',\n 'demise',\n 'denial',\n 'dentist',\n 'deny',\n 'depart',\n 'depend',\n 'deposit',\n 'depth',\n 'deputy',\n 'derive',\n 'describe',\n 'desert',\n 'design',\n 'desk',\n 'despair',\n 'destroy',\n 'detail',\n 'detect',\n 'develop',\n 'device',\n 'devote',\n 'diagram',\n 'dial',\n 'diamond',\n 'diary',\n 'dice',\n 'diesel',\n 'diet',\n 'differ',\n 'digital',\n 'dignity',\n 'dilemma',\n 'dinner',\n 'dinosaur',\n 'direct',\n 'dirt',\n 'disagree',\n 'discover',\n 'disease',\n 'dish',\n 'dismiss',\n 'disorder',\n 'display',\n 'distance',\n 'divert',\n 'divide',\n 'divorce',\n 'dizzy',\n 'doctor',\n 'document',\n 'dog',\n 'doll',\n 'dolphin',\n 'domain',\n 'donate',\n 'donkey',\n 'donor',\n 'door',\n 'dose',\n 'double',\n 'dove',\n 'draft',\n 'dragon',\n 'drama',\n 'drastic',\n 'draw',\n 'dream',\n 'dress',\n 'drift',\n 'drill',\n 'drink',\n 'drip',\n 'drive',\n 'drop',\n 'drum',\n 'dry',\n 'duck',\n 'dumb',\n 'dune',\n 'during',\n 'dust',\n 'dutch',\n 'duty',\n 'dwarf',\n 'dynamic',\n 'eager',\n 'eagle',\n 'early',\n 'earn',\n 'earth',\n 'easily',\n 'east',\n 'easy',\n 'echo',\n 'ecology',\n 'economy',\n 'edge',\n 'edit',\n 'educate',\n 'effort',\n 'egg',\n 'eight',\n 'either',\n 'elbow',\n 'elder',\n 'electric',\n 'elegant',\n 'element',\n 'elephant',\n 'elevator',\n 'elite',\n 'else',\n 'embark',\n 'embody',\n 'embrace',\n 'emerge',\n 'emotion',\n 'employ',\n 'empower',\n 'empty',\n 'enable',\n 'enact',\n 'end',\n 'endless',\n 'endorse',\n 'enemy',\n 'energy',\n 'enforce',\n 'engage',\n 'engine',\n 'enhance',\n 'enjoy',\n 'enlist',\n 'enough',\n 'enrich',\n 'enroll',\n 'ensure',\n 'enter',\n 'entire',\n 'entry',\n 'envelope',\n 'episode',\n 'equal',\n 'equip',\n 'era',\n 'erase',\n 'erode',\n 'erosion',\n 'error',\n 'erupt',\n 'escape',\n 'essay',\n 'essence',\n 'estate',\n 'eternal',\n 'ethics',\n 'evidence',\n 'evil',\n 'evoke',\n 'evolve',\n 'exact',\n 'example',\n 'excess',\n 'exchange',\n 'excite',\n 'exclude',\n 'excuse',\n 'execute',\n 'exercise',\n 'exhaust',\n 'exhibit',\n 'exile',\n 'exist',\n 'exit',\n 'exotic',\n 'expand',\n 'expect',\n 'expire',\n 'explain',\n 'expose',\n 'express',\n 'extend',\n 'extra',\n 'eye',\n 'eyebrow',\n 'fabric',\n 'face',\n 'faculty',\n 'fade',\n 'faint',\n 'faith',\n 'fall',\n 'false',\n 'fame',\n 'family',\n 'famous',\n 'fan',\n 'fancy',\n 'fantasy',\n 'farm',\n 'fashion',\n 'fat',\n 'fatal',\n 'father',\n 'fatigue',\n 'fault',\n 'favorite',\n 'feature',\n 'february',\n 'federal',\n 'fee',\n 'feed',\n 'feel',\n 'female',\n 'fence',\n 'festival',\n 'fetch',\n 'fever',\n 'few',\n 'fiber',\n 'fiction',\n 'field',\n 'figure',\n 'file',\n 'film',\n 'filter',\n 'final',\n 'find',\n 'fine',\n 'finger',\n 'finish',\n 'fire',\n 'firm',\n 'first',\n 'fiscal',\n 'fish',\n 'fit',\n 'fitness',\n 'fix',\n 'flag',\n 'flame',\n 'flash',\n 'flat',\n 'flavor',\n 'flee',\n 'flight',\n 'flip',\n 'float',\n 'flock',\n 'floor',\n 'flower',\n 'fluid',\n 'flush',\n 'fly',\n 'foam',\n 'focus',\n 'fog',\n 'foil',\n 'fold',\n 'follow',\n 'food',\n 'foot',\n 'force',\n 'forest',\n 'forget',\n 'fork',\n 'fortune',\n 'forum',\n 'forward',\n 'fossil',\n 'foster',\n 'found',\n 'fox',\n 'fragile',\n 'frame',\n 'frequent',\n 'fresh',\n 'friend',\n 'fringe',\n 'frog',\n 'front',\n 'frost',\n 'frown',\n 'frozen',\n 'fruit',\n 'fuel',\n 'fun',\n 'funny',\n 'furnace',\n 'fury',\n 'future',\n 'gadget',\n 'gain',\n 'galaxy',\n 'gallery',\n 'game',\n 'gap',\n 'garage',\n 'garbage',\n 'garden',\n 'garlic',\n 'garment',\n 'gas',\n 'gasp',\n 'gate',\n 'gather',\n 'gauge',\n 'gaze',\n 'general',\n 'genius',\n 'genre',\n 'gentle',\n 'genuine',\n 'gesture',\n 'ghost',\n 'giant',\n 'gift',\n 'giggle',\n 'ginger',\n 'giraffe',\n 'girl',\n 'give',\n 'glad',\n 'glance',\n 'glare',\n 'glass',\n 'glide',\n 'glimpse',\n 'globe',\n 'gloom',\n 'glory',\n 'glove',\n 'glow',\n 'glue',\n 'goat',\n 'goddess',\n 'gold',\n 'good',\n 'goose',\n 'gorilla',\n 'gospel',\n 'gossip',\n 'govern',\n 'gown',\n 'grab',\n 'grace',\n 'grain',\n 'grant',\n 'grape',\n 'grass',\n 'gravity',\n 'great',\n 'green',\n 'grid',\n 'grief',\n 'grit',\n 'grocery',\n 'group',\n 'grow',\n 'grunt',\n 'guard',\n 'guess',\n 'guide',\n 'guilt',\n 'guitar',\n 'gun',\n 'gym',\n 'habit',\n 'hair',\n 'half',\n 'hammer',\n 'hamster',\n 'hand',\n 'happy',\n 'harbor',\n 'hard',\n 'harsh',\n 'harvest',\n 'hat',\n 'have',\n 'hawk',\n 'hazard',\n 'head',\n 'health',\n 'heart',\n 'heavy',\n 'hedgehog',\n 'height',\n 'hello',\n 'helmet',\n 'help',\n 'hen',\n 'hero',\n 'hidden',\n 'high',\n 'hill',\n 'hint',\n 'hip',\n 'hire',\n 'history',\n 'hobby',\n 'hockey',\n 'hold',\n 'hole',\n 'holiday',\n 'hollow',\n 'home',\n 'honey',\n 'hood',\n 'hope',\n 'horn',\n 'horror',\n 'horse',\n 'hospital',\n 'host',\n 'hotel',\n 'hour',\n 'hover',\n 'hub',\n 'huge',\n 'human',\n 'humble',\n 'humor',\n 'hundred',\n 'hungry',\n 'hunt',\n 'hurdle',\n 'hurry',\n 'hurt',\n 'husband',\n 'hybrid',\n 'ice',\n 'icon',\n 'idea',\n 'identify',\n 'idle',\n 'ignore',\n 'ill',\n 'illegal',\n 'illness',\n 'image',\n 'imitate',\n 'immense',\n 'immune',\n 'impact',\n 'impose',\n 'improve',\n 'impulse',\n 'inch',\n 'include',\n 'income',\n 'increase',\n 'index',\n 'indicate',\n 'indoor',\n 'industry',\n 'infant',\n 'inflict',\n 'inform',\n 'inhale',\n 'inherit',\n 'initial',\n 'inject',\n 'injury',\n 'inmate',\n 'inner',\n 'innocent',\n 'input',\n 'inquiry',\n 'insane',\n 'insect',\n 'inside',\n 'inspire',\n 'install',\n 'intact',\n 'interest',\n 'into',\n 'invest',\n 'invite',\n 'involve',\n 'iron',\n 'island',\n 'isolate',\n 'issue',\n 'item',\n 'ivory',\n 'jacket',\n 'jaguar',\n 'jar',\n 'jazz',\n 'jealous',\n 'jeans',\n 'jelly',\n 'jewel',\n 'job',\n 'join',\n 'joke',\n 'journey',\n 'joy',\n 'judge',\n 'juice',\n 'jump',\n 'jungle',\n 'junior',\n 'junk',\n 'just',\n 'kangaroo',\n 'keen',\n 'keep',\n 'ketchup',\n 'key',\n 'kick',\n 'kid',\n 'kidney',\n 'kind',\n 'kingdom',\n 'kiss',\n 'kit',\n 'kitchen',\n 'kite',\n 'kitten',\n 'kiwi',\n 'knee',\n 'knife',\n 'knock',\n 'know',\n 'lab',\n 'label',\n 'labor',\n 'ladder',\n 'lady',\n 'lake',\n 'lamp',\n 'language',\n 'laptop',\n 'large',\n 'later',\n 'latin',\n 'laugh',\n 'laundry',\n 'lava',\n 'law',\n 'lawn',\n 'lawsuit',\n 'layer',\n 'lazy',\n 'leader',\n 'leaf',\n 'learn',\n 'leave',\n 'lecture',\n 'left',\n 'leg',\n 'legal',\n 'legend',\n 'leisure',\n 'lemon',\n 'lend',\n 'length',\n 'lens',\n 'leopard',\n 'lesson',\n 'letter',\n 'level',\n 'liar',\n 'liberty',\n 'library',\n 'license',\n 'life',\n 'lift',\n 'light',\n 'like',\n 'limb',\n 'limit',\n 'link',\n 'lion',\n 'liquid',\n 'list',\n 'little',\n 'live',\n 'lizard',\n 'load',\n 'loan',\n 'lobster',\n 'local',\n 'lock',\n 'logic',\n 'lonely',\n 'long',\n 'loop',\n 'lottery',\n 'loud',\n 'lounge',\n 'love',\n 'loyal',\n 'lucky',\n 'luggage',\n 'lumber',\n 'lunar',\n 'lunch',\n 'luxury',\n 'lyrics',\n 'machine',\n 'mad',\n 'magic',\n 'magnet',\n 'maid',\n 'mail',\n 'main',\n 'major',\n 'make',\n 'mammal',\n 'man',\n 'manage',\n 'mandate',\n 'mango',\n 'mansion',\n 'manual',\n 'maple',\n 'marble',\n 'march',\n 'margin',\n 'marine',\n 'market',\n 'marriage',\n 'mask',\n 'mass',\n 'master',\n 'match',\n 'material',\n 'math',\n 'matrix',\n 'matter',\n 'maximum',\n 'maze',\n 'meadow',\n 'mean',\n 'measure',\n 'meat',\n 'mechanic',\n 'medal',\n 'media',\n 'melody',\n 'melt',\n 'member',\n 'memory',\n 'mention',\n 'menu',\n 'mercy',\n 'merge',\n 'merit',\n 'merry',\n 'mesh',\n 'message',\n 'metal',\n 'method',\n 'middle',\n 'midnight',\n 'milk',\n 'million',\n 'mimic',\n 'mind',\n 'minimum',\n 'minor',\n 'minute',\n 'miracle',\n 'mirror',\n 'misery',\n 'miss',\n 'mistake',\n 'mix',\n 'mixed',\n 'mixture',\n 'mobile',\n 'model',\n 'modify',\n 'mom',\n 'moment',\n 'monitor',\n 'monkey',\n 'monster',\n 'month',\n 'moon',\n 'moral',\n 'more',\n 'morning',\n 'mosquito',\n 'mother',\n 'motion',\n 'motor',\n 'mountain',\n 'mouse',\n 'move',\n 'movie',\n 'much',\n 'muffin',\n 'mule',\n 'multiply',\n 'muscle',\n 'museum',\n 'mushroom',\n 'music',\n 'must',\n 'mutual',\n 'myself',\n 'mystery',\n 'myth',\n 'naive',\n 'name',\n 'napkin',\n 'narrow',\n 'nasty',\n 'nation',\n 'nature',\n 'near',\n 'neck',\n 'need',\n 'negative',\n 'neglect',\n 'neither',\n 'nephew',\n 'nerve',\n 'nest',\n 'net',\n 'network',\n 'neutral',\n 'never',\n 'news',\n 'next',\n 'nice',\n 'night',\n 'noble',\n 'noise',\n 'nominee',\n 'noodle',\n 'normal',\n 'north',\n 'nose',\n 'notable',\n 'note',\n 'nothing',\n 'notice',\n 'novel',\n 'now',\n 'nuclear',\n 'number',\n 'nurse',\n 'nut',\n 'oak',\n 'obey',\n 'object',\n 'oblige',\n 'obscure',\n 'observe',\n 'obtain',\n 'obvious',\n 'occur',\n 'ocean',\n 'october',\n 'odor',\n 'off',\n 'offer',\n 'office',\n 'often',\n 'oil',\n 'okay',\n 'old',\n 'olive',\n 'olympic',\n 'omit',\n 'once',\n 'one',\n 'onion',\n 'online',\n 'only',\n 'open',\n 'opera',\n 'opinion',\n 'oppose',\n 'option',\n 'orange',\n 'orbit',\n 'orchard',\n 'order',\n 'ordinary',\n 'organ',\n 'orient',\n 'original',\n 'orphan',\n 'ostrich',\n 'other',\n 'outdoor',\n 'outer',\n 'output',\n 'outside',\n 'oval',\n 'oven',\n 'over',\n 'own',\n 'owner',\n 'oxygen',\n 'oyster',\n 'ozone',\n 'pact',\n 'paddle',\n 'page',\n 'pair',\n 'palace',\n 'palm',\n 'panda',\n 'panel',\n 'panic',\n 'panther',\n 'paper',\n 'parade',\n 'parent',\n 'park',\n 'parrot',\n 'party',\n 'pass',\n 'patch',\n 'path',\n 'patient',\n 'patrol',\n 'pattern',\n 'pause',\n 'pave',\n 'payment',\n 'peace',\n 'peanut',\n 'pear',\n 'peasant',\n 'pelican',\n 'pen',\n 'penalty',\n 'pencil',\n 'people',\n 'pepper',\n 'perfect',\n 'permit',\n 'person',\n 'pet',\n 'phone',\n 'photo',\n 'phrase',\n 'physical',\n 'piano',\n 'picnic',\n 'picture',\n 'piece',\n 'pig',\n 'pigeon',\n 'pill',\n 'pilot',\n 'pink',\n 'pioneer',\n 'pipe',\n 'pistol',\n 'pitch',\n 'pizza',\n 'place',\n 'planet',\n 'plastic',\n 'plate',\n 'play',\n 'please',\n 'pledge',\n 'pluck',\n 'plug',\n 'plunge',\n 'poem',\n 'poet',\n 'point',\n 'polar',\n 'pole',\n 'police',\n 'pond',\n 'pony',\n 'pool',\n 'popular',\n 'portion',\n 'position',\n 'possible',\n 'post',\n 'potato',\n 'pottery',\n 'poverty',\n 'powder',\n 'power',\n 'practice',\n 'praise',\n 'predict',\n 'prefer',\n 'prepare',\n 'present',\n 'pretty',\n 'prevent',\n 'price',\n 'pride',\n 'primary',\n 'print',\n 'priority',\n 'prison',\n 'private',\n 'prize',\n 'problem',\n 'process',\n 'produce',\n 'profit',\n 'program',\n 'project',\n 'promote',\n 'proof',\n 'property',\n 'prosper',\n 'protect',\n 'proud',\n 'provide',\n 'public',\n 'pudding',\n 'pull',\n 'pulp',\n 'pulse',\n 'pumpkin',\n 'punch',\n 'pupil',\n 'puppy',\n 'purchase',\n 'purity',\n 'purpose',\n 'purse',\n 'push',\n 'put',\n 'puzzle',\n 'pyramid',\n 'quality',\n 'quantum',\n 'quarter',\n 'question',\n 'quick',\n 'quit',\n 'quiz',\n 'quote',\n 'rabbit',\n 'raccoon',\n 'race',\n 'rack',\n 'radar',\n 'radio',\n 'rail',\n 'rain',\n 'raise',\n 'rally',\n 'ramp',\n 'ranch',\n 'random',\n 'range',\n 'rapid',\n 'rare',\n 'rate',\n 'rather',\n 'raven',\n 'raw',\n 'razor',\n 'ready',\n 'real',\n 'reason',\n 'rebel',\n 'rebuild',\n 'recall',\n 'receive',\n 'recipe',\n 'record',\n 'recycle',\n 'reduce',\n 'reflect',\n 'reform',\n 'refuse',\n 'region',\n 'regret',\n 'regular',\n 'reject',\n 'relax',\n 'release',\n 'relief',\n 'rely',\n 'remain',\n 'remember',\n 'remind',\n 'remove',\n 'render',\n 'renew',\n 'rent',\n 'reopen',\n 'repair',\n 'repeat',\n 'replace',\n 'report',\n 'require',\n 'rescue',\n 'resemble',\n 'resist',\n 'resource',\n 'response',\n 'result',\n 'retire',\n 'retreat',\n 'return',\n 'reunion',\n 'reveal',\n 'review',\n 'reward',\n 'rhythm',\n 'rib',\n 'ribbon',\n 'rice',\n 'rich',\n 'ride',\n 'ridge',\n 'rifle',\n 'right',\n 'rigid',\n 'ring',\n 'riot',\n 'ripple',\n 'risk',\n 'ritual',\n 'rival',\n 'river',\n 'road',\n 'roast',\n 'robot',\n 'robust',\n 'rocket',\n 'romance',\n 'roof',\n 'rookie',\n 'room',\n 'rose',\n 'rotate',\n 'rough',\n 'round',\n 'route',\n 'royal',\n 'rubber',\n 'rude',\n 'rug',\n 'rule',\n 'run',\n 'runway',\n 'rural',\n 'sad',\n 'saddle',\n 'sadness',\n 'safe',\n 'sail',\n 'salad',\n 'salmon',\n 'salon',\n 'salt',\n 'salute',\n 'same',\n 'sample',\n 'sand',\n 'satisfy',\n 'satoshi',\n 'sauce',\n 'sausage',\n 'save',\n 'say',\n 'scale',\n 'scan',\n 'scare',\n 'scatter',\n 'scene',\n 'scheme',\n 'school',\n 'science',\n 'scissors',\n 'scorpion',\n 'scout',\n 'scrap',\n 'screen',\n 'script',\n 'scrub',\n 'sea',\n 'search',\n 'season',\n 'seat',\n 'second',\n 'secret',\n 'section',\n 'security',\n 'seed',\n 'seek',\n 'segment',\n 'select',\n 'sell',\n 'seminar',\n 'senior',\n 'sense',\n 'sentence',\n 'series',\n 'service',\n 'session',\n 'settle',\n 'setup',\n 'seven',\n 'shadow',\n 'shaft',\n 'shallow',\n 'share',\n 'shed',\n 'shell',\n 'sheriff',\n 'shield',\n 'shift',\n 'shine',\n 'ship',\n 'shiver',\n 'shock',\n 'shoe',\n 'shoot',\n 'shop',\n 'short',\n 'shoulder',\n 'shove',\n 'shrimp',\n 'shrug',\n 'shuffle',\n 'shy',\n 'sibling',\n 'sick',\n 'side',\n 'siege',\n 'sight',\n 'sign',\n 'silent',\n 'silk',\n 'silly',\n 'silver',\n 'similar',\n 'simple',\n 'since',\n 'sing',\n 'siren',\n 'sister',\n 'situate',\n 'six',\n 'size',\n 'skate',\n 'sketch',\n 'ski',\n 'skill',\n 'skin',\n 'skirt',\n 'skull',\n 'slab',\n 'slam',\n 'sleep',\n 'slender',\n 'slice',\n 'slide',\n 'slight',\n 'slim',\n 'slogan',\n 'slot',\n 'slow',\n 'slush',\n 'small',\n 'smart',\n 'smile',\n 'smoke',\n 'smooth',\n 'snack',\n 'snake',\n 'snap',\n 'sniff',\n 'snow',\n 'soap',\n 'soccer',\n 'social',\n 'sock',\n 'soda',\n 'soft',\n 'solar',\n 'soldier',\n 'solid',\n 'solution',\n 'solve',\n 'someone',\n 'song',\n 'soon',\n 'sorry',\n 'sort',\n 'soul',\n 'sound',\n 'soup',\n 'source',\n 'south',\n 'space',\n 'spare',\n 'spatial',\n 'spawn',\n 'speak',\n 'special',\n 'speed',\n 'spell',\n 'spend',\n 'sphere',\n 'spice',\n 'spider',\n 'spike',\n 'spin',\n 'spirit',\n 'split',\n 'spoil',\n 'sponsor',\n 'spoon',\n 'sport',\n 'spot',\n 'spray',\n 'spread',\n 'spring',\n 'spy',\n 'square',\n 'squeeze',\n 'squirrel',\n 'stable',\n 'stadium',\n 'staff',\n 'stage',\n 'stairs',\n 'stamp',\n 'stand',\n 'start',\n 'state',\n 'stay',\n 'steak',\n 'steel',\n 'stem',\n 'step',\n 'stereo',\n 'stick',\n 'still',\n 'sting',\n 'stock',\n 'stomach',\n 'stone',\n 'stool',\n 'story',\n 'stove',\n 'strategy',\n 'street',\n 'strike',\n 'strong',\n 'struggle',\n 'student',\n 'stuff',\n 'stumble',\n 'style',\n 'subject',\n 'submit',\n 'subway',\n 'success',\n 'such',\n 'sudden',\n 'suffer',\n 'sugar',\n 'suggest',\n 'suit',\n 'summer',\n 'sun',\n 'sunny',\n 'sunset',\n 'super',\n 'supply',\n 'supreme',\n 'sure',\n 'surface',\n 'surge',\n 'surprise',\n 'surround',\n 'survey',\n 'suspect',\n 'sustain',\n 'swallow',\n 'swamp',\n 'swap',\n 'swarm',\n 'swear',\n 'sweet',\n 'swift',\n 'swim',\n 'swing',\n 'switch',\n 'sword',\n 'symbol',\n 'symptom',\n 'syrup',\n 'system',\n 'table',\n 'tackle',\n 'tag',\n 'tail',\n 'talent',\n 'talk',\n 'tank',\n 'tape',\n 'target',\n 'task',\n 'taste',\n 'tattoo',\n 'taxi',\n 'teach',\n 'team',\n 'tell',\n 'ten',\n 'tenant',\n 'tennis',\n 'tent',\n 'term',\n 'test',\n 'text',\n 'thank',\n 'that',\n 'theme',\n 'then',\n 'theory',\n 'there',\n 'they',\n 'thing',\n 'this',\n 'thought',\n 'three',\n 'thrive',\n 'throw',\n 'thumb',\n 'thunder',\n 'ticket',\n 'tide',\n 'tiger',\n 'tilt',\n 'timber',\n 'time',\n 'tiny',\n 'tip',\n 'tired',\n 'tissue',\n 'title',\n 'toast',\n 'tobacco',\n 'today',\n 'toddler',\n 'toe',\n 'together',\n 'toilet',\n 'token',\n 'tomato',\n 'tomorrow',\n 'tone',\n 'tongue',\n 'tonight',\n 'tool',\n 'tooth',\n 'top',\n 'topic',\n 'topple',\n 'torch',\n 'tornado',\n 'tortoise',\n 'toss',\n 'total',\n 'tourist',\n 'toward',\n 'tower',\n 'town',\n 'toy',\n 'track',\n 'trade',\n 'traffic',\n 'tragic',\n 'train',\n 'transfer',\n 'trap',\n 'trash',\n 'travel',\n 'tray',\n 'treat',\n 'tree',\n 'trend',\n 'trial',\n 'tribe',\n 'trick',\n 'trigger',\n 'trim',\n 'trip',\n 'trophy',\n 'trouble',\n 'truck',\n 'true',\n 'truly',\n 'trumpet',\n 'trust',\n 'truth',\n 'try',\n 'tube',\n 'tuition',\n 'tumble',\n 'tuna',\n 'tunnel',\n 'turkey',\n 'turn',\n 'turtle',\n 'twelve',\n 'twenty',\n 'twice',\n 'twin',\n 'twist',\n 'two',\n 'type',\n 'typical',\n 'ugly',\n 'umbrella',\n 'unable',\n 'unaware',\n 'uncle',\n 'uncover',\n 'under',\n 'undo',\n 'unfair',\n 'unfold',\n 'unhappy',\n 'uniform',\n 'unique',\n 'unit',\n 'universe',\n 'unknown',\n 'unlock',\n 'until',\n 'unusual',\n 'unveil',\n 'update',\n 'upgrade',\n 'uphold',\n 'upon',\n 'upper',\n 'upset',\n 'urban',\n 'urge',\n 'usage',\n 'use',\n 'used',\n 'useful',\n 'useless',\n 'usual',\n 'utility',\n 'vacant',\n 'vacuum',\n 'vague',\n 'valid',\n 'valley',\n 'valve',\n 'van',\n 'vanish',\n 'vapor',\n 'various',\n 'vast',\n 'vault',\n 'vehicle',\n 'velvet',\n 'vendor',\n 'venture',\n 'venue',\n 'verb',\n 'verify',\n 'version',\n 'very',\n 'vessel',\n 'veteran',\n 'viable',\n 'vibrant',\n 'vicious',\n 'victory',\n 'video',\n 'view',\n 'village',\n 'vintage',\n 'violin',\n 'virtual',\n 'virus',\n 'visa',\n 'visit',\n 'visual',\n 'vital',\n 'vivid',\n 'vocal',\n 'voice',\n 'void',\n 'volcano',\n 'volume',\n 'vote',\n 'voyage',\n 'wage',\n 'wagon',\n 'wait',\n 'walk',\n 'wall',\n 'walnut',\n 'want',\n 'warfare',\n 'warm',\n 'warrior',\n 'wash',\n 'wasp',\n 'waste',\n 'water',\n 'wave',\n 'way',\n 'wealth',\n 'weapon',\n 'wear',\n 'weasel',\n 'weather',\n 'web',\n 'wedding',\n 'weekend',\n 'weird',\n 'welcome',\n 'west',\n 'wet',\n 'whale',\n 'what',\n 'wheat',\n 'wheel',\n 'when',\n 'where',\n 'whip',\n 'whisper',\n 'wide',\n 'width',\n 'wife',\n 'wild',\n 'will',\n 'win',\n 'window',\n 'wine',\n 'wing',\n 'wink',\n 'winner',\n 'winter',\n 'wire',\n 'wisdom',\n 'wise',\n 'wish',\n 'witness',\n 'wolf',\n 'woman',\n 'wonder',\n 'wood',\n 'wool',\n 'word',\n 'work',\n 'world',\n 'worry',\n 'worth',\n 'wrap',\n 'wreck',\n 'wrestle',\n 'wrist',\n 'write',\n 'wrong',\n 'yard',\n 'year',\n 'yellow',\n 'you',\n 'young',\n 'youth',\n 'zebra',\n 'zero',\n 'zone',\n 'zoo',\n];\n","export { english } from './words/english';\n\nexport enum Language {\n 'english' = 'english',\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { sha256 } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { arrayify } from '@fuel-ts/utils';\n\n/* Mnemonic phrase composed by words from the provided wordlist it can be a text or a array of words */\nexport type MnemonicPhrase = string | Array<string>;\n\nexport function toUtf8Bytes(stri: string): Uint8Array {\n const str = stri.normalize('NFKD');\n\n const result = [];\n for (let i = 0; i < str.length; i += 1) {\n const c = str.charCodeAt(i);\n\n if (c < 0x80) {\n result.push(c);\n } else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n } else if ((c & 0xfc00) === 0xd800) {\n i += 1;\n const c2 = str.charCodeAt(i);\n\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new FuelError(\n ErrorCode.INVALID_INPUT_PARAMETERS,\n 'Invalid UTF-8 in the input string.'\n );\n }\n\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n } else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n\n return Uint8Array.from(result);\n}\n\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits: number): number {\n return (1 << bits) - 1;\n}\n\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits: number): number {\n return ((1 << bits) - 1) << (8 - bits);\n}\n\nexport function getWords(mnemonic: MnemonicPhrase): Array<string> {\n if (!Array.isArray(mnemonic)) {\n return mnemonic.split(/\\s+/);\n }\n return mnemonic;\n}\n\nexport function getPhrase(mnemonic: MnemonicPhrase): string {\n if (Array.isArray(mnemonic)) {\n return mnemonic.join(' ');\n }\n return mnemonic;\n}\n\nexport function entropyToMnemonicIndices(entropy: Uint8Array): Array<number> {\n const indices: Array<number> = [0];\n\n let remainingBits = 11;\n for (let i = 0; i < entropy.length; i += 1) {\n if (remainingBits > 8) {\n indices[indices.length - 1] <<= 8;\n indices[indices.length - 1] |= entropy[i];\n\n remainingBits -= 8;\n // This byte will complete an 11-bit index\n } else {\n indices[indices.length - 1] <<= remainingBits;\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n\n // Start the next word\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n\n remainingBits += 3;\n }\n }\n\n // Compute the checksum bits\n const checksumBits = entropy.length / 4;\n const checksum = arrayify(sha256(entropy))[0] & getUpperMask(checksumBits);\n\n // Shift the checksum into the word indices\n indices[indices.length - 1] <<= checksumBits;\n indices[indices.length - 1] |= checksum >> (8 - checksumBits);\n\n return indices;\n}\n\nexport function mnemonicWordsToEntropy(words: Array<string>, wordlist: Array<string>): BytesLike {\n const size = Math.ceil((11 * words.length) / 8);\n const entropy = arrayify(new Uint8Array(size));\n\n let offset = 0;\n for (let i = 0; i < words.length; i += 1) {\n const index = wordlist.indexOf(words[i].normalize('NFKD'));\n if (index === -1) {\n throw new FuelError(\n ErrorCode.INVALID_MNEMONIC,\n `Invalid mnemonic: the word '${words[i]}' is not found in the provided wordlist.`\n );\n }\n\n for (let bit = 0; bit < 11; bit += 1) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= 1 << (7 - (offset % 8));\n }\n offset += 1;\n }\n }\n const entropyBits = (32 * words.length) / 3;\n const checksumBits = words.length / 3;\n const checksumMask = getUpperMask(checksumBits);\n const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n throw new FuelError(\n ErrorCode.INVALID_CHECKSUM,\n 'Checksum validation failed for the provided mnemonic.'\n );\n }\n\n return entropy.slice(0, entropyBits / 8);\n}\n","//\n// Because WalletLocked and WalletUnlocked has a cycle dependency\n// it's not possible to split the two classes in different files\n//\n/* eslint-disable max-classes-per-file */\nimport type { BytesLike } from '@fuel-ts/interfaces';\n\nimport { Account } from '../account';\nimport { HDWallet } from '../hdwallet';\nimport { Mnemonic } from '../mnemonic';\nimport type { Provider } from '../providers';\nimport { Signer } from '../signer';\n\nimport { BaseWalletUnlocked } from './base-wallet-unlocked';\nimport { decryptKeystoreWallet } from './keystore-wallet';\n\nexport interface GenerateOptions {\n /** Additional entropy for the random bytes */\n entropy?: BytesLike;\n provider?: Provider;\n}\n\n/**\n * `WalletLocked` provides the functionalities for a locked wallet.\n */\nexport class WalletLocked extends Account {\n /**\n * Unlocks the wallet using the provided private key and returns an instance of WalletUnlocked.\n *\n * @param privateKey - The private key used to unlock the wallet.\n * @returns An instance of WalletUnlocked.\n */\n unlock(privateKey: BytesLike): WalletUnlocked {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return new WalletUnlocked(privateKey, this._provider);\n }\n}\n\n/**\n * `WalletUnlocked` provides the functionalities for an unlocked wallet.\n */\nexport class WalletUnlocked extends BaseWalletUnlocked {\n /**\n * Locks the wallet and returns an instance of WalletLocked.\n *\n * @returns An instance of WalletLocked.\n */\n lock(): WalletLocked {\n this.signer = () => new Signer('0x00');\n return new WalletLocked(this.address, this._provider);\n }\n\n /**\n * Generate a new Wallet Unlocked with a random key pair.\n *\n * @param generateOptions - Options to customize the generation process (optional).\n * @returns An instance of WalletUnlocked.\n */\n static generate(generateOptions?: GenerateOptions): WalletUnlocked {\n const privateKey = Signer.generatePrivateKey(generateOptions?.entropy);\n\n return new WalletUnlocked(privateKey, generateOptions?.provider);\n }\n\n /**\n * Create a Wallet Unlocked from a seed.\n *\n * @param seed - The seed phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @returns An instance of WalletUnlocked.\n */\n static fromSeed(seed: string, path?: string, provider?: Provider): WalletUnlocked {\n const hdWallet = HDWallet.fromSeed(seed);\n const childWallet = hdWallet.derivePath(path || WalletUnlocked.defaultPath);\n\n return new WalletUnlocked(<string>childWallet.privateKey, provider);\n }\n\n /**\n * Create a Wallet Unlocked from a mnemonic phrase.\n *\n * @param mnemonic - The mnemonic phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @param passphrase - The passphrase for the mnemonic (optional).\n * @returns An instance of WalletUnlocked.\n */\n static fromMnemonic(\n mnemonic: string,\n path?: string,\n passphrase?: BytesLike,\n provider?: Provider\n ): WalletUnlocked {\n const seed = Mnemonic.mnemonicToSeed(mnemonic, passphrase);\n const hdWallet = HDWallet.fromSeed(seed);\n const childWallet = hdWallet.derivePath(path || WalletUnlocked.defaultPath);\n\n return new WalletUnlocked(<string>childWallet.privateKey, provider);\n }\n\n /**\n * Create a Wallet Unlocked from an extended key.\n *\n * @param extendedKey - The extended key.\n * @param provider - A Provider instance (optional).\n * @returns An instance of WalletUnlocked.\n */\n static fromExtendedKey(extendedKey: string, provider?: Provider): WalletUnlocked {\n const hdWallet = HDWallet.fromExtendedKey(extendedKey);\n\n return new WalletUnlocked(<string>hdWallet.privateKey, provider);\n }\n\n /**\n * Create a Wallet Unlocked from an encrypted JSON.\n *\n * @param jsonWallet - The encrypted JSON keystore.\n * @param password - The password to decrypt the JSON.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static async fromEncryptedJson(\n jsonWallet: string,\n password: string,\n provider?: Provider\n ): Promise<WalletUnlocked> {\n const privateKey = await decryptKeystoreWallet(jsonWallet, password);\n\n return new WalletUnlocked(privateKey, provider);\n }\n}\n","import type { AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\n\nimport type { Provider } from '../providers';\n\nimport { WalletLocked, WalletUnlocked } from './wallets';\n\n/**\n * `Wallet` provides methods to create locked and unlocked wallet instances.\n */\nexport class Wallet {\n /**\n * Creates a locked wallet instance from an address and a provider.\n *\n * @param address - The address of the wallet.\n * @param provider - A Provider instance (optional).\n * @returns A locked wallet instance.\n */\n static fromAddress(address: string | AbstractAddress, provider?: Provider): WalletLocked {\n return new WalletLocked(address, provider);\n }\n\n /**\n * Creates an unlocked wallet instance from a private key and a provider.\n *\n * @param privateKey - The private key of the wallet.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static fromPrivateKey(privateKey: BytesLike, provider?: Provider) {\n return new WalletUnlocked(privateKey, provider);\n }\n\n /**\n * Generate a new Wallet Unlocked with a random key pair.\n *\n * @param generateOptions - Options to customize the generation process (optional).\n * @returns An unlocked wallet instance.\n */\n static generate = WalletUnlocked.generate;\n\n /**\n * Create a Wallet Unlocked from a seed.\n *\n * @param seed - The seed phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @returns An unlocked wallet instance.\n */\n static fromSeed = WalletUnlocked.fromSeed;\n\n /**\n * Create a Wallet Unlocked from a mnemonic phrase.\n *\n * @param mnemonic - The mnemonic phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @param passphrase - The passphrase for the mnemonic (optional).\n * @returns An unlocked wallet instance.\n */\n static fromMnemonic = WalletUnlocked.fromMnemonic;\n\n /**\n * Create a Wallet Unlocked from an extended key.\n *\n * @param extendedKey - The extended key.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static fromExtendedKey = WalletUnlocked.fromExtendedKey;\n\n /**\n * Create a Wallet Unlocked from an encrypted JSON.\n *\n * @param jsonWallet - The encrypted JSON keystore.\n * @param password - The password to decrypt the JSON.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static fromEncryptedJson = WalletUnlocked.fromEncryptedJson;\n}\n","import { Address } from '@fuel-ts/address';\nimport type { Keystore } from '@fuel-ts/crypto';\nimport { encrypt, decrypt } from '@fuel-ts/crypto';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\nimport { EventEmitter } from 'events';\n\nimport type { WalletUnlocked } from '../wallet';\n\nimport { MemoryStorage } from './storages/memory-storage';\nimport type {\n StorageAbstract,\n WalletManagerAccount,\n VaultConfig,\n VaultsState,\n WalletManagerOptions,\n WalletManagerState,\n Vault,\n} from './types';\nimport { MnemonicVault } from './vaults/mnemonic-vault';\nimport { PrivateKeyVault } from './vaults/privatekey-vault';\n\nconst ERROR_MESSAGES = {\n invalid_vault_type: 'The provided Vault type is invalid.',\n address_not_found: 'No private key found for address the specified wallet address.',\n vault_not_found: 'The specified vault was not found.',\n wallet_not_unlocked: 'The wallet is currently locked.',\n passphrase_not_match: 'The provided passphrase did not match the expected value.',\n};\n\n/**\n * Generic assert function to avoid undesirable errors\n */\nfunction assert(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new FuelError(ErrorCode.WALLET_MANAGER_ERROR, message);\n }\n}\n\n/**\n * WalletManager is a upper package to manage multiple vaults like mnemonic and privateKeys.\n *\n * - VaultTypes can be add to `WalletManager.Vaults` enabling to add custom Vault types.\n * - Storage can be instantiate when initializing enabling custom storage types.\n */\nexport class WalletManager extends EventEmitter {\n /**\n * Vaults\n *\n * Vaults are responsible to store secret keys and return an `Wallet` instance,\n * to interact with the network.\n *\n * Each vault has access to its own state\n *\n */\n static Vaults = [MnemonicVault, PrivateKeyVault];\n /**\n * Storage\n *\n * Persistent encrypted data. `The default storage works only on memory`.\n */\n readonly storage: StorageAbstract = new MemoryStorage();\n /* Key name passed to the storage */\n readonly STORAGE_KEY: string = 'WalletManager';\n\n // `This variables are only accessible from inside the class`\n #vaults: VaultsState = [];\n #passphrase = '';\n #isLocked: boolean = true;\n\n constructor(options?: WalletManagerOptions) {\n super();\n this.storage = options?.storage || this.storage;\n }\n\n get isLocked(): boolean {\n return this.#isLocked;\n }\n\n /**\n * Return the vault serialized object containing all the privateKeys,\n * the format of the return depends on the Vault type.\n */\n exportVault<T extends Vault>(vaultId: number): ReturnType<T['serialize']> {\n assert(!this.#isLocked, ERROR_MESSAGES.wallet_not_unlocked);\n const vaultState = this.#vaults.find((_, idx) => idx === vaultId);\n assert(vaultState, ERROR_MESSAGES.vault_not_found);\n return vaultState.vault.serialize() as ReturnType<T['serialize']>;\n }\n\n /**\n * List all vaults on the Wallet Manager, this function not return secret's\n */\n getVaults(): Array<{ title?: string; type: string; vaultId: number }> {\n return this.#vaults.map((v, idx) => ({\n title: v.title,\n type: v.type,\n vaultId: idx,\n }));\n }\n\n /**\n * List all accounts on the Wallet Manager not vault information is revealed\n */\n getAccounts(): Array<WalletManagerAccount> {\n // Return all WalletManagerAccounts from vaults\n return this.#vaults.flatMap<WalletManagerAccount>((vaultState, vaultId) =>\n vaultState.vault.getAccounts().map((account) => ({ ...account, vaultId }))\n );\n }\n\n /**\n * Create a Wallet instance for the specific account\n */\n getWallet(address: string | AbstractAddress): WalletUnlocked {\n const ownerAddress = Address.fromAddressOrString(address);\n const vaultState = this.#vaults.find((vs) =>\n vs.vault.getAccounts().find((a) => a.address.equals(ownerAddress))\n );\n assert(vaultState, ERROR_MESSAGES.address_not_found);\n\n return vaultState.vault.getWallet(ownerAddress);\n }\n\n /**\n * Export specific account privateKey\n */\n exportPrivateKey(address: string | AbstractAddress) {\n const ownerAddress = Address.fromAddressOrString(address);\n assert(!this.#isLocked, ERROR_MESSAGES.wallet_not_unlocked);\n const vaultState = this.#vaults.find((vs) =>\n vs.vault.getAccounts().find((a) => a.address.equals(ownerAddress))\n );\n assert(vaultState, ERROR_MESSAGES.address_not_found);\n\n return vaultState.vault.exportAccount(ownerAddress);\n }\n\n /**\n * Add account to a selected vault or on the first vault as default.\n * If not vaults are adds it will return error\n */\n async addAccount(options?: { vaultId: number }) {\n // Make sure before add new vault state is fully loaded\n await this.loadState();\n // Get vault instance\n const vaultState = this.#vaults[options?.vaultId || 0];\n await assert(vaultState, ERROR_MESSAGES.vault_not_found);\n // Add account on vault\n const account = vaultState.vault.addAccount();\n // Save the accounts state\n await this.saveState();\n // Return account\n return account;\n }\n\n /**\n * Remove vault by index, by remove the vault you also remove all accounts\n * created by the vault.\n */\n async removeVault(index: number) {\n this.#vaults.splice(index, 1);\n await this.saveState();\n }\n\n /**\n * Add Vault, the `vaultConfig.type` will look for the Vaults supported if\n * didn't found it will throw.\n */\n async addVault(vaultConfig: VaultConfig) {\n // Make sure before add new vault state is fully loaded\n await this.loadState();\n // Check if vault is supported\n const Vault = this.getVaultClass(vaultConfig.type);\n // create Vault instance\n const vault = new Vault(vaultConfig);\n // Push vaults to state\n this.#vaults = this.#vaults.concat({\n title: vaultConfig.title,\n type: vaultConfig.type,\n vault,\n });\n // Persist data on storage\n await this.saveState();\n }\n\n /**\n * Lock wallet. It removes passphrase from class instance, encrypt and hide all address and\n * secrets.\n */\n lock() {\n this.#isLocked = true;\n // Clean state vaults from state\n this.#vaults = [];\n // Clean password from state\n this.#passphrase = '';\n // Emit event that wallet is locked\n this.emit('lock');\n }\n\n /**\n * Unlock wallet. It sets passphrase on WalletManger instance load all address from configured vaults.\n * Vaults with secrets are not unlocked or instantiated on this moment.\n */\n async unlock(passphrase: string) {\n // Set password on state\n this.#passphrase = passphrase;\n // Set locked state to false\n this.#isLocked = false;\n // Try to load state with passphrase\n try {\n // Load state with passphrase\n await this.loadState();\n // Emit event that wallet is unlocked\n this.emit('unlock');\n } catch (err) {\n // If passphrase is wrong lock wallet\n await this.lock();\n // Forward error\n throw err;\n }\n }\n\n /**\n * Update WalletManager encryption passphrase\n */\n async updatePassphrase(oldpass: string, newpass: string) {\n const isLocked = this.#isLocked;\n // Unlock wallet to decrypt data\n await this.unlock(oldpass);\n // Set new password on state\n this.#passphrase = newpass;\n // Persist data on storage\n await this.saveState();\n // Load state with new password\n await this.loadState();\n // If wallet was locked, lock the wallet again\n if (isLocked) {\n await this.lock();\n }\n }\n\n /**\n * Retrieve and decrypt WalletManager state from storage\n */\n async loadState() {\n await assert(!this.#isLocked, ERROR_MESSAGES.wallet_not_unlocked);\n\n const data = await this.storage.getItem(this.STORAGE_KEY);\n if (data) {\n const state = await decrypt<WalletManagerState>(this.#passphrase, <Keystore>JSON.parse(data));\n this.#vaults = this.#deserializeVaults(state.vaults);\n }\n }\n\n /**\n * Store encrypted WalletManager state on storage\n */\n private async saveState() {\n await assert(!this.#isLocked, ERROR_MESSAGES.wallet_not_unlocked);\n\n const encryptedData = await encrypt(this.#passphrase, {\n vaults: this.#serializeVaults(this.#vaults),\n });\n await this.storage.setItem(this.STORAGE_KEY, JSON.stringify(encryptedData));\n this.emit('update');\n }\n\n /**\n * Serialize all vaults to store\n *\n * `This is only accessible from inside the class`\n */\n #serializeVaults(vaults: VaultsState) {\n return vaults.map(({ title, type, vault }) => ({\n title,\n type,\n data: vault.serialize(),\n }));\n }\n\n /**\n * Deserialize all vaults to state\n *\n * `This is only accessible from inside the class`\n */\n #deserializeVaults(vaults: VaultsState) {\n return vaults.map(({ title, type, data: vaultConfig }) => {\n const VaultClass = this.getVaultClass(type);\n return {\n title,\n type,\n vault: new VaultClass(<VaultConfig>vaultConfig),\n };\n });\n }\n\n /**\n * Return a instantiable Class reference from `WalletManager.Vaults` supported list.\n */\n private getVaultClass(type: string) {\n const VaultClass = WalletManager.Vaults.find((v) => v.type === type);\n\n assert(VaultClass, ERROR_MESSAGES.invalid_vault_type);\n\n return VaultClass;\n }\n}\n","import type { StorageAbstract } from '../types';\n\nexport class MemoryStorage implements StorageAbstract {\n storage = new Map<string, unknown>();\n\n async getItem<T>(key: string): Promise<T | null> {\n const item = await this.storage.get(key);\n return item as T | null;\n }\n\n async setItem(key: string, value: string) {\n await this.storage.set(key, value);\n }\n\n async removeItem(key: string) {\n await this.storage.delete(key);\n }\n\n async clear() {\n await this.storage.clear();\n }\n}\n","import { Address } from '@fuel-ts/address';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\n\nimport { Mnemonic } from '../../mnemonic';\nimport type { WalletUnlocked } from '../../wallet';\nimport { Wallet } from '../../wallet';\nimport type { Vault } from '../types';\n\nexport interface MnemonicVaultOptions {\n secret?: string;\n rootPath?: string;\n numberOfAccounts?: number | null;\n}\n\nexport class MnemonicVault implements Vault<MnemonicVaultOptions> {\n static readonly type = 'mnemonic';\n readonly #secret: string;\n\n pathKey = '{}';\n rootPath: string = `m/44'/1179993420'/${this.pathKey}'/0/0`;\n numberOfAccounts: number = 0;\n\n constructor(options: MnemonicVaultOptions) {\n this.#secret = options.secret || Mnemonic.generate();\n this.rootPath = options.rootPath || this.rootPath;\n // On creating the vault also adds one account\n this.numberOfAccounts = options.numberOfAccounts || 1;\n }\n\n getDerivePath(index: number) {\n if (this.rootPath.includes(this.pathKey)) {\n return this.rootPath.replace(this.pathKey, String(index));\n }\n return `${this.rootPath}/${index}`;\n }\n\n serialize(): MnemonicVaultOptions {\n return {\n secret: this.#secret,\n rootPath: this.rootPath,\n numberOfAccounts: this.numberOfAccounts,\n };\n }\n\n getAccounts() {\n const accounts = [];\n let numberOfAccounts = 0;\n\n // Create all accounts to current vault\n do {\n const wallet = Wallet.fromMnemonic(this.#secret, this.getDerivePath(numberOfAccounts));\n accounts.push({\n publicKey: wallet.publicKey,\n address: wallet.address,\n });\n numberOfAccounts += 1;\n } while (numberOfAccounts < this.numberOfAccounts);\n\n return accounts;\n }\n\n addAccount() {\n this.numberOfAccounts += 1;\n const wallet = Wallet.fromMnemonic(this.#secret, this.getDerivePath(this.numberOfAccounts - 1));\n\n return {\n publicKey: wallet.publicKey,\n address: wallet.address,\n };\n }\n\n exportAccount(address: string | AbstractAddress): string {\n let numberOfAccounts = 0;\n const ownerAddress = Address.fromAddressOrString(address);\n // Look for the account that has the same address\n do {\n const wallet = Wallet.fromMnemonic(this.#secret, this.getDerivePath(numberOfAccounts));\n if (wallet.address.equals(ownerAddress)) {\n return wallet.privateKey;\n }\n numberOfAccounts += 1;\n } while (numberOfAccounts < this.numberOfAccounts);\n\n throw new FuelError(\n ErrorCode.WALLET_MANAGER_ERROR,\n `Account with address '${address}' not found in derived wallets.`\n );\n }\n\n getWallet(address: string | AbstractAddress): WalletUnlocked {\n const privateKey = this.exportAccount(address);\n return Wallet.fromPrivateKey(privateKey);\n }\n}\n","import { Address } from '@fuel-ts/address';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\n\nimport type { WalletUnlocked } from '../../wallet';\nimport { Wallet } from '../../wallet';\nimport type { WalletManagerAccount, Vault } from '../types';\n\nexport interface PkVaultOptions {\n secret?: string;\n accounts?: Array<string>;\n}\n\nexport class PrivateKeyVault implements Vault<PkVaultOptions> {\n static readonly type = 'privateKey';\n\n #privateKeys: Array<string> = [];\n\n /**\n * If privateKey vault is initialized with a secretKey, it creates\n * one account with the fallowing secret\n */\n constructor(options: PkVaultOptions = {}) {\n if (options.secret) {\n this.#privateKeys = [options.secret];\n } else {\n this.#privateKeys = options.accounts || [Wallet.generate().privateKey];\n }\n }\n\n serialize(): PkVaultOptions {\n return {\n accounts: this.#privateKeys,\n };\n }\n\n getPublicAccount(privateKey: string) {\n const wallet = Wallet.fromPrivateKey(privateKey);\n return {\n address: wallet.address,\n publicKey: wallet.publicKey,\n };\n }\n\n getAccounts(): WalletManagerAccount[] {\n return this.#privateKeys.map((pk) => this.getPublicAccount(pk));\n }\n\n addAccount() {\n const wallet = Wallet.generate();\n\n this.#privateKeys.push(wallet.privateKey);\n\n return this.getPublicAccount(wallet.privateKey);\n }\n\n exportAccount(address: string | AbstractAddress): string {\n const ownerAddress = Address.fromAddressOrString(address);\n const privateKey = this.#privateKeys.find((pk) =>\n Wallet.fromPrivateKey(pk).address.equals(ownerAddress)\n );\n\n if (!privateKey) {\n throw new FuelError(\n ErrorCode.WALLET_MANAGER_ERROR,\n `No private key found for address '${address}'.`\n );\n }\n\n return privateKey;\n }\n\n getWallet(address: string | AbstractAddress): WalletUnlocked {\n const privateKey = this.exportAccount(address);\n return Wallet.fromPrivateKey(privateKey);\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\n\nimport type { WalletUnlocked } from '../wallet';\n\nexport type WalletManagerAccount = {\n address: AbstractAddress;\n publicKey: string;\n vaultId?: number;\n};\n\nexport type WalletManagerOptions = {\n storage: StorageAbstract;\n};\n\nexport type VaultConfig = {\n type: string;\n title?: string;\n secret?: string;\n};\n\nexport type VaultsState = Array<{\n type: string;\n title?: string;\n data?: VaultConfig;\n vault: Vault;\n}>;\n\nexport interface WalletManagerState {\n vaults: VaultsState;\n}\n\nexport abstract class Vault<TOptions = { secret?: string }> {\n static readonly type: string;\n\n constructor(_options: TOptions) {\n throw new FuelError(ErrorCode.NOT_IMPLEMENTED, 'Not implemented.');\n }\n\n serialize(): TOptions {\n throw new FuelError(ErrorCode.NOT_IMPLEMENTED, 'Not implemented.');\n }\n\n getAccounts(): WalletManagerAccount[] {\n throw new FuelError(ErrorCode.NOT_IMPLEMENTED, 'Not implemented.');\n }\n\n addAccount(): WalletManagerAccount {\n throw new FuelError(ErrorCode.NOT_IMPLEMENTED, 'Not implemented.');\n }\n\n exportAccount(_address: AbstractAddress): string {\n throw new FuelError(ErrorCode.NOT_IMPLEMENTED, 'Not implemented.');\n }\n\n getWallet(_address: AbstractAddress): WalletUnlocked {\n throw new FuelError(ErrorCode.NOT_IMPLEMENTED, 'Not implemented.');\n }\n}\n\nexport abstract class StorageAbstract {\n abstract setItem(key: string, value: string): Promise<void>;\n abstract getItem(key: string): Promise<string | null | undefined>;\n abstract removeItem(key: string): Promise<void>;\n abstract clear(): Promise<void>;\n}\n","import type { JsonAbi, InputValue } from '@fuel-ts/abi-coder';\nimport {\n Interface,\n INPUT_COIN_FIXED_SIZE,\n WORD_SIZE,\n calculateVmTxMemory,\n SCRIPT_FIXED_SIZE,\n} from '@fuel-ts/abi-coder';\nimport { Address } from '@fuel-ts/address';\nimport { BaseAssetId } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish } from '@fuel-ts/math';\nimport { ByteArrayCoder, InputType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nimport { Account } from '../account';\nimport type { TxParamsType } from '../account';\nimport { transactionRequestify, BaseTransactionRequest } from '../providers';\nimport type {\n CallResult,\n Provider,\n ProviderSendTxParams,\n TransactionRequest,\n TransactionRequestInput,\n TransactionRequestLike,\n TransactionResponse,\n} from '../providers';\n\nimport { getPredicateRoot } from './utils';\n\nexport type PredicateParams<T = InputValue[]> = {\n bytecode: BytesLike;\n provider: Provider;\n abi?: JsonAbi;\n inputData?: T;\n configurableConstants?: { [name: string]: unknown };\n};\n\n/**\n * `Predicate` provides methods to populate transaction data with predicate information and sending transactions with them.\n */\nexport class Predicate<TInputData extends InputValue[]> extends Account {\n bytes: Uint8Array;\n predicateData: TInputData = [] as unknown as TInputData;\n interface?: Interface;\n\n /**\n * Creates an instance of the Predicate class.\n *\n * @param bytecode - The bytecode of the predicate.\n * @param abi - The JSON ABI of the predicate.\n * @param provider - The provider used to interact with the blockchain.\n * @param inputData - The predicate input data (optional).\n * @param configurableConstants - Optional configurable constants for the predicate.\n */\n constructor({\n bytecode,\n abi,\n provider,\n inputData,\n configurableConstants,\n }: PredicateParams<TInputData>) {\n const { predicateBytes, predicateInterface } = Predicate.processPredicateData(\n bytecode,\n abi,\n configurableConstants\n );\n const address = Address.fromB256(getPredicateRoot(predicateBytes));\n super(address, provider);\n\n this.bytes = predicateBytes;\n this.interface = predicateInterface;\n if (inputData !== undefined && inputData.length > 0) {\n this.predicateData = inputData;\n }\n }\n\n /**\n * Populates the transaction data with predicate data.\n *\n * @param transactionRequestLike - The transaction request-like object.\n * @returns The transaction request with predicate data.\n */\n populateTransactionPredicateData(transactionRequestLike: TransactionRequestLike) {\n const request = transactionRequestify(transactionRequestLike);\n\n const { policies } = BaseTransactionRequest.getPolicyMeta(request);\n\n request.inputs?.forEach((input: TransactionRequestInput) => {\n if (input.type === InputType.Coin && hexlify(input.owner) === this.address.toB256()) {\n // eslint-disable-next-line no-param-reassign\n input.predicate = this.bytes;\n // eslint-disable-next-line no-param-reassign\n input.predicateData = this.getPredicateData(policies.length);\n }\n });\n\n return request;\n }\n\n /**\n * A helper that creates a transfer transaction request and returns it.\n *\n * @param destination - The address of the destination.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The transaction parameters (gasLimit, gasPrice, maturity).\n * @returns A promise that resolves to the prepared transaction request.\n */\n async createTransfer(\n /** Address of the destination */\n destination: AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId: BytesLike = BaseAssetId,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionRequest> {\n const request = await super.createTransfer(destination, amount, assetId, txParams);\n return this.populateTransactionPredicateData(request);\n }\n\n /**\n * Sends a transaction with the populated predicate data.\n *\n * @param transactionRequestLike - The transaction request-like object.\n * @returns A promise that resolves to the transaction response.\n */\n sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n options?: Pick<ProviderSendTxParams, 'awaitExecution'>\n ): Promise<TransactionResponse> {\n const transactionRequest = this.populateTransactionPredicateData(transactionRequestLike);\n return super.sendTransaction(transactionRequest, options);\n }\n\n /**\n * Simulates a transaction with the populated predicate data.\n *\n * @param transactionRequestLike - The transaction request-like object.\n * @returns A promise that resolves to the call result.\n */\n simulateTransaction(transactionRequestLike: TransactionRequestLike): Promise<CallResult> {\n const transactionRequest = this.populateTransactionPredicateData(transactionRequestLike);\n return super.simulateTransaction(transactionRequest);\n }\n\n private getPredicateData(policiesLength: number): Uint8Array {\n if (!this.predicateData.length) {\n return new Uint8Array();\n }\n\n const mainFn = this.interface?.functions.main;\n const paddedCode = new ByteArrayCoder(this.bytes.length).encode(this.bytes);\n\n const VM_TX_MEMORY = calculateVmTxMemory({\n maxInputs: this.provider.getChain().consensusParameters.maxInputs.toNumber(),\n });\n const OFFSET =\n VM_TX_MEMORY +\n SCRIPT_FIXED_SIZE +\n INPUT_COIN_FIXED_SIZE +\n WORD_SIZE +\n paddedCode.byteLength +\n policiesLength * WORD_SIZE;\n\n return mainFn?.encodeArguments(this.predicateData, OFFSET) || new Uint8Array();\n }\n\n /**\n * Processes the predicate data and returns the altered bytecode and interface.\n *\n * @param bytes - The bytes of the predicate.\n * @param jsonAbi - The JSON ABI of the predicate.\n * @param configurableConstants - Optional configurable constants for the predicate.\n * @returns An object containing the new predicate bytes and interface.\n */\n private static processPredicateData(\n bytes: BytesLike,\n jsonAbi?: JsonAbi,\n configurableConstants?: { [name: string]: unknown }\n ) {\n let predicateBytes = arrayify(bytes);\n let abiInterface: Interface | undefined;\n\n if (jsonAbi) {\n abiInterface = new Interface(jsonAbi);\n if (abiInterface.functions.main === undefined) {\n throw new FuelError(\n ErrorCode.ABI_MAIN_METHOD_MISSING,\n 'Cannot use ABI without \"main\" function.'\n );\n }\n }\n\n if (configurableConstants && Object.keys(configurableConstants).length) {\n predicateBytes = Predicate.setConfigurableConstants(\n predicateBytes,\n configurableConstants,\n abiInterface\n );\n }\n\n return {\n predicateBytes,\n predicateInterface: abiInterface,\n };\n }\n\n /**\n * Sets the configurable constants for the predicate.\n *\n * @param bytes - The bytes of the predicate.\n * @param configurableConstants - Configurable constants to be set.\n * @param abiInterface - The ABI interface of the predicate.\n * @returns The mutated bytes with the configurable constants set.\n */\n private static setConfigurableConstants(\n bytes: Uint8Array,\n configurableConstants: { [name: string]: unknown },\n abiInterface?: Interface\n ) {\n const mutatedBytes = bytes;\n\n try {\n if (!abiInterface) {\n throw new Error(\n 'Cannot validate configurable constants because the Predicate was instantiated without a JSON ABI'\n );\n }\n\n if (Object.keys(abiInterface.configurables).length === 0) {\n throw new Error('Predicate has no configurable constants to be set');\n }\n\n Object.entries(configurableConstants).forEach(([key, value]) => {\n if (!abiInterface?.configurables[key]) {\n throw new Error(`No configurable constant named '${key}' found in the Predicate`);\n }\n\n const { offset } = abiInterface.configurables[key];\n\n const encoded = abiInterface.encodeConfigurable(key, value as InputValue);\n\n mutatedBytes.set(encoded, offset);\n });\n } catch (err) {\n throw new FuelError(\n ErrorCode.INVALID_CONFIGURABLE_CONSTANTS,\n `Error setting configurable constants: ${(<Error>err).message}.`\n );\n }\n\n return mutatedBytes;\n }\n}\n","import { hash } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { calcRoot } from '@fuel-ts/merkle';\nimport { chunkAndPadBytes, hexlify, concat, arrayify } from '@fuel-ts/utils';\n\n/**\n * @hidden\n *\n * Calculates the predicate root for a given bytecode and chain ID.\n *\n * @param bytecode - The bytecode represented as a BytesLike object.\n * @param chainId - The ID of the chain associated with the bytecode.\n * @returns The predicate root as a string.\n */\nexport const getPredicateRoot = (bytecode: BytesLike): string => {\n const chunkSize = 16 * 1024;\n const bytes = arrayify(bytecode);\n const chunks = chunkAndPadBytes(bytes, chunkSize);\n const codeRoot = calcRoot(chunks.map((c) => hexlify(c)));\n\n const predicateRoot = hash(concat(['0x4655454C', codeRoot]));\n return predicateRoot;\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\n\nimport { Account } from '../account';\nimport { Provider } from '../providers';\nimport type { StorageAbstract } from '../wallet-manager';\n\nimport { FuelConnector } from './fuel-connector';\nimport {\n FuelConnectorMethods,\n FuelConnectorEventTypes,\n FuelConnectorEventType,\n LocalStorage,\n} from './types';\nimport type { Network, FuelConnectorEventsType, TargetObject } from './types';\nimport type { CacheFor } from './utils';\nimport { cacheFor, deferPromise, withTimeout } from './utils';\n\n// This is the time to wait for the connector\n// to be available before returning false for hasConnector.\nconst HAS_CONNECTOR_TIMEOUT = 2_000;\n// The time to cache the ping result, as is not\n// expected to change the availability of the connector to\n// change too often we can safely cache the result for 5 seconds\n// at minimum.\nconst PING_CACHE_TIME = 5_000;\n\nconst { warn } = console;\n\nexport type FuelConfig = {\n connectors?: Array<FuelConnector>;\n storage?: StorageAbstract | null;\n targetObject?: TargetObject;\n};\n\nexport type FuelConnectorSelectOptions = {\n emitEvents?: boolean;\n};\n\nexport type Status = {\n installed: boolean;\n connected: boolean;\n};\n\nexport class Fuel extends FuelConnector {\n static STORAGE_KEY = 'fuel-current-connector';\n static defaultConfig: FuelConfig = {};\n private _storage?: StorageAbstract | null = null;\n private _connectors: Array<FuelConnector> = [];\n private _targetObject: TargetObject | null = null;\n private _unsubscribes: Array<() => void> = [];\n private _targetUnsubscribe: () => void;\n private _pingCache: CacheFor = {};\n private _currentConnector?: FuelConnector | null;\n\n constructor(config: FuelConfig = Fuel.defaultConfig) {\n super();\n // Increase the limit of listeners\n this.setMaxListeners(1_000);\n // Set all connectors\n this._connectors = config.connectors ?? [];\n // Set the target object to listen for global events\n this._targetObject = this.getTargetObject(config.targetObject);\n // Set default storage\n this._storage = config.storage === undefined ? this.getStorage() : config.storage;\n // Setup all methods\n this.setupMethods();\n // Get the current connector from the storage\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.setDefaultConnector();\n // Setup new connector listener for global events\n this._targetUnsubscribe = this.setupConnectorListener();\n }\n\n /**\n * Return the target object to listen for global events.\n */\n private getTargetObject(targetObject?: TargetObject): TargetObject | null {\n if (targetObject) {\n return targetObject;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof document !== 'undefined') {\n return document;\n }\n return null;\n }\n\n /**\n * Return the storage used.\n */\n private getStorage(): StorageAbstract | undefined {\n if (typeof window !== 'undefined') {\n return new LocalStorage(window.localStorage);\n }\n return undefined;\n }\n\n /**\n * Setup the default connector from the storage.\n */\n private async setDefaultConnector(): Promise<boolean | undefined> {\n const connectorName =\n (await this._storage?.getItem(Fuel.STORAGE_KEY)) || this._connectors[0]?.name;\n if (connectorName) {\n // Setup all events for the current connector\n return this.selectConnector(connectorName, {\n emitEvents: false,\n });\n }\n\n return undefined;\n }\n\n /**\n * Start listener for all the events of the current\n * connector and emit them to the Fuel instance\n */\n private setupConnectorEvents(events: string[]): void {\n if (!this._currentConnector) {\n return;\n }\n const currentConnector = this._currentConnector;\n this._unsubscribes.map((unSub) => unSub());\n this._unsubscribes = events.map((event) => {\n const handler = (...args: unknown[]) => this.emit(event, ...args);\n currentConnector.on(event as FuelConnectorEventsType, handler);\n return () => currentConnector.off(event, handler);\n });\n }\n\n /**\n * Call method from the current connector.\n */\n private async callMethod(method: string, ...args: unknown[]) {\n const hasConnector = await this.hasConnector();\n await this.pingConnector();\n if (!this._currentConnector || !hasConnector) {\n throw new Error(\n `No connector selected for calling ${method}. Use hasConnector before executing other methods.`\n );\n }\n if (typeof this._currentConnector[method as keyof FuelConnector] === 'function') {\n return (this._currentConnector[method as keyof FuelConnector] as CallableFunction)(...args);\n }\n\n return undefined;\n }\n\n /**\n * Create a method for each method proxy that is available on the Common interface\n * and call the method from the current connector.\n */\n private setupMethods(): void {\n Object.values(FuelConnectorMethods).forEach((method) => {\n this[method] = async (...args: unknown[]) => this.callMethod(method, ...args);\n });\n }\n\n /**\n * Fetch the status of a connector and set the installed and connected\n * status.\n */\n private async fetchConnectorStatus(\n connector: FuelConnector & { _latestUpdate?: number }\n ): Promise<Status> {\n // Control fetch status to avoid rewriting the status\n // on late responses in this way even if a response is\n // late we can avoid rewriting the status of the connector\n const requestTimestamp = Date.now();\n const [isConnected, ping] = await Promise.allSettled([\n withTimeout(connector.isConnected()),\n withTimeout(this.pingConnector(connector)),\n ]);\n // If the requestTimestamp is greater than the latest update\n // we can ignore the response as is treated as stale.\n const isStale = requestTimestamp < (connector._latestUpdate || 0);\n if (!isStale) {\n // eslint-disable-next-line no-param-reassign\n connector._latestUpdate = Date.now();\n // eslint-disable-next-line no-param-reassign\n connector.installed = ping.status === 'fulfilled' && ping.value;\n // eslint-disable-next-line no-param-reassign\n connector.connected = isConnected.status === 'fulfilled' && isConnected.value;\n }\n return {\n installed: connector.installed,\n connected: connector.connected,\n };\n }\n\n /**\n * Fetch the status of all connectors and set the installed and connected\n * status.\n */\n private async fetchConnectorsStatus(): Promise<Status[]> {\n return Promise.all(\n this._connectors.map(async (connector) => this.fetchConnectorStatus(connector))\n );\n }\n\n /**\n * Fetch the status of a connector and set the installed and connected\n * status. If no connector is provided it will ping the current connector.\n */\n private async pingConnector(connector?: FuelConnector) {\n const curConnector = connector || this._currentConnector;\n if (!curConnector) {\n return false;\n }\n // If finds a ping in the cache and the value is true\n // return from cache\n try {\n return await cacheFor(async () => withTimeout(curConnector.ping()), {\n key: curConnector.name,\n cache: this._pingCache,\n cacheTime: PING_CACHE_TIME,\n })();\n } catch {\n throw new Error('Current connector is not available.');\n }\n }\n\n /**\n * Setup a listener for the FuelConnector event and add the connector\n * to the list of new connectors.\n */\n private setupConnectorListener = () => {\n const { _targetObject: targetObject } = this;\n const eventName = FuelConnectorEventType;\n if (targetObject?.on) {\n targetObject.on(eventName, this.addConnector);\n return () => {\n targetObject.off?.(eventName, this.addConnector);\n };\n }\n if (targetObject?.addEventListener) {\n const handler = (e: CustomEvent<FuelConnector>) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.addConnector(e.detail);\n };\n targetObject.addEventListener(eventName, handler);\n return () => {\n targetObject.removeEventListener?.(eventName, handler);\n };\n }\n return () => {};\n };\n\n /**\n * Add a new connector to the list of connectors.\n */\n private addConnector = async (connector: FuelConnector): Promise<void> => {\n if (!this.getConnector(connector)) {\n this._connectors.push(connector);\n }\n // Fetch the status of the new connector\n await this.fetchConnectorStatus(connector);\n // Emit connectors events once the connector list changes\n this.emit(this.events.connectors, this._connectors);\n // If the current connector is not set\n if (!this._currentConnector) {\n // set the new connector as currentConnector\n await this.selectConnector(connector.name, {\n emitEvents: false,\n });\n }\n };\n\n private triggerConnectorEvents = async () => {\n const [isConnected, networks, currentNetwork] = await Promise.all([\n this.isConnected(),\n this.networks(),\n this.currentNetwork(),\n ]);\n this.emit(this.events.connection, isConnected);\n this.emit(this.events.networks, networks);\n this.emit(this.events.currentNetwork, currentNetwork);\n if (isConnected) {\n const [accounts, currentAccount] = await Promise.all([\n this.accounts(),\n this.currentAccount(),\n ]);\n this.emit(this.events.accounts, accounts);\n this.emit(this.events.currentAccount, currentAccount);\n }\n };\n\n /**\n * Get a connector from the list of connectors.\n */\n getConnector = (connector: FuelConnector | string): FuelConnector | null =>\n this._connectors.find((c) => {\n const connectorName = typeof connector === 'string' ? connector : connector.name;\n return c.name === connectorName || c === connector;\n }) || null;\n\n /**\n * Return the list of connectors with the status of installed and connected.\n */\n async connectors(): Promise<Array<FuelConnector>> {\n await this.fetchConnectorsStatus();\n return this._connectors;\n }\n\n /**\n * Set the current connector to be used.\n */\n async selectConnector(\n connectorName: string,\n options: FuelConnectorSelectOptions = {\n emitEvents: true,\n }\n ): Promise<boolean> {\n const connector = this.getConnector(connectorName);\n if (!connector) {\n return false;\n }\n if (this._currentConnector?.name === connectorName) {\n return true;\n }\n const { installed } = await this.fetchConnectorStatus(connector);\n if (installed) {\n this._currentConnector = connector;\n this.emit(this.events.currentConnector, connector);\n this.setupConnectorEvents(Object.values(FuelConnectorEventTypes));\n await this._storage?.setItem(Fuel.STORAGE_KEY, connector.name);\n // If emitEvents is true we query all the data from the connector\n // and emit the events to the Fuel instance allowing the application to\n // react to changes in the connector state.\n if (options.emitEvents) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.triggerConnectorEvents();\n }\n return true;\n }\n return false;\n }\n\n /**\n * Return the current selected connector.\n */\n currentConnector(): FuelConnector | null | undefined {\n return this._currentConnector;\n }\n\n /**\n * Return true if any connector is available.\n */\n async hasConnector(): Promise<boolean> {\n // If there is a current connector return true\n // as the connector is ready\n if (this._currentConnector) {\n return true;\n }\n // If there is no current connector\n // wait for the current connector to be set\n // for 1 second and return false if is not set\n const defer = deferPromise<boolean>();\n this.once(this.events.currentConnector, () => {\n defer.resolve(true);\n });\n // As the max ping time is 1 second we wait for 2 seconds\n // to allow applications to react to the current connector\n return withTimeout(defer.promise, HAS_CONNECTOR_TIMEOUT)\n .then(() => true)\n .catch(() => false);\n }\n\n async hasWallet(): Promise<boolean> {\n return this.hasConnector();\n }\n\n /**\n * Return a Fuel Provider instance with extends features to work with\n * connectors.\n *\n * @deprecated getProvider is deprecated and is going to be removed in the future, use getWallet instead.\n */\n async getProvider(providerOrNetwork?: Provider | Network): Promise<Provider> {\n warn(\n 'getProvider is deprecated and is going to be removed in the future, use getWallet instead.'\n );\n return this._getProvider(providerOrNetwork);\n }\n\n /**\n * Return a Fuel Provider instance with extends features to work with\n * connectors.\n */\n private async _getProvider(providerOrNetwork?: Provider | Network): Promise<Provider> {\n // Decide which provider to use based on the providerOrNetwork\n let provider: Provider;\n // If provider is a valid instance of a Provider use it\n if (providerOrNetwork && 'getTransactionResponse' in providerOrNetwork) {\n provider = providerOrNetwork;\n // If the provided param is a valid network use it\n } else if (providerOrNetwork && 'chainId' in providerOrNetwork && 'url' in providerOrNetwork) {\n provider = await Provider.create(providerOrNetwork.url);\n // If nor provider or network is provided use the current network\n } else if (!providerOrNetwork) {\n const currentNetwork = await this.currentNetwork();\n provider = await Provider.create(currentNetwork.url);\n // If a provider or network was informed but is not valid\n // throw an error\n } else {\n throw new FuelError(ErrorCode.INVALID_PROVIDER, 'Provider is not valid.');\n }\n return provider;\n }\n\n /**\n * Return a Fuel Wallet Locked instance with extends features to work with\n * connectors.\n */\n async getWallet(\n address: string | AbstractAddress,\n providerOrNetwork?: Provider | Network\n ): Promise<Account> {\n const provider = await this._getProvider(providerOrNetwork);\n return new Account(address, provider, this);\n }\n\n /**\n * Remove all open listeners this is useful when you want to\n * remove the Fuel instance and avoid memory leaks.\n */\n unsubscribe(): void {\n // Unsubscribe from all events\n this._unsubscribes.map((unSub) => unSub());\n this._targetUnsubscribe();\n // Remove all listeners from fuel instance\n this.removeAllListeners();\n }\n\n /**\n * Clean all the data from the storage.\n */\n async clean(): Promise<void> {\n await this._storage?.removeItem(Fuel.STORAGE_KEY);\n }\n\n /**\n * Removes all listeners and cleans the storage.\n */\n async destroy(): Promise<void> {\n this.unsubscribe();\n await this.clean();\n }\n}\n","/* eslint-disable @typescript-eslint/require-await */\nimport { EventEmitter } from 'events';\n\nimport type { TransactionRequestLike } from '../providers';\nimport type { Asset } from '../providers/assets/types';\n\nimport { FuelConnectorEventTypes } from './types';\nimport type {\n FuelConnectorEvents,\n ConnectorMetadata,\n FuelABI,\n Network,\n FuelEventArg,\n Version,\n} from './types';\n\n/**\n * @name FuelConnector\n *\n * Wallet Connector is a interface that represents a Wallet Connector and all the methods\n * that should be implemented to be compatible with the Fuel SDK.\n */\nexport abstract class FuelConnector extends EventEmitter {\n name: string = '';\n metadata: ConnectorMetadata = {} as ConnectorMetadata;\n connected: boolean = false;\n installed: boolean = false;\n events = FuelConnectorEventTypes;\n\n /**\n * Should return true if the connector is loaded\n * in less then one second.\n *\n * @returns Always true.\n */\n async ping(): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return the current version of the connector\n * and the network version that is compatible.\n *\n * @returns boolean - connection status.\n */\n async version(): Promise<Version> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return true if the connector is connected\n * to any of the accounts available.\n *\n * @returns The connection status.\n */\n async isConnected(): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return all the accounts authorized for the\n * current connection.\n *\n * @returns The accounts addresses strings\n */\n async accounts(): Promise<Array<string>> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should start the connection process and return\n * true if the account authorize the connection.\n *\n * and return false if the user reject the connection.\n *\n * @emits accounts\n * @returns boolean - connection status.\n */\n async connect(): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should disconnect the current connection and\n * return false if the disconnection was successful.\n *\n * @emits assets connection\n * @returns The connection status.\n */\n async disconnect(): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should start the sign message process and return\n * the signed message.\n *\n * @param address - The address to sign the message\n * @param message - The message to sign all text will be treated as text utf-8\n *\n * @returns Message signature\n */\n async signMessage(_address: string, _message: string): Promise<string> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should start the sign transaction process and return\n * the signed transaction.\n *\n * @param address - The address to sign the transaction\n * @param transaction - The transaction to sign\n *\n * @returns Transaction signature\n */\n async signTransaction(_address: string, _transaction: TransactionRequestLike): Promise<string> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should start the send transaction process and return\n * the transaction id submitted to the network.\n *\n * If the network is not available for the connection\n * it should throw an error to avoid the transaction\n * to be sent to the wrong network and lost.\n *\n * @param address - The address to sign the transaction\n * @param transaction - The transaction to send\n *\n * @returns The transaction id\n */\n async sendTransaction(_address: string, _transaction: TransactionRequestLike): Promise<string> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return the current account selected inside the connector, if the account\n * is authorized for the connection.\n *\n * If the account is not authorized it should return null.\n *\n * @returns The current account selected otherwise null.\n */\n async currentAccount(): Promise<string | null> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should add the the assets metadata to the connector and return true if the asset\n * was added successfully.\n *\n * If the asset already exists it should throw an error.\n *\n * @emits assets\n * @param assets - The assets to add the metadata to the connection.\n * @throws Error if the asset already exists\n * @returns True if the asset was added successfully\n */\n async addAssets(_assets: Array<Asset>): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should add the the asset metadata to the connector and return true if the asset\n * was added successfully.\n *\n * If the asset already exists it should throw an error.\n *\n * @emits assets\n * @param asset - The asset to add the metadata to the connection.\n * @throws Error if the asset already exists\n * @returns True if the asset was added successfully\n */\n async addAsset(_asset: Asset): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return all the assets added to the connector. If a connection is already established.\n *\n * @returns Array of assets metadata from the connector vinculated to the all accounts from a specific Wallet.\n */\n async assets(): Promise<Array<Asset>> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should start the add network process and return true if the network was added successfully.\n *\n * @emits networks\n * @throws Error if the network already exists\n * @param networkUrl - The URL of the network to be added.\n * @returns Return true if the network was added successfully\n */\n async addNetwork(_networkUrl: string): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should start the select network process and return true if the network has change successfully.\n *\n * @emits networks\n * @throws Error if the network already exists\n * @param network - The network to be selected.\n * @returns Return true if the network was added successfully\n */\n async selectNetwork(_network: Network): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return all the networks available from the connector. If the connection is already established.\n *\n * @returns Return all the networks added to the connector.\n */\n async networks(): Promise<Array<Network>> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return the current network selected inside the connector. Even if the connection is not established.\n *\n * @returns Return the current network selected inside the connector.\n */\n async currentNetwork(): Promise<Network> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should add the ABI to the connector and return true if the ABI was added successfully.\n *\n * @param contractId - The contract id to add the ABI.\n * @param abi - The JSON ABI that represents a contract.\n * @returns Return true if the ABI was added successfully.\n */\n async addABI(_contractId: string, _abi: FuelABI): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return the ABI from the connector vinculated to the all accounts from a specific Wallet.\n *\n * @param id - The contract id to get the ABI.\n * @returns The ABI if it exists, otherwise return null.\n */\n async getABI(_id: string): Promise<FuelABI | null> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return true if the abi exists in the connector vinculated to the all accounts from a specific Wallet.\n *\n * @param id - The contract id to get the abi\n * @returns Returns true if the abi exists or false if not.\n */\n async hasABI(_id: string): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Event listener for the connector.\n *\n * @param eventName - The event name to listen\n * @param listener - The listener function\n */\n on<E extends FuelConnectorEvents['type'], D extends FuelEventArg<E>>(\n eventName: E,\n listener: (data: D) => void\n ): this {\n super.on(eventName, listener);\n return this;\n }\n}\n","export enum FuelConnectorMethods {\n // General methods\n ping = 'ping',\n version = 'version',\n // Connection methods\n connect = 'connect',\n disconnect = 'disconnect',\n isConnected = 'isConnected',\n // Account methods\n accounts = 'accounts',\n currentAccount = 'currentAccount',\n // Signature methods\n signMessage = 'signMessage',\n sendTransaction = 'sendTransaction',\n // Assets metadata methods\n assets = 'assets',\n addAsset = 'addAsset',\n addAssets = 'addAssets',\n // Network methods\n networks = 'networks',\n currentNetwork = 'currentNetwork',\n addNetwork = 'addNetwork',\n selectNetwork = 'selectNetwork',\n // ABI methods\n addABI = 'addABI',\n getABI = 'getABI',\n hasABI = 'hasABI',\n}\n\nexport enum FuelConnectorEventTypes {\n connectors = 'connectors',\n currentConnector = 'currentConnector',\n connection = 'connection',\n accounts = 'accounts',\n currentAccount = 'currentAccount',\n networks = 'networks',\n currentNetwork = 'currentNetwork',\n assets = 'assets',\n abis = 'abis',\n}\n\nexport const FuelConnectorEventType = 'FuelConnector';\n","/* eslint-disable @typescript-eslint/require-await */\nimport type { StorageAbstract } from '../../wallet-manager';\n\nexport class LocalStorage implements StorageAbstract {\n private storage: Storage;\n\n constructor(localStorage: Storage) {\n this.storage = localStorage;\n }\n\n async setItem(key: string, value: string): Promise<void> {\n this.storage.setItem(key, value);\n }\n\n async getItem(key: string): Promise<string | null | undefined> {\n return this.storage.getItem(key);\n }\n\n async removeItem(key: string): Promise<void> {\n this.storage.removeItem(key);\n }\n\n async clear(): Promise<void> {\n this.storage.clear();\n }\n}\n","/* eslint-disable no-param-reassign */\n\nexport type CacheFor = {\n [key: string]: {\n timeout: number;\n value: unknown;\n } | null;\n};\n\ntype CacheForOptions = {\n key: string;\n cache: CacheFor;\n cacheTime: number;\n};\n\nexport function cacheFor<F extends (...args: unknown[]) => Promise<unknown>>(\n fn: F,\n { cache, cacheTime, key }: CacheForOptions\n): F {\n return (async (...args: unknown[]) => {\n if (cache[key] && cache[key]?.value) {\n return cache[key]?.value as ReturnType<F>;\n }\n clearTimeout(cache[key]?.timeout);\n const result = await fn(...args);\n\n // Create cache auto clean\n\n cache[key] = {\n timeout: Number(\n setTimeout(() => {\n cache[key] = null;\n }, cacheTime)\n ),\n value: result,\n };\n\n return result;\n }) as F;\n}\n","import type { FuelConnector } from '../fuel-connector';\nimport { FuelConnectorEventType } from '../types';\n\n/**\n * Fuel Connector Event is a custom event that can be used by the connector to\n * inform the Fuel Connector Manager that a new connector is available.\n */\nexport function dispatchFuelConnectorEvent(connector: FuelConnector) {\n window.dispatchEvent(\n new CustomEvent(FuelConnectorEventType, {\n detail: connector,\n })\n );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type DeferPromise<R = unknown> = {\n promise: Promise<R>;\n resolve: (value: R) => void;\n reject: (error: unknown) => void;\n};\n\nexport function deferPromise<R = unknown>() {\n const defer: DeferPromise<R> = {} as any;\n\n defer.promise = new Promise((resolve, reject) => {\n defer.reject = reject;\n defer.resolve = resolve;\n });\n\n return defer;\n}\n\n// eslint-disable-next-line @typescript-eslint/require-await\nexport async function withTimeout<F extends Promise<unknown>, RT = Awaited<F>>(\n promise: F,\n timeout: number = 1050\n): Promise<RT> {\n const timeoutPromise = new Promise((resolve, reject) => {\n setTimeout(() => {\n reject(new Error('Promise timed out'));\n }, timeout);\n });\n return Promise.race([timeoutPromise, promise]) as any;\n}\n"],"mappings":"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AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;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","names":["import_address","import_configs","import_errors","import_math","import_utils","max","import_address","import_errors","import_math","import_transactions","import_utils","import_ramda","gql","import_errors","import_utils","import_configs","import_errors","import_math","import_utils","import_configs","import_errors","import_math","import_transactions","import_utils","import_abi_coder","import_configs","import_math","import_transactions","import_utils","import_configs","import_errors","import_math","import_transactions","import_utils","import_errors","import_math","import_transactions","import_utils","import_utils","import_errors","import_math","import_transactions","import_configs","import_utils","import_configs","import_math","import_transactions","import_utils","import_configs","import_math","import_transactions","import_utils","import_ramda","import_utils","import_abi_coder","import_address","import_configs","import_math","import_transactions","import_utils","import_utils","import_errors","import_transactions","import_errors","import_math","import_transactions","import_utils","import_utils","import_math","import_transactions","import_utils","import_configs","import_errors","import_math","import_transactions","import_abi_coder","import_math","import_errors","import_transactions","import_transactions","TransactionTypeName","TransactionStatus","OperationName","AddressType","ChainName","import_transactions","import_errors","import_abi_coder","import_transactions","transactionId","import_errors","import_math","import_transactions","import_utils","assets","import_abi_coder","import_math","import_utils","gtf","addi","lw","addi2","tr","ret","isCoin","import_hasher","import_utils","import_address","import_crypto","import_hasher","import_math","import_utils","import_address","import_crypto","import_errors","import_utils","uuidv4","import_errors","import_hasher","import_math","import_utils","import_ethers","import_crypto","import_errors","import_hasher","import_utils","import_ethers","Language","import_errors","import_hasher","import_utils","MainnetPRV","TestnetPRV","import_address","import_crypto","import_errors","import_address","import_errors","import_address","import_errors","Vault","import_errors","import_abi_coder","import_address","import_configs","import_errors","import_transactions","import_utils","import_hasher","import_utils","import_errors","import_events","FuelConnectorMethods","FuelConnectorEventTypes","cache"]}
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/account.ts","../src/providers/coin-quantity.ts","../src/providers/provider.ts","../src/providers/__generated__/operations.ts","../src/providers/fuel-graphql-subscriber.ts","../src/providers/memory-cache.ts","../src/providers/transaction-request/input.ts","../src/providers/transaction-request/output.ts","../src/providers/transaction-request/transaction-request.ts","../src/providers/resource.ts","../src/providers/utils/receipts.ts","../src/providers/utils/block-explorer.ts","../src/providers/utils/gas.ts","../src/providers/utils/json.ts","../src/providers/utils/sleep.ts","../src/providers/utils/extract-tx-error.ts","../src/providers/transaction-request/errors.ts","../src/providers/transaction-request/witness.ts","../src/providers/transaction-request/create-transaction-request.ts","../src/providers/transaction-request/hash-transaction.ts","../src/providers/transaction-request/storage-slot.ts","../src/providers/transaction-request/script-transaction-request.ts","../src/providers/transaction-request/scripts.ts","../src/providers/transaction-request/utils.ts","../src/providers/transaction-response/transaction-response.ts","../src/providers/transaction-summary/assemble-transaction-summary.ts","../src/providers/transaction-summary/calculate-transaction-fee.ts","../src/providers/transaction-summary/operations.ts","../src/providers/transaction-summary/call.ts","../src/providers/transaction-summary/input.ts","../src/providers/transaction-summary/output.ts","../src/providers/transaction-summary/types.ts","../src/providers/transaction-summary/receipt.ts","../src/providers/transaction-summary/status.ts","../src/providers/transaction-response/getDecodedLogs.ts","../src/providers/utils/auto-retry-fetch.ts","../src/providers/utils/merge-quantities.ts","../src/providers/transaction-summary/get-transaction-summary.ts","../src/providers/chains.ts","../src/providers/assets/utils/network.ts","../src/providers/assets/utils/url.ts","../src/providers/assets/utils/resolveIconPaths.ts","../src/providers/assets/index.ts","../src/utils/formatTransferToContractScriptData.ts","../src/wallet/base-wallet-unlocked.ts","../src/signer/signer.ts","../src/wallet/keystore-wallet.ts","../src/hdwallet/hdwallet.ts","../src/mnemonic/mnemonic.ts","../src/wordlists/words/english.ts","../src/wordlists/index.ts","../src/mnemonic/utils.ts","../src/wallet/wallets.ts","../src/wallet/wallet.ts","../src/wallet-manager/wallet-manager.ts","../src/wallet-manager/storages/memory-storage.ts","../src/wallet-manager/vaults/mnemonic-vault.ts","../src/wallet-manager/vaults/privatekey-vault.ts","../src/wallet-manager/types.ts","../src/predicate/predicate.ts","../src/predicate/utils/getPredicateRoot.ts","../src/connectors/fuel.ts","../src/connectors/fuel-connector.ts","../src/connectors/types/connector-types.ts","../src/connectors/types/local-storage.ts","../src/connectors/utils/cache.ts","../src/connectors/utils/dispatch-fuel-connector-event.ts","../src/connectors/utils/promises.ts"],"sourcesContent":["export * from './account';\nexport * from './wallet';\nexport * from './hdwallet';\nexport * from './mnemonic';\nexport * from './wordlists';\nexport * from './signer';\nexport * from './wallet-manager';\nexport * from './predicate';\nexport * from './providers';\nexport * from './connectors';\n","import { Address } from '@fuel-ts/address';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { AbstractAccount } from '@fuel-ts/interfaces';\nimport type { AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish, BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport { arrayify, isDefined } from '@fuel-ts/utils';\nimport { clone } from 'ramda';\n\nimport type { FuelConnector } from './connectors';\nimport type {\n TransactionRequestLike,\n CallResult,\n TransactionRequest,\n Coin,\n CoinQuantityLike,\n CoinQuantity,\n Message,\n Resource,\n ExcludeResourcesOption,\n Provider,\n ScriptTransactionRequestLike,\n ProviderSendTxParams,\n TransactionResponse,\n EstimateTransactionParams,\n TransactionCost,\n} from './providers';\nimport {\n withdrawScript,\n ScriptTransactionRequest,\n transactionRequestify,\n addAmountToCoinQuantities,\n cacheTxInputsFromOwner,\n} from './providers';\nimport { assembleTransferToContractScript } from './utils/formatTransferToContractScriptData';\n\nexport type TxParamsType = Pick<\n ScriptTransactionRequestLike,\n 'gasLimit' | 'tip' | 'maturity' | 'maxFee' | 'witnessLimit'\n>;\n\nexport type EstimatedTxParams = Pick<\n TransactionCost,\n 'maxFee' | 'estimatedPredicates' | 'addedSignatures' | 'requiredQuantities'\n>;\n\n/**\n * `Account` provides an abstraction for interacting with accounts or wallets on the network.\n */\nexport class Account extends AbstractAccount {\n /**\n * The address associated with the account.\n */\n readonly address: AbstractAddress;\n\n /**\n * The provider used to interact with the network.\n */\n protected _provider?: Provider;\n\n protected _connector?: FuelConnector;\n\n /**\n * Creates a new Account instance.\n *\n * @param address - The address of the account.\n * @param provider - A Provider instance (optional).\n */\n constructor(address: string | AbstractAddress, provider?: Provider, connector?: FuelConnector) {\n super();\n this._provider = provider;\n this._connector = connector;\n this.address = Address.fromDynamicInput(address);\n }\n\n /**\n * The provider used to interact with the network.\n *\n * @returns A Provider instance.\n *\n * @throws `FuelError` if the provider is not set.\n */\n get provider(): Provider {\n if (!this._provider) {\n throw new FuelError(ErrorCode.MISSING_PROVIDER, 'Provider not set');\n }\n\n return this._provider;\n }\n\n /**\n * Sets the provider for the account.\n *\n * @param provider - A Provider instance.\n */\n set provider(provider: Provider) {\n this._provider = provider;\n }\n\n /**\n * Changes the provider connection for the account.\n *\n * @param provider - A Provider instance.\n * @returns The updated Provider instance.\n */\n connect(provider: Provider): Provider {\n this._provider = provider;\n return this.provider;\n }\n\n /**\n * Retrieves resources satisfying the spend query for the account.\n *\n * @param quantities - IDs of coins to exclude.\n * @param excludedIds - IDs of resources to be excluded from the query.\n * @returns A promise that resolves to an array of Resources.\n */\n async getResourcesToSpend(\n quantities: CoinQuantityLike[] /** IDs of coins to exclude */,\n excludedIds?: ExcludeResourcesOption\n ): Promise<Resource[]> {\n return this.provider.getResourcesToSpend(this.address, quantities, excludedIds);\n }\n\n /**\n * Retrieves coins owned by the account.\n *\n * @param assetId - The asset ID of the coins to retrieve.\n * @returns A promise that resolves to an array of Coins.\n */\n async getCoins(assetId?: BytesLike): Promise<Coin[]> {\n const coins = [];\n\n const pageSize = 9999;\n let cursor;\n // eslint-disable-next-line no-unreachable-loop\n for (;;) {\n const pageCoins = await this.provider.getCoins(this.address, assetId, {\n first: pageSize,\n after: cursor,\n });\n\n coins.push(...pageCoins);\n\n const hasNextPage = pageCoins.length >= pageSize;\n if (!hasNextPage) {\n break;\n }\n\n // TODO: implement pagination\n throw new FuelError(\n ErrorCode.NOT_SUPPORTED,\n `Wallets containing more than ${pageSize} coins exceed the current supported limit.`\n );\n }\n\n return coins;\n }\n\n /**\n * Retrieves messages owned by the account.\n *\n * @returns A promise that resolves to an array of Messages.\n */\n async getMessages(): Promise<Message[]> {\n const messages = [];\n\n const pageSize = 9999;\n let cursor;\n // eslint-disable-next-line no-unreachable-loop\n for (;;) {\n const pageMessages = await this.provider.getMessages(this.address, {\n first: pageSize,\n after: cursor,\n });\n\n messages.push(...pageMessages);\n\n const hasNextPage = pageMessages.length >= pageSize;\n if (!hasNextPage) {\n break;\n }\n\n // TODO: implement pagination\n throw new FuelError(\n ErrorCode.NOT_SUPPORTED,\n `Wallets containing more than ${pageSize} messages exceed the current supported limit.`\n );\n }\n\n return messages;\n }\n\n /**\n * Retrieves the balance of the account for the given asset.\n *\n * @param assetId - The asset ID to check the balance for.\n * @returns A promise that resolves to the balance amount.\n */\n async getBalance(assetId?: BytesLike): Promise<BN> {\n const assetIdToFetch = assetId ?? this.provider.getBaseAssetId();\n const amount = await this.provider.getBalance(this.address, assetIdToFetch);\n return amount;\n }\n\n /**\n * Retrieves all the balances for the account.\n *\n * @returns A promise that resolves to an array of Coins and their quantities.\n */\n async getBalances(): Promise<CoinQuantity[]> {\n const balances = [];\n\n const pageSize = 9999;\n let cursor;\n // eslint-disable-next-line no-unreachable-loop\n for (;;) {\n const pageBalances = await this.provider.getBalances(this.address, {\n first: pageSize,\n after: cursor,\n });\n\n balances.push(...pageBalances);\n\n const hasNextPage = pageBalances.length >= pageSize;\n if (!hasNextPage) {\n break;\n }\n\n // TODO: implement pagination\n throw new FuelError(\n ErrorCode.NOT_SUPPORTED,\n `Wallets containing more than ${pageSize} balances exceed the current supported limit.`\n );\n }\n\n return balances;\n }\n\n /**\n * Adds resources to the transaction enough to fund it.\n *\n * @param request - The transaction request.\n * @param coinQuantities - The coin quantities required to execute the transaction.\n * @param fee - The estimated transaction fee.\n * @returns A promise that resolves when the resources are added to the transaction.\n */\n async fund<T extends TransactionRequest>(request: T, params: EstimatedTxParams): Promise<T> {\n const { addedSignatures, estimatedPredicates, maxFee: fee, requiredQuantities } = params;\n const baseAssetId = this.provider.getBaseAssetId();\n\n const txRequest = request as T;\n const requiredQuantitiesWithFee = addAmountToCoinQuantities({\n amount: bn(fee),\n assetId: baseAssetId,\n coinQuantities: requiredQuantities,\n });\n\n const quantitiesDict: Record<string, { required: BN; owned: BN }> = {};\n\n requiredQuantitiesWithFee.forEach(({ amount, assetId }) => {\n quantitiesDict[assetId] = {\n required: amount,\n owned: bn(0),\n };\n });\n\n txRequest.inputs.forEach((input) => {\n const isResource = 'amount' in input;\n if (!isResource) {\n return;\n }\n const isCoin = 'owner' in input;\n const assetId = isCoin ? String(input.assetId) : baseAssetId;\n if (quantitiesDict[assetId]) {\n quantitiesDict[assetId].owned = quantitiesDict[assetId].owned.add(input.amount);\n }\n });\n\n const missingQuantities: CoinQuantity[] = [];\n Object.entries(quantitiesDict).forEach(([assetId, { owned, required }]) => {\n if (owned.lt(required)) {\n missingQuantities.push({\n assetId,\n amount: required.sub(owned),\n });\n }\n });\n\n const needsToBeFunded = missingQuantities.length;\n\n if (needsToBeFunded) {\n const excludedIds = cacheTxInputsFromOwner(txRequest.inputs, this.address.toB256());\n\n const resources = await this.getResourcesToSpend(missingQuantities, excludedIds);\n\n txRequest.addResources(resources);\n }\n\n txRequest.shiftPredicateData();\n txRequest.updatePredicateGasUsed(estimatedPredicates);\n\n const requestToReestimate = clone(txRequest);\n if (addedSignatures) {\n Array.from({ length: addedSignatures }).forEach(() => requestToReestimate.addEmptyWitness());\n }\n const { maxFee } = await this.provider.estimateTxGasAndFee({\n transactionRequest: requestToReestimate,\n });\n\n txRequest.maxFee = maxFee;\n\n return txRequest;\n }\n\n /**\n * A helper that creates a transfer transaction request and returns it.\n *\n * @param destination - The address of the destination.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The transaction parameters (gasLimit, tip, maturity, maxFee, witnessLimit).\n * @returns A promise that resolves to the prepared transaction request.\n */\n async createTransfer(\n /** Address of the destination */\n destination: string | AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId?: BytesLike,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionRequest> {\n const request = new ScriptTransactionRequest(txParams);\n const assetIdToTransfer = assetId ?? this.provider.getBaseAssetId();\n request.addCoinOutput(Address.fromAddressOrString(destination), amount, assetIdToTransfer);\n const txCost = await this.provider.getTransactionCost(request, {\n estimateTxDependencies: true,\n resourcesOwner: this,\n });\n\n this.validateGasLimitAndMaxFee({\n gasUsed: txCost.gasUsed,\n maxFee: txCost.maxFee,\n txParams,\n });\n\n request.gasLimit = txCost.gasUsed;\n request.maxFee = txCost.maxFee;\n\n await this.fund(request, txCost);\n\n return request;\n }\n\n /**\n * Transfers coins to a destination address.\n *\n * @param destination - The address of the destination.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The transaction parameters (gasLimit, maturity).\n * @returns A promise that resolves to the transaction response.\n */\n async transfer(\n /** Address of the destination */\n destination: string | AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId?: BytesLike,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionResponse> {\n if (bn(amount).lte(0)) {\n throw new FuelError(\n ErrorCode.INVALID_TRANSFER_AMOUNT,\n 'Transfer amount must be a positive number.'\n );\n }\n const assetIdToTransfer = assetId ?? this.provider.getBaseAssetId();\n const request = await this.createTransfer(destination, amount, assetIdToTransfer, txParams);\n return this.sendTransaction(request, { estimateTxDependencies: false });\n }\n\n /**\n * Transfers coins to a contract address.\n *\n * @param contractId - The address of the contract.\n * @param amount - The amount of coins to transfer.\n * @param assetId - The asset ID of the coins to transfer.\n * @param txParams - The optional transaction parameters.\n * @returns A promise that resolves to the transaction response.\n */\n async transferToContract(\n /** Contract address */\n contractId: string | AbstractAddress,\n /** Amount of coins */\n amount: BigNumberish,\n /** Asset ID of coins */\n assetId?: BytesLike,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionResponse> {\n if (bn(amount).lte(0)) {\n throw new FuelError(\n ErrorCode.INVALID_TRANSFER_AMOUNT,\n 'Transfer amount must be a positive number.'\n );\n }\n\n const contractAddress = Address.fromAddressOrString(contractId);\n const assetIdToTransfer = assetId ?? this.provider.getBaseAssetId();\n const { script, scriptData } = await assembleTransferToContractScript({\n hexlifiedContractId: contractAddress.toB256(),\n amountToTransfer: bn(amount),\n assetId: assetIdToTransfer,\n });\n\n const request = new ScriptTransactionRequest({\n ...txParams,\n script,\n scriptData,\n });\n\n request.addContractInputAndOutput(contractAddress);\n\n const txCost = await this.provider.getTransactionCost(request, {\n resourcesOwner: this,\n quantitiesToContract: [{ amount: bn(amount), assetId: String(assetIdToTransfer) }],\n });\n\n this.validateGasLimitAndMaxFee({\n gasUsed: txCost.gasUsed,\n maxFee: txCost.maxFee,\n txParams,\n });\n\n request.gasLimit = txCost.gasUsed;\n request.maxFee = txCost.maxFee;\n\n await this.fund(request, txCost);\n\n return this.sendTransaction(request);\n }\n\n /**\n * Withdraws an amount of the base asset to the base chain.\n *\n * @param recipient - Address of the recipient on the base chain.\n * @param amount - Amount of base asset.\n * @param txParams - The optional transaction parameters.\n * @returns A promise that resolves to the transaction response.\n */\n async withdrawToBaseLayer(\n /** Address of the recipient on the base chain */\n recipient: string | AbstractAddress,\n /** Amount of base asset */\n amount: BigNumberish,\n /** Tx Params */\n txParams: TxParamsType = {}\n ): Promise<TransactionResponse> {\n const recipientAddress = Address.fromAddressOrString(recipient);\n // add recipient and amount to the transaction script code\n const recipientDataArray = arrayify(\n '0x'.concat(recipientAddress.toHexString().substring(2).padStart(64, '0'))\n );\n const amountDataArray = arrayify(\n '0x'.concat(bn(amount).toHex().substring(2).padStart(16, '0'))\n );\n const script = new Uint8Array([\n ...arrayify(withdrawScript.bytes),\n ...recipientDataArray,\n ...amountDataArray,\n ]);\n\n const params: ScriptTransactionRequestLike = { script, ...txParams };\n\n const baseAssetId = this.provider.getBaseAssetId();\n const request = new ScriptTransactionRequest(params);\n const quantitiesToContract = [{ amount: bn(amount), assetId: baseAssetId }];\n\n const txCost = await this.provider.getTransactionCost(request, { quantitiesToContract });\n\n this.validateGasLimitAndMaxFee({\n gasUsed: txCost.gasUsed,\n maxFee: txCost.maxFee,\n txParams,\n });\n\n request.maxFee = txCost.maxFee;\n request.gasLimit = txCost.gasUsed;\n\n await this.fund(request, txCost);\n\n return this.sendTransaction(request);\n }\n\n async signMessage(message: string): Promise<string> {\n if (!this._connector) {\n throw new FuelError(ErrorCode.MISSING_CONNECTOR, 'A connector is required to sign messages.');\n }\n return this._connector.signMessage(this.address.toString(), message);\n }\n\n /**\n * Signs a transaction with the wallet's private key.\n *\n * @param transactionRequestLike - The transaction request to sign.\n * @returns A promise that resolves to the signature of the transaction.\n */\n async signTransaction(transactionRequestLike: TransactionRequestLike): Promise<string> {\n if (!this._connector) {\n throw new FuelError(\n ErrorCode.MISSING_CONNECTOR,\n 'A connector is required to sign transactions.'\n );\n }\n return this._connector.signTransaction(this.address.toString(), transactionRequestLike);\n }\n\n /**\n * Sends a transaction to the network.\n *\n * @param transactionRequestLike - The transaction request to be sent.\n * @returns A promise that resolves to the transaction response.\n */\n async sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true, awaitExecution }: ProviderSendTxParams = {}\n ): Promise<TransactionResponse> {\n if (this._connector) {\n return this.provider.getTransactionResponse(\n await this._connector.sendTransaction(this.address.toString(), transactionRequestLike)\n );\n }\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.sendTransaction(transactionRequest, {\n awaitExecution,\n estimateTxDependencies: false,\n });\n }\n\n /**\n * Simulates a transaction.\n *\n * @param transactionRequestLike - The transaction request to be simulated.\n * @returns A promise that resolves to the call result.\n */\n async simulateTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true }: EstimateTransactionParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.simulate(transactionRequest, { estimateTxDependencies: false });\n }\n\n private validateGasLimitAndMaxFee({\n txParams: { gasLimit: setGasLimit, maxFee: setMaxFee },\n gasUsed,\n maxFee,\n }: {\n gasUsed: BN;\n maxFee: BN;\n txParams: Pick<TxParamsType, 'gasLimit' | 'maxFee'>;\n }) {\n if (isDefined(setGasLimit) && gasUsed.gt(setGasLimit)) {\n throw new FuelError(\n ErrorCode.GAS_LIMIT_TOO_LOW,\n `Gas limit '${setGasLimit}' is lower than the required: '${gasUsed}'.`\n );\n }\n\n if (isDefined(setMaxFee) && maxFee.gt(setMaxFee)) {\n throw new FuelError(\n ErrorCode.MAX_FEE_TOO_LOW,\n `Max fee '${setMaxFee}' is lower than the required: '${maxFee}'.`\n );\n }\n }\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish, BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport { hexlify } from '@fuel-ts/utils';\n\nexport type CoinQuantityLike =\n | [amount: BigNumberish, assetId: BytesLike, max?: BigNumberish]\n | { amount: BigNumberish; assetId: BytesLike; max?: BigNumberish };\nexport type CoinQuantity = { amount: BN; assetId: string; max?: BN };\n\n/** @hidden */\nexport const coinQuantityfy = (coinQuantityLike: CoinQuantityLike): CoinQuantity => {\n let assetId;\n let amount;\n let max;\n if (Array.isArray(coinQuantityLike)) {\n amount = coinQuantityLike[0];\n assetId = coinQuantityLike[1];\n max = coinQuantityLike[2] ?? undefined;\n } else {\n amount = coinQuantityLike.amount;\n assetId = coinQuantityLike.assetId;\n max = coinQuantityLike.max ?? undefined;\n }\n\n const bnAmount = bn(amount);\n return {\n assetId: hexlify(assetId),\n amount: bnAmount.lt(1) ? bn(1) : bnAmount,\n max: max ? bn(max) : undefined,\n };\n};\n\nexport interface IAddAmountToAssetParams {\n assetId: string;\n amount: BN;\n coinQuantities: CoinQuantity[];\n}\n\nexport const addAmountToCoinQuantities = (params: IAddAmountToAssetParams): CoinQuantity[] => {\n const { amount, assetId } = params;\n\n const coinQuantities = [...params.coinQuantities];\n\n const assetIdx = coinQuantities.findIndex((coinQuantity) => coinQuantity.assetId === assetId);\n\n if (assetIdx !== -1) {\n coinQuantities[assetIdx].amount = coinQuantities[assetIdx].amount.add(amount);\n } else {\n coinQuantities.push({ assetId, amount });\n }\n\n return coinQuantities;\n};\n","import { Address } from '@fuel-ts/address';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAccount, AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport { BN, bn } from '@fuel-ts/math';\nimport type { Transaction } from '@fuel-ts/transactions';\nimport {\n InputType,\n TransactionType,\n InputMessageCoder,\n TransactionCoder,\n} from '@fuel-ts/transactions';\nimport { arrayify, hexlify, DateTime } from '@fuel-ts/utils';\nimport { checkFuelCoreVersionCompatibility } from '@fuel-ts/versions';\nimport { equalBytes } from '@noble/curves/abstract/utils';\nimport { Network } from 'ethers';\nimport type { DocumentNode } from 'graphql';\nimport { GraphQLClient } from 'graphql-request';\nimport { clone } from 'ramda';\n\nimport type { Predicate } from '../predicate';\n\nimport { getSdk as getOperationsSdk } from './__generated__/operations';\nimport type {\n GqlChainInfoFragmentFragment,\n GqlDryRunFailureStatusFragmentFragment,\n GqlDryRunSuccessStatusFragmentFragment,\n GqlGasCosts,\n GqlGetBlocksQueryVariables,\n} from './__generated__/operations';\nimport type { Coin } from './coin';\nimport type { CoinQuantity, CoinQuantityLike } from './coin-quantity';\nimport { coinQuantityfy } from './coin-quantity';\nimport { FuelGraphqlSubscriber } from './fuel-graphql-subscriber';\nimport { MemoryCache } from './memory-cache';\nimport type { Message, MessageCoin, MessageProof, MessageStatus } from './message';\nimport type { ExcludeResourcesOption, Resource } from './resource';\nimport type {\n TransactionRequestLike,\n TransactionRequest,\n TransactionRequestInput,\n CoinTransactionRequestInput,\n ScriptTransactionRequest,\n JsonAbisFromAllCalls,\n} from './transaction-request';\nimport { transactionRequestify } from './transaction-request';\nimport type { TransactionResultReceipt } from './transaction-response';\nimport { TransactionResponse } from './transaction-response';\nimport { processGqlReceipt } from './transaction-summary/receipt';\nimport { calculateGasFee, getGasUsedFromReceipts, getReceiptsWithMissingData } from './utils';\nimport type { RetryOptions } from './utils/auto-retry-fetch';\nimport { autoRetryFetch } from './utils/auto-retry-fetch';\nimport { mergeQuantities } from './utils/merge-quantities';\n\nconst MAX_RETRIES = 10;\n\nexport type DryRunStatus =\n | Omit<GqlDryRunFailureStatusFragmentFragment, '__typename'>\n | Omit<GqlDryRunSuccessStatusFragmentFragment, '__typename'>;\n\nexport type CallResult = {\n receipts: TransactionResultReceipt[];\n dryrunStatus?: DryRunStatus;\n};\n\nexport type EstimateTxDependenciesReturns = CallResult & {\n outputVariables: number;\n missingContractIds: string[];\n};\n\n/**\n * A Fuel block\n */\nexport type Block = {\n id: string;\n height: BN;\n time: string;\n transactionIds: string[];\n};\n\n/**\n * Deployed Contract bytecode and contract id\n */\nexport type ContractResult = {\n id: string;\n bytecode: string;\n};\n\ntype ConsensusParameters = {\n contractMaxSize: BN;\n maxInputs: BN;\n maxOutputs: BN;\n maxWitnesses: BN;\n maxGasPerTx: BN;\n maxScriptLength: BN;\n maxScriptDataLength: BN;\n maxStorageSlots: BN;\n maxPredicateLength: BN;\n maxPredicateDataLength: BN;\n maxGasPerPredicate: BN;\n gasPriceFactor: BN;\n gasPerByte: BN;\n maxMessageDataLength: BN;\n chainId: BN;\n gasCosts: GqlGasCosts;\n baseAssetId: string;\n};\n\n/**\n * Chain information\n */\nexport type ChainInfo = {\n name: string;\n baseChainHeight: BN;\n consensusParameters: ConsensusParameters;\n gasCosts: GqlGasCosts;\n latestBlock: {\n id: string;\n height: BN;\n time: string;\n transactions: Array<{ id: string }>;\n };\n};\n\n/**\n * Node information\n */\nexport type NodeInfo = {\n utxoValidation: boolean;\n vmBacktrace: boolean;\n maxTx: BN;\n maxDepth: BN;\n nodeVersion: string;\n};\n\nexport type NodeInfoAndConsensusParameters = {\n nodeVersion: string;\n gasPerByte: BN;\n gasPriceFactor: BN;\n maxGasPerTx: BN;\n};\n\n// #region cost-estimation-1\nexport type TransactionCost = {\n gasPrice: BN;\n gasUsed: BN;\n minGas: BN;\n minFee: BN;\n maxFee: BN;\n maxGas: BN;\n receipts: TransactionResultReceipt[];\n outputVariables: number;\n missingContractIds: string[];\n estimatedPredicates: TransactionRequestInput[];\n requiredQuantities: CoinQuantity[];\n addedSignatures: number;\n};\n// #endregion cost-estimation-1\n\nconst processGqlChain = (chain: GqlChainInfoFragmentFragment): ChainInfo => {\n const { name, daHeight, consensusParameters, latestBlock } = chain;\n\n const { contractParams, feeParams, predicateParams, scriptParams, txParams, gasCosts } =\n consensusParameters;\n\n return {\n name,\n baseChainHeight: bn(daHeight),\n consensusParameters: {\n contractMaxSize: bn(contractParams.contractMaxSize),\n maxInputs: bn(txParams.maxInputs),\n maxOutputs: bn(txParams.maxOutputs),\n maxWitnesses: bn(txParams.maxWitnesses),\n maxGasPerTx: bn(txParams.maxGasPerTx),\n maxScriptLength: bn(scriptParams.maxScriptLength),\n maxScriptDataLength: bn(scriptParams.maxScriptDataLength),\n maxStorageSlots: bn(contractParams.maxStorageSlots),\n maxPredicateLength: bn(predicateParams.maxPredicateLength),\n maxPredicateDataLength: bn(predicateParams.maxPredicateDataLength),\n maxGasPerPredicate: bn(predicateParams.maxGasPerPredicate),\n gasPriceFactor: bn(feeParams.gasPriceFactor),\n gasPerByte: bn(feeParams.gasPerByte),\n maxMessageDataLength: bn(predicateParams.maxMessageDataLength),\n chainId: bn(consensusParameters.chainId),\n baseAssetId: consensusParameters.baseAssetId,\n gasCosts,\n },\n gasCosts,\n latestBlock: {\n id: latestBlock.id,\n height: bn(latestBlock.height),\n time: latestBlock.header.time,\n transactions: latestBlock.transactions.map((i) => ({\n id: i.id,\n })),\n },\n };\n};\n\n/**\n * @hidden\n *\n * Cursor pagination arguments\n *\n * https://relay.dev/graphql/connections.htm#sec-Arguments\n */\nexport type CursorPaginationArgs = {\n /** Forward pagination limit */\n first?: number | null;\n /** Forward pagination cursor */\n after?: string | null;\n /** Backward pagination limit */\n last?: number | null;\n /** Backward pagination cursor */\n before?: string | null;\n};\n\n/*\n * Provider initialization options\n */\nexport type ProviderOptions = {\n /**\n * Custom fetch function to use for making requests.\n */\n fetch?: (\n url: string,\n requestInit?: RequestInit,\n providerOptions?: Omit<ProviderOptions, 'fetch'>\n ) => Promise<Response>;\n /**\n * Timeout [ms] after which every request will be aborted.\n */\n timeout?: number;\n /**\n * Cache UTXOs for the given time [ms].\n */\n cacheUtxo?: number;\n /**\n * Retry options to use when fetching data from the node.\n */\n retryOptions?: RetryOptions;\n /**\n * Middleware to modify the request before it is sent.\n * This can be used to add headers, modify the body, etc.\n */\n requestMiddleware?: (request: RequestInit) => RequestInit | Promise<RequestInit>;\n};\n\n/**\n * UTXO Validation Param\n */\nexport type UTXOValidationParams = {\n utxoValidation?: boolean;\n};\n\n/**\n * Transaction estimation Param\n */\nexport type EstimateTransactionParams = {\n estimateTxDependencies?: boolean;\n};\n\nexport type TransactionCostParams = EstimateTransactionParams & {\n resourcesOwner?: AbstractAccount;\n quantitiesToContract?: CoinQuantity[];\n signatureCallback?: (request: ScriptTransactionRequest) => Promise<ScriptTransactionRequest>;\n};\n\n/**\n * Provider Call transaction params\n */\nexport type ProviderCallParams = UTXOValidationParams & EstimateTransactionParams;\n\n/**\n * Provider Send transaction params\n */\nexport type ProviderSendTxParams = EstimateTransactionParams & {\n /**\n * By default, the promise will resolve immediately after the transaction is submitted.\n *\n * If set to true, the promise will resolve only when the transaction changes status\n * from `SubmittedStatus` to one of `SuccessStatus`, `FailureStatus` or `SqueezedOutStatus`.\n *\n */\n awaitExecution?: boolean;\n};\n\n/**\n * URL - Consensus Params mapping.\n */\ntype ChainInfoCache = Record<string, ChainInfo>;\n\n/**\n * URL - Node Info mapping.\n */\ntype NodeInfoCache = Record<string, NodeInfo>;\n\n/**\n * A provider for connecting to a node\n */\nexport default class Provider {\n operations: ReturnType<typeof getOperationsSdk>;\n cache?: MemoryCache;\n\n static clearChainAndNodeCaches() {\n Provider.nodeInfoCache = {};\n Provider.chainInfoCache = {};\n }\n\n private static chainInfoCache: ChainInfoCache = {};\n private static nodeInfoCache: NodeInfoCache = {};\n\n options: ProviderOptions = {\n timeout: undefined,\n cacheUtxo: undefined,\n fetch: undefined,\n retryOptions: undefined,\n };\n\n private static getFetchFn(options: ProviderOptions): NonNullable<ProviderOptions['fetch']> {\n const { retryOptions, timeout } = options;\n\n return autoRetryFetch(async (...args) => {\n const url = args[0];\n const request = args[1];\n const signal = timeout ? AbortSignal.timeout(timeout) : undefined;\n\n let fullRequest: RequestInit = { ...request, signal };\n\n if (options.requestMiddleware) {\n fullRequest = await options.requestMiddleware(fullRequest);\n }\n\n return options.fetch ? options.fetch(url, fullRequest, options) : fetch(url, fullRequest);\n }, retryOptions);\n }\n\n /**\n * Constructor to initialize a Provider.\n *\n * @param url - GraphQL endpoint of the Fuel node\n * @param chainInfo - Chain info of the Fuel node\n * @param options - Additional options for the provider\n * @hidden\n */\n protected constructor(\n /** GraphQL endpoint of the Fuel node */\n public url: string,\n options: ProviderOptions = {}\n ) {\n this.options = { ...this.options, ...options };\n this.url = url;\n\n this.operations = this.createOperations();\n this.cache = options.cacheUtxo ? new MemoryCache(options.cacheUtxo) : undefined;\n }\n\n /**\n * Creates a new instance of the Provider class. This is the recommended way to initialize a Provider.\n * @param url - GraphQL endpoint of the Fuel node\n * @param options - Additional options for the provider\n */\n static async create(url: string, options: ProviderOptions = {}) {\n const provider = new Provider(url, options);\n await provider.fetchChainAndNodeInfo();\n return provider;\n }\n\n /**\n * Returns the cached chainInfo for the current URL.\n */\n getChain() {\n const chain = Provider.chainInfoCache[this.url];\n if (!chain) {\n throw new FuelError(\n ErrorCode.CHAIN_INFO_CACHE_EMPTY,\n 'Chain info cache is empty. Make sure you have called `Provider.create` to initialize the provider.'\n );\n }\n return chain;\n }\n\n /**\n * Returns the cached nodeInfo for the current URL.\n */\n getNode() {\n const node = Provider.nodeInfoCache[this.url];\n if (!node) {\n throw new FuelError(\n ErrorCode.NODE_INFO_CACHE_EMPTY,\n 'Node info cache is empty. Make sure you have called `Provider.create` to initialize the provider.'\n );\n }\n return node;\n }\n\n /**\n * Returns some helpful parameters related to gas fees.\n */\n getGasConfig() {\n const { maxGasPerTx, maxGasPerPredicate, gasPriceFactor, gasPerByte, gasCosts } =\n this.getChain().consensusParameters;\n return {\n maxGasPerTx,\n maxGasPerPredicate,\n gasPriceFactor,\n gasPerByte,\n gasCosts,\n };\n }\n\n /**\n * Updates the URL for the provider and fetches the consensus parameters for the new URL, if needed.\n */\n async connect(url: string, options?: ProviderOptions) {\n this.url = url;\n this.options = options ?? this.options;\n this.operations = this.createOperations();\n await this.fetchChainAndNodeInfo();\n }\n\n /**\n * Fetches both the chain and node information, saves it to the cache, and return it.\n *\n * @returns NodeInfo and Chain\n */\n async fetchChainAndNodeInfo() {\n const chain = await this.fetchChain();\n const nodeInfo = await this.fetchNode();\n\n Provider.ensureClientVersionIsSupported(nodeInfo);\n\n return {\n chain,\n nodeInfo,\n };\n }\n\n private static ensureClientVersionIsSupported(nodeInfo: NodeInfo) {\n const { isMajorSupported, isMinorSupported, supportedVersion } =\n checkFuelCoreVersionCompatibility(nodeInfo.nodeVersion);\n\n if (!isMajorSupported || !isMinorSupported) {\n throw new FuelError(\n FuelError.CODES.UNSUPPORTED_FUEL_CLIENT_VERSION,\n `Fuel client version: ${nodeInfo.nodeVersion}, Supported version: ${supportedVersion}`\n );\n }\n }\n\n /**\n * Create GraphQL client and set operations.\n *\n * @returns The operation SDK object\n */\n private createOperations() {\n const fetchFn = Provider.getFetchFn(this.options);\n const gqlClient = new GraphQLClient(this.url, {\n fetch: (url: string, requestInit: RequestInit) => fetchFn(url, requestInit, this.options),\n });\n\n const executeQuery = (query: DocumentNode, vars: Record<string, unknown>) => {\n const opDefinition = query.definitions.find((x) => x.kind === 'OperationDefinition') as {\n operation: string;\n };\n const isSubscription = opDefinition?.operation === 'subscription';\n\n if (isSubscription) {\n return new FuelGraphqlSubscriber({\n url: this.url,\n query,\n fetchFn: (url, requestInit) => fetchFn(url as string, requestInit, this.options),\n variables: vars,\n });\n }\n return gqlClient.request(query, vars);\n };\n\n // @ts-expect-error This is due to this function being generic. Its type is specified when calling a specific operation via provider.operations.xyz.\n return getOperationsSdk(executeQuery);\n }\n\n /**\n * Returns the version of the connected node.\n *\n * @returns A promise that resolves to the version string.\n */\n async getVersion(): Promise<string> {\n const {\n nodeInfo: { nodeVersion },\n } = await this.operations.getVersion();\n return nodeVersion;\n }\n\n /**\n * @hidden\n *\n * Returns the network configuration of the connected Fuel node.\n *\n * @returns A promise that resolves to the network configuration object\n */\n async getNetwork(): Promise<Network> {\n const {\n name,\n consensusParameters: { chainId },\n } = await this.getChain();\n const network = new Network(name, chainId.toNumber());\n return Promise.resolve(network);\n }\n\n /**\n * Returns the block number.\n *\n * @returns A promise that resolves to the block number\n */\n async getBlockNumber(): Promise<BN> {\n const { chain } = await this.operations.getChain();\n return bn(chain.latestBlock.height, 10);\n }\n\n /**\n * Returns the chain information.\n * @param url - The URL of the Fuel node\n * @returns NodeInfo object\n */\n async fetchNode(): Promise<NodeInfo> {\n const { nodeInfo } = await this.operations.getNodeInfo();\n\n const processedNodeInfo: NodeInfo = {\n maxDepth: bn(nodeInfo.maxDepth),\n maxTx: bn(nodeInfo.maxTx),\n nodeVersion: nodeInfo.nodeVersion,\n utxoValidation: nodeInfo.utxoValidation,\n vmBacktrace: nodeInfo.vmBacktrace,\n };\n\n Provider.nodeInfoCache[this.url] = processedNodeInfo;\n\n return processedNodeInfo;\n }\n\n /**\n * Fetches the `chainInfo` for the given node URL.\n * @param url - The URL of the Fuel node\n * @returns ChainInfo object\n */\n async fetchChain(): Promise<ChainInfo> {\n const { chain } = await this.operations.getChain();\n\n const processedChain = processGqlChain(chain);\n\n Provider.chainInfoCache[this.url] = processedChain;\n\n return processedChain;\n }\n\n /**\n * Returns the chain ID\n * @returns A promise that resolves to the chain ID number\n */\n getChainId() {\n const {\n consensusParameters: { chainId },\n } = this.getChain();\n return chainId.toNumber();\n }\n\n /**\n * Returns the base asset ID for the current provider network\n *\n * @returns the base asset ID\n */\n getBaseAssetId() {\n const {\n consensusParameters: { baseAssetId },\n } = this.getChain();\n return baseAssetId;\n }\n\n /**\n * @hidden\n */\n #cacheInputs(inputs: TransactionRequestInput[]): void {\n if (!this.cache) {\n return;\n }\n\n inputs.forEach((input) => {\n if (input.type === InputType.Coin) {\n this.cache?.set(input.id);\n }\n });\n }\n\n /**\n * Submits a transaction to the chain to be executed.\n *\n * If the transaction is missing any dependencies,\n * the transaction will be mutated and those dependencies will be added.\n *\n * @param transactionRequestLike - The transaction request object.\n * @returns A promise that resolves to the transaction response object.\n */\n // #region Provider-sendTransaction\n async sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true, awaitExecution = false }: ProviderSendTxParams = {}\n ): Promise<TransactionResponse> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n this.#cacheInputs(transactionRequest.inputs);\n if (estimateTxDependencies) {\n await this.estimateTxDependencies(transactionRequest);\n }\n // #endregion Provider-sendTransaction\n\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n\n let abis: JsonAbisFromAllCalls | undefined;\n\n if (transactionRequest.type === TransactionType.Script) {\n abis = transactionRequest.abis;\n }\n\n if (awaitExecution) {\n const subscription = this.operations.submitAndAwait({ encodedTransaction });\n for await (const { submitAndAwait } of subscription) {\n if (submitAndAwait.type === 'SqueezedOutStatus') {\n throw new FuelError(\n ErrorCode.TRANSACTION_SQUEEZED_OUT,\n `Transaction Squeezed Out with reason: ${submitAndAwait.reason}`\n );\n }\n\n if (submitAndAwait.type !== 'SubmittedStatus') {\n break;\n }\n }\n\n const transactionId = transactionRequest.getTransactionId(this.getChainId());\n const response = new TransactionResponse(transactionId, this, abis);\n await response.fetch();\n return response;\n }\n\n const {\n submit: { id: transactionId },\n } = await this.operations.submit({ encodedTransaction });\n\n return new TransactionResponse(transactionId, this, abis);\n }\n\n /**\n * Executes a transaction without actually submitting it to the chain.\n *\n * If the transaction is missing any dependencies,\n * the transaction will be mutated and those dependencies will be added.\n *\n * @param transactionRequestLike - The transaction request object.\n * @param utxoValidation - Additional provider call parameters.\n * @returns A promise that resolves to the call result object.\n */\n async call(\n transactionRequestLike: TransactionRequestLike,\n { utxoValidation, estimateTxDependencies = true }: ProviderCallParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n return this.estimateTxDependencies(transactionRequest);\n }\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n const { dryRun: dryRunStatuses } = await this.operations.dryRun({\n encodedTransactions: encodedTransaction,\n utxoValidation: utxoValidation || false,\n });\n const [{ receipts: rawReceipts, status }] = dryRunStatuses;\n const receipts = rawReceipts.map(processGqlReceipt);\n\n return { receipts, dryrunStatus: status };\n }\n\n /**\n * Verifies whether enough gas is available to complete transaction.\n *\n * @param transactionRequest - The transaction request object.\n * @returns A promise that resolves to the estimated transaction request object.\n */\n async estimatePredicates(transactionRequest: TransactionRequest): Promise<TransactionRequest> {\n const shouldEstimatePredicates = Boolean(\n transactionRequest.inputs.find(\n (input) =>\n 'predicate' in input &&\n input.predicate &&\n !equalBytes(arrayify(input.predicate), arrayify('0x')) &&\n new BN(input.predicateGasUsed).isZero()\n )\n );\n if (!shouldEstimatePredicates) {\n return transactionRequest;\n }\n const encodedTransaction = hexlify(transactionRequest.toTransactionBytes());\n const response = await this.operations.estimatePredicates({\n encodedTransaction,\n });\n\n const {\n estimatePredicates: { inputs },\n } = response;\n\n if (inputs) {\n inputs.forEach((input, index) => {\n if ('predicateGasUsed' in input && bn(input.predicateGasUsed).gt(0)) {\n // eslint-disable-next-line no-param-reassign\n (<CoinTransactionRequestInput>transactionRequest.inputs[index]).predicateGasUsed =\n input.predicateGasUsed;\n }\n });\n }\n\n return transactionRequest;\n }\n\n /**\n * Will dryRun a transaction and check for missing dependencies.\n *\n * If there are missing variable outputs,\n * `addVariableOutputs` is called on the transaction.\n *\n *\n * @param transactionRequest - The transaction request object.\n * @returns A promise.\n */\n async estimateTxDependencies(\n transactionRequest: TransactionRequest\n ): Promise<EstimateTxDependenciesReturns> {\n if (transactionRequest.type === TransactionType.Create) {\n return {\n receipts: [],\n outputVariables: 0,\n missingContractIds: [],\n };\n }\n\n let receipts: TransactionResultReceipt[] = [];\n const missingContractIds: string[] = [];\n let outputVariables = 0;\n let dryrunStatus: DryRunStatus | undefined;\n\n for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {\n const {\n dryRun: [{ receipts: rawReceipts, status }],\n } = await this.operations.dryRun({\n encodedTransactions: [hexlify(transactionRequest.toTransactionBytes())],\n utxoValidation: false,\n });\n\n receipts = rawReceipts.map(processGqlReceipt);\n dryrunStatus = status;\n\n const { missingOutputVariables, missingOutputContractIds } =\n getReceiptsWithMissingData(receipts);\n\n const hasMissingOutputs =\n missingOutputVariables.length !== 0 || missingOutputContractIds.length !== 0;\n\n if (hasMissingOutputs) {\n outputVariables += missingOutputVariables.length;\n transactionRequest.addVariableOutputs(missingOutputVariables.length);\n missingOutputContractIds.forEach(({ contractId }) => {\n transactionRequest.addContractInputAndOutput(Address.fromString(contractId));\n missingContractIds.push(contractId);\n });\n\n const { maxFee } = await this.estimateTxGasAndFee({\n transactionRequest,\n });\n\n // eslint-disable-next-line no-param-reassign\n transactionRequest.maxFee = maxFee;\n } else {\n break;\n }\n }\n\n return {\n receipts,\n outputVariables,\n missingContractIds,\n dryrunStatus,\n };\n }\n\n /**\n * Dry runs multiple transactions and checks for missing dependencies in batches.\n *\n * Transactions are dry run in batches. After each dry run, transactions requiring\n * further modifications are identified. The method iteratively updates these transactions\n * and performs subsequent dry runs until all dependencies for each transaction are satisfied.\n *\n * @param transactionRequests - Array of transaction request objects.\n * @returns A promise that resolves to an array of results for each transaction.\n */\n async estimateMultipleTxDependencies(\n transactionRequests: TransactionRequest[]\n ): Promise<EstimateTxDependenciesReturns[]> {\n const results: EstimateTxDependenciesReturns[] = transactionRequests.map(() => ({\n receipts: [],\n outputVariables: 0,\n missingContractIds: [],\n dryrunStatus: undefined,\n }));\n\n const allRequests = clone(transactionRequests);\n\n // Map of original request index to its serialized transaction (for ScriptTransactionRequest only)\n const serializedTransactionsMap = new Map();\n\n // Prepare ScriptTransactionRequests and their indices\n allRequests.forEach((req, index) => {\n if (req.type === TransactionType.Script) {\n serializedTransactionsMap.set(index, hexlify(req.toTransactionBytes()));\n }\n });\n\n // Indices of ScriptTransactionRequests\n let transactionsToProcess = Array.from(serializedTransactionsMap.keys());\n let attempt = 0;\n\n while (transactionsToProcess.length > 0 && attempt < MAX_RETRIES) {\n const encodedTransactions = transactionsToProcess.map((index) =>\n serializedTransactionsMap.get(index)\n );\n const dryRunResults = await this.operations.dryRun({\n encodedTransactions,\n utxoValidation: false,\n });\n\n const nextRoundTransactions = [];\n\n for (let i = 0; i < dryRunResults.dryRun.length; i++) {\n const requestIdx = transactionsToProcess[i];\n const { receipts: rawReceipts, status } = dryRunResults.dryRun[i];\n const result = results[requestIdx];\n result.receipts = rawReceipts.map(processGqlReceipt);\n result.dryrunStatus = status;\n const { missingOutputVariables, missingOutputContractIds } = getReceiptsWithMissingData(\n result.receipts\n );\n const hasMissingOutputs =\n missingOutputVariables.length > 0 || missingOutputContractIds.length > 0;\n const request = allRequests[requestIdx];\n if (hasMissingOutputs && request?.type === TransactionType.Script) {\n result.outputVariables += missingOutputVariables.length;\n request.addVariableOutputs(missingOutputVariables.length);\n missingOutputContractIds.forEach(({ contractId }) => {\n request.addContractInputAndOutput(Address.fromString(contractId));\n result.missingContractIds.push(contractId);\n });\n const { maxFee } = await this.estimateTxGasAndFee({\n transactionRequest: request,\n });\n request.maxFee = maxFee;\n // Prepare for the next round of dry run\n serializedTransactionsMap.set(requestIdx, hexlify(request.toTransactionBytes()));\n nextRoundTransactions.push(requestIdx);\n }\n }\n\n transactionsToProcess = nextRoundTransactions;\n attempt += 1;\n }\n\n return results;\n }\n\n async dryRunMultipleTransactions(\n transactionRequests: TransactionRequest[],\n { utxoValidation, estimateTxDependencies = true }: ProviderCallParams = {}\n ): Promise<CallResult[]> {\n if (estimateTxDependencies) {\n return this.estimateMultipleTxDependencies(transactionRequests);\n }\n const encodedTransactions = transactionRequests.map((tx) => hexlify(tx.toTransactionBytes()));\n const { dryRun: dryRunStatuses } = await this.operations.dryRun({\n encodedTransactions,\n utxoValidation: utxoValidation || false,\n });\n\n const results = dryRunStatuses.map(({ receipts: rawReceipts, status }) => {\n const receipts = rawReceipts.map(processGqlReceipt);\n return { receipts, dryrunStatus: status };\n });\n\n return results;\n }\n\n /**\n * Estimates the transaction gas and fee based on the provided transaction request.\n * @param transactionRequest - The transaction request object.\n * @returns An object containing the estimated minimum gas, minimum fee, maximum gas, and maximum fee.\n */\n async estimateTxGasAndFee(params: { transactionRequest: TransactionRequest; gasPrice?: BN }) {\n const { transactionRequest } = params;\n let { gasPrice } = params;\n\n const chainInfo = this.getChain();\n const { gasPriceFactor, maxGasPerTx } = this.getGasConfig();\n\n const minGas = transactionRequest.calculateMinGas(chainInfo);\n if (!gasPrice) {\n gasPrice = await this.estimateGasPrice(10);\n }\n\n const minFee = calculateGasFee({\n gasPrice: bn(gasPrice),\n gas: minGas,\n priceFactor: gasPriceFactor,\n tip: transactionRequest.tip,\n }).add(1);\n\n let gasLimit = bn(0);\n\n // Only Script transactions consume gas\n if (transactionRequest.type === TransactionType.Script) {\n // If the gasLimit is set to 0, it means we need to estimate it.\n gasLimit = transactionRequest.gasLimit;\n if (transactionRequest.gasLimit.eq(0)) {\n transactionRequest.gasLimit = minGas;\n\n /*\n * Adjusting the gasLimit of a transaction (TX) impacts its maxGas.\n * Consequently, this affects the maxFee, as it is derived from the maxGas. To accurately estimate the\n * gasLimit for a transaction, especially when the exact gas consumption is uncertain (as in an estimation dry-run),\n * the following steps are required:\n * 1 - Initially, set the gasLimit using the calculated minGas.\n * 2 - Based on this initial gasLimit, calculate the maxGas.\n * 3 - Get the maximum gas per transaction allowed by the chain, and subtract the previously calculated maxGas from this limit.\n * 4 - The result of this subtraction should then be adopted as the new, definitive gasLimit.\n * 5 - Recalculate the maxGas with the updated gasLimit. This new maxGas is then used to compute the maxFee.\n * 6 - The calculated maxFee represents the safe, estimated cost required to fund the transaction.\n */\n transactionRequest.gasLimit = maxGasPerTx.sub(\n transactionRequest.calculateMaxGas(chainInfo, minGas)\n );\n\n gasLimit = transactionRequest.gasLimit;\n }\n }\n const maxGas = transactionRequest.calculateMaxGas(chainInfo, minGas);\n const maxFee = calculateGasFee({\n gasPrice: bn(gasPrice),\n gas: maxGas,\n priceFactor: gasPriceFactor,\n tip: transactionRequest.tip,\n }).add(1);\n\n return {\n minGas,\n minFee,\n maxGas,\n maxFee,\n gasPrice,\n gasLimit,\n };\n }\n\n /**\n * Executes a signed transaction without applying the states changes\n * on the chain.\n *\n * If the transaction is missing any dependencies,\n * the transaction will be mutated and those dependencies will be added\n *\n * @param transactionRequestLike - The transaction request object.\n * @returns A promise that resolves to the call result object.\n */\n async simulate(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true }: EstimateTransactionParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n return this.estimateTxDependencies(transactionRequest);\n }\n const encodedTransactions = [hexlify(transactionRequest.toTransactionBytes())];\n\n const { dryRun: dryRunStatuses } = await this.operations.dryRun({\n encodedTransactions,\n utxoValidation: true,\n });\n\n const callResult = dryRunStatuses.map((dryRunStatus) => {\n const { id, receipts, status } = dryRunStatus;\n\n const processedReceipts = receipts.map(processGqlReceipt);\n\n return { id, receipts: processedReceipts, status };\n });\n\n return { receipts: callResult[0].receipts };\n }\n\n /**\n * Returns a transaction cost to enable user\n * to set gasLimit and also reserve balance amounts\n * on the the transaction.\n *\n * @privateRemarks\n * The tolerance is add on top of the gasUsed calculated\n * from the node, this create a safe margin costs like\n * change states on transfer that don't occur on the dryRun\n * transaction. The default value is 0.2 or 20%\n *\n * @param transactionRequestLike - The transaction request object.\n * @param tolerance - The tolerance to add on top of the gasUsed.\n * @returns A promise that resolves to the transaction cost object.\n */\n async getTransactionCost(\n transactionRequestLike: TransactionRequestLike,\n { resourcesOwner, signatureCallback, quantitiesToContract = [] }: TransactionCostParams = {}\n ): Promise<TransactionCost> {\n const txRequestClone = clone(transactionRequestify(transactionRequestLike));\n const isScriptTransaction = txRequestClone.type === TransactionType.Script;\n const baseAssetId = this.getBaseAssetId();\n\n // Fund with fake UTXOs to avoid not enough funds error\n // Getting coin quantities from amounts being transferred\n const coinOutputsQuantities = txRequestClone.getCoinOutputsQuantities();\n // Combining coin quantities from amounts being transferred and forwarding to contracts\n const allQuantities = mergeQuantities(coinOutputsQuantities, quantitiesToContract);\n // Funding transaction with fake utxos\n txRequestClone.fundWithFakeUtxos(allQuantities, baseAssetId, resourcesOwner?.address);\n\n /**\n * Estimate predicates gasUsed\n */\n // Remove gasLimit to avoid gasLimit when estimating predicates\n txRequestClone.maxFee = bn(0);\n if (isScriptTransaction) {\n txRequestClone.gasLimit = bn(0);\n }\n\n /**\n * The fake utxos added above can be from a predicate\n * If the resources owner is a predicate,\n * we need to populate the resources with the predicate's data\n * so that predicate estimation can happen.\n */\n if (resourcesOwner && 'populateTransactionPredicateData' in resourcesOwner) {\n (resourcesOwner as Predicate<[]>).populateTransactionPredicateData(txRequestClone);\n }\n\n const signedRequest = clone(txRequestClone) as ScriptTransactionRequest;\n\n let addedSignatures = 0;\n if (signatureCallback && isScriptTransaction) {\n const lengthBefore = signedRequest.witnesses.length;\n await signatureCallback(signedRequest);\n addedSignatures = signedRequest.witnesses.length - lengthBefore;\n }\n\n await this.estimatePredicates(signedRequest);\n\n /**\n * Calculate minGas and maxGas based on the real transaction\n */\n // eslint-disable-next-line prefer-const\n let { maxFee, maxGas, minFee, minGas, gasPrice, gasLimit } = await this.estimateTxGasAndFee({\n transactionRequest: signedRequest,\n });\n\n let receipts: TransactionResultReceipt[] = [];\n let missingContractIds: string[] = [];\n let outputVariables = 0;\n let gasUsed = bn(0);\n\n txRequestClone.updatePredicateGasUsed(signedRequest.inputs);\n\n txRequestClone.maxFee = maxFee;\n if (isScriptTransaction) {\n txRequestClone.gasLimit = gasLimit;\n if (signatureCallback) {\n await signatureCallback(txRequestClone);\n }\n\n const result = await this.estimateTxDependencies(txRequestClone);\n receipts = result.receipts;\n outputVariables = result.outputVariables;\n missingContractIds = result.missingContractIds;\n gasUsed = isScriptTransaction ? getGasUsedFromReceipts(receipts) : gasUsed;\n\n txRequestClone.gasLimit = gasUsed;\n\n ({ maxFee, maxGas, minFee, minGas, gasPrice } = await this.estimateTxGasAndFee({\n transactionRequest: txRequestClone,\n gasPrice,\n }));\n }\n\n return {\n requiredQuantities: allQuantities,\n receipts,\n gasUsed,\n gasPrice,\n minGas,\n maxGas,\n minFee,\n maxFee,\n outputVariables,\n missingContractIds,\n addedSignatures,\n estimatedPredicates: txRequestClone.inputs,\n };\n }\n\n async getResourcesForTransaction(\n owner: string | AbstractAddress,\n transactionRequestLike: TransactionRequestLike,\n quantitiesToContract: CoinQuantity[] = []\n ) {\n const ownerAddress = Address.fromAddressOrString(owner);\n const transactionRequest = transactionRequestify(clone(transactionRequestLike));\n const transactionCost = await this.getTransactionCost(transactionRequest, {\n quantitiesToContract,\n });\n\n // Add the required resources to the transaction from the owner\n transactionRequest.addResources(\n await this.getResourcesToSpend(ownerAddress, transactionCost.requiredQuantities)\n );\n // Refetch transaction costs with the new resources\n // TODO: we could find a way to avoid fetch estimatePredicates again, by returning the transaction or\n // returning a specific gasUsed by the predicate.\n // Also for the dryRun we could have the same issue as we are going to run twice the dryRun and the\n // estimateTxDependencies as we don't have access to the transaction, maybe returning the transaction would\n // be better.\n const { requiredQuantities, ...txCost } = await this.getTransactionCost(transactionRequest, {\n quantitiesToContract,\n });\n const resources = await this.getResourcesToSpend(ownerAddress, requiredQuantities);\n\n return {\n resources,\n requiredQuantities,\n ...txCost,\n };\n }\n\n /**\n * Returns coins for the given owner.\n */\n async getCoins(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** The asset ID of coins to get */\n assetId?: BytesLike,\n /** Pagination arguments */\n paginationArgs?: CursorPaginationArgs\n ): Promise<Coin[]> {\n const ownerAddress = Address.fromAddressOrString(owner);\n const result = await this.operations.getCoins({\n first: 10,\n ...paginationArgs,\n filter: { owner: ownerAddress.toB256(), assetId: assetId && hexlify(assetId) },\n });\n\n const coins = result.coins.edges.map((edge) => edge.node);\n\n return coins.map((coin) => ({\n id: coin.utxoId,\n assetId: coin.assetId,\n amount: bn(coin.amount),\n owner: Address.fromAddressOrString(coin.owner),\n blockCreated: bn(coin.blockCreated),\n txCreatedIdx: bn(coin.txCreatedIdx),\n }));\n }\n\n /**\n * Returns resources for the given owner satisfying the spend query.\n *\n * @param owner - The address to get resources for.\n * @param quantities - The quantities to get.\n * @param excludedIds - IDs of excluded resources from the selection.\n * @returns A promise that resolves to the resources.\n */\n async getResourcesToSpend(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** The quantities to get */\n quantities: CoinQuantityLike[],\n /** IDs of excluded resources from the selection. */\n excludedIds?: ExcludeResourcesOption\n ): Promise<Resource[]> {\n const ownerAddress = Address.fromAddressOrString(owner);\n const excludeInput = {\n messages: excludedIds?.messages?.map((nonce) => hexlify(nonce)) || [],\n utxos: excludedIds?.utxos?.map((id) => hexlify(id)) || [],\n };\n\n if (this.cache) {\n const uniqueUtxos = new Set(\n excludeInput.utxos.concat(this.cache?.getActiveData().map((id) => hexlify(id)))\n );\n excludeInput.utxos = Array.from(uniqueUtxos);\n }\n const coinsQuery = {\n owner: ownerAddress.toB256(),\n queryPerAsset: quantities\n .map(coinQuantityfy)\n .map(({ assetId, amount, max: maxPerAsset }) => ({\n assetId: hexlify(assetId),\n amount: amount.toString(10),\n max: maxPerAsset ? maxPerAsset.toString(10) : undefined,\n })),\n excludedIds: excludeInput,\n };\n\n const result = await this.operations.getCoinsToSpend(coinsQuery);\n\n const coins = result.coinsToSpend\n .flat()\n .map((coin) => {\n switch (coin.__typename) {\n case 'MessageCoin':\n return {\n amount: bn(coin.amount),\n assetId: coin.assetId,\n daHeight: bn(coin.daHeight),\n sender: Address.fromAddressOrString(coin.sender),\n recipient: Address.fromAddressOrString(coin.recipient),\n nonce: coin.nonce,\n } as MessageCoin;\n case 'Coin':\n return {\n id: coin.utxoId,\n amount: bn(coin.amount),\n assetId: coin.assetId,\n owner: Address.fromAddressOrString(coin.owner),\n blockCreated: bn(coin.blockCreated),\n txCreatedIdx: bn(coin.txCreatedIdx),\n } as Coin;\n default:\n return null;\n }\n })\n .filter((v) => !!v) as Array<Resource>;\n\n return coins;\n }\n\n /**\n * Returns block matching the given ID or height.\n *\n * @param idOrHeight - ID or height of the block.\n * @returns A promise that resolves to the block.\n */\n async getBlock(\n /** ID or height of the block */\n idOrHeight: string | number | 'latest'\n ): Promise<Block | null> {\n let variables;\n if (typeof idOrHeight === 'number') {\n variables = { height: bn(idOrHeight).toString(10) };\n } else if (idOrHeight === 'latest') {\n variables = { height: (await this.getBlockNumber()).toString(10) };\n } else if (idOrHeight.length === 66) {\n variables = { blockId: idOrHeight };\n } else {\n variables = { blockId: bn(idOrHeight).toString(10) };\n }\n\n const { block } = await this.operations.getBlock(variables);\n\n if (!block) {\n return null;\n }\n\n return {\n id: block.id,\n height: bn(block.height),\n time: block.header.time,\n transactionIds: block.transactions.map((tx) => tx.id),\n };\n }\n\n /**\n * Returns all the blocks matching the given parameters.\n *\n * @param params - The parameters to query blocks.\n * @returns A promise that resolves to the blocks.\n */\n async getBlocks(params: GqlGetBlocksQueryVariables): Promise<Block[]> {\n const { blocks: fetchedData } = await this.operations.getBlocks(params);\n\n const blocks: Block[] = fetchedData.edges.map(({ node: block }) => ({\n id: block.id,\n height: bn(block.height),\n time: block.header.time,\n transactionIds: block.transactions.map((tx) => tx.id),\n }));\n\n return blocks;\n }\n\n /**\n * Returns block matching the given ID or type, including transaction data.\n *\n * @param idOrHeight - ID or height of the block.\n * @returns A promise that resolves to the block.\n */\n async getBlockWithTransactions(\n /** ID or height of the block */\n idOrHeight: string | number | 'latest'\n ): Promise<(Block & { transactions: Transaction[] }) | null> {\n let variables;\n if (typeof idOrHeight === 'number') {\n variables = { blockHeight: bn(idOrHeight).toString(10) };\n } else if (idOrHeight === 'latest') {\n variables = { blockHeight: (await this.getBlockNumber()).toString() };\n } else {\n variables = { blockId: idOrHeight };\n }\n\n const { block } = await this.operations.getBlockWithTransactions(variables);\n\n if (!block) {\n return null;\n }\n\n return {\n id: block.id,\n height: bn(block.height, 10),\n time: block.header.time,\n transactionIds: block.transactions.map((tx) => tx.id),\n transactions: block.transactions.map(\n (tx) => new TransactionCoder().decode(arrayify(tx.rawPayload), 0)?.[0]\n ),\n };\n }\n\n /**\n * Get transaction with the given ID.\n *\n * @param transactionId - ID of the transaction.\n * @returns A promise that resolves to the transaction.\n */\n async getTransaction<TTransactionType = void>(\n transactionId: string\n ): Promise<Transaction<TTransactionType> | null> {\n const { transaction } = await this.operations.getTransaction({ transactionId });\n if (!transaction) {\n return null;\n }\n return new TransactionCoder().decode(\n arrayify(transaction.rawPayload),\n 0\n )?.[0] as Transaction<TTransactionType>;\n }\n\n /**\n * Get deployed contract with the given ID.\n *\n * @param contractId - ID of the contract.\n * @returns A promise that resolves to the contract.\n */\n async getContract(contractId: string): Promise<ContractResult | null> {\n const { contract } = await this.operations.getContract({ contractId });\n if (!contract) {\n return null;\n }\n return contract;\n }\n\n /**\n * Returns the balance for the given contract for the given asset ID.\n *\n * @param contractId - The contract ID to get the balance for.\n * @param assetId - The asset ID of coins to get.\n * @returns A promise that resolves to the balance.\n */\n async getContractBalance(\n /** The contract ID to get the balance for */\n contractId: string | AbstractAddress,\n /** The asset ID of coins to get */\n assetId: BytesLike\n ): Promise<BN> {\n const { contractBalance } = await this.operations.getContractBalance({\n contract: Address.fromAddressOrString(contractId).toB256(),\n asset: hexlify(assetId),\n });\n return bn(contractBalance.amount, 10);\n }\n\n /**\n * Returns the balance for the given owner for the given asset ID.\n *\n * @param owner - The address to get coins for.\n * @param assetId - The asset ID of coins to get.\n * @returns A promise that resolves to the balance.\n */\n async getBalance(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** The asset ID of coins to get */\n assetId: BytesLike\n ): Promise<BN> {\n const { balance } = await this.operations.getBalance({\n owner: Address.fromAddressOrString(owner).toB256(),\n assetId: hexlify(assetId),\n });\n return bn(balance.amount, 10);\n }\n\n /**\n * Returns balances for the given owner.\n *\n * @param owner - The address to get coins for.\n * @param paginationArgs - Pagination arguments.\n * @returns A promise that resolves to the balances.\n */\n async getBalances(\n /** The address to get coins for */\n owner: string | AbstractAddress,\n /** Pagination arguments */\n paginationArgs?: CursorPaginationArgs\n ): Promise<CoinQuantity[]> {\n const result = await this.operations.getBalances({\n first: 10,\n ...paginationArgs,\n filter: { owner: Address.fromAddressOrString(owner).toB256() },\n });\n\n const balances = result.balances.edges.map((edge) => edge.node);\n\n return balances.map((balance) => ({\n assetId: balance.assetId,\n amount: bn(balance.amount),\n }));\n }\n\n /**\n * Returns message for the given address.\n *\n * @param address - The address to get message from.\n * @param paginationArgs - Pagination arguments.\n * @returns A promise that resolves to the messages.\n */\n async getMessages(\n /** The address to get message from */\n address: string | AbstractAddress,\n /** Pagination arguments */\n paginationArgs?: CursorPaginationArgs\n ): Promise<Message[]> {\n const result = await this.operations.getMessages({\n first: 10,\n ...paginationArgs,\n owner: Address.fromAddressOrString(address).toB256(),\n });\n\n const messages = result.messages.edges.map((edge) => edge.node);\n\n return messages.map((message) => ({\n messageId: InputMessageCoder.getMessageId({\n sender: message.sender,\n recipient: message.recipient,\n nonce: message.nonce,\n amount: bn(message.amount),\n data: message.data,\n }),\n sender: Address.fromAddressOrString(message.sender),\n recipient: Address.fromAddressOrString(message.recipient),\n nonce: message.nonce,\n amount: bn(message.amount),\n data: InputMessageCoder.decodeData(message.data),\n daHeight: bn(message.daHeight),\n }));\n }\n\n /**\n * Returns Message Proof for given transaction id and the message id from MessageOut receipt.\n *\n * @param transactionId - The transaction to get message from.\n * @param messageId - The message id from MessageOut receipt.\n * @param commitBlockId - The commit block id.\n * @param commitBlockHeight - The commit block height.\n * @returns A promise that resolves to the message proof.\n */\n async getMessageProof(\n /** The transaction to get message from */\n transactionId: string,\n nonce: string,\n commitBlockId?: string,\n commitBlockHeight?: BN\n ): Promise<MessageProof | null> {\n let inputObject: {\n /** The transaction to get message from */\n transactionId: string;\n /** The message id from MessageOut receipt */\n nonce: string;\n commitBlockId?: string;\n commitBlockHeight?: string;\n } = {\n transactionId,\n nonce,\n };\n\n if (commitBlockId && commitBlockHeight) {\n throw new FuelError(\n ErrorCode.INVALID_INPUT_PARAMETERS,\n 'commitBlockId and commitBlockHeight cannot be used together'\n );\n }\n\n if (commitBlockId) {\n inputObject = {\n ...inputObject,\n commitBlockId,\n };\n }\n\n if (commitBlockHeight) {\n inputObject = {\n ...inputObject,\n // Conver BN into a number string required on the query\n // This should problably be fixed on the fuel client side\n commitBlockHeight: commitBlockHeight.toNumber().toString(),\n };\n }\n\n const result = await this.operations.getMessageProof(inputObject);\n\n if (!result.messageProof) {\n return null;\n }\n\n const {\n messageProof,\n messageBlockHeader,\n commitBlockHeader,\n blockProof,\n sender,\n recipient,\n amount,\n data,\n } = result.messageProof;\n\n return {\n messageProof: {\n proofIndex: bn(messageProof.proofIndex),\n proofSet: messageProof.proofSet,\n },\n blockProof: {\n proofIndex: bn(blockProof.proofIndex),\n proofSet: blockProof.proofSet,\n },\n messageBlockHeader: {\n id: messageBlockHeader.id,\n daHeight: bn(messageBlockHeader.daHeight),\n transactionsCount: bn(messageBlockHeader.transactionsCount),\n transactionsRoot: messageBlockHeader.transactionsRoot,\n height: bn(messageBlockHeader.height),\n prevRoot: messageBlockHeader.prevRoot,\n time: messageBlockHeader.time,\n applicationHash: messageBlockHeader.applicationHash,\n messageReceiptCount: bn(messageBlockHeader.messageReceiptCount),\n messageOutboxRoot: messageBlockHeader.messageOutboxRoot,\n consensusParametersVersion: messageBlockHeader.consensusParametersVersion,\n eventInboxRoot: messageBlockHeader.eventInboxRoot,\n stateTransitionBytecodeVersion: messageBlockHeader.stateTransitionBytecodeVersion,\n },\n commitBlockHeader: {\n id: commitBlockHeader.id,\n daHeight: bn(commitBlockHeader.daHeight),\n transactionsCount: bn(commitBlockHeader.transactionsCount),\n transactionsRoot: commitBlockHeader.transactionsRoot,\n height: bn(commitBlockHeader.height),\n prevRoot: commitBlockHeader.prevRoot,\n time: commitBlockHeader.time,\n applicationHash: commitBlockHeader.applicationHash,\n messageReceiptCount: bn(commitBlockHeader.messageReceiptCount),\n messageOutboxRoot: commitBlockHeader.messageOutboxRoot,\n consensusParametersVersion: commitBlockHeader.consensusParametersVersion,\n eventInboxRoot: commitBlockHeader.eventInboxRoot,\n stateTransitionBytecodeVersion: commitBlockHeader.stateTransitionBytecodeVersion,\n },\n sender: Address.fromAddressOrString(sender),\n recipient: Address.fromAddressOrString(recipient),\n nonce,\n amount: bn(amount),\n data,\n };\n }\n\n async getLatestGasPrice(): Promise<BN> {\n const { latestGasPrice } = await this.operations.getLatestGasPrice();\n return bn(latestGasPrice.gasPrice);\n }\n\n async estimateGasPrice(blockHorizon: number): Promise<BN> {\n const { estimateGasPrice } = await this.operations.estimateGasPrice({\n blockHorizon: String(blockHorizon),\n });\n return bn(estimateGasPrice.gasPrice);\n }\n\n /**\n * Returns Message Proof for given transaction id and the message id from MessageOut receipt.\n *\n * @param nonce - The nonce of the message to get status from.\n * @returns A promise that resolves to the message status\n */\n async getMessageStatus(\n /** The nonce of the message to get status from */\n nonce: string\n ): Promise<MessageStatus> {\n const result = await this.operations.getMessageStatus({ nonce });\n return result.messageStatus;\n }\n\n /**\n * Lets you produce blocks with custom timestamps and the block number of the last block produced.\n *\n * @param amount - The amount of blocks to produce\n * @param startTime - The UNIX timestamp (milliseconds) to set for the first produced block\n * @returns A promise that resolves to the block number of the last produced block.\n */\n async produceBlocks(amount: number, startTime?: number) {\n const { produceBlocks: latestBlockHeight } = await this.operations.produceBlocks({\n blocksToProduce: bn(amount).toString(10),\n startTimestamp: startTime ? DateTime.fromUnixMilliseconds(startTime).toTai64() : undefined,\n });\n return bn(latestBlockHeight);\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async getTransactionResponse(transactionId: string): Promise<TransactionResponse> {\n return new TransactionResponse(transactionId, this);\n }\n}\n","import type { DocumentNode } from 'graphql';\nimport gql from 'graphql-tag';\nexport type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: string;\n String: string;\n Boolean: boolean;\n Int: number;\n Float: number;\n Address: string;\n AssetId: string;\n BlockId: string;\n Bytes32: string;\n ContractId: string;\n HexString: string;\n Nonce: string;\n Salt: string;\n Signature: any;\n Tai64Timestamp: string;\n TransactionId: string;\n TxPointer: any;\n U16: any;\n U32: any;\n U64: string;\n UtxoId: string;\n};\n\nexport type GqlBalance = {\n __typename: 'Balance';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n owner: Scalars['Address'];\n};\n\nexport type GqlBalanceConnection = {\n __typename: 'BalanceConnection';\n /** A list of edges. */\n edges: Array<GqlBalanceEdge>;\n /** A list of nodes. */\n nodes: Array<GqlBalance>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlBalanceEdge = {\n __typename: 'BalanceEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlBalance;\n};\n\nexport type GqlBalanceFilterInput = {\n /** Filter coins based on the `owner` field */\n owner: Scalars['Address'];\n};\n\nexport type GqlBlock = {\n __typename: 'Block';\n consensus: GqlConsensus;\n header: GqlHeader;\n height: Scalars['U32'];\n id: Scalars['BlockId'];\n transactions: Array<GqlTransaction>;\n};\n\nexport type GqlBlockConnection = {\n __typename: 'BlockConnection';\n /** A list of edges. */\n edges: Array<GqlBlockEdge>;\n /** A list of nodes. */\n nodes: Array<GqlBlock>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlBlockEdge = {\n __typename: 'BlockEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlBlock;\n};\n\n/** Breakpoint, defined as a tuple of contract ID and relative PC offset inside it */\nexport type GqlBreakpoint = {\n contract: Scalars['ContractId'];\n pc: Scalars['U64'];\n};\n\nexport type GqlChainInfo = {\n __typename: 'ChainInfo';\n consensusParameters: GqlConsensusParameters;\n daHeight: Scalars['U64'];\n gasCosts: GqlGasCosts;\n latestBlock: GqlBlock;\n name: Scalars['String'];\n};\n\nexport type GqlChangeOutput = {\n __typename: 'ChangeOutput';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n to: Scalars['Address'];\n};\n\nexport type GqlCoin = {\n __typename: 'Coin';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n /** TxPointer - the height of the block this coin was created in */\n blockCreated: Scalars['U32'];\n owner: Scalars['Address'];\n /** TxPointer - the index of the transaction that created this coin */\n txCreatedIdx: Scalars['U16'];\n utxoId: Scalars['UtxoId'];\n};\n\nexport type GqlCoinConnection = {\n __typename: 'CoinConnection';\n /** A list of edges. */\n edges: Array<GqlCoinEdge>;\n /** A list of nodes. */\n nodes: Array<GqlCoin>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlCoinEdge = {\n __typename: 'CoinEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlCoin;\n};\n\nexport type GqlCoinFilterInput = {\n /** Returns coins only with `asset_id`. */\n assetId?: InputMaybe<Scalars['AssetId']>;\n /** Returns coins owned by the `owner`. */\n owner: Scalars['Address'];\n};\n\nexport type GqlCoinOutput = {\n __typename: 'CoinOutput';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n to: Scalars['Address'];\n};\n\n/** The schema analog of the [`coins::CoinType`]. */\nexport type GqlCoinType = GqlCoin | GqlMessageCoin;\n\nexport type GqlConsensus = GqlGenesis | GqlPoAConsensus;\n\nexport type GqlConsensusParameters = {\n __typename: 'ConsensusParameters';\n baseAssetId: Scalars['AssetId'];\n blockGasLimit: Scalars['U64'];\n chainId: Scalars['U64'];\n contractParams: GqlContractParameters;\n feeParams: GqlFeeParameters;\n gasCosts: GqlGasCosts;\n predicateParams: GqlPredicateParameters;\n privilegedAddress: Scalars['Address'];\n scriptParams: GqlScriptParameters;\n txParams: GqlTxParameters;\n version: GqlConsensusParametersVersion;\n};\n\nexport enum GqlConsensusParametersVersion {\n V1 = 'V1'\n}\n\nexport type GqlContract = {\n __typename: 'Contract';\n bytecode: Scalars['HexString'];\n id: Scalars['ContractId'];\n salt: Scalars['Salt'];\n};\n\nexport type GqlContractBalance = {\n __typename: 'ContractBalance';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n contract: Scalars['ContractId'];\n};\n\nexport type GqlContractBalanceConnection = {\n __typename: 'ContractBalanceConnection';\n /** A list of edges. */\n edges: Array<GqlContractBalanceEdge>;\n /** A list of nodes. */\n nodes: Array<GqlContractBalance>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlContractBalanceEdge = {\n __typename: 'ContractBalanceEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlContractBalance;\n};\n\nexport type GqlContractBalanceFilterInput = {\n /** Filter assets based on the `contractId` field */\n contract: Scalars['ContractId'];\n};\n\nexport type GqlContractCreated = {\n __typename: 'ContractCreated';\n contract: Scalars['ContractId'];\n stateRoot: Scalars['Bytes32'];\n};\n\nexport type GqlContractOutput = {\n __typename: 'ContractOutput';\n balanceRoot: Scalars['Bytes32'];\n inputIndex: Scalars['U16'];\n stateRoot: Scalars['Bytes32'];\n};\n\nexport type GqlContractParameters = {\n __typename: 'ContractParameters';\n contractMaxSize: Scalars['U64'];\n maxStorageSlots: Scalars['U64'];\n version: GqlContractParametersVersion;\n};\n\nexport enum GqlContractParametersVersion {\n V1 = 'V1'\n}\n\nexport type GqlDependentCost = GqlHeavyOperation | GqlLightOperation;\n\nexport type GqlDryRunFailureStatus = {\n __typename: 'DryRunFailureStatus';\n programState?: Maybe<GqlProgramState>;\n reason: Scalars['String'];\n receipts: Array<GqlReceipt>;\n};\n\nexport type GqlDryRunSuccessStatus = {\n __typename: 'DryRunSuccessStatus';\n programState?: Maybe<GqlProgramState>;\n receipts: Array<GqlReceipt>;\n};\n\nexport type GqlDryRunTransactionExecutionStatus = {\n __typename: 'DryRunTransactionExecutionStatus';\n id: Scalars['TransactionId'];\n receipts: Array<GqlReceipt>;\n status: GqlDryRunTransactionStatus;\n};\n\nexport type GqlDryRunTransactionStatus = GqlDryRunFailureStatus | GqlDryRunSuccessStatus;\n\nexport type GqlEstimateGasPrice = {\n __typename: 'EstimateGasPrice';\n gasPrice: Scalars['U64'];\n};\n\nexport type GqlExcludeInput = {\n /** Messages to exclude from the selection. */\n messages: Array<Scalars['Nonce']>;\n /** Utxos to exclude from the selection. */\n utxos: Array<Scalars['UtxoId']>;\n};\n\nexport type GqlFailureStatus = {\n __typename: 'FailureStatus';\n block: GqlBlock;\n programState?: Maybe<GqlProgramState>;\n reason: Scalars['String'];\n receipts: Array<GqlReceipt>;\n time: Scalars['Tai64Timestamp'];\n transactionId: Scalars['TransactionId'];\n};\n\nexport type GqlFeeParameters = {\n __typename: 'FeeParameters';\n gasPerByte: Scalars['U64'];\n gasPriceFactor: Scalars['U64'];\n version: GqlFeeParametersVersion;\n};\n\nexport enum GqlFeeParametersVersion {\n V1 = 'V1'\n}\n\nexport type GqlGasCosts = {\n __typename: 'GasCosts';\n add: Scalars['U64'];\n addi: Scalars['U64'];\n aloc: Scalars['U64'];\n and: Scalars['U64'];\n andi: Scalars['U64'];\n bal: Scalars['U64'];\n bhei: Scalars['U64'];\n bhsh: Scalars['U64'];\n burn: Scalars['U64'];\n call: GqlDependentCost;\n cb: Scalars['U64'];\n ccp: GqlDependentCost;\n cfei: Scalars['U64'];\n cfsi: Scalars['U64'];\n contractRoot: GqlDependentCost;\n croo: GqlDependentCost;\n csiz: GqlDependentCost;\n div: Scalars['U64'];\n divi: Scalars['U64'];\n eck1: Scalars['U64'];\n ecr1: Scalars['U64'];\n ed19: Scalars['U64'];\n eq: Scalars['U64'];\n exp: Scalars['U64'];\n expi: Scalars['U64'];\n flag: Scalars['U64'];\n gm: Scalars['U64'];\n gt: Scalars['U64'];\n gtf: Scalars['U64'];\n ji: Scalars['U64'];\n jmp: Scalars['U64'];\n jmpb: Scalars['U64'];\n jmpf: Scalars['U64'];\n jne: Scalars['U64'];\n jneb: Scalars['U64'];\n jnef: Scalars['U64'];\n jnei: Scalars['U64'];\n jnzb: Scalars['U64'];\n jnzf: Scalars['U64'];\n jnzi: Scalars['U64'];\n k256: GqlDependentCost;\n lb: Scalars['U64'];\n ldc: GqlDependentCost;\n log: Scalars['U64'];\n logd: GqlDependentCost;\n lt: Scalars['U64'];\n lw: Scalars['U64'];\n mcl: GqlDependentCost;\n mcli: GqlDependentCost;\n mcp: GqlDependentCost;\n mcpi: GqlDependentCost;\n meq: GqlDependentCost;\n mint: Scalars['U64'];\n mldv: Scalars['U64'];\n mlog: Scalars['U64'];\n modOp: Scalars['U64'];\n modi: Scalars['U64'];\n moveOp: Scalars['U64'];\n movi: Scalars['U64'];\n mroo: Scalars['U64'];\n mul: Scalars['U64'];\n muli: Scalars['U64'];\n newStoragePerByte: Scalars['U64'];\n noop: Scalars['U64'];\n not: Scalars['U64'];\n or: Scalars['U64'];\n ori: Scalars['U64'];\n poph: Scalars['U64'];\n popl: Scalars['U64'];\n pshh: Scalars['U64'];\n pshl: Scalars['U64'];\n ret: Scalars['U64'];\n retd: GqlDependentCost;\n rvrt: Scalars['U64'];\n s256: GqlDependentCost;\n sb: Scalars['U64'];\n scwq: GqlDependentCost;\n sll: Scalars['U64'];\n slli: Scalars['U64'];\n smo: GqlDependentCost;\n srl: Scalars['U64'];\n srli: Scalars['U64'];\n srw: Scalars['U64'];\n srwq: GqlDependentCost;\n stateRoot: GqlDependentCost;\n sub: Scalars['U64'];\n subi: Scalars['U64'];\n sw: Scalars['U64'];\n sww: Scalars['U64'];\n swwq: GqlDependentCost;\n time: Scalars['U64'];\n tr: Scalars['U64'];\n tro: Scalars['U64'];\n version: GqlGasCostsVersion;\n vmInitialization: GqlDependentCost;\n wdam: Scalars['U64'];\n wdcm: Scalars['U64'];\n wddv: Scalars['U64'];\n wdmd: Scalars['U64'];\n wdml: Scalars['U64'];\n wdmm: Scalars['U64'];\n wdop: Scalars['U64'];\n wqam: Scalars['U64'];\n wqcm: Scalars['U64'];\n wqdv: Scalars['U64'];\n wqmd: Scalars['U64'];\n wqml: Scalars['U64'];\n wqmm: Scalars['U64'];\n wqop: Scalars['U64'];\n xor: Scalars['U64'];\n xori: Scalars['U64'];\n};\n\nexport enum GqlGasCostsVersion {\n V1 = 'V1'\n}\n\nexport type GqlGenesis = {\n __typename: 'Genesis';\n /**\n * The chain configs define what consensus type to use, what settlement layer to use,\n * rules of block validity, etc.\n */\n chainConfigHash: Scalars['Bytes32'];\n /** The Binary Merkle Tree root of all genesis coins. */\n coinsRoot: Scalars['Bytes32'];\n /** The Binary Merkle Tree root of state, balances, contracts code hash of each contract. */\n contractsRoot: Scalars['Bytes32'];\n /** The Binary Merkle Tree root of all genesis messages. */\n messagesRoot: Scalars['Bytes32'];\n};\n\nexport type GqlHeader = {\n __typename: 'Header';\n /** Hash of the application header. */\n applicationHash: Scalars['Bytes32'];\n /** The version of the consensus parameters used to create this block. */\n consensusParametersVersion: Scalars['U32'];\n /** The layer 1 height of messages and events to include since the last layer 1 block number. */\n daHeight: Scalars['U64'];\n /** Merkle root of inbox events in this block. */\n eventInboxRoot: Scalars['Bytes32'];\n /** Fuel block height. */\n height: Scalars['U32'];\n /** Hash of the header */\n id: Scalars['BlockId'];\n /** Merkle root of message receipts in this block. */\n messageOutboxRoot: Scalars['Bytes32'];\n /** Number of message receipts in this block. */\n messageReceiptCount: Scalars['U64'];\n /** Merkle root of all previous block header hashes. */\n prevRoot: Scalars['Bytes32'];\n /** The version of the state transition bytecode used to create this block. */\n stateTransitionBytecodeVersion: Scalars['U32'];\n /** The block producer time. */\n time: Scalars['Tai64Timestamp'];\n /** Number of transactions in this block. */\n transactionsCount: Scalars['U64'];\n /** Merkle root of transactions. */\n transactionsRoot: Scalars['Bytes32'];\n};\n\nexport type GqlHeavyOperation = {\n __typename: 'HeavyOperation';\n base: Scalars['U64'];\n gasPerUnit: Scalars['U64'];\n};\n\nexport type GqlInput = GqlInputCoin | GqlInputContract | GqlInputMessage;\n\nexport type GqlInputCoin = {\n __typename: 'InputCoin';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n owner: Scalars['Address'];\n predicate: Scalars['HexString'];\n predicateData: Scalars['HexString'];\n predicateGasUsed: Scalars['U64'];\n txPointer: Scalars['TxPointer'];\n utxoId: Scalars['UtxoId'];\n witnessIndex: Scalars['Int'];\n};\n\nexport type GqlInputContract = {\n __typename: 'InputContract';\n balanceRoot: Scalars['Bytes32'];\n contractId: Scalars['ContractId'];\n stateRoot: Scalars['Bytes32'];\n txPointer: Scalars['TxPointer'];\n utxoId: Scalars['UtxoId'];\n};\n\nexport type GqlInputMessage = {\n __typename: 'InputMessage';\n amount: Scalars['U64'];\n data: Scalars['HexString'];\n nonce: Scalars['Nonce'];\n predicate: Scalars['HexString'];\n predicateData: Scalars['HexString'];\n predicateGasUsed: Scalars['U64'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n witnessIndex: Scalars['U16'];\n};\n\nexport type GqlLatestGasPrice = {\n __typename: 'LatestGasPrice';\n blockHeight: Scalars['U32'];\n gasPrice: Scalars['U64'];\n};\n\nexport type GqlLightOperation = {\n __typename: 'LightOperation';\n base: Scalars['U64'];\n unitsPerGas: Scalars['U64'];\n};\n\nexport type GqlMerkleProof = {\n __typename: 'MerkleProof';\n proofIndex: Scalars['U64'];\n proofSet: Array<Scalars['Bytes32']>;\n};\n\nexport type GqlMessage = {\n __typename: 'Message';\n amount: Scalars['U64'];\n daHeight: Scalars['U64'];\n data: Scalars['HexString'];\n nonce: Scalars['Nonce'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n};\n\nexport type GqlMessageCoin = {\n __typename: 'MessageCoin';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n daHeight: Scalars['U64'];\n nonce: Scalars['Nonce'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n};\n\nexport type GqlMessageConnection = {\n __typename: 'MessageConnection';\n /** A list of edges. */\n edges: Array<GqlMessageEdge>;\n /** A list of nodes. */\n nodes: Array<GqlMessage>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlMessageEdge = {\n __typename: 'MessageEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlMessage;\n};\n\nexport type GqlMessageProof = {\n __typename: 'MessageProof';\n amount: Scalars['U64'];\n blockProof: GqlMerkleProof;\n commitBlockHeader: GqlHeader;\n data: Scalars['HexString'];\n messageBlockHeader: GqlHeader;\n messageProof: GqlMerkleProof;\n nonce: Scalars['Nonce'];\n recipient: Scalars['Address'];\n sender: Scalars['Address'];\n};\n\nexport enum GqlMessageState {\n NotFound = 'NOT_FOUND',\n Spent = 'SPENT',\n Unspent = 'UNSPENT'\n}\n\nexport type GqlMessageStatus = {\n __typename: 'MessageStatus';\n state: GqlMessageState;\n};\n\nexport type GqlMutation = {\n __typename: 'Mutation';\n /**\n * Resume execution of the VM instance after a breakpoint.\n * Runs until the next breakpoint or until the transaction completes.\n */\n continueTx: GqlRunResult;\n /** Execute a dry-run of multiple transactions using a fork of current state, no changes are committed. */\n dryRun: Array<GqlDryRunTransactionExecutionStatus>;\n /** End debugger session. */\n endSession: Scalars['Boolean'];\n /** Execute a single fuel-asm instruction. */\n execute: Scalars['Boolean'];\n /**\n * Sequentially produces `blocks_to_produce` blocks. The first block starts with\n * `start_timestamp`. If the block production in the [`crate::service::Config`] is\n * `Trigger::Interval { block_time }`, produces blocks with `block_time ` intervals between\n * them. The `start_timestamp` is the timestamp in seconds.\n */\n produceBlocks: Scalars['U32'];\n /** Reset the VM instance to the initial state. */\n reset: Scalars['Boolean'];\n /** Set a breakpoint for a VM instance. */\n setBreakpoint: Scalars['Boolean'];\n /** Set single-stepping mode for the VM instance. */\n setSingleStepping: Scalars['Boolean'];\n /**\n * Initialize a new debugger session, returning its ID.\n * A new VM instance is spawned for each session.\n * The session is run in a separate database transaction,\n * on top of the most recent node state.\n */\n startSession: Scalars['ID'];\n /**\n * Run a single transaction in given session until it\n * hits a breakpoint or completes.\n */\n startTx: GqlRunResult;\n /**\n * Submits transaction to the `TxPool`.\n *\n * Returns submitted transaction if the transaction is included in the `TxPool` without problems.\n */\n submit: GqlTransaction;\n};\n\n\nexport type GqlMutationContinueTxArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationDryRunArgs = {\n txs: Array<Scalars['HexString']>;\n utxoValidation?: InputMaybe<Scalars['Boolean']>;\n};\n\n\nexport type GqlMutationEndSessionArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationExecuteArgs = {\n id: Scalars['ID'];\n op: Scalars['String'];\n};\n\n\nexport type GqlMutationProduceBlocksArgs = {\n blocksToProduce: Scalars['U32'];\n startTimestamp?: InputMaybe<Scalars['Tai64Timestamp']>;\n};\n\n\nexport type GqlMutationResetArgs = {\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationSetBreakpointArgs = {\n breakpoint: GqlBreakpoint;\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationSetSingleSteppingArgs = {\n enable: Scalars['Boolean'];\n id: Scalars['ID'];\n};\n\n\nexport type GqlMutationStartTxArgs = {\n id: Scalars['ID'];\n txJson: Scalars['String'];\n};\n\n\nexport type GqlMutationSubmitArgs = {\n tx: Scalars['HexString'];\n};\n\nexport type GqlNodeInfo = {\n __typename: 'NodeInfo';\n maxDepth: Scalars['U64'];\n maxTx: Scalars['U64'];\n nodeVersion: Scalars['String'];\n peers: Array<GqlPeerInfo>;\n utxoValidation: Scalars['Boolean'];\n vmBacktrace: Scalars['Boolean'];\n};\n\nexport type GqlOutput = GqlChangeOutput | GqlCoinOutput | GqlContractCreated | GqlContractOutput | GqlVariableOutput;\n\n/**\n * A separate `Breakpoint` type to be used as an output, as a single\n * type cannot act as both input and output type in async-graphql\n */\nexport type GqlOutputBreakpoint = {\n __typename: 'OutputBreakpoint';\n contract: Scalars['ContractId'];\n pc: Scalars['U64'];\n};\n\n/** Information about pagination in a connection */\nexport type GqlPageInfo = {\n __typename: 'PageInfo';\n /** When paginating forwards, the cursor to continue. */\n endCursor?: Maybe<Scalars['String']>;\n /** When paginating forwards, are there more items? */\n hasNextPage: Scalars['Boolean'];\n /** When paginating backwards, are there more items? */\n hasPreviousPage: Scalars['Boolean'];\n /** When paginating backwards, the cursor to continue. */\n startCursor?: Maybe<Scalars['String']>;\n};\n\nexport type GqlPeerInfo = {\n __typename: 'PeerInfo';\n /** The advertised multi-addrs that can be used to connect to this peer */\n addresses: Array<Scalars['String']>;\n /** The internal fuel p2p reputation of this peer */\n appScore: Scalars['Float'];\n /** The last reported height of the peer */\n blockHeight?: Maybe<Scalars['U32']>;\n /** The self-reported version of the client the peer is using */\n clientVersion?: Maybe<Scalars['String']>;\n /** The libp2p peer id */\n id: Scalars['String'];\n /** The last heartbeat from this peer in unix epoch time ms */\n lastHeartbeatMs: Scalars['U64'];\n};\n\nexport type GqlPoAConsensus = {\n __typename: 'PoAConsensus';\n /** Gets the signature of the block produced by `PoA` consensus. */\n signature: Scalars['Signature'];\n};\n\nexport type GqlPolicies = {\n __typename: 'Policies';\n maturity?: Maybe<Scalars['U32']>;\n maxFee?: Maybe<Scalars['U64']>;\n tip?: Maybe<Scalars['U64']>;\n witnessLimit?: Maybe<Scalars['U64']>;\n};\n\nexport type GqlPredicateParameters = {\n __typename: 'PredicateParameters';\n maxGasPerPredicate: Scalars['U64'];\n maxMessageDataLength: Scalars['U64'];\n maxPredicateDataLength: Scalars['U64'];\n maxPredicateLength: Scalars['U64'];\n version: GqlPredicateParametersVersion;\n};\n\nexport enum GqlPredicateParametersVersion {\n V1 = 'V1'\n}\n\nexport type GqlProgramState = {\n __typename: 'ProgramState';\n data: Scalars['HexString'];\n returnType: GqlReturnType;\n};\n\nexport type GqlQuery = {\n __typename: 'Query';\n balance: GqlBalance;\n balances: GqlBalanceConnection;\n block?: Maybe<GqlBlock>;\n blocks: GqlBlockConnection;\n chain: GqlChainInfo;\n /** Gets the coin by `utxo_id`. */\n coin?: Maybe<GqlCoin>;\n /** Gets all unspent coins of some `owner` maybe filtered with by `asset_id` per page. */\n coins: GqlCoinConnection;\n /**\n * For each `query_per_asset`, get some spendable coins(of asset specified by the query) owned by\n * `owner` that add up at least the query amount. The returned coins can be spent.\n * The number of coins is optimized to prevent dust accumulation.\n *\n * The query supports excluding and maximum the number of coins.\n *\n * Returns:\n * The list of spendable coins per asset from the query. The length of the result is\n * the same as the length of `query_per_asset`. The ordering of assets and `query_per_asset`\n * is the same.\n */\n coinsToSpend: Array<Array<GqlCoinType>>;\n contract?: Maybe<GqlContract>;\n contractBalance: GqlContractBalance;\n contractBalances: GqlContractBalanceConnection;\n estimateGasPrice: GqlEstimateGasPrice;\n /** Estimate the predicate gas for the provided transaction */\n estimatePredicates: GqlTransaction;\n /** Returns true when the GraphQL API is serving requests. */\n health: Scalars['Boolean'];\n latestGasPrice: GqlLatestGasPrice;\n /** Read read a range of memory bytes. */\n memory: Scalars['String'];\n message?: Maybe<GqlMessage>;\n messageProof?: Maybe<GqlMessageProof>;\n messageStatus: GqlMessageStatus;\n messages: GqlMessageConnection;\n nodeInfo: GqlNodeInfo;\n /** Read register value by index. */\n register: Scalars['U64'];\n transaction?: Maybe<GqlTransaction>;\n transactions: GqlTransactionConnection;\n transactionsByOwner: GqlTransactionConnection;\n};\n\n\nexport type GqlQueryBalanceArgs = {\n assetId: Scalars['AssetId'];\n owner: Scalars['Address'];\n};\n\n\nexport type GqlQueryBalancesArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n filter: GqlBalanceFilterInput;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryBlockArgs = {\n height?: InputMaybe<Scalars['U32']>;\n id?: InputMaybe<Scalars['BlockId']>;\n};\n\n\nexport type GqlQueryBlocksArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryCoinArgs = {\n utxoId: Scalars['UtxoId'];\n};\n\n\nexport type GqlQueryCoinsArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n filter: GqlCoinFilterInput;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryCoinsToSpendArgs = {\n excludedIds?: InputMaybe<GqlExcludeInput>;\n owner: Scalars['Address'];\n queryPerAsset: Array<GqlSpendQueryElementInput>;\n};\n\n\nexport type GqlQueryContractArgs = {\n id: Scalars['ContractId'];\n};\n\n\nexport type GqlQueryContractBalanceArgs = {\n asset: Scalars['AssetId'];\n contract: Scalars['ContractId'];\n};\n\n\nexport type GqlQueryContractBalancesArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n filter: GqlContractBalanceFilterInput;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryEstimateGasPriceArgs = {\n blockHorizon?: InputMaybe<Scalars['U32']>;\n};\n\n\nexport type GqlQueryEstimatePredicatesArgs = {\n tx: Scalars['HexString'];\n};\n\n\nexport type GqlQueryMemoryArgs = {\n id: Scalars['ID'];\n size: Scalars['U32'];\n start: Scalars['U32'];\n};\n\n\nexport type GqlQueryMessageArgs = {\n nonce: Scalars['Nonce'];\n};\n\n\nexport type GqlQueryMessageProofArgs = {\n commitBlockHeight?: InputMaybe<Scalars['U32']>;\n commitBlockId?: InputMaybe<Scalars['BlockId']>;\n nonce: Scalars['Nonce'];\n transactionId: Scalars['TransactionId'];\n};\n\n\nexport type GqlQueryMessageStatusArgs = {\n nonce: Scalars['Nonce'];\n};\n\n\nexport type GqlQueryMessagesArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n owner?: InputMaybe<Scalars['Address']>;\n};\n\n\nexport type GqlQueryRegisterArgs = {\n id: Scalars['ID'];\n register: Scalars['U32'];\n};\n\n\nexport type GqlQueryTransactionArgs = {\n id: Scalars['TransactionId'];\n};\n\n\nexport type GqlQueryTransactionsArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n};\n\n\nexport type GqlQueryTransactionsByOwnerArgs = {\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n owner: Scalars['Address'];\n};\n\nexport type GqlReceipt = {\n __typename: 'Receipt';\n amount?: Maybe<Scalars['U64']>;\n assetId?: Maybe<Scalars['AssetId']>;\n /** Set in the case of a Panic receipt to indicate a missing contract input id */\n contractId?: Maybe<Scalars['ContractId']>;\n data?: Maybe<Scalars['HexString']>;\n digest?: Maybe<Scalars['Bytes32']>;\n gas?: Maybe<Scalars['U64']>;\n gasUsed?: Maybe<Scalars['U64']>;\n id?: Maybe<Scalars['ContractId']>;\n is?: Maybe<Scalars['U64']>;\n len?: Maybe<Scalars['U64']>;\n nonce?: Maybe<Scalars['Nonce']>;\n param1?: Maybe<Scalars['U64']>;\n param2?: Maybe<Scalars['U64']>;\n pc?: Maybe<Scalars['U64']>;\n ptr?: Maybe<Scalars['U64']>;\n ra?: Maybe<Scalars['U64']>;\n rb?: Maybe<Scalars['U64']>;\n rc?: Maybe<Scalars['U64']>;\n rd?: Maybe<Scalars['U64']>;\n reason?: Maybe<Scalars['U64']>;\n receiptType: GqlReceiptType;\n recipient?: Maybe<Scalars['Address']>;\n result?: Maybe<Scalars['U64']>;\n sender?: Maybe<Scalars['Address']>;\n subId?: Maybe<Scalars['Bytes32']>;\n to?: Maybe<Scalars['ContractId']>;\n toAddress?: Maybe<Scalars['Address']>;\n val?: Maybe<Scalars['U64']>;\n};\n\nexport enum GqlReceiptType {\n Burn = 'BURN',\n Call = 'CALL',\n Log = 'LOG',\n LogData = 'LOG_DATA',\n MessageOut = 'MESSAGE_OUT',\n Mint = 'MINT',\n Panic = 'PANIC',\n Return = 'RETURN',\n ReturnData = 'RETURN_DATA',\n Revert = 'REVERT',\n ScriptResult = 'SCRIPT_RESULT',\n Transfer = 'TRANSFER',\n TransferOut = 'TRANSFER_OUT'\n}\n\nexport enum GqlReturnType {\n Return = 'RETURN',\n ReturnData = 'RETURN_DATA',\n Revert = 'REVERT'\n}\n\nexport type GqlRunResult = {\n __typename: 'RunResult';\n breakpoint?: Maybe<GqlOutputBreakpoint>;\n jsonReceipts: Array<Scalars['String']>;\n state: GqlRunState;\n};\n\nexport enum GqlRunState {\n /** Stopped on a breakpoint */\n Breakpoint = 'BREAKPOINT',\n /** All breakpoints have been processed, and the program has terminated */\n Completed = 'COMPLETED'\n}\n\nexport type GqlScriptParameters = {\n __typename: 'ScriptParameters';\n maxScriptDataLength: Scalars['U64'];\n maxScriptLength: Scalars['U64'];\n version: GqlScriptParametersVersion;\n};\n\nexport enum GqlScriptParametersVersion {\n V1 = 'V1'\n}\n\nexport type GqlSpendQueryElementInput = {\n /** Target amount for the query. */\n amount: Scalars['U64'];\n /** Identifier of the asset to spend. */\n assetId: Scalars['AssetId'];\n /** The maximum number of currencies for selection. */\n max?: InputMaybe<Scalars['U32']>;\n};\n\nexport type GqlSqueezedOutStatus = {\n __typename: 'SqueezedOutStatus';\n reason: Scalars['String'];\n};\n\nexport type GqlSubmittedStatus = {\n __typename: 'SubmittedStatus';\n time: Scalars['Tai64Timestamp'];\n};\n\nexport type GqlSubscription = {\n __typename: 'Subscription';\n /**\n * Returns a stream of status updates for the given transaction id.\n * If the current status is [`TransactionStatus::Success`], [`TransactionStatus::SqueezedOut`]\n * or [`TransactionStatus::Failed`] the stream will return that and end immediately.\n * If the current status is [`TransactionStatus::Submitted`] this will be returned\n * and the stream will wait for a future update.\n *\n * This stream will wait forever so it's advised to use within a timeout.\n *\n * It is possible for the stream to miss an update if it is polled slower\n * then the updates arrive. In such a case the stream will close without\n * a status. If this occurs the stream can simply be restarted to return\n * the latest status.\n */\n statusChange: GqlTransactionStatus;\n /** Submits transaction to the `TxPool` and await either confirmation or failure. */\n submitAndAwait: GqlTransactionStatus;\n};\n\n\nexport type GqlSubscriptionStatusChangeArgs = {\n id: Scalars['TransactionId'];\n};\n\n\nexport type GqlSubscriptionSubmitAndAwaitArgs = {\n tx: Scalars['HexString'];\n};\n\nexport type GqlSuccessStatus = {\n __typename: 'SuccessStatus';\n block: GqlBlock;\n programState?: Maybe<GqlProgramState>;\n receipts: Array<GqlReceipt>;\n time: Scalars['Tai64Timestamp'];\n transactionId: Scalars['TransactionId'];\n};\n\nexport type GqlTransaction = {\n __typename: 'Transaction';\n bytecodeWitnessIndex?: Maybe<Scalars['U16']>;\n id: Scalars['TransactionId'];\n inputAssetIds?: Maybe<Array<Scalars['AssetId']>>;\n inputContract?: Maybe<GqlInputContract>;\n inputContracts?: Maybe<Array<Scalars['ContractId']>>;\n inputs?: Maybe<Array<GqlInput>>;\n isCreate: Scalars['Boolean'];\n isMint: Scalars['Boolean'];\n isScript: Scalars['Boolean'];\n maturity?: Maybe<Scalars['U32']>;\n mintAmount?: Maybe<Scalars['U64']>;\n mintAssetId?: Maybe<Scalars['AssetId']>;\n mintGasPrice?: Maybe<Scalars['U64']>;\n outputContract?: Maybe<GqlContractOutput>;\n outputs: Array<GqlOutput>;\n policies?: Maybe<GqlPolicies>;\n /** Return the transaction bytes using canonical encoding */\n rawPayload: Scalars['HexString'];\n receiptsRoot?: Maybe<Scalars['Bytes32']>;\n salt?: Maybe<Scalars['Salt']>;\n script?: Maybe<Scalars['HexString']>;\n scriptData?: Maybe<Scalars['HexString']>;\n scriptGasLimit?: Maybe<Scalars['U64']>;\n status?: Maybe<GqlTransactionStatus>;\n storageSlots?: Maybe<Array<Scalars['HexString']>>;\n txPointer?: Maybe<Scalars['TxPointer']>;\n witnesses?: Maybe<Array<Scalars['HexString']>>;\n};\n\nexport type GqlTransactionConnection = {\n __typename: 'TransactionConnection';\n /** A list of edges. */\n edges: Array<GqlTransactionEdge>;\n /** A list of nodes. */\n nodes: Array<GqlTransaction>;\n /** Information to aid in pagination. */\n pageInfo: GqlPageInfo;\n};\n\n/** An edge in a connection. */\nexport type GqlTransactionEdge = {\n __typename: 'TransactionEdge';\n /** A cursor for use in pagination */\n cursor: Scalars['String'];\n /** The item at the end of the edge */\n node: GqlTransaction;\n};\n\nexport type GqlTransactionStatus = GqlFailureStatus | GqlSqueezedOutStatus | GqlSubmittedStatus | GqlSuccessStatus;\n\nexport type GqlTxParameters = {\n __typename: 'TxParameters';\n maxGasPerTx: Scalars['U64'];\n maxInputs: Scalars['U16'];\n maxOutputs: Scalars['U16'];\n maxSize: Scalars['U64'];\n maxWitnesses: Scalars['U32'];\n version: GqlTxParametersVersion;\n};\n\nexport enum GqlTxParametersVersion {\n V1 = 'V1'\n}\n\nexport type GqlVariableOutput = {\n __typename: 'VariableOutput';\n amount: Scalars['U64'];\n assetId: Scalars['AssetId'];\n to: Scalars['Address'];\n};\n\ntype GqlTransactionStatusFragment_FailureStatus_Fragment = { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> };\n\ntype GqlTransactionStatusFragment_SqueezedOutStatus_Fragment = { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' };\n\ntype GqlTransactionStatusFragment_SubmittedStatus_Fragment = { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' };\n\ntype GqlTransactionStatusFragment_SuccessStatus_Fragment = { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null };\n\nexport type GqlTransactionStatusFragmentFragment = GqlTransactionStatusFragment_FailureStatus_Fragment | GqlTransactionStatusFragment_SqueezedOutStatus_Fragment | GqlTransactionStatusFragment_SubmittedStatus_Fragment | GqlTransactionStatusFragment_SuccessStatus_Fragment;\n\ntype GqlTransactionStatusSubscriptionFragment_FailureStatus_Fragment = { __typename: 'FailureStatus', type: 'FailureStatus' };\n\ntype GqlTransactionStatusSubscriptionFragment_SqueezedOutStatus_Fragment = { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' };\n\ntype GqlTransactionStatusSubscriptionFragment_SubmittedStatus_Fragment = { __typename: 'SubmittedStatus', type: 'SubmittedStatus' };\n\ntype GqlTransactionStatusSubscriptionFragment_SuccessStatus_Fragment = { __typename: 'SuccessStatus', type: 'SuccessStatus' };\n\nexport type GqlTransactionStatusSubscriptionFragmentFragment = GqlTransactionStatusSubscriptionFragment_FailureStatus_Fragment | GqlTransactionStatusSubscriptionFragment_SqueezedOutStatus_Fragment | GqlTransactionStatusSubscriptionFragment_SubmittedStatus_Fragment | GqlTransactionStatusSubscriptionFragment_SuccessStatus_Fragment;\n\nexport type GqlTransactionFragmentFragment = { __typename: 'Transaction', id: string, rawPayload: string, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null };\n\ntype GqlInputEstimatePredicatesFragment_InputCoin_Fragment = { __typename: 'InputCoin', predicateGasUsed: string };\n\ntype GqlInputEstimatePredicatesFragment_InputContract_Fragment = { __typename: 'InputContract' };\n\ntype GqlInputEstimatePredicatesFragment_InputMessage_Fragment = { __typename: 'InputMessage', predicateGasUsed: string };\n\nexport type GqlInputEstimatePredicatesFragmentFragment = GqlInputEstimatePredicatesFragment_InputCoin_Fragment | GqlInputEstimatePredicatesFragment_InputContract_Fragment | GqlInputEstimatePredicatesFragment_InputMessage_Fragment;\n\nexport type GqlTransactionEstimatePredicatesFragmentFragment = { __typename: 'Transaction', inputs?: Array<{ __typename: 'InputCoin', predicateGasUsed: string } | { __typename: 'InputContract' } | { __typename: 'InputMessage', predicateGasUsed: string }> | null };\n\nexport type GqlDryRunFailureStatusFragmentFragment = { __typename: 'DryRunFailureStatus', reason: string, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null };\n\nexport type GqlDryRunSuccessStatusFragmentFragment = { __typename: 'DryRunSuccessStatus', programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null };\n\nexport type GqlReceiptFragmentFragment = { __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null };\n\ntype GqlDryRunTransactionStatusFragment_DryRunFailureStatus_Fragment = { __typename: 'DryRunFailureStatus', reason: string, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null };\n\ntype GqlDryRunTransactionStatusFragment_DryRunSuccessStatus_Fragment = { __typename: 'DryRunSuccessStatus', programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null };\n\nexport type GqlDryRunTransactionStatusFragmentFragment = GqlDryRunTransactionStatusFragment_DryRunFailureStatus_Fragment | GqlDryRunTransactionStatusFragment_DryRunSuccessStatus_Fragment;\n\nexport type GqlDryRunTransactionExecutionStatusFragmentFragment = { __typename: 'DryRunTransactionExecutionStatus', id: string, status: { __typename: 'DryRunFailureStatus', reason: string, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | { __typename: 'DryRunSuccessStatus', programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> };\n\nexport type GqlBlockFragmentFragment = { __typename: 'Block', id: string, height: any, header: { __typename: 'Header', time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> };\n\nexport type GqlCoinFragmentFragment = { __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, blockCreated: any, txCreatedIdx: any };\n\nexport type GqlMessageCoinFragmentFragment = { __typename: 'MessageCoin', sender: string, recipient: string, nonce: string, amount: string, assetId: string, daHeight: string };\n\nexport type GqlMessageFragmentFragment = { __typename: 'Message', amount: string, sender: string, recipient: string, data: string, nonce: string, daHeight: string };\n\nexport type GqlMessageProofFragmentFragment = { __typename: 'MessageProof', sender: string, recipient: string, nonce: string, amount: string, data: string, messageProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, blockProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, messageBlockHeader: { __typename: 'Header', id: string, daHeight: string, consensusParametersVersion: any, stateTransitionBytecodeVersion: any, transactionsCount: string, messageReceiptCount: string, transactionsRoot: string, messageOutboxRoot: string, eventInboxRoot: string, height: any, prevRoot: string, time: string, applicationHash: string }, commitBlockHeader: { __typename: 'Header', id: string, daHeight: string, consensusParametersVersion: any, stateTransitionBytecodeVersion: any, transactionsCount: string, messageReceiptCount: string, transactionsRoot: string, messageOutboxRoot: string, eventInboxRoot: string, height: any, prevRoot: string, time: string, applicationHash: string } };\n\nexport type GqlBalanceFragmentFragment = { __typename: 'Balance', owner: string, amount: string, assetId: string };\n\nexport type GqlTxParametersFragmentFragment = { __typename: 'TxParameters', version: GqlTxParametersVersion, maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string };\n\nexport type GqlPredicateParametersFragmentFragment = { __typename: 'PredicateParameters', version: GqlPredicateParametersVersion, maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string };\n\nexport type GqlScriptParametersFragmentFragment = { __typename: 'ScriptParameters', version: GqlScriptParametersVersion, maxScriptLength: string, maxScriptDataLength: string };\n\nexport type GqlContractParametersFragmentFragment = { __typename: 'ContractParameters', version: GqlContractParametersVersion, contractMaxSize: string, maxStorageSlots: string };\n\nexport type GqlFeeParametersFragmentFragment = { __typename: 'FeeParameters', version: GqlFeeParametersVersion, gasPriceFactor: string, gasPerByte: string };\n\ntype GqlDependentCostFragment_HeavyOperation_Fragment = { __typename: 'HeavyOperation', base: string, gasPerUnit: string };\n\ntype GqlDependentCostFragment_LightOperation_Fragment = { __typename: 'LightOperation', base: string, unitsPerGas: string };\n\nexport type GqlDependentCostFragmentFragment = GqlDependentCostFragment_HeavyOperation_Fragment | GqlDependentCostFragment_LightOperation_Fragment;\n\nexport type GqlGasCostsFragmentFragment = { __typename: 'GasCosts', version: GqlGasCostsVersion, add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, croo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } };\n\nexport type GqlConsensusParametersFragmentFragment = { __typename: 'ConsensusParameters', version: GqlConsensusParametersVersion, baseAssetId: string, chainId: string, txParams: { __typename: 'TxParameters', version: GqlTxParametersVersion, maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string }, predicateParams: { __typename: 'PredicateParameters', version: GqlPredicateParametersVersion, maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string }, scriptParams: { __typename: 'ScriptParameters', version: GqlScriptParametersVersion, maxScriptLength: string, maxScriptDataLength: string }, contractParams: { __typename: 'ContractParameters', version: GqlContractParametersVersion, contractMaxSize: string, maxStorageSlots: string }, feeParams: { __typename: 'FeeParameters', version: GqlFeeParametersVersion, gasPriceFactor: string, gasPerByte: string }, gasCosts: { __typename: 'GasCosts', version: GqlGasCostsVersion, add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, croo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } } };\n\nexport type GqlChainInfoFragmentFragment = { __typename: 'ChainInfo', name: string, daHeight: string, latestBlock: { __typename: 'Block', id: string, height: any, header: { __typename: 'Header', time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> }, consensusParameters: { __typename: 'ConsensusParameters', version: GqlConsensusParametersVersion, baseAssetId: string, chainId: string, txParams: { __typename: 'TxParameters', version: GqlTxParametersVersion, maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string }, predicateParams: { __typename: 'PredicateParameters', version: GqlPredicateParametersVersion, maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string }, scriptParams: { __typename: 'ScriptParameters', version: GqlScriptParametersVersion, maxScriptLength: string, maxScriptDataLength: string }, contractParams: { __typename: 'ContractParameters', version: GqlContractParametersVersion, contractMaxSize: string, maxStorageSlots: string }, feeParams: { __typename: 'FeeParameters', version: GqlFeeParametersVersion, gasPriceFactor: string, gasPerByte: string }, gasCosts: { __typename: 'GasCosts', version: GqlGasCostsVersion, add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, croo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } } } };\n\nexport type GqlContractBalanceFragmentFragment = { __typename: 'ContractBalance', contract: string, amount: string, assetId: string };\n\nexport type GqlPageInfoFragmentFragment = { __typename: 'PageInfo', hasPreviousPage: boolean, hasNextPage: boolean, startCursor?: string | null, endCursor?: string | null };\n\nexport type GqlGetVersionQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetVersionQuery = { __typename: 'Query', nodeInfo: { __typename: 'NodeInfo', nodeVersion: string } };\n\nexport type GqlNodeInfoFragmentFragment = { __typename: 'NodeInfo', utxoValidation: boolean, vmBacktrace: boolean, maxTx: string, maxDepth: string, nodeVersion: string };\n\nexport type GqlGetNodeInfoQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetNodeInfoQuery = { __typename: 'Query', nodeInfo: { __typename: 'NodeInfo', utxoValidation: boolean, vmBacktrace: boolean, maxTx: string, maxDepth: string, nodeVersion: string } };\n\nexport type GqlGetChainQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetChainQuery = { __typename: 'Query', chain: { __typename: 'ChainInfo', name: string, daHeight: string, latestBlock: { __typename: 'Block', id: string, height: any, header: { __typename: 'Header', time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> }, consensusParameters: { __typename: 'ConsensusParameters', version: GqlConsensusParametersVersion, baseAssetId: string, chainId: string, txParams: { __typename: 'TxParameters', version: GqlTxParametersVersion, maxInputs: any, maxOutputs: any, maxWitnesses: any, maxGasPerTx: string, maxSize: string }, predicateParams: { __typename: 'PredicateParameters', version: GqlPredicateParametersVersion, maxPredicateLength: string, maxPredicateDataLength: string, maxGasPerPredicate: string, maxMessageDataLength: string }, scriptParams: { __typename: 'ScriptParameters', version: GqlScriptParametersVersion, maxScriptLength: string, maxScriptDataLength: string }, contractParams: { __typename: 'ContractParameters', version: GqlContractParametersVersion, contractMaxSize: string, maxStorageSlots: string }, feeParams: { __typename: 'FeeParameters', version: GqlFeeParametersVersion, gasPriceFactor: string, gasPerByte: string }, gasCosts: { __typename: 'GasCosts', version: GqlGasCostsVersion, add: string, addi: string, aloc: string, and: string, andi: string, bal: string, bhei: string, bhsh: string, burn: string, cb: string, cfei: string, cfsi: string, div: string, divi: string, ecr1: string, eck1: string, ed19: string, eq: string, exp: string, expi: string, flag: string, gm: string, gt: string, gtf: string, ji: string, jmp: string, jne: string, jnei: string, jnzi: string, jmpf: string, jmpb: string, jnzf: string, jnzb: string, jnef: string, jneb: string, lb: string, log: string, lt: string, lw: string, mint: string, mlog: string, modOp: string, modi: string, moveOp: string, movi: string, mroo: string, mul: string, muli: string, mldv: string, noop: string, not: string, or: string, ori: string, poph: string, popl: string, pshh: string, pshl: string, ret: string, rvrt: string, sb: string, sll: string, slli: string, srl: string, srli: string, srw: string, sub: string, subi: string, sw: string, sww: string, time: string, tr: string, tro: string, wdcm: string, wqcm: string, wdop: string, wqop: string, wdml: string, wqml: string, wddv: string, wqdv: string, wdmd: string, wqmd: string, wdam: string, wqam: string, wdmm: string, wqmm: string, xor: string, xori: string, newStoragePerByte: string, call: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ccp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, croo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, csiz: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, k256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, ldc: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, logd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcl: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcli: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcp: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, mcpi: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, meq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, retd: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, s256: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, scwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, smo: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, srwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, swwq: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, contractRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, stateRoot: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string }, vmInitialization: { __typename: 'HeavyOperation', base: string, gasPerUnit: string } | { __typename: 'LightOperation', base: string, unitsPerGas: string } } } } };\n\nexport type GqlGetTransactionQueryVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n}>;\n\n\nexport type GqlGetTransactionQuery = { __typename: 'Query', transaction?: { __typename: 'Transaction', id: string, rawPayload: string, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } | null };\n\nexport type GqlGetTransactionWithReceiptsQueryVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n}>;\n\n\nexport type GqlGetTransactionWithReceiptsQuery = { __typename: 'Query', transaction?: { __typename: 'Transaction', id: string, rawPayload: string, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } | null };\n\nexport type GqlGetTransactionsQueryVariables = Exact<{\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetTransactionsQuery = { __typename: 'Query', transactions: { __typename: 'TransactionConnection', edges: Array<{ __typename: 'TransactionEdge', node: { __typename: 'Transaction', id: string, rawPayload: string, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } }> } };\n\nexport type GqlGetTransactionsByOwnerQueryVariables = Exact<{\n owner: Scalars['Address'];\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetTransactionsByOwnerQuery = { __typename: 'Query', transactionsByOwner: { __typename: 'TransactionConnection', pageInfo: { __typename: 'PageInfo', hasPreviousPage: boolean, hasNextPage: boolean, startCursor?: string | null, endCursor?: string | null }, edges: Array<{ __typename: 'TransactionEdge', node: { __typename: 'Transaction', id: string, rawPayload: string, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null } }> } };\n\nexport type GqlEstimatePredicatesQueryVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n}>;\n\n\nexport type GqlEstimatePredicatesQuery = { __typename: 'Query', estimatePredicates: { __typename: 'Transaction', inputs?: Array<{ __typename: 'InputCoin', predicateGasUsed: string } | { __typename: 'InputContract' } | { __typename: 'InputMessage', predicateGasUsed: string }> | null } };\n\nexport type GqlGetBlockQueryVariables = Exact<{\n blockId?: InputMaybe<Scalars['BlockId']>;\n height?: InputMaybe<Scalars['U32']>;\n}>;\n\n\nexport type GqlGetBlockQuery = { __typename: 'Query', block?: { __typename: 'Block', id: string, height: any, header: { __typename: 'Header', time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> } | null };\n\nexport type GqlGetBlockWithTransactionsQueryVariables = Exact<{\n blockId?: InputMaybe<Scalars['BlockId']>;\n blockHeight?: InputMaybe<Scalars['U32']>;\n}>;\n\n\nexport type GqlGetBlockWithTransactionsQuery = { __typename: 'Query', block?: { __typename: 'Block', id: string, height: any, transactions: Array<{ __typename: 'Transaction', id: string, rawPayload: string, status?: { __typename: 'FailureStatus', time: string, reason: string, type: 'FailureStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', time: string, type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', time: string, type: 'SuccessStatus', block: { __typename: 'Block', id: string }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }>, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | null }>, header: { __typename: 'Header', time: string } } | null };\n\nexport type GqlGetBlocksQueryVariables = Exact<{\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetBlocksQuery = { __typename: 'Query', blocks: { __typename: 'BlockConnection', edges: Array<{ __typename: 'BlockEdge', node: { __typename: 'Block', id: string, height: any, header: { __typename: 'Header', time: string }, transactions: Array<{ __typename: 'Transaction', id: string }> } }> } };\n\nexport type GqlGetCoinQueryVariables = Exact<{\n coinId: Scalars['UtxoId'];\n}>;\n\n\nexport type GqlGetCoinQuery = { __typename: 'Query', coin?: { __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, blockCreated: any, txCreatedIdx: any } | null };\n\nexport type GqlGetCoinsQueryVariables = Exact<{\n filter: GqlCoinFilterInput;\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetCoinsQuery = { __typename: 'Query', coins: { __typename: 'CoinConnection', edges: Array<{ __typename: 'CoinEdge', node: { __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, blockCreated: any, txCreatedIdx: any } }> } };\n\nexport type GqlGetCoinsToSpendQueryVariables = Exact<{\n owner: Scalars['Address'];\n queryPerAsset: Array<GqlSpendQueryElementInput> | GqlSpendQueryElementInput;\n excludedIds?: InputMaybe<GqlExcludeInput>;\n}>;\n\n\nexport type GqlGetCoinsToSpendQuery = { __typename: 'Query', coinsToSpend: Array<Array<{ __typename: 'Coin', utxoId: string, owner: string, amount: string, assetId: string, blockCreated: any, txCreatedIdx: any } | { __typename: 'MessageCoin', sender: string, recipient: string, nonce: string, amount: string, assetId: string, daHeight: string }>> };\n\nexport type GqlGetContractQueryVariables = Exact<{\n contractId: Scalars['ContractId'];\n}>;\n\n\nexport type GqlGetContractQuery = { __typename: 'Query', contract?: { __typename: 'Contract', bytecode: string, id: string } | null };\n\nexport type GqlGetContractBalanceQueryVariables = Exact<{\n contract: Scalars['ContractId'];\n asset: Scalars['AssetId'];\n}>;\n\n\nexport type GqlGetContractBalanceQuery = { __typename: 'Query', contractBalance: { __typename: 'ContractBalance', contract: string, amount: string, assetId: string } };\n\nexport type GqlGetBalanceQueryVariables = Exact<{\n owner: Scalars['Address'];\n assetId: Scalars['AssetId'];\n}>;\n\n\nexport type GqlGetBalanceQuery = { __typename: 'Query', balance: { __typename: 'Balance', owner: string, amount: string, assetId: string } };\n\nexport type GqlGetLatestGasPriceQueryVariables = Exact<{ [key: string]: never; }>;\n\n\nexport type GqlGetLatestGasPriceQuery = { __typename: 'Query', latestGasPrice: { __typename: 'LatestGasPrice', gasPrice: string } };\n\nexport type GqlEstimateGasPriceQueryVariables = Exact<{\n blockHorizon: Scalars['U32'];\n}>;\n\n\nexport type GqlEstimateGasPriceQuery = { __typename: 'Query', estimateGasPrice: { __typename: 'EstimateGasPrice', gasPrice: string } };\n\nexport type GqlGetBalancesQueryVariables = Exact<{\n filter: GqlBalanceFilterInput;\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetBalancesQuery = { __typename: 'Query', balances: { __typename: 'BalanceConnection', edges: Array<{ __typename: 'BalanceEdge', node: { __typename: 'Balance', owner: string, amount: string, assetId: string } }> } };\n\nexport type GqlGetMessagesQueryVariables = Exact<{\n owner: Scalars['Address'];\n after?: InputMaybe<Scalars['String']>;\n before?: InputMaybe<Scalars['String']>;\n first?: InputMaybe<Scalars['Int']>;\n last?: InputMaybe<Scalars['Int']>;\n}>;\n\n\nexport type GqlGetMessagesQuery = { __typename: 'Query', messages: { __typename: 'MessageConnection', edges: Array<{ __typename: 'MessageEdge', node: { __typename: 'Message', amount: string, sender: string, recipient: string, data: string, nonce: string, daHeight: string } }> } };\n\nexport type GqlGetMessageProofQueryVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n nonce: Scalars['Nonce'];\n commitBlockId?: InputMaybe<Scalars['BlockId']>;\n commitBlockHeight?: InputMaybe<Scalars['U32']>;\n}>;\n\n\nexport type GqlGetMessageProofQuery = { __typename: 'Query', messageProof?: { __typename: 'MessageProof', sender: string, recipient: string, nonce: string, amount: string, data: string, messageProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, blockProof: { __typename: 'MerkleProof', proofSet: Array<string>, proofIndex: string }, messageBlockHeader: { __typename: 'Header', id: string, daHeight: string, consensusParametersVersion: any, stateTransitionBytecodeVersion: any, transactionsCount: string, messageReceiptCount: string, transactionsRoot: string, messageOutboxRoot: string, eventInboxRoot: string, height: any, prevRoot: string, time: string, applicationHash: string }, commitBlockHeader: { __typename: 'Header', id: string, daHeight: string, consensusParametersVersion: any, stateTransitionBytecodeVersion: any, transactionsCount: string, messageReceiptCount: string, transactionsRoot: string, messageOutboxRoot: string, eventInboxRoot: string, height: any, prevRoot: string, time: string, applicationHash: string } } | null };\n\nexport type GqlGetMessageStatusQueryVariables = Exact<{\n nonce: Scalars['Nonce'];\n}>;\n\n\nexport type GqlGetMessageStatusQuery = { __typename: 'Query', messageStatus: { __typename: 'MessageStatus', state: GqlMessageState } };\n\nexport type GqlDryRunMutationVariables = Exact<{\n encodedTransactions: Array<Scalars['HexString']> | Scalars['HexString'];\n utxoValidation?: InputMaybe<Scalars['Boolean']>;\n}>;\n\n\nexport type GqlDryRunMutation = { __typename: 'Mutation', dryRun: Array<{ __typename: 'DryRunTransactionExecutionStatus', id: string, status: { __typename: 'DryRunFailureStatus', reason: string, programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null } | { __typename: 'DryRunSuccessStatus', programState?: { __typename: 'ProgramState', returnType: GqlReturnType, data: string } | null }, receipts: Array<{ __typename: 'Receipt', id?: string | null, pc?: string | null, is?: string | null, to?: string | null, toAddress?: string | null, amount?: string | null, assetId?: string | null, gas?: string | null, param1?: string | null, param2?: string | null, val?: string | null, ptr?: string | null, digest?: string | null, reason?: string | null, ra?: string | null, rb?: string | null, rc?: string | null, rd?: string | null, len?: string | null, receiptType: GqlReceiptType, result?: string | null, gasUsed?: string | null, data?: string | null, sender?: string | null, recipient?: string | null, nonce?: string | null, contractId?: string | null, subId?: string | null }> }> };\n\nexport type GqlSubmitMutationVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n}>;\n\n\nexport type GqlSubmitMutation = { __typename: 'Mutation', submit: { __typename: 'Transaction', id: string } };\n\nexport type GqlProduceBlocksMutationVariables = Exact<{\n startTimestamp?: InputMaybe<Scalars['Tai64Timestamp']>;\n blocksToProduce: Scalars['U32'];\n}>;\n\n\nexport type GqlProduceBlocksMutation = { __typename: 'Mutation', produceBlocks: any };\n\nexport type GqlSubmitAndAwaitSubscriptionVariables = Exact<{\n encodedTransaction: Scalars['HexString'];\n}>;\n\n\nexport type GqlSubmitAndAwaitSubscription = { __typename: 'Subscription', submitAndAwait: { __typename: 'FailureStatus', type: 'FailureStatus' } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', type: 'SuccessStatus' } };\n\nexport type GqlStatusChangeSubscriptionVariables = Exact<{\n transactionId: Scalars['TransactionId'];\n}>;\n\n\nexport type GqlStatusChangeSubscription = { __typename: 'Subscription', statusChange: { __typename: 'FailureStatus', type: 'FailureStatus' } | { __typename: 'SqueezedOutStatus', reason: string, type: 'SqueezedOutStatus' } | { __typename: 'SubmittedStatus', type: 'SubmittedStatus' } | { __typename: 'SuccessStatus', type: 'SuccessStatus' } };\n\nexport const TransactionStatusSubscriptionFragmentFragmentDoc = gql`\n fragment transactionStatusSubscriptionFragment on TransactionStatus {\n type: __typename\n ... on SqueezedOutStatus {\n reason\n }\n}\n `;\nexport const ReceiptFragmentFragmentDoc = gql`\n fragment receiptFragment on Receipt {\n id\n pc\n is\n to\n toAddress\n amount\n assetId\n gas\n param1\n param2\n val\n ptr\n digest\n reason\n ra\n rb\n rc\n rd\n len\n receiptType\n result\n gasUsed\n data\n sender\n recipient\n nonce\n contractId\n subId\n}\n `;\nexport const TransactionStatusFragmentFragmentDoc = gql`\n fragment transactionStatusFragment on TransactionStatus {\n type: __typename\n ... on SubmittedStatus {\n time\n }\n ... on SuccessStatus {\n block {\n id\n }\n time\n receipts {\n ...receiptFragment\n }\n programState {\n returnType\n data\n }\n receipts {\n ...receiptFragment\n }\n }\n ... on FailureStatus {\n block {\n id\n }\n time\n reason\n receipts {\n ...receiptFragment\n }\n }\n ... on SqueezedOutStatus {\n reason\n }\n}\n ${ReceiptFragmentFragmentDoc}`;\nexport const TransactionFragmentFragmentDoc = gql`\n fragment transactionFragment on Transaction {\n id\n rawPayload\n status {\n ...transactionStatusFragment\n }\n}\n ${TransactionStatusFragmentFragmentDoc}`;\nexport const InputEstimatePredicatesFragmentFragmentDoc = gql`\n fragment inputEstimatePredicatesFragment on Input {\n ... on InputCoin {\n predicateGasUsed\n }\n ... on InputMessage {\n predicateGasUsed\n }\n}\n `;\nexport const TransactionEstimatePredicatesFragmentFragmentDoc = gql`\n fragment transactionEstimatePredicatesFragment on Transaction {\n inputs {\n ...inputEstimatePredicatesFragment\n }\n}\n ${InputEstimatePredicatesFragmentFragmentDoc}`;\nexport const DryRunFailureStatusFragmentFragmentDoc = gql`\n fragment dryRunFailureStatusFragment on DryRunFailureStatus {\n reason\n programState {\n returnType\n data\n }\n}\n `;\nexport const DryRunSuccessStatusFragmentFragmentDoc = gql`\n fragment dryRunSuccessStatusFragment on DryRunSuccessStatus {\n programState {\n returnType\n data\n }\n}\n `;\nexport const DryRunTransactionStatusFragmentFragmentDoc = gql`\n fragment dryRunTransactionStatusFragment on DryRunTransactionStatus {\n ... on DryRunFailureStatus {\n ...dryRunFailureStatusFragment\n }\n ... on DryRunSuccessStatus {\n ...dryRunSuccessStatusFragment\n }\n}\n ${DryRunFailureStatusFragmentFragmentDoc}\n${DryRunSuccessStatusFragmentFragmentDoc}`;\nexport const DryRunTransactionExecutionStatusFragmentFragmentDoc = gql`\n fragment dryRunTransactionExecutionStatusFragment on DryRunTransactionExecutionStatus {\n id\n status {\n ...dryRunTransactionStatusFragment\n }\n receipts {\n ...receiptFragment\n }\n}\n ${DryRunTransactionStatusFragmentFragmentDoc}\n${ReceiptFragmentFragmentDoc}`;\nexport const CoinFragmentFragmentDoc = gql`\n fragment coinFragment on Coin {\n __typename\n utxoId\n owner\n amount\n assetId\n blockCreated\n txCreatedIdx\n}\n `;\nexport const MessageCoinFragmentFragmentDoc = gql`\n fragment messageCoinFragment on MessageCoin {\n __typename\n sender\n recipient\n nonce\n amount\n assetId\n daHeight\n}\n `;\nexport const MessageFragmentFragmentDoc = gql`\n fragment messageFragment on Message {\n amount\n sender\n recipient\n data\n nonce\n daHeight\n}\n `;\nexport const MessageProofFragmentFragmentDoc = gql`\n fragment messageProofFragment on MessageProof {\n messageProof {\n proofSet\n proofIndex\n }\n blockProof {\n proofSet\n proofIndex\n }\n messageBlockHeader {\n id\n daHeight\n consensusParametersVersion\n stateTransitionBytecodeVersion\n transactionsCount\n messageReceiptCount\n transactionsRoot\n messageOutboxRoot\n eventInboxRoot\n height\n prevRoot\n time\n applicationHash\n }\n commitBlockHeader {\n id\n daHeight\n consensusParametersVersion\n stateTransitionBytecodeVersion\n transactionsCount\n messageReceiptCount\n transactionsRoot\n messageOutboxRoot\n eventInboxRoot\n height\n prevRoot\n time\n applicationHash\n }\n sender\n recipient\n nonce\n amount\n data\n}\n `;\nexport const BalanceFragmentFragmentDoc = gql`\n fragment balanceFragment on Balance {\n owner\n amount\n assetId\n}\n `;\nexport const BlockFragmentFragmentDoc = gql`\n fragment blockFragment on Block {\n id\n height\n header {\n time\n }\n transactions {\n id\n }\n}\n `;\nexport const TxParametersFragmentFragmentDoc = gql`\n fragment TxParametersFragment on TxParameters {\n version\n maxInputs\n maxOutputs\n maxWitnesses\n maxGasPerTx\n maxSize\n}\n `;\nexport const PredicateParametersFragmentFragmentDoc = gql`\n fragment PredicateParametersFragment on PredicateParameters {\n version\n maxPredicateLength\n maxPredicateDataLength\n maxGasPerPredicate\n maxMessageDataLength\n}\n `;\nexport const ScriptParametersFragmentFragmentDoc = gql`\n fragment ScriptParametersFragment on ScriptParameters {\n version\n maxScriptLength\n maxScriptDataLength\n}\n `;\nexport const ContractParametersFragmentFragmentDoc = gql`\n fragment ContractParametersFragment on ContractParameters {\n version\n contractMaxSize\n maxStorageSlots\n}\n `;\nexport const FeeParametersFragmentFragmentDoc = gql`\n fragment FeeParametersFragment on FeeParameters {\n version\n gasPriceFactor\n gasPerByte\n}\n `;\nexport const DependentCostFragmentFragmentDoc = gql`\n fragment DependentCostFragment on DependentCost {\n __typename\n ... on LightOperation {\n base\n unitsPerGas\n }\n ... on HeavyOperation {\n base\n gasPerUnit\n }\n}\n `;\nexport const GasCostsFragmentFragmentDoc = gql`\n fragment GasCostsFragment on GasCosts {\n version\n add\n addi\n aloc\n and\n andi\n bal\n bhei\n bhsh\n burn\n cb\n cfei\n cfsi\n div\n divi\n ecr1\n eck1\n ed19\n eq\n exp\n expi\n flag\n gm\n gt\n gtf\n ji\n jmp\n jne\n jnei\n jnzi\n jmpf\n jmpb\n jnzf\n jnzb\n jnef\n jneb\n lb\n log\n lt\n lw\n mint\n mlog\n modOp\n modi\n moveOp\n movi\n mroo\n mul\n muli\n mldv\n noop\n not\n or\n ori\n poph\n popl\n pshh\n pshl\n ret\n rvrt\n sb\n sll\n slli\n srl\n srli\n srw\n sub\n subi\n sw\n sww\n time\n tr\n tro\n wdcm\n wqcm\n wdop\n wqop\n wdml\n wqml\n wddv\n wqdv\n wdmd\n wqmd\n wdam\n wqam\n wdmm\n wqmm\n xor\n xori\n call {\n ...DependentCostFragment\n }\n ccp {\n ...DependentCostFragment\n }\n croo {\n ...DependentCostFragment\n }\n csiz {\n ...DependentCostFragment\n }\n k256 {\n ...DependentCostFragment\n }\n ldc {\n ...DependentCostFragment\n }\n logd {\n ...DependentCostFragment\n }\n mcl {\n ...DependentCostFragment\n }\n mcli {\n ...DependentCostFragment\n }\n mcp {\n ...DependentCostFragment\n }\n mcpi {\n ...DependentCostFragment\n }\n meq {\n ...DependentCostFragment\n }\n retd {\n ...DependentCostFragment\n }\n s256 {\n ...DependentCostFragment\n }\n scwq {\n ...DependentCostFragment\n }\n smo {\n ...DependentCostFragment\n }\n srwq {\n ...DependentCostFragment\n }\n swwq {\n ...DependentCostFragment\n }\n contractRoot {\n ...DependentCostFragment\n }\n stateRoot {\n ...DependentCostFragment\n }\n vmInitialization {\n ...DependentCostFragment\n }\n newStoragePerByte\n}\n ${DependentCostFragmentFragmentDoc}`;\nexport const ConsensusParametersFragmentFragmentDoc = gql`\n fragment consensusParametersFragment on ConsensusParameters {\n version\n txParams {\n ...TxParametersFragment\n }\n predicateParams {\n ...PredicateParametersFragment\n }\n scriptParams {\n ...ScriptParametersFragment\n }\n contractParams {\n ...ContractParametersFragment\n }\n feeParams {\n ...FeeParametersFragment\n }\n gasCosts {\n ...GasCostsFragment\n }\n baseAssetId\n chainId\n}\n ${TxParametersFragmentFragmentDoc}\n${PredicateParametersFragmentFragmentDoc}\n${ScriptParametersFragmentFragmentDoc}\n${ContractParametersFragmentFragmentDoc}\n${FeeParametersFragmentFragmentDoc}\n${GasCostsFragmentFragmentDoc}`;\nexport const ChainInfoFragmentFragmentDoc = gql`\n fragment chainInfoFragment on ChainInfo {\n name\n latestBlock {\n ...blockFragment\n }\n daHeight\n consensusParameters {\n ...consensusParametersFragment\n }\n}\n ${BlockFragmentFragmentDoc}\n${ConsensusParametersFragmentFragmentDoc}`;\nexport const ContractBalanceFragmentFragmentDoc = gql`\n fragment contractBalanceFragment on ContractBalance {\n contract\n amount\n assetId\n}\n `;\nexport const PageInfoFragmentFragmentDoc = gql`\n fragment pageInfoFragment on PageInfo {\n hasPreviousPage\n hasNextPage\n startCursor\n endCursor\n}\n `;\nexport const NodeInfoFragmentFragmentDoc = gql`\n fragment nodeInfoFragment on NodeInfo {\n utxoValidation\n vmBacktrace\n maxTx\n maxDepth\n nodeVersion\n}\n `;\nexport const GetVersionDocument = gql`\n query getVersion {\n nodeInfo {\n nodeVersion\n }\n}\n `;\nexport const GetNodeInfoDocument = gql`\n query getNodeInfo {\n nodeInfo {\n ...nodeInfoFragment\n }\n}\n ${NodeInfoFragmentFragmentDoc}`;\nexport const GetChainDocument = gql`\n query getChain {\n chain {\n ...chainInfoFragment\n }\n}\n ${ChainInfoFragmentFragmentDoc}`;\nexport const GetTransactionDocument = gql`\n query getTransaction($transactionId: TransactionId!) {\n transaction(id: $transactionId) {\n ...transactionFragment\n }\n}\n ${TransactionFragmentFragmentDoc}`;\nexport const GetTransactionWithReceiptsDocument = gql`\n query getTransactionWithReceipts($transactionId: TransactionId!) {\n transaction(id: $transactionId) {\n ...transactionFragment\n }\n}\n ${TransactionFragmentFragmentDoc}`;\nexport const GetTransactionsDocument = gql`\n query getTransactions($after: String, $before: String, $first: Int, $last: Int) {\n transactions(after: $after, before: $before, first: $first, last: $last) {\n edges {\n node {\n ...transactionFragment\n }\n }\n }\n}\n ${TransactionFragmentFragmentDoc}`;\nexport const GetTransactionsByOwnerDocument = gql`\n query getTransactionsByOwner($owner: Address!, $after: String, $before: String, $first: Int, $last: Int) {\n transactionsByOwner(\n owner: $owner\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n pageInfo {\n ...pageInfoFragment\n }\n edges {\n node {\n ...transactionFragment\n }\n }\n }\n}\n ${PageInfoFragmentFragmentDoc}\n${TransactionFragmentFragmentDoc}`;\nexport const EstimatePredicatesDocument = gql`\n query estimatePredicates($encodedTransaction: HexString!) {\n estimatePredicates(tx: $encodedTransaction) {\n ...transactionEstimatePredicatesFragment\n }\n}\n ${TransactionEstimatePredicatesFragmentFragmentDoc}`;\nexport const GetBlockDocument = gql`\n query getBlock($blockId: BlockId, $height: U32) {\n block(id: $blockId, height: $height) {\n ...blockFragment\n }\n}\n ${BlockFragmentFragmentDoc}`;\nexport const GetBlockWithTransactionsDocument = gql`\n query getBlockWithTransactions($blockId: BlockId, $blockHeight: U32) {\n block(id: $blockId, height: $blockHeight) {\n ...blockFragment\n transactions {\n ...transactionFragment\n }\n }\n}\n ${BlockFragmentFragmentDoc}\n${TransactionFragmentFragmentDoc}`;\nexport const GetBlocksDocument = gql`\n query getBlocks($after: String, $before: String, $first: Int, $last: Int) {\n blocks(after: $after, before: $before, first: $first, last: $last) {\n edges {\n node {\n ...blockFragment\n }\n }\n }\n}\n ${BlockFragmentFragmentDoc}`;\nexport const GetCoinDocument = gql`\n query getCoin($coinId: UtxoId!) {\n coin(utxoId: $coinId) {\n ...coinFragment\n }\n}\n ${CoinFragmentFragmentDoc}`;\nexport const GetCoinsDocument = gql`\n query getCoins($filter: CoinFilterInput!, $after: String, $before: String, $first: Int, $last: Int) {\n coins(\n filter: $filter\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n edges {\n node {\n ...coinFragment\n }\n }\n }\n}\n ${CoinFragmentFragmentDoc}`;\nexport const GetCoinsToSpendDocument = gql`\n query getCoinsToSpend($owner: Address!, $queryPerAsset: [SpendQueryElementInput!]!, $excludedIds: ExcludeInput) {\n coinsToSpend(\n owner: $owner\n queryPerAsset: $queryPerAsset\n excludedIds: $excludedIds\n ) {\n ...coinFragment\n ...messageCoinFragment\n }\n}\n ${CoinFragmentFragmentDoc}\n${MessageCoinFragmentFragmentDoc}`;\nexport const GetContractDocument = gql`\n query getContract($contractId: ContractId!) {\n contract(id: $contractId) {\n bytecode\n id\n }\n}\n `;\nexport const GetContractBalanceDocument = gql`\n query getContractBalance($contract: ContractId!, $asset: AssetId!) {\n contractBalance(contract: $contract, asset: $asset) {\n ...contractBalanceFragment\n }\n}\n ${ContractBalanceFragmentFragmentDoc}`;\nexport const GetBalanceDocument = gql`\n query getBalance($owner: Address!, $assetId: AssetId!) {\n balance(owner: $owner, assetId: $assetId) {\n ...balanceFragment\n }\n}\n ${BalanceFragmentFragmentDoc}`;\nexport const GetLatestGasPriceDocument = gql`\n query getLatestGasPrice {\n latestGasPrice {\n gasPrice\n }\n}\n `;\nexport const EstimateGasPriceDocument = gql`\n query estimateGasPrice($blockHorizon: U32!) {\n estimateGasPrice(blockHorizon: $blockHorizon) {\n gasPrice\n }\n}\n `;\nexport const GetBalancesDocument = gql`\n query getBalances($filter: BalanceFilterInput!, $after: String, $before: String, $first: Int, $last: Int) {\n balances(\n filter: $filter\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n edges {\n node {\n ...balanceFragment\n }\n }\n }\n}\n ${BalanceFragmentFragmentDoc}`;\nexport const GetMessagesDocument = gql`\n query getMessages($owner: Address!, $after: String, $before: String, $first: Int, $last: Int) {\n messages(\n owner: $owner\n after: $after\n before: $before\n first: $first\n last: $last\n ) {\n edges {\n node {\n ...messageFragment\n }\n }\n }\n}\n ${MessageFragmentFragmentDoc}`;\nexport const GetMessageProofDocument = gql`\n query getMessageProof($transactionId: TransactionId!, $nonce: Nonce!, $commitBlockId: BlockId, $commitBlockHeight: U32) {\n messageProof(\n transactionId: $transactionId\n nonce: $nonce\n commitBlockId: $commitBlockId\n commitBlockHeight: $commitBlockHeight\n ) {\n ...messageProofFragment\n }\n}\n ${MessageProofFragmentFragmentDoc}`;\nexport const GetMessageStatusDocument = gql`\n query getMessageStatus($nonce: Nonce!) {\n messageStatus(nonce: $nonce) {\n state\n }\n}\n `;\nexport const DryRunDocument = gql`\n mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean) {\n dryRun(txs: $encodedTransactions, utxoValidation: $utxoValidation) {\n ...dryRunTransactionExecutionStatusFragment\n }\n}\n ${DryRunTransactionExecutionStatusFragmentFragmentDoc}`;\nexport const SubmitDocument = gql`\n mutation submit($encodedTransaction: HexString!) {\n submit(tx: $encodedTransaction) {\n id\n }\n}\n `;\nexport const ProduceBlocksDocument = gql`\n mutation produceBlocks($startTimestamp: Tai64Timestamp, $blocksToProduce: U32!) {\n produceBlocks(\n blocksToProduce: $blocksToProduce\n startTimestamp: $startTimestamp\n )\n}\n `;\nexport const SubmitAndAwaitDocument = gql`\n subscription submitAndAwait($encodedTransaction: HexString!) {\n submitAndAwait(tx: $encodedTransaction) {\n ...transactionStatusSubscriptionFragment\n }\n}\n ${TransactionStatusSubscriptionFragmentFragmentDoc}`;\nexport const StatusChangeDocument = gql`\n subscription statusChange($transactionId: TransactionId!) {\n statusChange(id: $transactionId) {\n ...transactionStatusSubscriptionFragment\n }\n}\n ${TransactionStatusSubscriptionFragmentFragmentDoc}`;\nexport type Requester<C = {}, E = unknown> = <R, V>(doc: DocumentNode, vars?: V, options?: C) => Promise<R> | AsyncIterable<R>\nexport function getSdk<C, E>(requester: Requester<C, E>) {\n return {\n getVersion(variables?: GqlGetVersionQueryVariables, options?: C): Promise<GqlGetVersionQuery> {\n return requester<GqlGetVersionQuery, GqlGetVersionQueryVariables>(GetVersionDocument, variables, options) as Promise<GqlGetVersionQuery>;\n },\n getNodeInfo(variables?: GqlGetNodeInfoQueryVariables, options?: C): Promise<GqlGetNodeInfoQuery> {\n return requester<GqlGetNodeInfoQuery, GqlGetNodeInfoQueryVariables>(GetNodeInfoDocument, variables, options) as Promise<GqlGetNodeInfoQuery>;\n },\n getChain(variables?: GqlGetChainQueryVariables, options?: C): Promise<GqlGetChainQuery> {\n return requester<GqlGetChainQuery, GqlGetChainQueryVariables>(GetChainDocument, variables, options) as Promise<GqlGetChainQuery>;\n },\n getTransaction(variables: GqlGetTransactionQueryVariables, options?: C): Promise<GqlGetTransactionQuery> {\n return requester<GqlGetTransactionQuery, GqlGetTransactionQueryVariables>(GetTransactionDocument, variables, options) as Promise<GqlGetTransactionQuery>;\n },\n getTransactionWithReceipts(variables: GqlGetTransactionWithReceiptsQueryVariables, options?: C): Promise<GqlGetTransactionWithReceiptsQuery> {\n return requester<GqlGetTransactionWithReceiptsQuery, GqlGetTransactionWithReceiptsQueryVariables>(GetTransactionWithReceiptsDocument, variables, options) as Promise<GqlGetTransactionWithReceiptsQuery>;\n },\n getTransactions(variables?: GqlGetTransactionsQueryVariables, options?: C): Promise<GqlGetTransactionsQuery> {\n return requester<GqlGetTransactionsQuery, GqlGetTransactionsQueryVariables>(GetTransactionsDocument, variables, options) as Promise<GqlGetTransactionsQuery>;\n },\n getTransactionsByOwner(variables: GqlGetTransactionsByOwnerQueryVariables, options?: C): Promise<GqlGetTransactionsByOwnerQuery> {\n return requester<GqlGetTransactionsByOwnerQuery, GqlGetTransactionsByOwnerQueryVariables>(GetTransactionsByOwnerDocument, variables, options) as Promise<GqlGetTransactionsByOwnerQuery>;\n },\n estimatePredicates(variables: GqlEstimatePredicatesQueryVariables, options?: C): Promise<GqlEstimatePredicatesQuery> {\n return requester<GqlEstimatePredicatesQuery, GqlEstimatePredicatesQueryVariables>(EstimatePredicatesDocument, variables, options) as Promise<GqlEstimatePredicatesQuery>;\n },\n getBlock(variables?: GqlGetBlockQueryVariables, options?: C): Promise<GqlGetBlockQuery> {\n return requester<GqlGetBlockQuery, GqlGetBlockQueryVariables>(GetBlockDocument, variables, options) as Promise<GqlGetBlockQuery>;\n },\n getBlockWithTransactions(variables?: GqlGetBlockWithTransactionsQueryVariables, options?: C): Promise<GqlGetBlockWithTransactionsQuery> {\n return requester<GqlGetBlockWithTransactionsQuery, GqlGetBlockWithTransactionsQueryVariables>(GetBlockWithTransactionsDocument, variables, options) as Promise<GqlGetBlockWithTransactionsQuery>;\n },\n getBlocks(variables?: GqlGetBlocksQueryVariables, options?: C): Promise<GqlGetBlocksQuery> {\n return requester<GqlGetBlocksQuery, GqlGetBlocksQueryVariables>(GetBlocksDocument, variables, options) as Promise<GqlGetBlocksQuery>;\n },\n getCoin(variables: GqlGetCoinQueryVariables, options?: C): Promise<GqlGetCoinQuery> {\n return requester<GqlGetCoinQuery, GqlGetCoinQueryVariables>(GetCoinDocument, variables, options) as Promise<GqlGetCoinQuery>;\n },\n getCoins(variables: GqlGetCoinsQueryVariables, options?: C): Promise<GqlGetCoinsQuery> {\n return requester<GqlGetCoinsQuery, GqlGetCoinsQueryVariables>(GetCoinsDocument, variables, options) as Promise<GqlGetCoinsQuery>;\n },\n getCoinsToSpend(variables: GqlGetCoinsToSpendQueryVariables, options?: C): Promise<GqlGetCoinsToSpendQuery> {\n return requester<GqlGetCoinsToSpendQuery, GqlGetCoinsToSpendQueryVariables>(GetCoinsToSpendDocument, variables, options) as Promise<GqlGetCoinsToSpendQuery>;\n },\n getContract(variables: GqlGetContractQueryVariables, options?: C): Promise<GqlGetContractQuery> {\n return requester<GqlGetContractQuery, GqlGetContractQueryVariables>(GetContractDocument, variables, options) as Promise<GqlGetContractQuery>;\n },\n getContractBalance(variables: GqlGetContractBalanceQueryVariables, options?: C): Promise<GqlGetContractBalanceQuery> {\n return requester<GqlGetContractBalanceQuery, GqlGetContractBalanceQueryVariables>(GetContractBalanceDocument, variables, options) as Promise<GqlGetContractBalanceQuery>;\n },\n getBalance(variables: GqlGetBalanceQueryVariables, options?: C): Promise<GqlGetBalanceQuery> {\n return requester<GqlGetBalanceQuery, GqlGetBalanceQueryVariables>(GetBalanceDocument, variables, options) as Promise<GqlGetBalanceQuery>;\n },\n getLatestGasPrice(variables?: GqlGetLatestGasPriceQueryVariables, options?: C): Promise<GqlGetLatestGasPriceQuery> {\n return requester<GqlGetLatestGasPriceQuery, GqlGetLatestGasPriceQueryVariables>(GetLatestGasPriceDocument, variables, options) as Promise<GqlGetLatestGasPriceQuery>;\n },\n estimateGasPrice(variables: GqlEstimateGasPriceQueryVariables, options?: C): Promise<GqlEstimateGasPriceQuery> {\n return requester<GqlEstimateGasPriceQuery, GqlEstimateGasPriceQueryVariables>(EstimateGasPriceDocument, variables, options) as Promise<GqlEstimateGasPriceQuery>;\n },\n getBalances(variables: GqlGetBalancesQueryVariables, options?: C): Promise<GqlGetBalancesQuery> {\n return requester<GqlGetBalancesQuery, GqlGetBalancesQueryVariables>(GetBalancesDocument, variables, options) as Promise<GqlGetBalancesQuery>;\n },\n getMessages(variables: GqlGetMessagesQueryVariables, options?: C): Promise<GqlGetMessagesQuery> {\n return requester<GqlGetMessagesQuery, GqlGetMessagesQueryVariables>(GetMessagesDocument, variables, options) as Promise<GqlGetMessagesQuery>;\n },\n getMessageProof(variables: GqlGetMessageProofQueryVariables, options?: C): Promise<GqlGetMessageProofQuery> {\n return requester<GqlGetMessageProofQuery, GqlGetMessageProofQueryVariables>(GetMessageProofDocument, variables, options) as Promise<GqlGetMessageProofQuery>;\n },\n getMessageStatus(variables: GqlGetMessageStatusQueryVariables, options?: C): Promise<GqlGetMessageStatusQuery> {\n return requester<GqlGetMessageStatusQuery, GqlGetMessageStatusQueryVariables>(GetMessageStatusDocument, variables, options) as Promise<GqlGetMessageStatusQuery>;\n },\n dryRun(variables: GqlDryRunMutationVariables, options?: C): Promise<GqlDryRunMutation> {\n return requester<GqlDryRunMutation, GqlDryRunMutationVariables>(DryRunDocument, variables, options) as Promise<GqlDryRunMutation>;\n },\n submit(variables: GqlSubmitMutationVariables, options?: C): Promise<GqlSubmitMutation> {\n return requester<GqlSubmitMutation, GqlSubmitMutationVariables>(SubmitDocument, variables, options) as Promise<GqlSubmitMutation>;\n },\n produceBlocks(variables: GqlProduceBlocksMutationVariables, options?: C): Promise<GqlProduceBlocksMutation> {\n return requester<GqlProduceBlocksMutation, GqlProduceBlocksMutationVariables>(ProduceBlocksDocument, variables, options) as Promise<GqlProduceBlocksMutation>;\n },\n submitAndAwait(variables: GqlSubmitAndAwaitSubscriptionVariables, options?: C): AsyncIterable<GqlSubmitAndAwaitSubscription> {\n return requester<GqlSubmitAndAwaitSubscription, GqlSubmitAndAwaitSubscriptionVariables>(SubmitAndAwaitDocument, variables, options) as AsyncIterable<GqlSubmitAndAwaitSubscription>;\n },\n statusChange(variables: GqlStatusChangeSubscriptionVariables, options?: C): AsyncIterable<GqlStatusChangeSubscription> {\n return requester<GqlStatusChangeSubscription, GqlStatusChangeSubscriptionVariables>(StatusChangeDocument, variables, options) as AsyncIterable<GqlStatusChangeSubscription>;\n }\n };\n}\nexport type Sdk = ReturnType<typeof getSdk>;","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { DocumentNode } from 'graphql';\nimport { print } from 'graphql';\n\ntype FuelGraphQLSubscriberOptions = {\n url: string;\n query: DocumentNode;\n variables?: Record<string, unknown>;\n fetchFn: typeof fetch;\n};\n\nexport class FuelGraphqlSubscriber implements AsyncIterator<unknown> {\n private stream!: ReadableStreamDefaultReader<Uint8Array>;\n private static textDecoder = new TextDecoder();\n\n public constructor(private options: FuelGraphQLSubscriberOptions) {}\n\n private async setStream() {\n const { url, query, variables, fetchFn } = this.options;\n\n const response = await fetchFn(`${url}-sub`, {\n method: 'POST',\n body: JSON.stringify({\n query: print(query),\n variables,\n }),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.stream = response.body!.getReader();\n }\n\n private events: Array<{ data: unknown; errors?: { message: string }[] }> = [];\n private parsingLeftover = '';\n\n async next(): Promise<IteratorResult<unknown, unknown>> {\n if (!this.stream) {\n await this.setStream();\n }\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n if (this.events.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const { data, errors } = this.events.shift()!;\n if (Array.isArray(errors)) {\n throw new FuelError(\n FuelError.CODES.INVALID_REQUEST,\n errors.map((err) => err.message).join('\\n\\n')\n );\n }\n return { value: data, done: false };\n }\n const { value, done } = await this.stream.read();\n if (done) {\n return { value, done };\n }\n\n /**\n * We don't care about keep-alive messages.\n * The only responses that I came across from the node are either 200 responses with \"data:.*\" or keep-alive messages.\n * You can find the keep-alive message in the fuel-core codebase (latest permalink as of writing):\n * https://github.com/FuelLabs/fuel-core/blob/e1e631902f762081d2124d9c457ddfe13ac366dc/crates/fuel-core/src/graphql_api/service.rs#L247\n * To get the actual latest info you need to check out the master branch (might change):\n * https://github.com/FuelLabs/fuel-core/blob/master/crates/fuel-core/src/graphql_api/service.rs#L247\n * */\n const decoded = FuelGraphqlSubscriber.textDecoder\n .decode(value)\n .replace(':keep-alive-text\\n\\n', '');\n\n if (decoded === '') {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n const text = `${this.parsingLeftover}${decoded}`;\n const regex = /data:.*\\n\\n/g;\n\n const matches = [...text.matchAll(regex)].flatMap((match) => match);\n\n matches.forEach((match) => {\n try {\n this.events.push(JSON.parse(match.replace(/^data:/, '')));\n } catch (e) {\n throw new FuelError(\n ErrorCode.STREAM_PARSING_ERROR,\n `Error while parsing stream data response: ${text}`\n );\n }\n });\n\n this.parsingLeftover = text.replace(matches.join(), '');\n }\n }\n\n /**\n * Gets called when `break` is called in a `for-await-of` loop.\n */\n async return(): Promise<IteratorResult<unknown, undefined>> {\n await this.stream.cancel();\n this.stream.releaseLock();\n return { done: true, value: undefined };\n }\n\n [Symbol.asyncIterator](): AsyncIterator<unknown, unknown, undefined> {\n return this;\n }\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { hexlify } from '@fuel-ts/utils';\n\ntype Cache = {\n [key: string]: {\n expires: number;\n value: BytesLike;\n };\n};\nconst cache: Cache = {}; // it's a cache hash ~~> cash?\n\nconst DEFAULT_TTL_IN_MS = 30 * 1000; // 30seconds\n\nexport class MemoryCache {\n ttl: number;\n constructor(ttlInMs: number = DEFAULT_TTL_IN_MS) {\n this.ttl = ttlInMs;\n\n if (typeof ttlInMs !== 'number' || this.ttl <= 0) {\n throw new FuelError(\n ErrorCode.INVALID_TTL,\n `Invalid TTL: ${this.ttl}. Use a value greater than zero.`\n );\n }\n }\n\n get(value: BytesLike, isAutoExpiring = true): BytesLike | undefined {\n const key = hexlify(value);\n if (cache[key]) {\n if (!isAutoExpiring || cache[key].expires > Date.now()) {\n return cache[key].value;\n }\n\n this.del(value);\n }\n\n return undefined;\n }\n\n set(value: BytesLike): number {\n const expiresAt = Date.now() + this.ttl;\n const key = hexlify(value);\n cache[key] = {\n expires: expiresAt,\n value,\n };\n\n return expiresAt;\n }\n\n getAllData(): BytesLike[] {\n return Object.keys(cache).reduce((list, key) => {\n const data = this.get(key, false);\n if (data) {\n list.push(data);\n }\n\n return list;\n }, [] as BytesLike[]);\n }\n\n getActiveData(): BytesLike[] {\n return Object.keys(cache).reduce((list, key) => {\n const data = this.get(key);\n if (data) {\n list.push(data);\n }\n\n return list;\n }, [] as BytesLike[]);\n }\n\n del(value: BytesLike) {\n const key = hexlify(value);\n delete cache[key];\n }\n}\n","import { BYTES_32, UTXO_ID_LEN } from '@fuel-ts/abi-coder';\nimport { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish } from '@fuel-ts/math';\nimport { bn, toNumber } from '@fuel-ts/math';\nimport type { Input } from '@fuel-ts/transactions';\nimport { InputType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nexport type CoinTransactionRequestInput = {\n type: InputType.Coin;\n\n /** UTXO ID */\n id: BytesLike;\n\n /** Owning address or script hash */\n owner: BytesLike;\n\n /** Amount of coins */\n amount: BigNumberish;\n\n /** Asset ID of the coins */\n assetId: BytesLike;\n\n /** Points to the TX whose output is being spent. (TxPointer) */\n txPointer: BytesLike;\n\n /** Index of witness that authorizes spending the coin */\n witnessIndex: number;\n\n /** Gas used by predicate */\n predicateGasUsed?: BigNumberish;\n\n /** Predicate bytecode */\n predicate?: BytesLike;\n\n /** Predicate input data (parameters) */\n predicateData?: BytesLike;\n\n padPredicateData?: (policiesLenght: number) => BytesLike;\n};\n\nexport type MessageTransactionRequestInput = {\n type: InputType.Message;\n\n /** Address of sender */\n sender: BytesLike;\n\n /** Address of recipient */\n recipient: BytesLike;\n\n /** Amount of coins */\n amount: BigNumberish;\n\n /** Index of witness that authorizes the message */\n witnessIndex: number;\n\n /** Unique nonce of message */\n nonce: BytesLike;\n\n /** Gas used by predicate */\n predicateGasUsed?: BigNumberish;\n\n /** Predicate bytecode */\n predicate?: BytesLike;\n\n /** Predicate input data (parameters) */\n predicateData?: BytesLike;\n\n padPredicateData?: (policiesLenght: number) => BytesLike;\n\n /** data of message */\n data?: BytesLike;\n};\n\nexport type ContractTransactionRequestInput = {\n type: InputType.Contract;\n\n /** Points to the TX whose output is being spent. (TxPointer) */\n txPointer: BytesLike;\n\n /** Contract ID */\n contractId: BytesLike;\n};\nexport type TransactionRequestInput =\n | CoinTransactionRequestInput\n | ContractTransactionRequestInput\n | MessageTransactionRequestInput;\n\n/** @hidden */\nexport const inputify = (value: TransactionRequestInput): Input => {\n const { type } = value;\n\n switch (value.type) {\n case InputType.Coin: {\n const predicate = arrayify(value.predicate ?? '0x');\n const predicateData = arrayify(value.predicateData ?? '0x');\n return {\n type: InputType.Coin,\n txID: hexlify(arrayify(value.id).slice(0, BYTES_32)),\n outputIndex: toNumber(arrayify(value.id).slice(BYTES_32, UTXO_ID_LEN)),\n owner: hexlify(value.owner),\n amount: bn(value.amount),\n assetId: hexlify(value.assetId),\n txPointer: {\n blockHeight: toNumber(arrayify(value.txPointer).slice(0, 8)),\n txIndex: toNumber(arrayify(value.txPointer).slice(8, 16)),\n },\n witnessIndex: value.witnessIndex,\n predicateGasUsed: bn(value.predicateGasUsed),\n predicateLength: bn(predicate.length),\n predicateDataLength: bn(predicateData.length),\n predicate: hexlify(predicate),\n predicateData: hexlify(predicateData),\n };\n }\n case InputType.Contract: {\n return {\n type: InputType.Contract,\n txID: ZeroBytes32,\n outputIndex: 0,\n balanceRoot: ZeroBytes32,\n stateRoot: ZeroBytes32,\n txPointer: {\n blockHeight: toNumber(arrayify(value.txPointer).slice(0, 8)),\n txIndex: toNumber(arrayify(value.txPointer).slice(8, 16)),\n },\n contractID: hexlify(value.contractId),\n };\n }\n case InputType.Message: {\n const predicate = arrayify(value.predicate ?? '0x');\n const predicateData = arrayify(value.predicateData ?? '0x');\n const data = arrayify(value.data ?? '0x');\n return {\n type: InputType.Message,\n sender: hexlify(value.sender),\n recipient: hexlify(value.recipient),\n amount: bn(value.amount),\n nonce: hexlify(value.nonce),\n witnessIndex: value.witnessIndex,\n predicateGasUsed: bn(value.predicateGasUsed),\n predicateLength: bn(predicate.length),\n predicateDataLength: bn(predicateData.length),\n predicate: hexlify(predicate),\n predicateData: hexlify(predicateData),\n data: hexlify(data),\n dataLength: data.length,\n };\n }\n default: {\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_INPUT,\n `Invalid transaction input type: ${type}.`\n );\n }\n }\n};\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport type { BigNumberish } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { Output } from '@fuel-ts/transactions';\nimport { OutputType } from '@fuel-ts/transactions';\nimport { hexlify } from '@fuel-ts/utils';\n\nexport type CoinTransactionRequestOutput = {\n type: OutputType.Coin;\n /** Receiving address or script hash */\n to: BytesLike;\n /** Amount of coins to send */\n amount: BigNumberish;\n /** Asset ID of coins */\n assetId: BytesLike;\n};\nexport type ContractTransactionRequestOutput = {\n type: OutputType.Contract;\n /** Index of input contract */\n inputIndex: number;\n};\nexport type ChangeTransactionRequestOutput = {\n type: OutputType.Change;\n /** Receiving address or script hash */\n to: BytesLike;\n /** Asset ID of coins */\n assetId: BytesLike;\n};\nexport type VariableTransactionRequestOutput = {\n type: OutputType.Variable;\n};\nexport type ContractCreatedTransactionRequestOutput = {\n type: OutputType.ContractCreated;\n /** Contract ID */\n contractId: BytesLike;\n /** State Root */\n stateRoot: BytesLike;\n};\nexport type TransactionRequestOutput =\n | CoinTransactionRequestOutput\n | ContractTransactionRequestOutput\n | ChangeTransactionRequestOutput\n | VariableTransactionRequestOutput\n | ContractCreatedTransactionRequestOutput;\n\n/** @hidden */\nexport const outputify = (value: TransactionRequestOutput): Output => {\n const { type } = value;\n\n switch (type) {\n case OutputType.Coin: {\n return {\n type: OutputType.Coin,\n to: hexlify(value.to),\n amount: bn(value.amount),\n assetId: hexlify(value.assetId),\n };\n }\n case OutputType.Contract: {\n return {\n type: OutputType.Contract,\n inputIndex: value.inputIndex,\n balanceRoot: ZeroBytes32,\n stateRoot: ZeroBytes32,\n };\n }\n case OutputType.Change: {\n return {\n type: OutputType.Change,\n to: hexlify(value.to),\n amount: bn(0),\n assetId: hexlify(value.assetId),\n };\n }\n case OutputType.Variable: {\n return {\n type: OutputType.Variable,\n to: ZeroBytes32,\n amount: bn(0),\n assetId: ZeroBytes32,\n };\n }\n case OutputType.ContractCreated: {\n return {\n type: OutputType.ContractCreated,\n contractId: hexlify(value.contractId),\n stateRoot: hexlify(value.stateRoot),\n };\n }\n default: {\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_INPUT,\n `Invalid transaction output type: ${type}.`\n );\n }\n }\n};\n","import { UTXO_ID_LEN } from '@fuel-ts/abi-coder';\nimport { Address, addressify } from '@fuel-ts/address';\nimport { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { randomBytes } from '@fuel-ts/crypto';\nimport type { AddressLike, AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\nimport type { BN, BigNumberish } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { TransactionScript, Policy, TransactionCreate } from '@fuel-ts/transactions';\nimport {\n PolicyType,\n TransactionCoder,\n InputType,\n OutputType,\n TransactionType,\n} from '@fuel-ts/transactions';\nimport { concat, hexlify } from '@fuel-ts/utils';\n\nimport type { Account } from '../../account';\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport type { Coin } from '../coin';\nimport type { CoinQuantity, CoinQuantityLike } from '../coin-quantity';\nimport { coinQuantityfy } from '../coin-quantity';\nimport type { MessageCoin } from '../message';\nimport type { ChainInfo } from '../provider';\nimport type { Resource } from '../resource';\nimport { isCoin } from '../resource';\nimport { normalizeJSON } from '../utils';\nimport { getMaxGas, getMinGas } from '../utils/gas';\n\nimport { NoWitnessAtIndexError } from './errors';\nimport type {\n TransactionRequestInput,\n CoinTransactionRequestInput,\n MessageTransactionRequestInput,\n} from './input';\nimport { inputify } from './input';\nimport type {\n TransactionRequestOutput,\n ChangeTransactionRequestOutput,\n CoinTransactionRequestOutput,\n} from './output';\nimport { outputify } from './output';\nimport type { TransactionRequestLike } from './types';\nimport type { TransactionRequestWitness } from './witness';\nimport { witnessify } from './witness';\n\nexport {\n /**\n * @hidden\n */\n TransactionType,\n};\n\n/**\n * @hidden\n *\n * Interface defining a like structure for a base transaction request.\n */\nexport interface BaseTransactionRequestLike {\n /** Gas price for transaction */\n tip?: BigNumberish;\n /** Block until which tx cannot be included */\n maturity?: number;\n /** The maximum fee payable by this transaction using BASE_ASSET. */\n maxFee?: BigNumberish;\n /** The maximum amount of witness data allowed for the transaction */\n witnessLimit?: BigNumberish;\n /** List of inputs */\n inputs?: TransactionRequestInput[];\n /** List of outputs */\n outputs?: TransactionRequestOutput[];\n /** List of witnesses */\n witnesses?: TransactionRequestWitness[];\n}\n\ntype ToBaseTransactionResponse = Pick<\n TransactionScript,\n | 'inputs'\n | 'inputsCount'\n | 'outputs'\n | 'outputsCount'\n | 'witnesses'\n | 'witnessesCount'\n | 'policies'\n | 'policyTypes'\n>;\n\n/**\n * Abstract class to define the functionalities of a transaction request transaction request.\n */\nexport abstract class BaseTransactionRequest implements BaseTransactionRequestLike {\n /** Type of the transaction */\n abstract type: TransactionType;\n /** Gas price for transaction */\n tip: BN;\n /** Block until which tx cannot be included */\n maturity: number;\n /** The maximum fee payable by this transaction using BASE_ASSET. */\n maxFee?: BN;\n /** The maximum amount of witness data allowed for the transaction */\n witnessLimit?: BN | undefined;\n /** List of inputs */\n inputs: TransactionRequestInput[] = [];\n /** List of outputs */\n outputs: TransactionRequestOutput[] = [];\n /** List of witnesses */\n witnesses: TransactionRequestWitness[] = [];\n\n /**\n * Constructor for initializing a base transaction request.\n *\n * @param baseTransactionRequest - Optional object containing properties to initialize the transaction request.\n */\n constructor({\n tip,\n maturity,\n maxFee,\n witnessLimit,\n inputs,\n outputs,\n witnesses,\n }: BaseTransactionRequestLike = {}) {\n this.tip = bn(tip);\n this.maturity = maturity ?? 0;\n this.witnessLimit = witnessLimit ? bn(witnessLimit) : undefined;\n this.maxFee = maxFee ? bn(maxFee) : undefined;\n this.inputs = inputs ?? [];\n this.outputs = outputs ?? [];\n this.witnesses = witnesses ?? [];\n }\n\n static getPolicyMeta(req: BaseTransactionRequest) {\n let policyTypes = 0;\n const policies: Policy[] = [];\n\n if (req.tip) {\n policyTypes += PolicyType.Tip;\n policies.push({ data: req.tip, type: PolicyType.Tip });\n }\n if (req.witnessLimit) {\n policyTypes += PolicyType.WitnessLimit;\n policies.push({ data: req.witnessLimit, type: PolicyType.WitnessLimit });\n }\n if (req.maturity > 0) {\n policyTypes += PolicyType.Maturity;\n policies.push({ data: req.maturity, type: PolicyType.Maturity });\n }\n if (req.maxFee) {\n policyTypes += PolicyType.MaxFee;\n policies.push({ data: req.maxFee, type: PolicyType.MaxFee });\n }\n\n return {\n policyTypes,\n policies,\n };\n }\n\n /**\n * Method to obtain the base transaction details.\n *\n * @returns The base transaction details.\n */\n\n protected getBaseTransaction(): ToBaseTransactionResponse {\n const inputs = this.inputs?.map(inputify) ?? [];\n const outputs = this.outputs?.map(outputify) ?? [];\n const witnesses = this.witnesses?.map(witnessify) ?? [];\n\n const { policyTypes, policies } = BaseTransactionRequest.getPolicyMeta(this);\n\n return {\n policyTypes,\n inputs,\n outputs,\n policies,\n witnesses,\n inputsCount: inputs.length,\n outputsCount: outputs.length,\n witnessesCount: witnesses.length,\n };\n }\n\n abstract toTransaction(): TransactionCreate | TransactionScript;\n\n /**\n * Converts the transaction request to a byte array.\n *\n * @returns The transaction bytes.\n */\n toTransactionBytes(): Uint8Array {\n return new TransactionCoder().encode(this.toTransaction());\n }\n\n /**\n * @hidden\n *\n * Pushes an input to the list without any side effects and returns the index\n */\n protected pushInput(input: TransactionRequestInput): number {\n this.inputs.push(input);\n return this.inputs.length - 1;\n }\n\n /**\n * @hidden\n *\n * Pushes an output to the list without any side effects and returns the index\n */\n protected pushOutput(output: TransactionRequestOutput): number {\n this.outputs.push(output);\n return this.outputs.length - 1;\n }\n\n /**\n * @hidden\n *\n * Pushes a witness to the list and returns the index\n *\n * @param signature - The signature to add to the witness.\n * @returns The index of the created witness.\n */\n addWitness(signature: BytesLike) {\n this.witnesses.push(signature);\n return this.witnesses.length - 1;\n }\n\n /**\n * @hidden\n *\n * Creates an empty witness without any side effects and returns the index\n *\n * @returns The index of the created witness.\n */\n addEmptyWitness(): number {\n // Push a dummy witness with same byte size as a real witness signature\n this.addWitness(concat([ZeroBytes32, ZeroBytes32]));\n return this.witnesses.length - 1;\n }\n\n /**\n * Updates the witness for a given owner and signature.\n *\n * @param address - The address to get the coin input witness index for.\n * @param signature - The signature to update the witness with.\n */\n updateWitnessByOwner(address: string | AbstractAddress, signature: BytesLike) {\n const ownerAddress = Address.fromAddressOrString(address);\n const witnessIndex = this.getCoinInputWitnessIndexByOwner(ownerAddress);\n if (typeof witnessIndex === 'number') {\n this.updateWitness(witnessIndex, signature);\n }\n }\n\n /**\n * Updates an existing witness without any side effects.\n *\n * @param index - The index of the witness to update.\n * @param witness - The new witness.\n * @throws If the witness does not exist.\n */\n updateWitness(index: number, witness: TransactionRequestWitness) {\n if (!this.witnesses[index]) {\n throw new NoWitnessAtIndexError(index);\n }\n this.witnesses[index] = witness;\n }\n\n /**\n * Helper function to add an external signature to the transaction.\n *\n * @param account - The account/s to sign to the transaction.\n * @returns The transaction with the signature witness added.\n */\n async addAccountWitnesses(account: Account | Account[]) {\n const accounts = Array.isArray(account) ? account : [account];\n await Promise.all(\n accounts.map(async (acc) => {\n this.addWitness(await acc.signTransaction(<TransactionRequestLike>this));\n })\n );\n\n return this;\n }\n\n /**\n * Gets the coin inputs for a transaction.\n *\n * @returns The coin inputs.\n */\n getCoinInputs(): CoinTransactionRequestInput[] {\n return this.inputs.filter(\n (input): input is CoinTransactionRequestInput => input.type === InputType.Coin\n );\n }\n\n /**\n * Gets the coin outputs for a transaction.\n *\n * @returns The coin outputs.\n */\n getCoinOutputs(): CoinTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is CoinTransactionRequestOutput => output.type === OutputType.Coin\n );\n }\n\n /**\n * Gets the change outputs for a transaction.\n *\n * @returns The change outputs.\n */\n getChangeOutputs(): ChangeTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is ChangeTransactionRequestOutput => output.type === OutputType.Change\n );\n }\n\n /**\n * @hidden\n *\n * Returns the witnessIndex of the found CoinInput.\n */\n getCoinInputWitnessIndexByOwner(owner: AddressLike): number | undefined {\n const ownerAddress = addressify(owner);\n\n const found = this.inputs.find((input) => {\n switch (input.type) {\n case InputType.Coin:\n return hexlify((<CoinTransactionRequestInput>input).owner) === ownerAddress.toB256();\n case InputType.Message:\n return (\n hexlify((<MessageTransactionRequestInput>input).recipient) === ownerAddress.toB256()\n );\n default:\n return false;\n }\n });\n\n return (<CoinTransactionRequestInput>found)?.witnessIndex;\n }\n\n /**\n * Adds a single coin input to the transaction and a change output for the related\n * assetId, if one it was not added yet.\n *\n * @param coin - Coin resource.\n */\n addCoinInput(coin: Coin) {\n const { assetId, owner, amount } = coin;\n\n let witnessIndex;\n\n if (coin.predicate) {\n witnessIndex = 0;\n } else {\n witnessIndex = this.getCoinInputWitnessIndexByOwner(owner);\n\n // Insert a dummy witness if no witness exists\n if (typeof witnessIndex !== 'number') {\n witnessIndex = this.addEmptyWitness();\n }\n }\n\n const input: CoinTransactionRequestInput = {\n ...coin,\n type: InputType.Coin,\n owner: owner.toB256(),\n amount,\n assetId,\n txPointer: '0x00000000000000000000000000000000',\n witnessIndex,\n };\n\n // Insert the Input\n this.pushInput(input);\n\n // Insert a ChangeOutput if it does not exist\n this.addChangeOutput(owner, assetId);\n }\n\n /**\n * Adds a single message input to the transaction and a change output for the\n * asset against the message\n *\n * @param message - Message resource.\n */\n addMessageInput(message: MessageCoin) {\n const { recipient, sender, amount, assetId } = message;\n\n let witnessIndex;\n\n if (message.predicate) {\n witnessIndex = 0;\n } else {\n witnessIndex = this.getCoinInputWitnessIndexByOwner(recipient);\n\n // Insert a dummy witness if no witness exists\n if (typeof witnessIndex !== 'number') {\n witnessIndex = this.addEmptyWitness();\n }\n }\n\n const input: MessageTransactionRequestInput = {\n ...message,\n type: InputType.Message,\n sender: sender.toB256(),\n recipient: recipient.toB256(),\n amount,\n witnessIndex,\n };\n\n // Insert the Input\n this.pushInput(input);\n\n // Insert a ChangeOutput if it does not exist\n this.addChangeOutput(recipient, assetId);\n }\n\n /**\n * Adds a single resource to the transaction by adding a coin/message input and a\n * change output for the related assetId, if one it was not added yet.\n *\n * @param resource - The resource to add.\n * @returns This transaction.\n */\n addResource(resource: Resource) {\n if (isCoin(resource)) {\n this.addCoinInput(resource);\n } else {\n this.addMessageInput(resource);\n }\n\n return this;\n }\n\n /**\n * Adds multiple resources to the transaction by adding coin/message inputs and change\n * outputs from the related assetIds.\n *\n * @param resources - The resources to add.\n * @returns This transaction.\n */\n addResources(resources: ReadonlyArray<Resource>) {\n resources.forEach((resource) => this.addResource(resource));\n\n return this;\n }\n\n /**\n * Adds a coin output to the transaction.\n *\n * @param to - Address of the owner.\n * @param amount - Amount of coin.\n * @param assetId - Asset ID of coin.\n */\n addCoinOutput(to: AddressLike, amount: BigNumberish, assetId: BytesLike) {\n this.pushOutput({\n type: OutputType.Coin,\n to: addressify(to).toB256(),\n amount,\n assetId,\n });\n\n return this;\n }\n\n /**\n * Adds multiple coin outputs to the transaction.\n *\n * @param to - Address of the destination.\n * @param quantities - Quantities of coins.\n */\n addCoinOutputs(to: AddressLike, quantities: CoinQuantityLike[]) {\n quantities.map(coinQuantityfy).forEach((quantity) => {\n this.pushOutput({\n type: OutputType.Coin,\n to: addressify(to).toB256(),\n amount: quantity.amount,\n assetId: quantity.assetId,\n });\n });\n\n return this;\n }\n\n /**\n * Adds a change output to the transaction.\n *\n * @param to - Address of the owner.\n * @param assetId - Asset ID of coin.\n */\n addChangeOutput(to: AddressLike, assetId: BytesLike) {\n // Find the ChangeOutput for the AssetId of the Resource\n const changeOutput = this.getChangeOutputs().find(\n (output) => hexlify(output.assetId) === assetId\n );\n\n // Insert a ChangeOutput if it does not exist\n if (!changeOutput) {\n this.pushOutput({\n type: OutputType.Change,\n to: addressify(to).toB256(),\n assetId,\n });\n }\n }\n\n /**\n * @hidden\n */\n byteSize() {\n return this.toTransactionBytes().length;\n }\n\n /**\n * @hidden\n */\n metadataGas(_gasCosts: GqlGasCosts): BN {\n throw new Error('Not implemented');\n }\n\n /**\n * @hidden\n */\n calculateMinGas(chainInfo: ChainInfo): BN {\n const { gasCosts, consensusParameters } = chainInfo;\n const { gasPerByte } = consensusParameters;\n return getMinGas({\n gasPerByte,\n gasCosts,\n inputs: this.inputs,\n txBytesSize: this.byteSize(),\n metadataGas: this.metadataGas(gasCosts),\n });\n }\n\n calculateMaxGas(chainInfo: ChainInfo, minGas: BN): BN {\n const { consensusParameters } = chainInfo;\n const { gasPerByte, maxGasPerTx } = consensusParameters;\n\n const witnessesLength = this.toTransaction().witnesses.reduce(\n (acc, wit) => acc + wit.dataLength,\n 0\n );\n return getMaxGas({\n gasPerByte,\n minGas,\n witnessesLength,\n witnessLimit: this.witnessLimit,\n maxGasPerTx,\n });\n }\n\n /**\n * Funds the transaction with fake UTXOs for each assetId and amount in the\n * quantities array.\n *\n * @param quantities - CoinQuantity Array.\n * @param baseAssetId - The base asset to fund the transaction.\n */\n fundWithFakeUtxos(\n quantities: CoinQuantity[],\n baseAssetId: string,\n resourcesOwner?: AbstractAddress\n ) {\n const findAssetInput = (assetId: string) =>\n this.inputs.find((input) => {\n if ('assetId' in input) {\n return input.assetId === assetId;\n }\n return false;\n });\n\n const updateAssetInput = (assetId: string, quantity: BN) => {\n const assetInput = findAssetInput(assetId);\n\n let usedQuantity = quantity;\n\n if (assetId === baseAssetId) {\n usedQuantity = bn('1000000000000000000');\n }\n\n if (assetInput && 'assetId' in assetInput) {\n assetInput.id = hexlify(randomBytes(UTXO_ID_LEN));\n assetInput.amount = usedQuantity;\n } else {\n this.addResources([\n {\n id: hexlify(randomBytes(UTXO_ID_LEN)),\n amount: usedQuantity,\n assetId,\n owner: resourcesOwner || Address.fromRandom(),\n blockCreated: bn(1),\n txCreatedIdx: bn(1),\n },\n ]);\n }\n };\n\n updateAssetInput(baseAssetId, bn(100_000_000_000));\n quantities.forEach((q) => updateAssetInput(q.assetId, q.amount));\n }\n\n /**\n * Retrieves an array of CoinQuantity for each coin output present in the transaction.\n * a transaction.\n *\n * @returns CoinQuantity array.\n */\n getCoinOutputsQuantities(): CoinQuantity[] {\n const coinsQuantities = this.getCoinOutputs().map(({ amount, assetId }) => ({\n amount: bn(amount),\n assetId: assetId.toString(),\n }));\n\n return coinsQuantities;\n }\n\n /**\n * Gets the Transaction Request by hashing the transaction.\n *\n * @param chainId - The chain ID.\n *\n * @returns - A hash of the transaction, which is the transaction ID.\n */\n abstract getTransactionId(chainId: number): string;\n\n /**\n * Return the minimum amount in native coins required to create\n * a transaction.\n *\n * @returns The transaction as a JSON object.\n */\n toJSON() {\n return normalizeJSON(this);\n }\n\n updatePredicateGasUsed(inputs: TransactionRequestInput[]) {\n this.inputs.forEach((i) => {\n let correspondingInput: TransactionRequestInput | undefined;\n switch (i.type) {\n case InputType.Coin:\n correspondingInput = inputs.find((x) => x.type === InputType.Coin && x.owner === i.owner);\n break;\n case InputType.Message:\n correspondingInput = inputs.find(\n (x) => x.type === InputType.Message && x.sender === i.sender\n );\n break;\n default:\n return;\n }\n if (\n correspondingInput &&\n 'predicateGasUsed' in correspondingInput &&\n bn(correspondingInput.predicateGasUsed).gt(0)\n ) {\n // eslint-disable-next-line no-param-reassign\n i.predicate = correspondingInput.predicate;\n // eslint-disable-next-line no-param-reassign\n i.predicateData = correspondingInput.predicateData;\n // eslint-disable-next-line no-param-reassign\n i.predicateGasUsed = correspondingInput.predicateGasUsed;\n }\n });\n }\n\n shiftPredicateData() {\n this.inputs.forEach((input) => {\n // TODO: improve logic\n if (\n 'predicateData' in input &&\n 'padPredicateData' in input &&\n typeof input.padPredicateData === 'function'\n ) {\n // eslint-disable-next-line no-param-reassign\n input.predicateData = input.padPredicateData(\n BaseTransactionRequest.getPolicyMeta(this).policies.length\n );\n }\n });\n }\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\n\nimport type { Coin } from './coin';\nimport type { MessageCoin } from './message';\n\nexport type RawCoin = {\n utxoId: string;\n owner: string;\n amount: string;\n assetId: string;\n maturity: string;\n blockCreated: string;\n txCreatedIdx: string;\n};\n\nexport type RawMessage = {\n amount: string;\n sender: string;\n assetId: string;\n recipient: string;\n data: string;\n nonce: string;\n daHeight: string;\n};\n\nexport type RawResource = RawCoin | RawMessage;\nexport type Resource = Coin | MessageCoin;\n\n/** @hidden */\nexport type ExcludeResourcesOption = {\n utxos?: BytesLike[];\n messages?: BytesLike[];\n};\n\n/** @hidden */\nexport const isRawCoin = (resource: RawResource): resource is RawCoin => 'utxoId' in resource;\n/** @hidden */\nexport const isRawMessage = (resource: RawResource): resource is RawMessage =>\n 'recipient' in resource;\n/** @hidden */\nexport const isCoin = (resource: Resource): resource is Coin => 'id' in resource;\n/** @hidden */\nexport const isMessage = (resource: Resource): resource is MessageCoin => 'recipient' in resource;\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport type {\n ReceiptBurn,\n ReceiptCall,\n ReceiptLog,\n ReceiptLogData,\n ReceiptMessageOut,\n ReceiptMint,\n ReceiptPanic,\n ReceiptReturn,\n ReceiptReturnData,\n ReceiptRevert,\n ReceiptScriptResult,\n ReceiptTransfer,\n ReceiptTransferOut,\n} from '@fuel-ts/transactions';\nimport {\n ReceiptBurnCoder,\n ReceiptMessageOutCoder,\n ReceiptMintCoder,\n ReceiptType,\n} from '@fuel-ts/transactions';\nimport { FAILED_TRANSFER_TO_ADDRESS_SIGNAL } from '@fuel-ts/transactions/configs';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlReceiptFragmentFragment } from '../__generated__/operations';\nimport { GqlReceiptType } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\n\n/** @hidden */\nconst doesReceiptHaveMissingOutputVariables = (\n receipt: TransactionResultReceipt\n): receipt is ReceiptRevert =>\n receipt.type === ReceiptType.Revert &&\n receipt.val.toString('hex') === FAILED_TRANSFER_TO_ADDRESS_SIGNAL;\n\n/** @hidden */\nconst doesReceiptHaveMissingContractId = (\n receipt: TransactionResultReceipt\n): receipt is ReceiptPanic =>\n receipt.type === ReceiptType.Panic &&\n receipt.contractId !== '0x0000000000000000000000000000000000000000000000000000000000000000';\n\n/** @hidden */\nexport const getReceiptsWithMissingData = (receipts: Array<TransactionResultReceipt>) =>\n receipts.reduce<{\n missingOutputVariables: Array<ReceiptRevert>;\n missingOutputContractIds: Array<ReceiptPanic>;\n }>(\n (memo, receipt) => {\n if (doesReceiptHaveMissingOutputVariables(receipt)) {\n memo.missingOutputVariables.push(receipt);\n }\n if (doesReceiptHaveMissingContractId(receipt)) {\n memo.missingOutputContractIds.push(receipt);\n }\n return memo;\n },\n {\n missingOutputVariables: [],\n missingOutputContractIds: [],\n }\n );\n\nconst hexOrZero = (hex?: string | null) => hex || ZeroBytes32;\n\nexport function assembleReceiptByType(receipt: GqlReceiptFragmentFragment) {\n const { receiptType } = receipt;\n\n switch (receiptType) {\n case GqlReceiptType.Call: {\n const callReceipt: ReceiptCall = {\n type: ReceiptType.Call,\n from: hexOrZero(receipt.id || receipt.contractId),\n to: hexOrZero(receipt?.to),\n amount: bn(receipt.amount),\n assetId: hexOrZero(receipt.assetId),\n gas: bn(receipt.gas),\n param1: bn(receipt.param1),\n param2: bn(receipt.param2),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return callReceipt;\n }\n\n case GqlReceiptType.Return: {\n const returnReceipt: ReceiptReturn = {\n type: ReceiptType.Return,\n id: hexOrZero(receipt.id || receipt.contractId),\n val: bn(receipt.val),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return returnReceipt;\n }\n\n case GqlReceiptType.ReturnData: {\n const returnDataReceipt: ReceiptReturnData = {\n type: ReceiptType.ReturnData,\n id: hexOrZero(receipt.id || receipt.contractId),\n ptr: bn(receipt.ptr),\n len: bn(receipt.len),\n digest: hexOrZero(receipt.digest),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return returnDataReceipt;\n }\n\n case GqlReceiptType.Panic: {\n const panicReceipt: ReceiptPanic = {\n type: ReceiptType.Panic,\n id: hexOrZero(receipt.id),\n reason: bn(receipt.reason),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n contractId: hexOrZero(receipt.contractId),\n };\n\n return panicReceipt;\n }\n\n case GqlReceiptType.Revert: {\n const revertReceipt: ReceiptRevert = {\n type: ReceiptType.Revert,\n id: hexOrZero(receipt.id || receipt.contractId),\n val: bn(receipt.ra),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n return revertReceipt;\n }\n\n case GqlReceiptType.Log: {\n const logReceipt: ReceiptLog = {\n type: ReceiptType.Log,\n id: hexOrZero(receipt.id || receipt.contractId),\n val0: bn(receipt.ra),\n val1: bn(receipt.rb),\n val2: bn(receipt.rc),\n val3: bn(receipt.rd),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return logReceipt;\n }\n\n case GqlReceiptType.LogData: {\n const logDataReceipt: ReceiptLogData = {\n type: ReceiptType.LogData,\n id: hexOrZero(receipt.id || receipt.contractId),\n val0: bn(receipt.ra),\n val1: bn(receipt.rb),\n ptr: bn(receipt.ptr),\n len: bn(receipt.len),\n digest: hexOrZero(receipt.digest),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n return logDataReceipt;\n }\n\n case GqlReceiptType.Transfer: {\n const transferReceipt: ReceiptTransfer = {\n type: ReceiptType.Transfer,\n from: hexOrZero(receipt.id || receipt.contractId),\n to: hexOrZero(receipt.toAddress || receipt?.to),\n amount: bn(receipt.amount),\n assetId: hexOrZero(receipt.assetId),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return transferReceipt;\n }\n\n case GqlReceiptType.TransferOut: {\n const transferOutReceipt: ReceiptTransferOut = {\n type: ReceiptType.TransferOut,\n from: hexOrZero(receipt.id || receipt.contractId),\n to: hexOrZero(receipt.toAddress || receipt.to),\n amount: bn(receipt.amount),\n assetId: hexOrZero(receipt.assetId),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n return transferOutReceipt;\n }\n\n case GqlReceiptType.ScriptResult: {\n const scriptResultReceipt: ReceiptScriptResult = {\n type: ReceiptType.ScriptResult,\n result: bn(receipt.result),\n gasUsed: bn(receipt.gasUsed),\n };\n\n return scriptResultReceipt;\n }\n\n case GqlReceiptType.MessageOut: {\n const sender = hexOrZero(receipt.sender);\n const recipient = hexOrZero(receipt.recipient);\n const nonce = hexOrZero(receipt.nonce);\n const amount = bn(receipt.amount);\n const data = receipt.data ? arrayify(receipt.data) : Uint8Array.from([]);\n const digest = hexOrZero(receipt.digest);\n\n const messageId = ReceiptMessageOutCoder.getMessageId({\n sender,\n recipient,\n nonce,\n amount,\n data,\n });\n\n const receiptMessageOut: ReceiptMessageOut = {\n type: ReceiptType.MessageOut,\n sender,\n recipient,\n amount,\n nonce,\n data,\n digest,\n messageId,\n };\n\n return receiptMessageOut;\n }\n\n case GqlReceiptType.Mint: {\n const contractId = hexOrZero(receipt.id || receipt.contractId);\n const subId = hexOrZero(receipt.subId);\n const assetId = ReceiptMintCoder.getAssetId(contractId, subId);\n\n const mintReceipt: ReceiptMint = {\n type: ReceiptType.Mint,\n subId,\n contractId,\n assetId,\n val: bn(receipt.val),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return mintReceipt;\n }\n\n case GqlReceiptType.Burn: {\n const contractId = hexOrZero(receipt.id || receipt.contractId);\n const subId = hexOrZero(receipt.subId);\n const assetId = ReceiptBurnCoder.getAssetId(contractId, subId);\n\n const burnReceipt: ReceiptBurn = {\n type: ReceiptType.Burn,\n subId,\n contractId,\n assetId,\n val: bn(receipt.val),\n pc: bn(receipt.pc),\n is: bn(receipt.is),\n };\n\n return burnReceipt;\n }\n\n default:\n throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);\n }\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\n\nconst DEFAULT_BLOCK_EXPLORER_URL = 'https://fuellabs.github.io/block-explorer-v2';\n\n/** @hidden */\nconst getPathFromInput = (\n key: BuildBlockExplorerUrlHelperParam,\n value: string | number | undefined\n) => {\n const pathMap = {\n address: `address`,\n txId: `transaction`,\n blockNumber: `block`,\n };\n const path = pathMap[key] || key;\n return `${path}/${value}`;\n};\n\ntype BuildBlockExplorerUrlHelperParam = 'address' | 'txId' | 'blockNumber';\n\n/**\n * @hidden\n *\n * Builds a block explorer url based on and the given path, block explorer URL and provider URL\n */\nexport const buildBlockExplorerUrl = (\n options: {\n blockExplorerUrl?: string;\n path?: string;\n providerUrl?: string;\n address?: string;\n txId?: string;\n blockNumber?: number;\n } = {}\n) => {\n const { blockExplorerUrl, path, providerUrl, address, txId, blockNumber } = options;\n const explorerUrl = blockExplorerUrl || DEFAULT_BLOCK_EXPLORER_URL;\n\n // make sure that only ONE or none of the following is defined: address, txId, blockNumber\n const customInputParams = [\n {\n key: 'address',\n value: address,\n },\n {\n key: 'txId',\n value: txId,\n },\n {\n key: 'blockNumber',\n value: blockNumber,\n },\n ];\n\n const definedValues = customInputParams\n .filter((param) => !!param.value)\n .map(({ key, value }) => ({\n key,\n value,\n }));\n\n const hasAnyDefinedValues = definedValues.length > 0;\n\n if (definedValues.length > 1) {\n throw new FuelError(\n ErrorCode.ERROR_BUILDING_BLOCK_EXPLORER_URL,\n `Only one of the following can be passed in to buildBlockExplorerUrl: ${customInputParams\n .map((param) => param.key)\n .join(', ')}.`\n );\n }\n\n if (path && definedValues.length > 0) {\n const inputKeys = customInputParams.map(({ key }) => key).join(', ');\n throw new FuelError(\n ErrorCode.ERROR_BUILDING_BLOCK_EXPLORER_URL,\n `You cannot pass in a path to 'buildBlockExplorerUrl' along with any of the following: ${inputKeys}.`\n );\n }\n\n const pathGeneratedFromInputParams = hasAnyDefinedValues\n ? getPathFromInput(\n definedValues[0].key as BuildBlockExplorerUrlHelperParam,\n definedValues[0].value\n )\n : '';\n\n // Remove leading and trailing slashes from the path and block explorer url respectively, if present\n const trimSlashes = /^\\/|\\/$/gm;\n const cleanPath = path ? path.replace(trimSlashes, '') : pathGeneratedFromInputParams;\n const cleanBlockExplorerUrl = explorerUrl.replace(trimSlashes, '');\n const cleanProviderUrl = providerUrl?.replace(trimSlashes, '');\n const encodedProviderUrl = cleanProviderUrl ? encodeURIComponent(cleanProviderUrl) : undefined;\n\n // if the block explorer url doesn't have a protocol i.e. http:// or https://, add https://\n const protocol = cleanBlockExplorerUrl.match(/^https?:\\/\\//) ? '' : 'https://';\n const providerUrlProtocol = cleanProviderUrl?.match(/^https?:\\/\\//) ? '' : 'https://';\n\n const url = `${protocol}${cleanBlockExplorerUrl}/${cleanPath}${\n encodedProviderUrl ? `?providerUrl=${providerUrlProtocol}${encodedProviderUrl}` : ''\n }`;\n\n return url;\n};\n","import { bn } from '@fuel-ts/math';\nimport type { BN, BNInput } from '@fuel-ts/math';\nimport { ReceiptType, type Input } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlDependentCost, GqlGasCosts } from '../__generated__/operations';\nimport type { TransactionRequestInput } from '../transaction-request';\nimport type {\n TransactionResultReceipt,\n TransactionResultScriptResultReceipt,\n} from '../transaction-response';\n\n/** @hidden */\nexport const getGasUsedFromReceipts = (receipts: Array<TransactionResultReceipt>): BN => {\n const scriptResult = receipts.filter(\n (receipt) => receipt.type === ReceiptType.ScriptResult\n ) as TransactionResultScriptResultReceipt[];\n\n const gasUsed = scriptResult.reduce((prev, receipt) => prev.add(receipt.gasUsed), bn(0));\n\n return gasUsed;\n};\n\nexport function resolveGasDependentCosts(byteSize: BNInput, gasDependentCost: GqlDependentCost) {\n const base = bn(gasDependentCost.base);\n let dependentValue = bn(0);\n if (gasDependentCost.__typename === 'LightOperation') {\n dependentValue = bn(byteSize).div(bn(gasDependentCost.unitsPerGas));\n }\n if (gasDependentCost.__typename === 'HeavyOperation') {\n dependentValue = bn(byteSize).mul(bn(gasDependentCost.gasPerUnit));\n }\n return base.add(dependentValue);\n}\n\nexport function gasUsedByInputs(\n inputs: Array<TransactionRequestInput | Input>,\n txBytesSize: number,\n gasCosts: GqlGasCosts\n) {\n const witnessCache: Array<number> = [];\n\n const chargeableInputs = inputs.filter((input) => {\n const isCoinOrMessage = 'owner' in input || 'sender' in input;\n if (isCoinOrMessage) {\n if ('predicate' in input && input.predicate && input.predicate !== '0x') {\n return true;\n }\n\n if (!witnessCache.includes(input.witnessIndex)) {\n // should charge only once for each witness\n witnessCache.push(input.witnessIndex);\n return true;\n }\n }\n return false;\n });\n\n const vmInitializationCost = resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization);\n\n const totalGas = chargeableInputs.reduce((total, input) => {\n if ('predicate' in input && input.predicate && input.predicate !== '0x') {\n return total.add(\n vmInitializationCost\n .add(resolveGasDependentCosts(arrayify(input.predicate).length, gasCosts.contractRoot))\n .add(bn(input.predicateGasUsed))\n );\n }\n\n return total.add(gasCosts.ecr1);\n }, bn(0));\n // Never allow gas to exceed MAX_U64\n return totalGas;\n}\n\nexport interface IGetMinGasParams {\n inputs: Array<TransactionRequestInput | Input>;\n gasCosts: GqlGasCosts;\n txBytesSize: number;\n metadataGas: BN;\n gasPerByte: BN;\n}\n\nexport function getMinGas(params: IGetMinGasParams) {\n const { gasCosts, gasPerByte, inputs, metadataGas, txBytesSize } = params;\n\n const vmInitGas = resolveGasDependentCosts(txBytesSize, gasCosts.vmInitialization);\n const bytesGas = bn(txBytesSize).mul(gasPerByte);\n const inputsGas = gasUsedByInputs(inputs, txBytesSize, gasCosts);\n\n const minGas = vmInitGas.add(bytesGas).add(inputsGas).add(metadataGas).maxU64();\n\n return minGas;\n}\n\nexport interface IGetMaxGasParams {\n witnessesLength: number;\n witnessLimit?: BN;\n gasPerByte: BN;\n minGas: BN;\n gasLimit?: BN;\n maxGasPerTx: BN;\n}\n\nexport function getMaxGas(params: IGetMaxGasParams) {\n const {\n gasPerByte,\n witnessesLength,\n witnessLimit,\n minGas,\n gasLimit = bn(0),\n maxGasPerTx,\n } = params;\n\n let remainingAllowedWitnessGas = bn(0);\n\n if (witnessLimit?.gt(0) && witnessLimit.gte(witnessesLength)) {\n remainingAllowedWitnessGas = bn(witnessLimit).sub(witnessesLength).mul(gasPerByte);\n }\n\n const maxGas = remainingAllowedWitnessGas.add(minGas).add(gasLimit);\n\n return maxGas.gte(maxGasPerTx) ? maxGasPerTx : maxGas;\n}\n\nexport function calculateMetadataGasForTxCreate({\n gasCosts,\n stateRootSize,\n txBytesSize,\n contractBytesSize,\n}: {\n gasCosts: GqlGasCosts;\n contractBytesSize: BN;\n stateRootSize: number;\n txBytesSize: number;\n}) {\n const contractRootGas = resolveGasDependentCosts(contractBytesSize, gasCosts.contractRoot);\n const stateRootGas = resolveGasDependentCosts(stateRootSize, gasCosts.stateRoot);\n const txIdGas = resolveGasDependentCosts(txBytesSize, gasCosts.s256);\n // See https://github.com/FuelLabs/fuel-specs/blob/master/src/identifiers/contract-id.md\n const contractIdInputSize = bn(4 + 32 + 32 + 32);\n const contractIdGas = resolveGasDependentCosts(contractIdInputSize, gasCosts.s256);\n const metadataGas = contractRootGas.add(stateRootGas).add(txIdGas).add(contractIdGas);\n return metadataGas.maxU64();\n}\n\nexport function calculateMetadataGasForTxScript({\n gasCosts,\n txBytesSize,\n}: {\n gasCosts: GqlGasCosts;\n txBytesSize: number;\n}) {\n return resolveGasDependentCosts(txBytesSize, gasCosts.s256);\n}\n\nexport interface CalculateGasFeeParams {\n tip: BN;\n gas: BN;\n gasPrice: BN;\n priceFactor: BN;\n}\n\nexport const calculateGasFee = (params: CalculateGasFeeParams) => {\n const { gas, gasPrice, priceFactor, tip } = params;\n return gas.mul(gasPrice).div(priceFactor).add(tip);\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-param-reassign */\nimport { hexlify } from '@fuel-ts/utils';\nimport { clone } from 'ramda';\n\n// When parsing a Transaction to JSON we need\n// to convert special types into each respective\n// JSON friendly value. This enables a tx to be\n// stringified and parsed back into a Transaction\n/** @hidden */\nfunction normalize(object: any) {\n Object.keys(object).forEach((key) => {\n switch (object[key]?.constructor.name) {\n case 'Uint8Array':\n object[key] = hexlify(object[key]);\n break;\n case 'Array':\n object[key] = normalize(object[key]);\n break;\n case 'BN':\n object[key] = object[key].toHex();\n break;\n case 'Address':\n object[key] = object[key].toB256();\n break;\n case 'Object':\n object[key] = normalize(object[key]);\n break;\n default:\n break;\n }\n });\n return object;\n}\n\n/**\n * Stringify Transaction to a JSON object\n * compatible with the Transaction class constructor.\n */\n/** @hidden */\nexport function normalizeJSON(root: any) {\n // Do a single deep clone before normalizing\n // to avoid mutating the original object\n // and doing extra clones on each iteration\n return normalize(clone(root));\n}\n","/** @hidden */\nexport function sleep(time: number) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true);\n }, time);\n });\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport type { ReceiptRevert } from '@fuel-ts/transactions';\nimport { ReceiptType } from '@fuel-ts/transactions';\nimport {\n FAILED_REQUIRE_SIGNAL,\n FAILED_ASSERT_EQ_SIGNAL,\n FAILED_ASSERT_NE_SIGNAL,\n FAILED_ASSERT_SIGNAL,\n FAILED_TRANSFER_TO_ADDRESS_SIGNAL,\n PANIC_REASONS,\n PANIC_DOC_URL,\n} from '@fuel-ts/transactions/configs';\n\nimport type { GqlTransactionStatusFragmentFragment } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\nimport type { FailureStatus } from '../transaction-summary';\n\n/**\n * Assembles an error message for a panic status.\n * @param status - The transaction failure status.\n * @returns The error message.\n */\nexport const assemblePanicError = (status: FailureStatus) => {\n let errorMessage = `The transaction reverted with reason: \"${status.reason}\".`;\n const reason = status.reason;\n\n if (PANIC_REASONS.includes(status.reason)) {\n errorMessage = `${errorMessage}\\n\\nYou can read more about this error at:\\n\\n${PANIC_DOC_URL}#variant.${status.reason}`;\n }\n\n return { errorMessage, reason };\n};\n\n/** @hidden */\nconst stringify = (obj: unknown) => JSON.stringify(obj, null, 2);\n\n/**\n * Assembles an error message for a revert status.\n * @param receipts - The transaction result processed receipts.\n * @param logs - The transaction decoded logs.\n * @returns The error message.\n */\nexport const assembleRevertError = (\n receipts: Array<TransactionResultReceipt>,\n logs: Array<unknown>\n) => {\n let errorMessage = 'The transaction reverted with an unknown reason.';\n\n const revertReceipt = receipts.find(({ type }) => type === ReceiptType.Revert) as ReceiptRevert;\n let reason = '';\n\n if (revertReceipt) {\n const reasonHex = bn(revertReceipt.val).toHex();\n\n switch (reasonHex) {\n case FAILED_REQUIRE_SIGNAL: {\n reason = 'require';\n errorMessage = `The transaction reverted because a \"require\" statement has thrown ${\n logs.length ? stringify(logs[0]) : 'an error.'\n }.`;\n break;\n }\n\n case FAILED_ASSERT_EQ_SIGNAL: {\n const sufix =\n logs.length >= 2 ? ` comparing ${stringify(logs[1])} and ${stringify(logs[0])}.` : '.';\n\n reason = 'assert_eq';\n errorMessage = `The transaction reverted because of an \"assert_eq\" statement${sufix}`;\n break;\n }\n\n case FAILED_ASSERT_NE_SIGNAL: {\n const sufix =\n logs.length >= 2 ? ` comparing ${stringify(logs[1])} and ${stringify(logs[0])}.` : '.';\n\n reason = 'assert_ne';\n errorMessage = `The transaction reverted because of an \"assert_ne\" statement${sufix}`;\n break;\n }\n\n case FAILED_ASSERT_SIGNAL:\n reason = 'assert';\n errorMessage = `The transaction reverted because an \"assert\" statement failed to evaluate to true.`;\n break;\n\n case FAILED_TRANSFER_TO_ADDRESS_SIGNAL:\n reason = 'MissingOutputChange';\n errorMessage = `The transaction reverted because it's missing an \"OutputChange\".`;\n break;\n\n default:\n reason = 'unknown';\n errorMessage = `The transaction reverted with an unknown reason: ${revertReceipt.val}`;\n }\n }\n\n return { errorMessage, reason };\n};\n\ninterface IExtractTxError {\n receipts: Array<TransactionResultReceipt>;\n status?: GqlTransactionStatusFragmentFragment | null;\n logs: Array<unknown>;\n}\n\n/**\n * Extracts the transaction error and returns a FuelError object.\n * @param IExtractTxError - The parameters for extracting the error.\n * @returns The FuelError object.\n */\nexport const extractTxError = (params: IExtractTxError): FuelError => {\n const { receipts, status, logs } = params;\n\n const isPanic = receipts.some(({ type }) => type === ReceiptType.Panic);\n const isRevert = receipts.some(({ type }) => type === ReceiptType.Revert);\n\n const { errorMessage, reason } =\n status?.type === 'FailureStatus' && isPanic\n ? assemblePanicError(status)\n : assembleRevertError(receipts, logs);\n\n const metadata = {\n logs,\n receipts,\n panic: isPanic,\n revert: isRevert,\n reason,\n };\n\n return new FuelError(ErrorCode.SCRIPT_REVERTED, errorMessage, metadata);\n};\n","/* eslint-disable max-classes-per-file */\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\n\n/**\n * @hidden\n */\nexport class ChangeOutputCollisionError extends Error {\n name = 'ChangeOutputCollisionError';\n message = 'A ChangeOutput with the same \"assetId\" already exists for a different \"to\" address';\n}\n\n/**\n * @hidden\n */\nexport class NoWitnessAtIndexError extends Error {\n name = 'NoWitnessAtIndexError';\n constructor(public readonly index: number) {\n super();\n this.message = `Witness at index \"${index}\" was not found`;\n }\n}\n\n/**\n * @hidden\n */\nexport class NoWitnessByOwnerError extends Error {\n name = 'NoWitnessByOwnerError';\n constructor(public readonly owner: AbstractAddress) {\n super();\n this.message = `A witness for the given owner \"${owner}\" was not found`;\n }\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\nimport type { Witness } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nexport type TransactionRequestWitness = BytesLike;\n\nexport const witnessify = (value: TransactionRequestWitness): Witness => {\n const data = arrayify(value);\n\n return {\n data: hexlify(data),\n dataLength: data.length,\n };\n};\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { bn, type BN } from '@fuel-ts/math';\nimport type { TransactionCreate } from '@fuel-ts/transactions';\nimport { TransactionType, OutputType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport { calculateMetadataGasForTxCreate } from '../utils/gas';\n\nimport { hashTransaction } from './hash-transaction';\nimport type { ContractCreatedTransactionRequestOutput } from './output';\nimport type { TransactionRequestStorageSlot } from './storage-slot';\nimport { storageSlotify } from './storage-slot';\nimport { BaseTransactionRequest } from './transaction-request';\nimport type { BaseTransactionRequestLike } from './transaction-request';\n\n/**\n * @hidden\n */\nexport interface CreateTransactionRequestLike extends BaseTransactionRequestLike {\n /** Witness index of contract bytecode to create */\n bytecodeWitnessIndex?: number;\n /** Salt */\n salt?: BytesLike;\n /** List of storage slots to initialize */\n storageSlots?: TransactionRequestStorageSlot[];\n}\n\n/**\n * `CreateTransactionRequest` provides functionalities for creating a transaction request that creates a contract.\n */\nexport class CreateTransactionRequest extends BaseTransactionRequest {\n static from(obj: CreateTransactionRequestLike) {\n if (obj instanceof this) {\n return obj;\n }\n return new this(obj);\n }\n\n /** Type of the transaction */\n type = TransactionType.Create as const;\n /** Witness index of contract bytecode to create */\n bytecodeWitnessIndex: number;\n /** Salt */\n salt: string;\n /** List of storage slots to initialize */\n storageSlots: TransactionRequestStorageSlot[];\n\n /**\n * Creates an instance `CreateTransactionRequest`.\n *\n * @param createTransactionRequestLike - The initial values for the instance\n */\n constructor({ bytecodeWitnessIndex, salt, storageSlots, ...rest }: CreateTransactionRequestLike) {\n super(rest);\n this.bytecodeWitnessIndex = bytecodeWitnessIndex ?? 0;\n this.salt = hexlify(salt ?? ZeroBytes32);\n this.storageSlots = [...(storageSlots ?? [])];\n }\n\n /**\n * Converts the transaction request to a `TransactionCreate`.\n *\n * @returns The transaction create object.\n */\n toTransaction(): TransactionCreate {\n const baseTransaction = this.getBaseTransaction();\n const bytecodeWitnessIndex = this.bytecodeWitnessIndex;\n const storageSlots = this.storageSlots?.map(storageSlotify) ?? [];\n return {\n type: TransactionType.Create,\n ...baseTransaction,\n bytecodeWitnessIndex,\n storageSlotsCount: bn(storageSlots.length),\n salt: this.salt ? hexlify(this.salt) : ZeroBytes32,\n storageSlots,\n };\n }\n\n /**\n * Get contract created outputs for the transaction.\n *\n * @returns An array of contract created transaction request outputs.\n */\n getContractCreatedOutputs(): ContractCreatedTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is ContractCreatedTransactionRequestOutput =>\n output.type === OutputType.ContractCreated\n );\n }\n\n /**\n * Gets the Transaction Request by hashing the transaction.\n *\n * @param chainId - The chain ID.\n *\n * @returns - A hash of the transaction, which is the transaction ID.\n */\n getTransactionId(chainId: number): string {\n return hashTransaction(this, chainId);\n }\n\n /**\n * Adds a contract created output to the transaction request.\n *\n * @param contractId - The contract ID.\n * @param stateRoot - The state root.\n */\n addContractCreatedOutput(\n /** Contract ID */\n contractId: BytesLike,\n /** State Root */\n stateRoot: BytesLike\n ) {\n this.pushOutput({\n type: OutputType.ContractCreated,\n contractId,\n stateRoot,\n });\n }\n\n metadataGas(gasCosts: GqlGasCosts): BN {\n return calculateMetadataGasForTxCreate({\n contractBytesSize: bn(arrayify(this.witnesses[this.bytecodeWitnessIndex] || '0x').length),\n gasCosts,\n stateRootSize: this.storageSlots.length,\n txBytesSize: this.byteSize(),\n });\n }\n}\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { uint64ToBytesBE, sha256 } from '@fuel-ts/hasher';\nimport { bn } from '@fuel-ts/math';\nimport { TransactionType, InputType, OutputType, TransactionCoder } from '@fuel-ts/transactions';\nimport { concat } from '@fuel-ts/utils';\nimport { clone } from 'ramda';\n\nimport type { TransactionRequest } from './types';\n\n/**\n * Hash transaction request with sha256. [Read more](https://github.com/FuelLabs/fuel-specs/blob/master/specs/protocol/identifiers.md#transaction-id)\n *\n * @param transactionRequest - Transaction request to be hashed\n * @returns sha256 hash of the transaction\n */\nexport function hashTransaction(transactionRequest: TransactionRequest, chainId: number) {\n const transaction = transactionRequest.toTransaction();\n\n if (transaction.type === TransactionType.Script) {\n transaction.receiptsRoot = ZeroBytes32;\n }\n\n // Zero out input fields\n transaction.inputs = transaction.inputs.map((input) => {\n const inputClone = clone(input);\n\n switch (inputClone.type) {\n // Zero out on signing: txPointer, predicateGasUsed\n case InputType.Coin: {\n inputClone.txPointer = {\n blockHeight: 0,\n txIndex: 0,\n };\n inputClone.predicateGasUsed = bn(0);\n return inputClone;\n }\n // Zero out on signing: predicateGasUsed\n case InputType.Message: {\n inputClone.predicateGasUsed = bn(0);\n return inputClone;\n }\n // Zero out on signing: txID, outputIndex, balanceRoot, stateRoot, and txPointer\n case InputType.Contract: {\n inputClone.txPointer = {\n blockHeight: 0,\n txIndex: 0,\n };\n inputClone.txID = ZeroBytes32;\n inputClone.outputIndex = 0;\n inputClone.balanceRoot = ZeroBytes32;\n inputClone.stateRoot = ZeroBytes32;\n return inputClone;\n }\n default:\n return inputClone;\n }\n });\n // Zero out output fields\n transaction.outputs = transaction.outputs.map((output) => {\n const outputClone = clone(output);\n\n switch (outputClone.type) {\n // Zero out on signing: balanceRoot, stateRoot\n case OutputType.Contract: {\n outputClone.balanceRoot = ZeroBytes32;\n outputClone.stateRoot = ZeroBytes32;\n return outputClone;\n }\n // Zero out on signing: amount\n case OutputType.Change: {\n outputClone.amount = bn(0);\n return outputClone;\n }\n // Zero out on signing: amount, to and assetId\n case OutputType.Variable: {\n outputClone.to = ZeroBytes32;\n outputClone.amount = bn(0);\n outputClone.assetId = ZeroBytes32;\n return outputClone;\n }\n default:\n return outputClone;\n }\n });\n transaction.witnessesCount = 0;\n transaction.witnesses = [];\n\n const chainIdBytes = uint64ToBytesBE(chainId);\n const concatenatedData = concat([chainIdBytes, new TransactionCoder().encode(transaction)]);\n return sha256(concatenatedData);\n}\n","import type { BytesLike } from '@fuel-ts/interfaces';\nimport type { StorageSlot } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nexport type TransactionRequestStorageSlot =\n | {\n /** Key */\n key: BytesLike;\n /** Value */\n value: BytesLike;\n }\n | [key: BytesLike, value: BytesLike];\n\n// Make sure all values have 32 bytes\nconst getStorageValue = (value: BytesLike): Uint8Array => {\n const v = new Uint8Array(32);\n v.set(arrayify(value));\n return v;\n};\n\nexport const storageSlotify = (storageSlot: TransactionRequestStorageSlot): StorageSlot => {\n let key;\n let value;\n\n if (Array.isArray(storageSlot)) {\n key = storageSlot[0];\n value = storageSlot[1];\n } else {\n key = storageSlot.key;\n value = storageSlot.value;\n }\n\n return {\n key: hexlify(key),\n value: hexlify(getStorageValue(value)),\n };\n};\n","import type { InputValue, JsonAbi } from '@fuel-ts/abi-coder';\nimport { Interface } from '@fuel-ts/abi-coder';\nimport { addressify } from '@fuel-ts/address';\nimport { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport type { AbstractScriptRequest, ContractIdLike, BytesLike } from '@fuel-ts/interfaces';\nimport { bn } from '@fuel-ts/math';\nimport type { BN, BigNumberish } from '@fuel-ts/math';\nimport type { TransactionScript } from '@fuel-ts/transactions';\nimport { InputType, OutputType, TransactionType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport type { ChainInfo } from '../provider';\nimport { calculateMetadataGasForTxScript, getMaxGas } from '../utils/gas';\n\nimport { hashTransaction } from './hash-transaction';\nimport type { ContractTransactionRequestInput } from './input';\nimport type { ContractTransactionRequestOutput, VariableTransactionRequestOutput } from './output';\nimport { returnZeroScript } from './scripts';\nimport type { BaseTransactionRequestLike } from './transaction-request';\nimport { BaseTransactionRequest } from './transaction-request';\nimport type { JsonAbisFromAllCalls } from './types';\n\n/**\n * @hidden\n */\nexport interface ScriptTransactionRequestLike extends BaseTransactionRequestLike {\n /** Gas limit for transaction */\n gasLimit?: BigNumberish;\n /** Script to execute */\n script?: BytesLike;\n /** Script input data (parameters) */\n scriptData?: BytesLike;\n\n abis?: JsonAbisFromAllCalls;\n}\n\n/**\n * `ScriptTransactionRequest` provides functionalities for creating a transaction request that uses a script.\n */\nexport class ScriptTransactionRequest extends BaseTransactionRequest {\n static from(obj: ScriptTransactionRequestLike) {\n if (obj instanceof this) {\n return obj;\n }\n return new this(obj);\n }\n\n /** Type of the transaction */\n type = TransactionType.Script as const;\n /** Gas limit for transaction */\n gasLimit: BN;\n /** Script to execute */\n script: Uint8Array;\n /** Script input data (parameters) */\n scriptData: Uint8Array;\n\n abis?: JsonAbisFromAllCalls;\n\n /**\n * Constructor for `ScriptTransactionRequest`.\n *\n * @param scriptTransactionRequestLike - The initial values for the instance.\n */\n constructor({ script, scriptData, gasLimit, ...rest }: ScriptTransactionRequestLike = {}) {\n super(rest);\n this.gasLimit = bn(gasLimit);\n this.script = arrayify(script ?? returnZeroScript.bytes);\n this.scriptData = arrayify(scriptData ?? returnZeroScript.encodeScriptData());\n this.abis = rest.abis;\n }\n\n /**\n * Converts the transaction request to a `TransactionScript`.\n *\n * @returns The transaction script object.\n */\n toTransaction(): TransactionScript {\n const script = arrayify(this.script ?? '0x');\n const scriptData = arrayify(this.scriptData ?? '0x');\n return {\n type: TransactionType.Script,\n scriptGasLimit: this.gasLimit,\n ...super.getBaseTransaction(),\n scriptLength: bn(script.length),\n scriptDataLength: bn(scriptData.length),\n receiptsRoot: ZeroBytes32,\n script: hexlify(script),\n scriptData: hexlify(scriptData),\n };\n }\n\n /**\n * Get contract inputs for the transaction.\n *\n * @returns An array of contract transaction request inputs.\n */\n getContractInputs(): ContractTransactionRequestInput[] {\n return this.inputs.filter(\n (input): input is ContractTransactionRequestInput => input.type === InputType.Contract\n );\n }\n\n /**\n * Get contract outputs for the transaction.\n *\n * @returns An array of contract transaction request outputs.\n */\n getContractOutputs(): ContractTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is ContractTransactionRequestOutput => output.type === OutputType.Contract\n );\n }\n\n /**\n * Get variable outputs for the transaction.\n *\n * @returns An array of variable transaction request outputs.\n */\n getVariableOutputs(): VariableTransactionRequestOutput[] {\n return this.outputs.filter(\n (output): output is VariableTransactionRequestOutput => output.type === OutputType.Variable\n );\n }\n\n /**\n * Set the script and its data.\n *\n * @param script - The abstract script request.\n * @param data - The script data.\n */\n setScript<T>(script: AbstractScriptRequest<T>, data: T) {\n this.scriptData = script.encodeScriptData(data);\n this.script = script.bytes;\n }\n\n /**\n * Adds variable outputs to the transaction request.\n *\n * @param numberOfVariables - The number of variables to add.\n * @returns The new length of the outputs array.\n */\n addVariableOutputs(numberOfVariables: number = 1) {\n let outputsNumber = numberOfVariables;\n\n while (outputsNumber) {\n this.pushOutput({\n type: OutputType.Variable,\n });\n outputsNumber -= 1;\n }\n\n return this.outputs.length - 1;\n }\n\n calculateMaxGas(chainInfo: ChainInfo, minGas: BN): BN {\n const { consensusParameters } = chainInfo;\n const { gasPerByte, maxGasPerTx } = consensusParameters;\n\n const witnessesLength = this.toTransaction().witnesses.reduce(\n (acc, wit) => acc + wit.dataLength,\n 0\n );\n\n return getMaxGas({\n gasPerByte,\n minGas,\n witnessesLength,\n witnessLimit: this.witnessLimit,\n gasLimit: this.gasLimit,\n maxGasPerTx,\n });\n }\n\n /**\n * Adds a contract input and output to the transaction request.\n *\n * @param contract - The contract ID.\n * @returns The current instance of the `ScriptTransactionRequest`.\n */\n addContractInputAndOutput(contract: ContractIdLike): ScriptTransactionRequest {\n const contractAddress = addressify(contract);\n\n // Add only one input contract per contractId\n if (this.getContractInputs().find((i) => i.contractId === contractAddress.toB256())) {\n return this;\n }\n\n const inputIndex = super.pushInput({\n type: InputType.Contract,\n contractId: contractAddress.toB256(),\n txPointer: '0x00000000000000000000000000000000',\n });\n\n this.pushOutput({\n type: OutputType.Contract,\n inputIndex,\n });\n\n return this;\n }\n\n /**\n * Gets the Transaction Request by hashing the transaction.\n *\n * @param chainId - The chain ID.\n *\n * @returns - A hash of the transaction, which is the transaction ID.\n */\n getTransactionId(chainId: number): string {\n return hashTransaction(this, chainId);\n }\n\n /**\n * Sets the data for the transaction request.\n *\n * @param abi - Script JSON ABI.\n * @param args - The input arguments.\n * @returns The current instance of the `ScriptTransactionRequest`.\n */\n setData(abi: JsonAbi, args: InputValue[]): ScriptTransactionRequest {\n const abiInterface = new Interface(abi);\n this.scriptData = abiInterface.functions.main.encodeArguments(args);\n return this;\n }\n\n metadataGas(gasCosts: GqlGasCosts): BN {\n return calculateMetadataGasForTxScript({\n gasCosts,\n txBytesSize: this.byteSize(),\n });\n }\n}\n","import type { AbstractScriptRequest } from '@fuel-ts/interfaces';\nimport { arrayify } from '@fuel-ts/utils';\n\n// We can't import this from `@fuel-ts/script` because it causes\n// cyclic dependency errors so we duplicate it here.\n/** @hidden */\nexport const returnZeroScript: AbstractScriptRequest<void> = {\n /*\n Opcode::RET(REG_ZERO)\n Opcode::NOOP\n */\n // TODO: Don't use hardcoded scripts: https://github.com/FuelLabs/fuels-ts/issues/281\n bytes: arrayify('0x24000000'),\n encodeScriptData: () => new Uint8Array(0),\n};\n\n/** @hidden */\nexport const withdrawScript: AbstractScriptRequest<void> = {\n /*\n The following code loads some basic values into registers and calls SMO to create an output message\n 5040C010 \t- ADDI r16 $is i16 [r16 now points to memory 16 bytes from the start of this program (start of receiver data)]\n 5D44C006\t- LW r17 $is i6 [r17 set to the 6th word in this program (6*8=48 bytes from the start of this program)]\n 4C400011\t- SMO r16 r0 r0 r17 [send message out to address starting at memory position r16 with amount in r17]\n 24000000\t- RET [return 0]\n 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [recipient address]\n 00000000 00000000 [amount value]\n */\n // TODO: Don't use hardcoded scripts: https://github.com/FuelLabs/fuels-ts/issues/281\n bytes: arrayify('0x5040C0105D44C0064C40001124000000'),\n encodeScriptData: () => new Uint8Array(0),\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { TransactionType, InputType } from '@fuel-ts/transactions';\n\nimport type { ExcludeResourcesOption } from '../resource';\n\nimport { CreateTransactionRequest } from './create-transaction-request';\nimport type { TransactionRequestInput } from './input';\nimport { ScriptTransactionRequest } from './script-transaction-request';\nimport type { TransactionRequestLike, TransactionRequest } from './types';\n\n/** @hidden */\nexport const transactionRequestify = (obj: TransactionRequestLike): TransactionRequest => {\n if (obj instanceof ScriptTransactionRequest || obj instanceof CreateTransactionRequest) {\n return obj;\n }\n\n const { type } = obj;\n\n switch (obj.type) {\n case TransactionType.Script: {\n return ScriptTransactionRequest.from(obj);\n }\n case TransactionType.Create: {\n return CreateTransactionRequest.from(obj);\n }\n default: {\n throw new FuelError(ErrorCode.INVALID_TRANSACTION_TYPE, `Invalid transaction type: ${type}.`);\n }\n }\n};\n\nexport const cacheTxInputsFromOwner = (\n inputs: TransactionRequestInput[],\n owner: string\n): ExcludeResourcesOption =>\n inputs.reduce(\n (acc, input) => {\n if (input.type === InputType.Coin && input.owner === owner) {\n acc.utxos.push(input.id);\n }\n\n if (input.type === InputType.Message && input.recipient === owner) {\n acc.messages.push(input.nonce);\n }\n\n return acc;\n },\n {\n utxos: [],\n messages: [],\n } as Required<ExcludeResourcesOption>\n );\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type {\n ReceiptCall,\n ReceiptLog,\n ReceiptLogData,\n ReceiptPanic,\n ReceiptReturn,\n ReceiptReturnData,\n ReceiptRevert,\n ReceiptTransfer,\n ReceiptTransferOut,\n ReceiptScriptResult,\n ReceiptMessageOut,\n Transaction,\n ReceiptMint,\n ReceiptBurn,\n} from '@fuel-ts/transactions';\nimport { TransactionCoder } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlReceiptFragmentFragment } from '../__generated__/operations';\nimport type Provider from '../provider';\nimport type { JsonAbisFromAllCalls } from '../transaction-request';\nimport { assembleTransactionSummary } from '../transaction-summary/assemble-transaction-summary';\nimport { processGqlReceipt } from '../transaction-summary/receipt';\nimport type { TransactionSummary, GqlTransaction, AbiMap } from '../transaction-summary/types';\nimport { extractTxError } from '../utils';\n\nimport { getDecodedLogs } from './getDecodedLogs';\n\n/** @hidden */\nexport type TransactionResultCallReceipt = ReceiptCall;\n/** @hidden */\nexport type TransactionResultReturnReceipt = ReceiptReturn;\n/** @hidden */\nexport type TransactionResultReturnDataReceipt = ReceiptReturnData & { data: string };\n/** @hidden */\nexport type TransactionResultPanicReceipt = ReceiptPanic;\n/** @hidden */\nexport type TransactionResultRevertReceipt = ReceiptRevert;\n/** @hidden */\nexport type TransactionResultLogReceipt = ReceiptLog;\n/** @hidden */\nexport type TransactionResultLogDataReceipt = ReceiptLogData & { data: string };\n/** @hidden */\nexport type TransactionResultTransferReceipt = ReceiptTransfer;\n/** @hidden */\nexport type TransactionResultTransferOutReceipt = ReceiptTransferOut;\n/** @hidden */\nexport type TransactionResultScriptResultReceipt = ReceiptScriptResult;\n/** @hidden */\nexport type TransactionResultMessageOutReceipt = ReceiptMessageOut;\nexport type TransactionResultMintReceipt = ReceiptMint;\nexport type TransactionResultBurnReceipt = ReceiptBurn;\n\n/** @hidden */\nexport type TransactionResultReceipt =\n | ReceiptCall\n | ReceiptReturn\n | (ReceiptReturnData & { data: string })\n | ReceiptPanic\n | ReceiptRevert\n | ReceiptLog\n | (ReceiptLogData & { data: string })\n | ReceiptTransfer\n | ReceiptTransferOut\n | ReceiptScriptResult\n | ReceiptMessageOut\n | TransactionResultMintReceipt\n | TransactionResultBurnReceipt;\n\n/** @hidden */\nexport type TransactionResult<TTransactionType = void> = TransactionSummary<TTransactionType> & {\n gqlTransaction: GqlTransaction;\n logs?: Array<unknown>;\n};\n\n/**\n * Represents a response for a transaction.\n */\nexport class TransactionResponse {\n /** Transaction ID */\n id: string;\n /** Current provider */\n provider: Provider;\n /** Gas used on the transaction */\n gasUsed: BN = bn(0);\n /** The graphql Transaction with receipts object. */\n gqlTransaction?: GqlTransaction;\n\n abis?: JsonAbisFromAllCalls;\n\n /**\n * Constructor for `TransactionResponse`.\n *\n * @param id - The transaction ID.\n * @param provider - The provider.\n */\n constructor(id: string, provider: Provider, abis?: JsonAbisFromAllCalls) {\n this.id = id;\n this.provider = provider;\n this.abis = abis;\n }\n\n /**\n * Async constructor for `TransactionResponse`. This method can be used to create\n * an instance of `TransactionResponse` and wait for the transaction to be fetched\n * from the chain, ensuring that the `gqlTransaction` property is set.\n *\n * @param id - The transaction ID.\n * @param provider - The provider.\n */\n static async create(\n id: string,\n provider: Provider,\n abis?: JsonAbisFromAllCalls\n ): Promise<TransactionResponse> {\n const response = new TransactionResponse(id, provider, abis);\n await response.fetch();\n return response;\n }\n\n /**\n * Fetch the transaction with receipts from the provider.\n *\n * @returns Transaction with receipts query result.\n */\n async fetch(): Promise<GqlTransaction> {\n const response = await this.provider.operations.getTransactionWithReceipts({\n transactionId: this.id,\n });\n\n if (!response.transaction) {\n const subscription = this.provider.operations.statusChange({\n transactionId: this.id,\n });\n\n for await (const { statusChange } of subscription) {\n if (statusChange) {\n break;\n }\n }\n\n return this.fetch();\n }\n\n this.gqlTransaction = response.transaction;\n\n return response.transaction;\n }\n\n /**\n * Decode the raw payload of the transaction.\n *\n * @param transactionWithReceipts - The transaction with receipts object.\n * @returns The decoded transaction.\n */\n decodeTransaction<TTransactionType = void>(transactionWithReceipts: GqlTransaction) {\n return new TransactionCoder().decode(\n arrayify(transactionWithReceipts.rawPayload),\n 0\n )?.[0] as Transaction<TTransactionType>;\n }\n\n /**\n * Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will\n * fetch it from the provider\n *\n * @param contractsAbiMap - The contracts ABI map.\n * @returns\n */\n async getTransactionSummary<TTransactionType = void>(\n contractsAbiMap?: AbiMap\n ): Promise<TransactionSummary<TTransactionType>> {\n let transaction = this.gqlTransaction;\n\n if (!transaction) {\n transaction = await this.fetch();\n }\n\n const decodedTransaction = this.decodeTransaction<TTransactionType>(\n transaction\n ) as Transaction<TTransactionType>;\n\n let txReceipts: GqlReceiptFragmentFragment[] = [];\n\n if (transaction?.status && 'receipts' in transaction.status) {\n txReceipts = transaction.status.receipts;\n }\n\n const receipts = txReceipts.map(processGqlReceipt) || [];\n\n const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = this.provider.getGasConfig();\n const gasPrice = await this.provider.getLatestGasPrice();\n const maxInputs = this.provider.getChain().consensusParameters.maxInputs;\n\n const transactionSummary = assembleTransactionSummary<TTransactionType>({\n id: this.id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: arrayify(transaction.rawPayload),\n gqlTransactionStatus: transaction.status,\n gasPerByte,\n gasPriceFactor,\n abiMap: contractsAbiMap,\n maxInputs,\n gasCosts,\n maxGasPerTx,\n gasPrice,\n });\n\n return transactionSummary;\n }\n\n private async waitForStatusChange() {\n const status = this.gqlTransaction?.status?.type;\n if (status && status !== 'SubmittedStatus') {\n return;\n }\n\n const subscription = this.provider.operations.statusChange({\n transactionId: this.id,\n });\n\n for await (const { statusChange } of subscription) {\n if (statusChange.type === 'SqueezedOutStatus') {\n throw new FuelError(\n ErrorCode.TRANSACTION_SQUEEZED_OUT,\n `Transaction Squeezed Out with reason: ${statusChange.reason}`\n );\n }\n if (statusChange.type !== 'SubmittedStatus') {\n break;\n }\n }\n\n await this.fetch();\n }\n\n /**\n * Waits for transaction to complete and returns the result.\n *\n * @returns The completed transaction result\n */\n async waitForResult<TTransactionType = void>(\n contractsAbiMap?: AbiMap\n ): Promise<TransactionResult<TTransactionType>> {\n await this.waitForStatusChange();\n\n const transactionSummary = await this.getTransactionSummary<TTransactionType>(contractsAbiMap);\n\n const transactionResult: TransactionResult<TTransactionType> = {\n gqlTransaction: this.gqlTransaction as GqlTransaction,\n ...transactionSummary,\n };\n\n let logs: Array<unknown> = [];\n\n if (this.abis) {\n logs = getDecodedLogs(\n transactionSummary.receipts,\n this.abis.main,\n this.abis.otherContractsAbis\n );\n\n transactionResult.logs = logs;\n }\n\n if (transactionResult.isStatusFailure) {\n const {\n receipts,\n gqlTransaction: { status },\n } = transactionResult;\n\n throw extractTxError({\n receipts,\n status,\n logs,\n });\n }\n\n return transactionResult;\n }\n\n /**\n * Waits for transaction to complete and returns the result.\n *\n * @param contractsAbiMap - The contracts ABI map.\n */\n async wait<TTransactionType = void>(\n contractsAbiMap?: AbiMap\n ): Promise<TransactionResult<TTransactionType>> {\n return this.waitForResult<TTransactionType>(contractsAbiMap);\n }\n}\n","import { bn, type BN } from '@fuel-ts/math';\nimport { PolicyType, type Transaction } from '@fuel-ts/transactions';\nimport { DateTime, hexlify } from '@fuel-ts/utils';\n\nimport type { GqlGasCosts } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\nimport { getGasUsedFromReceipts } from '../utils';\n\nimport { calculateTransactionFee } from './calculate-transaction-fee';\nimport {\n getOperations,\n getTransactionTypeName,\n isTypeMint,\n isTypeCreate,\n isTypeScript,\n} from './operations';\nimport { extractBurnedAssetsFromReceipts, extractMintedAssetsFromReceipts } from './receipt';\nimport { processGraphqlStatus } from './status';\nimport type { AbiMap, GraphqlTransactionStatus, TransactionSummary } from './types';\n\nexport interface AssembleTransactionSummaryParams {\n gasPerByte: BN;\n gasPriceFactor: BN;\n transaction: Transaction;\n id?: string;\n transactionBytes: Uint8Array;\n gqlTransactionStatus?: GraphqlTransactionStatus;\n receipts: TransactionResultReceipt[];\n abiMap?: AbiMap;\n maxInputs: BN;\n gasCosts: GqlGasCosts;\n maxGasPerTx: BN;\n gasPrice: BN;\n}\n\n/** @hidden */\nexport function assembleTransactionSummary<TTransactionType = void>(\n params: AssembleTransactionSummaryParams\n) {\n const {\n id,\n receipts,\n gasPerByte,\n gasPriceFactor,\n transaction,\n transactionBytes,\n gqlTransactionStatus,\n abiMap = {},\n maxInputs,\n gasCosts,\n maxGasPerTx,\n gasPrice,\n } = params;\n\n const gasUsed = getGasUsedFromReceipts(receipts);\n\n const rawPayload = hexlify(transactionBytes);\n\n const operations = getOperations({\n transactionType: transaction.type,\n inputs: transaction.inputs || [],\n outputs: transaction.outputs || [],\n receipts,\n rawPayload,\n abiMap,\n maxInputs,\n });\n\n const typeName = getTransactionTypeName(transaction.type);\n\n const tip = bn(transaction.policies?.find((policy) => policy.type === PolicyType.Tip)?.data);\n\n const { fee } = calculateTransactionFee({\n gasPrice,\n rawPayload,\n tip,\n consensusParameters: {\n gasCosts,\n maxGasPerTx,\n feeParams: {\n gasPerByte,\n gasPriceFactor,\n },\n },\n });\n\n const { isStatusFailure, isStatusPending, isStatusSuccess, blockId, status, time } =\n processGraphqlStatus(gqlTransactionStatus);\n\n const mintedAssets = extractMintedAssetsFromReceipts(receipts);\n const burnedAssets = extractBurnedAssetsFromReceipts(receipts);\n\n let date: DateTime | undefined;\n\n if (time) {\n date = DateTime.fromTai64(time);\n }\n\n const transactionSummary: TransactionSummary<TTransactionType> = {\n id,\n fee,\n gasUsed,\n operations,\n type: typeName,\n blockId,\n time,\n status,\n receipts,\n mintedAssets,\n burnedAssets,\n isTypeMint: isTypeMint(transaction.type),\n isTypeCreate: isTypeCreate(transaction.type),\n isTypeScript: isTypeScript(transaction.type),\n isStatusFailure,\n isStatusSuccess,\n isStatusPending,\n date,\n transaction: transaction as Transaction<TTransactionType>,\n };\n\n return transactionSummary;\n}\n","import type { BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { TransactionCreate, TransactionScript } from '@fuel-ts/transactions';\nimport { PolicyType, TransactionCoder, TransactionType } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type { GqlConsensusParameters, GqlFeeParameters } from '../__generated__/operations';\nimport {\n calculateGasFee,\n calculateMetadataGasForTxCreate,\n calculateMetadataGasForTxScript,\n getMaxGas,\n getMinGas,\n} from '../utils/gas';\n\ntype FeeParams =\n | Pick<GqlFeeParameters, 'gasPerByte' | 'gasPriceFactor'>\n | {\n gasPerByte: BN | number;\n gasPriceFactor: BN | number;\n };\n\nexport type CalculateTransactionFeeParams = {\n gasPrice: BN;\n rawPayload: string;\n tip: BN;\n consensusParameters: Pick<GqlConsensusParameters, 'gasCosts'> & {\n feeParams: FeeParams;\n maxGasPerTx: BN;\n };\n};\n\nexport const calculateTransactionFee = (params: CalculateTransactionFeeParams) => {\n const {\n gasPrice,\n rawPayload,\n tip,\n consensusParameters: { gasCosts, feeParams, maxGasPerTx },\n } = params;\n\n const gasPerByte = bn(feeParams.gasPerByte);\n const gasPriceFactor = bn(feeParams.gasPriceFactor);\n\n const transactionBytes = arrayify(rawPayload);\n\n const [transaction] = new TransactionCoder().decode(transactionBytes, 0);\n\n if (transaction.type === TransactionType.Mint) {\n return {\n fee: bn(0),\n minFee: bn(0),\n maxFee: bn(0),\n };\n }\n\n const { type, witnesses, inputs, policies } = transaction as\n | TransactionCreate\n | TransactionScript;\n\n let metadataGas = bn(0);\n let gasLimit = bn(0);\n\n if (type === TransactionType.Create) {\n const { bytecodeWitnessIndex, storageSlots } = transaction as TransactionCreate;\n\n const contractBytesSize = bn(arrayify(witnesses[bytecodeWitnessIndex].data).length);\n\n metadataGas = calculateMetadataGasForTxCreate({\n contractBytesSize,\n gasCosts,\n stateRootSize: storageSlots.length || 0,\n txBytesSize: transactionBytes.length,\n });\n } else {\n const { scriptGasLimit } = transaction;\n\n if (scriptGasLimit) {\n gasLimit = scriptGasLimit;\n }\n\n metadataGas = calculateMetadataGasForTxScript({\n gasCosts,\n txBytesSize: transactionBytes.length,\n });\n }\n\n const minGas = getMinGas({\n gasCosts,\n gasPerByte: bn(gasPerByte),\n inputs,\n metadataGas,\n txBytesSize: transactionBytes.length,\n });\n\n const witnessLimit = policies.find((policy) => policy.type === PolicyType.WitnessLimit)?.data as\n | BN\n | undefined;\n\n const witnessesLength = witnesses.reduce((acc, wit) => acc + wit.dataLength, 0);\n\n const maxGas = getMaxGas({\n gasPerByte,\n minGas,\n witnessesLength,\n gasLimit,\n witnessLimit,\n maxGasPerTx,\n });\n\n const minFee = calculateGasFee({\n gasPrice,\n gas: minGas,\n priceFactor: gasPriceFactor,\n tip,\n });\n\n const maxFee = calculateGasFee({\n gasPrice,\n gas: maxGas,\n priceFactor: gasPriceFactor,\n tip,\n });\n\n return {\n minFee,\n maxFee,\n fee: maxFee,\n };\n};\n","import { ZeroBytes32 } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport { ReceiptType, TransactionType } from '@fuel-ts/transactions';\nimport type { InputContract, Output, OutputChange } from '@fuel-ts/transactions';\n\nimport type {\n TransactionResultReceipt,\n TransactionResultCallReceipt,\n TransactionResultMessageOutReceipt,\n TransactionResultTransferOutReceipt,\n TransactionResultTransferReceipt,\n} from '../transaction-response';\n\nimport { getFunctionCall } from './call';\nimport {\n getInputFromAssetId,\n getInputAccountAddress,\n getInputContractFromIndex,\n getInputsContract,\n getInputsCoinAndMessage,\n} from './input';\nimport {\n getOutputsChange,\n getOutputsCoin,\n getOutputsContract,\n getOutputsContractCreated,\n} from './output';\nimport { AddressType, ChainName, OperationName, TransactionTypeName } from './types';\nimport type {\n InputOutputParam,\n InputParam,\n OperationCoin,\n RawPayloadParam,\n ReceiptParam,\n Operation,\n GetOperationParams,\n GetTransferOperationsParams,\n} from './types';\n\n/** @hidden */\nexport function getReceiptsByType<T = TransactionResultReceipt>(\n receipts: TransactionResultReceipt[],\n type: ReceiptType\n) {\n return (receipts ?? []).filter((r) => r.type === type) as T[];\n}\n\n/** @hidden */\nexport function getTransactionTypeName(transactionType: TransactionType): TransactionTypeName {\n switch (transactionType) {\n case TransactionType.Mint:\n return TransactionTypeName.Mint;\n case TransactionType.Create:\n return TransactionTypeName.Create;\n case TransactionType.Script:\n return TransactionTypeName.Script;\n default:\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_TYPE,\n `Invalid transaction type: ${transactionType}.`\n );\n }\n}\n\n/** @hidden */\nexport function isType(transactionType: TransactionType, type: TransactionTypeName) {\n const txType = getTransactionTypeName(transactionType);\n\n return txType === type;\n}\n\n/** @hidden */\nexport function isTypeMint(transactionType: TransactionType) {\n return isType(transactionType, TransactionTypeName.Mint);\n}\n\n/** @hidden */\nexport function isTypeCreate(transactionType: TransactionType) {\n return isType(transactionType, TransactionTypeName.Create);\n}\n\n/** @hidden */\nexport function isTypeScript(transactionType: TransactionType) {\n return isType(transactionType, TransactionTypeName.Script);\n}\n\n/** @hidden */\nexport function hasSameAssetId(a: OperationCoin) {\n return (b: OperationCoin) => a.assetId === b.assetId;\n}\n\n/** @hidden */\nexport function getReceiptsCall(receipts: TransactionResultReceipt[]) {\n return getReceiptsByType<TransactionResultCallReceipt>(receipts, ReceiptType.Call);\n}\n\n/** @hidden */\nexport function getReceiptsMessageOut(receipts: TransactionResultReceipt[]) {\n return getReceiptsByType<TransactionResultMessageOutReceipt>(receipts, ReceiptType.MessageOut);\n}\n\n/** @hidden */\nconst mergeAssets = (op1: Operation, op2: Operation) => {\n const assets1 = op1.assetsSent || [];\n const assets2 = op2.assetsSent || [];\n\n // Getting assets from op2 that don't exist in op1\n const filteredAssets = assets2.filter(\n (asset2) => !assets1.some((asset1) => asset1.assetId === asset2.assetId)\n );\n\n // Merge assets that already exist in op1\n const mergedAssets = assets1.map((asset1) => {\n // Find matching asset in op2\n const matchingAsset = assets2.find((asset2) => asset2.assetId === asset1.assetId);\n if (!matchingAsset) {\n // No matching asset found, return asset1\n return asset1;\n }\n // Matching asset found, merge amounts\n const mergedAmount = bn(asset1.amount).add(matchingAsset.amount);\n return { ...asset1, amount: mergedAmount };\n });\n\n // Return merged assets from op1 with filtered assets from op2\n return mergedAssets.concat(filteredAssets);\n};\n\n/** @hidden */\nfunction isSameOperation(a: Operation, b: Operation) {\n return (\n a.name === b.name &&\n a.from?.address === b.from?.address &&\n a.to?.address === b.to?.address &&\n a.from?.type === b.from?.type &&\n a.to?.type === b.to?.type\n );\n}\n\n/** @hidden */\nexport function addOperation(operations: Operation[], toAdd: Operation) {\n const allOperations = [...operations];\n\n // Verifying if the operation to add already exists.\n const index = allOperations.findIndex((op) => isSameOperation(op, toAdd));\n\n if (allOperations[index]) {\n // Existent operation, we want to edit it.\n const existentOperation = { ...allOperations[index] };\n\n if (toAdd.assetsSent?.length) {\n /**\n * If the assetSent already exists, we call 'mergeAssets' to merge possible\n * entries of the same 'assetId', otherwise we just add the new 'assetSent'.\n */\n existentOperation.assetsSent = existentOperation.assetsSent?.length\n ? mergeAssets(existentOperation, toAdd)\n : toAdd.assetsSent;\n }\n\n if (toAdd.calls?.length) {\n // We need to stack the new call(s) with the possible existent ones.\n existentOperation.calls = [...(existentOperation.calls || []), ...toAdd.calls];\n }\n\n allOperations[index] = existentOperation;\n } else {\n // New operation, we can simply add it.\n allOperations.push(toAdd);\n }\n\n return allOperations;\n}\n\n/** @hidden */\nexport function getReceiptsTransferOut(receipts: TransactionResultReceipt[]) {\n return getReceiptsByType<TransactionResultTransferOutReceipt>(receipts, ReceiptType.TransferOut);\n}\n\n/** @hidden */\nexport function getWithdrawFromFuelOperations({\n inputs,\n receipts,\n}: InputParam & ReceiptParam): Operation[] {\n const messageOutReceipts = getReceiptsMessageOut(receipts);\n\n const withdrawFromFuelOperations = messageOutReceipts.reduce(\n (prevWithdrawFromFuelOps, receipt) => {\n // TODO: replace this hardcode with receipt.assetId when assetId gets added to MessageOutReceipt\n const assetId = '0x0000000000000000000000000000000000000000000000000000000000000000';\n const input = getInputFromAssetId(inputs, assetId);\n if (input) {\n const inputAddress = getInputAccountAddress(input);\n const newWithdrawFromFuelOps = addOperation(prevWithdrawFromFuelOps, {\n name: OperationName.withdrawFromFuel,\n from: {\n type: AddressType.account,\n address: inputAddress,\n },\n to: {\n type: AddressType.account,\n address: receipt.recipient.toString(),\n chain: ChainName.ethereum,\n },\n assetsSent: [\n {\n amount: receipt.amount,\n assetId,\n },\n ],\n });\n\n return newWithdrawFromFuelOps;\n }\n\n return prevWithdrawFromFuelOps;\n },\n [] as Operation[]\n );\n\n return withdrawFromFuelOperations;\n}\n\n/** @hidden */\nexport function getContractCallOperations({\n inputs,\n outputs,\n receipts,\n abiMap,\n rawPayload,\n maxInputs,\n}: InputOutputParam &\n ReceiptParam &\n Pick<GetOperationParams, 'abiMap' | 'maxInputs'> &\n RawPayloadParam): Operation[] {\n const contractCallReceipts = getReceiptsCall(receipts);\n const contractOutputs = getOutputsContract(outputs);\n\n const contractCallOperations = contractOutputs.reduce((prevOutputCallOps, output) => {\n const contractInput = getInputContractFromIndex(inputs, output.inputIndex);\n\n if (contractInput) {\n const newCallOps = contractCallReceipts.reduce((prevContractCallOps, receipt) => {\n if (receipt.to === contractInput.contractID) {\n const input = getInputFromAssetId(inputs, receipt.assetId);\n if (input) {\n const inputAddress = getInputAccountAddress(input);\n const calls = [];\n\n const abi = abiMap?.[contractInput.contractID];\n if (abi) {\n calls.push(\n getFunctionCall({\n abi,\n receipt,\n rawPayload,\n maxInputs,\n })\n );\n }\n\n const newContractCallOps = addOperation(prevContractCallOps, {\n name: OperationName.contractCall,\n from: {\n type: AddressType.account,\n address: inputAddress,\n },\n to: {\n type: AddressType.contract,\n address: receipt.to,\n },\n // if no amount is forwarded to the contract, skip showing assetsSent\n assetsSent: receipt.amount?.isZero()\n ? undefined\n : [\n {\n amount: receipt.amount,\n assetId: receipt.assetId,\n },\n ],\n calls,\n });\n\n return newContractCallOps;\n }\n }\n return prevContractCallOps;\n }, prevOutputCallOps as Operation[]);\n\n return newCallOps;\n }\n\n return prevOutputCallOps;\n }, [] as Operation[]);\n\n return contractCallOperations;\n}\n\n/** @hidden */\nfunction extractTransferOperationFromReceipt(\n receipt: TransactionResultTransferReceipt | TransactionResultTransferOutReceipt,\n contractInputs: InputContract[],\n changeOutputs: OutputChange[]\n) {\n const { to: toAddress, assetId, amount } = receipt;\n let { from: fromAddress } = receipt;\n\n const toType = contractInputs.some((input) => input.contractID === toAddress)\n ? AddressType.contract\n : AddressType.account;\n\n if (ZeroBytes32 === fromAddress) {\n const change = changeOutputs.find((output) => output.assetId === assetId);\n\n fromAddress = change?.to || fromAddress;\n }\n\n const fromType = contractInputs.some((input) => input.contractID === fromAddress)\n ? AddressType.contract\n : AddressType.account;\n\n return {\n name: OperationName.transfer,\n from: {\n type: fromType,\n address: fromAddress,\n },\n to: {\n type: toType,\n address: toAddress,\n },\n assetsSent: [\n {\n assetId: assetId.toString(),\n amount,\n },\n ],\n };\n}\n\n/** @hidden */\nexport function getTransferOperations({\n inputs,\n outputs,\n receipts,\n}: GetTransferOperationsParams): Operation[] {\n let operations: Operation[] = [];\n\n const coinOutputs = getOutputsCoin(outputs);\n const contractInputs = getInputsContract(inputs);\n const changeOutputs = getOutputsChange(outputs);\n\n /**\n * Extracting transfer operations between wallets, as they do not produce receipts\n */\n coinOutputs.forEach((output) => {\n const { amount, assetId, to } = output;\n\n const changeOutput = changeOutputs.find((change) => change.assetId === assetId);\n\n if (changeOutput) {\n operations = addOperation(operations, {\n name: OperationName.transfer,\n from: {\n type: AddressType.account,\n address: changeOutput.to,\n },\n to: {\n type: AddressType.account,\n address: to,\n },\n assetsSent: [\n {\n assetId,\n amount,\n },\n ],\n });\n }\n });\n\n /**\n * `Transfer` receipts are produced from transfers:\n * - Wallet to Contract\n * - Contract to Contract\n */\n const transferReceipts = getReceiptsByType<TransactionResultTransferReceipt>(\n receipts,\n ReceiptType.Transfer\n );\n\n /**\n * `TransferOut` receipts are produced from transfer:\n * - Contract to Wallet\n */\n const transferOutReceipts = getReceiptsByType<TransactionResultTransferOutReceipt>(\n receipts,\n ReceiptType.TransferOut\n );\n\n [...transferReceipts, ...transferOutReceipts].forEach((receipt) => {\n const operation = extractTransferOperationFromReceipt(receipt, contractInputs, changeOutputs);\n\n operations = addOperation(operations, operation);\n });\n\n return operations;\n}\n\n/** @hidden */\nexport function getPayProducerOperations(outputs: Output[]): Operation[] {\n const coinOutputs = getOutputsCoin(outputs);\n const payProducerOperations = coinOutputs.reduce((prev, output) => {\n const operations = addOperation(prev, {\n name: OperationName.payBlockProducer,\n from: {\n type: AddressType.account,\n address: 'Network',\n },\n to: {\n type: AddressType.account,\n address: output.to.toString(),\n },\n assetsSent: [\n {\n assetId: output.assetId.toString(),\n amount: output.amount,\n },\n ],\n });\n\n return operations;\n }, [] as Operation[]);\n\n return payProducerOperations;\n}\n\n/** @hidden */\nexport function getContractCreatedOperations({ inputs, outputs }: InputOutputParam): Operation[] {\n const contractCreatedOutputs = getOutputsContractCreated(outputs);\n const input = getInputsCoinAndMessage(inputs)[0];\n const fromAddress = getInputAccountAddress(input);\n const contractCreatedOperations = contractCreatedOutputs.reduce((prev, contractCreatedOutput) => {\n const operations = addOperation(prev, {\n name: OperationName.contractCreated,\n from: {\n type: AddressType.account,\n address: fromAddress,\n },\n to: {\n type: AddressType.contract,\n address: contractCreatedOutput?.contractId || '',\n },\n });\n\n return operations;\n }, [] as Operation[]);\n\n return contractCreatedOperations;\n}\n\n/** @hidden */\nexport function getOperations({\n transactionType,\n inputs,\n outputs,\n receipts,\n abiMap,\n rawPayload,\n maxInputs,\n}: GetOperationParams): Operation[] {\n if (isTypeCreate(transactionType)) {\n return [\n ...getContractCreatedOperations({ inputs, outputs }),\n ...getTransferOperations({ inputs, outputs, receipts }),\n ];\n }\n\n if (isTypeScript(transactionType)) {\n return [\n ...getTransferOperations({ inputs, outputs, receipts }),\n ...getContractCallOperations({\n inputs,\n outputs,\n receipts,\n abiMap,\n rawPayload,\n maxInputs,\n }),\n ...getWithdrawFromFuelOperations({ inputs, receipts }),\n ];\n }\n // at this point we are sure it's a mint transaction\n return [...getPayProducerOperations(outputs)];\n}\n","import { Interface, type JsonAbi, calculateVmTxMemory } from '@fuel-ts/abi-coder';\nimport type { BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type { ReceiptCall } from '@fuel-ts/transactions';\n\ntype GetFunctionCallProps = {\n abi: JsonAbi;\n receipt: ReceiptCall;\n rawPayload?: string;\n maxInputs: BN;\n};\n\nexport const getFunctionCall = ({ abi, receipt, rawPayload, maxInputs }: GetFunctionCallProps) => {\n const abiInterface = new Interface(abi);\n const callFunctionSelector = receipt.param1.toHex(8);\n const functionFragment = abiInterface.getFunction(callFunctionSelector);\n const inputs = functionFragment.jsonFn.inputs;\n\n let encodedArgs;\n\n // if has more than 1 input or input type is bigger than 8 bytes, then it's a pointer to data\n if (functionFragment.isInputDataPointer) {\n if (rawPayload) {\n // calculate offset to get function params from rawPayload. should also consider vm offset\n const argsOffset = bn(receipt.param2)\n .sub(calculateVmTxMemory({ maxInputs: maxInputs.toNumber() }))\n .toNumber();\n\n // slice(2) to remove first 0x, then slice again to remove offset and get only args\n encodedArgs = `0x${rawPayload.slice(2).slice(argsOffset * 2)}`;\n }\n } else {\n // for small inputs, param2 is directly the value\n encodedArgs = receipt.param2.toHex();\n }\n\n let argumentsProvided;\n if (encodedArgs) {\n // use bytes got from rawPayload to decode function params\n const data = functionFragment.decodeArguments(encodedArgs);\n if (data) {\n // put together decoded data with input names from abi\n argumentsProvided = inputs.reduce((prev, input, index) => {\n const value = data[index];\n const name = input.name;\n\n if (name) {\n return {\n ...prev,\n // reparse to remove bn\n [name]: JSON.parse(JSON.stringify(value)),\n };\n }\n\n return prev;\n }, {});\n }\n }\n\n const call = {\n functionSignature: functionFragment.signature,\n functionName: functionFragment.name,\n argumentsProvided,\n ...(receipt.amount?.isZero() ? {} : { amount: receipt.amount, assetId: receipt.assetId }),\n };\n\n return call;\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { Input, InputCoin, InputContract, InputMessage } from '@fuel-ts/transactions';\nimport { InputType } from '@fuel-ts/transactions';\n\n/** @hidden */\nexport function getInputsByTypes<T = Input>(inputs: Input[], types: Array<InputType>) {\n return inputs.filter((i) => types.includes(i.type)) as T[];\n}\n\n/** @hidden */\nexport function getInputsByType<T = Input>(inputs: Input[], type: InputType) {\n return inputs.filter((i) => i.type === type) as T[];\n}\n\n/** @hidden */\nexport function getInputsCoin(inputs: Input[]) {\n return getInputsByType<InputCoin>(inputs, InputType.Coin);\n}\n\n/** @hidden */\nexport function getInputsMessage(inputs: Input[]) {\n return getInputsByType<InputMessage>(inputs, InputType.Message);\n}\n\n/** @hidden */\nexport function getInputsCoinAndMessage(inputs: Input[]) {\n return getInputsByTypes<InputCoin | InputMessage>(inputs, [InputType.Coin, InputType.Message]);\n}\n\n/** @hidden */\nexport function getInputsContract(inputs: Input[]) {\n return getInputsByType<InputContract>(inputs, InputType.Contract);\n}\n\n/** @hidden */\nexport function getInputFromAssetId(inputs: Input[], assetId: string) {\n const coinInputs = getInputsCoin(inputs);\n const messageInputs = getInputsMessage(inputs);\n const coinInput = coinInputs.find((i) => i.assetId === assetId);\n // TODO: should include assetId in InputMessage as well. for now we're mocking ETH\n const messageInput = messageInputs.find(\n (_) => assetId === '0x0000000000000000000000000000000000000000000000000000000000000000'\n );\n\n return coinInput || messageInput;\n}\n\n/** @hidden */\nexport function getInputContractFromIndex(\n inputs: Input[],\n inputIndex: number\n): InputContract | undefined {\n if (inputIndex == null) {\n return undefined;\n }\n\n const contractInput = inputs?.[inputIndex];\n\n if (!contractInput) {\n return undefined;\n }\n if (contractInput.type !== InputType.Contract) {\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_INPUT,\n `Contract input should be of type 'contract'.`\n );\n }\n\n return contractInput as InputContract;\n}\n\n/** @hidden */\nexport function getInputAccountAddress(input: Input) {\n if (input.type === InputType.Coin) {\n return input.owner.toString();\n }\n\n if (input.type === InputType.Message) {\n return input.recipient.toString();\n }\n\n return '';\n}\n","import type {\n Output,\n OutputChange,\n OutputCoin,\n OutputContract,\n OutputContractCreated,\n OutputVariable,\n} from '@fuel-ts/transactions';\nimport { OutputType } from '@fuel-ts/transactions';\n\n/** @hidden */\nexport function getOutputsByType<T = Output>(outputs: Output[], type: OutputType) {\n return outputs.filter((o) => o.type === type) as T[];\n}\n\n/** @hidden */\nexport function getOutputsContractCreated(outputs: Output[]) {\n return getOutputsByType<OutputContractCreated>(outputs, OutputType.ContractCreated);\n}\n\n/** @hidden */\nexport function getOutputsCoin(outputs: Output[]) {\n return getOutputsByType<OutputCoin>(outputs, OutputType.Coin);\n}\n\n/** @hidden */\nexport function getOutputsChange(outputs: Output[]) {\n return getOutputsByType<OutputChange>(outputs, OutputType.Change);\n}\n\n/** @hidden */\nexport function getOutputsContract(outputs: Output[]) {\n return getOutputsByType<OutputContract>(outputs, OutputType.Contract);\n}\n\n/** @hidden */\nexport function getOutputsVariable(outputs: Output[]) {\n return getOutputsByType<OutputVariable>(outputs, OutputType.Variable);\n}\n","import type { JsonAbi } from '@fuel-ts/abi-coder';\nimport type { B256Address } from '@fuel-ts/interfaces';\nimport type { BN, BNInput } from '@fuel-ts/math';\nimport type { Input, Output, Transaction, TransactionType } from '@fuel-ts/transactions';\n\nimport type { GqlGetTransactionQuery } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\n\nexport type GqlTransaction = NonNullable<GqlGetTransactionQuery['transaction']>;\n\nexport type GraphqlTransactionStatus = GqlTransaction['status'];\n\nexport type SuccessStatus = Extract<GraphqlTransactionStatus, { __typename: 'SuccessStatus' }>;\nexport type FailureStatus = Extract<GraphqlTransactionStatus, { __typename: 'FailureStatus' }>;\nexport type SubmittedStatus = Extract<GraphqlTransactionStatus, { __typename: 'SubmittedStatus' }>;\nexport type SqueezedOutStatus = Extract<\n GraphqlTransactionStatus,\n { __typename: 'SqueezedOutStatus' }\n>;\n\nexport type Reason = FailureStatus['reason'];\nexport type ProgramState = SuccessStatus['programState'];\nexport type Time = SubmittedStatus['time'] | SuccessStatus['time'] | FailureStatus['time'];\nexport type BlockId = SuccessStatus['block']['id'] | FailureStatus['block']['id'];\n\n/**\n * @hidden\n */\nexport enum TransactionTypeName {\n Create = 'Create',\n Mint = 'Mint',\n Script = 'Script',\n}\n\n/**\n * @hidden\n */\nexport enum TransactionStatus {\n submitted = 'submitted',\n success = 'success',\n squeezedout = 'squeezedout',\n failure = 'failure',\n}\n\n/**\n * @hidden\n */\nexport type GqlTransactionStatusesNames =\n | 'FailureStatus'\n | 'SubmittedStatus'\n | 'SuccessStatus'\n | 'SqueezedOutStatus';\n\n/**\n * @hidden\n */\nexport enum OperationName {\n payBlockProducer = 'Pay network fee to block producer',\n contractCreated = 'Contract created',\n transfer = 'Transfer asset',\n contractCall = 'Contract call',\n receive = 'Receive asset',\n mint = 'Mint asset',\n predicatecall = 'Predicate call',\n script = 'Script',\n sent = 'Sent asset',\n withdrawFromFuel = 'Withdraw from Fuel',\n}\n\nexport type OperationCoin = {\n assetId: string;\n amount: BNInput;\n};\n\nexport type OperationFunctionCall = {\n functionSignature: string;\n functionName: string;\n argumentsProvided?: Record<string, unknown>;\n} & Partial<OperationCoin>;\n\nexport type Operation = {\n name?: OperationName;\n from?: OperationTransactionAddress;\n to?: OperationTransactionAddress;\n assetsSent?: Array<OperationCoin>;\n calls?: Array<OperationFunctionCall>;\n};\n\n/**\n * @hidden\n */\nexport enum AddressType {\n contract,\n account,\n}\n\n/**\n * @hidden\n */\nexport enum ChainName {\n ethereum = 'ethereum',\n fuel = 'fuel',\n}\n\nexport type OperationTransactionAddress = {\n address: string;\n type: AddressType;\n chain?: ChainName;\n};\n\nexport type InputParam = {\n inputs: Input[];\n};\n\nexport type OutputParam = {\n outputs: Output[];\n};\n\nexport type ReceiptParam = {\n receipts: TransactionResultReceipt[];\n};\n\nexport type AbiMap = Record<string, JsonAbi>;\n\nexport type RawPayloadParam = {\n rawPayload?: string;\n};\n\nexport type InputOutputParam = InputParam & OutputParam;\n\nexport interface GetTransferOperationsParams extends InputOutputParam {\n receipts: TransactionResultReceipt[];\n}\n\nexport type GetOperationParams = {\n transactionType: TransactionType;\n abiMap?: AbiMap;\n maxInputs: BN;\n} & InputOutputParam &\n ReceiptParam &\n RawPayloadParam;\n\nexport interface MintedAsset {\n subId: B256Address;\n contractId: B256Address;\n assetId: B256Address;\n amount: BN;\n}\n\nexport type BurnedAsset = MintedAsset;\n\nexport type TransactionSummary<TTransactionType = void> = {\n id?: string;\n time?: string;\n operations: Operation[];\n gasUsed: BN;\n fee: BN;\n type: TransactionTypeName;\n blockId?: BlockId;\n status?: TransactionStatus;\n isTypeMint: boolean;\n isTypeCreate: boolean;\n isTypeScript: boolean;\n isStatusPending: boolean;\n isStatusSuccess: boolean;\n isStatusFailure: boolean;\n mintedAssets: MintedAsset[];\n burnedAssets: BurnedAsset[];\n date?: Date;\n receipts: TransactionResultReceipt[];\n transaction: Transaction<TTransactionType>;\n};\n","import { ReceiptType } from '@fuel-ts/transactions';\n\nimport type { GqlReceiptFragmentFragment } from '../__generated__/operations';\nimport type { TransactionResultReceipt } from '../transaction-response';\nimport { assembleReceiptByType } from '../utils';\n\nimport type { BurnedAsset, MintedAsset } from './types';\n\nexport const processGqlReceipt = (\n gqlReceipt: GqlReceiptFragmentFragment\n): TransactionResultReceipt => {\n const receipt = assembleReceiptByType(gqlReceipt);\n\n switch (receipt.type) {\n case ReceiptType.ReturnData: {\n return {\n ...receipt,\n data: gqlReceipt.data || '0x',\n };\n }\n case ReceiptType.LogData: {\n return {\n ...receipt,\n data: gqlReceipt.data || '0x',\n };\n }\n default:\n return receipt;\n }\n};\n\nexport const extractMintedAssetsFromReceipts = (\n receipts: Array<TransactionResultReceipt>\n): MintedAsset[] => {\n const mintedAssets: MintedAsset[] = [];\n\n receipts.forEach((receipt) => {\n if (receipt.type === ReceiptType.Mint) {\n mintedAssets.push({\n subId: receipt.subId,\n contractId: receipt.contractId,\n assetId: receipt.assetId,\n amount: receipt.val,\n });\n }\n });\n\n return mintedAssets;\n};\n\nexport const extractBurnedAssetsFromReceipts = (\n receipts: Array<TransactionResultReceipt>\n): BurnedAsset[] => {\n const burnedAssets: BurnedAsset[] = [];\n\n receipts.forEach((receipt) => {\n if (receipt.type === ReceiptType.Burn) {\n burnedAssets.push({\n subId: receipt.subId,\n contractId: receipt.contractId,\n assetId: receipt.assetId,\n amount: receipt.val,\n });\n }\n });\n\n return burnedAssets;\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\n\nimport type {\n BlockId,\n GqlTransactionStatusesNames,\n GraphqlTransactionStatus,\n Time,\n TransactionSummary,\n} from './types';\nimport { TransactionStatus } from './types';\n\n/** @hidden */\nexport const getTransactionStatusName = (gqlStatus: GqlTransactionStatusesNames) => {\n switch (gqlStatus) {\n case 'FailureStatus':\n return TransactionStatus.failure;\n case 'SuccessStatus':\n return TransactionStatus.success;\n case 'SubmittedStatus':\n return TransactionStatus.submitted;\n case 'SqueezedOutStatus':\n return TransactionStatus.squeezedout;\n default:\n throw new FuelError(\n ErrorCode.INVALID_TRANSACTION_STATUS,\n `Invalid transaction status: ${gqlStatus}.`\n );\n }\n};\n\ntype IProcessGraphqlStatusResponse = Pick<\n TransactionSummary,\n 'time' | 'blockId' | 'isStatusPending' | 'isStatusSuccess' | 'isStatusFailure' | 'status'\n>;\n\n/** @hidden */\nexport const processGraphqlStatus = (gqlTransactionStatus?: GraphqlTransactionStatus) => {\n let time: Time | undefined;\n let blockId: BlockId | undefined;\n let status: TransactionStatus | undefined;\n\n let isStatusFailure = false;\n let isStatusSuccess = false;\n let isStatusPending = false;\n\n if (gqlTransactionStatus?.type) {\n status = getTransactionStatusName(gqlTransactionStatus.type);\n\n switch (gqlTransactionStatus.type) {\n case 'SuccessStatus':\n time = gqlTransactionStatus.time;\n blockId = gqlTransactionStatus.block.id;\n isStatusSuccess = true;\n break;\n\n case 'FailureStatus':\n time = gqlTransactionStatus.time;\n blockId = gqlTransactionStatus.block.id;\n isStatusFailure = true;\n break;\n\n case 'SubmittedStatus':\n time = gqlTransactionStatus.time;\n isStatusPending = true;\n break;\n default:\n }\n }\n\n const processedGraphqlStatus: IProcessGraphqlStatusResponse = {\n time,\n blockId,\n status,\n isStatusFailure,\n isStatusSuccess,\n isStatusPending,\n };\n\n return processedGraphqlStatus;\n};\n","import type { JsonAbi } from '@fuel-ts/abi-coder';\nimport { Interface, BigNumberCoder } from '@fuel-ts/abi-coder';\nimport { ReceiptType } from '@fuel-ts/transactions';\n\nimport type { TransactionResultReceipt } from './transaction-response';\n\n/** @hidden */\nexport function getDecodedLogs<T = unknown>(\n receipts: Array<TransactionResultReceipt>,\n mainAbi: JsonAbi,\n externalAbis: Record<string, JsonAbi> = {}\n): T[] {\n /**\n * This helper decodes logs from transaction receipts.\n * It loops through all receipts and decodes two types of logs:\n * - ReceiptType.LogData\n * - ReceiptType.Log\n *\n * The \"mainAbi\" parameter represents the ABI of the main contract used to create the transaction\n * or the ABI from a script used within a \"BaseInvocationScope\" context.\n * The \"externalAbis\" parameter is a record of contract ABIs that are also part of the transaction.\n * These ABIs were added using `contract.addContracts` or through a multicall with `contract.multiCall`.\n *\n * @param receipts - The array of transaction result receipts.\n * @param mainAbi - The ABI of the script or main contract.\n * @param externalAbis - The record of external contract ABIs.\n * @returns An array of decoded logs from Sway projects.\n */\n return receipts.reduce((logs: T[], receipt) => {\n if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {\n const interfaceToUse = new Interface(externalAbis[receipt.id] || mainAbi);\n\n const data =\n receipt.type === ReceiptType.Log\n ? new BigNumberCoder('u64').encode(receipt.val0)\n : receipt.data;\n\n const [decodedLog] = interfaceToUse.decodeLog(data, receipt.val1.toNumber());\n logs.push(decodedLog);\n }\n\n return logs;\n }, []);\n}\n","import type { ProviderOptions } from '../provider';\n\nimport { sleep } from './sleep';\n\ntype Backoff = 'linear' | 'exponential' | 'fixed';\n\n/**\n * Retry options scheme\n */\nexport type RetryOptions = {\n /**\n * Amount of attempts to retry before failing the call.\n */\n maxRetries: number;\n /**\n * Backoff strategy to use when retrying. Default is exponential.\n */\n backoff?: Backoff;\n /**\n * Starting delay for backoff strategy. Default is 150ms.\n */\n baseDelay?: number;\n};\n\n/**\n * Calculate the delay for the next retry attempt\n * @param options - Retry options configuration\n * @param retryAttemptNum - 1-based, tells which retry attempt is this\n * @returns Next wait delay\n */\nexport function getWaitDelay(options: RetryOptions, retryAttemptNum: number) {\n const duration = options.baseDelay ?? 150;\n\n switch (options.backoff) {\n case 'linear':\n return duration * retryAttemptNum;\n case 'fixed':\n return duration;\n case 'exponential':\n default:\n return 2 ** (retryAttemptNum - 1) * duration;\n }\n}\n\n/**\n * Returns a wrapped fetch function that will auto-execute itself in case of errors, until it succeeds\n * @param fetchFn - Function to be auto-retried\n * @param options - Retry options configuration\n * @param retryAttemptNum - ZERO=first call, ONE=first retry, TWO=second retry, etc.\n * @returns Whatever is the output of the `fetchFn` function\n */\nexport function autoRetryFetch(\n fetchFn: NonNullable<ProviderOptions['fetch']>,\n options?: RetryOptions,\n retryAttemptNum: number = 0\n): NonNullable<ProviderOptions['fetch']> {\n if (options === undefined) {\n return fetchFn;\n }\n\n return async (...args) => {\n try {\n return await fetchFn(...args);\n } catch (_error: unknown) {\n const error = _error as Error & { cause?: { code: string } };\n\n /**\n * So far, we are auto-retrying only for `ECONNREFUSED` error.\n * TODO: Investigate if we should consider more errors.\n */\n if (error.cause?.code !== 'ECONNREFUSED') {\n throw error;\n }\n const retryNum = retryAttemptNum + 1;\n\n if (retryNum > options.maxRetries) {\n throw error;\n }\n\n const delay = getWaitDelay(options, retryNum);\n\n await sleep(delay);\n\n return autoRetryFetch(fetchFn, options, retryNum)(...args);\n }\n };\n}\n","import type { BN } from '@fuel-ts/math';\n\nimport type { CoinQuantity } from '../coin-quantity';\n\nexport const mergeQuantities = (...coinQuantities: CoinQuantity[][]): CoinQuantity[] => {\n const resultMap: { [key: string]: BN } = {};\n\n function addToMap({ amount, assetId }: CoinQuantity) {\n if (resultMap[assetId]) {\n resultMap[assetId] = resultMap[assetId].add(amount);\n } else {\n resultMap[assetId] = amount;\n }\n }\n\n coinQuantities.forEach((arr) => arr.forEach(addToMap));\n\n // Convert the resultMap back to an array\n return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { bn } from '@fuel-ts/math';\nimport { TransactionCoder } from '@fuel-ts/transactions';\nimport { arrayify } from '@fuel-ts/utils';\n\nimport type {\n GqlGetTransactionsByOwnerQueryVariables,\n GqlPageInfo,\n GqlReceiptFragmentFragment,\n} from '../__generated__/operations';\nimport type Provider from '../provider';\nimport type { TransactionRequest } from '../transaction-request';\nimport type { TransactionResult } from '../transaction-response';\n\nimport { assembleTransactionSummary } from './assemble-transaction-summary';\nimport { processGqlReceipt } from './receipt';\nimport type { AbiMap, TransactionSummary } from './types';\n\n/** @hidden */\nexport interface GetTransactionSummaryParams {\n id: string;\n provider: Provider;\n abiMap?: AbiMap;\n}\n\nexport async function getTransactionSummary<TTransactionType = void>(\n params: GetTransactionSummaryParams\n): Promise<TransactionResult> {\n const { id, provider, abiMap } = params;\n\n const { transaction: gqlTransaction } = await provider.operations.getTransactionWithReceipts({\n transactionId: id,\n });\n\n if (!gqlTransaction) {\n throw new FuelError(\n ErrorCode.TRANSACTION_NOT_FOUND,\n `Transaction not found for given id: ${id}.`\n );\n }\n\n const [decodedTransaction] = new TransactionCoder().decode(\n arrayify(gqlTransaction.rawPayload),\n 0\n );\n\n let txReceipts: GqlReceiptFragmentFragment[] = [];\n\n if (gqlTransaction?.status && 'receipts' in gqlTransaction.status) {\n txReceipts = gqlTransaction.status.receipts;\n }\n\n const receipts = txReceipts.map(processGqlReceipt);\n\n const {\n consensusParameters: { gasPerByte, gasPriceFactor, maxInputs, gasCosts, maxGasPerTx },\n } = provider.getChain();\n\n const gasPrice = await provider.getLatestGasPrice();\n\n const transactionInfo = assembleTransactionSummary<TTransactionType>({\n id: gqlTransaction.id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: arrayify(gqlTransaction.rawPayload),\n gqlTransactionStatus: gqlTransaction.status,\n gasPerByte: bn(gasPerByte),\n gasPriceFactor: bn(gasPriceFactor),\n abiMap,\n maxInputs,\n gasCosts,\n maxGasPerTx,\n gasPrice,\n });\n\n return {\n gqlTransaction,\n ...transactionInfo,\n };\n}\n\nexport interface GetTransactionSummaryFromRequestParams {\n transactionRequest: TransactionRequest;\n provider: Provider;\n abiMap?: AbiMap;\n}\n\n/** @hidden */\nexport async function getTransactionSummaryFromRequest<TTransactionType = void>(\n params: GetTransactionSummaryFromRequestParams\n): Promise<TransactionSummary<TTransactionType>> {\n const { provider, transactionRequest, abiMap } = params;\n\n const { receipts } = await provider.call(transactionRequest);\n\n const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = provider.getGasConfig();\n const maxInputs = provider.getChain().consensusParameters.maxInputs;\n\n const transaction = transactionRequest.toTransaction();\n const transactionBytes = transactionRequest.toTransactionBytes();\n\n const gasPrice = await provider.getLatestGasPrice();\n\n const transactionSummary = assembleTransactionSummary<TTransactionType>({\n receipts,\n transaction,\n transactionBytes,\n abiMap,\n gasPerByte,\n gasPriceFactor,\n maxInputs,\n gasCosts,\n maxGasPerTx,\n gasPrice,\n });\n\n return transactionSummary;\n}\n\nexport interface GetTransactionsSummariesParams {\n provider: Provider;\n filters: GqlGetTransactionsByOwnerQueryVariables;\n abiMap?: AbiMap;\n}\n\nexport interface GetTransactionsSummariesReturns {\n transactions: TransactionResult[];\n pageInfo: GqlPageInfo;\n}\n\n/** @hidden */\nexport async function getTransactionsSummaries(\n params: GetTransactionsSummariesParams\n): Promise<GetTransactionsSummariesReturns> {\n const { filters, provider, abiMap } = params;\n\n const { transactionsByOwner } = await provider.operations.getTransactionsByOwner(filters);\n\n const { edges, pageInfo } = transactionsByOwner;\n\n const {\n consensusParameters: { gasPerByte, gasPriceFactor, maxInputs, gasCosts, maxGasPerTx },\n } = provider.getChain();\n\n const gasPrice = await provider.getLatestGasPrice();\n\n const transactions = edges.map((edge) => {\n const { node: gqlTransaction } = edge;\n\n const { id, rawPayload, status } = gqlTransaction;\n\n const [decodedTransaction] = new TransactionCoder().decode(arrayify(rawPayload), 0);\n\n let txReceipts: GqlReceiptFragmentFragment[] = [];\n\n if (gqlTransaction?.status && 'receipts' in gqlTransaction.status) {\n txReceipts = gqlTransaction.status.receipts;\n }\n\n const receipts = txReceipts.map(processGqlReceipt);\n\n const transactionSummary = assembleTransactionSummary({\n id,\n receipts,\n transaction: decodedTransaction,\n transactionBytes: arrayify(rawPayload),\n gqlTransactionStatus: status,\n abiMap,\n gasPerByte,\n gasPriceFactor,\n maxInputs,\n gasCosts,\n maxGasPerTx,\n gasPrice,\n });\n\n const output: TransactionResult = {\n gqlTransaction,\n ...transactionSummary,\n };\n\n return output;\n });\n\n return {\n transactions,\n pageInfo,\n };\n}\n","export const CHAIN_IDS = {\n eth: {\n sepolia: 11155111,\n foundry: 31337,\n },\n fuel: {\n beta5: 0,\n devnet: 10,\n },\n};\n","import { CHAIN_IDS } from '../../chains';\nimport type { Asset, AssetEth, AssetFuel, NetworkEthereum, NetworkFuel } from '../types';\n\ntype Network = NetworkEthereum | NetworkFuel;\nexport type NetworkTypes = NetworkEthereum['type'] | NetworkFuel['type'];\ntype NetworkTypeToNetwork<T> = T extends 'ethereum' ? NetworkEthereum : T extends 'fuel' ? NetworkFuel : Network;\n\n/**\n * Returns the default chainId for the given network\n*/\nexport const getDefaultChainId = (networkType: NetworkTypes): number | undefined => {\n if (networkType === 'ethereum') {\n return CHAIN_IDS.eth.sepolia;\n }\n if (networkType === 'fuel') {\n return CHAIN_IDS.fuel.beta5;\n }\n\n return undefined;\n};\n\nexport type GetAssetNetworkParams<T extends NetworkTypes | undefined> = {\n asset: Asset;\n chainId?: number;\n networkType: T;\n};\n\n/**\n * Returns the asset's network on the given network\n * eg. getAssetNetwork({ asset, chainId: 1, networkType: 'ethereum' }) will return the asset's details on Ethereum mainnet\n*/\nexport const getAssetNetwork = <T extends NetworkTypes | undefined>({\n asset,\n chainId,\n networkType,\n}: GetAssetNetworkParams<T>): NetworkTypeToNetwork<T> => {\n const network = asset.networks.find(\n (item) => item.chainId === chainId && item.type === networkType\n ) as NetworkTypeToNetwork<T>;\n\n return network;\n};\n\n/**\n * Returns the asset's details on the given network alongwith the asset itself\n * eg. getAssetWithNetwork({ asset, chainId: 1, networkType: 'ethereum' }) will return the asset's details on Ethereum mainnet and the asset itself\n*/\nexport const getAssetWithNetwork = <T extends NetworkTypes>({\n asset,\n chainId,\n networkType,\n}: GetAssetNetworkParams<T>): AssetEth | AssetFuel | undefined => {\n const { networks: _, ...assetRest } = asset;\n\n const chainIdToUse = chainId ?? getDefaultChainId(networkType);\n // use two equals(==) cuz we wan't to keep 0 as a valid chainId\n if (chainIdToUse === undefined) {\n return undefined;\n }\n\n const assetNetwork = getAssetNetwork({\n asset,\n chainId: chainIdToUse,\n networkType,\n });\n\n if (!assetNetwork) {\n return undefined;\n }\n\n return {\n ...assetRest,\n ...assetNetwork,\n };\n};\n\n/**\n * Returns the asset's details on Ethereum\n*/\nexport const getAssetEth = (asset: Asset, chainId?: number): AssetEth | undefined =>\n getAssetWithNetwork({\n asset,\n networkType: 'ethereum',\n chainId,\n }) as AssetEth;\n\n/**\n * Returns the asset's details on Fuel\n*/\nexport const getAssetFuel = (asset: Asset, chainId?: number): AssetFuel | undefined =>\n getAssetWithNetwork({\n asset,\n networkType: 'fuel',\n chainId,\n }) as AssetFuel;\n","const DELIMITER_PATH = '/';\nconst trimRegex = /^\\/|\\/$/g;\nconst trimPath = (path = '') => path.replace(trimRegex, '');\n\nexport function urlJoin(baseUrl: string | undefined, ...paths: Array<string>): string {\n const hasBaseUrl = baseUrl !== null && baseUrl !== undefined;\n const rootPath = baseUrl?.[0] === '/' && baseUrl.length > 1;\n const allPaths = [baseUrl, ...paths].filter(Boolean).map(trimPath);\n if (rootPath && hasBaseUrl) {\n allPaths.unshift('');\n }\n return allPaths.join(DELIMITER_PATH);\n}\n","import type { Assets } from '../types';\n\nimport { urlJoin } from './url';\n\n/**\n * Returns the list of assets with the icon paths 'resolved'. eg. `./eth.svg` -> `https://some-url.com/eth.svg`\n * @param assets - List of assets\n * @param basePath - Base path for the icon URLs (default: './')\n * @returns The assets with the icon paths resolved\n */\nexport function resolveIconPaths(assets: Assets, basePath = './') {\n return assets.map((asset) => ({\n ...asset,\n icon: urlJoin(basePath, asset.icon),\n }));\n}\n","import { CHAIN_IDS } from '../chains';\n\nimport type { Assets } from './types';\n\nexport const assets: Assets = [\n {\n name: 'Ethereum',\n symbol: 'ETH',\n icon: 'eth.svg',\n networks: [\n {\n type: 'ethereum',\n chainId: CHAIN_IDS.eth.sepolia,\n decimals: 18,\n },\n {\n type: 'ethereum',\n chainId: CHAIN_IDS.eth.foundry,\n decimals: 18,\n },\n {\n type: 'fuel',\n chainId: CHAIN_IDS.fuel.beta5,\n decimals: 9,\n assetId: '0x0000000000000000000000000000000000000000000000000000000000000000',\n },\n {\n type: 'fuel',\n chainId: CHAIN_IDS.fuel.devnet,\n decimals: 9,\n assetId: '0x0000000000000000000000000000000000000000000000000000000000000000',\n },\n ],\n },\n];\n\nexport * from './utils';\nexport * from './types';\n","import { BigNumberCoder } from '@fuel-ts/abi-coder';\nimport type { B256Address, BytesLike } from '@fuel-ts/interfaces';\nimport { BN, type BigNumberish } from '@fuel-ts/math';\nimport { arrayify } from '@fuel-ts/utils';\nimport * as asm from '@fuels/vm-asm';\n\ninterface IAssembleTransferToContractScriptParams {\n hexlifiedContractId: B256Address;\n amountToTransfer: BigNumberish;\n assetId: BytesLike;\n}\n\nexport const formatTransferToContractScriptData = (\n params: IAssembleTransferToContractScriptParams\n) => {\n const { assetId, amountToTransfer, hexlifiedContractId } = params;\n\n const numberCoder = new BigNumberCoder('u64');\n\n const encoded = numberCoder.encode(new BN(amountToTransfer).toNumber());\n\n const scriptData = Uint8Array.from([\n ...arrayify(hexlifiedContractId),\n ...encoded,\n ...arrayify(assetId),\n ]);\n\n return scriptData;\n};\n\nexport const assembleTransferToContractScript = async (\n params: IAssembleTransferToContractScriptParams\n) => {\n const scriptData = formatTransferToContractScriptData(params);\n\n // implementation extracted from Rust SDK at:\n // https://github.com/FuelLabs/fuels-rs/blob/master/packages/fuels-core/src/types/transaction_builders.rs#L240-L272\n // This script loads:\n // - a pointer to the contract id,\n // - the actual amount\n // - a pointer to the asset id\n // into the registers 0x10, 0x12, 0x13\n // and calls the TR instruction\n\n // TODO: Remove ts-expect-error\n // @ts-expect-error method reference missing in DTS\n await asm.initWasm();\n\n // const gtf = fuelAsm.gtf(0x10, 0x00, 0xc);\n const gtf = asm.gtf(0x10, 0x00, asm.GTFArgs.ScriptData);\n const addi = asm.addi(0x11, 0x10, 0x20);\n const lw = asm.lw(0x12, 0x11, 0x0);\n const addi2 = asm.addi(0x13, 0x11, 0x8);\n const tr = asm.tr(0x10, 0x12, 0x13);\n const ret = asm.ret(0x1);\n\n const script = Uint8Array.from([\n ...gtf.to_bytes(),\n ...addi.to_bytes(),\n ...lw.to_bytes(),\n ...addi2.to_bytes(),\n ...tr.to_bytes(),\n ...ret.to_bytes(),\n ]);\n\n return { script, scriptData };\n};\n","import { hashMessage } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { hexlify } from '@fuel-ts/utils';\n\nimport { Account } from '../account';\nimport { transactionRequestify } from '../providers';\nimport type {\n TransactionResponse,\n TransactionRequestLike,\n CallResult,\n Provider,\n ProviderSendTxParams,\n EstimateTransactionParams,\n} from '../providers';\nimport { Signer } from '../signer';\n\nimport { encryptKeystoreWallet } from './keystore-wallet';\n\n/**\n * `BaseWalletUnlocked` provides the base functionalities for an unlocked wallet.\n */\nexport class BaseWalletUnlocked extends Account {\n /**\n * Default HDWallet path.\n */\n static defaultPath = \"m/44'/1179993420'/0'/0/0\";\n\n /**\n * A function that returns the wallet's signer.\n */\n signer: () => Signer;\n\n /**\n * Creates a new BaseWalletUnlocked instance.\n *\n * @param privateKey - The private key of the wallet.\n * @param provider - A Provider instance (optional).\n */\n constructor(privateKey: BytesLike, provider?: Provider) {\n const signer = new Signer(privateKey);\n super(signer.address, provider);\n this.signer = () => signer;\n }\n\n /**\n * Gets the private key of the wallet.\n *\n * @returns The private key of the wallet.\n */\n get privateKey(): string {\n return this.signer().privateKey;\n }\n\n /**\n * Gets the public key of the wallet.\n *\n * @returns\n */\n get publicKey(): string {\n return this.signer().publicKey;\n }\n\n /**\n * Signs a message with the wallet's private key.\n *\n * @param message - The message to sign.\n * @returns A promise that resolves to the signature as a ECDSA 64 bytes string.\n */\n async signMessage(message: string): Promise<string> {\n const signedMessage = await this.signer().sign(hashMessage(message));\n return hexlify(signedMessage);\n }\n\n /**\n * Signs a transaction with the wallet's private key.\n *\n * @param transactionRequestLike - The transaction request to sign.\n * @returns A promise that resolves to the signature as a ECDSA 64 bytes string.\n */\n async signTransaction(transactionRequestLike: TransactionRequestLike): Promise<string> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n const chainId = this.provider.getChainId();\n const hashedTransaction = transactionRequest.getTransactionId(chainId);\n const signature = await this.signer().sign(hashedTransaction);\n return hexlify(signature);\n }\n\n /**\n * Populates a transaction with the witnesses signature.\n *\n * @param transactionRequestLike - The transaction request to populate.\n * @returns The populated transaction request.\n */\n async populateTransactionWitnessesSignature(transactionRequestLike: TransactionRequestLike) {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n const signedTransaction = await this.signTransaction(transactionRequest);\n\n transactionRequest.updateWitnessByOwner(this.address, signedTransaction);\n\n return transactionRequest;\n }\n\n /**\n * Populates the witness signature for a transaction and sends it to the network using `provider.sendTransaction`.\n *\n * @param transactionRequestLike - The transaction request to send.\n * @returns A promise that resolves to the TransactionResponse object.\n */\n async sendTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = false, awaitExecution }: ProviderSendTxParams = {}\n ): Promise<TransactionResponse> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.sendTransaction(\n await this.populateTransactionWitnessesSignature(transactionRequest),\n { awaitExecution, estimateTxDependencies: false }\n );\n }\n\n /**\n * Populates the witness signature for a transaction and sends a call to the network using `provider.call`.\n *\n * @param transactionRequestLike - The transaction request to simulate.\n * @returns A promise that resolves to the CallResult object.\n */\n async simulateTransaction(\n transactionRequestLike: TransactionRequestLike,\n { estimateTxDependencies = true }: EstimateTransactionParams = {}\n ): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n if (estimateTxDependencies) {\n await this.provider.estimateTxDependencies(transactionRequest);\n }\n return this.provider.call(\n await this.populateTransactionWitnessesSignature(transactionRequest),\n {\n utxoValidation: true,\n estimateTxDependencies: false,\n }\n );\n }\n\n async encrypt(password: string): Promise<string> {\n return encryptKeystoreWallet(this.privateKey, this.address, password);\n }\n}\n","import { Address } from '@fuel-ts/address';\nimport { randomBytes } from '@fuel-ts/crypto';\nimport { hash } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { toBytes } from '@fuel-ts/math';\nimport { hexlify, concat, arrayify } from '@fuel-ts/utils';\nimport { secp256k1 } from '@noble/curves/secp256k1';\n\nexport class Signer {\n readonly address: Address;\n\n readonly publicKey: string;\n\n readonly compressedPublicKey: string;\n\n readonly privateKey: string;\n\n /**\n * Create a Signer instance from a given private key\n *\n * @param privateKey - The private key to use for signing\n * @returns A new Signer instance\n */\n constructor(privateKey: BytesLike) {\n // A lot of common tools do not prefix private keys with a 0x\n if (typeof privateKey === 'string') {\n if (privateKey.match(/^[0-9a-f]*$/i) && privateKey.length === 64) {\n // eslint-disable-next-line no-param-reassign\n privateKey = `0x${privateKey}`;\n }\n }\n // Convert to byte array, normalize private key input allowing it to be BytesLike\n // like remove 0x prefix and accept array of bytes\n const privateKeyBytes = toBytes(privateKey, 32);\n\n this.privateKey = hexlify(privateKeyBytes);\n\n // Slice(1) removes the encoding scheme from the public key\n this.publicKey = hexlify(secp256k1.getPublicKey(privateKeyBytes, false).slice(1));\n this.compressedPublicKey = hexlify(secp256k1.getPublicKey(privateKeyBytes, true));\n this.address = Address.fromPublicKey(this.publicKey);\n }\n\n /**\n * Sign data using the Signer instance\n *\n * Signature is a 64 byte array of the concatenated r and s values with the compressed recoveryParam byte.\n * @ignore\n * [Read more](FuelLabs/fuel-specs/specs/protocol/cryptographic_primitives.md#public-key-cryptography)\n *\n * @param data - The data to be sign\n * @returns hashed signature\n */\n sign(data: BytesLike) {\n const signature = secp256k1.sign(arrayify(data), arrayify(this.privateKey));\n\n const r = toBytes(`0x${signature.r.toString(16)}`, 32);\n const s = toBytes(`0x${signature.s.toString(16)}`, 32);\n\n // add recoveryParam to first s byte\n s[0] |= (signature.recovery || 0) << 7;\n\n return hexlify(concat([r, s]));\n }\n\n /**\n * Add point on the current elliptic curve\n *\n * @param point - Point to add on the curve\n * @returns compressed point on the curve\n */\n addPoint(point: BytesLike) {\n const p0 = secp256k1.ProjectivePoint.fromHex(arrayify(this.compressedPublicKey));\n const p1 = secp256k1.ProjectivePoint.fromHex(arrayify(point));\n const result = p0.add(p1);\n return `0x${result.toHex(true)}`;\n }\n\n /**\n * Recover the public key from a signature performed with [`sign`](#sign).\n *\n * @param data - Data\n * @param signature - hashed signature\n * @returns public key from signature from the\n */\n static recoverPublicKey(data: BytesLike, signature: BytesLike): string {\n const signedMessageBytes = arrayify(signature);\n const r = signedMessageBytes.slice(0, 32);\n const s = signedMessageBytes.slice(32, 64);\n const recoveryParam = (s[0] & 0x80) >> 7;\n\n // remove recoveryParam from s first byte\n s[0] &= 0x7f;\n\n const sig = new secp256k1.Signature(BigInt(hexlify(r)), BigInt(hexlify(s))).addRecoveryBit(\n recoveryParam\n );\n\n const publicKey = sig.recoverPublicKey(arrayify(data)).toRawBytes(false).slice(1);\n return hexlify(publicKey);\n }\n\n /**\n * Recover the address from a signature performed with [`sign`](#sign).\n *\n * @param data - Data\n * @param signature - Signature\n * @returns Address from signature\n */\n static recoverAddress(data: BytesLike, signature: BytesLike): Address {\n return Address.fromPublicKey(Signer.recoverPublicKey(data, signature));\n }\n\n /**\n * Generate a random privateKey\n *\n * @param entropy - Adds extra entropy to generate the privateKey\n * @returns random 32-byte hashed\n */\n static generatePrivateKey(entropy?: BytesLike) {\n return entropy ? hash(concat([randomBytes(32), arrayify(entropy)])) : randomBytes(32);\n }\n\n /**\n * Extended publicKey from a compact publicKey\n *\n * @param publicKey - Compact publicKey\n * @returns extended publicKey\n */\n static extendPublicKey(publicKey: BytesLike) {\n const point = secp256k1.ProjectivePoint.fromHex(arrayify(publicKey));\n return hexlify(point.toRawBytes(false).slice(1));\n }\n}\n","import { Address } from '@fuel-ts/address';\nimport {\n bufferFromString,\n keccak256,\n randomBytes,\n scrypt,\n stringFromBuffer,\n decryptJsonWalletData,\n encryptJsonWalletData,\n} from '@fuel-ts/crypto';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\nimport { hexlify } from '@fuel-ts/utils';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport type KeystoreWallet = {\n id: string;\n version: number;\n address: string;\n crypto: KeystoreCrypto;\n};\n\ntype KeystoreCrypto = {\n cipher: 'aes-128-ctr';\n cipherparams: { iv: string };\n ciphertext: string;\n kdf: 'scrypt';\n mac: string;\n kdfparams: KDFParams;\n};\n\ntype KDFParams = {\n dklen: number;\n n: number;\n p: number;\n r: number;\n salt: string;\n};\n\n// Same values used in the Rust SDK\nexport const DEFAULT_KDF_PARAMS_LOG_N = 13;\nexport const DEFAULT_KDF_PARAMS_R = 8;\nexport const DEFAULT_KDF_PARAMS_P = 1;\nexport const DEFAULT_KEY_SIZE = 32;\nexport const DEFAULT_IV_SIZE = 16;\n\n/**\n * Removes the '0x' prefix from a hexadecimal string.\n * If the prefix does not exist, it returns the original string.\n */\nexport const removeHexPrefix = (hexString: string) => {\n if (/^0x/.test(hexString)) {\n return hexString.slice(2);\n }\n\n return hexString;\n};\n\nexport async function encryptKeystoreWallet(\n privateKey: string,\n address: string | AbstractAddress,\n password: string\n): Promise<string> {\n // Convert the hexlified private key string to a Buffer.\n const privateKeyBuffer = bufferFromString(removeHexPrefix(privateKey), 'hex');\n const ownerAddress = Address.fromAddressOrString(address);\n // Generate a random salt.\n const salt = randomBytes(DEFAULT_KEY_SIZE);\n\n const key = scrypt({\n password: bufferFromString(password),\n salt,\n dklen: DEFAULT_KEY_SIZE,\n n: 2 ** DEFAULT_KDF_PARAMS_LOG_N,\n r: DEFAULT_KDF_PARAMS_R,\n p: DEFAULT_KDF_PARAMS_P,\n });\n\n // Encrypt the private key using AES-128-CTR.\n const iv = randomBytes(DEFAULT_IV_SIZE);\n\n const ciphertext = await encryptJsonWalletData(privateKeyBuffer, key, iv);\n\n const data = Uint8Array.from([...key.subarray(16, 32), ...ciphertext]);\n\n // Calculate the MAC.\n const macHashUint8Array = keccak256(data);\n\n const mac = stringFromBuffer(macHashUint8Array, 'hex');\n\n // Construct keystore.\n const keystore: KeystoreWallet = {\n id: uuidv4(),\n version: 3,\n address: removeHexPrefix(ownerAddress.toHexString()),\n crypto: {\n cipher: 'aes-128-ctr',\n mac,\n cipherparams: { iv: stringFromBuffer(iv, 'hex') },\n ciphertext: stringFromBuffer(ciphertext, 'hex'),\n kdf: 'scrypt',\n kdfparams: {\n dklen: DEFAULT_KEY_SIZE,\n n: 2 ** DEFAULT_KDF_PARAMS_LOG_N,\n p: DEFAULT_KDF_PARAMS_P,\n r: DEFAULT_KDF_PARAMS_R,\n salt: stringFromBuffer(salt, 'hex'),\n },\n },\n };\n\n return JSON.stringify(keystore);\n}\n\nexport async function decryptKeystoreWallet(jsonWallet: string, password: string): Promise<string> {\n const keystoreWallet = JSON.parse(jsonWallet) as KeystoreWallet;\n\n // Extract the parameters needed for decryption.\n const {\n crypto: {\n mac,\n ciphertext,\n cipherparams: { iv },\n kdfparams: { dklen, n, r, p, salt },\n },\n } = keystoreWallet;\n\n const ciphertextBuffer = bufferFromString(ciphertext, 'hex');\n const ivBuffer = bufferFromString(iv, 'hex');\n const saltBuffer = bufferFromString(salt, 'hex');\n\n const passwordBuffer = bufferFromString(password);\n\n const key = scrypt({\n password: passwordBuffer,\n salt: saltBuffer,\n n,\n p,\n r,\n dklen,\n });\n\n // Verify the MAC. It should be the Keccak-256 hash of the concatenation of the second half of the derived key and the ciphertext.\n const data = Uint8Array.from([...key.subarray(16, 32), ...ciphertextBuffer]);\n\n const macHashUint8Array = keccak256(data);\n\n const macHash = stringFromBuffer(macHashUint8Array, 'hex');\n\n if (mac !== macHash) {\n throw new FuelError(\n ErrorCode.INVALID_PASSWORD,\n 'Failed to decrypt the keystore wallet, the provided password is incorrect.'\n );\n }\n\n // Decrypt the private key.\n const buffer = await decryptJsonWalletData(ciphertextBuffer, key, ivBuffer);\n\n const privateKey = hexlify(buffer);\n\n return privateKey;\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { sha256 } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { bn, toBytes, toHex } from '@fuel-ts/math';\nimport { arrayify, hexlify, concat } from '@fuel-ts/utils';\nimport { toBeHex, dataSlice, encodeBase58, decodeBase58, computeHmac, ripemd160 } from 'ethers';\n\nimport { Mnemonic } from '../mnemonic';\nimport { Signer } from '../signer';\n\n// \"Bitcoin seed\"\nconst HARDENED_INDEX = 0x80000000;\n\n// 4 byte: version bytes (mainnet: 0x0488B21E public, 0x0488ADE4 private; testnet: 0x043587CF public, 0x04358394 private)\nconst MainnetPRV = hexlify('0x0488ade4');\nconst MainnetPUB = hexlify('0x0488b21e');\nconst TestnetPRV = hexlify('0x04358394');\nconst TestnetPUB = hexlify('0x043587cf');\n\nfunction base58check(data: Uint8Array): string {\n return encodeBase58(concat([data, dataSlice(sha256(sha256(data)), 0, 4)]));\n}\n\nfunction getExtendedKeyPrefix(isPublic: boolean = false, testnet: boolean = false) {\n if (isPublic) {\n return testnet ? TestnetPUB : MainnetPUB;\n }\n return testnet ? TestnetPRV : MainnetPRV;\n}\n\nfunction isPublicExtendedKey(extendedKey: Uint8Array) {\n return [MainnetPUB, TestnetPUB].includes(hexlify(extendedKey.slice(0, 4)));\n}\n\nfunction isValidExtendedKey(extendedKey: Uint8Array) {\n return [MainnetPRV, TestnetPRV, MainnetPUB, TestnetPUB].includes(\n hexlify(extendedKey.slice(0, 4))\n );\n}\n\nfunction parsePath(path: string, depth: number = 0) {\n const components = path.split('/');\n\n if (components.length === 0 || (components[0] === 'm' && depth !== 0)) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, `invalid path - ${path}`);\n }\n\n if (components[0] === 'm') {\n components.shift();\n }\n\n return components.map((p) =>\n ~p.indexOf(`'`) ? parseInt(p, 10) + HARDENED_INDEX : parseInt(p, 10)\n );\n}\n\ntype HDWalletConfig = {\n privateKey?: BytesLike;\n publicKey?: BytesLike;\n chainCode: BytesLike;\n depth?: number;\n index?: number;\n parentFingerprint?: string;\n};\n\nclass HDWallet {\n depth: number = 0;\n index: number = 0;\n fingerprint: string = hexlify('0x00000000');\n parentFingerprint: string = hexlify('0x00000000');\n privateKey?: string;\n publicKey: string;\n chainCode: BytesLike;\n\n /**\n * HDWallet is a implementation of the BIP-0044 and BIP-0032, Multi-Account Hierarchy for Deterministic Wallets\n *\n * @param config - Wallet configurations\n */\n constructor(config: HDWalletConfig) {\n // TODO: set some asserts here\n\n if (config.privateKey) {\n const signer = new Signer(config.privateKey);\n this.publicKey = hexlify(signer.compressedPublicKey);\n this.privateKey = hexlify(config.privateKey);\n } else {\n if (!config.publicKey) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n 'Both public and private Key cannot be missing. At least one should be provided.'\n );\n }\n this.publicKey = hexlify(config.publicKey);\n }\n\n this.parentFingerprint = config.parentFingerprint || this.parentFingerprint;\n this.fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4);\n this.depth = config.depth || this.depth;\n this.index = config.index || this.index;\n this.chainCode = config.chainCode;\n }\n\n get extendedKey() {\n return this.toExtendedKey();\n }\n\n /**\n * Derive the current HDWallet instance navigating only on the index.\n * `Ex.: m/44'/0 -> Ex.: m/44'/1 -> m/44'/2`. [Learn more](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)\n *\n * @param index - Index of the child HDWallet.\n * @returns A new instance of HDWallet on the derived index\n */\n deriveIndex(index: number) {\n const privateKey = this.privateKey && arrayify(this.privateKey);\n const publicKey = arrayify(this.publicKey);\n const chainCode = arrayify(this.chainCode);\n const data = new Uint8Array(37);\n\n if (index & HARDENED_INDEX) {\n if (!privateKey) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n 'Cannot derive a hardened index without a private Key.'\n );\n }\n\n // 33 bytes: 0x00 || private key\n data.set(privateKey, 1);\n } else {\n data.set(arrayify(this.publicKey));\n }\n\n // child number: ser32(i)\n data.set(toBytes(index, 4), 33);\n\n const bytes = arrayify(computeHmac('sha512', chainCode, data));\n const IL = bytes.slice(0, 32);\n const IR = bytes.slice(32);\n\n if (privateKey) {\n const N = '0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141';\n // Child key ki is parse256(IL) + kpar (mod n).\n const ki = bn(IL).add(privateKey).mod(N).toBytes(32);\n\n return new HDWallet({\n privateKey: ki,\n chainCode: IR,\n index,\n depth: this.depth + 1,\n parentFingerprint: this.fingerprint,\n });\n }\n\n const signer = new Signer(hexlify(IL));\n const Ki = signer.addPoint(publicKey);\n\n return new HDWallet({\n publicKey: Ki,\n chainCode: IR,\n index,\n depth: this.depth + 1,\n parentFingerprint: this.fingerprint,\n });\n }\n\n /**\n * Derive the current HDWallet instance to the path. [Learn more](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)\n *\n * @param path - The string representation of the child HDWallet. `Ex.: m/44'/0'/0'/0/0`\n * @returns A new instance of HDWallet on the derived path\n */\n derivePath(path: string) {\n const paths = parsePath(path, this.depth);\n\n return paths.reduce((hdwallet, index) => hdwallet.deriveIndex(index), <HDWallet>this);\n }\n\n /**\n * Get the extendKey as defined on BIP-32 from the provided seed\n *\n * @param isPublic - enable to export public extendedKey, it not required when HDWallet didn't have the privateKey.\n * @param testnet - Inform if should use testnet or mainnet prefix, default value is true (`mainnet`).\n * @returns BIP-32 extended private key\n */\n toExtendedKey(isPublic: boolean = false, testnet: boolean = false): string {\n if (this.depth >= 256) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n `Exceeded max depth of 255. Current depth: ${this.depth}.`\n );\n }\n const prefix = getExtendedKeyPrefix(this.privateKey == null || isPublic, testnet);\n const depth = hexlify(Uint8Array.from([this.depth]));\n const parentFingerprint = this.parentFingerprint;\n const index = toHex(this.index, 4);\n // last 32 bites from the key\n const chainCode = this.chainCode;\n // first 32 bites from the key\n const key =\n this.privateKey != null && !isPublic ? concat(['0x00', this.privateKey]) : this.publicKey;\n const extendedKey = arrayify(concat([prefix, depth, parentFingerprint, index, chainCode, key]));\n\n return base58check(extendedKey);\n }\n\n /**\n * Create HDWallet instance from seed\n *\n * @param seed - Seed\n * @returns A new instance of HDWallet\n */\n static fromSeed(seed: string) {\n const masterKey = Mnemonic.masterKeysFromSeed(seed);\n\n return new HDWallet({\n chainCode: arrayify(masterKey.slice(32)),\n privateKey: arrayify(masterKey.slice(0, 32)),\n });\n }\n\n static fromExtendedKey(extendedKey: string) {\n const decoded = toBeHex(decodeBase58(extendedKey));\n const bytes = arrayify(decoded);\n const validChecksum = base58check(bytes.slice(0, 78)) === extendedKey;\n\n if (bytes.length !== 82 || !isValidExtendedKey(bytes)) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Provided key is not a valid extended key.');\n }\n if (!validChecksum) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Provided key has an invalid checksum.');\n }\n\n const depth = bytes[4];\n const parentFingerprint = hexlify(bytes.slice(5, 9));\n const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n const chainCode = hexlify(bytes.slice(13, 45));\n const key = bytes.slice(45, 78);\n\n if ((depth === 0 && parentFingerprint !== '0x00000000') || (depth === 0 && index !== 0)) {\n throw new FuelError(\n ErrorCode.HD_WALLET_ERROR,\n 'Inconsistency detected: Depth is zero but fingerprint/index is non-zero.'\n );\n }\n\n if (isPublicExtendedKey(bytes)) {\n if (key[0] !== 3) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Invalid public extended key.');\n }\n\n return new HDWallet({\n publicKey: key,\n chainCode,\n index,\n depth,\n parentFingerprint,\n });\n }\n\n if (key[0] !== 0) {\n throw new FuelError(ErrorCode.HD_WALLET_ERROR, 'Invalid private extended key.');\n }\n\n return new HDWallet({\n privateKey: key.slice(1),\n chainCode,\n index,\n depth,\n parentFingerprint,\n });\n }\n}\n\nexport default HDWallet;\n","import { randomBytes } from '@fuel-ts/crypto';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { sha256 } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { arrayify, hexlify, concat } from '@fuel-ts/utils';\nimport { dataSlice, pbkdf2, computeHmac, encodeBase58 } from 'ethers';\n\nimport { english } from '../wordlists';\n\nimport type { MnemonicPhrase } from './utils';\nimport {\n entropyToMnemonicIndices,\n getWords,\n getPhrase,\n mnemonicWordsToEntropy,\n toUtf8Bytes,\n} from './utils';\n\n//\n// Constants\n//\n// \"Bitcoin seed\"\nconst MasterSecret = toUtf8Bytes('Bitcoin seed');\n// 4 byte: version bytes (mainnet: 0x0488B21E public, 0x0488ADE4 private; testnet: 0x043587CF public, 0x04358394 private)\nconst MainnetPRV = '0x0488ade4';\nconst TestnetPRV = '0x04358394';\nexport const MNEMONIC_SIZES = [12, 15, 18, 21, 24];\n\nfunction assertWordList(wordlist: Array<string>) {\n if (wordlist.length !== 2048) {\n throw new FuelError(\n ErrorCode.INVALID_WORD_LIST,\n `Expected word list length of 2048, but got ${wordlist.length}.`\n );\n }\n}\n\nfunction assertEntropy(entropy: BytesLike) {\n if (entropy.length % 4 !== 0 || entropy.length < 16 || entropy.length > 32) {\n throw new FuelError(\n ErrorCode.INVALID_ENTROPY,\n `Entropy should be between 16 and 32 bytes and a multiple of 4, but got ${entropy.length} bytes.`\n );\n }\n}\n\nfunction assertMnemonic(words: Array<string>) {\n if (!MNEMONIC_SIZES.includes(words.length)) {\n const errorMsg = `Invalid mnemonic size. Expected one of [${MNEMONIC_SIZES.join(\n ', '\n )}] words, but got ${words.length}.`;\n\n throw new FuelError(ErrorCode.INVALID_MNEMONIC, errorMsg);\n }\n}\n\nclass Mnemonic {\n wordlist: Array<string>;\n\n /**\n *\n * @param wordlist - Provide a wordlist with the list of words used to generate the mnemonic phrase. The default value is the English list.\n * @returns Mnemonic instance\n */\n constructor(wordlist: Array<string> = english) {\n this.wordlist = wordlist;\n\n assertWordList(this.wordlist);\n }\n\n /**\n *\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @returns Entropy hash\n */\n mnemonicToEntropy(phrase: MnemonicPhrase) {\n return Mnemonic.mnemonicToEntropy(phrase, this.wordlist);\n }\n\n /**\n *\n * @param entropy - Entropy source to the mnemonic phrase.\n * @returns Mnemonic phrase\n */\n entropyToMnemonic(entropy: BytesLike) {\n return Mnemonic.entropyToMnemonic(entropy, this.wordlist);\n }\n\n /**\n *\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @param wordlist - Provide a wordlist with the list of words used to generate the mnemonic phrase. The default value is the English list.\n * @returns Mnemonic phrase\n */\n static mnemonicToEntropy(phrase: MnemonicPhrase, wordlist: Array<string> = english): string {\n const words = getWords(phrase);\n\n assertMnemonic(words);\n\n return hexlify(mnemonicWordsToEntropy(words, wordlist));\n }\n\n /**\n * @param entropy - Entropy source to the mnemonic phrase.\n * @param testnet - Inform if should use testnet or mainnet prefix, default value is true (`mainnet`).\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static entropyToMnemonic(entropy: BytesLike, wordlist: Array<string> = english): string {\n const entropyBytes = arrayify(entropy);\n\n assertWordList(wordlist);\n assertEntropy(entropyBytes);\n\n return entropyToMnemonicIndices(entropyBytes)\n .map((i) => wordlist[i])\n .join(' ');\n }\n\n /**\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @param passphrase - Add additional security to protect the generated seed with a memorized passphrase. `Note: if the owner forgot the passphrase, all wallets and accounts derive from the phrase will be lost.`\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static mnemonicToSeed(phrase: MnemonicPhrase, passphrase: BytesLike = '') {\n assertMnemonic(getWords(phrase));\n\n const phraseBytes = toUtf8Bytes(getPhrase(phrase));\n const salt = toUtf8Bytes(`mnemonic${passphrase}`);\n\n return pbkdf2(phraseBytes, salt, 2048, 64, 'sha512');\n }\n\n /**\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @param passphrase - Add additional security to protect the generated seed with a memorized passphrase. `Note: if the owner forgot the passphrase, all wallets and accounts derive from the phrase will be lost.`\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static mnemonicToMasterKeys(phrase: MnemonicPhrase, passphrase: BytesLike = '') {\n const seed = Mnemonic.mnemonicToSeed(phrase, passphrase);\n return Mnemonic.masterKeysFromSeed(seed);\n }\n\n /**\n * Validates if given mnemonic is valid\n * @param phrase - Mnemonic phrase composed by words from the provided wordlist\n * @returns true if phrase is a valid mnemonic\n */\n static isMnemonicValid(phrase: string) {\n const words = getWords(phrase);\n\n let i: number = 0;\n\n try {\n assertMnemonic(words);\n } catch {\n return false;\n }\n\n while (i < words.length) {\n if (Mnemonic.binarySearch(words[i]) === false) {\n return false;\n }\n i += 1;\n }\n\n return true;\n }\n\n static binarySearch(target: string): boolean {\n const words = english;\n let left: number = 0;\n let right: number = words.length - 1;\n\n while (left <= right) {\n const mid: number = Math.floor((left + right) / 2);\n\n if (words[mid] === target) {\n return true;\n }\n if (target < words[mid]) {\n right = mid - 1;\n } else {\n left = mid + 1;\n }\n }\n\n return false;\n }\n\n /**\n * @param seed - BIP39 seed\n * @param testnet - Inform if should use testnet or mainnet prefix, the default value is true (`mainnet`).\n * @returns 64-byte array contains privateKey and chainCode as described on BIP39\n */\n static masterKeysFromSeed(seed: string): Uint8Array {\n const seedArray = arrayify(seed);\n\n if (seedArray.length < 16 || seedArray.length > 64) {\n throw new FuelError(\n ErrorCode.INVALID_SEED,\n `Seed length should be between 16 and 64 bytes, but received ${seedArray.length} bytes.`\n );\n }\n\n return arrayify(computeHmac('sha512', MasterSecret, seedArray));\n }\n\n /**\n * Get the extendKey as defined on BIP-32 from the provided seed\n *\n * @param seed - BIP39 seed\n * @param testnet - Inform if should use testnet or mainnet prefix, default value is true (`mainnet`).\n * @returns BIP-32 extended private key\n */\n static seedToExtendedKey(seed: string, testnet: boolean = false): string {\n const masterKey = Mnemonic.masterKeysFromSeed(seed);\n const prefix = arrayify(testnet ? TestnetPRV : MainnetPRV);\n const depth = '0x00';\n const fingerprint = '0x00000000';\n const index = '0x00000000';\n // last 32 bites from the key\n const chainCode = masterKey.slice(32);\n // first 32 bites from the key\n const privateKey = masterKey.slice(0, 32);\n const extendedKey = concat([\n prefix,\n depth,\n fingerprint,\n index,\n chainCode,\n concat(['0x00', privateKey]),\n ]);\n const checksum = dataSlice(sha256(sha256(extendedKey)), 0, 4);\n\n return encodeBase58(concat([extendedKey, checksum]));\n }\n\n /**\n * Create a new mnemonic using a randomly generated number as entropy.\n * As defined in BIP39, the entropy must be a multiple of 32 bits, and its size must be between 128 and 256 bits.\n * Therefore, the possible values for `strength` are 128, 160, 192, 224, and 256.\n * If not provided, the default entropy length will be set to 256 bits.\n * The return is a list of words that encodes the generated entropy.\n *\n *\n * @param size - Number of bytes used as an entropy\n * @param extraEntropy - Optional extra entropy to increase randomness\n * @returns A randomly generated mnemonic\n */\n static generate(size: number = 32, extraEntropy: BytesLike = '') {\n const entropy = extraEntropy\n ? sha256(concat([randomBytes(size), arrayify(extraEntropy)]))\n : randomBytes(size);\n return Mnemonic.entropyToMnemonic(entropy);\n }\n}\n\nexport default Mnemonic;\n","export const english = [\n 'abandon',\n 'ability',\n 'able',\n 'about',\n 'above',\n 'absent',\n 'absorb',\n 'abstract',\n 'absurd',\n 'abuse',\n 'access',\n 'accident',\n 'account',\n 'accuse',\n 'achieve',\n 'acid',\n 'acoustic',\n 'acquire',\n 'across',\n 'act',\n 'action',\n 'actor',\n 'actress',\n 'actual',\n 'adapt',\n 'add',\n 'addict',\n 'address',\n 'adjust',\n 'admit',\n 'adult',\n 'advance',\n 'advice',\n 'aerobic',\n 'affair',\n 'afford',\n 'afraid',\n 'again',\n 'age',\n 'agent',\n 'agree',\n 'ahead',\n 'aim',\n 'air',\n 'airport',\n 'aisle',\n 'alarm',\n 'album',\n 'alcohol',\n 'alert',\n 'alien',\n 'all',\n 'alley',\n 'allow',\n 'almost',\n 'alone',\n 'alpha',\n 'already',\n 'also',\n 'alter',\n 'always',\n 'amateur',\n 'amazing',\n 'among',\n 'amount',\n 'amused',\n 'analyst',\n 'anchor',\n 'ancient',\n 'anger',\n 'angle',\n 'angry',\n 'animal',\n 'ankle',\n 'announce',\n 'annual',\n 'another',\n 'answer',\n 'antenna',\n 'antique',\n 'anxiety',\n 'any',\n 'apart',\n 'apology',\n 'appear',\n 'apple',\n 'approve',\n 'april',\n 'arch',\n 'arctic',\n 'area',\n 'arena',\n 'argue',\n 'arm',\n 'armed',\n 'armor',\n 'army',\n 'around',\n 'arrange',\n 'arrest',\n 'arrive',\n 'arrow',\n 'art',\n 'artefact',\n 'artist',\n 'artwork',\n 'ask',\n 'aspect',\n 'assault',\n 'asset',\n 'assist',\n 'assume',\n 'asthma',\n 'athlete',\n 'atom',\n 'attack',\n 'attend',\n 'attitude',\n 'attract',\n 'auction',\n 'audit',\n 'august',\n 'aunt',\n 'author',\n 'auto',\n 'autumn',\n 'average',\n 'avocado',\n 'avoid',\n 'awake',\n 'aware',\n 'away',\n 'awesome',\n 'awful',\n 'awkward',\n 'axis',\n 'baby',\n 'bachelor',\n 'bacon',\n 'badge',\n 'bag',\n 'balance',\n 'balcony',\n 'ball',\n 'bamboo',\n 'banana',\n 'banner',\n 'bar',\n 'barely',\n 'bargain',\n 'barrel',\n 'base',\n 'basic',\n 'basket',\n 'battle',\n 'beach',\n 'bean',\n 'beauty',\n 'because',\n 'become',\n 'beef',\n 'before',\n 'begin',\n 'behave',\n 'behind',\n 'believe',\n 'below',\n 'belt',\n 'bench',\n 'benefit',\n 'best',\n 'betray',\n 'better',\n 'between',\n 'beyond',\n 'bicycle',\n 'bid',\n 'bike',\n 'bind',\n 'biology',\n 'bird',\n 'birth',\n 'bitter',\n 'black',\n 'blade',\n 'blame',\n 'blanket',\n 'blast',\n 'bleak',\n 'bless',\n 'blind',\n 'blood',\n 'blossom',\n 'blouse',\n 'blue',\n 'blur',\n 'blush',\n 'board',\n 'boat',\n 'body',\n 'boil',\n 'bomb',\n 'bone',\n 'bonus',\n 'book',\n 'boost',\n 'border',\n 'boring',\n 'borrow',\n 'boss',\n 'bottom',\n 'bounce',\n 'box',\n 'boy',\n 'bracket',\n 'brain',\n 'brand',\n 'brass',\n 'brave',\n 'bread',\n 'breeze',\n 'brick',\n 'bridge',\n 'brief',\n 'bright',\n 'bring',\n 'brisk',\n 'broccoli',\n 'broken',\n 'bronze',\n 'broom',\n 'brother',\n 'brown',\n 'brush',\n 'bubble',\n 'buddy',\n 'budget',\n 'buffalo',\n 'build',\n 'bulb',\n 'bulk',\n 'bullet',\n 'bundle',\n 'bunker',\n 'burden',\n 'burger',\n 'burst',\n 'bus',\n 'business',\n 'busy',\n 'butter',\n 'buyer',\n 'buzz',\n 'cabbage',\n 'cabin',\n 'cable',\n 'cactus',\n 'cage',\n 'cake',\n 'call',\n 'calm',\n 'camera',\n 'camp',\n 'can',\n 'canal',\n 'cancel',\n 'candy',\n 'cannon',\n 'canoe',\n 'canvas',\n 'canyon',\n 'capable',\n 'capital',\n 'captain',\n 'car',\n 'carbon',\n 'card',\n 'cargo',\n 'carpet',\n 'carry',\n 'cart',\n 'case',\n 'cash',\n 'casino',\n 'castle',\n 'casual',\n 'cat',\n 'catalog',\n 'catch',\n 'category',\n 'cattle',\n 'caught',\n 'cause',\n 'caution',\n 'cave',\n 'ceiling',\n 'celery',\n 'cement',\n 'census',\n 'century',\n 'cereal',\n 'certain',\n 'chair',\n 'chalk',\n 'champion',\n 'change',\n 'chaos',\n 'chapter',\n 'charge',\n 'chase',\n 'chat',\n 'cheap',\n 'check',\n 'cheese',\n 'chef',\n 'cherry',\n 'chest',\n 'chicken',\n 'chief',\n 'child',\n 'chimney',\n 'choice',\n 'choose',\n 'chronic',\n 'chuckle',\n 'chunk',\n 'churn',\n 'cigar',\n 'cinnamon',\n 'circle',\n 'citizen',\n 'city',\n 'civil',\n 'claim',\n 'clap',\n 'clarify',\n 'claw',\n 'clay',\n 'clean',\n 'clerk',\n 'clever',\n 'click',\n 'client',\n 'cliff',\n 'climb',\n 'clinic',\n 'clip',\n 'clock',\n 'clog',\n 'close',\n 'cloth',\n 'cloud',\n 'clown',\n 'club',\n 'clump',\n 'cluster',\n 'clutch',\n 'coach',\n 'coast',\n 'coconut',\n 'code',\n 'coffee',\n 'coil',\n 'coin',\n 'collect',\n 'color',\n 'column',\n 'combine',\n 'come',\n 'comfort',\n 'comic',\n 'common',\n 'company',\n 'concert',\n 'conduct',\n 'confirm',\n 'congress',\n 'connect',\n 'consider',\n 'control',\n 'convince',\n 'cook',\n 'cool',\n 'copper',\n 'copy',\n 'coral',\n 'core',\n 'corn',\n 'correct',\n 'cost',\n 'cotton',\n 'couch',\n 'country',\n 'couple',\n 'course',\n 'cousin',\n 'cover',\n 'coyote',\n 'crack',\n 'cradle',\n 'craft',\n 'cram',\n 'crane',\n 'crash',\n 'crater',\n 'crawl',\n 'crazy',\n 'cream',\n 'credit',\n 'creek',\n 'crew',\n 'cricket',\n 'crime',\n 'crisp',\n 'critic',\n 'crop',\n 'cross',\n 'crouch',\n 'crowd',\n 'crucial',\n 'cruel',\n 'cruise',\n 'crumble',\n 'crunch',\n 'crush',\n 'cry',\n 'crystal',\n 'cube',\n 'culture',\n 'cup',\n 'cupboard',\n 'curious',\n 'current',\n 'curtain',\n 'curve',\n 'cushion',\n 'custom',\n 'cute',\n 'cycle',\n 'dad',\n 'damage',\n 'damp',\n 'dance',\n 'danger',\n 'daring',\n 'dash',\n 'daughter',\n 'dawn',\n 'day',\n 'deal',\n 'debate',\n 'debris',\n 'decade',\n 'december',\n 'decide',\n 'decline',\n 'decorate',\n 'decrease',\n 'deer',\n 'defense',\n 'define',\n 'defy',\n 'degree',\n 'delay',\n 'deliver',\n 'demand',\n 'demise',\n 'denial',\n 'dentist',\n 'deny',\n 'depart',\n 'depend',\n 'deposit',\n 'depth',\n 'deputy',\n 'derive',\n 'describe',\n 'desert',\n 'design',\n 'desk',\n 'despair',\n 'destroy',\n 'detail',\n 'detect',\n 'develop',\n 'device',\n 'devote',\n 'diagram',\n 'dial',\n 'diamond',\n 'diary',\n 'dice',\n 'diesel',\n 'diet',\n 'differ',\n 'digital',\n 'dignity',\n 'dilemma',\n 'dinner',\n 'dinosaur',\n 'direct',\n 'dirt',\n 'disagree',\n 'discover',\n 'disease',\n 'dish',\n 'dismiss',\n 'disorder',\n 'display',\n 'distance',\n 'divert',\n 'divide',\n 'divorce',\n 'dizzy',\n 'doctor',\n 'document',\n 'dog',\n 'doll',\n 'dolphin',\n 'domain',\n 'donate',\n 'donkey',\n 'donor',\n 'door',\n 'dose',\n 'double',\n 'dove',\n 'draft',\n 'dragon',\n 'drama',\n 'drastic',\n 'draw',\n 'dream',\n 'dress',\n 'drift',\n 'drill',\n 'drink',\n 'drip',\n 'drive',\n 'drop',\n 'drum',\n 'dry',\n 'duck',\n 'dumb',\n 'dune',\n 'during',\n 'dust',\n 'dutch',\n 'duty',\n 'dwarf',\n 'dynamic',\n 'eager',\n 'eagle',\n 'early',\n 'earn',\n 'earth',\n 'easily',\n 'east',\n 'easy',\n 'echo',\n 'ecology',\n 'economy',\n 'edge',\n 'edit',\n 'educate',\n 'effort',\n 'egg',\n 'eight',\n 'either',\n 'elbow',\n 'elder',\n 'electric',\n 'elegant',\n 'element',\n 'elephant',\n 'elevator',\n 'elite',\n 'else',\n 'embark',\n 'embody',\n 'embrace',\n 'emerge',\n 'emotion',\n 'employ',\n 'empower',\n 'empty',\n 'enable',\n 'enact',\n 'end',\n 'endless',\n 'endorse',\n 'enemy',\n 'energy',\n 'enforce',\n 'engage',\n 'engine',\n 'enhance',\n 'enjoy',\n 'enlist',\n 'enough',\n 'enrich',\n 'enroll',\n 'ensure',\n 'enter',\n 'entire',\n 'entry',\n 'envelope',\n 'episode',\n 'equal',\n 'equip',\n 'era',\n 'erase',\n 'erode',\n 'erosion',\n 'error',\n 'erupt',\n 'escape',\n 'essay',\n 'essence',\n 'estate',\n 'eternal',\n 'ethics',\n 'evidence',\n 'evil',\n 'evoke',\n 'evolve',\n 'exact',\n 'example',\n 'excess',\n 'exchange',\n 'excite',\n 'exclude',\n 'excuse',\n 'execute',\n 'exercise',\n 'exhaust',\n 'exhibit',\n 'exile',\n 'exist',\n 'exit',\n 'exotic',\n 'expand',\n 'expect',\n 'expire',\n 'explain',\n 'expose',\n 'express',\n 'extend',\n 'extra',\n 'eye',\n 'eyebrow',\n 'fabric',\n 'face',\n 'faculty',\n 'fade',\n 'faint',\n 'faith',\n 'fall',\n 'false',\n 'fame',\n 'family',\n 'famous',\n 'fan',\n 'fancy',\n 'fantasy',\n 'farm',\n 'fashion',\n 'fat',\n 'fatal',\n 'father',\n 'fatigue',\n 'fault',\n 'favorite',\n 'feature',\n 'february',\n 'federal',\n 'fee',\n 'feed',\n 'feel',\n 'female',\n 'fence',\n 'festival',\n 'fetch',\n 'fever',\n 'few',\n 'fiber',\n 'fiction',\n 'field',\n 'figure',\n 'file',\n 'film',\n 'filter',\n 'final',\n 'find',\n 'fine',\n 'finger',\n 'finish',\n 'fire',\n 'firm',\n 'first',\n 'fiscal',\n 'fish',\n 'fit',\n 'fitness',\n 'fix',\n 'flag',\n 'flame',\n 'flash',\n 'flat',\n 'flavor',\n 'flee',\n 'flight',\n 'flip',\n 'float',\n 'flock',\n 'floor',\n 'flower',\n 'fluid',\n 'flush',\n 'fly',\n 'foam',\n 'focus',\n 'fog',\n 'foil',\n 'fold',\n 'follow',\n 'food',\n 'foot',\n 'force',\n 'forest',\n 'forget',\n 'fork',\n 'fortune',\n 'forum',\n 'forward',\n 'fossil',\n 'foster',\n 'found',\n 'fox',\n 'fragile',\n 'frame',\n 'frequent',\n 'fresh',\n 'friend',\n 'fringe',\n 'frog',\n 'front',\n 'frost',\n 'frown',\n 'frozen',\n 'fruit',\n 'fuel',\n 'fun',\n 'funny',\n 'furnace',\n 'fury',\n 'future',\n 'gadget',\n 'gain',\n 'galaxy',\n 'gallery',\n 'game',\n 'gap',\n 'garage',\n 'garbage',\n 'garden',\n 'garlic',\n 'garment',\n 'gas',\n 'gasp',\n 'gate',\n 'gather',\n 'gauge',\n 'gaze',\n 'general',\n 'genius',\n 'genre',\n 'gentle',\n 'genuine',\n 'gesture',\n 'ghost',\n 'giant',\n 'gift',\n 'giggle',\n 'ginger',\n 'giraffe',\n 'girl',\n 'give',\n 'glad',\n 'glance',\n 'glare',\n 'glass',\n 'glide',\n 'glimpse',\n 'globe',\n 'gloom',\n 'glory',\n 'glove',\n 'glow',\n 'glue',\n 'goat',\n 'goddess',\n 'gold',\n 'good',\n 'goose',\n 'gorilla',\n 'gospel',\n 'gossip',\n 'govern',\n 'gown',\n 'grab',\n 'grace',\n 'grain',\n 'grant',\n 'grape',\n 'grass',\n 'gravity',\n 'great',\n 'green',\n 'grid',\n 'grief',\n 'grit',\n 'grocery',\n 'group',\n 'grow',\n 'grunt',\n 'guard',\n 'guess',\n 'guide',\n 'guilt',\n 'guitar',\n 'gun',\n 'gym',\n 'habit',\n 'hair',\n 'half',\n 'hammer',\n 'hamster',\n 'hand',\n 'happy',\n 'harbor',\n 'hard',\n 'harsh',\n 'harvest',\n 'hat',\n 'have',\n 'hawk',\n 'hazard',\n 'head',\n 'health',\n 'heart',\n 'heavy',\n 'hedgehog',\n 'height',\n 'hello',\n 'helmet',\n 'help',\n 'hen',\n 'hero',\n 'hidden',\n 'high',\n 'hill',\n 'hint',\n 'hip',\n 'hire',\n 'history',\n 'hobby',\n 'hockey',\n 'hold',\n 'hole',\n 'holiday',\n 'hollow',\n 'home',\n 'honey',\n 'hood',\n 'hope',\n 'horn',\n 'horror',\n 'horse',\n 'hospital',\n 'host',\n 'hotel',\n 'hour',\n 'hover',\n 'hub',\n 'huge',\n 'human',\n 'humble',\n 'humor',\n 'hundred',\n 'hungry',\n 'hunt',\n 'hurdle',\n 'hurry',\n 'hurt',\n 'husband',\n 'hybrid',\n 'ice',\n 'icon',\n 'idea',\n 'identify',\n 'idle',\n 'ignore',\n 'ill',\n 'illegal',\n 'illness',\n 'image',\n 'imitate',\n 'immense',\n 'immune',\n 'impact',\n 'impose',\n 'improve',\n 'impulse',\n 'inch',\n 'include',\n 'income',\n 'increase',\n 'index',\n 'indicate',\n 'indoor',\n 'industry',\n 'infant',\n 'inflict',\n 'inform',\n 'inhale',\n 'inherit',\n 'initial',\n 'inject',\n 'injury',\n 'inmate',\n 'inner',\n 'innocent',\n 'input',\n 'inquiry',\n 'insane',\n 'insect',\n 'inside',\n 'inspire',\n 'install',\n 'intact',\n 'interest',\n 'into',\n 'invest',\n 'invite',\n 'involve',\n 'iron',\n 'island',\n 'isolate',\n 'issue',\n 'item',\n 'ivory',\n 'jacket',\n 'jaguar',\n 'jar',\n 'jazz',\n 'jealous',\n 'jeans',\n 'jelly',\n 'jewel',\n 'job',\n 'join',\n 'joke',\n 'journey',\n 'joy',\n 'judge',\n 'juice',\n 'jump',\n 'jungle',\n 'junior',\n 'junk',\n 'just',\n 'kangaroo',\n 'keen',\n 'keep',\n 'ketchup',\n 'key',\n 'kick',\n 'kid',\n 'kidney',\n 'kind',\n 'kingdom',\n 'kiss',\n 'kit',\n 'kitchen',\n 'kite',\n 'kitten',\n 'kiwi',\n 'knee',\n 'knife',\n 'knock',\n 'know',\n 'lab',\n 'label',\n 'labor',\n 'ladder',\n 'lady',\n 'lake',\n 'lamp',\n 'language',\n 'laptop',\n 'large',\n 'later',\n 'latin',\n 'laugh',\n 'laundry',\n 'lava',\n 'law',\n 'lawn',\n 'lawsuit',\n 'layer',\n 'lazy',\n 'leader',\n 'leaf',\n 'learn',\n 'leave',\n 'lecture',\n 'left',\n 'leg',\n 'legal',\n 'legend',\n 'leisure',\n 'lemon',\n 'lend',\n 'length',\n 'lens',\n 'leopard',\n 'lesson',\n 'letter',\n 'level',\n 'liar',\n 'liberty',\n 'library',\n 'license',\n 'life',\n 'lift',\n 'light',\n 'like',\n 'limb',\n 'limit',\n 'link',\n 'lion',\n 'liquid',\n 'list',\n 'little',\n 'live',\n 'lizard',\n 'load',\n 'loan',\n 'lobster',\n 'local',\n 'lock',\n 'logic',\n 'lonely',\n 'long',\n 'loop',\n 'lottery',\n 'loud',\n 'lounge',\n 'love',\n 'loyal',\n 'lucky',\n 'luggage',\n 'lumber',\n 'lunar',\n 'lunch',\n 'luxury',\n 'lyrics',\n 'machine',\n 'mad',\n 'magic',\n 'magnet',\n 'maid',\n 'mail',\n 'main',\n 'major',\n 'make',\n 'mammal',\n 'man',\n 'manage',\n 'mandate',\n 'mango',\n 'mansion',\n 'manual',\n 'maple',\n 'marble',\n 'march',\n 'margin',\n 'marine',\n 'market',\n 'marriage',\n 'mask',\n 'mass',\n 'master',\n 'match',\n 'material',\n 'math',\n 'matrix',\n 'matter',\n 'maximum',\n 'maze',\n 'meadow',\n 'mean',\n 'measure',\n 'meat',\n 'mechanic',\n 'medal',\n 'media',\n 'melody',\n 'melt',\n 'member',\n 'memory',\n 'mention',\n 'menu',\n 'mercy',\n 'merge',\n 'merit',\n 'merry',\n 'mesh',\n 'message',\n 'metal',\n 'method',\n 'middle',\n 'midnight',\n 'milk',\n 'million',\n 'mimic',\n 'mind',\n 'minimum',\n 'minor',\n 'minute',\n 'miracle',\n 'mirror',\n 'misery',\n 'miss',\n 'mistake',\n 'mix',\n 'mixed',\n 'mixture',\n 'mobile',\n 'model',\n 'modify',\n 'mom',\n 'moment',\n 'monitor',\n 'monkey',\n 'monster',\n 'month',\n 'moon',\n 'moral',\n 'more',\n 'morning',\n 'mosquito',\n 'mother',\n 'motion',\n 'motor',\n 'mountain',\n 'mouse',\n 'move',\n 'movie',\n 'much',\n 'muffin',\n 'mule',\n 'multiply',\n 'muscle',\n 'museum',\n 'mushroom',\n 'music',\n 'must',\n 'mutual',\n 'myself',\n 'mystery',\n 'myth',\n 'naive',\n 'name',\n 'napkin',\n 'narrow',\n 'nasty',\n 'nation',\n 'nature',\n 'near',\n 'neck',\n 'need',\n 'negative',\n 'neglect',\n 'neither',\n 'nephew',\n 'nerve',\n 'nest',\n 'net',\n 'network',\n 'neutral',\n 'never',\n 'news',\n 'next',\n 'nice',\n 'night',\n 'noble',\n 'noise',\n 'nominee',\n 'noodle',\n 'normal',\n 'north',\n 'nose',\n 'notable',\n 'note',\n 'nothing',\n 'notice',\n 'novel',\n 'now',\n 'nuclear',\n 'number',\n 'nurse',\n 'nut',\n 'oak',\n 'obey',\n 'object',\n 'oblige',\n 'obscure',\n 'observe',\n 'obtain',\n 'obvious',\n 'occur',\n 'ocean',\n 'october',\n 'odor',\n 'off',\n 'offer',\n 'office',\n 'often',\n 'oil',\n 'okay',\n 'old',\n 'olive',\n 'olympic',\n 'omit',\n 'once',\n 'one',\n 'onion',\n 'online',\n 'only',\n 'open',\n 'opera',\n 'opinion',\n 'oppose',\n 'option',\n 'orange',\n 'orbit',\n 'orchard',\n 'order',\n 'ordinary',\n 'organ',\n 'orient',\n 'original',\n 'orphan',\n 'ostrich',\n 'other',\n 'outdoor',\n 'outer',\n 'output',\n 'outside',\n 'oval',\n 'oven',\n 'over',\n 'own',\n 'owner',\n 'oxygen',\n 'oyster',\n 'ozone',\n 'pact',\n 'paddle',\n 'page',\n 'pair',\n 'palace',\n 'palm',\n 'panda',\n 'panel',\n 'panic',\n 'panther',\n 'paper',\n 'parade',\n 'parent',\n 'park',\n 'parrot',\n 'party',\n 'pass',\n 'patch',\n 'path',\n 'patient',\n 'patrol',\n 'pattern',\n 'pause',\n 'pave',\n 'payment',\n 'peace',\n 'peanut',\n 'pear',\n 'peasant',\n 'pelican',\n 'pen',\n 'penalty',\n 'pencil',\n 'people',\n 'pepper',\n 'perfect',\n 'permit',\n 'person',\n 'pet',\n 'phone',\n 'photo',\n 'phrase',\n 'physical',\n 'piano',\n 'picnic',\n 'picture',\n 'piece',\n 'pig',\n 'pigeon',\n 'pill',\n 'pilot',\n 'pink',\n 'pioneer',\n 'pipe',\n 'pistol',\n 'pitch',\n 'pizza',\n 'place',\n 'planet',\n 'plastic',\n 'plate',\n 'play',\n 'please',\n 'pledge',\n 'pluck',\n 'plug',\n 'plunge',\n 'poem',\n 'poet',\n 'point',\n 'polar',\n 'pole',\n 'police',\n 'pond',\n 'pony',\n 'pool',\n 'popular',\n 'portion',\n 'position',\n 'possible',\n 'post',\n 'potato',\n 'pottery',\n 'poverty',\n 'powder',\n 'power',\n 'practice',\n 'praise',\n 'predict',\n 'prefer',\n 'prepare',\n 'present',\n 'pretty',\n 'prevent',\n 'price',\n 'pride',\n 'primary',\n 'print',\n 'priority',\n 'prison',\n 'private',\n 'prize',\n 'problem',\n 'process',\n 'produce',\n 'profit',\n 'program',\n 'project',\n 'promote',\n 'proof',\n 'property',\n 'prosper',\n 'protect',\n 'proud',\n 'provide',\n 'public',\n 'pudding',\n 'pull',\n 'pulp',\n 'pulse',\n 'pumpkin',\n 'punch',\n 'pupil',\n 'puppy',\n 'purchase',\n 'purity',\n 'purpose',\n 'purse',\n 'push',\n 'put',\n 'puzzle',\n 'pyramid',\n 'quality',\n 'quantum',\n 'quarter',\n 'question',\n 'quick',\n 'quit',\n 'quiz',\n 'quote',\n 'rabbit',\n 'raccoon',\n 'race',\n 'rack',\n 'radar',\n 'radio',\n 'rail',\n 'rain',\n 'raise',\n 'rally',\n 'ramp',\n 'ranch',\n 'random',\n 'range',\n 'rapid',\n 'rare',\n 'rate',\n 'rather',\n 'raven',\n 'raw',\n 'razor',\n 'ready',\n 'real',\n 'reason',\n 'rebel',\n 'rebuild',\n 'recall',\n 'receive',\n 'recipe',\n 'record',\n 'recycle',\n 'reduce',\n 'reflect',\n 'reform',\n 'refuse',\n 'region',\n 'regret',\n 'regular',\n 'reject',\n 'relax',\n 'release',\n 'relief',\n 'rely',\n 'remain',\n 'remember',\n 'remind',\n 'remove',\n 'render',\n 'renew',\n 'rent',\n 'reopen',\n 'repair',\n 'repeat',\n 'replace',\n 'report',\n 'require',\n 'rescue',\n 'resemble',\n 'resist',\n 'resource',\n 'response',\n 'result',\n 'retire',\n 'retreat',\n 'return',\n 'reunion',\n 'reveal',\n 'review',\n 'reward',\n 'rhythm',\n 'rib',\n 'ribbon',\n 'rice',\n 'rich',\n 'ride',\n 'ridge',\n 'rifle',\n 'right',\n 'rigid',\n 'ring',\n 'riot',\n 'ripple',\n 'risk',\n 'ritual',\n 'rival',\n 'river',\n 'road',\n 'roast',\n 'robot',\n 'robust',\n 'rocket',\n 'romance',\n 'roof',\n 'rookie',\n 'room',\n 'rose',\n 'rotate',\n 'rough',\n 'round',\n 'route',\n 'royal',\n 'rubber',\n 'rude',\n 'rug',\n 'rule',\n 'run',\n 'runway',\n 'rural',\n 'sad',\n 'saddle',\n 'sadness',\n 'safe',\n 'sail',\n 'salad',\n 'salmon',\n 'salon',\n 'salt',\n 'salute',\n 'same',\n 'sample',\n 'sand',\n 'satisfy',\n 'satoshi',\n 'sauce',\n 'sausage',\n 'save',\n 'say',\n 'scale',\n 'scan',\n 'scare',\n 'scatter',\n 'scene',\n 'scheme',\n 'school',\n 'science',\n 'scissors',\n 'scorpion',\n 'scout',\n 'scrap',\n 'screen',\n 'script',\n 'scrub',\n 'sea',\n 'search',\n 'season',\n 'seat',\n 'second',\n 'secret',\n 'section',\n 'security',\n 'seed',\n 'seek',\n 'segment',\n 'select',\n 'sell',\n 'seminar',\n 'senior',\n 'sense',\n 'sentence',\n 'series',\n 'service',\n 'session',\n 'settle',\n 'setup',\n 'seven',\n 'shadow',\n 'shaft',\n 'shallow',\n 'share',\n 'shed',\n 'shell',\n 'sheriff',\n 'shield',\n 'shift',\n 'shine',\n 'ship',\n 'shiver',\n 'shock',\n 'shoe',\n 'shoot',\n 'shop',\n 'short',\n 'shoulder',\n 'shove',\n 'shrimp',\n 'shrug',\n 'shuffle',\n 'shy',\n 'sibling',\n 'sick',\n 'side',\n 'siege',\n 'sight',\n 'sign',\n 'silent',\n 'silk',\n 'silly',\n 'silver',\n 'similar',\n 'simple',\n 'since',\n 'sing',\n 'siren',\n 'sister',\n 'situate',\n 'six',\n 'size',\n 'skate',\n 'sketch',\n 'ski',\n 'skill',\n 'skin',\n 'skirt',\n 'skull',\n 'slab',\n 'slam',\n 'sleep',\n 'slender',\n 'slice',\n 'slide',\n 'slight',\n 'slim',\n 'slogan',\n 'slot',\n 'slow',\n 'slush',\n 'small',\n 'smart',\n 'smile',\n 'smoke',\n 'smooth',\n 'snack',\n 'snake',\n 'snap',\n 'sniff',\n 'snow',\n 'soap',\n 'soccer',\n 'social',\n 'sock',\n 'soda',\n 'soft',\n 'solar',\n 'soldier',\n 'solid',\n 'solution',\n 'solve',\n 'someone',\n 'song',\n 'soon',\n 'sorry',\n 'sort',\n 'soul',\n 'sound',\n 'soup',\n 'source',\n 'south',\n 'space',\n 'spare',\n 'spatial',\n 'spawn',\n 'speak',\n 'special',\n 'speed',\n 'spell',\n 'spend',\n 'sphere',\n 'spice',\n 'spider',\n 'spike',\n 'spin',\n 'spirit',\n 'split',\n 'spoil',\n 'sponsor',\n 'spoon',\n 'sport',\n 'spot',\n 'spray',\n 'spread',\n 'spring',\n 'spy',\n 'square',\n 'squeeze',\n 'squirrel',\n 'stable',\n 'stadium',\n 'staff',\n 'stage',\n 'stairs',\n 'stamp',\n 'stand',\n 'start',\n 'state',\n 'stay',\n 'steak',\n 'steel',\n 'stem',\n 'step',\n 'stereo',\n 'stick',\n 'still',\n 'sting',\n 'stock',\n 'stomach',\n 'stone',\n 'stool',\n 'story',\n 'stove',\n 'strategy',\n 'street',\n 'strike',\n 'strong',\n 'struggle',\n 'student',\n 'stuff',\n 'stumble',\n 'style',\n 'subject',\n 'submit',\n 'subway',\n 'success',\n 'such',\n 'sudden',\n 'suffer',\n 'sugar',\n 'suggest',\n 'suit',\n 'summer',\n 'sun',\n 'sunny',\n 'sunset',\n 'super',\n 'supply',\n 'supreme',\n 'sure',\n 'surface',\n 'surge',\n 'surprise',\n 'surround',\n 'survey',\n 'suspect',\n 'sustain',\n 'swallow',\n 'swamp',\n 'swap',\n 'swarm',\n 'swear',\n 'sweet',\n 'swift',\n 'swim',\n 'swing',\n 'switch',\n 'sword',\n 'symbol',\n 'symptom',\n 'syrup',\n 'system',\n 'table',\n 'tackle',\n 'tag',\n 'tail',\n 'talent',\n 'talk',\n 'tank',\n 'tape',\n 'target',\n 'task',\n 'taste',\n 'tattoo',\n 'taxi',\n 'teach',\n 'team',\n 'tell',\n 'ten',\n 'tenant',\n 'tennis',\n 'tent',\n 'term',\n 'test',\n 'text',\n 'thank',\n 'that',\n 'theme',\n 'then',\n 'theory',\n 'there',\n 'they',\n 'thing',\n 'this',\n 'thought',\n 'three',\n 'thrive',\n 'throw',\n 'thumb',\n 'thunder',\n 'ticket',\n 'tide',\n 'tiger',\n 'tilt',\n 'timber',\n 'time',\n 'tiny',\n 'tip',\n 'tired',\n 'tissue',\n 'title',\n 'toast',\n 'tobacco',\n 'today',\n 'toddler',\n 'toe',\n 'together',\n 'toilet',\n 'token',\n 'tomato',\n 'tomorrow',\n 'tone',\n 'tongue',\n 'tonight',\n 'tool',\n 'tooth',\n 'top',\n 'topic',\n 'topple',\n 'torch',\n 'tornado',\n 'tortoise',\n 'toss',\n 'total',\n 'tourist',\n 'toward',\n 'tower',\n 'town',\n 'toy',\n 'track',\n 'trade',\n 'traffic',\n 'tragic',\n 'train',\n 'transfer',\n 'trap',\n 'trash',\n 'travel',\n 'tray',\n 'treat',\n 'tree',\n 'trend',\n 'trial',\n 'tribe',\n 'trick',\n 'trigger',\n 'trim',\n 'trip',\n 'trophy',\n 'trouble',\n 'truck',\n 'true',\n 'truly',\n 'trumpet',\n 'trust',\n 'truth',\n 'try',\n 'tube',\n 'tuition',\n 'tumble',\n 'tuna',\n 'tunnel',\n 'turkey',\n 'turn',\n 'turtle',\n 'twelve',\n 'twenty',\n 'twice',\n 'twin',\n 'twist',\n 'two',\n 'type',\n 'typical',\n 'ugly',\n 'umbrella',\n 'unable',\n 'unaware',\n 'uncle',\n 'uncover',\n 'under',\n 'undo',\n 'unfair',\n 'unfold',\n 'unhappy',\n 'uniform',\n 'unique',\n 'unit',\n 'universe',\n 'unknown',\n 'unlock',\n 'until',\n 'unusual',\n 'unveil',\n 'update',\n 'upgrade',\n 'uphold',\n 'upon',\n 'upper',\n 'upset',\n 'urban',\n 'urge',\n 'usage',\n 'use',\n 'used',\n 'useful',\n 'useless',\n 'usual',\n 'utility',\n 'vacant',\n 'vacuum',\n 'vague',\n 'valid',\n 'valley',\n 'valve',\n 'van',\n 'vanish',\n 'vapor',\n 'various',\n 'vast',\n 'vault',\n 'vehicle',\n 'velvet',\n 'vendor',\n 'venture',\n 'venue',\n 'verb',\n 'verify',\n 'version',\n 'very',\n 'vessel',\n 'veteran',\n 'viable',\n 'vibrant',\n 'vicious',\n 'victory',\n 'video',\n 'view',\n 'village',\n 'vintage',\n 'violin',\n 'virtual',\n 'virus',\n 'visa',\n 'visit',\n 'visual',\n 'vital',\n 'vivid',\n 'vocal',\n 'voice',\n 'void',\n 'volcano',\n 'volume',\n 'vote',\n 'voyage',\n 'wage',\n 'wagon',\n 'wait',\n 'walk',\n 'wall',\n 'walnut',\n 'want',\n 'warfare',\n 'warm',\n 'warrior',\n 'wash',\n 'wasp',\n 'waste',\n 'water',\n 'wave',\n 'way',\n 'wealth',\n 'weapon',\n 'wear',\n 'weasel',\n 'weather',\n 'web',\n 'wedding',\n 'weekend',\n 'weird',\n 'welcome',\n 'west',\n 'wet',\n 'whale',\n 'what',\n 'wheat',\n 'wheel',\n 'when',\n 'where',\n 'whip',\n 'whisper',\n 'wide',\n 'width',\n 'wife',\n 'wild',\n 'will',\n 'win',\n 'window',\n 'wine',\n 'wing',\n 'wink',\n 'winner',\n 'winter',\n 'wire',\n 'wisdom',\n 'wise',\n 'wish',\n 'witness',\n 'wolf',\n 'woman',\n 'wonder',\n 'wood',\n 'wool',\n 'word',\n 'work',\n 'world',\n 'worry',\n 'worth',\n 'wrap',\n 'wreck',\n 'wrestle',\n 'wrist',\n 'write',\n 'wrong',\n 'yard',\n 'year',\n 'yellow',\n 'you',\n 'young',\n 'youth',\n 'zebra',\n 'zero',\n 'zone',\n 'zoo',\n];\n","export { english } from './words/english';\n\nexport enum Language {\n 'english' = 'english',\n}\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { sha256 } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { arrayify } from '@fuel-ts/utils';\n\n/* Mnemonic phrase composed by words from the provided wordlist it can be a text or a array of words */\nexport type MnemonicPhrase = string | Array<string>;\n\nexport function toUtf8Bytes(stri: string): Uint8Array {\n const str = stri.normalize('NFKD');\n\n const result = [];\n for (let i = 0; i < str.length; i += 1) {\n const c = str.charCodeAt(i);\n\n if (c < 0x80) {\n result.push(c);\n } else if (c < 0x800) {\n result.push((c >> 6) | 0xc0);\n result.push((c & 0x3f) | 0x80);\n } else if ((c & 0xfc00) === 0xd800) {\n i += 1;\n const c2 = str.charCodeAt(i);\n\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\n throw new FuelError(\n ErrorCode.INVALID_INPUT_PARAMETERS,\n 'Invalid UTF-8 in the input string.'\n );\n }\n\n // Surrogate Pair\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n result.push((pair >> 18) | 0xf0);\n result.push(((pair >> 12) & 0x3f) | 0x80);\n result.push(((pair >> 6) & 0x3f) | 0x80);\n result.push((pair & 0x3f) | 0x80);\n } else {\n result.push((c >> 12) | 0xe0);\n result.push(((c >> 6) & 0x3f) | 0x80);\n result.push((c & 0x3f) | 0x80);\n }\n }\n\n return Uint8Array.from(result);\n}\n\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits: number): number {\n return (1 << bits) - 1;\n}\n\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits: number): number {\n return ((1 << bits) - 1) << (8 - bits);\n}\n\nexport function getWords(mnemonic: MnemonicPhrase): Array<string> {\n if (!Array.isArray(mnemonic)) {\n return mnemonic.split(/\\s+/);\n }\n return mnemonic;\n}\n\nexport function getPhrase(mnemonic: MnemonicPhrase): string {\n if (Array.isArray(mnemonic)) {\n return mnemonic.join(' ');\n }\n return mnemonic;\n}\n\nexport function entropyToMnemonicIndices(entropy: Uint8Array): Array<number> {\n const indices: Array<number> = [0];\n\n let remainingBits = 11;\n for (let i = 0; i < entropy.length; i += 1) {\n if (remainingBits > 8) {\n indices[indices.length - 1] <<= 8;\n indices[indices.length - 1] |= entropy[i];\n\n remainingBits -= 8;\n // This byte will complete an 11-bit index\n } else {\n indices[indices.length - 1] <<= remainingBits;\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n\n // Start the next word\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n\n remainingBits += 3;\n }\n }\n\n // Compute the checksum bits\n const checksumBits = entropy.length / 4;\n const checksum = arrayify(sha256(entropy))[0] & getUpperMask(checksumBits);\n\n // Shift the checksum into the word indices\n indices[indices.length - 1] <<= checksumBits;\n indices[indices.length - 1] |= checksum >> (8 - checksumBits);\n\n return indices;\n}\n\nexport function mnemonicWordsToEntropy(words: Array<string>, wordlist: Array<string>): BytesLike {\n const size = Math.ceil((11 * words.length) / 8);\n const entropy = arrayify(new Uint8Array(size));\n\n let offset = 0;\n for (let i = 0; i < words.length; i += 1) {\n const index = wordlist.indexOf(words[i].normalize('NFKD'));\n if (index === -1) {\n throw new FuelError(\n ErrorCode.INVALID_MNEMONIC,\n `Invalid mnemonic: the word '${words[i]}' is not found in the provided wordlist.`\n );\n }\n\n for (let bit = 0; bit < 11; bit += 1) {\n if (index & (1 << (10 - bit))) {\n entropy[offset >> 3] |= 1 << (7 - (offset % 8));\n }\n offset += 1;\n }\n }\n const entropyBits = (32 * words.length) / 3;\n const checksumBits = words.length / 3;\n const checksumMask = getUpperMask(checksumBits);\n const checksum = arrayify(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\n throw new FuelError(\n ErrorCode.INVALID_CHECKSUM,\n 'Checksum validation failed for the provided mnemonic.'\n );\n }\n\n return entropy.slice(0, entropyBits / 8);\n}\n","//\n// Because WalletLocked and WalletUnlocked has a cycle dependency\n// it's not possible to split the two classes in different files\n//\n/* eslint-disable max-classes-per-file */\nimport type { BytesLike } from '@fuel-ts/interfaces';\n\nimport { Account } from '../account';\nimport { HDWallet } from '../hdwallet';\nimport { Mnemonic } from '../mnemonic';\nimport type { Provider } from '../providers';\nimport { Signer } from '../signer';\n\nimport { BaseWalletUnlocked } from './base-wallet-unlocked';\nimport { decryptKeystoreWallet } from './keystore-wallet';\n\nexport interface GenerateOptions {\n /** Additional entropy for the random bytes */\n entropy?: BytesLike;\n provider?: Provider;\n}\n\n/**\n * `WalletLocked` provides the functionalities for a locked wallet.\n */\nexport class WalletLocked extends Account {\n /**\n * Unlocks the wallet using the provided private key and returns an instance of WalletUnlocked.\n *\n * @param privateKey - The private key used to unlock the wallet.\n * @returns An instance of WalletUnlocked.\n */\n unlock(privateKey: BytesLike): WalletUnlocked {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return new WalletUnlocked(privateKey, this._provider);\n }\n}\n\n/**\n * `WalletUnlocked` provides the functionalities for an unlocked wallet.\n */\nexport class WalletUnlocked extends BaseWalletUnlocked {\n /**\n * Locks the wallet and returns an instance of WalletLocked.\n *\n * @returns An instance of WalletLocked.\n */\n lock(): WalletLocked {\n this.signer = () => new Signer('0x00');\n return new WalletLocked(this.address, this._provider);\n }\n\n /**\n * Generate a new Wallet Unlocked with a random key pair.\n *\n * @param generateOptions - Options to customize the generation process (optional).\n * @returns An instance of WalletUnlocked.\n */\n static generate(generateOptions?: GenerateOptions): WalletUnlocked {\n const privateKey = Signer.generatePrivateKey(generateOptions?.entropy);\n\n return new WalletUnlocked(privateKey, generateOptions?.provider);\n }\n\n /**\n * Create a Wallet Unlocked from a seed.\n *\n * @param seed - The seed phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @returns An instance of WalletUnlocked.\n */\n static fromSeed(seed: string, path?: string, provider?: Provider): WalletUnlocked {\n const hdWallet = HDWallet.fromSeed(seed);\n const childWallet = hdWallet.derivePath(path || WalletUnlocked.defaultPath);\n\n return new WalletUnlocked(<string>childWallet.privateKey, provider);\n }\n\n /**\n * Create a Wallet Unlocked from a mnemonic phrase.\n *\n * @param mnemonic - The mnemonic phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @param passphrase - The passphrase for the mnemonic (optional).\n * @returns An instance of WalletUnlocked.\n */\n static fromMnemonic(\n mnemonic: string,\n path?: string,\n passphrase?: BytesLike,\n provider?: Provider\n ): WalletUnlocked {\n const seed = Mnemonic.mnemonicToSeed(mnemonic, passphrase);\n const hdWallet = HDWallet.fromSeed(seed);\n const childWallet = hdWallet.derivePath(path || WalletUnlocked.defaultPath);\n\n return new WalletUnlocked(<string>childWallet.privateKey, provider);\n }\n\n /**\n * Create a Wallet Unlocked from an extended key.\n *\n * @param extendedKey - The extended key.\n * @param provider - A Provider instance (optional).\n * @returns An instance of WalletUnlocked.\n */\n static fromExtendedKey(extendedKey: string, provider?: Provider): WalletUnlocked {\n const hdWallet = HDWallet.fromExtendedKey(extendedKey);\n\n return new WalletUnlocked(<string>hdWallet.privateKey, provider);\n }\n\n /**\n * Create a Wallet Unlocked from an encrypted JSON.\n *\n * @param jsonWallet - The encrypted JSON keystore.\n * @param password - The password to decrypt the JSON.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static async fromEncryptedJson(\n jsonWallet: string,\n password: string,\n provider?: Provider\n ): Promise<WalletUnlocked> {\n const privateKey = await decryptKeystoreWallet(jsonWallet, password);\n\n return new WalletUnlocked(privateKey, provider);\n }\n}\n","import type { AbstractAddress, BytesLike } from '@fuel-ts/interfaces';\n\nimport type { Provider } from '../providers';\n\nimport { WalletLocked, WalletUnlocked } from './wallets';\n\n/**\n * `Wallet` provides methods to create locked and unlocked wallet instances.\n */\nexport class Wallet {\n /**\n * Creates a locked wallet instance from an address and a provider.\n *\n * @param address - The address of the wallet.\n * @param provider - A Provider instance (optional).\n * @returns A locked wallet instance.\n */\n static fromAddress(address: string | AbstractAddress, provider?: Provider): WalletLocked {\n return new WalletLocked(address, provider);\n }\n\n /**\n * Creates an unlocked wallet instance from a private key and a provider.\n *\n * @param privateKey - The private key of the wallet.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static fromPrivateKey(privateKey: BytesLike, provider?: Provider) {\n return new WalletUnlocked(privateKey, provider);\n }\n\n /**\n * Generate a new Wallet Unlocked with a random key pair.\n *\n * @param generateOptions - Options to customize the generation process (optional).\n * @returns An unlocked wallet instance.\n */\n static generate = WalletUnlocked.generate;\n\n /**\n * Create a Wallet Unlocked from a seed.\n *\n * @param seed - The seed phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @returns An unlocked wallet instance.\n */\n static fromSeed = WalletUnlocked.fromSeed;\n\n /**\n * Create a Wallet Unlocked from a mnemonic phrase.\n *\n * @param mnemonic - The mnemonic phrase.\n * @param provider - A Provider instance (optional).\n * @param path - The derivation path (optional).\n * @param passphrase - The passphrase for the mnemonic (optional).\n * @returns An unlocked wallet instance.\n */\n static fromMnemonic = WalletUnlocked.fromMnemonic;\n\n /**\n * Create a Wallet Unlocked from an extended key.\n *\n * @param extendedKey - The extended key.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static fromExtendedKey = WalletUnlocked.fromExtendedKey;\n\n /**\n * Create a Wallet Unlocked from an encrypted JSON.\n *\n * @param jsonWallet - The encrypted JSON keystore.\n * @param password - The password to decrypt the JSON.\n * @param provider - A Provider instance (optional).\n * @returns An unlocked wallet instance.\n */\n static fromEncryptedJson = WalletUnlocked.fromEncryptedJson;\n}\n","import { Address } from '@fuel-ts/address';\nimport type { Keystore } from '@fuel-ts/crypto';\nimport { encrypt, decrypt } from '@fuel-ts/crypto';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\nimport { EventEmitter } from 'events';\n\nimport type { WalletUnlocked } from '../wallet';\n\nimport { MemoryStorage } from './storages/memory-storage';\nimport type {\n StorageAbstract,\n WalletManagerAccount,\n VaultConfig,\n VaultsState,\n WalletManagerOptions,\n WalletManagerState,\n Vault,\n} from './types';\nimport { MnemonicVault } from './vaults/mnemonic-vault';\nimport { PrivateKeyVault } from './vaults/privatekey-vault';\n\nconst ERROR_MESSAGES = {\n invalid_vault_type: 'The provided Vault type is invalid.',\n address_not_found: 'No private key found for address the specified wallet address.',\n vault_not_found: 'The specified vault was not found.',\n wallet_not_unlocked: 'The wallet is currently locked.',\n passphrase_not_match: 'The provided passphrase did not match the expected value.',\n};\n\n/**\n * Generic assert function to avoid undesirable errors\n */\nfunction assert(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new FuelError(ErrorCode.WALLET_MANAGER_ERROR, message);\n }\n}\n\n/**\n * WalletManager is a upper package to manage multiple vaults like mnemonic and privateKeys.\n *\n * - VaultTypes can be add to `WalletManager.Vaults` enabling to add custom Vault types.\n * - Storage can be instantiate when initializing enabling custom storage types.\n */\nexport class WalletManager extends EventEmitter {\n /**\n * Vaults\n *\n * Vaults are responsible to store secret keys and return an `Wallet` instance,\n * to interact with the network.\n *\n * Each vault has access to its own state\n *\n */\n static Vaults = [MnemonicVault, PrivateKeyVault];\n /**\n * Storage\n *\n * Persistent encrypted data. `The default storage works only on memory`.\n */\n readonly storage: StorageAbstract = new MemoryStorage();\n /* Key name passed to the storage */\n readonly STORAGE_KEY: string = 'WalletManager';\n\n // `This variables are only accessible from inside the class`\n #vaults: VaultsState = [];\n #passphrase = '';\n #isLocked: boolean = true;\n\n constructor(options?: WalletManagerOptions) {\n super();\n this.storage = options?.storage || this.storage;\n }\n\n get isLocked(): boolean {\n return this.#isLocked;\n }\n\n /**\n * Return the vault serialized object containing all the privateKeys,\n * the format of the return depends on the Vault type.\n */\n exportVault<T extends Vault>(vaultId: number): ReturnType<T['serialize']> {\n assert(!this.#isLocked, ERROR_MESSAGES.wallet_not_unlocked);\n const vaultState = this.#vaults.find((_, idx) => idx === vaultId);\n assert(vaultState, ERROR_MESSAGES.vault_not_found);\n return vaultState.vault.serialize() as ReturnType<T['serialize']>;\n }\n\n /**\n * List all vaults on the Wallet Manager, this function not return secret's\n */\n getVaults(): Array<{ title?: string; type: string; vaultId: number }> {\n return this.#vaults.map((v, idx) => ({\n title: v.title,\n type: v.type,\n vaultId: idx,\n }));\n }\n\n /**\n * List all accounts on the Wallet Manager not vault information is revealed\n */\n getAccounts(): Array<WalletManagerAccount> {\n // Return all WalletManagerAccounts from vaults\n return this.#vaults.flatMap<WalletManagerAccount>((vaultState, vaultId) =>\n vaultState.vault.getAccounts().map((account) => ({ ...account, vaultId }))\n );\n }\n\n /**\n * Create a Wallet instance for the specific account\n */\n getWallet(address: string | AbstractAddress): WalletUnlocked {\n const ownerAddress = Address.fromAddressOrString(address);\n const vaultState = this.#vaults.find((vs) =>\n vs.vault.getAccounts().find((a) => a.address.equals(ownerAddress))\n );\n assert(vaultState, ERROR_MESSAGES.address_not_found);\n\n return vaultState.vault.getWallet(ownerAddress);\n }\n\n /**\n * Export specific account privateKey\n */\n exportPrivateKey(address: string | AbstractAddress) {\n const ownerAddress = Address.fromAddressOrString(address);\n assert(!this.#isLocked, ERROR_MESSAGES.wallet_not_unlocked);\n const vaultState = this.#vaults.find((vs) =>\n vs.vault.getAccounts().find((a) => a.address.equals(ownerAddress))\n );\n assert(vaultState, ERROR_MESSAGES.address_not_found);\n\n return vaultState.vault.exportAccount(ownerAddress);\n }\n\n /**\n * Add account to a selected vault or on the first vault as default.\n * If not vaults are adds it will return error\n */\n async addAccount(options?: { vaultId: number }) {\n // Make sure before add new vault state is fully loaded\n await this.loadState();\n // Get vault instance\n const vaultState = this.#vaults[options?.vaultId || 0];\n await assert(vaultState, ERROR_MESSAGES.vault_not_found);\n // Add account on vault\n const account = vaultState.vault.addAccount();\n // Save the accounts state\n await this.saveState();\n // Return account\n return account;\n }\n\n /**\n * Remove vault by index, by remove the vault you also remove all accounts\n * created by the vault.\n */\n async removeVault(index: number) {\n this.#vaults.splice(index, 1);\n await this.saveState();\n }\n\n /**\n * Add Vault, the `vaultConfig.type` will look for the Vaults supported if\n * didn't found it will throw.\n */\n async addVault(vaultConfig: VaultConfig) {\n // Make sure before add new vault state is fully loaded\n await this.loadState();\n // Check if vault is supported\n const Vault = this.getVaultClass(vaultConfig.type);\n // create Vault instance\n const vault = new Vault(vaultConfig);\n // Push vaults to state\n this.#vaults = this.#vaults.concat({\n title: vaultConfig.title,\n type: vaultConfig.type,\n vault,\n });\n // Persist data on storage\n await this.saveState();\n }\n\n /**\n * Lock wallet. It removes passphrase from class instance, encrypt and hide all address and\n * secrets.\n */\n lock() {\n this.#isLocked = true;\n // Clean state vaults from state\n this.#vaults = [];\n // Clean password from state\n this.#passphrase = '';\n // Emit event that wallet is locked\n this.emit('lock');\n }\n\n /**\n * Unlock wallet. It sets passphrase on WalletManger instance load all address from configured vaults.\n * Vaults with secrets are not unlocked or instantiated on this moment.\n */\n async unlock(passphrase: string) {\n // Set password on state\n this.#passphrase = passphrase;\n // Set locked state to false\n this.#isLocked = false;\n // Try to load state with passphrase\n try {\n // Load state with passphrase\n await this.loadState();\n // Emit event that wallet is unlocked\n this.emit('unlock');\n } catch (err) {\n // If passphrase is wrong lock wallet\n await this.lock();\n // Forward error\n throw err;\n }\n }\n\n /**\n * Update WalletManager encryption passphrase\n */\n async updatePassphrase(oldpass: string, newpass: string) {\n const isLocked = this.#isLocked;\n // Unlock wallet to decrypt data\n await this.unlock(oldpass);\n // Set new password on state\n this.#passphrase = newpass;\n // Persist data on storage\n await this.saveState();\n // Load state with new password\n await this.loadState();\n // If wallet was locked, lock the wallet again\n if (isLocked) {\n await this.lock();\n }\n }\n\n /**\n * Retrieve and decrypt WalletManager state from storage\n */\n async loadState() {\n await assert(!this.#isLocked, ERROR_MESSAGES.wallet_not_unlocked);\n\n const data = await this.storage.getItem(this.STORAGE_KEY);\n if (data) {\n const state = await decrypt<WalletManagerState>(this.#passphrase, <Keystore>JSON.parse(data));\n this.#vaults = this.#deserializeVaults(state.vaults);\n }\n }\n\n /**\n * Store encrypted WalletManager state on storage\n */\n private async saveState() {\n await assert(!this.#isLocked, ERROR_MESSAGES.wallet_not_unlocked);\n\n const encryptedData = await encrypt(this.#passphrase, {\n vaults: this.#serializeVaults(this.#vaults),\n });\n await this.storage.setItem(this.STORAGE_KEY, JSON.stringify(encryptedData));\n this.emit('update');\n }\n\n /**\n * Serialize all vaults to store\n *\n * `This is only accessible from inside the class`\n */\n #serializeVaults(vaults: VaultsState) {\n return vaults.map(({ title, type, vault }) => ({\n title,\n type,\n data: vault.serialize(),\n }));\n }\n\n /**\n * Deserialize all vaults to state\n *\n * `This is only accessible from inside the class`\n */\n #deserializeVaults(vaults: VaultsState) {\n return vaults.map(({ title, type, data: vaultConfig }) => {\n const VaultClass = this.getVaultClass(type);\n return {\n title,\n type,\n vault: new VaultClass(<VaultConfig>vaultConfig),\n };\n });\n }\n\n /**\n * Return a instantiable Class reference from `WalletManager.Vaults` supported list.\n */\n private getVaultClass(type: string) {\n const VaultClass = WalletManager.Vaults.find((v) => v.type === type);\n\n assert(VaultClass, ERROR_MESSAGES.invalid_vault_type);\n\n return VaultClass;\n }\n}\n","import type { StorageAbstract } from '../types';\n\nexport class MemoryStorage implements StorageAbstract {\n storage = new Map<string, unknown>();\n\n async getItem<T>(key: string): Promise<T | null> {\n const item = await this.storage.get(key);\n return item as T | null;\n }\n\n async setItem(key: string, value: string) {\n await this.storage.set(key, value);\n }\n\n async removeItem(key: string) {\n await this.storage.delete(key);\n }\n\n async clear() {\n await this.storage.clear();\n }\n}\n","import { Address } from '@fuel-ts/address';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\n\nimport { Mnemonic } from '../../mnemonic';\nimport type { WalletUnlocked } from '../../wallet';\nimport { Wallet } from '../../wallet';\nimport type { Vault } from '../types';\n\nexport interface MnemonicVaultOptions {\n secret?: string;\n rootPath?: string;\n numberOfAccounts?: number | null;\n}\n\nexport class MnemonicVault implements Vault<MnemonicVaultOptions> {\n static readonly type = 'mnemonic';\n readonly #secret: string;\n\n pathKey = '{}';\n rootPath: string = `m/44'/1179993420'/${this.pathKey}'/0/0`;\n numberOfAccounts: number = 0;\n\n constructor(options: MnemonicVaultOptions) {\n this.#secret = options.secret || Mnemonic.generate();\n this.rootPath = options.rootPath || this.rootPath;\n // On creating the vault also adds one account\n this.numberOfAccounts = options.numberOfAccounts || 1;\n }\n\n getDerivePath(index: number) {\n if (this.rootPath.includes(this.pathKey)) {\n return this.rootPath.replace(this.pathKey, String(index));\n }\n return `${this.rootPath}/${index}`;\n }\n\n serialize(): MnemonicVaultOptions {\n return {\n secret: this.#secret,\n rootPath: this.rootPath,\n numberOfAccounts: this.numberOfAccounts,\n };\n }\n\n getAccounts() {\n const accounts = [];\n let numberOfAccounts = 0;\n\n // Create all accounts to current vault\n do {\n const wallet = Wallet.fromMnemonic(this.#secret, this.getDerivePath(numberOfAccounts));\n accounts.push({\n publicKey: wallet.publicKey,\n address: wallet.address,\n });\n numberOfAccounts += 1;\n } while (numberOfAccounts < this.numberOfAccounts);\n\n return accounts;\n }\n\n addAccount() {\n this.numberOfAccounts += 1;\n const wallet = Wallet.fromMnemonic(this.#secret, this.getDerivePath(this.numberOfAccounts - 1));\n\n return {\n publicKey: wallet.publicKey,\n address: wallet.address,\n };\n }\n\n exportAccount(address: string | AbstractAddress): string {\n let numberOfAccounts = 0;\n const ownerAddress = Address.fromAddressOrString(address);\n // Look for the account that has the same address\n do {\n const wallet = Wallet.fromMnemonic(this.#secret, this.getDerivePath(numberOfAccounts));\n if (wallet.address.equals(ownerAddress)) {\n return wallet.privateKey;\n }\n numberOfAccounts += 1;\n } while (numberOfAccounts < this.numberOfAccounts);\n\n throw new FuelError(\n ErrorCode.WALLET_MANAGER_ERROR,\n `Account with address '${address}' not found in derived wallets.`\n );\n }\n\n getWallet(address: string | AbstractAddress): WalletUnlocked {\n const privateKey = this.exportAccount(address);\n return Wallet.fromPrivateKey(privateKey);\n }\n}\n","import { Address } from '@fuel-ts/address';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\n\nimport type { WalletUnlocked } from '../../wallet';\nimport { Wallet } from '../../wallet';\nimport type { WalletManagerAccount, Vault } from '../types';\n\nexport interface PkVaultOptions {\n secret?: string;\n accounts?: Array<string>;\n}\n\nexport class PrivateKeyVault implements Vault<PkVaultOptions> {\n static readonly type = 'privateKey';\n\n #privateKeys: Array<string> = [];\n\n /**\n * If privateKey vault is initialized with a secretKey, it creates\n * one account with the fallowing secret\n */\n constructor(options: PkVaultOptions = {}) {\n if (options.secret) {\n this.#privateKeys = [options.secret];\n } else {\n this.#privateKeys = options.accounts || [Wallet.generate().privateKey];\n }\n }\n\n serialize(): PkVaultOptions {\n return {\n accounts: this.#privateKeys,\n };\n }\n\n getPublicAccount(privateKey: string) {\n const wallet = Wallet.fromPrivateKey(privateKey);\n return {\n address: wallet.address,\n publicKey: wallet.publicKey,\n };\n }\n\n getAccounts(): WalletManagerAccount[] {\n return this.#privateKeys.map((pk) => this.getPublicAccount(pk));\n }\n\n addAccount() {\n const wallet = Wallet.generate();\n\n this.#privateKeys.push(wallet.privateKey);\n\n return this.getPublicAccount(wallet.privateKey);\n }\n\n exportAccount(address: string | AbstractAddress): string {\n const ownerAddress = Address.fromAddressOrString(address);\n const privateKey = this.#privateKeys.find((pk) =>\n Wallet.fromPrivateKey(pk).address.equals(ownerAddress)\n );\n\n if (!privateKey) {\n throw new FuelError(\n ErrorCode.WALLET_MANAGER_ERROR,\n `No private key found for address '${address}'.`\n );\n }\n\n return privateKey;\n }\n\n getWallet(address: string | AbstractAddress): WalletUnlocked {\n const privateKey = this.exportAccount(address);\n return Wallet.fromPrivateKey(privateKey);\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\n\nimport type { WalletUnlocked } from '../wallet';\n\nexport type WalletManagerAccount = {\n address: AbstractAddress;\n publicKey: string;\n vaultId?: number;\n};\n\nexport type WalletManagerOptions = {\n storage: StorageAbstract;\n};\n\nexport type VaultConfig = {\n type: string;\n title?: string;\n secret?: string;\n};\n\nexport type VaultsState = Array<{\n type: string;\n title?: string;\n data?: VaultConfig;\n vault: Vault;\n}>;\n\nexport interface WalletManagerState {\n vaults: VaultsState;\n}\n\nexport abstract class Vault<TOptions = { secret?: string }> {\n static readonly type: string;\n\n constructor(_options: TOptions) {\n throw new FuelError(ErrorCode.NOT_IMPLEMENTED, 'Not implemented.');\n }\n\n serialize(): TOptions {\n throw new FuelError(ErrorCode.NOT_IMPLEMENTED, 'Not implemented.');\n }\n\n getAccounts(): WalletManagerAccount[] {\n throw new FuelError(ErrorCode.NOT_IMPLEMENTED, 'Not implemented.');\n }\n\n addAccount(): WalletManagerAccount {\n throw new FuelError(ErrorCode.NOT_IMPLEMENTED, 'Not implemented.');\n }\n\n exportAccount(_address: AbstractAddress): string {\n throw new FuelError(ErrorCode.NOT_IMPLEMENTED, 'Not implemented.');\n }\n\n getWallet(_address: AbstractAddress): WalletUnlocked {\n throw new FuelError(ErrorCode.NOT_IMPLEMENTED, 'Not implemented.');\n }\n}\n\nexport abstract class StorageAbstract {\n abstract setItem(key: string, value: string): Promise<void>;\n abstract getItem(key: string): Promise<string | null | undefined>;\n abstract removeItem(key: string): Promise<void>;\n abstract clear(): Promise<void>;\n}\n","import type { JsonAbi, InputValue } from '@fuel-ts/abi-coder';\nimport {\n Interface,\n INPUT_COIN_FIXED_SIZE,\n WORD_SIZE,\n calculateVmTxMemory,\n SCRIPT_FIXED_SIZE,\n} from '@fuel-ts/abi-coder';\nimport { Address } from '@fuel-ts/address';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { ByteArrayCoder, InputType } from '@fuel-ts/transactions';\nimport { arrayify, hexlify } from '@fuel-ts/utils';\n\nimport { Account } from '../account';\nimport { transactionRequestify, BaseTransactionRequest } from '../providers';\nimport type {\n CallResult,\n CoinQuantityLike,\n ExcludeResourcesOption,\n Provider,\n Resource,\n TransactionRequestInput,\n TransactionRequestLike,\n TransactionResponse,\n} from '../providers';\n\nimport { getPredicateRoot } from './utils';\n\nexport type PredicateParams<T = InputValue[]> = {\n bytecode: BytesLike;\n provider: Provider;\n abi?: JsonAbi;\n inputData?: T;\n configurableConstants?: { [name: string]: unknown };\n};\n\n/**\n * `Predicate` provides methods to populate transaction data with predicate information and sending transactions with them.\n */\nexport class Predicate<TInputData extends InputValue[]> extends Account {\n bytes: Uint8Array;\n predicateData: TInputData = [] as unknown as TInputData;\n interface?: Interface;\n\n /**\n * Creates an instance of the Predicate class.\n *\n * @param bytecode - The bytecode of the predicate.\n * @param abi - The JSON ABI of the predicate.\n * @param provider - The provider used to interact with the blockchain.\n * @param inputData - The predicate input data (optional).\n * @param configurableConstants - Optional configurable constants for the predicate.\n */\n constructor({\n bytecode,\n abi,\n provider,\n inputData,\n configurableConstants,\n }: PredicateParams<TInputData>) {\n const { predicateBytes, predicateInterface } = Predicate.processPredicateData(\n bytecode,\n abi,\n configurableConstants\n );\n const address = Address.fromB256(getPredicateRoot(predicateBytes));\n super(address, provider);\n\n this.bytes = predicateBytes;\n this.interface = predicateInterface;\n if (inputData !== undefined && inputData.length > 0) {\n this.predicateData = inputData;\n }\n }\n\n /**\n * Populates the transaction data with predicate data.\n *\n * @param transactionRequestLike - The transaction request-like object.\n * @returns The transaction request with predicate data.\n */\n populateTransactionPredicateData(transactionRequestLike: TransactionRequestLike) {\n const request = transactionRequestify(transactionRequestLike);\n\n const { policies } = BaseTransactionRequest.getPolicyMeta(request);\n\n request.inputs?.forEach((input: TransactionRequestInput) => {\n if (input.type === InputType.Coin && hexlify(input.owner) === this.address.toB256()) {\n // eslint-disable-next-line no-param-reassign\n input.predicate = hexlify(this.bytes);\n // eslint-disable-next-line no-param-reassign\n input.predicateData = hexlify(this.getPredicateData(policies.length));\n }\n });\n\n return request;\n }\n\n /**\n * Sends a transaction with the populated predicate data.\n *\n * @param transactionRequestLike - The transaction request-like object.\n * @returns A promise that resolves to the transaction response.\n */\n sendTransaction(transactionRequestLike: TransactionRequestLike): Promise<TransactionResponse> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n return super.sendTransaction(transactionRequest, { estimateTxDependencies: false });\n }\n\n /**\n * Simulates a transaction with the populated predicate data.\n *\n * @param transactionRequestLike - The transaction request-like object.\n * @returns A promise that resolves to the call result.\n */\n simulateTransaction(transactionRequestLike: TransactionRequestLike): Promise<CallResult> {\n const transactionRequest = transactionRequestify(transactionRequestLike);\n return super.simulateTransaction(transactionRequest, { estimateTxDependencies: false });\n }\n\n private getPredicateData(policiesLength: number): Uint8Array {\n if (!this.predicateData.length) {\n return new Uint8Array();\n }\n\n const mainFn = this.interface?.functions.main;\n const paddedCode = new ByteArrayCoder(this.bytes.length).encode(this.bytes);\n\n const VM_TX_MEMORY = calculateVmTxMemory({\n maxInputs: this.provider.getChain().consensusParameters.maxInputs.toNumber(),\n });\n const OFFSET =\n VM_TX_MEMORY +\n SCRIPT_FIXED_SIZE +\n INPUT_COIN_FIXED_SIZE +\n WORD_SIZE +\n paddedCode.byteLength +\n policiesLength * WORD_SIZE;\n\n return mainFn?.encodeArguments(this.predicateData, OFFSET) || new Uint8Array();\n }\n\n /**\n * Processes the predicate data and returns the altered bytecode and interface.\n *\n * @param bytes - The bytes of the predicate.\n * @param jsonAbi - The JSON ABI of the predicate.\n * @param configurableConstants - Optional configurable constants for the predicate.\n * @returns An object containing the new predicate bytes and interface.\n */\n private static processPredicateData(\n bytes: BytesLike,\n jsonAbi?: JsonAbi,\n configurableConstants?: { [name: string]: unknown }\n ) {\n let predicateBytes = arrayify(bytes);\n let abiInterface: Interface | undefined;\n\n if (jsonAbi) {\n abiInterface = new Interface(jsonAbi);\n if (abiInterface.functions.main === undefined) {\n throw new FuelError(\n ErrorCode.ABI_MAIN_METHOD_MISSING,\n 'Cannot use ABI without \"main\" function.'\n );\n }\n }\n\n if (configurableConstants && Object.keys(configurableConstants).length) {\n predicateBytes = Predicate.setConfigurableConstants(\n predicateBytes,\n configurableConstants,\n abiInterface\n );\n }\n\n return {\n predicateBytes,\n predicateInterface: abiInterface,\n };\n }\n\n /**\n * Retrieves resources satisfying the spend query for the account.\n *\n * @param quantities - IDs of coins to exclude.\n * @param excludedIds - IDs of resources to be excluded from the query.\n * @returns A promise that resolves to an array of Resources.\n */\n async getResourcesToSpend(\n quantities: CoinQuantityLike[] /** IDs of coins to exclude */,\n excludedIds?: ExcludeResourcesOption\n ): Promise<Resource[]> {\n const resources = await this.provider.getResourcesToSpend(\n this.address,\n quantities,\n excludedIds\n );\n return resources.map((resource) => ({\n ...resource,\n predicate: hexlify(this.bytes),\n padPredicateData: (policiesLength: number) => hexlify(this.getPredicateData(policiesLength)),\n }));\n }\n\n /**\n * Sets the configurable constants for the predicate.\n *\n * @param bytes - The bytes of the predicate.\n * @param configurableConstants - Configurable constants to be set.\n * @param abiInterface - The ABI interface of the predicate.\n * @returns The mutated bytes with the configurable constants set.\n */\n private static setConfigurableConstants(\n bytes: Uint8Array,\n configurableConstants: { [name: string]: unknown },\n abiInterface?: Interface\n ) {\n const mutatedBytes = bytes;\n\n try {\n if (!abiInterface) {\n throw new Error(\n 'Cannot validate configurable constants because the Predicate was instantiated without a JSON ABI'\n );\n }\n\n if (Object.keys(abiInterface.configurables).length === 0) {\n throw new Error('Predicate has no configurable constants to be set');\n }\n\n Object.entries(configurableConstants).forEach(([key, value]) => {\n if (!abiInterface?.configurables[key]) {\n throw new Error(`No configurable constant named '${key}' found in the Predicate`);\n }\n\n const { offset } = abiInterface.configurables[key];\n\n const encoded = abiInterface.encodeConfigurable(key, value as InputValue);\n\n mutatedBytes.set(encoded, offset);\n });\n } catch (err) {\n throw new FuelError(\n ErrorCode.INVALID_CONFIGURABLE_CONSTANTS,\n `Error setting configurable constants: ${(<Error>err).message}.`\n );\n }\n\n return mutatedBytes;\n }\n}\n","import { hash } from '@fuel-ts/hasher';\nimport type { BytesLike } from '@fuel-ts/interfaces';\nimport { calcRoot } from '@fuel-ts/merkle';\nimport { chunkAndPadBytes, hexlify, concat, arrayify } from '@fuel-ts/utils';\n\n/**\n * @hidden\n *\n * Calculates the predicate root for a given bytecode and chain ID.\n *\n * @param bytecode - The bytecode represented as a BytesLike object.\n * @param chainId - The ID of the chain associated with the bytecode.\n * @returns The predicate root as a string.\n */\nexport const getPredicateRoot = (bytecode: BytesLike): string => {\n const chunkSize = 16 * 1024;\n const bytes = arrayify(bytecode);\n const chunks = chunkAndPadBytes(bytes, chunkSize);\n const codeRoot = calcRoot(chunks.map((c) => hexlify(c)));\n\n const predicateRoot = hash(concat(['0x4655454C', codeRoot]));\n return predicateRoot;\n};\n","import { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\n\nimport { Account } from '../account';\nimport { Provider } from '../providers';\nimport type { StorageAbstract } from '../wallet-manager';\n\nimport { FuelConnector } from './fuel-connector';\nimport {\n FuelConnectorMethods,\n FuelConnectorEventTypes,\n FuelConnectorEventType,\n LocalStorage,\n} from './types';\nimport type { Network, FuelConnectorEventsType, TargetObject } from './types';\nimport type { CacheFor } from './utils';\nimport { cacheFor, deferPromise, withTimeout } from './utils';\n\n// This is the time to wait for the connector\n// to be available before returning false for hasConnector.\nconst HAS_CONNECTOR_TIMEOUT = 2_000;\n// The time to cache the ping result, as is not\n// expected to change the availability of the connector to\n// change too often we can safely cache the result for 5 seconds\n// at minimum.\nconst PING_CACHE_TIME = 5_000;\n\nconst { warn } = console;\n\nexport type FuelConfig = {\n connectors?: Array<FuelConnector>;\n storage?: StorageAbstract | null;\n targetObject?: TargetObject;\n};\n\nexport type FuelConnectorSelectOptions = {\n emitEvents?: boolean;\n};\n\nexport type Status = {\n installed: boolean;\n connected: boolean;\n};\n\nexport class Fuel extends FuelConnector {\n static STORAGE_KEY = 'fuel-current-connector';\n static defaultConfig: FuelConfig = {};\n private _storage?: StorageAbstract | null = null;\n private _connectors: Array<FuelConnector> = [];\n private _targetObject: TargetObject | null = null;\n private _unsubscribes: Array<() => void> = [];\n private _targetUnsubscribe: () => void;\n private _pingCache: CacheFor = {};\n private _currentConnector?: FuelConnector | null;\n\n constructor(config: FuelConfig = Fuel.defaultConfig) {\n super();\n // Increase the limit of listeners\n this.setMaxListeners(1_000);\n // Set all connectors\n this._connectors = config.connectors ?? [];\n // Set the target object to listen for global events\n this._targetObject = this.getTargetObject(config.targetObject);\n // Set default storage\n this._storage = config.storage === undefined ? this.getStorage() : config.storage;\n // Setup all methods\n this.setupMethods();\n // Get the current connector from the storage\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.setDefaultConnector();\n // Setup new connector listener for global events\n this._targetUnsubscribe = this.setupConnectorListener();\n }\n\n /**\n * Return the target object to listen for global events.\n */\n private getTargetObject(targetObject?: TargetObject): TargetObject | null {\n if (targetObject) {\n return targetObject;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof document !== 'undefined') {\n return document;\n }\n return null;\n }\n\n /**\n * Return the storage used.\n */\n private getStorage(): StorageAbstract | undefined {\n if (typeof window !== 'undefined') {\n return new LocalStorage(window.localStorage);\n }\n return undefined;\n }\n\n /**\n * Setup the default connector from the storage.\n */\n private async setDefaultConnector(): Promise<boolean | undefined> {\n const connectorName =\n (await this._storage?.getItem(Fuel.STORAGE_KEY)) || this._connectors[0]?.name;\n if (connectorName) {\n // Setup all events for the current connector\n return this.selectConnector(connectorName, {\n emitEvents: false,\n });\n }\n\n return undefined;\n }\n\n /**\n * Start listener for all the events of the current\n * connector and emit them to the Fuel instance\n */\n private setupConnectorEvents(events: string[]): void {\n if (!this._currentConnector) {\n return;\n }\n const currentConnector = this._currentConnector;\n this._unsubscribes.map((unSub) => unSub());\n this._unsubscribes = events.map((event) => {\n const handler = (...args: unknown[]) => this.emit(event, ...args);\n currentConnector.on(event as FuelConnectorEventsType, handler);\n return () => currentConnector.off(event, handler);\n });\n }\n\n /**\n * Call method from the current connector.\n */\n private async callMethod(method: string, ...args: unknown[]) {\n const hasConnector = await this.hasConnector();\n await this.pingConnector();\n if (!this._currentConnector || !hasConnector) {\n throw new Error(\n `No connector selected for calling ${method}. Use hasConnector before executing other methods.`\n );\n }\n if (typeof this._currentConnector[method as keyof FuelConnector] === 'function') {\n return (this._currentConnector[method as keyof FuelConnector] as CallableFunction)(...args);\n }\n\n return undefined;\n }\n\n /**\n * Create a method for each method proxy that is available on the Common interface\n * and call the method from the current connector.\n */\n private setupMethods(): void {\n Object.values(FuelConnectorMethods).forEach((method) => {\n this[method] = async (...args: unknown[]) => this.callMethod(method, ...args);\n });\n }\n\n /**\n * Fetch the status of a connector and set the installed and connected\n * status.\n */\n private async fetchConnectorStatus(\n connector: FuelConnector & { _latestUpdate?: number }\n ): Promise<Status> {\n // Control fetch status to avoid rewriting the status\n // on late responses in this way even if a response is\n // late we can avoid rewriting the status of the connector\n const requestTimestamp = Date.now();\n const [isConnected, ping] = await Promise.allSettled([\n withTimeout(connector.isConnected()),\n withTimeout(this.pingConnector(connector)),\n ]);\n // If the requestTimestamp is greater than the latest update\n // we can ignore the response as is treated as stale.\n const isStale = requestTimestamp < (connector._latestUpdate || 0);\n if (!isStale) {\n // eslint-disable-next-line no-param-reassign\n connector._latestUpdate = Date.now();\n // eslint-disable-next-line no-param-reassign\n connector.installed = ping.status === 'fulfilled' && ping.value;\n // eslint-disable-next-line no-param-reassign\n connector.connected = isConnected.status === 'fulfilled' && isConnected.value;\n }\n return {\n installed: connector.installed,\n connected: connector.connected,\n };\n }\n\n /**\n * Fetch the status of all connectors and set the installed and connected\n * status.\n */\n private async fetchConnectorsStatus(): Promise<Status[]> {\n return Promise.all(\n this._connectors.map(async (connector) => this.fetchConnectorStatus(connector))\n );\n }\n\n /**\n * Fetch the status of a connector and set the installed and connected\n * status. If no connector is provided it will ping the current connector.\n */\n private async pingConnector(connector?: FuelConnector) {\n const curConnector = connector || this._currentConnector;\n if (!curConnector) {\n return false;\n }\n // If finds a ping in the cache and the value is true\n // return from cache\n try {\n return await cacheFor(async () => withTimeout(curConnector.ping()), {\n key: curConnector.name,\n cache: this._pingCache,\n cacheTime: PING_CACHE_TIME,\n })();\n } catch {\n throw new Error('Current connector is not available.');\n }\n }\n\n /**\n * Setup a listener for the FuelConnector event and add the connector\n * to the list of new connectors.\n */\n private setupConnectorListener = () => {\n const { _targetObject: targetObject } = this;\n const eventName = FuelConnectorEventType;\n if (targetObject?.on) {\n targetObject.on(eventName, this.addConnector);\n return () => {\n targetObject.off?.(eventName, this.addConnector);\n };\n }\n if (targetObject?.addEventListener) {\n const handler = (e: CustomEvent<FuelConnector>) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.addConnector(e.detail);\n };\n targetObject.addEventListener(eventName, handler);\n return () => {\n targetObject.removeEventListener?.(eventName, handler);\n };\n }\n return () => {};\n };\n\n /**\n * Add a new connector to the list of connectors.\n */\n private addConnector = async (connector: FuelConnector): Promise<void> => {\n if (!this.getConnector(connector)) {\n this._connectors.push(connector);\n }\n // Fetch the status of the new connector\n await this.fetchConnectorStatus(connector);\n // Emit connectors events once the connector list changes\n this.emit(this.events.connectors, this._connectors);\n // If the current connector is not set\n if (!this._currentConnector) {\n // set the new connector as currentConnector\n await this.selectConnector(connector.name, {\n emitEvents: false,\n });\n }\n };\n\n private triggerConnectorEvents = async () => {\n const [isConnected, networks, currentNetwork] = await Promise.all([\n this.isConnected(),\n this.networks(),\n this.currentNetwork(),\n ]);\n this.emit(this.events.connection, isConnected);\n this.emit(this.events.networks, networks);\n this.emit(this.events.currentNetwork, currentNetwork);\n if (isConnected) {\n const [accounts, currentAccount] = await Promise.all([\n this.accounts(),\n this.currentAccount(),\n ]);\n this.emit(this.events.accounts, accounts);\n this.emit(this.events.currentAccount, currentAccount);\n }\n };\n\n /**\n * Get a connector from the list of connectors.\n */\n getConnector = (connector: FuelConnector | string): FuelConnector | null =>\n this._connectors.find((c) => {\n const connectorName = typeof connector === 'string' ? connector : connector.name;\n return c.name === connectorName || c === connector;\n }) || null;\n\n /**\n * Return the list of connectors with the status of installed and connected.\n */\n async connectors(): Promise<Array<FuelConnector>> {\n await this.fetchConnectorsStatus();\n return this._connectors;\n }\n\n /**\n * Set the current connector to be used.\n */\n async selectConnector(\n connectorName: string,\n options: FuelConnectorSelectOptions = {\n emitEvents: true,\n }\n ): Promise<boolean> {\n const connector = this.getConnector(connectorName);\n if (!connector) {\n return false;\n }\n if (this._currentConnector?.name === connectorName) {\n return true;\n }\n const { installed } = await this.fetchConnectorStatus(connector);\n if (installed) {\n this._currentConnector = connector;\n this.emit(this.events.currentConnector, connector);\n this.setupConnectorEvents(Object.values(FuelConnectorEventTypes));\n await this._storage?.setItem(Fuel.STORAGE_KEY, connector.name);\n // If emitEvents is true we query all the data from the connector\n // and emit the events to the Fuel instance allowing the application to\n // react to changes in the connector state.\n if (options.emitEvents) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.triggerConnectorEvents();\n }\n return true;\n }\n return false;\n }\n\n /**\n * Return the current selected connector.\n */\n currentConnector(): FuelConnector | null | undefined {\n return this._currentConnector;\n }\n\n /**\n * Return true if any connector is available.\n */\n async hasConnector(): Promise<boolean> {\n // If there is a current connector return true\n // as the connector is ready\n if (this._currentConnector) {\n return true;\n }\n // If there is no current connector\n // wait for the current connector to be set\n // for 1 second and return false if is not set\n const defer = deferPromise<boolean>();\n this.once(this.events.currentConnector, () => {\n defer.resolve(true);\n });\n // As the max ping time is 1 second we wait for 2 seconds\n // to allow applications to react to the current connector\n return withTimeout(defer.promise, HAS_CONNECTOR_TIMEOUT)\n .then(() => true)\n .catch(() => false);\n }\n\n async hasWallet(): Promise<boolean> {\n return this.hasConnector();\n }\n\n /**\n * Return a Fuel Provider instance with extends features to work with\n * connectors.\n *\n * @deprecated getProvider is deprecated and is going to be removed in the future, use getWallet instead.\n */\n async getProvider(providerOrNetwork?: Provider | Network): Promise<Provider> {\n warn(\n 'getProvider is deprecated and is going to be removed in the future, use getWallet instead.'\n );\n return this._getProvider(providerOrNetwork);\n }\n\n /**\n * Return a Fuel Provider instance with extends features to work with\n * connectors.\n */\n private async _getProvider(providerOrNetwork?: Provider | Network): Promise<Provider> {\n // Decide which provider to use based on the providerOrNetwork\n let provider: Provider;\n // If provider is a valid instance of a Provider use it\n if (providerOrNetwork && 'getTransactionResponse' in providerOrNetwork) {\n provider = providerOrNetwork;\n // If the provided param is a valid network use it\n } else if (providerOrNetwork && 'chainId' in providerOrNetwork && 'url' in providerOrNetwork) {\n provider = await Provider.create(providerOrNetwork.url);\n // If nor provider or network is provided use the current network\n } else if (!providerOrNetwork) {\n const currentNetwork = await this.currentNetwork();\n provider = await Provider.create(currentNetwork.url);\n // If a provider or network was informed but is not valid\n // throw an error\n } else {\n throw new FuelError(ErrorCode.INVALID_PROVIDER, 'Provider is not valid.');\n }\n return provider;\n }\n\n /**\n * Return a Fuel Wallet Locked instance with extends features to work with\n * connectors.\n */\n async getWallet(\n address: string | AbstractAddress,\n providerOrNetwork?: Provider | Network\n ): Promise<Account> {\n const provider = await this._getProvider(providerOrNetwork);\n return new Account(address, provider, this);\n }\n\n /**\n * Remove all open listeners this is useful when you want to\n * remove the Fuel instance and avoid memory leaks.\n */\n unsubscribe(): void {\n // Unsubscribe from all events\n this._unsubscribes.map((unSub) => unSub());\n this._targetUnsubscribe();\n // Remove all listeners from fuel instance\n this.removeAllListeners();\n }\n\n /**\n * Clean all the data from the storage.\n */\n async clean(): Promise<void> {\n await this._storage?.removeItem(Fuel.STORAGE_KEY);\n }\n\n /**\n * Removes all listeners and cleans the storage.\n */\n async destroy(): Promise<void> {\n this.unsubscribe();\n await this.clean();\n }\n}\n","/* eslint-disable @typescript-eslint/require-await */\nimport { EventEmitter } from 'events';\n\nimport type { TransactionRequestLike } from '../providers';\nimport type { Asset } from '../providers/assets/types';\n\nimport { FuelConnectorEventTypes } from './types';\nimport type {\n FuelConnectorEvents,\n ConnectorMetadata,\n FuelABI,\n Network,\n FuelEventArg,\n Version,\n} from './types';\n\n/**\n * @name FuelConnector\n *\n * Wallet Connector is a interface that represents a Wallet Connector and all the methods\n * that should be implemented to be compatible with the Fuel SDK.\n */\nexport abstract class FuelConnector extends EventEmitter {\n name: string = '';\n metadata: ConnectorMetadata = {} as ConnectorMetadata;\n connected: boolean = false;\n installed: boolean = false;\n events = FuelConnectorEventTypes;\n\n /**\n * Should return true if the connector is loaded\n * in less then one second.\n *\n * @returns Always true.\n */\n async ping(): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return the current version of the connector\n * and the network version that is compatible.\n *\n * @returns boolean - connection status.\n */\n async version(): Promise<Version> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return true if the connector is connected\n * to any of the accounts available.\n *\n * @returns The connection status.\n */\n async isConnected(): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return all the accounts authorized for the\n * current connection.\n *\n * @returns The accounts addresses strings\n */\n async accounts(): Promise<Array<string>> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should start the connection process and return\n * true if the account authorize the connection.\n *\n * and return false if the user reject the connection.\n *\n * @emits accounts\n * @returns boolean - connection status.\n */\n async connect(): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should disconnect the current connection and\n * return false if the disconnection was successful.\n *\n * @emits assets connection\n * @returns The connection status.\n */\n async disconnect(): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should start the sign message process and return\n * the signed message.\n *\n * @param address - The address to sign the message\n * @param message - The message to sign all text will be treated as text utf-8\n *\n * @returns Message signature\n */\n async signMessage(_address: string, _message: string): Promise<string> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should start the sign transaction process and return\n * the signed transaction.\n *\n * @param address - The address to sign the transaction\n * @param transaction - The transaction to sign\n *\n * @returns Transaction signature\n */\n async signTransaction(_address: string, _transaction: TransactionRequestLike): Promise<string> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should start the send transaction process and return\n * the transaction id submitted to the network.\n *\n * If the network is not available for the connection\n * it should throw an error to avoid the transaction\n * to be sent to the wrong network and lost.\n *\n * @param address - The address to sign the transaction\n * @param transaction - The transaction to send\n *\n * @returns The transaction id\n */\n async sendTransaction(_address: string, _transaction: TransactionRequestLike): Promise<string> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return the current account selected inside the connector, if the account\n * is authorized for the connection.\n *\n * If the account is not authorized it should return null.\n *\n * @returns The current account selected otherwise null.\n */\n async currentAccount(): Promise<string | null> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should add the the assets metadata to the connector and return true if the asset\n * was added successfully.\n *\n * If the asset already exists it should throw an error.\n *\n * @emits assets\n * @param assets - The assets to add the metadata to the connection.\n * @throws Error if the asset already exists\n * @returns True if the asset was added successfully\n */\n async addAssets(_assets: Array<Asset>): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should add the the asset metadata to the connector and return true if the asset\n * was added successfully.\n *\n * If the asset already exists it should throw an error.\n *\n * @emits assets\n * @param asset - The asset to add the metadata to the connection.\n * @throws Error if the asset already exists\n * @returns True if the asset was added successfully\n */\n async addAsset(_asset: Asset): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return all the assets added to the connector. If a connection is already established.\n *\n * @returns Array of assets metadata from the connector vinculated to the all accounts from a specific Wallet.\n */\n async assets(): Promise<Array<Asset>> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should start the add network process and return true if the network was added successfully.\n *\n * @emits networks\n * @throws Error if the network already exists\n * @param networkUrl - The URL of the network to be added.\n * @returns Return true if the network was added successfully\n */\n async addNetwork(_networkUrl: string): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should start the select network process and return true if the network has change successfully.\n *\n * @emits networks\n * @throws Error if the network already exists\n * @param network - The network to be selected.\n * @returns Return true if the network was added successfully\n */\n async selectNetwork(_network: Network): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return all the networks available from the connector. If the connection is already established.\n *\n * @returns Return all the networks added to the connector.\n */\n async networks(): Promise<Array<Network>> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return the current network selected inside the connector. Even if the connection is not established.\n *\n * @returns Return the current network selected inside the connector.\n */\n async currentNetwork(): Promise<Network> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should add the ABI to the connector and return true if the ABI was added successfully.\n *\n * @param contractId - The contract id to add the ABI.\n * @param abi - The JSON ABI that represents a contract.\n * @returns Return true if the ABI was added successfully.\n */\n async addABI(_contractId: string, _abi: FuelABI): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return the ABI from the connector vinculated to the all accounts from a specific Wallet.\n *\n * @param id - The contract id to get the ABI.\n * @returns The ABI if it exists, otherwise return null.\n */\n async getABI(_id: string): Promise<FuelABI | null> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Should return true if the abi exists in the connector vinculated to the all accounts from a specific Wallet.\n *\n * @param id - The contract id to get the abi\n * @returns Returns true if the abi exists or false if not.\n */\n async hasABI(_id: string): Promise<boolean> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Event listener for the connector.\n *\n * @param eventName - The event name to listen\n * @param listener - The listener function\n */\n on<E extends FuelConnectorEvents['type'], D extends FuelEventArg<E>>(\n eventName: E,\n listener: (data: D) => void\n ): this {\n super.on(eventName, listener);\n return this;\n }\n}\n","export enum FuelConnectorMethods {\n // General methods\n ping = 'ping',\n version = 'version',\n // Connection methods\n connect = 'connect',\n disconnect = 'disconnect',\n isConnected = 'isConnected',\n // Account methods\n accounts = 'accounts',\n currentAccount = 'currentAccount',\n // Signature methods\n signMessage = 'signMessage',\n sendTransaction = 'sendTransaction',\n // Assets metadata methods\n assets = 'assets',\n addAsset = 'addAsset',\n addAssets = 'addAssets',\n // Network methods\n networks = 'networks',\n currentNetwork = 'currentNetwork',\n addNetwork = 'addNetwork',\n selectNetwork = 'selectNetwork',\n // ABI methods\n addABI = 'addABI',\n getABI = 'getABI',\n hasABI = 'hasABI',\n}\n\nexport enum FuelConnectorEventTypes {\n connectors = 'connectors',\n currentConnector = 'currentConnector',\n connection = 'connection',\n accounts = 'accounts',\n currentAccount = 'currentAccount',\n networks = 'networks',\n currentNetwork = 'currentNetwork',\n assets = 'assets',\n abis = 'abis',\n}\n\nexport const FuelConnectorEventType = 'FuelConnector';\n","/* eslint-disable @typescript-eslint/require-await */\nimport type { StorageAbstract } from '../../wallet-manager';\n\nexport class LocalStorage implements StorageAbstract {\n private storage: Storage;\n\n constructor(localStorage: Storage) {\n this.storage = localStorage;\n }\n\n async setItem(key: string, value: string): Promise<void> {\n this.storage.setItem(key, value);\n }\n\n async getItem(key: string): Promise<string | null | undefined> {\n return this.storage.getItem(key);\n }\n\n async removeItem(key: string): Promise<void> {\n this.storage.removeItem(key);\n }\n\n async clear(): Promise<void> {\n this.storage.clear();\n }\n}\n","/* eslint-disable no-param-reassign */\n\nexport type CacheFor = {\n [key: string]: {\n timeout: number;\n value: unknown;\n } | null;\n};\n\ntype CacheForOptions = {\n key: string;\n cache: CacheFor;\n cacheTime: number;\n};\n\nexport function cacheFor<F extends (...args: unknown[]) => Promise<unknown>>(\n fn: F,\n { cache, cacheTime, key }: CacheForOptions\n): F {\n return (async (...args: unknown[]) => {\n if (cache[key] && cache[key]?.value) {\n return cache[key]?.value as ReturnType<F>;\n }\n clearTimeout(cache[key]?.timeout);\n const result = await fn(...args);\n\n // Create cache auto clean\n\n cache[key] = {\n timeout: Number(\n setTimeout(() => {\n cache[key] = null;\n }, cacheTime)\n ),\n value: result,\n };\n\n return result;\n }) as F;\n}\n","import type { FuelConnector } from '../fuel-connector';\nimport { FuelConnectorEventType } from '../types';\n\n/**\n * Fuel Connector Event is a custom event that can be used by the connector to\n * inform the Fuel Connector Manager that a new connector is available.\n */\nexport function dispatchFuelConnectorEvent(connector: FuelConnector) {\n window.dispatchEvent(\n new CustomEvent(FuelConnectorEventType, {\n detail: connector,\n })\n );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type DeferPromise<R = unknown> = {\n promise: Promise<R>;\n resolve: (value: R) => void;\n reject: (error: unknown) => void;\n};\n\nexport function deferPromise<R = unknown>() {\n const defer: DeferPromise<R> = {} as any;\n\n defer.promise = new Promise((resolve, reject) => {\n defer.reject = reject;\n defer.resolve = resolve;\n });\n\n return defer;\n}\n\n// eslint-disable-next-line @typescript-eslint/require-await\nexport async function withTimeout<F extends Promise<unknown>, RT = Awaited<F>>(\n promise: F,\n timeout: number = 1050\n): Promise<RT> {\n const timeoutPromise = new Promise((resolve, reject) => {\n setTimeout(() => {\n reject(new Error('Promise timed out'));\n }, timeout);\n });\n return Promise.race([timeoutPromise, promise]) as any;\n}\n"],"mappings":"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AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC//DO,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,UAAA,aAAY;AADF,SAAAA;AAAA,GAAA;;;ACFZ,IAAAC,kBAAqC;AACrC,IAAAC,iBAAuB;AAEvB,IAAAC,i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","names":["import_address","import_errors","import_math","import_utils","import_ramda","import_address","import_errors","import_math","import_transactions","import_utils","import_ramda","gql","import_errors","import_utils","import_errors","import_math","import_utils","import_configs","import_errors","import_math","import_transactions","import_utils","import_abi_coder","import_configs","import_math","import_transactions","import_utils","import_configs","import_errors","import_math","import_transactions","import_utils","import_errors","import_math","import_transactions","import_utils","import_utils","import_errors","import_math","import_transactions","import_configs","import_utils","import_configs","import_math","import_transactions","import_utils","import_configs","import_math","import_transactions","import_utils","import_ramda","import_utils","import_abi_coder","import_address","import_configs","import_math","import_transactions","import_utils","import_utils","import_errors","import_transactions","import_errors","import_math","import_transactions","import_utils","import_math","import_transactions","import_utils","import_math","import_transactions","import_utils","import_configs","import_errors","import_math","import_transactions","import_abi_coder","import_math","import_errors","import_transactions","import_transactions","TransactionTypeName","TransactionStatus","OperationName","AddressType","ChainName","import_transactions","import_errors","import_abi_coder","import_transactions","transactionId","import_errors","import_math","import_transactions","import_utils","assets","import_abi_coder","import_math","import_utils","gtf","addi","lw","addi2","tr","ret","isCoin","import_hasher","import_utils","import_address","import_crypto","import_hasher","import_math","import_utils","import_address","import_crypto","import_errors","import_utils","uuidv4","import_errors","import_hasher","import_math","import_utils","import_ethers","import_crypto","import_errors","import_hasher","import_utils","import_ethers","Language","import_errors","import_hasher","import_utils","MainnetPRV","TestnetPRV","import_address","import_crypto","import_errors","import_address","import_errors","import_address","import_errors","Vault","import_errors","import_abi_coder","import_address","import_errors","import_transactions","import_utils","import_hasher","import_utils","import_errors","import_events","FuelConnectorMethods","FuelConnectorEventTypes","cache"]}
|