@swapkit/toolboxes 1.0.0-beta.19 → 1.0.0-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-vhc011em.js → chunk-12xtvbsp.js} +3 -3
- package/dist/{chunk-vhc011em.js.map → chunk-12xtvbsp.js.map} +1 -1
- package/dist/{chunk-cv69ewns.js → chunk-9bqegm61.js} +1 -1
- package/dist/chunk-kbnwrc5b.js +4 -0
- package/dist/chunk-kbnwrc5b.js.map +10 -0
- package/dist/{chunk-38ztynv0.js → chunk-s47y8512.js} +2 -2
- package/dist/{chunk-38ztynv0.js.map → chunk-s47y8512.js.map} +1 -1
- package/dist/chunk-vtd17cje.js +3 -0
- package/dist/chunk-vtd17cje.js.map +10 -0
- package/dist/src/cosmos/index.cjs +2 -2
- package/dist/src/cosmos/index.cjs.map +3 -3
- package/dist/src/cosmos/index.js +2 -2
- package/dist/src/cosmos/index.js.map +3 -3
- package/dist/src/evm/index.cjs +2 -2
- package/dist/src/evm/index.cjs.map +3 -3
- package/dist/src/evm/index.js +2 -2
- package/dist/src/evm/index.js.map +3 -3
- package/dist/src/index.cjs +2 -2
- package/dist/src/index.cjs.map +3 -3
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +3 -3
- package/dist/src/near/index.cjs +3 -0
- package/dist/src/near/index.cjs.map +13 -0
- package/dist/src/near/index.js +3 -0
- package/dist/src/near/index.js.map +13 -0
- package/dist/src/radix/index.js +2 -2
- package/dist/src/radix/index.js.map +1 -1
- package/dist/src/ripple/index.js +1 -1
- package/dist/src/solana/index.js +2 -2
- package/dist/src/solana/index.js.map +1 -1
- package/dist/src/substrate/index.js +2 -2
- package/dist/src/substrate/index.js.map +1 -1
- package/dist/src/tron/index.js +2 -2
- package/dist/src/tron/index.js.map +1 -1
- package/dist/src/utxo/index.cjs +2 -2
- package/dist/src/utxo/index.cjs.map +3 -3
- package/dist/src/utxo/index.js +2 -2
- package/dist/src/utxo/index.js.map +3 -3
- package/package.json +10 -2
- package/src/cosmos/toolbox/cosmos.ts +9 -2
- package/src/evm/toolbox/baseEVMToolbox.ts +19 -12
- package/src/index.ts +12 -0
- package/src/near/helpers/contractFactory.ts +22 -0
- package/src/near/helpers/core.ts +86 -0
- package/src/near/helpers/gasEstimation.ts +110 -0
- package/src/near/helpers/index.ts +5 -0
- package/src/near/helpers/nep141.ts +110 -0
- package/src/near/index.ts +24 -0
- package/src/near/toolbox.ts +497 -0
- package/src/near/types/contract.ts +48 -0
- package/src/near/types/nep141.ts +66 -0
- package/src/near/types.ts +58 -0
- package/src/utxo/toolbox/utxo.ts +3 -2
- /package/dist/{chunk-cv69ewns.js.map → chunk-9bqegm61.js.map} +0 -0
package/dist/src/utxo/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var $G={};ZG($G,{toLegacyAddress:()=>f,toCashAddress:()=>m,stripToCashAddress:()=>K,stripPrefix:()=>S,nonSegwitChains:()=>u,isValidAddress:()=>jX,getUtxoToolbox:()=>JG,getUtxoNetwork:()=>F,getUtxoApi:()=>Y,getUTXOAddressValidator:()=>kX,getScriptTypeForAddress:()=>h,getOutputSize:()=>l,getInputSize:()=>N,getDustThreshold:()=>r,getCreateKeysForPath:()=>o,detectAddressNetwork:()=>LX,createUTXOToolbox:()=>p,createCustomUtxoApi:()=>mX,createBCHToolbox:()=>DX,compileMemo:()=>k,calculateTxSize:()=>E,bchValidateAddress:()=>A,addressFromKeysGetter:()=>qX,accumulative:()=>O,UtxoNetwork:()=>$X,UTXOScriptType:()=>i,TX_OVERHEAD:()=>d,OutputSizes:()=>c,OP_RETURN_OVERHEAD:()=>FX,MIN_TX_FEE:()=>pX,InputSizes:()=>a});module.exports=QG($G);var b=require("@swapkit/helpers");var g=require("@psf/bitcoincashjs-lib"),H=require("@swapkit/helpers"),AX=require("bitcoinjs-lib");var B=require("@swapkit/helpers"),TX=require("bitcoinjs-lib");var w=x(require("coininfo"));async function RX({chain:X,txHash:G}){let J=B.SKConfig.get("rpcUrls")[X],Q=JSON.stringify({jsonrpc:"2.0",method:"sendrawtransaction",params:[G],id:zX()}),$=await B.RequestClient.post(J,{headers:{"Content-Type":"application/json"},body:Q});if($.error)throw new B.SwapKitError("toolbox_utxo_broadcast_failed",{error:$.error?.message});if($.result.includes('"code":-26'))throw new B.SwapKitError("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return $.result}function GX(X){return`https://api.blockchair.com/${wX(X)}`}function MX(X){switch(X){case B.Chain.Bitcoin:return 5;case B.Chain.Dogecoin:return 1e4;case B.Chain.Litecoin:return 1;default:return 2}}function wX(X){switch(X){case B.Chain.BitcoinCash:return"bitcoin-cash";case B.Chain.Litecoin:return"litecoin";case B.Chain.Dash:return"dash";case B.Chain.Dogecoin:return"dogecoin";case B.Chain.Polkadot:return"polkadot";default:return"bitcoin"}}async function fX(X){try{let{feePerKb:G}=await B.RequestClient.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=G/1000;return Math.max(J,MX(X))}catch(G){return MX(X)}}async function JX(X,G){try{let J=await B.RequestClient.get(X);if(!J||J.context.code!==200)throw new B.SwapKitError("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return J.data}catch(J){if(!G)throw J;let Q=await B.RequestClient.get(`${X}${G?`&key=${G}`:""}`);if(!Q||Q.context.code!==200)throw new B.SwapKitError("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return Q.data}}async function CX({address:X,chain:G,apiKey:J}){if(!X)throw new B.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await JX(`${GX(G)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch(Q){return{utxo:[],address:{balance:0,transaction_count:0}}}}async function EX({address:X,chain:G,apiKey:J}){return(await CX({address:X,chain:G,apiKey:J}))?.address.balance||0}async function HX({chain:X,apiKey:G,txHash:J}){if(!J)throw new B.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await JX(`${GX(X)}/raw/transaction/${J}`,G))?.[J]?.raw_transaction||""}catch(Q){return console.error("Failed to fetch raw transaction:",Q),""}}async function SX({chain:X,address:G,apiKey:J,offset:Q=0,limit:$=100}){return(await JX(`${GX(X)}/outputs?q=is_spent(false),recipient(${G})&limit=${$}&offset=${Q}`,J)).filter(({is_spent:W})=>!W).map(({script_hex:W,block_id:L,transaction_hash:D,index:U,value:M,spending_signature_hex:v})=>({hash:D,index:U,value:M,txHex:v,script_hex:W,is_confirmed:L!==-1}))}async function YX({chain:X,address:G,apiKey:J,offset:Q=0,limit:$=100}){if(!G)throw new B.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{let j=await SX({chain:X,address:G,apiKey:J,offset:Q,limit:$});if(j.length<=$)return j;let Z=await YX({chain:X,address:G,apiKey:J,offset:Q+$,limit:$});return[...j,...Z]}catch(j){return console.error("Failed to fetch unspent UTXOs:",j),[]}}async function gX({address:X,chain:G,apiKey:J,fetchTxHex:Q=!0}){let $=await YX({chain:G,address:X,apiKey:J}),j=[];for(let{hash:Z,index:W,script_hex:L,value:D}of $){let U;if(Q)U=await HX({txHash:Z,chain:G,apiKey:J});j.push({address:X,hash:Z,index:W,txHex:U,value:D,witnessUtxo:{value:D,script:Buffer.from(L,"hex")}})}return j}function xX(X){let G=B.SKConfig.get("apiKeys").blockchair||"";return B.warnOnce(!G,"No Blockchair API key found. Functionality will be limited."),{broadcastTx:(J)=>RX({txHash:J,chain:X}),getRawTx:(J)=>HX({txHash:J,chain:X,apiKey:G}),getSuggestedTxFee:()=>fX(X),getBalance:(J)=>EX({address:J,chain:X,apiKey:G}),getAddressData:(J)=>CX({address:J,chain:X,apiKey:G}),scanUTXOs:(J)=>gX({...J,chain:X,apiKey:G})}}function mX(X){return X}function Y(X){let G=B.SKConfig.get("apis")[X];if(G)return B.warnOnce(!0,"Using custom UTXO API. Be sure to implement all methods to avoid issues."),G;return xX(X)}function F(){return function X(G){switch(G){case B.Chain.Bitcoin:return TX.networks.bitcoin;case B.Chain.BitcoinCash:return w.default.bitcoincash.main.toBitcoinJS();case B.Chain.Dash:return w.default.dash.main.toBitcoinJS();case B.Chain.Litecoin:return w.default.litecoin.main.toBitcoinJS();case B.Chain.Dogecoin:{let J={private:70615956,public:70617039},Q=w.default.dogecoin.test;return Q.versions.bip32=J,w.default.dogecoin.main.toBitcoinJS()}default:throw new B.SwapKitError("toolbox_utxo_not_supported",{chain:G})}}}var V=require("@swapkit/helpers"),QX=x(require("bs58check")),ZX=x(require("cashaddrjs"));var $X;((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})($X||={});var z={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}};function jX(X){try{return n(X),!0}catch(G){return!1}}function LX(X){return n(X)?.network}function f(X){let G=n(X);if(G?.format==="legacy")return X;return cX(G)}function m(X){let G=n(X);return uX(G)}function n(X){try{return lX(X)}catch(G){}try{return hX(X)}catch(G){}throw new V.SwapKitError("toolbox_utxo_invalid_address",{address:X})}function lX(X){try{let G=QX.default.decode(X);if(G.length!==21)throw new V.SwapKitError("toolbox_utxo_invalid_address",{address:X});let J=G[0],Q=Array.prototype.slice.call(G,1);switch(J){case z.legacy.mainnet.p2pkh:return{hash:Q,format:"legacy",network:"mainnet",type:"p2pkh"};case z.legacy.mainnet.p2sh:return{hash:Q,format:"legacy",network:"mainnet",type:"p2sh"};case z.legacy.testnet.p2pkh:return{hash:Q,format:"legacy",network:"testnet",type:"p2pkh"};case z.legacy.testnet.p2sh:return{hash:Q,format:"legacy",network:"testnet",type:"p2sh"};case z.bitpay.mainnet.p2pkh:return{hash:Q,format:"bitpay",network:"mainnet",type:"p2pkh"};case z.bitpay.mainnet.p2sh:return{hash:Q,format:"bitpay",network:"mainnet",type:"p2sh"};default:throw new V.SwapKitError("toolbox_utxo_invalid_address",{address:X})}}catch(G){throw new V.SwapKitError("toolbox_utxo_invalid_address",{address:X})}}function hX(X){if(X.indexOf(":")!==-1)try{return IX(X)}catch(G){}else{let G=["bitcoincash","bchtest","bchreg"];for(let J of G)try{return IX(`${J}:${X}`)}catch(Q){}}throw new V.SwapKitError("toolbox_utxo_invalid_address",{address:X})}function IX(X){try{let{hash:G,prefix:J,type:Q}=ZX.default.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call(G,0),network:J==="bitcoincash"?"mainnet":"testnet",type:Q==="P2PKH"?"p2pkh":"p2sh"}}catch(G){throw new V.SwapKitError("toolbox_utxo_invalid_address",{address:X})}}function cX(X){let G=z.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=G,J.set(X.hash,1),QX.default.encode(J)}function uX(X){let G=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",Q=new Uint8Array(X.hash);return ZX.default.encode(G,J,Q)}var y=require("@swapkit/helpers");var r=(X)=>{switch(X){case y.Chain.Bitcoin:case y.Chain.BitcoinCash:return 550;case y.Chain.Dash:case y.Chain.Litecoin:return 5500;case y.Chain.Dogecoin:return 1e5;default:throw new y.SwapKitError("toolbox_utxo_not_supported",{chain:X})}},O=({inputs:X,outputs:G,feeRate:J=1,chain:Q=y.Chain.Bitcoin})=>{let $=Math.ceil(J),j=X[0]&&"address"in X[0]&&X[0].address?h(X[0].address):"P2PKH",Z=X.filter((v)=>N(v)*$<=v.value),W=d+G.reduce((v,C)=>v+l(C,j),0),L=G.reduce((v,C)=>v+C.value,0),D=W*$,U=0,M=[];for(let v of Z){let C=N(v),T=$*C;D+=T,U+=v.value,M.push(v);let _=D+L;if(U<_)continue;let R=U-_,BX=$*l({address:"",value:0},j);if(R>BX){let UX=BX+D,vX=U-(L+UX);if(vX>Math.max(N({})*$,r(Q)))return{inputs:M,outputs:G.concat({value:vX,address:""}),fee:UX}}return{inputs:M,outputs:G,fee:D}}return{fee:$*E({inputs:X,outputs:G,feeRate:$})}};var _X=require("@swapkit/helpers"),s=require("bitcoinjs-lib"),pX=1000,d=10,FX=10,oX=41,nX=107;function k(X){let G=Buffer.from(X,"utf8");return s.script.compile([s.opcodes.OP_RETURN,G])}var i;((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(i||={});var a={["P2PKH"]:148,["P2WPKH"]:68},c={["P2PKH"]:34,["P2WPKH"]:31},h=(X)=>{if(X.startsWith("bc1")||X.startsWith("ltc1"))return"P2WPKH";if(X.startsWith("1")||X.startsWith("3")||X.startsWith("L")||X.startsWith("M")||X.startsWith("X")||X.startsWith("D")||X.startsWith("bitcoincash:q")||X.startsWith("q"))return"P2PKH";throw new _X.SwapKitError("toolbox_utxo_invalid_address",{address:X})},E=({inputs:X,outputs:G,feeRate:J})=>{let Q=X[0]&&"address"in X[0]&&X[0].address?h(X[0].address):"P2PKH",$=X.filter((Z)=>Z.value>=a["type"in Z?Z.type:"P2PKH"]*Math.ceil(J)).reduce((Z,W)=>Z+N(W),0),j=G?.reduce((Z,W)=>Z+l(W),0)||c[Q];return d+$+j},N=(X)=>{if("type"in X)return a[X.type];if("address"in X&&X.address)return a[h(X.address)];return oX+nX},l=(X,G)=>{if(X?.script)return FX+X.script.length+(X.script.length>=74?2:1);if(G)return c[G];return c.P2PKH};var q=require("@swapkit/helpers"),P=require("bitcoinjs-lib"),yX=x(require("ecpair"));var t=x(require("@bitcoinerlab/secp256k1")),e=require("@psf/bitcoincashjs-lib"),NX=require("@scure/bip32"),WX=require("@scure/bip39"),u=[q.Chain.Dash,q.Chain.Dogecoin];function rX({inputs:X,outputs:G,chain:J,psbt:Q,sender:$,compiledMemo:j}){for(let Z of X){let W=!!Z.witnessUtxo&&!u.includes(J)&&{witnessUtxo:Z.witnessUtxo},L=u.includes(J)&&{nonWitnessUtxo:Z.txHex?Buffer.from(Z.txHex,"hex"):void 0};Q.addInput({hash:Z.hash,index:Z.index,...W,...L})}for(let Z of G){let W="address"in Z&&Z.address?Z.address:$,L=Z.script;if(L&&!j)continue;let D=L?{script:j,value:0}:{address:W,value:Z.value};P.initEccLib(t.default),Q.addOutput(D)}return{psbt:Q,inputs:X}}async function OX({assetValue:X,recipient:G,memo:J,feeRate:Q,sender:$,fetchTxHex:j=!1}){let Z=X.chain,W=J?await k(J):null,L=await VX({assetValue:X,recipient:G,memo:J,sender:$,fetchTxHex:j}),{inputs:D,outputs:U}=O({...L,feeRate:Q,chain:Z});if(!(D&&U))throw new q.SwapKitError("toolbox_utxo_insufficient_balance",{sender:$,assetValue:X});let M=await F(),v=new P.Psbt({network:M(Z)});if(Z===q.Chain.Dogecoin)v.setMaximumFeeRate(650000000);let{psbt:C,inputs:T}=await rX({inputs:D,outputs:U,chain:Z,psbt:v,sender:$,compiledMemo:W});return{psbt:C,utxos:L.inputs,inputs:T}}async function kX(){let X=await F();return function G({address:J,chain:Q}){if(Q===q.Chain.BitcoinCash)return A(J);try{return P.initEccLib(t.default),P.address.toOutputScript(J,X(Q)),!0}catch($){return!1}}}async function dX({chain:X,phrase:G,derivationPath:J}){let Q=(await o(X))({phrase:G,derivationPath:J});async function $(Z){return await Z.signAllInputs(Q),Z}async function j(){return(await qX(X))(Q)}return{getAddress:j,signTransaction:$}}async function p({chain:X,...G}){let J="phrase"in G?G.phrase:void 0,Q="index"in G?G.index||0:0,$=q.derivationPathToString("derivationPath"in G&&G.derivationPath?G.derivationPath:q.updateDerivationPath(q.NetworkDerivationPath[X],{index:Q})),j=J?await dX({chain:X,phrase:J,derivationPath:$}):("signer"in G)?G.signer:void 0;function Z(){return Promise.resolve(j?.getAddress())}let W=await qX(X),L=await kX(),D=await o(X);return{accumulative:O,calculateTxSize:E,getAddressFromKeys:W,getAddress:Z,validateAddress:(U)=>L({address:U,chain:X}),broadcastTx:(U)=>Y(X).broadcastTx(U),createTransaction:OX,createKeysForPath:D,getFeeRates:()=>XX(X),getInputsOutputsFee:bX,transfer:sX(j),getPrivateKeyFromMnemonic:(U)=>{return D(U).toWIF()},getBalance:PX(X),estimateTransactionFee:aX(X),estimateMaxSendableAmount:iX(X)}}async function bX({assetValue:X,feeOptionKey:G=q.FeeOption.Fast,feeRate:J,memo:Q,sender:$,recipient:j}){let Z=X.chain,W=await VX({assetValue:X,sender:$,memo:Q,recipient:j}),L=J?Math.floor(J):(await XX(Z))[G];return O({...W,feeRate:L,chain:Z})}function iX(X){return async function G({from:J,memo:Q,feeRate:$,feeOptionKey:j=q.FeeOption.Fast,recipients:Z=1}){let W=await Y(X).getAddressData(J),L=$?Math.ceil($):(await XX(X))[j],D=W?.utxo.map((T)=>({...T,type:"P2PKH",hash:""})).filter((T)=>T.value>Math.max(r(X),N(T)*L));if(!D?.length)return q.AssetValue.from({chain:X});let U=q.AssetValue.from({chain:X,value:D.reduce((T,_)=>T+_.value,0)}),M=typeof Z==="number"?Array.from({length:Z},()=>({address:J,value:0})):Z;if(Q){let T=await k(Q);M.push({address:J,script:T,value:0})}let C=E({inputs:D,outputs:M,feeRate:L})*L;return U.sub(C)}}function aX(X){return async(G)=>{let J=await bX(G);return q.AssetValue.from({chain:X,value:q.SwapKitNumber.fromBigInt(BigInt(J.fee),8).getValue("string")})}}async function o(X){let G=await F();switch(X){case q.Chain.BitcoinCash:return function J({phrase:Q,derivationPath:$=`${q.DerivationPath.BCH}/0`,wif:j}){let Z=G(X);if(j)return e.ECPair.fromWIF(j,Z);if(!Q)throw new q.SwapKitError("toolbox_utxo_invalid_params",{error:"No phrase provided"});return e.HDNode.fromSeedBuffer(Buffer.from(WX.mnemonicToSeedSync(Q)),Z).derivePath($).keyPair};case q.Chain.Bitcoin:case q.Chain.Dogecoin:case q.Chain.Litecoin:case q.Chain.Dash:return function J({phrase:Q,wif:$,derivationPath:j}){if(!($||Q))throw new q.SwapKitError("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let Z=yX.default(t.default),W=G(X);if($)return Z.fromWIF($,W);let L=WX.mnemonicToSeedSync(Q),D=NX.HDKey.fromMasterSeed(L,W).derive(j);if(!D.privateKey)throw new q.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not get private key from phrase"});return Z.fromPrivateKey(Buffer.from(D.privateKey),{network:W})};default:throw new q.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}async function qX(X){let G=await F();return function J(Q){if(!Q)throw new q.SwapKitError("toolbox_utxo_invalid_params",{error:"Keys must be provided"});let $=u.includes(X)?P.payments.p2pkh:P.payments.p2wpkh,{address:j}=$({pubkey:Q.publicKey,network:G(X)});if(!j)throw new q.SwapKitError("toolbox_utxo_invalid_address",{error:"Address not defined"});return j}}function sX(X){return async function G({memo:J,recipient:Q,feeOptionKey:$,feeRate:j,assetValue:Z}){let W=await X?.getAddress(),L=Z.chain;if(!(X&&W))throw new q.SwapKitError("toolbox_utxo_no_signer");if(!Q)throw new q.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let D=j||(await XX(L))[$||q.FeeOption.Fast],{psbt:U}=await OX({recipient:Q,feeRate:D,sender:W,assetValue:Z,memo:J}),M=await X.signTransaction(U);return M.finalizeAllInputs(),Y(L).broadcastTx(M.extractTransaction().toHex())}}async function XX(X){let G=await Y(X).getSuggestedTxFee();return{[q.FeeOption.Average]:G,[q.FeeOption.Fast]:G*1.5,[q.FeeOption.Fastest]:G*2}}async function VX({assetValue:X,recipient:G,memo:J,sender:Q,fetchTxHex:$=!1}){let j=X.chain,Z=$||u.includes(j);return{inputs:await Y(j).scanUTXOs({address:Q,fetchTxHex:Z}),outputs:[{address:G,value:Number(X.bigIntValue)},...J?[{address:"",script:await k(J),value:0}]:[]]}}var I=H.Chain.BitcoinCash;function S(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function A(X){let G=S(X);return jX(G)&&LX(G)==="mainnet"}function K(X){return S(m(X))}async function tX(X){async function G({builder:Q,utxos:$}){return $.forEach((j,Z)=>{Q.sign(Z,X,void 0,65,j.witnessUtxo?.value)}),Q.build()}return{getAddress:()=>{let Q=X.getAddress(0);return Promise.resolve(K(Q))},signTransaction:G}}async function DX(X){let G="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,Q=H.derivationPathToString("derivationPath"in X&&X.derivationPath?X.derivationPath:H.updateDerivationPath(H.NetworkDerivationPath[I],{index:J})),$=(await o(I))({phrase:G,derivationPath:Q}),j=$?await tX($):("signer"in X)?X.signer:void 0;function Z(){return Promise.resolve(j?.getAddress())}let{getBalance:W,getFeeRates:L,broadcastTx:D,...U}=await p({chain:I});function M(v,C=!0){return W(S(m(v)))}return{...U,getAddress:Z,broadcastTx:D,createTransaction:KX,buildTx:XG,getAddressFromKeys:GG,getBalance:M,getFeeRates:L,stripPrefix:S,stripToCashAddress:K,validateAddress:A,transfer:eX({getFeeRates:L,broadcastTx:D,signer:j})}}async function KX({assetValue:X,recipient:G,memo:J,feeRate:Q,sender:$}){if(!A(G))throw new H.SwapKitError("toolbox_utxo_invalid_address",{address:G});let j=await Y(I).scanUTXOs({address:K($),fetchTxHex:!0}),Z=J?await k(J):null,W=[];W.push({address:G,value:X.getBaseValue("number")});let{inputs:L,outputs:D}=O({inputs:j,outputs:W,feeRate:Q,chain:I});if(!(L&&D))throw new H.SwapKitError("toolbox_utxo_insufficient_balance",{sender:$,assetValue:X});let U=await F(),M=new g.TransactionBuilder(U(I));await Promise.all(L.map(async(v)=>{let C=await Y(I).getRawTx(v.hash);M.addInput(g.Transaction.fromBuffer(Buffer.from(C,"hex")),v.index)}));for(let v of D){let C="address"in v&&v.address?v.address:f($),T=await F(),_=g.address.toOutputScript(f(C),T(I));M.addOutput(_,v.value)}if(Z)M.addOutput(Z,0);return{builder:M,utxos:L}}function eX({broadcastTx:X,getFeeRates:G,signer:J}){return async function Q({recipient:$,assetValue:j,feeOptionKey:Z=H.FeeOption.Fast,...W}){let L=await J?.getAddress();if(!(J&&L))throw new H.SwapKitError("toolbox_utxo_no_signer");if(!$)throw new H.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let D=W.feeRate||(await G())[Z],{builder:U,utxos:M}=await KX({...W,assetValue:j,feeRate:D,recipient:$,sender:L}),C=(await J.signTransaction({builder:U,utxos:M})).toHex();return X(C)}}async function XG({assetValue:X,recipient:G,memo:J,feeRate:Q,sender:$}){let j=m(G);if(!A(j))throw new H.SwapKitError("toolbox_utxo_invalid_address",{address:j});let Z=await Y(I).scanUTXOs({address:K($),fetchTxHex:!0}),W=Number(Q.toFixed(0)),L=J?await k(J):null,D=[];if(D.push({address:f(G),value:X.getBaseValue("number")}),L)D.push({script:L,value:0});let{inputs:U,outputs:M}=O({inputs:Z,outputs:D,feeRate:W,chain:I});if(!(U&&M))throw new H.SwapKitError("toolbox_utxo_insufficient_balance",{sender:$,assetValue:X});let v=await F(),C=new AX.Psbt({network:v(I)});for(let{hash:T,index:_,witnessUtxo:R}of U)C.addInput({hash:T,index:_,witnessUtxo:R});for(let T of M){let _="address"in T&&T.address?T.address:f($),R=T.script?L?{script:L,value:0}:void 0:{address:_,value:T.value};if(R)C.addOutput(R)}return{psbt:C,utxos:Z,inputs:U}}function GG(X){let G=X.getAddress(0);return K(G)}async function JG(X,G){switch(X){case b.Chain.BitcoinCash:return await DX(G);case b.Chain.Bitcoin:case b.Chain.Dogecoin:case b.Chain.Litecoin:case b.Chain.Dash:return await p({chain:X,...G});default:throw new b.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}
|
|
1
|
+
var $G={};ZG($G,{toLegacyAddress:()=>f,toCashAddress:()=>m,stripToCashAddress:()=>K,stripPrefix:()=>S,nonSegwitChains:()=>u,isValidAddress:()=>jX,getUtxoToolbox:()=>JG,getUtxoNetwork:()=>P,getUtxoApi:()=>Y,getUTXOAddressValidator:()=>OX,getScriptTypeForAddress:()=>h,getOutputSize:()=>l,getInputSize:()=>N,getDustThreshold:()=>r,getCreateKeysForPath:()=>o,detectAddressNetwork:()=>LX,createUTXOToolbox:()=>p,createCustomUtxoApi:()=>mX,createBCHToolbox:()=>DX,compileMemo:()=>O,calculateTxSize:()=>E,bchValidateAddress:()=>A,addressFromKeysGetter:()=>qX,accumulative:()=>k,UtxoNetwork:()=>$X,UTXOScriptType:()=>i,TX_OVERHEAD:()=>d,OutputSizes:()=>c,OP_RETURN_OVERHEAD:()=>PX,MIN_TX_FEE:()=>pX,InputSizes:()=>a});module.exports=QG($G);var b=require("@swapkit/helpers");var g=require("@psf/bitcoincashjs-lib"),H=require("@swapkit/helpers"),AX=require("bitcoinjs-lib");var B=require("@swapkit/helpers"),TX=require("bitcoinjs-lib");var w=x(require("coininfo"));async function RX({chain:X,txHash:G}){let J=B.SKConfig.get("rpcUrls")[X],Q=JSON.stringify({jsonrpc:"2.0",method:"sendrawtransaction",params:[G],id:zX()}),$=await B.RequestClient.post(J,{headers:{"Content-Type":"application/json"},body:Q});if($.error)throw new B.SwapKitError("toolbox_utxo_broadcast_failed",{error:$.error?.message});if($.result.includes('"code":-26'))throw new B.SwapKitError("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return $.result}function GX(X){return`https://api.blockchair.com/${wX(X)}`}function MX(X){switch(X){case B.Chain.Bitcoin:return 5;case B.Chain.Dogecoin:return 1e4;case B.Chain.Litecoin:return 1;default:return 2}}function wX(X){switch(X){case B.Chain.BitcoinCash:return"bitcoin-cash";case B.Chain.Litecoin:return"litecoin";case B.Chain.Dash:return"dash";case B.Chain.Dogecoin:return"dogecoin";case B.Chain.Polkadot:return"polkadot";default:return"bitcoin"}}async function fX(X){try{let{feePerKb:G}=await B.RequestClient.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=G/1000;return Math.max(J,MX(X))}catch(G){return MX(X)}}async function JX(X,G){try{let J=await B.RequestClient.get(X);if(!J||J.context.code!==200)throw new B.SwapKitError("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return J.data}catch(J){if(!G)throw J;let Q=await B.RequestClient.get(`${X}${G?`&key=${G}`:""}`);if(!Q||Q.context.code!==200)throw new B.SwapKitError("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return Q.data}}async function CX({address:X,chain:G,apiKey:J}){if(!X)throw new B.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await JX(`${GX(G)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch(Q){return{utxo:[],address:{balance:0,transaction_count:0}}}}async function EX({address:X,chain:G,apiKey:J}){return(await CX({address:X,chain:G,apiKey:J}))?.address.balance||0}async function HX({chain:X,apiKey:G,txHash:J}){if(!J)throw new B.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await JX(`${GX(X)}/raw/transaction/${J}`,G))?.[J]?.raw_transaction||""}catch(Q){return console.error("Failed to fetch raw transaction:",Q),""}}async function SX({chain:X,address:G,apiKey:J,offset:Q=0,limit:$=100}){return(await JX(`${GX(X)}/outputs?q=is_spent(false),recipient(${G})&limit=${$}&offset=${Q}`,J)).filter(({is_spent:q})=>!q).map(({script_hex:q,block_id:W,transaction_hash:D,index:U,value:M,spending_signature_hex:v})=>({hash:D,index:U,value:M,txHex:v,script_hex:q,is_confirmed:W!==-1}))}async function YX({chain:X,address:G,apiKey:J,offset:Q=0,limit:$=100}){if(!G)throw new B.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{let j=await SX({chain:X,address:G,apiKey:J,offset:Q,limit:$});if(j.length<=$)return j;let Z=await YX({chain:X,address:G,apiKey:J,offset:Q+$,limit:$});return[...j,...Z]}catch(j){return console.error("Failed to fetch unspent UTXOs:",j),[]}}async function gX({address:X,chain:G,apiKey:J,fetchTxHex:Q=!0}){let $=await YX({chain:G,address:X,apiKey:J}),j=[];for(let{hash:Z,index:q,script_hex:W,value:D}of $){let U;if(Q)U=await HX({txHash:Z,chain:G,apiKey:J});j.push({address:X,hash:Z,index:q,txHex:U,value:D,witnessUtxo:{value:D,script:Buffer.from(W,"hex")}})}return j}function xX(X){let G=B.SKConfig.get("apiKeys").blockchair||"";return B.warnOnce(!G,"No Blockchair API key found. Functionality will be limited."),{broadcastTx:(J)=>RX({txHash:J,chain:X}),getRawTx:(J)=>HX({txHash:J,chain:X,apiKey:G}),getSuggestedTxFee:()=>fX(X),getBalance:(J)=>EX({address:J,chain:X,apiKey:G}),getAddressData:(J)=>CX({address:J,chain:X,apiKey:G}),scanUTXOs:(J)=>gX({...J,chain:X,apiKey:G})}}function mX(X){return X}function Y(X){let G=B.SKConfig.get("apis")[X];if(G)return B.warnOnce(!0,"Using custom UTXO API. Be sure to implement all methods to avoid issues."),G;return xX(X)}function P(){return function X(G){switch(G){case B.Chain.Bitcoin:return TX.networks.bitcoin;case B.Chain.BitcoinCash:return w.default.bitcoincash.main.toBitcoinJS();case B.Chain.Dash:return w.default.dash.main.toBitcoinJS();case B.Chain.Litecoin:return w.default.litecoin.main.toBitcoinJS();case B.Chain.Dogecoin:{let J={private:70615956,public:70617039},Q=w.default.dogecoin.test;return Q.versions.bip32=J,w.default.dogecoin.main.toBitcoinJS()}default:throw new B.SwapKitError("toolbox_utxo_not_supported",{chain:G})}}}var V=require("@swapkit/helpers"),QX=x(require("bs58check")),ZX=x(require("cashaddrjs"));var $X;((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})($X||={});var z={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}};function jX(X){try{return n(X),!0}catch(G){return!1}}function LX(X){return n(X)?.network}function f(X){let G=n(X);if(G?.format==="legacy")return X;return cX(G)}function m(X){let G=n(X);return uX(G)}function n(X){try{return lX(X)}catch(G){}try{return hX(X)}catch(G){}throw new V.SwapKitError("toolbox_utxo_invalid_address",{address:X})}function lX(X){try{let G=QX.default.decode(X);if(G.length!==21)throw new V.SwapKitError("toolbox_utxo_invalid_address",{address:X});let J=G[0],Q=Array.prototype.slice.call(G,1);switch(J){case z.legacy.mainnet.p2pkh:return{hash:Q,format:"legacy",network:"mainnet",type:"p2pkh"};case z.legacy.mainnet.p2sh:return{hash:Q,format:"legacy",network:"mainnet",type:"p2sh"};case z.legacy.testnet.p2pkh:return{hash:Q,format:"legacy",network:"testnet",type:"p2pkh"};case z.legacy.testnet.p2sh:return{hash:Q,format:"legacy",network:"testnet",type:"p2sh"};case z.bitpay.mainnet.p2pkh:return{hash:Q,format:"bitpay",network:"mainnet",type:"p2pkh"};case z.bitpay.mainnet.p2sh:return{hash:Q,format:"bitpay",network:"mainnet",type:"p2sh"};default:throw new V.SwapKitError("toolbox_utxo_invalid_address",{address:X})}}catch(G){throw new V.SwapKitError("toolbox_utxo_invalid_address",{address:X})}}function hX(X){if(X.indexOf(":")!==-1)try{return IX(X)}catch(G){}else{let G=["bitcoincash","bchtest","bchreg"];for(let J of G)try{return IX(`${J}:${X}`)}catch(Q){}}throw new V.SwapKitError("toolbox_utxo_invalid_address",{address:X})}function IX(X){try{let{hash:G,prefix:J,type:Q}=ZX.default.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call(G,0),network:J==="bitcoincash"?"mainnet":"testnet",type:Q==="P2PKH"?"p2pkh":"p2sh"}}catch(G){throw new V.SwapKitError("toolbox_utxo_invalid_address",{address:X})}}function cX(X){let G=z.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=G,J.set(X.hash,1),QX.default.encode(J)}function uX(X){let G=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",Q=new Uint8Array(X.hash);return ZX.default.encode(G,J,Q)}var y=require("@swapkit/helpers");var r=(X)=>{switch(X){case y.Chain.Bitcoin:case y.Chain.BitcoinCash:return 550;case y.Chain.Dash:case y.Chain.Litecoin:return 5500;case y.Chain.Dogecoin:return 1e5;default:throw new y.SwapKitError("toolbox_utxo_not_supported",{chain:X})}},k=({inputs:X,outputs:G,feeRate:J=1,chain:Q=y.Chain.Bitcoin})=>{let $=Math.ceil(J),j=X[0]&&"address"in X[0]&&X[0].address?h(X[0].address):"P2PKH",Z=X.filter((v)=>N(v)*$<=v.value),q=d+G.reduce((v,C)=>v+l(C,j),0),W=G.reduce((v,C)=>v+C.value,0),D=q*$,U=0,M=[];for(let v of Z){let C=N(v),T=$*C;D+=T,U+=v.value,M.push(v);let _=D+W;if(U<_)continue;let R=U-_,BX=$*l({address:"",value:0},j);if(R>BX){let UX=BX+D,vX=U-(W+UX);if(vX>Math.max(N({})*$,r(Q)))return{inputs:M,outputs:G.concat({value:vX,address:""}),fee:UX}}return{inputs:M,outputs:G,fee:D}}return{fee:$*E({inputs:X,outputs:G,feeRate:$})}};var _X=require("@swapkit/helpers"),s=require("bitcoinjs-lib"),pX=1000,d=10,PX=10,oX=41,nX=107;function O(X){let G=Buffer.from(X,"utf8");return s.script.compile([s.opcodes.OP_RETURN,G])}var i;((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(i||={});var a={["P2PKH"]:148,["P2WPKH"]:68},c={["P2PKH"]:34,["P2WPKH"]:31},h=(X)=>{if(X.startsWith("bc1")||X.startsWith("ltc1"))return"P2WPKH";if(X.startsWith("1")||X.startsWith("3")||X.startsWith("L")||X.startsWith("M")||X.startsWith("X")||X.startsWith("D")||X.startsWith("bitcoincash:q")||X.startsWith("q"))return"P2PKH";throw new _X.SwapKitError("toolbox_utxo_invalid_address",{address:X})},E=({inputs:X,outputs:G,feeRate:J})=>{let Q=X[0]&&"address"in X[0]&&X[0].address?h(X[0].address):"P2PKH",$=X.filter((Z)=>Z.value>=a["type"in Z?Z.type:"P2PKH"]*Math.ceil(J)).reduce((Z,q)=>Z+N(q),0),j=G?.reduce((Z,q)=>Z+l(q),0)||c[Q];return d+$+j},N=(X)=>{if("type"in X)return a[X.type];if("address"in X&&X.address)return a[h(X.address)];return oX+nX},l=(X,G)=>{if(X?.script)return PX+X.script.length+(X.script.length>=74?2:1);if(G)return c[G];return c.P2PKH};var L=require("@swapkit/helpers"),F=require("bitcoinjs-lib"),yX=x(require("ecpair"));var t=x(require("@bitcoinerlab/secp256k1")),e=require("@psf/bitcoincashjs-lib"),NX=require("@scure/bip32"),WX=require("@scure/bip39"),u=[L.Chain.Dash,L.Chain.Dogecoin];function rX({inputs:X,outputs:G,chain:J,psbt:Q,sender:$,compiledMemo:j}){for(let Z of X){let q=!!Z.witnessUtxo&&!u.includes(J)&&{witnessUtxo:Z.witnessUtxo},W=u.includes(J)&&{nonWitnessUtxo:Z.txHex?Buffer.from(Z.txHex,"hex"):void 0};Q.addInput({hash:Z.hash,index:Z.index,...q,...W})}for(let Z of G){let q="address"in Z&&Z.address?Z.address:$,W=Z.script;if(W&&!j)continue;let D=W?{script:j,value:0}:{address:q,value:Z.value};F.initEccLib(t.default),Q.addOutput(D)}return{psbt:Q,inputs:X}}async function kX({assetValue:X,recipient:G,memo:J,feeRate:Q,sender:$,fetchTxHex:j=!1}){let Z=X.chain,q=J?await O(J):null,W=await VX({assetValue:X,recipient:G,memo:J,sender:$,fetchTxHex:j}),{inputs:D,outputs:U}=k({...W,feeRate:Q,chain:Z});if(!(D&&U))throw new L.SwapKitError("toolbox_utxo_insufficient_balance",{sender:$,assetValue:X});let M=await P(),v=new F.Psbt({network:M(Z)});if(Z===L.Chain.Dogecoin)v.setMaximumFeeRate(650000000);let{psbt:C,inputs:T}=await rX({inputs:D,outputs:U,chain:Z,psbt:v,sender:$,compiledMemo:q});return{psbt:C,utxos:W.inputs,inputs:T}}async function OX(){let X=await P();return function G({address:J,chain:Q}){if(Q===L.Chain.BitcoinCash)return A(J);try{return F.initEccLib(t.default),F.address.toOutputScript(J,X(Q)),!0}catch($){return!1}}}async function dX({chain:X,phrase:G,derivationPath:J}){let Q=(await o(X))({phrase:G,derivationPath:J});async function $(Z){return await Z.signAllInputs(Q),Z}async function j(){return(await qX(X))(Q)}return{getAddress:j,signTransaction:$}}async function p({chain:X,...G}){let J="phrase"in G?G.phrase:void 0,Q="index"in G?G.index||0:0,$=L.derivationPathToString("derivationPath"in G&&G.derivationPath?G.derivationPath:L.updateDerivationPath(L.NetworkDerivationPath[X],{index:Q})),j=J?await dX({chain:X,phrase:J,derivationPath:$}):("signer"in G)?G.signer:void 0;function Z(){return Promise.resolve(j?.getAddress())}let q=await qX(X),W=await OX(),D=await o(X);return{accumulative:k,calculateTxSize:E,getAddressFromKeys:q,getAddress:Z,validateAddress:(U)=>W({address:U,chain:X}),broadcastTx:(U)=>Y(X).broadcastTx(U),createTransaction:kX,createKeysForPath:D,getFeeRates:()=>XX(X),getInputsOutputsFee:bX,transfer:sX(j),getPrivateKeyFromMnemonic:(U)=>{return D(U).toWIF()},getBalance:FX(X),estimateTransactionFee:aX(X),estimateMaxSendableAmount:iX(X)}}async function bX({assetValue:X,feeOptionKey:G=L.FeeOption.Fast,feeRate:J,memo:Q,sender:$,recipient:j}){let Z=X.chain,q=await VX({assetValue:X,sender:$,memo:Q,recipient:j}),W=J?Math.floor(J):(await XX(Z))[G];return k({...q,feeRate:W,chain:Z})}function iX(X){return async function G({from:J,memo:Q,feeRate:$,feeOptionKey:j=L.FeeOption.Fast,recipients:Z=1}){let q=await Y(X).getAddressData(J),W=$?Math.ceil($):(await XX(X))[j],D=q?.utxo.map((T)=>({...T,type:"P2PKH",hash:""})).filter((T)=>T.value>Math.max(r(X),N(T)*W));if(!D?.length)return L.AssetValue.from({chain:X});let U=L.AssetValue.from({chain:X,value:D.reduce((T,_)=>T+_.value,0)}),M=typeof Z==="number"?Array.from({length:Z},()=>({address:J,value:0})):Z;if(Q){let T=await O(Q);M.push({address:J,script:T,value:0})}let C=E({inputs:D,outputs:M,feeRate:W})*W;return U.sub(C)}}function aX(X){return async(G)=>{let J=await bX(G);return L.AssetValue.from({chain:X,value:L.SwapKitNumber.fromBigInt(BigInt(J.fee),8).getValue("string")})}}async function o(X){let G=await P();switch(X){case L.Chain.BitcoinCash:return function J({phrase:Q,derivationPath:$=`${L.DerivationPath.BCH}/0`,wif:j}){let Z=G(X);if(j)return e.ECPair.fromWIF(j,Z);if(!Q)throw new L.SwapKitError("toolbox_utxo_invalid_params",{error:"No phrase provided"});return e.HDNode.fromSeedBuffer(Buffer.from(WX.mnemonicToSeedSync(Q)),Z).derivePath($).keyPair};case L.Chain.Bitcoin:case L.Chain.Dogecoin:case L.Chain.Litecoin:case L.Chain.Dash:return function J({phrase:Q,wif:$,derivationPath:j}){if(!($||Q))throw new L.SwapKitError("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let Z=yX.default(t.default),q=G(X);if($)return Z.fromWIF($,q);let W=WX.mnemonicToSeedSync(Q),D=NX.HDKey.fromMasterSeed(W,q).derive(j);if(!D.privateKey)throw new L.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not get private key from phrase"});return Z.fromPrivateKey(Buffer.from(D.privateKey),{network:q})};default:throw new L.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}async function qX(X){let G=await P();return function J(Q){if(!Q)throw new L.SwapKitError("toolbox_utxo_invalid_params",{error:"Keys must be provided"});let $=u.includes(X)?F.payments.p2pkh:F.payments.p2wpkh,{address:j}=$({pubkey:Q.publicKey,network:G(X)});if(!j)throw new L.SwapKitError("toolbox_utxo_invalid_address",{error:"Address not defined"});return j}}function sX(X){return async function G({memo:J,recipient:Q,feeOptionKey:$,feeRate:j,assetValue:Z}){let q=await X?.getAddress(),W=Z.chain;if(!(X&&q))throw new L.SwapKitError("toolbox_utxo_no_signer");if(!Q)throw new L.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let D=j||(await XX(W))[$||L.FeeOption.Fast],{psbt:U}=await kX({recipient:Q,feeRate:D,sender:q,assetValue:Z,memo:J}),M=await X.signTransaction(U);return M.finalizeAllInputs(),Y(W).broadcastTx(M.extractTransaction().toHex())}}async function XX(X){let G=await Y(X).getSuggestedTxFee();return{[L.FeeOption.Average]:G,[L.FeeOption.Fast]:L.applyFeeMultiplier(G,L.FeeOption.Fast),[L.FeeOption.Fastest]:L.applyFeeMultiplier(G,L.FeeOption.Fastest)}}async function VX({assetValue:X,recipient:G,memo:J,sender:Q,fetchTxHex:$=!1}){let j=X.chain,Z=$||u.includes(j);return{inputs:await Y(j).scanUTXOs({address:Q,fetchTxHex:Z}),outputs:[{address:G,value:Number(X.bigIntValue)},...J?[{address:"",script:await O(J),value:0}]:[]]}}var I=H.Chain.BitcoinCash;function S(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function A(X){let G=S(X);return jX(G)&&LX(G)==="mainnet"}function K(X){return S(m(X))}async function tX(X){async function G({builder:Q,utxos:$}){return $.forEach((j,Z)=>{Q.sign(Z,X,void 0,65,j.witnessUtxo?.value)}),Q.build()}return{getAddress:()=>{let Q=X.getAddress(0);return Promise.resolve(K(Q))},signTransaction:G}}async function DX(X){let G="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,Q=H.derivationPathToString("derivationPath"in X&&X.derivationPath?X.derivationPath:H.updateDerivationPath(H.NetworkDerivationPath[I],{index:J})),$=(await o(I))({phrase:G,derivationPath:Q}),j=$?await tX($):("signer"in X)?X.signer:void 0;function Z(){return Promise.resolve(j?.getAddress())}let{getBalance:q,getFeeRates:W,broadcastTx:D,...U}=await p({chain:I});function M(v,C=!0){return q(S(m(v)))}return{...U,getAddress:Z,broadcastTx:D,createTransaction:KX,buildTx:XG,getAddressFromKeys:GG,getBalance:M,getFeeRates:W,stripPrefix:S,stripToCashAddress:K,validateAddress:A,transfer:eX({getFeeRates:W,broadcastTx:D,signer:j})}}async function KX({assetValue:X,recipient:G,memo:J,feeRate:Q,sender:$}){if(!A(G))throw new H.SwapKitError("toolbox_utxo_invalid_address",{address:G});let j=await Y(I).scanUTXOs({address:K($),fetchTxHex:!0}),Z=J?await O(J):null,q=[];q.push({address:G,value:X.getBaseValue("number")});let{inputs:W,outputs:D}=k({inputs:j,outputs:q,feeRate:Q,chain:I});if(!(W&&D))throw new H.SwapKitError("toolbox_utxo_insufficient_balance",{sender:$,assetValue:X});let U=await P(),M=new g.TransactionBuilder(U(I));await Promise.all(W.map(async(v)=>{let C=await Y(I).getRawTx(v.hash);M.addInput(g.Transaction.fromBuffer(Buffer.from(C,"hex")),v.index)}));for(let v of D){let C="address"in v&&v.address?v.address:f($),T=await P(),_=g.address.toOutputScript(f(C),T(I));M.addOutput(_,v.value)}if(Z)M.addOutput(Z,0);return{builder:M,utxos:W}}function eX({broadcastTx:X,getFeeRates:G,signer:J}){return async function Q({recipient:$,assetValue:j,feeOptionKey:Z=H.FeeOption.Fast,...q}){let W=await J?.getAddress();if(!(J&&W))throw new H.SwapKitError("toolbox_utxo_no_signer");if(!$)throw new H.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let D=q.feeRate||(await G())[Z],{builder:U,utxos:M}=await KX({...q,assetValue:j,feeRate:D,recipient:$,sender:W}),C=(await J.signTransaction({builder:U,utxos:M})).toHex();return X(C)}}async function XG({assetValue:X,recipient:G,memo:J,feeRate:Q,sender:$}){let j=m(G);if(!A(j))throw new H.SwapKitError("toolbox_utxo_invalid_address",{address:j});let Z=await Y(I).scanUTXOs({address:K($),fetchTxHex:!0}),q=Number(Q.toFixed(0)),W=J?await O(J):null,D=[];if(D.push({address:f(G),value:X.getBaseValue("number")}),W)D.push({script:W,value:0});let{inputs:U,outputs:M}=k({inputs:Z,outputs:D,feeRate:q,chain:I});if(!(U&&M))throw new H.SwapKitError("toolbox_utxo_insufficient_balance",{sender:$,assetValue:X});let v=await P(),C=new AX.Psbt({network:v(I)});for(let{hash:T,index:_,witnessUtxo:R}of U)C.addInput({hash:T,index:_,witnessUtxo:R});for(let T of M){let _="address"in T&&T.address?T.address:f($),R=T.script?W?{script:W,value:0}:void 0:{address:_,value:T.value};if(R)C.addOutput(R)}return{psbt:C,utxos:Z,inputs:U}}function GG(X){let G=X.getAddress(0);return K(G)}async function JG(X,G){switch(X){case b.Chain.BitcoinCash:return await DX(G);case b.Chain.Bitcoin:case b.Chain.Dogecoin:case b.Chain.Litecoin:case b.Chain.Dash:return await p({chain:X,...G});default:throw new b.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=3121718C7D34F25A64756E2164756E21
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
"import { SwapKitError } from \"@swapkit/helpers\";\nimport base58check from \"bs58check\";\n// @ts-ignore\nimport cashaddr from \"cashaddrjs\";\n\nenum Format {\n Legacy = \"legacy\",\n Bitpay = \"bitpay\",\n Cashaddr = \"cashaddr\",\n}\nenum UtxoNetwork {\n Mainnet = \"mainnet\",\n Testnet = \"testnet\",\n}\nenum Type {\n P2PKH = \"p2pkh\",\n P2SH = \"p2sh\",\n}\n\nconst VERSION_BYTE = {\n [Format.Legacy]: {\n [UtxoNetwork.Mainnet]: {\n [Type.P2PKH]: 0,\n [Type.P2SH]: 5,\n },\n [UtxoNetwork.Testnet]: {\n [Type.P2PKH]: 111,\n [Type.P2SH]: 196,\n },\n },\n [Format.Bitpay]: {\n [UtxoNetwork.Mainnet]: {\n [Type.P2PKH]: 28,\n [Type.P2SH]: 40,\n },\n [UtxoNetwork.Testnet]: {\n [Type.P2PKH]: 111,\n [Type.P2SH]: 196,\n },\n },\n};\n\ntype DecodedType = {\n format: Format;\n network: UtxoNetwork;\n type: Type;\n hash: any;\n};\n\nfunction isValidAddress(input: any) {\n try {\n decodeAddress(input);\n return true;\n } catch (_error) {\n return false;\n }\n}\n\nfunction detectAddressNetwork(address: string) {\n return decodeAddress(address)?.network;\n}\n\nfunction toLegacyAddress(address: string): string {\n const decoded = decodeAddress(address);\n if (decoded?.format === Format.Legacy) {\n return address;\n }\n return encodeAsLegacy(decoded);\n}\n\nfunction toCashAddress(address: string): string {\n const decoded = decodeAddress(address);\n return encodeAsCashaddr(decoded);\n}\n\nfunction decodeAddress(address: string) {\n try {\n return decodeBase58Address(address);\n } catch (_error) {\n // Try to decode as cashaddr if base58 decoding fails.\n }\n try {\n return decodeCashAddress(address);\n } catch (_error) {\n // Try to decode as bitpay if cashaddr decoding fails.\n }\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n}\n\nfunction decodeBase58Address(address: string) {\n try {\n const payload = base58check.decode(address);\n\n // BASE_58_CHECK_PAYLOAD_LENGTH\n if (payload.length !== 21) throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n const versionByte = payload[0];\n const hash = Array.prototype.slice.call(payload, 1);\n\n switch (versionByte) {\n case VERSION_BYTE[Format.Legacy][UtxoNetwork.Mainnet][Type.P2PKH]:\n return { hash, format: Format.Legacy, network: UtxoNetwork.Mainnet, type: Type.P2PKH };\n\n case VERSION_BYTE[Format.Legacy][UtxoNetwork.Mainnet][Type.P2SH]:\n return { hash, format: Format.Legacy, network: UtxoNetwork.Mainnet, type: Type.P2SH };\n\n case VERSION_BYTE[Format.Legacy][UtxoNetwork.Testnet][Type.P2PKH]:\n return { hash, format: Format.Legacy, network: UtxoNetwork.Testnet, type: Type.P2PKH };\n\n case VERSION_BYTE[Format.Legacy][UtxoNetwork.Testnet][Type.P2SH]:\n return { hash, format: Format.Legacy, network: UtxoNetwork.Testnet, type: Type.P2SH };\n\n case VERSION_BYTE[Format.Bitpay][UtxoNetwork.Mainnet][Type.P2PKH]:\n return { hash, format: Format.Bitpay, network: UtxoNetwork.Mainnet, type: Type.P2PKH };\n\n case VERSION_BYTE[Format.Bitpay][UtxoNetwork.Mainnet][Type.P2SH]:\n return { hash, format: Format.Bitpay, network: UtxoNetwork.Mainnet, type: Type.P2SH };\n\n default:\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n }\n } catch (_error) {\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n }\n}\n\nfunction decodeCashAddress(address: string) {\n if (address.indexOf(\":\") !== -1) {\n try {\n return decodeCashAddressWithPrefix(address);\n } catch (_error) {\n // Try to decode as legacy if cashaddr decoding fails.\n }\n } else {\n const prefixes = [\"bitcoincash\", \"bchtest\", \"bchreg\"];\n for (const prefix of prefixes) {\n try {\n return decodeCashAddressWithPrefix(`${prefix}:${address}`);\n } catch (_error) {\n // Try next prefix if decoding fails.\n }\n }\n }\n\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n}\n\nfunction decodeCashAddressWithPrefix(address: string): DecodedType {\n try {\n const { hash, prefix, type } = cashaddr.decode(address);\n\n return {\n format: Format.Cashaddr,\n hash: Array.prototype.slice.call(hash, 0),\n network: prefix === \"bitcoincash\" ? UtxoNetwork.Mainnet : UtxoNetwork.Testnet,\n type: type === \"P2PKH\" ? Type.P2PKH : Type.P2SH,\n };\n } catch (_error) {\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n }\n}\n\nfunction encodeAsLegacy(decoded: DecodedType) {\n const versionByte = VERSION_BYTE[Format.Legacy][decoded.network][decoded.type];\n const buffer = Buffer.alloc(1 + decoded.hash.length);\n buffer[0] = versionByte;\n buffer.set(decoded.hash, 1);\n return base58check.encode(buffer);\n}\n\nfunction encodeAsCashaddr(decoded: DecodedType) {\n const prefix = decoded.network === UtxoNetwork.Mainnet ? \"bitcoincash\" : \"bchtest\";\n const type = decoded.type === Type.P2PKH ? \"P2PKH\" : \"P2SH\";\n const hash = new Uint8Array(decoded.hash);\n return cashaddr.encode(prefix, type, hash);\n}\n\nexport { detectAddressNetwork, isValidAddress, UtxoNetwork, toCashAddress, toLegacyAddress };\n",
|
|
9
9
|
"import { Chain, SwapKitError, type UTXOChain } from \"@swapkit/helpers\";\n\nimport {\n TX_OVERHEAD,\n UTXOScriptType,\n calculateTxSize,\n getInputSize,\n getOutputSize,\n getScriptTypeForAddress,\n} from \"../helpers\";\nimport type { TargetOutput, UTXOCalculateTxSizeParams, UTXOType } from \"../types\";\n\nexport const getDustThreshold = (chain: UTXOChain) => {\n switch (chain) {\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n return 550;\n case Chain.Dash:\n case Chain.Litecoin:\n return 5500;\n case Chain.Dogecoin:\n return 100000;\n default:\n throw new SwapKitError(\"toolbox_utxo_not_supported\", { chain });\n }\n};\n\nexport const accumulative = ({\n inputs,\n outputs,\n feeRate: initialFeeRate = 1,\n chain = Chain.Bitcoin,\n}: UTXOCalculateTxSizeParams & { outputs: TargetOutput[]; chain: UTXOChain }) => {\n const feeRate = Math.ceil(initialFeeRate);\n\n const newTxType =\n inputs[0] && \"address\" in inputs[0] && inputs[0].address\n ? getScriptTypeForAddress(inputs[0].address)\n : UTXOScriptType.P2PKH;\n // skip input if adding it would cost more than input is worth\n const filteredInputs = inputs.filter((input) => getInputSize(input) * feeRate <= input.value);\n\n const txSizeWithoutInputs =\n TX_OVERHEAD + outputs.reduce((total, output) => total + getOutputSize(output, newTxType), 0);\n\n const amountToSend = outputs.reduce((total, output) => total + output.value, 0);\n\n let fees = txSizeWithoutInputs * feeRate;\n let inputsValue = 0;\n const inputsToUse: typeof inputs = [];\n\n for (const input of filteredInputs) {\n const inputSize = getInputSize(input);\n const inputFee = feeRate * inputSize;\n\n fees += inputFee;\n inputsValue += input.value;\n\n inputsToUse.push(input);\n\n const totalCost = fees + amountToSend;\n\n // we need more inputs\n if (inputsValue < totalCost) continue;\n\n const remainder = inputsValue - totalCost;\n\n const feeForExtraOutput = feeRate * getOutputSize({ address: \"\", value: 0 }, newTxType);\n\n // potential change address\n if (remainder > feeForExtraOutput) {\n const feeAfterExtraOutput = feeForExtraOutput + fees;\n const remainderAfterExtraOutput = inputsValue - (amountToSend + feeAfterExtraOutput);\n\n // is it worth a change output aka can we send it in the future?\n if (\n remainderAfterExtraOutput >\n Math.max(getInputSize({} as UTXOType) * feeRate, getDustThreshold(chain))\n ) {\n return {\n inputs: inputsToUse,\n outputs: outputs.concat({ value: remainderAfterExtraOutput, address: \"\" }),\n fee: feeAfterExtraOutput,\n };\n }\n }\n return {\n inputs: inputsToUse,\n outputs,\n fee: fees,\n };\n }\n\n // We don't have enough inputs, let's calculate transaction fee accrude to the last input\n return { fee: feeRate * calculateTxSize({ inputs, outputs, feeRate }) };\n};\n",
|
|
10
10
|
"import { SwapKitError } from \"@swapkit/helpers\";\nimport { opcodes, script } from \"bitcoinjs-lib\";\nimport type {\n TargetOutput,\n UTXOCalculateTxSizeParams,\n UTXOInputWithScriptType,\n UTXOType,\n} from \"../types\";\n\n/**\n * Minimum transaction fee\n * 1000 satoshi/kB (similar to current `minrelaytxfee`)\n * @see https://github.com/bitcoin/bitcoin/blob/db88db47278d2e7208c50d16ab10cb355067d071/src/validation.h#L56\n */\nexport const MIN_TX_FEE = 1000;\nexport const TX_OVERHEAD = 4 + 1 + 1 + 4; //10\nexport const OP_RETURN_OVERHEAD = 1 + 8 + 1; //10\nconst TX_INPUT_BASE = 32 + 4 + 1 + 4; // 41\nconst TX_INPUT_PUBKEYHASH = 107;\n\nexport function compileMemo(memo: string) {\n const data = Buffer.from(memo, \"utf8\"); // converts MEMO to buffer\n return script.compile([opcodes.OP_RETURN as number, data]); // Compile OP_RETURN script\n}\n\nexport enum UTXOScriptType {\n P2PKH = \"P2PKH\", // legacy\n // P2SH = 'P2SH', // multisig\n P2WPKH = \"P2WPKH\", // bech32 - native segwit\n // P2TR = \"P2TR\", // taproot\n}\n\nexport const InputSizes: Record<UTXOScriptType, number> = {\n [UTXOScriptType.P2PKH]: 148,\n // [UTXOScriptType.P2SH]: 91,\n [UTXOScriptType.P2WPKH]: 68,\n};\n\nexport const OutputSizes: Record<UTXOScriptType, number> = {\n [UTXOScriptType.P2PKH]: 34,\n // [UTXOScriptType.P2SH]: 91,\n [UTXOScriptType.P2WPKH]: 31,\n};\n\nexport const getScriptTypeForAddress = (address: string) => {\n if (address.startsWith(\"bc1\") || address.startsWith(\"ltc1\")) {\n return UTXOScriptType.P2WPKH;\n }\n // if (address.startsWith('3') || address.startsWith('M')) {\n // return UTXOScriptType.P2SH;\n // }\n if (\n address.startsWith(\"1\") ||\n address.startsWith(\"3\") ||\n address.startsWith(\"L\") ||\n address.startsWith(\"M\") ||\n address.startsWith(\"X\") ||\n address.startsWith(\"D\") ||\n address.startsWith(\"bitcoincash:q\") ||\n address.startsWith(\"q\")\n ) {\n return UTXOScriptType.P2PKH;\n }\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { address });\n};\n\nexport const calculateTxSize = ({ inputs, outputs, feeRate }: UTXOCalculateTxSizeParams) => {\n const newTxType =\n inputs[0] && \"address\" in inputs[0] && inputs[0].address\n ? getScriptTypeForAddress(inputs[0].address)\n : UTXOScriptType.P2PKH;\n const inputSize = inputs\n .filter(\n (utxo) =>\n utxo.value >=\n InputSizes[\"type\" in utxo ? utxo.type : UTXOScriptType.P2PKH] * Math.ceil(feeRate),\n )\n .reduce((total, utxo) => total + getInputSize(utxo), 0);\n\n const outputSize =\n outputs?.reduce((total, output) => total + getOutputSize(output), 0) || OutputSizes[newTxType];\n\n return TX_OVERHEAD + inputSize + outputSize;\n};\n\nexport const getInputSize = (input: UTXOInputWithScriptType | UTXOType) => {\n if (\"type\" in input) {\n return InputSizes[input.type];\n }\n if (\"address\" in input && input.address) {\n return InputSizes[getScriptTypeForAddress(input.address as string)];\n }\n return TX_INPUT_BASE + TX_INPUT_PUBKEYHASH;\n};\n\nexport const getOutputSize = (output: TargetOutput, scriptType?: UTXOScriptType) => {\n if (output?.script) {\n return OP_RETURN_OVERHEAD + output.script.length + (output.script.length >= 74 ? 2 : 1);\n }\n if (scriptType) {\n return OutputSizes[scriptType];\n }\n return OutputSizes[UTXOScriptType.P2PKH];\n};\n",
|
|
11
|
-
"import {\n AssetValue,\n Chain,\n type ChainSigner,\n DerivationPath,\n type DerivationPathArray,\n FeeOption,\n NetworkDerivationPath,\n SwapKitError,\n SwapKitNumber,\n type UTXOChain,\n derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { Psbt, address as btcLibAddress, initEccLib, payments } from \"bitcoinjs-lib\";\nimport type { ECPairInterface } from \"ecpair\";\nimport ECPairFactory from \"ecpair\";\nimport type { UtxoToolboxParams } from \".\";\nimport { getBalance } from \"../../utils\";\nimport {\n UTXOScriptType,\n accumulative,\n calculateTxSize,\n compileMemo,\n getDustThreshold,\n getInputSize,\n getUtxoApi,\n getUtxoNetwork,\n} from \"../helpers\";\nimport type {\n BchECPair,\n TargetOutput,\n UTXOBuildTxParams,\n UTXOTransferParams,\n UTXOType,\n} from \"../types\";\nimport { bchValidateAddress } from \"./bitcoinCash\";\n\nimport secp256k1 from \"@bitcoinerlab/secp256k1\";\n// @ts-ignore\nimport { ECPair, HDNode } from \"@psf/bitcoincashjs-lib\";\nimport { HDKey } from \"@scure/bip32\";\nimport { mnemonicToSeedSync } from \"@scure/bip39\";\n\nexport const nonSegwitChains = [Chain.Dash, Chain.Dogecoin];\n\nfunction addInputsAndOutputs({\n inputs,\n outputs,\n chain,\n psbt,\n sender,\n compiledMemo,\n}: {\n inputs: UTXOType[];\n outputs: TargetOutput[];\n chain: UTXOChain;\n psbt: Psbt;\n sender: string;\n compiledMemo: Buffer<ArrayBufferLike> | null;\n}) {\n for (const utxo of inputs) {\n const witnessInfo = !!utxo.witnessUtxo &&\n !nonSegwitChains.includes(chain) && { witnessUtxo: utxo.witnessUtxo };\n\n const nonWitnessInfo = nonSegwitChains.includes(chain) && {\n nonWitnessUtxo: utxo.txHex ? Buffer.from(utxo.txHex, \"hex\") : undefined,\n };\n\n psbt.addInput({ hash: utxo.hash, index: utxo.index, ...witnessInfo, ...nonWitnessInfo });\n }\n\n for (const output of outputs) {\n const address = \"address\" in output && output.address ? output.address : sender;\n const hasOutputScript = output.script;\n\n if (hasOutputScript && !compiledMemo) {\n continue;\n }\n\n const mappedOutput = hasOutputScript\n ? {\n script: compiledMemo as Buffer<ArrayBufferLike>,\n value: 0,\n }\n : {\n address,\n value: output.value,\n };\n\n initEccLib(secp256k1);\n psbt.addOutput(mappedOutput);\n }\n\n return { psbt, inputs };\n}\n\nasync function createTransaction({\n assetValue,\n recipient,\n memo,\n feeRate,\n sender,\n fetchTxHex = false,\n}: UTXOBuildTxParams): Promise<{\n psbt: Psbt;\n utxos: UTXOType[];\n inputs: UTXOType[];\n}> {\n const chain = assetValue.chain as UTXOChain;\n const compiledMemo = memo ? await compileMemo(memo) : null;\n\n const inputsAndOutputs = await getInputsAndTargetOutputs({\n assetValue,\n recipient,\n memo,\n sender,\n fetchTxHex,\n });\n\n const { inputs, outputs } = accumulative({ ...inputsAndOutputs, feeRate, chain });\n\n // .inputs and .outputs will be undefined if no solution was found\n if (!(inputs && outputs))\n throw new SwapKitError(\"toolbox_utxo_insufficient_balance\", { sender, assetValue });\n const getNetwork = await getUtxoNetwork();\n const psbt = new Psbt({ network: getNetwork(chain) });\n\n if (chain === Chain.Dogecoin) psbt.setMaximumFeeRate(650000000);\n\n const { psbt: mappedPsbt, inputs: mappedInputs } = await addInputsAndOutputs({\n inputs,\n outputs,\n chain,\n psbt,\n sender,\n compiledMemo,\n });\n\n return {\n psbt: mappedPsbt,\n utxos: inputsAndOutputs.inputs,\n inputs: mappedInputs,\n };\n}\n\nexport async function getUTXOAddressValidator() {\n const getNetwork = await getUtxoNetwork();\n\n return function validateAddress({ address, chain }: { address: string; chain: UTXOChain }) {\n if (chain === Chain.BitcoinCash) {\n return bchValidateAddress(address);\n }\n\n try {\n initEccLib(secp256k1);\n btcLibAddress.toOutputScript(address, getNetwork(chain));\n return true;\n } catch (_error) {\n return false;\n }\n };\n}\n\nasync function createSignerWithKeys({\n chain,\n phrase,\n derivationPath,\n}: { chain: UTXOChain; phrase: string; derivationPath: string }) {\n const keyPair = (await getCreateKeysForPath(chain as Chain.Bitcoin))({ phrase, derivationPath });\n\n async function signTransaction(psbt: Psbt) {\n await psbt.signAllInputs(keyPair);\n return psbt;\n }\n\n async function getAddress() {\n const addressGetter = await addressFromKeysGetter(chain);\n return addressGetter(keyPair);\n }\n\n return {\n getAddress,\n signTransaction,\n };\n}\n\nexport async function createUTXOToolbox<T extends UTXOChain>({\n chain,\n ...toolboxParams\n}: (\n | UtxoToolboxParams[T]\n | {\n phrase?: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n }\n) & { chain: T }) {\n const phrase = \"phrase\" in toolboxParams ? toolboxParams.phrase : undefined;\n\n const index = \"index\" in toolboxParams ? toolboxParams.index || 0 : 0;\n\n const derivationPath = derivationPathToString(\n \"derivationPath\" in toolboxParams && toolboxParams.derivationPath\n ? toolboxParams.derivationPath\n : updateDerivationPath(NetworkDerivationPath[chain], { index }),\n );\n\n const signer = phrase\n ? await createSignerWithKeys({ chain, phrase, derivationPath })\n : \"signer\" in toolboxParams\n ? toolboxParams.signer\n : undefined;\n\n function getAddress() {\n return Promise.resolve(signer?.getAddress());\n }\n\n // const { signer } = params || {};\n const getAddressFromKeys = await addressFromKeysGetter(chain);\n const validateAddress = await getUTXOAddressValidator();\n const createKeysForPath = await getCreateKeysForPath(chain);\n\n return {\n accumulative,\n calculateTxSize,\n getAddressFromKeys,\n getAddress,\n validateAddress: (address: string) => validateAddress({ address, chain }),\n broadcastTx: (txHash: string) => getUtxoApi(chain).broadcastTx(txHash),\n createTransaction,\n createKeysForPath,\n getFeeRates: () => getFeeRates(chain),\n getInputsOutputsFee,\n transfer: transfer(signer as UtxoToolboxParams[\"BTC\"][\"signer\"]),\n getPrivateKeyFromMnemonic: (params: { phrase: string; derivationPath: string }) => {\n const keys = createKeysForPath(params);\n return keys.toWIF();\n },\n\n getBalance: getBalance(chain),\n estimateTransactionFee: estimateTransactionFee(chain),\n estimateMaxSendableAmount: estimateMaxSendableAmount(chain),\n };\n}\n\nasync function getInputsOutputsFee({\n assetValue,\n feeOptionKey = FeeOption.Fast,\n feeRate,\n memo,\n sender,\n recipient,\n}: Omit<UTXOBuildTxParams, \"feeRate\"> & {\n feeOptionKey?: FeeOption;\n feeRate?: number;\n}) {\n const chain = assetValue.chain as UTXOChain;\n\n const inputsAndOutputs = await getInputsAndTargetOutputs({\n assetValue,\n sender,\n memo,\n recipient,\n });\n\n const feeRateWhole = feeRate ? Math.floor(feeRate) : (await getFeeRates(chain))[feeOptionKey];\n\n return accumulative({ ...inputsAndOutputs, feeRate: feeRateWhole, chain });\n}\n\nfunction estimateMaxSendableAmount(chain: UTXOChain) {\n return async function estimateMaxSendableAmount({\n from,\n memo,\n feeRate,\n feeOptionKey = FeeOption.Fast,\n recipients = 1,\n }: {\n from: string;\n memo?: string;\n feeRate?: number;\n feeOptionKey?: FeeOption;\n recipients?: number | TargetOutput[];\n }) {\n const addressData = await getUtxoApi(chain).getAddressData(from);\n const feeRateWhole = feeRate ? Math.ceil(feeRate) : (await getFeeRates(chain))[feeOptionKey];\n\n const inputs = addressData?.utxo\n .map((utxo) => ({\n ...utxo,\n // type: utxo.witnessUtxo ? UTXOScriptType.P2WPKH : UTXOScriptType.P2PKH,\n type: UTXOScriptType.P2PKH,\n hash: \"\",\n }))\n .filter(\n (utxo) => utxo.value > Math.max(getDustThreshold(chain), getInputSize(utxo) * feeRateWhole),\n );\n\n if (!inputs?.length) return AssetValue.from({ chain });\n\n const balance = AssetValue.from({\n chain,\n value: inputs.reduce((sum, utxo) => sum + utxo.value, 0),\n });\n\n const outputs =\n typeof recipients === \"number\"\n ? (Array.from({ length: recipients }, () => ({\n address: from,\n value: 0,\n })) as TargetOutput[])\n : recipients;\n\n if (memo) {\n const script = await compileMemo(memo);\n outputs.push({ address: from, script, value: 0 });\n }\n\n const txSize = calculateTxSize({ inputs, outputs, feeRate: feeRateWhole });\n\n const fee = txSize * feeRateWhole;\n\n return balance.sub(fee);\n };\n}\n\nfunction estimateTransactionFee(chain: UTXOChain) {\n return async (params: {\n assetValue: AssetValue;\n recipient: string;\n sender: string;\n memo?: string;\n feeOptionKey?: FeeOption;\n feeRate?: number;\n fetchTxHex?: boolean;\n }) => {\n const inputFees = await getInputsOutputsFee(params);\n\n return AssetValue.from({\n chain,\n value: SwapKitNumber.fromBigInt(BigInt(inputFees.fee), 8).getValue(\"string\"),\n });\n };\n}\n\ntype CreateKeysForPathReturnType = {\n [Chain.BitcoinCash]: BchECPair;\n [Chain.Bitcoin]: ECPairInterface;\n [Chain.Dash]: ECPairInterface;\n [Chain.Dogecoin]: ECPairInterface;\n [Chain.Litecoin]: ECPairInterface;\n};\n\nexport async function getCreateKeysForPath<T extends keyof CreateKeysForPathReturnType>(\n chain: T,\n): Promise<\n (params: {\n wif?: string;\n phrase?: string;\n derivationPath?: string;\n }) => CreateKeysForPathReturnType[T]\n> {\n const getNetwork = await getUtxoNetwork();\n\n switch (chain) {\n case Chain.BitcoinCash: {\n return function createKeysForPath({\n phrase,\n derivationPath = `${DerivationPath.BCH}/0`,\n wif,\n }: { wif?: string; phrase?: string; derivationPath?: string }) {\n const network = getNetwork(chain);\n\n if (wif) {\n return ECPair.fromWIF(wif, network) as BchECPair;\n }\n if (!phrase)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", { error: \"No phrase provided\" });\n\n const masterHDNode = HDNode.fromSeedBuffer(\n Buffer.from(mnemonicToSeedSync(phrase)),\n network,\n );\n const keyPair = masterHDNode.derivePath(derivationPath).keyPair;\n\n return keyPair as BchECPair;\n } as (params: {\n wif?: string;\n phrase?: string;\n derivationPath?: string;\n }) => CreateKeysForPathReturnType[T];\n }\n case Chain.Bitcoin:\n case Chain.Dogecoin:\n case Chain.Litecoin:\n case Chain.Dash: {\n return function createKeysForPath({\n phrase,\n wif,\n derivationPath,\n }: { phrase?: string; wif?: string; derivationPath: string }) {\n if (!(wif || phrase))\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Either phrase or wif must be provided\",\n });\n\n const factory = ECPairFactory(secp256k1);\n const network = getNetwork(chain);\n\n if (wif) return factory.fromWIF(wif, network);\n\n const seed = mnemonicToSeedSync(phrase as string);\n const master = HDKey.fromMasterSeed(seed, network).derive(derivationPath);\n if (!master.privateKey)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Could not get private key from phrase\",\n });\n\n return factory.fromPrivateKey(Buffer.from(master.privateKey), { network });\n } as (params: {\n wif?: string;\n phrase?: string;\n derivationPath?: string;\n }) => CreateKeysForPathReturnType[T];\n }\n default:\n throw new SwapKitError(\"toolbox_utxo_not_supported\", { chain });\n }\n}\n\nexport async function addressFromKeysGetter(chain: UTXOChain) {\n const getNetwork = await getUtxoNetwork();\n\n return function getAddressFromKeys(keys: ECPairInterface | BchECPair) {\n if (!keys)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", { error: \"Keys must be provided\" });\n\n const method = nonSegwitChains.includes(chain) ? payments.p2pkh : payments.p2wpkh;\n const { address } = method({ pubkey: keys.publicKey as Buffer, network: getNetwork(chain) });\n if (!address)\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { error: \"Address not defined\" });\n\n return address;\n };\n}\n\nfunction transfer(signer?: ChainSigner<Psbt, Psbt>) {\n return async function transfer({\n memo,\n recipient,\n feeOptionKey,\n feeRate,\n assetValue,\n }: UTXOTransferParams) {\n const from = await signer?.getAddress();\n\n const chain = assetValue.chain as UTXOChain;\n\n if (!(signer && from)) throw new SwapKitError(\"toolbox_utxo_no_signer\");\n if (!recipient)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Recipient address must be provided\",\n });\n const txFeeRate = feeRate || (await getFeeRates(chain))[feeOptionKey || FeeOption.Fast];\n\n const { psbt } = await createTransaction({\n recipient,\n feeRate: txFeeRate,\n sender: from,\n assetValue,\n memo,\n });\n const signedPsbt = await signer.signTransaction(psbt);\n signedPsbt.finalizeAllInputs(); // Finalise inputs\n // TX extracted and formatted to hex\n return getUtxoApi(chain).broadcastTx(signedPsbt.extractTransaction().toHex());\n };\n}\n\nasync function getFeeRates(chain: UTXOChain) {\n const suggestedFeeRate = await getUtxoApi(chain).getSuggestedTxFee();\n\n return {\n [FeeOption.Average]: suggestedFeeRate,\n [FeeOption.Fast]: suggestedFeeRate * 1.5,\n [FeeOption.Fastest]: suggestedFeeRate * 2.0,\n };\n}\n\nasync function getInputsAndTargetOutputs({\n assetValue,\n recipient,\n memo,\n sender,\n fetchTxHex: fetchTxOverwrite = false,\n}: Omit<UTXOBuildTxParams, \"feeRate\">) {\n const chain = assetValue.chain as UTXOChain;\n\n const fetchTxHex = fetchTxOverwrite || nonSegwitChains.includes(chain);\n\n const inputs = await getUtxoApi(chain).scanUTXOs({ address: sender, fetchTxHex });\n\n //1. add output amount and recipient to targets\n //2. add output memo to targets (optional)\n\n return {\n inputs,\n outputs: [\n { address: recipient, value: Number(assetValue.bigIntValue) },\n ...(memo ? [{ address: \"\", script: await compileMemo(memo), value: 0 }] : []),\n ],\n };\n}\n"
|
|
11
|
+
"import {\n AssetValue,\n Chain,\n type ChainSigner,\n DerivationPath,\n type DerivationPathArray,\n FeeOption,\n NetworkDerivationPath,\n SwapKitError,\n SwapKitNumber,\n type UTXOChain,\n applyFeeMultiplier,\n derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { Psbt, address as btcLibAddress, initEccLib, payments } from \"bitcoinjs-lib\";\nimport type { ECPairInterface } from \"ecpair\";\nimport ECPairFactory from \"ecpair\";\nimport type { UtxoToolboxParams } from \".\";\nimport { getBalance } from \"../../utils\";\nimport {\n UTXOScriptType,\n accumulative,\n calculateTxSize,\n compileMemo,\n getDustThreshold,\n getInputSize,\n getUtxoApi,\n getUtxoNetwork,\n} from \"../helpers\";\nimport type {\n BchECPair,\n TargetOutput,\n UTXOBuildTxParams,\n UTXOTransferParams,\n UTXOType,\n} from \"../types\";\nimport { bchValidateAddress } from \"./bitcoinCash\";\n\nimport secp256k1 from \"@bitcoinerlab/secp256k1\";\n// @ts-ignore\nimport { ECPair, HDNode } from \"@psf/bitcoincashjs-lib\";\nimport { HDKey } from \"@scure/bip32\";\nimport { mnemonicToSeedSync } from \"@scure/bip39\";\n\nexport const nonSegwitChains = [Chain.Dash, Chain.Dogecoin];\n\nfunction addInputsAndOutputs({\n inputs,\n outputs,\n chain,\n psbt,\n sender,\n compiledMemo,\n}: {\n inputs: UTXOType[];\n outputs: TargetOutput[];\n chain: UTXOChain;\n psbt: Psbt;\n sender: string;\n compiledMemo: Buffer<ArrayBufferLike> | null;\n}) {\n for (const utxo of inputs) {\n const witnessInfo = !!utxo.witnessUtxo &&\n !nonSegwitChains.includes(chain) && { witnessUtxo: utxo.witnessUtxo };\n\n const nonWitnessInfo = nonSegwitChains.includes(chain) && {\n nonWitnessUtxo: utxo.txHex ? Buffer.from(utxo.txHex, \"hex\") : undefined,\n };\n\n psbt.addInput({ hash: utxo.hash, index: utxo.index, ...witnessInfo, ...nonWitnessInfo });\n }\n\n for (const output of outputs) {\n const address = \"address\" in output && output.address ? output.address : sender;\n const hasOutputScript = output.script;\n\n if (hasOutputScript && !compiledMemo) {\n continue;\n }\n\n const mappedOutput = hasOutputScript\n ? {\n script: compiledMemo as Buffer<ArrayBufferLike>,\n value: 0,\n }\n : {\n address,\n value: output.value,\n };\n\n initEccLib(secp256k1);\n psbt.addOutput(mappedOutput);\n }\n\n return { psbt, inputs };\n}\n\nasync function createTransaction({\n assetValue,\n recipient,\n memo,\n feeRate,\n sender,\n fetchTxHex = false,\n}: UTXOBuildTxParams): Promise<{\n psbt: Psbt;\n utxos: UTXOType[];\n inputs: UTXOType[];\n}> {\n const chain = assetValue.chain as UTXOChain;\n const compiledMemo = memo ? await compileMemo(memo) : null;\n\n const inputsAndOutputs = await getInputsAndTargetOutputs({\n assetValue,\n recipient,\n memo,\n sender,\n fetchTxHex,\n });\n\n const { inputs, outputs } = accumulative({ ...inputsAndOutputs, feeRate, chain });\n\n // .inputs and .outputs will be undefined if no solution was found\n if (!(inputs && outputs))\n throw new SwapKitError(\"toolbox_utxo_insufficient_balance\", { sender, assetValue });\n const getNetwork = await getUtxoNetwork();\n const psbt = new Psbt({ network: getNetwork(chain) });\n\n if (chain === Chain.Dogecoin) psbt.setMaximumFeeRate(650000000);\n\n const { psbt: mappedPsbt, inputs: mappedInputs } = await addInputsAndOutputs({\n inputs,\n outputs,\n chain,\n psbt,\n sender,\n compiledMemo,\n });\n\n return {\n psbt: mappedPsbt,\n utxos: inputsAndOutputs.inputs,\n inputs: mappedInputs,\n };\n}\n\nexport async function getUTXOAddressValidator() {\n const getNetwork = await getUtxoNetwork();\n\n return function validateAddress({ address, chain }: { address: string; chain: UTXOChain }) {\n if (chain === Chain.BitcoinCash) {\n return bchValidateAddress(address);\n }\n\n try {\n initEccLib(secp256k1);\n btcLibAddress.toOutputScript(address, getNetwork(chain));\n return true;\n } catch (_error) {\n return false;\n }\n };\n}\n\nasync function createSignerWithKeys({\n chain,\n phrase,\n derivationPath,\n}: { chain: UTXOChain; phrase: string; derivationPath: string }) {\n const keyPair = (await getCreateKeysForPath(chain as Chain.Bitcoin))({ phrase, derivationPath });\n\n async function signTransaction(psbt: Psbt) {\n await psbt.signAllInputs(keyPair);\n return psbt;\n }\n\n async function getAddress() {\n const addressGetter = await addressFromKeysGetter(chain);\n return addressGetter(keyPair);\n }\n\n return {\n getAddress,\n signTransaction,\n };\n}\n\nexport async function createUTXOToolbox<T extends UTXOChain>({\n chain,\n ...toolboxParams\n}: (\n | UtxoToolboxParams[T]\n | {\n phrase?: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n }\n) & { chain: T }) {\n const phrase = \"phrase\" in toolboxParams ? toolboxParams.phrase : undefined;\n\n const index = \"index\" in toolboxParams ? toolboxParams.index || 0 : 0;\n\n const derivationPath = derivationPathToString(\n \"derivationPath\" in toolboxParams && toolboxParams.derivationPath\n ? toolboxParams.derivationPath\n : updateDerivationPath(NetworkDerivationPath[chain], { index }),\n );\n\n const signer = phrase\n ? await createSignerWithKeys({ chain, phrase, derivationPath })\n : \"signer\" in toolboxParams\n ? toolboxParams.signer\n : undefined;\n\n function getAddress() {\n return Promise.resolve(signer?.getAddress());\n }\n\n // const { signer } = params || {};\n const getAddressFromKeys = await addressFromKeysGetter(chain);\n const validateAddress = await getUTXOAddressValidator();\n const createKeysForPath = await getCreateKeysForPath(chain);\n\n return {\n accumulative,\n calculateTxSize,\n getAddressFromKeys,\n getAddress,\n validateAddress: (address: string) => validateAddress({ address, chain }),\n broadcastTx: (txHash: string) => getUtxoApi(chain).broadcastTx(txHash),\n createTransaction,\n createKeysForPath,\n getFeeRates: () => getFeeRates(chain),\n getInputsOutputsFee,\n transfer: transfer(signer as UtxoToolboxParams[\"BTC\"][\"signer\"]),\n getPrivateKeyFromMnemonic: (params: { phrase: string; derivationPath: string }) => {\n const keys = createKeysForPath(params);\n return keys.toWIF();\n },\n\n getBalance: getBalance(chain),\n estimateTransactionFee: estimateTransactionFee(chain),\n estimateMaxSendableAmount: estimateMaxSendableAmount(chain),\n };\n}\n\nasync function getInputsOutputsFee({\n assetValue,\n feeOptionKey = FeeOption.Fast,\n feeRate,\n memo,\n sender,\n recipient,\n}: Omit<UTXOBuildTxParams, \"feeRate\"> & {\n feeOptionKey?: FeeOption;\n feeRate?: number;\n}) {\n const chain = assetValue.chain as UTXOChain;\n\n const inputsAndOutputs = await getInputsAndTargetOutputs({\n assetValue,\n sender,\n memo,\n recipient,\n });\n\n const feeRateWhole = feeRate ? Math.floor(feeRate) : (await getFeeRates(chain))[feeOptionKey];\n\n return accumulative({ ...inputsAndOutputs, feeRate: feeRateWhole, chain });\n}\n\nfunction estimateMaxSendableAmount(chain: UTXOChain) {\n return async function estimateMaxSendableAmount({\n from,\n memo,\n feeRate,\n feeOptionKey = FeeOption.Fast,\n recipients = 1,\n }: {\n from: string;\n memo?: string;\n feeRate?: number;\n feeOptionKey?: FeeOption;\n recipients?: number | TargetOutput[];\n }) {\n const addressData = await getUtxoApi(chain).getAddressData(from);\n const feeRateWhole = feeRate ? Math.ceil(feeRate) : (await getFeeRates(chain))[feeOptionKey];\n\n const inputs = addressData?.utxo\n .map((utxo) => ({\n ...utxo,\n // type: utxo.witnessUtxo ? UTXOScriptType.P2WPKH : UTXOScriptType.P2PKH,\n type: UTXOScriptType.P2PKH,\n hash: \"\",\n }))\n .filter(\n (utxo) => utxo.value > Math.max(getDustThreshold(chain), getInputSize(utxo) * feeRateWhole),\n );\n\n if (!inputs?.length) return AssetValue.from({ chain });\n\n const balance = AssetValue.from({\n chain,\n value: inputs.reduce((sum, utxo) => sum + utxo.value, 0),\n });\n\n const outputs =\n typeof recipients === \"number\"\n ? (Array.from({ length: recipients }, () => ({\n address: from,\n value: 0,\n })) as TargetOutput[])\n : recipients;\n\n if (memo) {\n const script = await compileMemo(memo);\n outputs.push({ address: from, script, value: 0 });\n }\n\n const txSize = calculateTxSize({ inputs, outputs, feeRate: feeRateWhole });\n\n const fee = txSize * feeRateWhole;\n\n return balance.sub(fee);\n };\n}\n\nfunction estimateTransactionFee(chain: UTXOChain) {\n return async (params: {\n assetValue: AssetValue;\n recipient: string;\n sender: string;\n memo?: string;\n feeOptionKey?: FeeOption;\n feeRate?: number;\n fetchTxHex?: boolean;\n }) => {\n const inputFees = await getInputsOutputsFee(params);\n\n return AssetValue.from({\n chain,\n value: SwapKitNumber.fromBigInt(BigInt(inputFees.fee), 8).getValue(\"string\"),\n });\n };\n}\n\ntype CreateKeysForPathReturnType = {\n [Chain.BitcoinCash]: BchECPair;\n [Chain.Bitcoin]: ECPairInterface;\n [Chain.Dash]: ECPairInterface;\n [Chain.Dogecoin]: ECPairInterface;\n [Chain.Litecoin]: ECPairInterface;\n};\n\nexport async function getCreateKeysForPath<T extends keyof CreateKeysForPathReturnType>(\n chain: T,\n): Promise<\n (params: {\n wif?: string;\n phrase?: string;\n derivationPath?: string;\n }) => CreateKeysForPathReturnType[T]\n> {\n const getNetwork = await getUtxoNetwork();\n\n switch (chain) {\n case Chain.BitcoinCash: {\n return function createKeysForPath({\n phrase,\n derivationPath = `${DerivationPath.BCH}/0`,\n wif,\n }: { wif?: string; phrase?: string; derivationPath?: string }) {\n const network = getNetwork(chain);\n\n if (wif) {\n return ECPair.fromWIF(wif, network) as BchECPair;\n }\n if (!phrase)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", { error: \"No phrase provided\" });\n\n const masterHDNode = HDNode.fromSeedBuffer(\n Buffer.from(mnemonicToSeedSync(phrase)),\n network,\n );\n const keyPair = masterHDNode.derivePath(derivationPath).keyPair;\n\n return keyPair as BchECPair;\n } as (params: {\n wif?: string;\n phrase?: string;\n derivationPath?: string;\n }) => CreateKeysForPathReturnType[T];\n }\n case Chain.Bitcoin:\n case Chain.Dogecoin:\n case Chain.Litecoin:\n case Chain.Dash: {\n return function createKeysForPath({\n phrase,\n wif,\n derivationPath,\n }: { phrase?: string; wif?: string; derivationPath: string }) {\n if (!(wif || phrase))\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Either phrase or wif must be provided\",\n });\n\n const factory = ECPairFactory(secp256k1);\n const network = getNetwork(chain);\n\n if (wif) return factory.fromWIF(wif, network);\n\n const seed = mnemonicToSeedSync(phrase as string);\n const master = HDKey.fromMasterSeed(seed, network).derive(derivationPath);\n if (!master.privateKey)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Could not get private key from phrase\",\n });\n\n return factory.fromPrivateKey(Buffer.from(master.privateKey), { network });\n } as (params: {\n wif?: string;\n phrase?: string;\n derivationPath?: string;\n }) => CreateKeysForPathReturnType[T];\n }\n default:\n throw new SwapKitError(\"toolbox_utxo_not_supported\", { chain });\n }\n}\n\nexport async function addressFromKeysGetter(chain: UTXOChain) {\n const getNetwork = await getUtxoNetwork();\n\n return function getAddressFromKeys(keys: ECPairInterface | BchECPair) {\n if (!keys)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", { error: \"Keys must be provided\" });\n\n const method = nonSegwitChains.includes(chain) ? payments.p2pkh : payments.p2wpkh;\n const { address } = method({ pubkey: keys.publicKey as Buffer, network: getNetwork(chain) });\n if (!address)\n throw new SwapKitError(\"toolbox_utxo_invalid_address\", { error: \"Address not defined\" });\n\n return address;\n };\n}\n\nfunction transfer(signer?: ChainSigner<Psbt, Psbt>) {\n return async function transfer({\n memo,\n recipient,\n feeOptionKey,\n feeRate,\n assetValue,\n }: UTXOTransferParams) {\n const from = await signer?.getAddress();\n\n const chain = assetValue.chain as UTXOChain;\n\n if (!(signer && from)) throw new SwapKitError(\"toolbox_utxo_no_signer\");\n if (!recipient)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Recipient address must be provided\",\n });\n const txFeeRate = feeRate || (await getFeeRates(chain))[feeOptionKey || FeeOption.Fast];\n\n const { psbt } = await createTransaction({\n recipient,\n feeRate: txFeeRate,\n sender: from,\n assetValue,\n memo,\n });\n const signedPsbt = await signer.signTransaction(psbt);\n signedPsbt.finalizeAllInputs(); // Finalise inputs\n // TX extracted and formatted to hex\n return getUtxoApi(chain).broadcastTx(signedPsbt.extractTransaction().toHex());\n };\n}\n\nasync function getFeeRates(chain: UTXOChain) {\n const suggestedFeeRate = await getUtxoApi(chain).getSuggestedTxFee();\n\n return {\n [FeeOption.Average]: suggestedFeeRate,\n [FeeOption.Fast]: applyFeeMultiplier(suggestedFeeRate, FeeOption.Fast),\n [FeeOption.Fastest]: applyFeeMultiplier(suggestedFeeRate, FeeOption.Fastest),\n };\n}\n\nasync function getInputsAndTargetOutputs({\n assetValue,\n recipient,\n memo,\n sender,\n fetchTxHex: fetchTxOverwrite = false,\n}: Omit<UTXOBuildTxParams, \"feeRate\">) {\n const chain = assetValue.chain as UTXOChain;\n\n const fetchTxHex = fetchTxOverwrite || nonSegwitChains.includes(chain);\n\n const inputs = await getUtxoApi(chain).scanUTXOs({ address: sender, fetchTxHex });\n\n //1. add output amount and recipient to targets\n //2. add output memo to targets (optional)\n\n return {\n inputs,\n outputs: [\n { address: recipient, value: Number(assetValue.bigIntValue) },\n ...(memo ? [{ address: \"\", script: await compileMemo(memo), value: 0 }] : []),\n ],\n };\n}\n"
|
|
12
12
|
],
|
|
13
|
-
"mappings": "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",
|
|
14
|
-
"debugId": "
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "3121718C7D34F25A64756E2164756E21",
|
|
15
15
|
"names": []
|
|
16
16
|
}
|
package/dist/src/utxo/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as WX,b as _X}from"../../chunk-vhc011em.js";import"../../chunk-38ztynv0.js";import{Chain as x,SwapKitError as yG}from"@swapkit/helpers";import{Transaction as BG,TransactionBuilder as UG,address as vG}from"@psf/bitcoincashjs-lib";import{Chain as MG,FeeOption as zG,NetworkDerivationPath as TG,SwapKitError as R,derivationPathToString as CG,updateDerivationPath as HG}from"@swapkit/helpers";import{Psbt as YG}from"bitcoinjs-lib";import{Chain as T,RequestClient as m,SKConfig as i,SwapKitError as P,warnOnce as qX}from"@swapkit/helpers";import{networks as VX}from"bitcoinjs-lib";import f from"coininfo";async function AX({chain:X,txHash:G}){let J=i.get("rpcUrls")[X],Q=JSON.stringify({jsonrpc:"2.0",method:"sendrawtransaction",params:[G],id:WX()}),$=await m.post(J,{headers:{"Content-Type":"application/json"},body:Q});if($.error)throw new P("toolbox_utxo_broadcast_failed",{error:$.error?.message});if($.result.includes('"code":-26'))throw new P("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return $.result}function a(X){return`https://api.blockchair.com/${KX(X)}`}function LX(X){switch(X){case T.Bitcoin:return 5;case T.Dogecoin:return 1e4;case T.Litecoin:return 1;default:return 2}}function KX(X){switch(X){case T.BitcoinCash:return"bitcoin-cash";case T.Litecoin:return"litecoin";case T.Dash:return"dash";case T.Dogecoin:return"dogecoin";case T.Polkadot:return"polkadot";default:return"bitcoin"}}async function RX(X){try{let{feePerKb:G}=await m.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=G/1000;return Math.max(J,LX(X))}catch(G){return LX(X)}}async function s(X,G){try{let J=await m.get(X);if(!J||J.context.code!==200)throw new P("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return J.data}catch(J){if(!G)throw J;let Q=await m.get(`${X}${G?`&key=${G}`:""}`);if(!Q||Q.context.code!==200)throw new P("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return Q.data}}async function DX({address:X,chain:G,apiKey:J}){if(!X)throw new P("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await s(`${a(G)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch(Q){return{utxo:[],address:{balance:0,transaction_count:0}}}}async function wX({address:X,chain:G,apiKey:J}){return(await DX({address:X,chain:G,apiKey:J}))?.address.balance||0}async function BX({chain:X,apiKey:G,txHash:J}){if(!J)throw new P("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await s(`${a(X)}/raw/transaction/${J}`,G))?.[J]?.raw_transaction||""}catch(Q){return console.error("Failed to fetch raw transaction:",Q),""}}async function fX({chain:X,address:G,apiKey:J,offset:Q=0,limit:$=100}){return(await s(`${a(X)}/outputs?q=is_spent(false),recipient(${G})&limit=${$}&offset=${Q}`,J)).filter(({is_spent:W})=>!W).map(({script_hex:W,block_id:L,transaction_hash:q,index:D,value:U,spending_signature_hex:B})=>({hash:q,index:D,value:U,txHex:B,script_hex:W,is_confirmed:L!==-1}))}async function UX({chain:X,address:G,apiKey:J,offset:Q=0,limit:$=100}){if(!G)throw new P("toolbox_utxo_invalid_params",{error:"Address is required"});try{let j=await fX({chain:X,address:G,apiKey:J,offset:Q,limit:$});if(j.length<=$)return j;let Z=await UX({chain:X,address:G,apiKey:J,offset:Q+$,limit:$});return[...j,...Z]}catch(j){return console.error("Failed to fetch unspent UTXOs:",j),[]}}async function EX({address:X,chain:G,apiKey:J,fetchTxHex:Q=!0}){let $=await UX({chain:G,address:X,apiKey:J}),j=[];for(let{hash:Z,index:W,script_hex:L,value:q}of $){let D;if(Q)D=await BX({txHash:Z,chain:G,apiKey:J});j.push({address:X,hash:Z,index:W,txHex:D,value:q,witnessUtxo:{value:q,script:Buffer.from(L,"hex")}})}return j}function SX(X){let G=i.get("apiKeys").blockchair||"";return qX(!G,"No Blockchair API key found. Functionality will be limited."),{broadcastTx:(J)=>AX({txHash:J,chain:X}),getRawTx:(J)=>BX({txHash:J,chain:X,apiKey:G}),getSuggestedTxFee:()=>RX(X),getBalance:(J)=>wX({address:J,chain:X,apiKey:G}),getAddressData:(J)=>DX({address:J,chain:X,apiKey:G}),scanUTXOs:(J)=>EX({...J,chain:X,apiKey:G})}}function VG(X){return X}function Y(X){let G=i.get("apis")[X];if(G)return qX(!0,"Using custom UTXO API. Be sure to implement all methods to avoid issues."),G;return SX(X)}function I(){return function X(G){switch(G){case T.Bitcoin:return VX.bitcoin;case T.BitcoinCash:return f.bitcoincash.main.toBitcoinJS();case T.Dash:return f.dash.main.toBitcoinJS();case T.Litecoin:return f.litecoin.main.toBitcoinJS();case T.Dogecoin:{let J={private:70615956,public:70617039},Q=f.dogecoin.test;return Q.versions.bip32=J,f.dogecoin.main.toBitcoinJS()}default:throw new P("toolbox_utxo_not_supported",{chain:G})}}}import{SwapKitError as b}from"@swapkit/helpers";import MX from"bs58check";import zX from"cashaddrjs";var TX;((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})(TX||={});var v={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}};function CX(X){try{return h(X),!0}catch(G){return!1}}function HX(X){return h(X)?.network}function E(X){let G=h(X);if(G?.format==="legacy")return X;return mX(G)}function l(X){let G=h(X);return lX(G)}function h(X){try{return gX(X)}catch(G){}try{return xX(X)}catch(G){}throw new b("toolbox_utxo_invalid_address",{address:X})}function gX(X){try{let G=MX.decode(X);if(G.length!==21)throw new b("toolbox_utxo_invalid_address",{address:X});let J=G[0],Q=Array.prototype.slice.call(G,1);switch(J){case v.legacy.mainnet.p2pkh:return{hash:Q,format:"legacy",network:"mainnet",type:"p2pkh"};case v.legacy.mainnet.p2sh:return{hash:Q,format:"legacy",network:"mainnet",type:"p2sh"};case v.legacy.testnet.p2pkh:return{hash:Q,format:"legacy",network:"testnet",type:"p2pkh"};case v.legacy.testnet.p2sh:return{hash:Q,format:"legacy",network:"testnet",type:"p2sh"};case v.bitpay.mainnet.p2pkh:return{hash:Q,format:"bitpay",network:"mainnet",type:"p2pkh"};case v.bitpay.mainnet.p2sh:return{hash:Q,format:"bitpay",network:"mainnet",type:"p2sh"};default:throw new b("toolbox_utxo_invalid_address",{address:X})}}catch(G){throw new b("toolbox_utxo_invalid_address",{address:X})}}function xX(X){if(X.indexOf(":")!==-1)try{return vX(X)}catch(G){}else{let G=["bitcoincash","bchtest","bchreg"];for(let J of G)try{return vX(`${J}:${X}`)}catch(Q){}}throw new b("toolbox_utxo_invalid_address",{address:X})}function vX(X){try{let{hash:G,prefix:J,type:Q}=zX.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call(G,0),network:J==="bitcoincash"?"mainnet":"testnet",type:Q==="P2PKH"?"p2pkh":"p2sh"}}catch(G){throw new b("toolbox_utxo_invalid_address",{address:X})}}function mX(X){let G=v.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=G,J.set(X.hash,1),MX.encode(J)}function lX(X){let G=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",Q=new Uint8Array(X.hash);return zX.encode(G,J,Q)}import{Chain as V,SwapKitError as hX}from"@swapkit/helpers";var t=(X)=>{switch(X){case V.Bitcoin:case V.BitcoinCash:return 550;case V.Dash:case V.Litecoin:return 5500;case V.Dogecoin:return 1e5;default:throw new hX("toolbox_utxo_not_supported",{chain:X})}},N=({inputs:X,outputs:G,feeRate:J=1,chain:Q=V.Bitcoin})=>{let $=Math.ceil(J),j=X[0]&&"address"in X[0]&&X[0].address?u(X[0].address):"P2PKH",Z=X.filter((B)=>y(B)*$<=B.value),W=e+G.reduce((B,z)=>B+c(z,j),0),L=G.reduce((B,z)=>B+z.value,0),q=W*$,D=0,U=[];for(let B of Z){let z=y(B),M=$*z;q+=M,D+=B.value,U.push(B);let H=q+L;if(D<H)continue;let k=D-H,ZX=$*c({address:"",value:0},j);if(k>ZX){let $X=ZX+q,jX=D-(L+$X);if(jX>Math.max(y({})*$,t(Q)))return{inputs:U,outputs:G.concat({value:jX,address:""}),fee:$X}}return{inputs:U,outputs:G,fee:q}}return{fee:$*S({inputs:X,outputs:G,feeRate:$})}};import{SwapKitError as cX}from"@swapkit/helpers";import{opcodes as uX,script as pX}from"bitcoinjs-lib";var lG=1000,e=10,oX=10,nX=41,rX=107;function O(X){let G=Buffer.from(X,"utf8");return pX.compile([uX.OP_RETURN,G])}var XX;((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(XX||={});var GX={["P2PKH"]:148,["P2WPKH"]:68},p={["P2PKH"]:34,["P2WPKH"]:31},u=(X)=>{if(X.startsWith("bc1")||X.startsWith("ltc1"))return"P2WPKH";if(X.startsWith("1")||X.startsWith("3")||X.startsWith("L")||X.startsWith("M")||X.startsWith("X")||X.startsWith("D")||X.startsWith("bitcoincash:q")||X.startsWith("q"))return"P2PKH";throw new cX("toolbox_utxo_invalid_address",{address:X})},S=({inputs:X,outputs:G,feeRate:J})=>{let Q=X[0]&&"address"in X[0]&&X[0].address?u(X[0].address):"P2PKH",$=X.filter((Z)=>Z.value>=GX["type"in Z?Z.type:"P2PKH"]*Math.ceil(J)).reduce((Z,W)=>Z+y(W),0),j=G?.reduce((Z,W)=>Z+c(W),0)||p[Q];return e+$+j},y=(X)=>{if("type"in X)return GX[X.type];if("address"in X&&X.address)return GX[u(X.address)];return nX+rX},c=(X,G)=>{if(X?.script)return oX+X.script.length+(X.script.length>=74?2:1);if(G)return p[G];return p.P2PKH};import{AssetValue as JX,Chain as _,DerivationPath as dX,FeeOption as A,NetworkDerivationPath as iX,SwapKitError as F,SwapKitNumber as aX,derivationPathToString as sX,updateDerivationPath as tX}from"@swapkit/helpers";import{Psbt as eX,address as XG,initEccLib as FX,payments as YX}from"bitcoinjs-lib";import GG from"ecpair";import QX from"@bitcoinerlab/secp256k1";import{ECPair as JG,HDNode as QG}from"@psf/bitcoincashjs-lib";import{HDKey as ZG}from"@scure/bip32";import{mnemonicToSeedSync as IX}from"@scure/bip39";var o=[_.Dash,_.Dogecoin];function $G({inputs:X,outputs:G,chain:J,psbt:Q,sender:$,compiledMemo:j}){for(let Z of X){let W=!!Z.witnessUtxo&&!o.includes(J)&&{witnessUtxo:Z.witnessUtxo},L=o.includes(J)&&{nonWitnessUtxo:Z.txHex?Buffer.from(Z.txHex,"hex"):void 0};Q.addInput({hash:Z.hash,index:Z.index,...W,...L})}for(let Z of G){let W="address"in Z&&Z.address?Z.address:$,L=Z.script;if(L&&!j)continue;let q=L?{script:j,value:0}:{address:W,value:Z.value};FX(QX),Q.addOutput(q)}return{psbt:Q,inputs:X}}async function PX({assetValue:X,recipient:G,memo:J,feeRate:Q,sender:$,fetchTxHex:j=!1}){let Z=X.chain,W=J?await O(J):null,L=await OX({assetValue:X,recipient:G,memo:J,sender:$,fetchTxHex:j}),{inputs:q,outputs:D}=N({...L,feeRate:Q,chain:Z});if(!(q&&D))throw new F("toolbox_utxo_insufficient_balance",{sender:$,assetValue:X});let U=await I(),B=new eX({network:U(Z)});if(Z===_.Dogecoin)B.setMaximumFeeRate(650000000);let{psbt:z,inputs:M}=await $G({inputs:q,outputs:D,chain:Z,psbt:B,sender:$,compiledMemo:W});return{psbt:z,utxos:L.inputs,inputs:M}}async function jG(){let X=await I();return function G({address:J,chain:Q}){if(Q===_.BitcoinCash)return K(J);try{return FX(QX),XG.toOutputScript(J,X(Q)),!0}catch($){return!1}}}async function LG({chain:X,phrase:G,derivationPath:J}){let Q=(await r(X))({phrase:G,derivationPath:J});async function $(Z){return await Z.signAllInputs(Q),Z}async function j(){return(await NX(X))(Q)}return{getAddress:j,signTransaction:$}}async function n({chain:X,...G}){let J="phrase"in G?G.phrase:void 0,Q="index"in G?G.index||0:0,$=sX("derivationPath"in G&&G.derivationPath?G.derivationPath:tX(iX[X],{index:Q})),j=J?await LG({chain:X,phrase:J,derivationPath:$}):("signer"in G)?G.signer:void 0;function Z(){return Promise.resolve(j?.getAddress())}let W=await NX(X),L=await jG(),q=await r(X);return{accumulative:N,calculateTxSize:S,getAddressFromKeys:W,getAddress:Z,validateAddress:(D)=>L({address:D,chain:X}),broadcastTx:(D)=>Y(X).broadcastTx(D),createTransaction:PX,createKeysForPath:q,getFeeRates:()=>d(X),getInputsOutputsFee:yX,transfer:DG(j),getPrivateKeyFromMnemonic:(D)=>{return q(D).toWIF()},getBalance:_X(X),estimateTransactionFee:qG(X),estimateMaxSendableAmount:WG(X)}}async function yX({assetValue:X,feeOptionKey:G=A.Fast,feeRate:J,memo:Q,sender:$,recipient:j}){let Z=X.chain,W=await OX({assetValue:X,sender:$,memo:Q,recipient:j}),L=J?Math.floor(J):(await d(Z))[G];return N({...W,feeRate:L,chain:Z})}function WG(X){return async function G({from:J,memo:Q,feeRate:$,feeOptionKey:j=A.Fast,recipients:Z=1}){let W=await Y(X).getAddressData(J),L=$?Math.ceil($):(await d(X))[j],q=W?.utxo.map((M)=>({...M,type:"P2PKH",hash:""})).filter((M)=>M.value>Math.max(t(X),y(M)*L));if(!q?.length)return JX.from({chain:X});let D=JX.from({chain:X,value:q.reduce((M,H)=>M+H.value,0)}),U=typeof Z==="number"?Array.from({length:Z},()=>({address:J,value:0})):Z;if(Q){let M=await O(Q);U.push({address:J,script:M,value:0})}let z=S({inputs:q,outputs:U,feeRate:L})*L;return D.sub(z)}}function qG(X){return async(G)=>{let J=await yX(G);return JX.from({chain:X,value:aX.fromBigInt(BigInt(J.fee),8).getValue("string")})}}async function r(X){let G=await I();switch(X){case _.BitcoinCash:return function J({phrase:Q,derivationPath:$=`${dX.BCH}/0`,wif:j}){let Z=G(X);if(j)return JG.fromWIF(j,Z);if(!Q)throw new F("toolbox_utxo_invalid_params",{error:"No phrase provided"});return QG.fromSeedBuffer(Buffer.from(IX(Q)),Z).derivePath($).keyPair};case _.Bitcoin:case _.Dogecoin:case _.Litecoin:case _.Dash:return function J({phrase:Q,wif:$,derivationPath:j}){if(!($||Q))throw new F("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let Z=GG(QX),W=G(X);if($)return Z.fromWIF($,W);let L=IX(Q),q=ZG.fromMasterSeed(L,W).derive(j);if(!q.privateKey)throw new F("toolbox_utxo_invalid_params",{error:"Could not get private key from phrase"});return Z.fromPrivateKey(Buffer.from(q.privateKey),{network:W})};default:throw new F("toolbox_utxo_not_supported",{chain:X})}}async function NX(X){let G=await I();return function J(Q){if(!Q)throw new F("toolbox_utxo_invalid_params",{error:"Keys must be provided"});let $=o.includes(X)?YX.p2pkh:YX.p2wpkh,{address:j}=$({pubkey:Q.publicKey,network:G(X)});if(!j)throw new F("toolbox_utxo_invalid_address",{error:"Address not defined"});return j}}function DG(X){return async function G({memo:J,recipient:Q,feeOptionKey:$,feeRate:j,assetValue:Z}){let W=await X?.getAddress(),L=Z.chain;if(!(X&&W))throw new F("toolbox_utxo_no_signer");if(!Q)throw new F("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let q=j||(await d(L))[$||A.Fast],{psbt:D}=await PX({recipient:Q,feeRate:q,sender:W,assetValue:Z,memo:J}),U=await X.signTransaction(D);return U.finalizeAllInputs(),Y(L).broadcastTx(U.extractTransaction().toHex())}}async function d(X){let G=await Y(X).getSuggestedTxFee();return{[A.Average]:G,[A.Fast]:G*1.5,[A.Fastest]:G*2}}async function OX({assetValue:X,recipient:G,memo:J,sender:Q,fetchTxHex:$=!1}){let j=X.chain,Z=$||o.includes(j);return{inputs:await Y(j).scanUTXOs({address:Q,fetchTxHex:Z}),outputs:[{address:G,value:Number(X.bigIntValue)},...J?[{address:"",script:await O(J),value:0}]:[]]}}var C=MG.BitcoinCash;function g(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function K(X){let G=g(X);return CX(G)&&HX(G)==="mainnet"}function w(X){return g(l(X))}async function IG(X){async function G({builder:Q,utxos:$}){return $.forEach((j,Z)=>{Q.sign(Z,X,void 0,65,j.witnessUtxo?.value)}),Q.build()}return{getAddress:()=>{let Q=X.getAddress(0);return Promise.resolve(w(Q))},signTransaction:G}}async function kX(X){let G="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,Q=CG("derivationPath"in X&&X.derivationPath?X.derivationPath:HG(TG[C],{index:J})),$=(await r(C))({phrase:G,derivationPath:Q}),j=$?await IG($):("signer"in X)?X.signer:void 0;function Z(){return Promise.resolve(j?.getAddress())}let{getBalance:W,getFeeRates:L,broadcastTx:q,...D}=await n({chain:C});function U(B,z=!0){return W(g(l(B)))}return{...D,getAddress:Z,broadcastTx:q,createTransaction:bX,buildTx:FG,getAddressFromKeys:PG,getBalance:U,getFeeRates:L,stripPrefix:g,stripToCashAddress:w,validateAddress:K,transfer:_G({getFeeRates:L,broadcastTx:q,signer:j})}}async function bX({assetValue:X,recipient:G,memo:J,feeRate:Q,sender:$}){if(!K(G))throw new R("toolbox_utxo_invalid_address",{address:G});let j=await Y(C).scanUTXOs({address:w($),fetchTxHex:!0}),Z=J?await O(J):null,W=[];W.push({address:G,value:X.getBaseValue("number")});let{inputs:L,outputs:q}=N({inputs:j,outputs:W,feeRate:Q,chain:C});if(!(L&&q))throw new R("toolbox_utxo_insufficient_balance",{sender:$,assetValue:X});let D=await I(),U=new UG(D(C));await Promise.all(L.map(async(B)=>{let z=await Y(C).getRawTx(B.hash);U.addInput(BG.fromBuffer(Buffer.from(z,"hex")),B.index)}));for(let B of q){let z="address"in B&&B.address?B.address:E($),M=await I(),H=vG.toOutputScript(E(z),M(C));U.addOutput(H,B.value)}if(Z)U.addOutput(Z,0);return{builder:U,utxos:L}}function _G({broadcastTx:X,getFeeRates:G,signer:J}){return async function Q({recipient:$,assetValue:j,feeOptionKey:Z=zG.Fast,...W}){let L=await J?.getAddress();if(!(J&&L))throw new R("toolbox_utxo_no_signer");if(!$)throw new R("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let q=W.feeRate||(await G())[Z],{builder:D,utxos:U}=await bX({...W,assetValue:j,feeRate:q,recipient:$,sender:L}),z=(await J.signTransaction({builder:D,utxos:U})).toHex();return X(z)}}async function FG({assetValue:X,recipient:G,memo:J,feeRate:Q,sender:$}){let j=l(G);if(!K(j))throw new R("toolbox_utxo_invalid_address",{address:j});let Z=await Y(C).scanUTXOs({address:w($),fetchTxHex:!0}),W=Number(Q.toFixed(0)),L=J?await O(J):null,q=[];if(q.push({address:E(G),value:X.getBaseValue("number")}),L)q.push({script:L,value:0});let{inputs:D,outputs:U}=N({inputs:Z,outputs:q,feeRate:W,chain:C});if(!(D&&U))throw new R("toolbox_utxo_insufficient_balance",{sender:$,assetValue:X});let B=await I(),z=new YG({network:B(C)});for(let{hash:M,index:H,witnessUtxo:k}of D)z.addInput({hash:M,index:H,witnessUtxo:k});for(let M of U){let H="address"in M&&M.address?M.address:E($),k=M.script?L?{script:L,value:0}:void 0:{address:H,value:M.value};if(k)z.addOutput(k)}return{psbt:z,utxos:Z,inputs:D}}function PG(X){let G=X.getAddress(0);return w(G)}async function vJ(X,G){switch(X){case x.BitcoinCash:return await kX(G);case x.Bitcoin:case x.Dogecoin:case x.Litecoin:case x.Dash:return await n({chain:X,...G});default:throw new yG("toolbox_utxo_not_supported",{chain:X})}}export{E as toLegacyAddress,l as toCashAddress,w as stripToCashAddress,g as stripPrefix,o as nonSegwitChains,CX as isValidAddress,vJ as getUtxoToolbox,I as getUtxoNetwork,Y as getUtxoApi,jG as getUTXOAddressValidator,u as getScriptTypeForAddress,c as getOutputSize,y as getInputSize,t as getDustThreshold,r as getCreateKeysForPath,HX as detectAddressNetwork,n as createUTXOToolbox,VG as createCustomUtxoApi,kX as createBCHToolbox,O as compileMemo,S as calculateTxSize,K as bchValidateAddress,NX as addressFromKeysGetter,N as accumulative,TX as UtxoNetwork,XX as UTXOScriptType,e as TX_OVERHEAD,p as OutputSizes,oX as OP_RETURN_OVERHEAD,lG as MIN_TX_FEE,GX as InputSizes};
|
|
1
|
+
import{b as WX,c as PX}from"../../chunk-12xtvbsp.js";import"../../chunk-s47y8512.js";import{Chain as x,SwapKitError as NG}from"@swapkit/helpers";import{Transaction as UG,TransactionBuilder as vG,address as MG}from"@psf/bitcoincashjs-lib";import{Chain as zG,FeeOption as TG,NetworkDerivationPath as CG,SwapKitError as R,derivationPathToString as HG,updateDerivationPath as YG}from"@swapkit/helpers";import{Psbt as IG}from"bitcoinjs-lib";import{Chain as T,RequestClient as m,SKConfig as i,SwapKitError as F,warnOnce as qX}from"@swapkit/helpers";import{networks as AX}from"bitcoinjs-lib";import f from"coininfo";async function KX({chain:X,txHash:G}){let J=i.get("rpcUrls")[X],Q=JSON.stringify({jsonrpc:"2.0",method:"sendrawtransaction",params:[G],id:WX()}),$=await m.post(J,{headers:{"Content-Type":"application/json"},body:Q});if($.error)throw new F("toolbox_utxo_broadcast_failed",{error:$.error?.message});if($.result.includes('"code":-26'))throw new F("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return $.result}function a(X){return`https://api.blockchair.com/${RX(X)}`}function LX(X){switch(X){case T.Bitcoin:return 5;case T.Dogecoin:return 1e4;case T.Litecoin:return 1;default:return 2}}function RX(X){switch(X){case T.BitcoinCash:return"bitcoin-cash";case T.Litecoin:return"litecoin";case T.Dash:return"dash";case T.Dogecoin:return"dogecoin";case T.Polkadot:return"polkadot";default:return"bitcoin"}}async function wX(X){try{let{feePerKb:G}=await m.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=G/1000;return Math.max(J,LX(X))}catch(G){return LX(X)}}async function s(X,G){try{let J=await m.get(X);if(!J||J.context.code!==200)throw new F("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return J.data}catch(J){if(!G)throw J;let Q=await m.get(`${X}${G?`&key=${G}`:""}`);if(!Q||Q.context.code!==200)throw new F("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return Q.data}}async function DX({address:X,chain:G,apiKey:J}){if(!X)throw new F("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await s(`${a(G)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch(Q){return{utxo:[],address:{balance:0,transaction_count:0}}}}async function fX({address:X,chain:G,apiKey:J}){return(await DX({address:X,chain:G,apiKey:J}))?.address.balance||0}async function BX({chain:X,apiKey:G,txHash:J}){if(!J)throw new F("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await s(`${a(X)}/raw/transaction/${J}`,G))?.[J]?.raw_transaction||""}catch(Q){return console.error("Failed to fetch raw transaction:",Q),""}}async function EX({chain:X,address:G,apiKey:J,offset:Q=0,limit:$=100}){return(await s(`${a(X)}/outputs?q=is_spent(false),recipient(${G})&limit=${$}&offset=${Q}`,J)).filter(({is_spent:W})=>!W).map(({script_hex:W,block_id:L,transaction_hash:q,index:D,value:U,spending_signature_hex:B})=>({hash:q,index:D,value:U,txHex:B,script_hex:W,is_confirmed:L!==-1}))}async function UX({chain:X,address:G,apiKey:J,offset:Q=0,limit:$=100}){if(!G)throw new F("toolbox_utxo_invalid_params",{error:"Address is required"});try{let j=await EX({chain:X,address:G,apiKey:J,offset:Q,limit:$});if(j.length<=$)return j;let Z=await UX({chain:X,address:G,apiKey:J,offset:Q+$,limit:$});return[...j,...Z]}catch(j){return console.error("Failed to fetch unspent UTXOs:",j),[]}}async function SX({address:X,chain:G,apiKey:J,fetchTxHex:Q=!0}){let $=await UX({chain:G,address:X,apiKey:J}),j=[];for(let{hash:Z,index:W,script_hex:L,value:q}of $){let D;if(Q)D=await BX({txHash:Z,chain:G,apiKey:J});j.push({address:X,hash:Z,index:W,txHex:D,value:q,witnessUtxo:{value:q,script:Buffer.from(L,"hex")}})}return j}function gX(X){let G=i.get("apiKeys").blockchair||"";return qX(!G,"No Blockchair API key found. Functionality will be limited."),{broadcastTx:(J)=>KX({txHash:J,chain:X}),getRawTx:(J)=>BX({txHash:J,chain:X,apiKey:G}),getSuggestedTxFee:()=>wX(X),getBalance:(J)=>fX({address:J,chain:X,apiKey:G}),getAddressData:(J)=>DX({address:J,chain:X,apiKey:G}),scanUTXOs:(J)=>SX({...J,chain:X,apiKey:G})}}function AG(X){return X}function Y(X){let G=i.get("apis")[X];if(G)return qX(!0,"Using custom UTXO API. Be sure to implement all methods to avoid issues."),G;return gX(X)}function I(){return function X(G){switch(G){case T.Bitcoin:return AX.bitcoin;case T.BitcoinCash:return f.bitcoincash.main.toBitcoinJS();case T.Dash:return f.dash.main.toBitcoinJS();case T.Litecoin:return f.litecoin.main.toBitcoinJS();case T.Dogecoin:{let J={private:70615956,public:70617039},Q=f.dogecoin.test;return Q.versions.bip32=J,f.dogecoin.main.toBitcoinJS()}default:throw new F("toolbox_utxo_not_supported",{chain:G})}}}import{SwapKitError as V}from"@swapkit/helpers";import MX from"bs58check";import zX from"cashaddrjs";var TX;((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})(TX||={});var v={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}};function CX(X){try{return h(X),!0}catch(G){return!1}}function HX(X){return h(X)?.network}function E(X){let G=h(X);if(G?.format==="legacy")return X;return lX(G)}function l(X){let G=h(X);return hX(G)}function h(X){try{return xX(X)}catch(G){}try{return mX(X)}catch(G){}throw new V("toolbox_utxo_invalid_address",{address:X})}function xX(X){try{let G=MX.decode(X);if(G.length!==21)throw new V("toolbox_utxo_invalid_address",{address:X});let J=G[0],Q=Array.prototype.slice.call(G,1);switch(J){case v.legacy.mainnet.p2pkh:return{hash:Q,format:"legacy",network:"mainnet",type:"p2pkh"};case v.legacy.mainnet.p2sh:return{hash:Q,format:"legacy",network:"mainnet",type:"p2sh"};case v.legacy.testnet.p2pkh:return{hash:Q,format:"legacy",network:"testnet",type:"p2pkh"};case v.legacy.testnet.p2sh:return{hash:Q,format:"legacy",network:"testnet",type:"p2sh"};case v.bitpay.mainnet.p2pkh:return{hash:Q,format:"bitpay",network:"mainnet",type:"p2pkh"};case v.bitpay.mainnet.p2sh:return{hash:Q,format:"bitpay",network:"mainnet",type:"p2sh"};default:throw new V("toolbox_utxo_invalid_address",{address:X})}}catch(G){throw new V("toolbox_utxo_invalid_address",{address:X})}}function mX(X){if(X.indexOf(":")!==-1)try{return vX(X)}catch(G){}else{let G=["bitcoincash","bchtest","bchreg"];for(let J of G)try{return vX(`${J}:${X}`)}catch(Q){}}throw new V("toolbox_utxo_invalid_address",{address:X})}function vX(X){try{let{hash:G,prefix:J,type:Q}=zX.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call(G,0),network:J==="bitcoincash"?"mainnet":"testnet",type:Q==="P2PKH"?"p2pkh":"p2sh"}}catch(G){throw new V("toolbox_utxo_invalid_address",{address:X})}}function lX(X){let G=v.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=G,J.set(X.hash,1),MX.encode(J)}function hX(X){let G=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",Q=new Uint8Array(X.hash);return zX.encode(G,J,Q)}import{Chain as A,SwapKitError as cX}from"@swapkit/helpers";var t=(X)=>{switch(X){case A.Bitcoin:case A.BitcoinCash:return 550;case A.Dash:case A.Litecoin:return 5500;case A.Dogecoin:return 1e5;default:throw new cX("toolbox_utxo_not_supported",{chain:X})}},k=({inputs:X,outputs:G,feeRate:J=1,chain:Q=A.Bitcoin})=>{let $=Math.ceil(J),j=X[0]&&"address"in X[0]&&X[0].address?u(X[0].address):"P2PKH",Z=X.filter((B)=>N(B)*$<=B.value),W=e+G.reduce((B,z)=>B+c(z,j),0),L=G.reduce((B,z)=>B+z.value,0),q=W*$,D=0,U=[];for(let B of Z){let z=N(B),M=$*z;q+=M,D+=B.value,U.push(B);let H=q+L;if(D<H)continue;let b=D-H,ZX=$*c({address:"",value:0},j);if(b>ZX){let $X=ZX+q,jX=D-(L+$X);if(jX>Math.max(N({})*$,t(Q)))return{inputs:U,outputs:G.concat({value:jX,address:""}),fee:$X}}return{inputs:U,outputs:G,fee:q}}return{fee:$*S({inputs:X,outputs:G,feeRate:$})}};import{SwapKitError as uX}from"@swapkit/helpers";import{opcodes as pX,script as oX}from"bitcoinjs-lib";var hG=1000,e=10,nX=10,rX=41,dX=107;function O(X){let G=Buffer.from(X,"utf8");return oX.compile([pX.OP_RETURN,G])}var XX;((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(XX||={});var GX={["P2PKH"]:148,["P2WPKH"]:68},p={["P2PKH"]:34,["P2WPKH"]:31},u=(X)=>{if(X.startsWith("bc1")||X.startsWith("ltc1"))return"P2WPKH";if(X.startsWith("1")||X.startsWith("3")||X.startsWith("L")||X.startsWith("M")||X.startsWith("X")||X.startsWith("D")||X.startsWith("bitcoincash:q")||X.startsWith("q"))return"P2PKH";throw new uX("toolbox_utxo_invalid_address",{address:X})},S=({inputs:X,outputs:G,feeRate:J})=>{let Q=X[0]&&"address"in X[0]&&X[0].address?u(X[0].address):"P2PKH",$=X.filter((Z)=>Z.value>=GX["type"in Z?Z.type:"P2PKH"]*Math.ceil(J)).reduce((Z,W)=>Z+N(W),0),j=G?.reduce((Z,W)=>Z+c(W),0)||p[Q];return e+$+j},N=(X)=>{if("type"in X)return GX[X.type];if("address"in X&&X.address)return GX[u(X.address)];return rX+dX},c=(X,G)=>{if(X?.script)return nX+X.script.length+(X.script.length>=74?2:1);if(G)return p[G];return p.P2PKH};import{AssetValue as JX,Chain as _,DerivationPath as iX,FeeOption as y,NetworkDerivationPath as aX,SwapKitError as P,SwapKitNumber as sX,applyFeeMultiplier as YX,derivationPathToString as tX,updateDerivationPath as eX}from"@swapkit/helpers";import{Psbt as XG,address as GG,initEccLib as FX,payments as IX}from"bitcoinjs-lib";import JG from"ecpair";import QX from"@bitcoinerlab/secp256k1";import{ECPair as QG,HDNode as ZG}from"@psf/bitcoincashjs-lib";import{HDKey as $G}from"@scure/bip32";import{mnemonicToSeedSync as _X}from"@scure/bip39";var o=[_.Dash,_.Dogecoin];function jG({inputs:X,outputs:G,chain:J,psbt:Q,sender:$,compiledMemo:j}){for(let Z of X){let W=!!Z.witnessUtxo&&!o.includes(J)&&{witnessUtxo:Z.witnessUtxo},L=o.includes(J)&&{nonWitnessUtxo:Z.txHex?Buffer.from(Z.txHex,"hex"):void 0};Q.addInput({hash:Z.hash,index:Z.index,...W,...L})}for(let Z of G){let W="address"in Z&&Z.address?Z.address:$,L=Z.script;if(L&&!j)continue;let q=L?{script:j,value:0}:{address:W,value:Z.value};FX(QX),Q.addOutput(q)}return{psbt:Q,inputs:X}}async function yX({assetValue:X,recipient:G,memo:J,feeRate:Q,sender:$,fetchTxHex:j=!1}){let Z=X.chain,W=J?await O(J):null,L=await OX({assetValue:X,recipient:G,memo:J,sender:$,fetchTxHex:j}),{inputs:q,outputs:D}=k({...L,feeRate:Q,chain:Z});if(!(q&&D))throw new P("toolbox_utxo_insufficient_balance",{sender:$,assetValue:X});let U=await I(),B=new XG({network:U(Z)});if(Z===_.Dogecoin)B.setMaximumFeeRate(650000000);let{psbt:z,inputs:M}=await jG({inputs:q,outputs:D,chain:Z,psbt:B,sender:$,compiledMemo:W});return{psbt:z,utxos:L.inputs,inputs:M}}async function LG(){let X=await I();return function G({address:J,chain:Q}){if(Q===_.BitcoinCash)return K(J);try{return FX(QX),GG.toOutputScript(J,X(Q)),!0}catch($){return!1}}}async function WG({chain:X,phrase:G,derivationPath:J}){let Q=(await r(X))({phrase:G,derivationPath:J});async function $(Z){return await Z.signAllInputs(Q),Z}async function j(){return(await kX(X))(Q)}return{getAddress:j,signTransaction:$}}async function n({chain:X,...G}){let J="phrase"in G?G.phrase:void 0,Q="index"in G?G.index||0:0,$=tX("derivationPath"in G&&G.derivationPath?G.derivationPath:eX(aX[X],{index:Q})),j=J?await WG({chain:X,phrase:J,derivationPath:$}):("signer"in G)?G.signer:void 0;function Z(){return Promise.resolve(j?.getAddress())}let W=await kX(X),L=await LG(),q=await r(X);return{accumulative:k,calculateTxSize:S,getAddressFromKeys:W,getAddress:Z,validateAddress:(D)=>L({address:D,chain:X}),broadcastTx:(D)=>Y(X).broadcastTx(D),createTransaction:yX,createKeysForPath:q,getFeeRates:()=>d(X),getInputsOutputsFee:NX,transfer:BG(j),getPrivateKeyFromMnemonic:(D)=>{return q(D).toWIF()},getBalance:PX(X),estimateTransactionFee:DG(X),estimateMaxSendableAmount:qG(X)}}async function NX({assetValue:X,feeOptionKey:G=y.Fast,feeRate:J,memo:Q,sender:$,recipient:j}){let Z=X.chain,W=await OX({assetValue:X,sender:$,memo:Q,recipient:j}),L=J?Math.floor(J):(await d(Z))[G];return k({...W,feeRate:L,chain:Z})}function qG(X){return async function G({from:J,memo:Q,feeRate:$,feeOptionKey:j=y.Fast,recipients:Z=1}){let W=await Y(X).getAddressData(J),L=$?Math.ceil($):(await d(X))[j],q=W?.utxo.map((M)=>({...M,type:"P2PKH",hash:""})).filter((M)=>M.value>Math.max(t(X),N(M)*L));if(!q?.length)return JX.from({chain:X});let D=JX.from({chain:X,value:q.reduce((M,H)=>M+H.value,0)}),U=typeof Z==="number"?Array.from({length:Z},()=>({address:J,value:0})):Z;if(Q){let M=await O(Q);U.push({address:J,script:M,value:0})}let z=S({inputs:q,outputs:U,feeRate:L})*L;return D.sub(z)}}function DG(X){return async(G)=>{let J=await NX(G);return JX.from({chain:X,value:sX.fromBigInt(BigInt(J.fee),8).getValue("string")})}}async function r(X){let G=await I();switch(X){case _.BitcoinCash:return function J({phrase:Q,derivationPath:$=`${iX.BCH}/0`,wif:j}){let Z=G(X);if(j)return QG.fromWIF(j,Z);if(!Q)throw new P("toolbox_utxo_invalid_params",{error:"No phrase provided"});return ZG.fromSeedBuffer(Buffer.from(_X(Q)),Z).derivePath($).keyPair};case _.Bitcoin:case _.Dogecoin:case _.Litecoin:case _.Dash:return function J({phrase:Q,wif:$,derivationPath:j}){if(!($||Q))throw new P("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let Z=JG(QX),W=G(X);if($)return Z.fromWIF($,W);let L=_X(Q),q=$G.fromMasterSeed(L,W).derive(j);if(!q.privateKey)throw new P("toolbox_utxo_invalid_params",{error:"Could not get private key from phrase"});return Z.fromPrivateKey(Buffer.from(q.privateKey),{network:W})};default:throw new P("toolbox_utxo_not_supported",{chain:X})}}async function kX(X){let G=await I();return function J(Q){if(!Q)throw new P("toolbox_utxo_invalid_params",{error:"Keys must be provided"});let $=o.includes(X)?IX.p2pkh:IX.p2wpkh,{address:j}=$({pubkey:Q.publicKey,network:G(X)});if(!j)throw new P("toolbox_utxo_invalid_address",{error:"Address not defined"});return j}}function BG(X){return async function G({memo:J,recipient:Q,feeOptionKey:$,feeRate:j,assetValue:Z}){let W=await X?.getAddress(),L=Z.chain;if(!(X&&W))throw new P("toolbox_utxo_no_signer");if(!Q)throw new P("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let q=j||(await d(L))[$||y.Fast],{psbt:D}=await yX({recipient:Q,feeRate:q,sender:W,assetValue:Z,memo:J}),U=await X.signTransaction(D);return U.finalizeAllInputs(),Y(L).broadcastTx(U.extractTransaction().toHex())}}async function d(X){let G=await Y(X).getSuggestedTxFee();return{[y.Average]:G,[y.Fast]:YX(G,y.Fast),[y.Fastest]:YX(G,y.Fastest)}}async function OX({assetValue:X,recipient:G,memo:J,sender:Q,fetchTxHex:$=!1}){let j=X.chain,Z=$||o.includes(j);return{inputs:await Y(j).scanUTXOs({address:Q,fetchTxHex:Z}),outputs:[{address:G,value:Number(X.bigIntValue)},...J?[{address:"",script:await O(J),value:0}]:[]]}}var C=zG.BitcoinCash;function g(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function K(X){let G=g(X);return CX(G)&&HX(G)==="mainnet"}function w(X){return g(l(X))}async function _G(X){async function G({builder:Q,utxos:$}){return $.forEach((j,Z)=>{Q.sign(Z,X,void 0,65,j.witnessUtxo?.value)}),Q.build()}return{getAddress:()=>{let Q=X.getAddress(0);return Promise.resolve(w(Q))},signTransaction:G}}async function bX(X){let G="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,Q=HG("derivationPath"in X&&X.derivationPath?X.derivationPath:YG(CG[C],{index:J})),$=(await r(C))({phrase:G,derivationPath:Q}),j=$?await _G($):("signer"in X)?X.signer:void 0;function Z(){return Promise.resolve(j?.getAddress())}let{getBalance:W,getFeeRates:L,broadcastTx:q,...D}=await n({chain:C});function U(B,z=!0){return W(g(l(B)))}return{...D,getAddress:Z,broadcastTx:q,createTransaction:VX,buildTx:FG,getAddressFromKeys:yG,getBalance:U,getFeeRates:L,stripPrefix:g,stripToCashAddress:w,validateAddress:K,transfer:PG({getFeeRates:L,broadcastTx:q,signer:j})}}async function VX({assetValue:X,recipient:G,memo:J,feeRate:Q,sender:$}){if(!K(G))throw new R("toolbox_utxo_invalid_address",{address:G});let j=await Y(C).scanUTXOs({address:w($),fetchTxHex:!0}),Z=J?await O(J):null,W=[];W.push({address:G,value:X.getBaseValue("number")});let{inputs:L,outputs:q}=k({inputs:j,outputs:W,feeRate:Q,chain:C});if(!(L&&q))throw new R("toolbox_utxo_insufficient_balance",{sender:$,assetValue:X});let D=await I(),U=new vG(D(C));await Promise.all(L.map(async(B)=>{let z=await Y(C).getRawTx(B.hash);U.addInput(UG.fromBuffer(Buffer.from(z,"hex")),B.index)}));for(let B of q){let z="address"in B&&B.address?B.address:E($),M=await I(),H=MG.toOutputScript(E(z),M(C));U.addOutput(H,B.value)}if(Z)U.addOutput(Z,0);return{builder:U,utxos:L}}function PG({broadcastTx:X,getFeeRates:G,signer:J}){return async function Q({recipient:$,assetValue:j,feeOptionKey:Z=TG.Fast,...W}){let L=await J?.getAddress();if(!(J&&L))throw new R("toolbox_utxo_no_signer");if(!$)throw new R("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let q=W.feeRate||(await G())[Z],{builder:D,utxos:U}=await VX({...W,assetValue:j,feeRate:q,recipient:$,sender:L}),z=(await J.signTransaction({builder:D,utxos:U})).toHex();return X(z)}}async function FG({assetValue:X,recipient:G,memo:J,feeRate:Q,sender:$}){let j=l(G);if(!K(j))throw new R("toolbox_utxo_invalid_address",{address:j});let Z=await Y(C).scanUTXOs({address:w($),fetchTxHex:!0}),W=Number(Q.toFixed(0)),L=J?await O(J):null,q=[];if(q.push({address:E(G),value:X.getBaseValue("number")}),L)q.push({script:L,value:0});let{inputs:D,outputs:U}=k({inputs:Z,outputs:q,feeRate:W,chain:C});if(!(D&&U))throw new R("toolbox_utxo_insufficient_balance",{sender:$,assetValue:X});let B=await I(),z=new IG({network:B(C)});for(let{hash:M,index:H,witnessUtxo:b}of D)z.addInput({hash:M,index:H,witnessUtxo:b});for(let M of U){let H="address"in M&&M.address?M.address:E($),b=M.script?L?{script:L,value:0}:void 0:{address:H,value:M.value};if(b)z.addOutput(b)}return{psbt:z,utxos:Z,inputs:D}}function yG(X){let G=X.getAddress(0);return w(G)}async function MJ(X,G){switch(X){case x.BitcoinCash:return await bX(G);case x.Bitcoin:case x.Dogecoin:case x.Litecoin:case x.Dash:return await n({chain:X,...G});default:throw new NG("toolbox_utxo_not_supported",{chain:X})}}export{E as toLegacyAddress,l as toCashAddress,w as stripToCashAddress,g as stripPrefix,o as nonSegwitChains,CX as isValidAddress,MJ as getUtxoToolbox,I as getUtxoNetwork,Y as getUtxoApi,LG as getUTXOAddressValidator,u as getScriptTypeForAddress,c as getOutputSize,N as getInputSize,t as getDustThreshold,r as getCreateKeysForPath,HX as detectAddressNetwork,n as createUTXOToolbox,AG as createCustomUtxoApi,bX as createBCHToolbox,O as compileMemo,S as calculateTxSize,K as bchValidateAddress,kX as addressFromKeysGetter,k as accumulative,TX as UtxoNetwork,XX as UTXOScriptType,e as TX_OVERHEAD,p as OutputSizes,nX as OP_RETURN_OVERHEAD,hG as MIN_TX_FEE,GX as InputSizes};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=6BEC65B4771F1DD464756E2164756E21
|