UNPKG

@xlink-network/xlink-sdk

Version:
1 lines 3.34 kB
{"version":3,"sources":["../src/bitcoinUtils/bitcoinHelpers.ts"],"sourcesContent":["import type { EstimationInput } from \"@c4/btc-utils\"\nimport * as btc from \"@scure/btc-signer\"\nimport { Address, OutScript } from \"@scure/btc-signer\"\nimport { sum } from \"../utils/bigintHelpers\"\nimport { BigNumber } from \"../utils/BigNumber\"\n\nexport interface UTXOBasic {\n txId: string\n index: number\n amount: bigint\n}\n\nexport interface UTXOConfirmed extends UTXOBasic {\n blockHeight: bigint\n}\n\nexport type UTXOSpendable = EstimationInput &\n UTXOBasic & {\n scriptPubKey: Uint8Array\n }\n\nexport interface BitcoinNetwork {\n bech32: string\n pubKeyHash: number\n scriptHash: number\n wif: number\n}\n\nexport function sumUTXO(utxos: Array<UTXOBasic>): bigint {\n return sum(utxos.map(utxo => utxo.amount))\n}\n\nexport function isSameUTXO(utxo1: UTXOBasic, utxo2: UTXOBasic): boolean {\n return utxo1.txId === utxo2.txId && utxo1.index === utxo2.index\n}\n\nexport function addressToScriptPubKey(\n network: BitcoinNetwork,\n address: string,\n): Uint8Array {\n const addr = Address(network).decode(address)\n return OutScript.encode(addr)\n}\nexport function scriptPubKeyToAddress(\n network: BitcoinNetwork,\n output: Uint8Array,\n): string {\n return Address(network).encode(OutScript.decode(output))\n}\n\nexport function bitcoinToSatoshi(bitcoinAmount: string): bigint {\n return BigNumber.toBigInt({}, BigNumber.rightMoveDecimals(8, bitcoinAmount))\n}\n\nexport function satoshiToBitcoin(satoshiAmount: bigint): string {\n return BigNumber.toString(BigNumber.leftMoveDecimals(8, satoshiAmount))\n}\n\nexport function getP2TRInternalPublicKey_from_P2TR_publicKey(\n network: BitcoinNetwork,\n publicKey: Uint8Array,\n): Uint8Array {\n const ecdsaPublicKeyLength = 33\n\n if (publicKey.byteLength !== ecdsaPublicKeyLength) {\n throw new Error(\"Invalid public key length\")\n }\n\n return publicKey.slice(1)\n}\n\nexport function getTapInternalKey_from_P2TR_publicKey(\n network: BitcoinNetwork,\n publicKey: Uint8Array,\n): Uint8Array {\n return btc.p2tr(\n getP2TRInternalPublicKey_from_P2TR_publicKey(network, publicKey),\n undefined,\n network,\n ).tapInternalKey\n}\n\nexport function getRedeemScript_from_P2SH_P2WPKH_publicKey(\n network: BitcoinNetwork,\n publicKey: Uint8Array,\n): Uint8Array {\n return btc.p2sh(btc.p2wpkh(publicKey, network), network).redeemScript!\n}\n"],"mappings":";;;;;;;;AACA,YAAY,SAAS;AACrB,SAAS,SAAS,iBAAiB;AA0B5B,SAAS,QAAQ,OAAiC;AACvD,SAAO,IAAI,MAAM,IAAI,UAAQ,KAAK,MAAM,CAAC;AAC3C;AAEO,SAAS,WAAW,OAAkB,OAA2B;AACtE,SAAO,MAAM,SAAS,MAAM,QAAQ,MAAM,UAAU,MAAM;AAC5D;AAEO,SAAS,sBACd,SACA,SACY;AACZ,QAAM,OAAO,QAAQ,OAAO,EAAE,OAAO,OAAO;AAC5C,SAAO,UAAU,OAAO,IAAI;AAC9B;AACO,SAAS,sBACd,SACA,QACQ;AACR,SAAO,QAAQ,OAAO,EAAE,OAAO,UAAU,OAAO,MAAM,CAAC;AACzD;AAEO,SAAS,iBAAiB,eAA+B;AAC9D,SAAO,UAAU,SAAS,CAAC,GAAG,UAAU,kBAAkB,GAAG,aAAa,CAAC;AAC7E;AAEO,SAAS,iBAAiB,eAA+B;AAC9D,SAAO,UAAU,SAAS,UAAU,iBAAiB,GAAG,aAAa,CAAC;AACxE;AAEO,SAAS,6CACd,SACA,WACY;AACZ,QAAM,uBAAuB;AAE7B,MAAI,UAAU,eAAe,sBAAsB;AACjD,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AAEA,SAAO,UAAU,MAAM,CAAC;AAC1B;AAEO,SAAS,sCACd,SACA,WACY;AACZ,SAAW;AAAA,IACT,6CAA6C,SAAS,SAAS;AAAA,IAC/D;AAAA,IACA;AAAA,EACF,EAAE;AACJ;AAEO,SAAS,2CACd,SACA,WACY;AACZ,SAAW,SAAS,WAAO,WAAW,OAAO,GAAG,OAAO,EAAE;AAC3D;","names":[]}