{"version":3,"sources":["../src/base-unlocked-wallet.ts","../src/account.ts","../src/utils.ts","../src/keystore-wallet.ts","../src/wallets.ts","../src/wallet.ts"],"sourcesContent":["import { hashMessage } from '@fuel-ts/hasher';\nimport type {\n  TransactionResponse,\n  TransactionRequestLike,\n  CallResult,\n  Provider,\n  ProviderSendTxParams,\n} from '@fuel-ts/providers';\nimport { transactionRequestify } from '@fuel-ts/providers';\nimport { Signer } from '@fuel-ts/signer';\nimport type { BytesLike } from 'ethers';\n\nimport { Account } from './account';\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 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.getChain().consensusParameters.chainId.toNumber();\n    const hashedTransaction = transactionRequest.getTransactionId(chainId);\n    const signature = await this.signer().sign(hashedTransaction);\n\n    return 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    options?: Pick<ProviderSendTxParams, 'awaitExecution'>\n  ): Promise<TransactionResponse> {\n    const transactionRequest = transactionRequestify(transactionRequestLike);\n    await this.provider.estimateTxDependencies(transactionRequest);\n    return this.provider.sendTransaction(\n      await this.populateTransactionWitnessesSignature(transactionRequest),\n      { ...options, 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(transactionRequestLike: TransactionRequestLike): Promise<CallResult> {\n    const transactionRequest = transactionRequestify(transactionRequestLike);\n    await this.provider.estimateTxDependencies(transactionRequest);\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 { BaseAssetId } from '@fuel-ts/address/configs';\nimport { ErrorCode, FuelError } from '@fuel-ts/errors';\nimport { AbstractAccount } from '@fuel-ts/interfaces';\nimport type { AbstractAddress } from '@fuel-ts/interfaces';\nimport type { BigNumberish, BN } from '@fuel-ts/math';\nimport { bn } from '@fuel-ts/math';\nimport type {\n  TransactionRequestLike,\n  CallResult,\n  TransactionRequest,\n  Coin,\n  CoinQuantityLike,\n  CoinQuantity,\n  Message,\n  Resource,\n  ExcludeResourcesOption,\n  TransactionResponse,\n  Provider,\n  ScriptTransactionRequestLike,\n  ProviderSendTxParams,\n} from '@fuel-ts/providers';\nimport {\n  withdrawScript,\n  ScriptTransactionRequest,\n  transactionRequestify,\n  addAmountToAsset,\n} from '@fuel-ts/providers';\nimport { getBytesCopy } from 'ethers';\nimport type { BytesLike } from 'ethers';\n\nimport {\n  composeScriptForTransferringToContract,\n  formatScriptDataForTransferringToContract,\n} from './utils';\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  /**\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) {\n    super();\n    this._provider = provider;\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 } = await this.provider.getTransactionCost(request);\n    await this.fund(request, requiredQuantities, maxFee);\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    const request = await this.createTransfer(destination, amount, assetId, txParams);\n    return this.sendTransaction(request);\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    const contractAddress = Address.fromAddressOrString(contractId);\n    const { minGasPrice } = this.provider.getGasConfig();\n    const params = { gasPrice: minGasPrice, ...txParams };\n\n    const script = await composeScriptForTransferringToContract();\n\n    const scriptData = formatScriptDataForTransferringToContract(\n      contractAddress.toB256(),\n      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 } = await this.provider.getTransactionCost(request, [\n      { amount: bn(amount), assetId: String(assetId) },\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 recipientAddress = Address.fromAddressOrString(recipient);\n    // add recipient and amount to the transaction script code\n    const recipientDataArray = getBytesCopy(\n      '0x'.concat(recipientAddress.toHexString().substring(2).padStart(64, '0'))\n    );\n    const amountDataArray = getBytesCopy(\n      '0x'.concat(bn(amount).toHex().substring(2).padStart(16, '0'))\n    );\n    const script = new Uint8Array([\n      ...getBytesCopy(withdrawScript.bytes),\n      ...recipientDataArray,\n      ...amountDataArray,\n    ]);\n\n    const params = { script, ...txParams };\n    const request = new ScriptTransactionRequest(params);\n    const forwardingQuantities = [{ amount: bn(amount), assetId: BaseAssetId }];\n\n    const { requiredQuantities, maxFee } = await this.provider.getTransactionCost(\n      request,\n      forwardingQuantities\n    );\n\n    await this.fund(request, requiredQuantities, maxFee);\n\n    return this.sendTransaction(request);\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    options?: Pick<ProviderSendTxParams, 'awaitExecution'>\n  ): Promise<TransactionResponse> {\n    const transactionRequest = transactionRequestify(transactionRequestLike);\n    await this.provider.estimateTxDependencies(transactionRequest);\n    return this.provider.sendTransaction(transactionRequest, {\n      ...options,\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(transactionRequestLike: TransactionRequestLike): Promise<CallResult> {\n    const transactionRequest = transactionRequestify(transactionRequestLike);\n    await this.provider.estimateTxDependencies(transactionRequest);\n    return this.provider.simulate(transactionRequest, { estimateTxDependencies: false });\n  }\n}\n","import { U64Coder } from '@fuel-ts/abi-coder';\nimport type { B256Address } from '@fuel-ts/interfaces';\nimport { BN, type BigNumberish } from '@fuel-ts/math';\nimport * as asm from '@fuels/vm-asm';\nimport { getBytesCopy, type BytesLike } from 'ethers';\n\nexport const composeScriptForTransferringToContract = async () => {\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;\n};\n\nexport const formatScriptDataForTransferringToContract = (\n  hexelifiedContractId: B256Address,\n  amountToTransfer: BigNumberish,\n  assetId: BytesLike\n) => {\n  const numberCoder = new U64Coder();\n\n  const encoded = numberCoder.encode(new BN(amountToTransfer).toNumber());\n\n  const scriptData = Uint8Array.from([\n    ...getBytesCopy(hexelifiedContractId),\n    ...encoded,\n    ...getBytesCopy(assetId),\n  ]);\n\n  return scriptData;\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 'ethers';\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","//\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 { HDWallet } from '@fuel-ts/hdwallet';\nimport { Mnemonic } from '@fuel-ts/mnemonic';\nimport type { Provider } from '@fuel-ts/providers';\nimport { Signer } from '@fuel-ts/signer';\nimport type { BytesLike } from 'ethers';\n\nimport { Account } from './account';\nimport { BaseWalletUnlocked } from './base-unlocked-wallet';\nimport { decryptKeystoreWallet } from './keystore-wallet';\nimport type { GenerateOptions } from './types/GenerateOptions';\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, provider?: Provider, path?: string): 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    provider?: Provider,\n    path?: string,\n    passphrase?: BytesLike\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 } from '@fuel-ts/interfaces';\nimport type { Provider } from '@fuel-ts/providers';\nimport type { BytesLike } from 'ethers';\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"],"mappings":"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","names":["transactionRequestify","getBytesCopy","gtf","addi","lw","addi2","tr","ret","getBytesCopy","Address","ErrorCode","FuelError","transactionRequestify","Signer","Signer"]}