{"version":3,"sources":["../src/errors/duplicateInputSelectionError.ts","../src/errors/insufficientInputs.ts","../src/builder/selector/strategies/accumulativeSelectionStrategy.ts","../src/builder/selector/strategies/customSelectionStrategy.ts","../src/builder/selector/boxSelector.ts","../src/builder/selector/strategies/cherryPickSelectionStrategy.ts","../src/errors/duplicateInputError.ts","../src/errors/insufficientTokenAmount.ts","../src/errors/invalidAddress.ts","../src/errors/invalidInput.ts","../src/errors/invalidRegistersPacking.ts","../src/errors/malformedTransaction.ts","../src/models/collections/tokensCollection.ts","../src/errors/maxTokensOverflow.ts","../src/errors/notAllowedTokenBurning.ts","../src/errors/notFoundError.ts","../src/errors/undefinedCreationHeight.ts","../src/errors/undefinedMintingContext.ts","../src/models/utils.ts","../src/models/ergoAddress.ts","../src/models/ergoBoxCandidate.ts","../src/models/ergoBox.ts","../src/models/ergoUnsignedInput.ts","../src/models/ergoUnsignedTransactionChain.ts","../src/models/ergoUnsignedTransaction.ts","../src/models/collections/inputsCollection.ts","../src/models/collections/outputsCollection.ts","../src/models/ergoTree.ts","../src/models/ergoMessage.ts","../src/builder/outputBuilder.ts","../src/errors/nonStandardizedMinting.ts","../src/builder/pluginContext.ts","../src/builder/transactionBuilderSettings.ts","../src/builder/transactionBuilder.ts","../src/constantSerializer.ts"],"names":["some","_0n","sumBy","isEmpty","utxoSum","isUndefined","orderBy","isDefined","ensureBigInt","first","AddressType","validateEcPoint","concatBytes","base58","blake2b256","hex","FleetError","Collection","Network","SigmaByteWriter","ensureBytes","areEqual","isHex","utf8","utxoDiff","estimateVLQSize","byteSizeOf","SConstant","SerSConstant"],"mappings":"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","file":"index.mjs","sourcesContent":["export class DuplicateInputSelectionError extends Error {\n  constructor() {\n    super(\"One or more inputs was selected more than one time by the current selection strategy.\");\n  }\n}\n","import { some } from \"@fleet-sdk/common\";\nimport type { SelectionTarget } from \"../builder/selector/boxSelector\";\n\nexport class InsufficientInputs extends Error {\n  readonly unreached: SelectionTarget;\n\n  constructor(unreached: SelectionTarget) {\n    const strings = [];\n    if (unreached.nanoErgs) {\n      strings.push(buildString(\"nanoErgs\", unreached.nanoErgs));\n    }\n\n    if (some(unreached.tokens)) {\n      for (const token of unreached.tokens) {\n        strings.push(buildString(token.tokenId, token.amount));\n      }\n    }\n\n    super(`Insufficient inputs:${strings.join()}`);\n\n    this.unreached = unreached;\n  }\n}\n\nfunction buildString(tokenId: string, amount?: bigint): string {\n  return `\\n  > ${tokenId}: ${amount?.toString()}`;\n}\n","import { type Box, type TokenId, type TokenTargetAmount, isDefined, some } from \"@fleet-sdk/common\";\nimport { _0n, isEmpty, isUndefined, sumBy, utxoSum } from \"@fleet-sdk/common\";\nimport type { SelectionTarget } from \"../boxSelector\";\nimport type { ISelectionStrategy } from \"./ISelectionStrategy\";\n\n/**\n * Accumulative selection strategy accumulates inputs until the target amounts\n * value is reached, skipping detrimental inputs.\n */\nexport class AccumulativeSelectionStrategy implements ISelectionStrategy {\n  private _inputs!: Box<bigint>[];\n\n  select(inputs: Box<bigint>[], target: SelectionTarget): Box<bigint>[] {\n    this._inputs = inputs;\n\n    let selection: Box<bigint>[] = [];\n    if (some(target.tokens)) {\n      selection = this._selectTokens(target.tokens);\n    }\n\n    const selectedNanoErgs = sumBy(selection, (input) => input.value);\n    if (\n      (isUndefined(target.nanoErgs) && isEmpty(target.tokens)) ||\n      (isDefined(target.nanoErgs) && selectedNanoErgs < target.nanoErgs)\n    ) {\n      const targetAmount = isDefined(target.nanoErgs)\n        ? target.nanoErgs - selectedNanoErgs\n        : undefined;\n\n      selection = selection.concat(this._select(targetAmount));\n    }\n\n    return selection;\n  }\n\n  private _selectTokens(targets: TokenTargetAmount<bigint>[]): Box<bigint>[] {\n    let selection: Box<bigint>[] = [];\n\n    for (const target of targets) {\n      const targetAmount = isDefined(target.amount)\n        ? target.amount - utxoSum(selection, target.tokenId)\n        : undefined;\n\n      if (targetAmount && targetAmount <= _0n) {\n        continue;\n      }\n\n      selection = selection.concat(this._select(targetAmount, target.tokenId));\n    }\n\n    return selection;\n  }\n\n  private _select(target?: bigint, tokenId?: TokenId): Box<bigint>[] {\n    const inputs = this._inputs;\n    let acc = _0n;\n    let selection: Box<bigint>[] = [];\n\n    if (isUndefined(target)) {\n      if (tokenId) {\n        selection = inputs.filter((x) => x.assets.some((asset) => asset.tokenId === tokenId));\n      } else {\n        selection = inputs;\n      }\n    } else {\n      for (let i = 0; i < inputs.length && acc < target; i++) {\n        if (tokenId) {\n          for (const token of inputs[i].assets) {\n            if (token.tokenId !== tokenId) {\n              continue;\n            }\n\n            acc += token.amount;\n            selection.push(inputs[i]);\n          }\n        } else {\n          acc += inputs[i].value;\n          selection.push(inputs[i]);\n        }\n      }\n    }\n\n    if (some(selection)) {\n      this._inputs = this._inputs.filter((input) => !selection.includes(input));\n    }\n\n    return selection;\n  }\n}\n","import type { Box } from \"@fleet-sdk/common\";\nimport type { SelectionTarget } from \"../boxSelector\";\nimport type { ISelectionStrategy } from \"./ISelectionStrategy\";\n\nexport type SelectorFunction = (inputs: Box<bigint>[], target?: SelectionTarget) => Box<bigint>[];\n\n/**\n * Custom selection strategy supports custom selections implementations.\n */\nexport class CustomSelectionStrategy implements ISelectionStrategy {\n  private readonly _selector: SelectorFunction;\n\n  constructor(selector: SelectorFunction) {\n    this._selector = selector;\n  }\n\n  select(inputs: Box<bigint>[], target?: SelectionTarget): Box<bigint>[] {\n    return this._selector(inputs, target);\n  }\n}\n","import {\n  type Amount,\n  type Box,\n  type BoxCandidate,\n  type BoxId,\n  type FilterPredicate,\n  type OneOrMore,\n  type SortingDirection,\n  type SortingSelector,\n  type TokenTargetAmount,\n  _0n,\n  ensureBigInt,\n  first,\n  hasDuplicatesBy,\n  isEmpty,\n  isUndefined,\n  orderBy,\n  some,\n  sumBy,\n  utxoSum\n} from \"@fleet-sdk/common\";\nimport { DuplicateInputSelectionError } from \"../../errors/duplicateInputSelectionError\";\nimport { InsufficientInputs } from \"../../errors/insufficientInputs\";\nimport type { ISelectionStrategy } from \"./strategies/ISelectionStrategy\";\nimport { AccumulativeSelectionStrategy } from \"./strategies/accumulativeSelectionStrategy\";\nimport {\n  CustomSelectionStrategy,\n  type SelectorFunction\n} from \"./strategies/customSelectionStrategy\";\n\nexport type SelectionTarget = {\n  nanoErgs?: bigint;\n  tokens?: TokenTargetAmount<bigint>[];\n};\n\nexport class BoxSelector<T extends Box<bigint>> {\n  private readonly _inputs: Box<bigint>[];\n  private _strategy?: ISelectionStrategy;\n  private _ensureFilterPredicate?: FilterPredicate<Box<bigint>>;\n  private _selector?: SortingSelector<Box<bigint>>;\n  private _sortDirection?: SortingDirection;\n  private _ensureInclusionBoxIds?: Set<BoxId>;\n\n  constructor(inputs: T[]) {\n    this._inputs = inputs;\n  }\n\n  public defineStrategy(strategy: ISelectionStrategy | SelectorFunction): BoxSelector<T> {\n    if (this._isISelectionStrategyImplementation(strategy)) {\n      this._strategy = strategy;\n    } else {\n      this._strategy = new CustomSelectionStrategy(strategy);\n    }\n\n    return this;\n  }\n\n  public select(target: SelectionTarget): T[] {\n    if (!this._strategy) {\n      this._strategy = new AccumulativeSelectionStrategy();\n    }\n\n    const remaining = this._deepCloneTarget(target);\n    let unselected = [...this._inputs];\n    let selected: Box<bigint>[] = [];\n\n    const predicate = this._ensureFilterPredicate;\n    let inclusion = this._ensureInclusionBoxIds;\n\n    // if the target has a token that is being minted, then the first input should be included\n    if (target.tokens?.some((x) => x.tokenId === unselected[0].boxId)) {\n      inclusion = new Set(this._ensureInclusionBoxIds).add(unselected[0].boxId);\n    }\n\n    if (predicate) {\n      selected = inclusion\n        ? unselected.filter((box) => predicate(box) || inclusion.has(box.boxId))\n        : unselected.filter(predicate);\n    } else if (inclusion) {\n      selected = unselected.filter((box) => inclusion.has(box.boxId));\n    }\n\n    if (some(selected)) {\n      unselected = unselected.filter((box) => !selected.some((sel) => sel.boxId === box.boxId));\n\n      if (remaining.nanoErgs && remaining.nanoErgs > _0n) {\n        remaining.nanoErgs -= sumBy(selected, (input) => input.value);\n      }\n\n      if (some(remaining.tokens) && selected.some((input) => !isEmpty(input.assets))) {\n        for (const t of remaining.tokens) {\n          if (t.amount && t.amount > _0n) t.amount -= utxoSum(selected, t.tokenId);\n        }\n      }\n    }\n\n    if (this._selector) {\n      unselected = orderBy(unselected, this._selector, this._sortDirection || \"asc\");\n    }\n\n    selected = selected.concat(this._strategy.select(unselected, remaining));\n\n    if (hasDuplicatesBy(selected, (item) => item.boxId)) {\n      throw new DuplicateInputSelectionError();\n    }\n\n    const unreached = this._getUnreachedTargets(selected, target);\n    if (unreached.nanoErgs || some(unreached.tokens)) {\n      throw new InsufficientInputs(unreached);\n    }\n\n    return selected as T[];\n  }\n\n  private _deepCloneTarget(target: SelectionTarget): SelectionTarget {\n    return {\n      nanoErgs: target.nanoErgs,\n      tokens: target.tokens\n        ? target.tokens.map((t) => ({ tokenId: t.tokenId, amount: t.amount }))\n        : undefined\n    };\n  }\n\n  private _getUnreachedTargets(inputs: Box<bigint>[], target: SelectionTarget): SelectionTarget {\n    const unreached: SelectionTarget = {\n      nanoErgs: undefined,\n      tokens: undefined\n    };\n    const selectedNanoergs = sumBy(inputs, (input) => input.value);\n\n    if (target.nanoErgs && target.nanoErgs > selectedNanoergs) {\n      unreached.nanoErgs = target.nanoErgs - selectedNanoergs;\n    }\n\n    if (isEmpty(target.tokens)) {\n      return unreached;\n    }\n\n    for (const tokenTarget of target.tokens) {\n      const totalSelected = utxoSum(inputs, tokenTarget.tokenId);\n      if (tokenTarget.amount && tokenTarget.amount > totalSelected) {\n        if (tokenTarget.tokenId === first(inputs).boxId) {\n          // if the token is the same as the first input, then it is being minted\n          continue;\n        }\n\n        if (isUndefined(unreached.tokens)) {\n          unreached.tokens = [];\n        }\n\n        unreached.tokens.push({\n          tokenId: tokenTarget.tokenId,\n          amount: tokenTarget.amount - totalSelected\n        });\n      }\n    }\n\n    return unreached;\n  }\n\n  public ensureInclusion(predicate: FilterPredicate<Box<bigint>>): BoxSelector<T>;\n  public ensureInclusion(boxIds: OneOrMore<BoxId>): BoxSelector<T>;\n  public ensureInclusion(filter: \"all\"): BoxSelector<T>;\n  public ensureInclusion(\n    predicateOrBoxIds: FilterPredicate<Box<bigint>> | OneOrMore<BoxId> | \"all\"\n  ): BoxSelector<T> {\n    if (typeof predicateOrBoxIds === \"function\") {\n      this._ensureFilterPredicate = predicateOrBoxIds;\n    } else if (predicateOrBoxIds === \"all\") {\n      this._ensureFilterPredicate = (box) => box.value > 0n;\n    } else {\n      if (isUndefined(this._ensureInclusionBoxIds)) {\n        this._ensureInclusionBoxIds = new Set();\n      }\n\n      if (Array.isArray(predicateOrBoxIds)) {\n        for (const boxId of predicateOrBoxIds) this._ensureInclusionBoxIds.add(boxId);\n      } else {\n        this._ensureInclusionBoxIds.add(predicateOrBoxIds);\n      }\n    }\n\n    return this;\n  }\n\n  public orderBy(\n    selector: SortingSelector<Box<bigint>>,\n    direction?: SortingDirection\n  ): BoxSelector<T> {\n    this._selector = selector;\n    this._sortDirection = direction;\n\n    return this;\n  }\n\n  private _isISelectionStrategyImplementation(obj: unknown): obj is ISelectionStrategy {\n    if ((obj as ISelectionStrategy).select) {\n      return true;\n    }\n\n    return false;\n  }\n\n  public static buildTargetFrom(boxes: Box<Amount>[] | BoxCandidate<Amount>[]): SelectionTarget {\n    const tokens: { [tokenId: string]: bigint } = {};\n    let nanoErgs = _0n;\n\n    for (const box of boxes) {\n      nanoErgs += ensureBigInt(box.value);\n      for (const token of box.assets) {\n        tokens[token.tokenId] = (tokens[token.tokenId] || _0n) + ensureBigInt(token.amount);\n      }\n    }\n\n    return {\n      nanoErgs,\n      tokens: Object.keys(tokens).map((tokenId) => ({\n        tokenId,\n        amount: tokens[tokenId]\n      }))\n    };\n  }\n}\n","import { type Box, orderBy } from \"@fleet-sdk/common\";\nimport type { SelectionTarget } from \"../boxSelector\";\nimport { AccumulativeSelectionStrategy } from \"./accumulativeSelectionStrategy\";\n\n/**\n * The Cherry Pick strategy accumulates inputs until the target amounts trying\n * to pick inputs with as less as possible unused tokens.\n */\nexport class CherryPickSelectionStrategy extends AccumulativeSelectionStrategy {\n  public override select(inputs: Box<bigint>[], target: SelectionTarget): Box<bigint>[] {\n    const orderedInputs = orderBy(\n      inputs,\n      (x) => new Set(x.assets.map((asset) => asset.tokenId)).size,\n      \"asc\"\n    );\n\n    return super.select(orderedInputs, target);\n  }\n}\n","export class DuplicateInputError extends Error {\n  constructor(boxId: string) {\n    super(`Box '${boxId}' is already included.`);\n  }\n}\n","export class InsufficientTokenAmount extends Error {}\n","export class InvalidAddress extends Error {\n  constructor(address: string) {\n    super(`Invalid Ergo address: ${address}`);\n  }\n}\n","export class InvalidInput extends Error {\n  constructor(boxId: string) {\n    super(`Invalid input: ${boxId}`);\n  }\n}\n","export class InvalidRegistersPacking extends Error {\n  constructor() {\n    super(\n      `Registers should be densely packed. This means that it's not possible to use a register like 'R7' without filling 'R6', 'R5' and 'R4', for example.`\n    );\n  }\n}\n","export class MalformedTransaction extends Error {\n  constructor(message: string) {\n    super(`Malformed transaction: ${message}`);\n  }\n}\n","import {\n  type Amount,\n  Collection,\n  type CollectionAddOptions,\n  FleetError,\n  type NewToken,\n  type OneOrMore,\n  type TokenAmount,\n  type TokenId,\n  isDefined,\n  isUndefined\n} from \"@fleet-sdk/common\";\nimport { ensureBigInt } from \"@fleet-sdk/common\";\nimport { NotFoundError, UndefinedMintingContext } from \"../../errors\";\nimport { InsufficientTokenAmount } from \"../../errors/insufficientTokenAmount\";\nimport { MaxTokensOverflow } from \"../../errors/maxTokensOverflow\";\n\nexport const MAX_TOKENS_PER_BOX = 100;\n\nexport type TokenAddOptions = CollectionAddOptions & { sum?: boolean };\nexport type OutputToken<T extends Amount = Amount> = {\n  tokenId?: TokenId;\n  amount: T;\n};\n\ntype MintingData = { index: number; metadata: NewToken<Amount> };\n\nexport class TokensCollection extends Collection<OutputToken<bigint>, OutputToken> {\n  #minting: MintingData | undefined;\n\n  constructor();\n  constructor(token: TokenAmount<Amount>);\n  constructor(tokens: TokenAmount<Amount>[]);\n  constructor(tokens: TokenAmount<Amount>[], options: TokenAddOptions);\n  constructor(tokens?: OneOrMore<TokenAmount<Amount>>, options?: TokenAddOptions) {\n    super();\n    if (isDefined(tokens)) this.add(tokens, options);\n  }\n\n  public get minting(): NewToken<bigint> | undefined {\n    if (!this.#minting) return undefined;\n    return {\n      ...this.#minting.metadata,\n      amount: this._items[this.#minting.index].amount\n    };\n  }\n\n  protected override _map(token: OutputToken): OutputToken<bigint> {\n    return { tokenId: token.tokenId, amount: ensureBigInt(token.amount) };\n  }\n\n  protected override _addOne(token: OutputToken, options?: TokenAddOptions): number {\n    if (isUndefined(options) || (options.sum && isUndefined(options.index))) {\n      if (this._sum(this._map(token))) return this.length;\n    }\n\n    if (this._items.length >= MAX_TOKENS_PER_BOX) throw new MaxTokensOverflow();\n    super._addOne(token, options);\n\n    return this.length;\n  }\n\n  public override add(items: OneOrMore<TokenAmount<Amount>>, options?: TokenAddOptions): number {\n    if (Array.isArray(items)) {\n      if (items.some((x) => !x.tokenId)) throw new FleetError(\"TokenID is required.\");\n    } else if (!items.tokenId) {\n      throw new FleetError(\"TokenID is required.\");\n    }\n\n    return super.add(items, options);\n  }\n\n  public mint(token: NewToken<Amount>): number {\n    if (isDefined(this.#minting)) {\n      throw new FleetError(\"Only one minting token is allowed per transaction.\");\n    }\n\n    const len = super.add({ tokenId: token.tokenId, amount: token.amount });\n    this.#minting = { index: len - 1, metadata: token };\n    return this.length;\n  }\n\n  private _sum(token: OutputToken<bigint>): boolean {\n    for (const t of this._items) {\n      if (t.tokenId === token.tokenId) {\n        t.amount += token.amount;\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  public remove(tokenId: TokenId, amount?: Amount): number;\n  public remove(index: number, amount?: Amount): number;\n  public remove(tokenIdOrIndex: TokenId | number, amount?: Amount): number {\n    let index = -1;\n    if (typeof tokenIdOrIndex === \"number\") {\n      if (this._isIndexOutOfBounds(tokenIdOrIndex)) {\n        throw new RangeError(`Index '${tokenIdOrIndex}' is out of range.`);\n      }\n\n      index = tokenIdOrIndex;\n    } else {\n      index = this._items.findIndex((token) => token.tokenId === tokenIdOrIndex);\n\n      if (this._isIndexOutOfBounds(index)) {\n        throw new NotFoundError(`TokenId '${tokenIdOrIndex}' not found in assets collection.`);\n      }\n    }\n\n    if (amount && index > -1) {\n      const bigAmount = ensureBigInt(amount);\n      const token = this._items[index];\n\n      if (bigAmount > token.amount) {\n        throw new InsufficientTokenAmount(\n          \"Insufficient token amount to perform a subtraction operation.\"\n        );\n      }\n\n      if (bigAmount < token.amount) {\n        token.amount -= bigAmount;\n        return this.length;\n      }\n    }\n\n    this._items.splice(index, 1);\n    return this.length;\n  }\n\n  contains(tokenId: string): boolean {\n    return this._items.some((x) => x.tokenId === tokenId);\n  }\n\n  toArray(): TokenAmount<bigint>[];\n  toArray(mintingTokenId: string): TokenAmount<bigint>[];\n  toArray(mintingTokenId?: string): TokenAmount<bigint>[];\n  toArray(mintingTokenId?: string): OutputToken[] {\n    if (this.minting) {\n      if (!mintingTokenId) throw new UndefinedMintingContext();\n\n      return this._items.map((x) => ({\n        tokenId: x.tokenId ? x.tokenId : mintingTokenId,\n        amount: x.amount\n      }));\n    }\n\n    return super.toArray();\n  }\n}\n","import { MAX_TOKENS_PER_BOX } from \"../models/collections/tokensCollection\";\n\nexport class MaxTokensOverflow extends Error {\n  constructor() {\n    super(`A box must contain no more than ${MAX_TOKENS_PER_BOX} distinct tokens.`);\n  }\n}\n","export class NotAllowedTokenBurning extends Error {\n  constructor() {\n    super(\n      \"This transaction is trying to burn tokens. If that's your intention you must explicitly allow token burning on TransactionBuilder.configure() method. If no, a change address should be provided.\"\n    );\n  }\n}\n","export class NotFoundError extends Error {}\n","export class UndefinedCreationHeight extends Error {\n  constructor() {\n    super(\n      \"Minting context is undefined. Transaction's inputs must be included in order to determine minting token id.\"\n    );\n  }\n}\n","export class UndefinedMintingContext extends Error {\n  constructor() {\n    super(\"Creation Height is undefined.\");\n  }\n}\n","import {\n  AddressType,\n  type Base58String,\n  type Network,\n  areEqual,\n  concatBytes,\n  first,\n  isEmpty\n} from \"@fleet-sdk/common\";\nimport { base58, blake2b256, validateEcPoint } from \"@fleet-sdk/crypto\";\nimport { SigmaByteWriter } from \"@fleet-sdk/serializer\";\n\nexport const CHECKSUM_LENGTH = 4;\nexport const BLAKE_256_HASH_LENGTH = 32;\n\nexport type UnpackedAddress = {\n  head: Uint8Array;\n  body: Uint8Array;\n  checksum: Uint8Array;\n  network: Network;\n  type: AddressType;\n};\n\nexport function getNetworkType(addressBytes: Uint8Array): Network {\n  return first(addressBytes) & 0xf0;\n}\n\nexport function getAddressType(addressBytes: Uint8Array): AddressType {\n  return first(addressBytes) & 0x0f;\n}\n\n/**\n * Unpacks the given bytes into an UnpackedAddress object.\n *\n * @param bytes - The bytes to unpack.\n * @returns The UnpackedAddress object containing the unpacked data.\n */\nexport function unpackAddress(bytes: Uint8Array): UnpackedAddress {\n  return {\n    head: bytes.subarray(0, 1),\n    body: bytes.subarray(1, bytes.length - CHECKSUM_LENGTH),\n    checksum: bytes.subarray(bytes.length - CHECKSUM_LENGTH, bytes.length),\n    network: getNetworkType(bytes),\n    type: getAddressType(bytes)\n  };\n}\n\nexport function encodeAddress(\n  network: Network,\n  type: AddressType,\n  content: Uint8Array\n): Base58String {\n  return new SigmaByteWriter(1 /** head */ + content.length + CHECKSUM_LENGTH)\n    .write(network + type)\n    .writeBytes(content)\n    .writeChecksum(CHECKSUM_LENGTH)\n    .encode(base58);\n}\n\nexport function validateUnpackedAddress(unpacked: UnpackedAddress): boolean {\n  const content = concatBytes(unpacked.head, unpacked.body);\n  if (isEmpty(unpacked.body)) return false;\n  if (unpacked.type === AddressType.P2PK && !validateEcPoint(unpacked.body)) return false;\n\n  const checksum = blake2b256(content).subarray(0, CHECKSUM_LENGTH);\n  return areEqual(checksum, unpacked.checksum);\n}\n\n/**\n * Validates a Base58 encoded address.\n *\n * @param encodedAddress - The Base58 encoded address to validate.\n * @returns A boolean indicating whether the address is valid or not.\n */\nexport function validateAddress(encodedAddress: Base58String): boolean {\n  return validateUnpackedAddress(unpackAddress(base58.decode(encodedAddress)));\n}\n","import { AddressType, type Base58String, type HexString, Network } from \"@fleet-sdk/common\";\nimport { concatBytes, endsWith, first, startsWith } from \"@fleet-sdk/common\";\nimport {\n  type ByteInput,\n  base58,\n  blake2b256,\n  ensureBytes,\n  hex,\n  validateEcPoint\n} from \"@fleet-sdk/crypto\";\nimport { InvalidAddress } from \"../errors/invalidAddress\";\nimport {\n  BLAKE_256_HASH_LENGTH,\n  type UnpackedAddress,\n  encodeAddress,\n  getAddressType,\n  getNetworkType,\n  unpackAddress,\n  validateAddress,\n  validateUnpackedAddress\n} from \"./utils\";\n\nconst P2PK_ERGOTREE_PREFIX = hex.decode(\"0008cd\");\nconst P2PK_ERGOTREE_LENGTH = 36;\n\nconst P2SH_ERGOTREE_PREFIX = hex.decode(\"00ea02d193b4cbe4e3010e040004300e18\");\nconst P2SH_ERGOTREE_SUFFIX = hex.decode(\"d40801\");\nconst P2SH_ERGOTREE_LENGTH = 44;\nconst P2SH_HASH_LENGTH = 24;\n\nfunction getErgoTreeType(ergoTree: Uint8Array): AddressType {\n  if (ergoTree.length === P2PK_ERGOTREE_LENGTH && startsWith(ergoTree, P2PK_ERGOTREE_PREFIX)) {\n    return AddressType.P2PK;\n  }\n\n  if (\n    ergoTree.length === P2SH_ERGOTREE_LENGTH &&\n    startsWith(ergoTree, P2SH_ERGOTREE_PREFIX) &&\n    endsWith(ergoTree, P2SH_ERGOTREE_SUFFIX)\n  ) {\n    return AddressType.P2SH;\n  }\n\n  return AddressType.P2S;\n}\n\n/**\n * Ergo address model\n *\n * @example\n * Convert address to ErgoTree hex string\n * ```\n * const address = new Address(\"9eZ24iqjKywjzAti9RnWWTR3CiNnLJDAcd2MenKodcAfzc8AFTu\");\n * console.log(address.ergoTree);\n * ```\n *\n * @example\n * Convert ErgoTree hex string to address string\n * ```\n * const ergoTree = \"0008cd026dc059d64a50d0dbf07755c2c4a4e557e3df8afa7141868b3ab200643d437ee7\"\n * const address = Address.fromErgoTree(ergoTree).toString();\n * ```\n */\nexport class ErgoAddress {\n  #ergoTree: Uint8Array;\n  #network: Network;\n  #type: AddressType;\n\n  public get network(): Network {\n    return this.#network;\n  }\n\n  /**\n   * ErgoTree hex string\n   */\n  public get ergoTree(): HexString {\n    return hex.encode(this.#ergoTree);\n  }\n\n  public get type(): AddressType {\n    return this.#type;\n  }\n\n  /**\n   * New instance from ErgoTree bytes\n   * @param ergoTree ErgoTree bytes\n   */\n  public constructor(ergoTree: Uint8Array, network: Network = Network.Mainnet) {\n    this.#ergoTree = ergoTree;\n    this.#network = network;\n    this.#type = getErgoTreeType(ergoTree);\n  }\n\n  /**\n   * Create a new instance from an ErgoTree\n   * @param ergoTree ErgoTree hex string\n   */\n  public static fromErgoTree(ergoTree: ByteInput, network?: Network): ErgoAddress {\n    return new ErgoAddress(ensureBytes(ergoTree), network);\n  }\n\n  /**\n   * Create a new instance from a public key\n   * @param publicKey Public key hex string\n   */\n  public static fromPublicKey(publicKey: ByteInput, network?: Network): ErgoAddress {\n    const bytes = ensureBytes(publicKey);\n    if (!validateEcPoint(bytes)) throw new Error(\"The Public Key is invalid.\");\n\n    const ergoTree = concatBytes(P2PK_ERGOTREE_PREFIX, bytes);\n    return new ErgoAddress(ergoTree, network);\n  }\n\n  public static fromHash(hash: HexString | Uint8Array, network?: Network): ErgoAddress {\n    let bytes = ensureBytes(hash);\n\n    if (bytes.length === BLAKE_256_HASH_LENGTH) {\n      bytes = bytes.subarray(0, P2SH_HASH_LENGTH);\n    } else if (bytes.length !== P2SH_HASH_LENGTH) {\n      throw Error(`Invalid hash length: ${bytes.length}`);\n    }\n\n    const ergoTree = concatBytes(P2SH_ERGOTREE_PREFIX, bytes, P2SH_ERGOTREE_SUFFIX);\n\n    return new ErgoAddress(ergoTree, network);\n  }\n\n  /**\n   * Create a new checked instance from an address string\n   * @param encodedAddress Address encoded as base58\n   */\n  public static decode(encodedAddress: Base58String): ErgoAddress {\n    const bytes = base58.decode(encodedAddress);\n    const unpacked = unpackAddress(bytes);\n    if (!validateUnpackedAddress(unpacked)) throw new InvalidAddress(encodedAddress);\n\n    return ErgoAddress.#fromUnpacked(unpacked);\n  }\n\n  public static decodeUnsafe(encodedAddress: Base58String): ErgoAddress {\n    return ErgoAddress.#fromUnpacked(unpackAddress(base58.decode(encodedAddress)));\n  }\n\n  static fromBase58(address: Base58String, unsafe = false): ErgoAddress {\n    return unsafe ? ErgoAddress.decodeUnsafe(address) : ErgoAddress.decode(address);\n  }\n\n  static #fromUnpacked(unpacked: UnpackedAddress) {\n    switch (unpacked.type) {\n      case AddressType.P2PK:\n        return ErgoAddress.fromPublicKey(unpacked.body, unpacked.network);\n      case AddressType.P2SH:\n        return ErgoAddress.fromHash(unpacked.body, unpacked.network);\n      case AddressType.ADH:\n        throw new Error(\"Invalid address type\");\n      default:\n        return new ErgoAddress(unpacked.body, unpacked.network);\n    }\n  }\n\n  /**\n   * Validate an address\n   * @param address Address bytes or string\n   * @deprecated Use `validateAddress()` function instead\n   */\n  public static validate(address: Base58String): boolean {\n    return validateAddress(address);\n  }\n\n  public static getNetworkType(address: Base58String): Network {\n    return getNetworkType(base58.decode(address));\n  }\n\n  public static getAddressType(address: Base58String): AddressType {\n    return getAddressType(base58.decode(address));\n  }\n\n  public getPublicKeys(): Uint8Array[] {\n    if (this.type === AddressType.P2PK) {\n      return [this.#ergoTree.subarray(P2PK_ERGOTREE_PREFIX.length)];\n    }\n\n    return [];\n  }\n\n  public toP2SH(network?: Network): Base58String {\n    if (this.type === AddressType.P2SH) return this.encode();\n\n    const hash = blake2b256(this.#ergoTree).subarray(0, P2SH_HASH_LENGTH);\n    return encodeAddress(network ?? this.#network, AddressType.P2SH, hash);\n  }\n\n  /**\n   * Encode address as base58 string\n   */\n  public encode(network?: Network): Base58String {\n    let body: Uint8Array;\n    if (this.type === AddressType.P2PK) {\n      body = first(this.getPublicKeys());\n    } else if (this.type === AddressType.P2SH) {\n      body = this.#ergoTree.subarray(\n        P2SH_ERGOTREE_PREFIX.length,\n        P2SH_ERGOTREE_PREFIX.length + P2SH_HASH_LENGTH\n      );\n    } else {\n      body = this.#ergoTree;\n    }\n\n    return encodeAddress(network ?? this.#network, this.#type, body);\n  }\n\n  /**\n   * Encode address as base58 string\n   */\n  public toString(network?: Network): Base58String {\n    return this.encode(network ?? this.#network);\n  }\n}\n","import type { Amount, BoxCandidate, NonMandatoryRegisters, TokenAmount } from \"@fleet-sdk/common\";\nimport { ensureBigInt } from \"@fleet-sdk/common\";\nimport type { TransactionOutputFlags } from \"../builder\";\nimport { ErgoBox } from \"./ergoBox\";\n\nexport class ErgoBoxCandidate<R extends NonMandatoryRegisters = NonMandatoryRegisters> {\n  value: bigint;\n  ergoTree: string;\n  creationHeight: number;\n  assets: TokenAmount<bigint>[];\n  additionalRegisters: R;\n  flags?: TransactionOutputFlags;\n\n  constructor(candidate: BoxCandidate<Amount, R>, flags?: TransactionOutputFlags) {\n    this.ergoTree = candidate.ergoTree;\n    this.creationHeight = candidate.creationHeight;\n    this.value = ensureBigInt(candidate.value);\n    this.assets = candidate.assets.map((asset) => ({\n      tokenId: asset.tokenId,\n      amount: ensureBigInt(asset.amount)\n    }));\n    this.additionalRegisters = candidate.additionalRegisters;\n    this.flags = flags;\n  }\n\n  toBox(transactionId: string, index: number): ErgoBox<R> {\n    return new ErgoBox(this, transactionId, index);\n  }\n\n  toPlainObject(): BoxCandidate<string> {\n    return {\n      value: this.value.toString(),\n      ergoTree: this.ergoTree,\n      creationHeight: this.creationHeight,\n      assets: this.assets.map((asset) => ({\n        tokenId: asset.tokenId,\n        amount: asset.amount.toString()\n      })),\n      additionalRegisters: this.additionalRegisters\n    };\n  }\n}\n","import type {\n  Amount,\n  Box,\n  BoxCandidate,\n  DataInput,\n  NonMandatoryRegisters,\n  PlainObjectType,\n  TokenAmount\n} from \"@fleet-sdk/common\";\nimport { FleetError, isDefined, isUndefined } from \"@fleet-sdk/common\";\nimport { blake2b256, hex } from \"@fleet-sdk/crypto\";\nimport { serializeBox } from \"@fleet-sdk/serializer\";\nimport { ErgoBoxCandidate } from \"./ergoBoxCandidate\";\n\nexport class ErgoBox<R extends NonMandatoryRegisters = NonMandatoryRegisters> {\n  #candidate: ErgoBoxCandidate<R>;\n\n  #boxId?: string;\n  #transactionId: string;\n  #index: number;\n\n  get value(): bigint {\n    return this.#candidate.value;\n  }\n\n  get ergoTree(): string {\n    return this.#candidate.ergoTree;\n  }\n\n  get creationHeight(): number {\n    return this.#candidate.creationHeight;\n  }\n\n  get assets(): TokenAmount<bigint>[] {\n    return this.#candidate.assets;\n  }\n\n  get additionalRegisters(): R {\n    return this.#candidate.additionalRegisters;\n  }\n\n  get boxId(): string {\n    if (!this.#boxId) {\n      this.#boxId = hex.encode(blake2b256(serializeBox(this).toBytes()));\n    }\n\n    return this.#boxId;\n  }\n\n  get transactionId(): string {\n    return this.#transactionId;\n  }\n\n  get index(): number {\n    return this.#index;\n  }\n\n  get change(): boolean {\n    return !!this.#candidate.flags?.change;\n  }\n\n  constructor(candidate: ErgoBoxCandidate<R>, transactionId: string, index: number);\n  constructor(candidate: BoxCandidate<Amount, R>, transactionId: string, index: number);\n  constructor(box: Box<Amount, R>);\n  constructor(box: ErgoBox<R>);\n  constructor(\n    box: Box<Amount, R> | ErgoBox<R> | ErgoBoxCandidate<R> | BoxCandidate<Amount, R>,\n    transactionId?: string,\n    index?: number\n  ) {\n    if (box instanceof ErgoBox) {\n      this.#candidate = box.#candidate;\n      this.#transactionId = box.transactionId;\n      this.#index = box.index;\n      this.#boxId = box.boxId;\n    } else if (isBox(box)) {\n      this.#candidate = new ErgoBoxCandidate(box);\n      this.#transactionId = box.transactionId;\n      this.#index = box.index;\n      this.#boxId = box.boxId;\n    } else {\n      if (!transactionId || isUndefined(index)) {\n        throw new FleetError(\"TransactionId and Index must be provided for Box generation.\");\n      }\n\n      this.#candidate = box instanceof ErgoBoxCandidate ? box : new ErgoBoxCandidate(box);\n      this.#transactionId = transactionId;\n      this.#index = index;\n    }\n  }\n\n  toPlainObject(type: \"minimal\"): DataInput;\n  toPlainObject(type: \"EIP-12\"): Box<string>;\n  toPlainObject(type: PlainObjectType): Box<string> | DataInput;\n  toPlainObject(type: PlainObjectType): Box<string> | DataInput {\n    if (type === \"minimal\") return { boxId: this.boxId };\n\n    return {\n      boxId: this.boxId,\n      ...this.#candidate.toPlainObject(),\n      transactionId: this.transactionId,\n      index: this.index\n    };\n  }\n\n  toCandidate(): ErgoBoxCandidate<R> {\n    return this.#candidate;\n  }\n\n  public isValid(): boolean {\n    return ErgoBox.validate(this);\n  }\n\n  static validate(box: Box<Amount> | ErgoBox): boolean {\n    const bytes = serializeBox(box).toBytes();\n    const hash = hex.encode(blake2b256(bytes));\n\n    return box.boxId === hash;\n  }\n}\n\nfunction isBox<T extends Amount>(box: Box<Amount> | BoxCandidate<Amount>): box is Box<T> {\n  const castedBox = box as Box<T>;\n  return !!castedBox.boxId && !!castedBox.transactionId && isDefined(castedBox.index);\n}\n","import type {\n  Amount,\n  Box,\n  ContextExtension,\n  DataInput,\n  EIP12UnsignedDataInput,\n  EIP12UnsignedInput,\n  NonMandatoryRegisters,\n  PlainObjectType,\n  UnsignedInput\n} from \"@fleet-sdk/common\";\nimport type { ConstantInput } from \"../builder\";\nimport { ErgoBox } from \"./ergoBox\";\n\ntype InputBox<R extends NonMandatoryRegisters> = Box<Amount, R> & {\n  extension?: ContextExtension;\n};\ntype ContextExtensionInput = ContextExtension<ConstantInput>;\n\nexport class ErgoUnsignedInput<\n  R extends NonMandatoryRegisters = NonMandatoryRegisters\n> extends ErgoBox<R> {\n  #extension: ContextExtension = {};\n\n  get extension(): ContextExtension {\n    return this.#extension;\n  }\n\n  constructor(box: InputBox<R>) {\n    super(box);\n    if (box.extension) this.setContextExtension(box.extension);\n  }\n\n  setContextExtension(extension: ContextExtensionInput): ErgoUnsignedInput {\n    for (const key in extension) {\n      const c = extension[key] as ConstantInput;\n      if (!c) continue;\n\n      this.#extension[key as unknown as keyof ContextExtension] =\n        typeof c === \"string\" ? c : c.toHex();\n    }\n\n    return this;\n  }\n\n  /**\n   * @deprecated use `setContextExtension` instead.\n   */\n  setContextVars(extension: ContextExtensionInput): ErgoUnsignedInput {\n    return this.setContextExtension(extension);\n  }\n\n  override toPlainObject(type: \"EIP-12\"): EIP12UnsignedInput;\n  override toPlainObject(type: \"minimal\"): UnsignedInput;\n  override toPlainObject(type: PlainObjectType): EIP12UnsignedInput | UnsignedInput;\n  override toPlainObject(type: PlainObjectType): EIP12UnsignedInput | UnsignedInput {\n    return { ...super.toPlainObject(type), extension: this.extension };\n  }\n\n  toDataInputPlainObject(type: \"EIP-12\"): EIP12UnsignedDataInput;\n  toDataInputPlainObject(type: \"minimal\"): DataInput;\n  toDataInputPlainObject(type: PlainObjectType): EIP12UnsignedDataInput | DataInput;\n  toDataInputPlainObject(type: PlainObjectType): EIP12UnsignedDataInput | DataInput {\n    return super.toPlainObject(type);\n  }\n}\n","import type { EIP12UnsignedTransaction, UnsignedTransaction } from \"@fleet-sdk/common\";\nimport type { ErgoUnsignedTransaction } from \"./ergoUnsignedTransaction\";\n\nexport class ErgoUnsignedTransactionChain {\n  #entryPoint: ErgoUnsignedTransaction;\n\n  constructor(entryPoint: ErgoUnsignedTransaction) {\n    this.#entryPoint = entryPoint;\n  }\n\n  first(): ErgoUnsignedTransaction {\n    return this.#entryPoint;\n  }\n\n  toArray() {\n    let parent = this.#entryPoint;\n    const chain = [parent];\n\n    while (parent.child) {\n      chain.push(parent.child);\n      parent = parent.child;\n    }\n\n    return chain;\n  }\n\n  toEIP12Object(): EIP12UnsignedTransaction[] {\n    return this.toArray().map((child) => child.toEIP12Object());\n  }\n\n  toPlainObject(): UnsignedTransaction[] {\n    return this.toArray().map((child) => child.toPlainObject());\n  }\n}\n","import {\n  type BoxSummary,\n  type EIP12UnsignedTransaction,\n  FleetError,\n  type PlainObjectType,\n  type UnsignedTransaction,\n  utxoDiff,\n  utxoSum\n} from \"@fleet-sdk/common\";\nimport { blake2b256, hex } from \"@fleet-sdk/crypto\";\nimport { serializeTransaction } from \"@fleet-sdk/serializer\";\nimport { TransactionBuilder } from \"../builder\";\nimport type { ErgoBox } from \"./ergoBox\";\nimport type { ErgoBoxCandidate } from \"./ergoBoxCandidate\";\nimport type { ErgoUnsignedInput } from \"./ergoUnsignedInput\";\nimport { ErgoUnsignedTransactionChain } from \"./ergoUnsignedTransactionChain\";\n\ntype TransactionType<T> = T extends \"default\" ? UnsignedTransaction : EIP12UnsignedTransaction;\n\nexport type ChainCallback = (\n  child: TransactionBuilder,\n  parent: ErgoUnsignedTransaction\n) => TransactionBuilder | ErgoUnsignedTransaction | ErgoUnsignedTransactionChain;\n\nexport class ErgoUnsignedTransaction {\n  readonly #inputs: ErgoUnsignedInput[];\n  readonly #dataInputs: ErgoUnsignedInput[];\n  readonly #outputCandidates: ErgoBoxCandidate[];\n\n  #child?: ErgoUnsignedTransaction;\n  #outputs?: ErgoBox[];\n  #change?: ErgoBox[];\n  #id?: string;\n  #builder?: TransactionBuilder;\n\n  constructor(\n    inputs: ErgoUnsignedInput[],\n    dataInputs: ErgoUnsignedInput[],\n    outputs: ErgoBoxCandidate[],\n    builder?: TransactionBuilder\n  ) {\n    this.#inputs = inputs;\n    this.#dataInputs = dataInputs;\n    this.#outputCandidates = outputs;\n    this.#builder = builder;\n  }\n\n  get id(): string {\n    if (!this.#id) {\n      this.#id = hex.encode(blake2b256(this.toBytes()));\n    }\n\n    return this.#id;\n  }\n\n  get inputs(): ErgoUnsignedInput[] {\n    return this.#inputs;\n  }\n\n  get dataInputs(): ErgoUnsignedInput[] {\n    return this.#dataInputs;\n  }\n\n  get outputs(): ErgoBox[] {\n    if (!this.#outputs) {\n      this.#outputs = this.#outputCandidates.map((x, i) => x.toBox(this.id, i));\n    }\n\n    return this.#outputs;\n  }\n\n  get change(): ErgoBox[] {\n    if (!this.#change) {\n      this.#change = this.outputs.filter((x) => x.change);\n    }\n\n    return this.#change;\n  }\n\n  get burning(): BoxSummary {\n    const diff = utxoDiff(utxoSum(this.inputs), utxoSum(this.#outputCandidates));\n    if (diff.tokens.length > 0) {\n      diff.tokens = diff.tokens.filter((x) => x.tokenId !== this.inputs[0].boxId);\n    }\n\n    return diff;\n  }\n\n  get child(): ErgoUnsignedTransaction | undefined {\n    return this.#child;\n  }\n\n  chain(callback: ChainCallback): ErgoUnsignedTransactionChain {\n    if (!this.#builder) {\n      throw new FleetError(\"Cannot chain transactions without a parent TransactionBuilder\");\n    }\n\n    const height = this.#builder.creationHeight;\n    const builder = new TransactionBuilder(height).from(this.change);\n    if (this.#builder.fee) builder.payFee(this.#builder.fee);\n    if (this.#builder.changeAddress) builder.sendChangeTo(this.#builder.changeAddress);\n\n    const response = callback(builder, this);\n    if (response instanceof TransactionBuilder) {\n      this.#child = response.build();\n    } else if (response instanceof ErgoUnsignedTransactionChain) {\n      this.#child = response.first();\n    } else {\n      this.#child = response;\n    }\n\n    return new ErgoUnsignedTransactionChain(this);\n  }\n\n  toPlainObject(): UnsignedTransaction;\n  toPlainObject<T extends PlainObjectType>(type: T): TransactionType<T>;\n  toPlainObject<T extends PlainObjectType>(type?: T): TransactionType<T> {\n    return {\n      inputs: this.inputs.map((input) => input.toPlainObject(type ?? \"minimal\")),\n      dataInputs: this.dataInputs.map((input) => input.toDataInputPlainObject(type ?? \"minimal\")),\n      outputs: this.#outputCandidates.map((output) => output.toPlainObject())\n    } as TransactionType<T>;\n  }\n\n  toEIP12Object(): EIP12UnsignedTransaction {\n    return this.toPlainObject(\"EIP-12\");\n  }\n\n  toBytes(): Uint8Array {\n    return serializeTransaction({\n      inputs: this.inputs,\n      dataInputs: this.dataInputs,\n      outputs: this.#outputCandidates\n    }).toBytes();\n  }\n}\n","import { type Amount, type Box, type BoxId, Collection, type OneOrMore } from \"@fleet-sdk/common\";\nimport { isDefined } from \"@fleet-sdk/common\";\nimport { DuplicateInputError, NotFoundError } from \"../../errors\";\nimport { ErgoUnsignedInput } from \"../ergoUnsignedInput\";\n\nexport class InputsCollection extends Collection<ErgoUnsignedInput, Box<Amount>> {\n  constructor();\n  constructor(box: Box<Amount>);\n  constructor(boxes: Box<Amount>[]);\n  constructor(boxes?: OneOrMore<Box<Amount>>) {\n    super();\n    if (isDefined(boxes)) this.add(boxes);\n  }\n\n  protected override _map(input: Box<Amount> | ErgoUnsignedInput): ErgoUnsignedInput {\n    return input instanceof ErgoUnsignedInput ? input : new ErgoUnsignedInput(input);\n  }\n\n  protected override _addOne(box: Box<Amount>): number {\n    if (this._items.some((item) => item.boxId === box.boxId)) {\n      throw new DuplicateInputError(box.boxId);\n    }\n\n    return super._addOne(box);\n  }\n\n  public remove(boxId: BoxId): number;\n  public remove(index: number): number;\n  public remove(boxIdOrIndex: BoxId | number): number {\n    let index = -1;\n    if (typeof boxIdOrIndex === \"number\") {\n      if (this._isIndexOutOfBounds(boxIdOrIndex)) {\n        throw new RangeError(`Index '${boxIdOrIndex}' is out of range.`);\n      }\n\n      index = boxIdOrIndex;\n    } else {\n      index = this._items.findIndex((box) => box.boxId === boxIdOrIndex);\n\n      if (this._isIndexOutOfBounds(index)) {\n        throw new NotFoundError(\n          \"The input you are trying to remove is not present in the inputs collection.\"\n        );\n      }\n    }\n\n    this._items.splice(index, 1);\n    return this.length;\n  }\n}\n","import {\n  type BoxSummary,\n  Collection,\n  type OneOrMore,\n  _0n,\n  isDefined,\n  isUndefined,\n  some\n} from \"@fleet-sdk/common\";\nimport type { OutputBuilder } from \"../../builder/outputBuilder\";\nimport type { SelectionTarget } from \"../../builder/selector/boxSelector\";\nimport { NotFoundError } from \"../../errors\";\n\nfunction setSum<K>(map: Map<K, bigint>, key: K, value: bigint) {\n  return map.set(key, (map.get(key) || _0n) + value);\n}\n\nexport class OutputsCollection extends Collection<OutputBuilder, OutputBuilder> {\n  constructor(outputs?: OneOrMore<OutputBuilder>) {\n    super();\n    if (isDefined(outputs)) this.add(outputs);\n  }\n\n  protected _map(output: OutputBuilder) {\n    return output;\n  }\n\n  remove(output: OutputBuilder): number;\n  remove(index: number): number;\n  remove(outputs: OutputBuilder | number): number {\n    let index = -1;\n    if (typeof outputs === \"number\") {\n      if (this._isIndexOutOfBounds(outputs)) {\n        throw new RangeError(`Index '${outputs}' is out of range.`);\n      }\n\n      index = outputs;\n    } else {\n      index = this._items.lastIndexOf(outputs);\n\n      if (this._isIndexOutOfBounds(index)) {\n        throw new NotFoundError(\n          \"The output you are trying to remove is not present in the outputs collection.\"\n        );\n      }\n    }\n\n    this._items.splice(index, 1);\n\n    return this.length;\n  }\n\n  clone(): OutputsCollection {\n    return new OutputsCollection(this._items);\n  }\n\n  sum(basis?: SelectionTarget | BoxSummary): BoxSummary {\n    const tokens = new Map<string, bigint>();\n    let nanoErgs = _0n;\n\n    if (basis) {\n      if (basis.nanoErgs) {\n        nanoErgs = basis.nanoErgs;\n      }\n\n      if (some(basis.tokens)) {\n        for (const token of basis.tokens) {\n          if (isUndefined(token.amount)) continue;\n\n          setSum(tokens, token.tokenId, token.amount);\n        }\n      }\n    }\n\n    for (const box of this._items) {\n      nanoErgs += box.value;\n      for (const token of box.assets) {\n        if (token.tokenId) setSum(tokens, token.tokenId, token.amount);\n      }\n    }\n\n    return {\n      nanoErgs,\n      tokens: Array.from(tokens, ([tokenId, amount]) => ({ tokenId, amount }))\n    };\n  }\n}\n","import {\n  type Base58String,\n  type HexString,\n  Network,\n  byteSizeOf,\n  ergoTreeHeaderFlags\n} from \"@fleet-sdk/common\";\nimport { type ByteInput, hex } from \"@fleet-sdk/crypto\";\nimport {\n  SConstant,\n  SigmaByteReader,\n  SigmaByteWriter,\n  estimateVLQSize\n} from \"@fleet-sdk/serializer\";\nimport { ErgoAddress } from \"./ergoAddress\";\n\nconst VERSION_MASK = 0x07;\nconst HEADER_SIZE = 1; // we treat the header as a single byte for now, but it can be extended in the future\n\nexport class ErgoTree {\n  readonly #header: number;\n  readonly #network: Network;\n\n  #byteReader?: SigmaByteReader;\n  #root!: Uint8Array;\n  #constants: SConstant[] = [];\n  #constantNames: Map<string, number> = new Map();\n\n  constructor(input: ByteInput, network?: Network) {\n    this.#byteReader = new SigmaByteReader(input);\n\n    this.#header = this.#byteReader.readByte();\n    this.#network = network ?? Network.Mainnet;\n  }\n\n  static from(input: JsonCompilerOutput, network?: Network): ErgoTree {\n    const tree = new ErgoTree(reconstructTreeFromObject(input).toBytes(), network);\n    if (tree.hasSegregatedConstants && input.constants?.length) {\n      for (let i = 0; i < input.constants.length; i++) {\n        const constant = input.constants[i];\n        if (!constant.name) continue;\n\n        tree.#nameConstant(i, constant.name);\n      }\n    }\n\n    return tree;\n  }\n\n  get bytes(): Uint8Array {\n    return this.serialize();\n  }\n\n  get header(): number {\n    return this.#header;\n  }\n\n  get version(): number {\n    return getVersion(this.#header);\n  }\n\n  get hasSegregatedConstants(): boolean {\n    return hasFlag(this.#header, ergoTreeHeaderFlags.constantSegregation);\n  }\n\n  get hasSize(): boolean {\n    return hasFlag(this.#header, ergoTreeHeaderFlags.sizeInclusion);\n  }\n\n  get constants(): ReadonlyArray<SConstant> {\n    if (!this.hasSegregatedConstants) return [];\n    return this.#parse().#constants.slice();\n  }\n\n  get template(): Readonly<Uint8Array> {\n    return this.#parse().#root.slice();\n  }\n\n  get #parsed(): boolean {\n    return !!this.#root;\n  }\n\n  replaceConstant(index: number | string, constant: SConstant): ErgoTree {\n    if (!this.hasSegregatedConstants) throw new Error(\"Constant segregation is not enabled.\");\n\n    this.#parse();\n\n    if (typeof index === \"string\") {\n      const namedIndex = this.#constantNames.get(index);\n      if (namedIndex === undefined) throw new Error(`Constant with name '${index}' not found.`);\n\n      index = namedIndex;\n    }\n\n    const oldConst = this.#constants[index];\n    if (!oldConst) throw new Error(`Constant at index ${index} not found.`);\n    if (oldConst.type.toString() !== constant.type.toString()) {\n      throw new Error(\n        `Constant type mismatch: can't replace '${oldConst.type.toString()}' with '${constant.type.toString()}'`\n      );\n    }\n\n    this.#constants[index] = constant;\n    this.#byteReader = undefined; // reset reader to force re-serialization\n    return this;\n  }\n\n  #nameConstant(index: number, name: string): ErgoTree {\n    this.#constantNames.set(name, index);\n    return this;\n  }\n\n  toHex(): HexString {\n    return hex.encode(this.serialize());\n  }\n\n  toAddress(network?: Network): ErgoAddress {\n    return ErgoAddress.fromErgoTree(this.serialize(), network ?? this.#network);\n  }\n\n  encode(network?: Network): Base58String {\n    return this.toAddress(network).encode();\n  }\n\n  serialize(): Uint8Array {\n    if (this.#byteReader) return this.#byteReader.bytes;\n\n    const segregatedFlag = this.hasSegregatedConstants;\n    const sizeFlag = this.hasSize;\n\n    let constantsSize = 0;\n    if (segregatedFlag) {\n      constantsSize =\n        estimateVLQSize(this.#constants.length) +\n        this.#constants.reduce((acc, constant) => acc + constant.bytes.length, 0);\n    }\n\n    const treeSize = constantsSize + this.#root.length;\n    let totalSize = HEADER_SIZE + treeSize;\n    if (sizeFlag) totalSize += estimateVLQSize(totalSize);\n\n    const writer = new SigmaByteWriter(totalSize).write(this.#header);\n    if (sizeFlag) writer.writeUInt(treeSize);\n    if (segregatedFlag) writer.writeArray(this.#constants, (w, c) => w.writeBytes(c.bytes));\n    return writer.writeBytes(this.#root).toBytes();\n  }\n\n  #parse(): ErgoTree {\n    if (this.#parsed) return this; // don't parse again if already parsed\n    if (!this.#byteReader || this.#byteReader.isEmpty) throw new Error(\"Empty tree bytes.\");\n\n    // header is already read in the constructor\n    if (this.hasSize) this.#byteReader.readUInt(); // read size, but ignore it as it can change\n\n    if (!this.hasSegregatedConstants) {\n      this.#root = this.#byteReader.readRemainingBytes();\n    } else {\n      this.#constants = this.#byteReader.readArray((r) => SConstant.from(r));\n      this.#root = this.#byteReader.readRemainingBytes();\n    }\n\n    return this;\n  }\n}\n\nfunction hasFlag(header: number, flag: number): boolean {\n  return (header & flag) !== 0;\n}\n\nfunction getVersion(header: number): number {\n  return header & VERSION_MASK;\n}\n\nfunction reconstructTreeFromObject(input: JsonCompilerOutput): SigmaByteWriter {\n  const numHead = Number.parseInt(input.header, 16);\n  const sizeDelimited = hasFlag(numHead, ergoTreeHeaderFlags.sizeInclusion);\n  const constSegregated = hasFlag(numHead, ergoTreeHeaderFlags.constantSegregation);\n\n  let len = input.constants?.reduce((acc, c) => acc + byteSizeOf(c.value), 0) ?? 0;\n  len += estimateVLQSize(len);\n  const constBytes =\n    constSegregated && input.constants\n      ? new SigmaByteWriter(len)\n          .writeArray(input.constants, (w, c) => w.writeHex(c.value))\n          .toBytes()\n      : new Uint8Array(0);\n\n  len = constBytes.length + byteSizeOf(input.header) + byteSizeOf(input.expressionTree);\n  len += estimateVLQSize(len);\n  const writer = new SigmaByteWriter(len).write(numHead);\n\n  if (sizeDelimited) {\n    writer.writeUInt(constBytes.length + byteSizeOf(input.expressionTree));\n  }\n\n  return writer.writeBytes(constBytes).writeHex(input.expressionTree);\n}\n\nexport interface ConstantInfo {\n  value: string;\n  type: string;\n  name?: string;\n  description?: string;\n}\n\nexport interface JsonCompilerOutput {\n  header: string;\n  expressionTree: string;\n  constants?: ConstantInfo[];\n}\n","import { AddressType, type Base58String, Network, areEqual, isHex } from \"@fleet-sdk/common\";\nimport { type ByteInput, base58, blake2b256, ensureBytes, hex, utf8 } from \"@fleet-sdk/crypto\";\nimport { SigmaByteWriter } from \"@fleet-sdk/serializer\";\nimport type { JsonObject, JsonValue } from \"type-fest\";\nimport { encodeAddress, unpackAddress, validateUnpackedAddress } from \"./utils\";\n\nconst SERIALIZED_HASH_LENGTH = 34; // invalidation byte (1) + network type (1) + hash (32)\n\nexport type NetworkOptions = {\n  network?: Network;\n};\n\nexport type ErgoMessageFromHashOptions = NetworkOptions & {\n  hash: ByteInput;\n};\n\nexport type MessageData = Uint8Array | JsonValue | JsonObject;\n\nexport type ErgoMessageFromDataOptions = NetworkOptions & {\n  data: MessageData;\n};\n\nexport type ErgoMessageOptions = ErgoMessageFromHashOptions | ErgoMessageFromDataOptions;\n\nexport const MessageType = {\n  Hash: 0,\n  Binary: 1,\n  String: 2,\n  Json: 3\n} as const;\n\nexport type MessageType = (typeof MessageType)[keyof typeof MessageType];\n\nexport class ErgoMessage {\n  #data?: Uint8Array;\n  #type: MessageType;\n  #hash: Uint8Array;\n  #network: Network;\n\n  constructor(options: ErgoMessageOptions) {\n    if (\"data\" in options) {\n      [this.#data, this.#type] = this.#decodeData(options.data);\n      this.#hash = blake2b256(this.#data);\n    } else if (\"hash\" in options) {\n      this.#hash = ensureBytes(options.hash);\n      this.#type = MessageType.Hash;\n    } else {\n      throw new Error(\"Either hash or message data must be provided\");\n    }\n\n    this.#network = options.network ?? Network.Mainnet;\n  }\n\n  get hash(): Uint8Array {\n    return this.#hash;\n  }\n\n  get type(): MessageType {\n    return this.#type;\n  }\n\n  get network(): Network {\n    return this.#network;\n  }\n\n  #decodeData(data: MessageData): [Uint8Array, MessageType] {\n    if (typeof data === \"string\") {\n      return isHex(data)\n        ? [hex.decode(data), MessageType.Binary]\n        : [utf8.decode(data), MessageType.String];\n    }\n    if (data instanceof Uint8Array) return [data, MessageType.Binary];\n    return [utf8.decode(JSON.stringify(data)), MessageType.Json];\n  }\n\n  static decode(encodedHash: Base58String): ErgoMessage {\n    const unpacked = unpackAddress(base58.decode(encodedHash));\n    if (unpacked.type !== AddressType.ADH) throw new Error(\"Invalid message type\");\n    if (!validateUnpackedAddress(unpacked)) throw new Error(\"Invalid encoded message hash\");\n\n    return new ErgoMessage({ hash: unpacked.body, network: unpacked.network });\n  }\n\n  static fromBase58(encodedHash: Base58String): ErgoMessage {\n    return ErgoMessage.decode(encodedHash);\n  }\n\n  static fromData(data: MessageData, network?: Network): ErgoMessage {\n    return new ErgoMessage({ data, network });\n  }\n\n  encode(network?: Network): string {\n    return encodeAddress(network ?? this.#network, AddressType.ADH, this.hash);\n  }\n\n  toString(network?: Network): string {\n    return this.encode(network);\n  }\n\n  setNetwork(network: Network): ErgoMessage {\n    this.#network = network;\n    return this;\n  }\n\n  getData<T extends MessageData = MessageData>(): T | undefined {\n    if (!this.#data) return;\n    switch (this.#type) {\n      case MessageType.String:\n        return utf8.encode(this.#data) as T;\n      case MessageType.Json:\n        return JSON.parse(utf8.encode(this.#data)) as T;\n      default:\n        return this.#data as T;\n    }\n  }\n\n  serialize(): SigmaByteWriter {\n    return new SigmaByteWriter(SERIALIZED_HASH_LENGTH)\n      .write(0x0) // invalidation byte, see: https://github.com/ergoplatform/eips/blob/master/eip-0044.md#why-prefix-it-with-0x0\n      .write(this.#network)\n      .writeBytes(this.#hash);\n  }\n\n  verify(message: MessageData): boolean {\n    const [data] = this.#decodeData(message);\n    return areEqual(this.#hash, blake2b256(data));\n  }\n}\n","import {\n  assert,\n  type Amount,\n  type Box,\n  type BoxCandidate,\n  type ErgoTreeHex,\n  type HexString,\n  type NewToken,\n  type NonMandatoryRegisters,\n  type OneOrMore,\n  type TokenAmount,\n  type TokenId,\n  type UnsignedInput,\n  _0n,\n  _1n,\n  areRegistersDenselyPacked,\n  ensureBigInt,\n  isDefined,\n  isEmpty,\n  isHex,\n  isUndefined\n} from \"@fleet-sdk/common\";\nimport { utf8 } from \"@fleet-sdk/crypto\";\nimport { SByte, SColl, type SConstant, estimateBoxSize } from \"@fleet-sdk/serializer\";\nimport { InvalidRegistersPacking, UndefinedCreationHeight } from \"../errors\";\nimport { ErgoAddress, type ErgoBox, ErgoTree, type ErgoUnsignedInput } from \"../models\";\nimport { type TokenAddOptions, TokensCollection } from \"../models/collections/tokensCollection\";\nimport { ErgoBoxCandidate } from \"../models/ergoBoxCandidate\";\n\nexport const BOX_VALUE_PER_BYTE = BigInt(360);\nexport const SAFE_MIN_BOX_VALUE = BigInt(1000000);\n\nexport type BoxValueEstimationCallback = (outputBuilder: OutputBuilder) => bigint;\nexport type TransactionOutputFlags = { change: boolean };\n\nexport function estimateMinBoxValue(valuePerByte = BOX_VALUE_PER_BYTE): BoxValueEstimationCallback {\n  return (output) => {\n    return BigInt(output.estimateSize()) * valuePerByte;\n  };\n}\n\nconst DUMB_TOKEN_ID = \"0000000000000000000000000000000000000000000000000000000000000000\";\n\nexport class OutputBuilder {\n  readonly #address: ErgoAddress;\n  readonly #tokens: TokensCollection;\n  #value!: bigint;\n  #valueEstimator?: BoxValueEstimationCallback;\n  #creationHeight?: number;\n  #registers: NonMandatoryRegisters;\n  #flags: TransactionOutputFlags = { change: false };\n\n  constructor(\n    value: Amount | BoxValueEstimationCallback,\n    recipient: ErgoAddress | ErgoTree | string,\n    creationHeight?: number\n  ) {\n    this.setValue(value);\n\n    this.#creationHeight = creationHeight;\n    this.#tokens = new TokensCollection();\n    this.#registers = {};\n    this.#flags = { change: false };\n\n    if (typeof recipient === \"string\") {\n      this.#address = isHex(recipient)\n        ? ErgoAddress.fromErgoTree(recipient)\n        : ErgoAddress.fromBase58(recipient);\n    } else if (recipient instanceof ErgoTree) {\n      this.#address = recipient.toAddress();\n    } else {\n      this.#address = recipient;\n    }\n  }\n\n  get value(): bigint {\n    return isDefined(this.#valueEstimator) ? this.#valueEstimator(this) : this.#value;\n  }\n\n  get address(): ErgoAddress {\n    return this.#address;\n  }\n\n  get ergoTree(): ErgoTreeHex {\n    return this.#address.ergoTree;\n  }\n\n  get creationHeight(): number | undefined {\n    return this.#creationHeight;\n  }\n\n  get assets(): TokensCollection {\n    return this.#tokens;\n  }\n\n  get additionalRegisters(): NonMandatoryRegisters {\n    return this.#registers;\n  }\n\n  get minting(): NewToken<bigint> | undefined {\n    return this.assets.minting;\n  }\n\n  get flags(): TransactionOutputFlags {\n    return this.#flags;\n  }\n\n  static from(box: Box<Amount> | ErgoBoxCandidate | ErgoBox | ErgoUnsignedInput) {\n    return new OutputBuilder(box.value, box.ergoTree)\n      .addTokens(box.assets)\n      .setAdditionalRegisters(box.additionalRegisters);\n  }\n\n  setValue(value: Amount | BoxValueEstimationCallback): OutputBuilder {\n    if (typeof value === \"function\") {\n      this.#valueEstimator = value;\n    } else {\n      this.#value = ensureBigInt(value);\n      this.#valueEstimator = undefined;\n\n      if (this.#value <= _0n) {\n        throw new Error(\"An UTxO cannot be created without a minimum required amount.\");\n      }\n    }\n\n    return this;\n  }\n\n  setFlags(flags: Partial<TransactionOutputFlags>): OutputBuilder {\n    this.#flags = { ...this.#flags, ...flags };\n    return this;\n  }\n\n  addTokens(\n    tokens: OneOrMore<TokenAmount<Amount>> | TokensCollection,\n    options?: TokenAddOptions\n  ): OutputBuilder {\n    if (tokens instanceof TokensCollection) {\n      this.#tokens.add(tokens.toArray(), options);\n    } else {\n      this.#tokens.add(tokens, options);\n    }\n\n    return this;\n  }\n\n  addNfts(...tokenIds: TokenId[]): OutputBuilder {\n    const tokens = tokenIds.map((tokenId) => ({ tokenId, amount: _1n }));\n    return this.addTokens(tokens);\n  }\n\n  mintToken(token: NewToken<Amount>): OutputBuilder {\n    this.assets.mint(token);\n    return this;\n  }\n\n  setCreationHeight(height: number, options?: { replace: boolean }): OutputBuilder {\n    if (\n      isUndefined(options) ||\n      options.replace === true ||\n      (options.replace === false && isUndefined(this.#creationHeight))\n    ) {\n      this.#creationHeight = height;\n    }\n\n    return this;\n  }\n\n  setAdditionalRegisters(registers: NonMandatoryRegisters<ConstantInput>): OutputBuilder {\n    for (const key in registers) {\n      const r = registers[key as keyof NonMandatoryRegisters];\n      if (!r) continue;\n\n      this.#registers[key as keyof NonMandatoryRegisters] = typeof r === \"string\" ? r : r.toHex();\n    }\n\n    return this;\n  }\n\n  eject(ejector: (context: { tokens: TokensCollection }) => void): OutputBuilder {\n    ejector({ tokens: this.#tokens });\n    return this;\n  }\n\n  build(transactionInputs?: UnsignedInput[] | Box<Amount>[]): ErgoBoxCandidate {\n    if (!areRegistersDenselyPacked(this.#registers)) throw new InvalidRegistersPacking();\n\n    let tokens: TokenAmount<bigint>[];\n    if (this.minting) {\n      const mintingTokenId = transactionInputs ? transactionInputs[0]?.boxId : undefined;\n      tokens = this.assets.toArray(mintingTokenId);\n\n      if (isEmpty(this.additionalRegisters)) {\n        this.setAdditionalRegisters({\n          R4: SColl(SByte, utf8.decode(this.minting.name || \"\")),\n          R5: SColl(SByte, utf8.decode(this.minting.description || \"\")),\n          R6: SColl(SByte, utf8.decode(this.minting.decimals?.toString() || \"0\"))\n        });\n      }\n    } else {\n      tokens = this.assets.toArray().filter((x) => x.amount > _0n);\n    }\n\n    if (isUndefined(this.creationHeight)) throw new UndefinedCreationHeight();\n\n    return new ErgoBoxCandidate(\n      {\n        value: this.value,\n        ergoTree: this.ergoTree,\n        creationHeight: this.creationHeight,\n        assets: tokens,\n        additionalRegisters: this.additionalRegisters\n      },\n      this.#flags\n    );\n  }\n\n  estimateSize(value = SAFE_MIN_BOX_VALUE): number {\n    assert(!!this.creationHeight, \"Creation height must be set\");\n\n    const plainBoxObject: BoxCandidate<bigint> = {\n      value,\n      ergoTree: this.ergoTree,\n      creationHeight: this.creationHeight,\n      assets: this.#tokens.toArray(DUMB_TOKEN_ID),\n      additionalRegisters: this.additionalRegisters\n    };\n\n    return estimateBoxSize(plainBoxObject);\n  }\n}\n\nexport type ConstantInput = SConstant | HexString;\n\nexport type OnlyR4Register<T = HexString> = {\n  R4: T;\n} & NonMandatoryRegisters<T>;\n\nexport type R4ToR5Registers<T = HexString> = {\n  R4: T;\n  R5: T;\n} & NonMandatoryRegisters<T>;\n\nexport type R4ToR6Registers<T = HexString> = {\n  R4: T;\n  R5: T;\n  R6: T;\n} & NonMandatoryRegisters<T>;\n\nexport type R4ToR7Registers<T = HexString> = {\n  R4: T;\n  R5: T;\n  R6: T;\n  R7: T;\n} & NonMandatoryRegisters<T>;\n\nexport type R4ToR8Registers<T = HexString> = {\n  R4: T;\n  R5: T;\n  R6: T;\n  R7: T;\n  R8: T;\n} & NonMandatoryRegisters<T>;\n\nexport type R4ToR9Registers<T = HexString> = {\n  R4: T;\n  R5: T;\n  R6: T;\n  R7: T;\n  R8: T;\n  R9: T;\n} & NonMandatoryRegisters<T>;\n","export class NonStandardizedMinting extends Error {}\n","import type { Amount, Box, CollectionAddOptions, OneOrMore, TokenAmount } from \"@fleet-sdk/common\";\nimport { NotAllowedTokenBurning, type OutputBuilder, type TransactionBuilder } from \"..\";\n\nexport type FleetPluginContext = {\n  /**\n   * Add and ensures selection of one or more inputs to the inputs list\n   * @param inputs\n   * @returns new list length\n   */\n  addInputs: (inputs: OneOrMore<Box<Amount>>) => number;\n\n  /**\n   * Add one or more data inputs to the data inputs list\n   * @param dataInputs\n   * @returns new list length\n   */\n  addDataInputs: (dataInputs: OneOrMore<Box<Amount>>, options?: CollectionAddOptions) => number;\n\n  /**\n   * Add one or more outputs to the outputs list\n   * @param outputs\n   * @param options\n   * @returns new list length\n   */\n  addOutputs: (outputs: OneOrMore<OutputBuilder>, options?: CollectionAddOptions) => number;\n\n  /**\n   * Burn tokens\n   * @param tokens\n   * @throws Burning tokens thought a plugin, requires explicitly permission\n   * from {@link TransactionBuilder.configure}, if token burning is not allowed\n   * it will thrown a {@link NotAllowedTokenBurning} exception.\n   */\n  burnTokens: (tokens: OneOrMore<TokenAmount<Amount>>) => void;\n\n  /**\n   * Set transaction fee amount\n   * @param amount amount in nanoergs\n   */\n  setFee: (amount: Amount) => void;\n};\n\nexport function createPluginContext(builder: TransactionBuilder): FleetPluginContext {\n  return {\n    addInputs: (inputs) => builder.from(inputs, { ensureInclusion: true }).inputs.length,\n    addOutputs: (outputs, options) => builder.to(outputs, options).outputs.length,\n    addDataInputs: (dataInputs, options) =>\n      builder.withDataFrom(dataInputs, options).dataInputs.length,\n    burnTokens: (tokens) => {\n      if (!builder.settings.canBurnTokensFromPlugins) throw new NotAllowedTokenBurning();\n      builder.burnTokens(tokens);\n    },\n    setFee: (amount) => builder.payFee(amount)\n  };\n}\n","import { MAX_TOKENS_PER_BOX } from \"../models\";\n\nexport class TransactionBuilderSettings {\n  private _maxDistinctTokensPerChangeBox: number;\n  private _allowTokenBurning: boolean;\n  private _allowTokenBurningFromPlugins: boolean;\n  private _isolateErgOnChange: boolean;\n\n  constructor() {\n    this._maxDistinctTokensPerChangeBox = MAX_TOKENS_PER_BOX;\n    this._allowTokenBurning = false;\n    this._allowTokenBurningFromPlugins = false;\n    this._isolateErgOnChange = false;\n  }\n\n  public get maxTokensPerChangeBox(): number {\n    return this._maxDistinctTokensPerChangeBox;\n  }\n\n  public get canBurnTokens(): boolean {\n    return this._allowTokenBurning;\n  }\n\n  public get canBurnTokensFromPlugins(): boolean {\n    return this.canBurnTokens || this._allowTokenBurningFromPlugins;\n  }\n\n  public get shouldIsolateErgOnChange(): boolean {\n    return this._isolateErgOnChange;\n  }\n\n  /**\n   * Define max number of distinct tokens per change box\n   */\n  public setMaxTokensPerChangeBox(max: number): TransactionBuilderSettings {\n    this._maxDistinctTokensPerChangeBox = max;\n\n    return this;\n  }\n\n  /**\n   * Allows or denies token burning from all contexts\n   */\n  public allowTokenBurning(allow = true): TransactionBuilderSettings {\n    this._allowTokenBurning = allow;\n\n    return this;\n  }\n\n  /**\n   * Allows or denies token burning **only** from plugins context.\n   */\n  public allowTokenBurningFromPlugins(allow = true): TransactionBuilderSettings {\n    this._allowTokenBurningFromPlugins = allow;\n\n    return this;\n  }\n\n  /**\n   * If true, it creates an exclusive change box only for ERG.\n   * This setting is especially useful for Ledger devices to\n   * help on avoiding to hit the max tokens limit per transaction.\n   */\n  public isolateErgOnChange(isolate = true): TransactionBuilderSettings {\n    this._isolateErgOnChange = isolate;\n\n    return this;\n  }\n}\n","import {\n  type Amount,\n  type Base58String,\n  type Box,\n  type CollectionAddOptions,\n  FEE_CONTRACT,\n  type HexString,\n  Network,\n  type OneOrMore,\n  RECOMMENDED_MIN_FEE_VALUE,\n  type TokenAmount,\n  _0n,\n  byteSizeOf,\n  chunk,\n  ensureBigInt,\n  first,\n  isDefined,\n  isHex,\n  isUndefined,\n  some,\n  utxoDiff,\n  utxoSum\n} from \"@fleet-sdk/common\";\nimport { estimateVLQSize } from \"@fleet-sdk/serializer\";\nimport { InvalidInput, MalformedTransaction, NotAllowedTokenBurning } from \"../errors\";\nimport { NonStandardizedMinting } from \"../errors/nonStandardizedMinting\";\nimport { ErgoAddress, InputsCollection, OutputsCollection, TokensCollection } from \"../models\";\nimport { ErgoUnsignedTransaction } from \"../models/ergoUnsignedTransaction\";\nimport {\n  BOX_VALUE_PER_BYTE,\n  OutputBuilder,\n  SAFE_MIN_BOX_VALUE,\n  estimateMinBoxValue\n} from \"./outputBuilder\";\nimport { type FleetPluginContext, createPluginContext } from \"./pluginContext\";\nimport { BoxSelector } from \"./selector\";\nimport { TransactionBuilderSettings } from \"./transactionBuilderSettings\";\n\ntype PluginListItem = { execute: FleetPlugin; pending: boolean };\ntype SelectorSettings = Omit<BoxSelector<Box<bigint>>, \"select\">;\nexport type ConfigureCallback = (settings: TransactionBuilderSettings) => void;\nexport type SelectorCallback = (selector: SelectorSettings) => void;\nexport type FleetPlugin = (context: FleetPluginContext) => void;\nexport type CollectionLike<T> = { toArray(): T[] };\n\ntype EjectorContext = {\n  inputs: InputsCollection;\n  dataInputs: InputsCollection;\n  outputs: OutputsCollection;\n  burning: TokensCollection | undefined;\n  settings: TransactionBuilderSettings;\n  selection: (selectorCallBack: SelectorCallback) => void;\n};\n\n/**\n * Options for including inputs in the transaction builder\n */\ntype InputsInclusionOptions = {\n  /**\n   * If true, all the inputs will be included in the\n   * transaction while preserving the original order.\n   */\n  ensureInclusion?: boolean;\n};\n\nexport class TransactionBuilder {\n  readonly #inputs: InputsCollection;\n  readonly #dataInputs: InputsCollection;\n  readonly #outputs: OutputsCollection;\n  readonly #settings: TransactionBuilderSettings;\n\n  #creationHeight: number;\n  #ensureInclusion?: Set<string>;\n  #selectorCallbacks?: SelectorCallback[];\n  #changeAddress?: ErgoAddress;\n  #feeAmount?: bigint;\n  #burning?: TokensCollection;\n  #plugins?: PluginListItem[];\n\n  constructor(creationHeight: number) {\n    this.#inputs = new InputsCollection();\n    this.#dataInputs = new InputsCollection();\n    this.#outputs = new OutputsCollection();\n    this.#settings = new TransactionBuilderSettings();\n    this.#creationHeight = creationHeight;\n  }\n\n  get inputs(): InputsCollection {\n    return this.#inputs;\n  }\n\n  get dataInputs(): InputsCollection {\n    return this.#dataInputs;\n  }\n\n  get outputs(): OutputsCollection {\n    return this.#outputs;\n  }\n\n  get changeAddress(): ErgoAddress | undefined {\n    return this.#changeAddress;\n  }\n\n  get fee(): bigint | undefined {\n    return this.#feeAmount;\n  }\n\n  get burning(): TokensCollection | undefined {\n    return this.#burning;\n  }\n\n  get settings(): TransactionBuilderSettings {\n    return this.#settings;\n  }\n\n  get creationHeight(): number {\n    return this.#creationHeight;\n  }\n\n  /**\n   * Syntax sugar to be used in composition with another methods\n   *\n   * @example\n   * ```\n   * new TransactionBuilder(height)\n   *   .from(inputs)\n   *   .and.from(otherInputs);\n   * ```\n   */\n  get and(): TransactionBuilder {\n    return this;\n  }\n\n  atHeight(height: number): TransactionBuilder {\n    this.#creationHeight = height;\n    return this;\n  }\n\n  from(\n    inputs: OneOrMore<Box<Amount>> | CollectionLike<Box<Amount>>,\n    options: InputsInclusionOptions = { ensureInclusion: false }\n  ): TransactionBuilder {\n    const items = isCollectionLike(inputs) ? inputs.toArray() : inputs;\n    if (options.ensureInclusion) this.#ensureInclusionOf(items);\n\n    this.#inputs.add(items);\n    return this;\n  }\n\n  #ensureInclusionOf(inputs: OneOrMore<Box<Amount>>): void {\n    if (!this.#ensureInclusion) this.#ensureInclusion = new Set();\n\n    if (Array.isArray(inputs)) {\n      for (const input of inputs) this.#ensureInclusion.add(input.boxId);\n    } else {\n      this.#ensureInclusion.add(inputs.boxId);\n    }\n  }\n\n  to(outputs: OneOrMore<OutputBuilder>, options?: CollectionAddOptions): TransactionBuilder {\n    this.#outputs.add(outputs, options);\n    return this;\n  }\n\n  withDataFrom(\n    dataInputs: OneOrMore<Box<Amount>>,\n    options?: CollectionAddOptions\n  ): TransactionBuilder {\n    this.#dataInputs.add(dataInputs, options);\n\n    return this;\n  }\n\n  sendChangeTo(address: ErgoAddress | Base58String | HexString): TransactionBuilder {\n    if (typeof address === \"string\") {\n      this.#changeAddress = isHex(address)\n        ? ErgoAddress.fromErgoTree(address, Network.Mainnet)\n        : ErgoAddress.fromBase58(address);\n    } else {\n      this.#changeAddress = address;\n    }\n\n    return this;\n  }\n\n  payFee(amount: Amount): TransactionBuilder {\n    this.#feeAmount = ensureBigInt(amount);\n    return this;\n  }\n\n  payMinFee(): TransactionBuilder {\n    this.payFee(RECOMMENDED_MIN_FEE_VALUE);\n    return this;\n  }\n\n  burnTokens(tokens: OneOrMore<TokenAmount<Amount>>): TransactionBuilder {\n    if (!this.#burning) this.#burning = new TokensCollection();\n    this.#burning.add(tokens);\n    return this;\n  }\n\n  configure(callback: ConfigureCallback): TransactionBuilder {\n    callback(this.#settings);\n    return this;\n  }\n\n  configureSelector(selectorCallback: SelectorCallback): TransactionBuilder {\n    if (isUndefined(this.#selectorCallbacks)) this.#selectorCallbacks = [];\n    this.#selectorCallbacks.push(selectorCallback);\n    return this;\n  }\n\n  extend(plugins: FleetPlugin): TransactionBuilder {\n    if (!this.#plugins) this.#plugins = [];\n    this.#plugins.push({ execute: plugins, pending: true });\n    return this;\n  }\n\n  eject(ejector: (context: EjectorContext) => void): TransactionBuilder {\n    ejector({\n      inputs: this.inputs,\n      dataInputs: this.dataInputs,\n      outputs: this.outputs,\n      burning: this.burning,\n      settings: this.settings,\n      selection: (selectorCallback: SelectorCallback) => {\n        this.configureSelector(selectorCallback);\n      }\n    });\n\n    return this;\n  }\n\n  build(): ErgoUnsignedTransaction {\n    if (some(this.#plugins)) {\n      const context = createPluginContext(this);\n      for (const plugin of this.#plugins) {\n        if (plugin.pending) {\n          plugin.execute(context);\n          plugin.pending = false;\n        }\n      }\n    }\n\n    if (this.#isMinting()) {\n      if (this.#isMoreThanOneTokenBeingMinted()) {\n        throw new MalformedTransaction(\"only one token can be minted per transaction.\");\n      }\n\n      if (this.#isTheSameTokenBeingMintedFromOutsideTheMintingBox()) {\n        throw new NonStandardizedMinting(\n          \"EIP-4 tokens cannot be minted from outside of the minting box.\"\n        );\n      }\n    }\n\n    this.outputs\n      .toArray()\n      .map((output) => output.setCreationHeight(this.#creationHeight, { replace: false }));\n    const outputs = this.outputs.clone();\n\n    if (isDefined(this.#feeAmount)) {\n      outputs.add(new OutputBuilder(this.#feeAmount, FEE_CONTRACT));\n    }\n\n    const selector = new BoxSelector(this.inputs.toArray());\n    if (this.#ensureInclusion?.size) {\n      selector.ensureInclusion(Array.from(this.#ensureInclusion));\n    }\n\n    if (some(this.#selectorCallbacks)) {\n      for (const selectorCallBack of this.#selectorCallbacks) {\n        selectorCallBack(selector);\n      }\n    }\n\n    const target = some(this.#burning)\n      ? outputs.sum({ tokens: this.#burning.toArray() })\n      : outputs.sum();\n    let inputs = selector.select(target);\n\n    if (isDefined(this.#changeAddress)) {\n      const changeBoxes: OutputBuilder[] = [];\n      const firstInputId = inputs[0].boxId;\n      const manualMintingTokenId = target.tokens.some((x) => x.tokenId === firstInputId)\n        ? firstInputId\n        : undefined;\n\n      if (manualMintingTokenId) {\n        target.tokens = target.tokens.filter((x) => x.tokenId !== manualMintingTokenId);\n      }\n\n      let change = utxoDiff(utxoSum(inputs), target);\n\n      if (some(change.tokens)) {\n        let minRequiredNanoErgs = estimateMinChangeValue({\n          changeAddress: this.#changeAddress,\n          creationHeight: this.#creationHeight,\n          tokens: change.tokens,\n          maxTokensPerBox: this.settings.maxTokensPerChangeBox,\n          baseIndex: this.outputs.length + 1\n        });\n\n        while (minRequiredNanoErgs > change.nanoErgs) {\n          inputs = selector.select({\n            nanoErgs: target.nanoErgs + minRequiredNanoErgs,\n            tokens: target.tokens\n          });\n\n          change = utxoDiff(utxoSum(inputs), target);\n          minRequiredNanoErgs = estimateMinChangeValue({\n            changeAddress: this.#changeAddress,\n            creationHeight: this.#creationHeight,\n            tokens: change.tokens,\n            maxTokensPerBox: this.settings.maxTokensPerChangeBox,\n            baseIndex: this.outputs.length + 1\n          });\n        }\n\n        const chunkedTokens = chunk(change.tokens, this.#settings.maxTokensPerChangeBox);\n        for (const tokens of chunkedTokens) {\n          const output = new OutputBuilder(estimateMinBoxValue(), this.#changeAddress)\n            .setCreationHeight(this.#creationHeight)\n            .addTokens(tokens)\n            .setFlags({ change: true });\n\n          change.nanoErgs -= output.value;\n          changeBoxes.push(output);\n        }\n      }\n\n      if (change.nanoErgs > _0n) {\n        if (!changeBoxes.length || this.settings.shouldIsolateErgOnChange) {\n          changeBoxes.unshift(\n            new OutputBuilder(change.nanoErgs, this.#changeAddress)\n              .setCreationHeight(this.#creationHeight)\n              .setFlags({ change: true })\n          );\n        } else {\n          const firstChangeBox = first(changeBoxes);\n          firstChangeBox.setValue(firstChangeBox.value + change.nanoErgs);\n        }\n      }\n\n      outputs.add(changeBoxes);\n    }\n\n    for (const input of inputs) {\n      if (!input.isValid()) throw new InvalidInput(input.boxId);\n    }\n\n    const buildedOutputs = outputs\n      .toArray()\n      .map((output) =>\n        output.setCreationHeight(this.#creationHeight, { replace: false }).build(inputs)\n      );\n\n    const unsignedTransaction = new ErgoUnsignedTransaction(\n      inputs,\n      this.dataInputs.toArray(),\n      buildedOutputs,\n      this\n    );\n\n    let burning = unsignedTransaction.burning;\n    if (burning.nanoErgs > _0n) {\n      throw new MalformedTransaction(\"it's not possible to burn ERG.\");\n    }\n\n    if (some(burning.tokens) && some(this.#burning)) {\n      burning = utxoDiff(burning, {\n        nanoErgs: _0n,\n        tokens: this.#burning.toArray()\n      });\n    }\n\n    if (!this.#settings.canBurnTokens && some(burning.tokens)) {\n      throw new NotAllowedTokenBurning();\n    }\n\n    return unsignedTransaction;\n  }\n\n  #getMintingOutput(): OutputBuilder | undefined {\n    for (const output of this.#outputs) {\n      if (output.minting) return output;\n    }\n\n    return;\n  }\n\n  #isMinting(): boolean {\n    return this.#getMintingOutput() !== undefined;\n  }\n\n  #getMintingTokenId(): string | undefined {\n    return this.#getMintingOutput()?.minting?.tokenId;\n  }\n\n  #isMoreThanOneTokenBeingMinted(): boolean {\n    let mintingCount = 0;\n\n    for (const output of this.#outputs) {\n      if (output.minting) {\n        mintingCount++;\n        if (mintingCount > 1) return true;\n      }\n    }\n\n    return false;\n  }\n\n  #isTheSameTokenBeingMintedFromOutsideTheMintingBox(): boolean {\n    const mintingTokenId = this.#getMintingTokenId();\n    if (isUndefined(mintingTokenId)) return false;\n\n    let count = 0;\n    for (const output of this.#outputs) {\n      if (output.assets.contains(mintingTokenId)) {\n        count++;\n        if (count > 1) return true;\n      }\n    }\n\n    return false;\n  }\n}\n\nfunction isCollectionLike<T>(obj: unknown): obj is CollectionLike<T> {\n  return (obj as CollectionLike<T>).toArray !== undefined;\n}\n\ntype ChangeEstimationParams = {\n  changeAddress: ErgoAddress;\n  creationHeight: number;\n  tokens: TokenAmount<bigint>[];\n  baseIndex: number;\n  maxTokensPerBox: number;\n};\n\nfunction estimateMinChangeValue(params: ChangeEstimationParams): bigint {\n  const size = BigInt(estimateChangeSize(params));\n  return size * BOX_VALUE_PER_BYTE;\n}\n\nfunction estimateChangeSize({\n  changeAddress,\n  creationHeight,\n  tokens,\n  baseIndex,\n  maxTokensPerBox\n}: ChangeEstimationParams): number {\n  const neededBoxes = Math.ceil(tokens.length / maxTokensPerBox);\n  let size = 0;\n  size += estimateVLQSize(SAFE_MIN_BOX_VALUE);\n  size += byteSizeOf(changeAddress.ergoTree);\n  size += estimateVLQSize(creationHeight);\n  size += estimateVLQSize(0); // empty registers length\n  size += 32; // BLAKE 256 hash length\n\n  size = size * neededBoxes;\n  for (let i = 0; i < neededBoxes; i++) size += estimateVLQSize(baseIndex + i);\n\n  for (const token of tokens) {\n    size += byteSizeOf(token.tokenId) + estimateVLQSize(token.amount);\n  }\n\n  if (tokens.length > maxTokensPerBox) {\n    if (tokens.length % maxTokensPerBox > 0) {\n      size += estimateVLQSize(maxTokensPerBox) * Math.floor(tokens.length / maxTokensPerBox);\n      size += estimateVLQSize(tokens.length % maxTokensPerBox);\n    } else {\n      size += estimateVLQSize(maxTokensPerBox) * neededBoxes;\n    }\n  } else {\n    size += estimateVLQSize(tokens.length);\n  }\n\n  return size;\n}\n","import type { HexString } from \"@fleet-sdk/common\";\nimport {\n  SBigInt,\n  SBool,\n  SByte,\n  SColl,\n  SCollType,\n  SGroupElement,\n  SInt,\n  SLong,\n  SShort,\n  SSigmaProp,\n  SType,\n  SUnit,\n  SConstant as SerSConstant\n} from \"@fleet-sdk/serializer\";\n\n/**\n * @deprecated Use {@link @fleet-sdk/serializer} instead.\n * This function will be removed from core package in v1.0.0.\n */\nexport function SConstant(constant: SerSConstant): HexString {\n  return constant.toHex();\n}\n\n/**\n * @deprecated Use {@link @fleet-sdk/serializer} instead.\n * This function will be removed from core package in v1.0.0.\n */\nexport function SParse<T>(bytes: HexString | Uint8Array): T {\n  return SerSConstant.from<T>(bytes).data;\n}\n\nexport {\n  SBigInt,\n  SBool,\n  SByte,\n  SCollType,\n  SColl,\n  SGroupElement,\n  SInt,\n  SLong,\n  SShort,\n  SSigmaProp,\n  SType,\n  SUnit\n};\n"]}