{"version":3,"sources":["../src/bitcoinUtils/apiHelpers/createBitcoinPegInRecipients.ts"],"sourcesContent":["import { estimateInputVSizeAfterSign } from \"@c4/btc-utils\"\nimport { toHex } from \"viem\"\nimport { requestAPI } from \"../../utils/apiHelpers\"\nimport { BigNumber } from \"../../utils/BigNumber\"\nimport { UnsupportedBridgeRouteError } from \"../../utils/errors\"\nimport { decodeHex } from \"../../utils/hexHelpers\"\nimport { KnownChainId, KnownTokenId } from \"../../utils/types/knownIds\"\nimport { SDKGlobalContext } from \"../../xlinkSdkUtils/types.internal\"\nimport { getBTCPegInAddress } from \"../btcAddresses\"\nimport { calculateFee } from \"../prepareTransaction\"\n\nconst REVEAL_TX_OUTPUT_AMOUNT = 546n\n\nexport async function createBitcoinPegInRecipients(\n  sdkContext: Pick<SDKGlobalContext, \"backendAPI\">,\n  info: {\n    fromChain: KnownChainId.BitcoinChain\n    toChain: KnownChainId.StacksChain | KnownChainId.EVMChain\n    fromToken: KnownTokenId.BitcoinToken\n    toToken: KnownTokenId.StacksToken | KnownTokenId.EVMToken\n    fromAddress: {\n      address: string\n      scriptPubKey: Uint8Array\n    }\n    toAddress: string\n    fromAmount: BigNumber\n    feeRate: bigint\n    orderData: Uint8Array\n  },\n): Promise<{\n  address: string\n  scriptPubKey: Uint8Array\n  satsAmount: bigint\n}> {\n  const pegInAddress = await getBTCPegInAddress(info.fromChain, info.toChain)\n  if (pegInAddress == null) {\n    throw new UnsupportedBridgeRouteError(\n      info.fromChain,\n      info.toChain,\n      KnownTokenId.Bitcoin.BTC,\n    )\n  }\n\n  const resp = await requestAPI<{\n    addresses: BitcoinPegInRecipient[]\n  }>(sdkContext, {\n    path: `/2024-10-01/bitcoin/peg-in-recipients`,\n    method: \"POST\",\n    body: {\n      fromChain: info.fromChain,\n      toChain: info.toChain,\n      fromToken: info.fromToken,\n      toToken: info.toToken,\n      fromAddress: {\n        address: info.fromAddress.address,\n        scriptPubKeyHex: toHex(info.fromAddress.scriptPubKey),\n      },\n      toAddress: info.toAddress,\n      fromAmount: BigNumber.toString(info.fromAmount),\n      orderDataHex: toHex(info.orderData),\n    },\n  })\n\n  const recipient = resp.addresses.find(\n    address => address.type === \"commitOrder\",\n  )!\n\n  const revealInputSize = estimateInputVSizeAfterSign({\n    addressType: \"p2tr-leafScript\",\n    tapLeafScriptArgumentByteLengths: [/* signature */ 64],\n    tapLeafScriptByteLength: recipient.tapScriptHex.length / 2,\n    controlBlockByteLength: 33,\n  })\n  const { fee: newTxFee } = await calculateFee({\n    recipientAddressScriptPubKeys: [pegInAddress.scriptPubKey],\n    opReturnData: [],\n    selectedUTXOs: [],\n    feeRate: info.feeRate,\n    extraSize: revealInputSize.inputSize + revealInputSize.witnessDataSize / 4,\n  })\n\n  const revealUTXOSatsAmount = BigNumber.sum([\n    newTxFee,\n    REVEAL_TX_OUTPUT_AMOUNT,\n  ])\n\n  return {\n    address: recipient.address,\n    scriptPubKey: decodeHex(recipient.scriptPubKeyHex),\n    satsAmount: BigNumber.toBigInt(\n      { roundingMode: BigNumber.roundUp },\n      revealUTXOSatsAmount,\n    ),\n  }\n}\n\nexport interface BitcoinPegInRecipient {\n  type: \"commitOrder\"\n  address: string\n  scriptPubKeyHex: string\n  tapScriptHex: `0x${string}`\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,mCAAmC;AAC5C,SAAS,aAAa;AAUtB,IAAM,0BAA0B;AAEhC,eAAsB,6BACpB,YACA,MAkBC;AACD,QAAM,eAAe,MAAM,mBAAmB,KAAK,WAAW,KAAK,OAAO;AAC1E,MAAI,gBAAgB,MAAM;AACxB,UAAM,IAAI;AAAA,MACR,KAAK;AAAA,MACL,KAAK;AAAA,MACL,aAAa,QAAQ;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,OAAO,MAAM,WAEhB,YAAY;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,WAAW,KAAK;AAAA,MAChB,SAAS,KAAK;AAAA,MACd,WAAW,KAAK;AAAA,MAChB,SAAS,KAAK;AAAA,MACd,aAAa;AAAA,QACX,SAAS,KAAK,YAAY;AAAA,QAC1B,iBAAiB,MAAM,KAAK,YAAY,YAAY;AAAA,MACtD;AAAA,MACA,WAAW,KAAK;AAAA,MAChB,YAAY,UAAU,SAAS,KAAK,UAAU;AAAA,MAC9C,cAAc,MAAM,KAAK,SAAS;AAAA,IACpC;AAAA,EACF,CAAC;AAED,QAAM,YAAY,KAAK,UAAU;AAAA,IAC/B,aAAW,QAAQ,SAAS;AAAA,EAC9B;AAEA,QAAM,kBAAkB,4BAA4B;AAAA,IAClD,aAAa;AAAA,IACb,kCAAkC;AAAA;AAAA,MAAiB;AAAA,IAAE;AAAA,IACrD,yBAAyB,UAAU,aAAa,SAAS;AAAA,IACzD,wBAAwB;AAAA,EAC1B,CAAC;AACD,QAAM,EAAE,KAAK,SAAS,IAAI,MAAM,aAAa;AAAA,IAC3C,+BAA+B,CAAC,aAAa,YAAY;AAAA,IACzD,cAAc,CAAC;AAAA,IACf,eAAe,CAAC;AAAA,IAChB,SAAS,KAAK;AAAA,IACd,WAAW,gBAAgB,YAAY,gBAAgB,kBAAkB;AAAA,EAC3E,CAAC;AAED,QAAM,uBAAuB,UAAU,IAAI;AAAA,IACzC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,SAAS,UAAU;AAAA,IACnB,cAAc,UAAU,UAAU,eAAe;AAAA,IACjD,YAAY,UAAU;AAAA,MACpB,EAAE,cAAc,UAAU,QAAQ;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AACF;","names":[]}