@swapkit/toolboxes 4.0.0-beta.63 → 4.0.0-beta.64
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/src/index.cjs +3 -3
- package/dist/src/index.cjs.map +3 -3
- package/dist/src/index.js +3 -3
- package/dist/src/index.js.map +3 -3
- package/dist/src/utxo/index.cjs +3 -3
- package/dist/src/utxo/index.cjs.map +3 -3
- package/dist/src/utxo/index.js +3 -3
- package/dist/src/utxo/index.js.map +3 -3
- package/dist/types/utxo/helpers/txSize.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/src/utxo/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var
|
|
1
|
+
var LZ=Object.create;var{getPrototypeOf:jZ,defineProperty:o,getOwnPropertyNames:wX,getOwnPropertyDescriptor:BZ}=Object,KX=Object.prototype.hasOwnProperty;var x=(X,Z,G)=>{G=X!=null?LZ(jZ(X)):{};let J=Z||!X||!X.__esModule?o(G,"default",{value:X,enumerable:!0}):G;for(let Q of wX(X))if(!KX.call(J,Q))o(J,Q,{get:()=>X[Q],enumerable:!0});return J},kX=new WeakMap,DZ=(X)=>{var Z=kX.get(X),G;if(Z)return Z;if(Z=o({},"__esModule",{value:!0}),X&&typeof X==="object"||typeof X==="function")wX(X).map((J)=>!KX.call(Z,J)&&o(Z,J,{get:()=>X[J],enumerable:!(G=BZ(X,J))||G.enumerable}));return kX.set(X,Z),Z};var UZ=(X,Z)=>{for(var G in Z)o(X,G,{get:Z[G],enumerable:!0,configurable:!0,set:(J)=>Z[G]=()=>J})};var N=(X,Z)=>()=>(X&&(Z=X(X=0)),Z);function bX(){function X(){let Z=Date.now(),G=UX||Z;return UX=G,Z>UX?Z:G+1}return zZ+X().toString(36)}function EX(X){return async function Z(G,J=!0){return(await RX.SwapKitApi.getChainBalance({chain:X,address:G,scamFilter:J})).map(({identifier:q,value:$,decimal:W})=>{return new ZX.AssetValue({decimal:W||ZX.BaseDecimal[X],value:$,identifier:q})})}}var ZX,RX,zZ,UX=0;var zX=N(()=>{ZX=require("@swapkit/helpers"),RX=require("@swapkit/helpers/api"),zZ=typeof process!=="undefined"&&process.pid?process.pid.toString(36):""});async function MZ({chain:X,txHash:Z}){let G=U.SKConfig.get("rpcUrls")[X],J=JSON.stringify({jsonrpc:"2.0",method:"sendrawtransaction",params:[Z],id:bX()}),Q=await U.RequestClient.post(G,{headers:{"Content-Type":"application/json"},body:J});if(Q.error)throw new U.SwapKitError("toolbox_utxo_broadcast_failed",{error:Q.error?.message});if(Q.result.includes('"code":-26'))throw new U.SwapKitError("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return Q.result}function MX(X){return`https://api.blockchair.com/${YZ(X)}`}function fX(X){switch(X){case U.Chain.Bitcoin:return 5;case U.Chain.Dogecoin:return 1e4;case U.Chain.Litecoin:return 1;case U.Chain.Zcash:return 1;default:return 2}}function YZ(X){switch(X){case U.Chain.BitcoinCash:return"bitcoin-cash";case U.Chain.Litecoin:return"litecoin";case U.Chain.Dash:return"dash";case U.Chain.Dogecoin:return"dogecoin";case U.Chain.Zcash:return"zcash";case U.Chain.Polkadot:return"polkadot";default:return"bitcoin"}}async function TZ(X){try{let{feePerKb:Z}=await U.RequestClient.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),G=Z/1000;return Math.max(G,fX(X))}catch(Z){return fX(X)}}async function YX(X,Z){let G=await U.RequestClient.get(`${X}${Z?`${X.includes("?")?"&":"?"}key=${Z}`:""}`);if(!G||G.context.code!==200)throw new U.SwapKitError("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return G.data}async function xX({address:X,chain:Z,apiKey:G}){if(!X)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await YX(`${MX(Z)}/dashboards/address/${X}?transaction_details=true`,G))[X]}catch(J){return{utxo:[],address:{balance:0,transaction_count:0}}}}async function CZ({address:X,chain:Z,apiKey:G}){return(await xX({address:X,chain:Z,apiKey:G}))?.address.balance||0}async function mX({chain:X,apiKey:Z,txHash:G}){if(!G)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await YX(`${MX(X)}/raw/transaction/${G}`,Z))?.[G]?.raw_transaction||""}catch(J){return console.error("Failed to fetch raw transaction:",J),""}}async function HZ({chain:X,address:Z,apiKey:G,offset:J=0,limit:Q=30}){return(await YX(`${MX(X)}/outputs?q=recipient(${Z}),is_spent(false),value(..2000000000000000)&s=value(desc)&fields=is_spent,transaction_hash,index,value,script_hex,block_id,spending_signature_hex&limit=${Q}&offset=${J}`,G)).map(({is_spent:L,script_hex:B,block_id:D,transaction_hash:M,index:z,value:Y,spending_signature_hex:C})=>({hash:M,index:z,value:Y,txHex:C,script_hex:B,is_confirmed:D!==-1,is_spent:L}))}function vZ(X){return X.reduce((Z,G)=>Z+G.value,0)}function VX(X,Z){let G=[...X].sort((J,Q)=>Q.value-J.value);if(Z){let J=[],Q=0;for(let q of G)if(J.push(q),Q+=q.value,Q>=Z)break;return J}return G}async function gX({chain:X,address:Z,apiKey:G,targetValue:J,accumulativeValue:Q=0,offset:q=0,limit:$=30}){if(!Z)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{let W=await HZ({targetValue:J,chain:X,address:Z,apiKey:G,offset:q,limit:$}),B=W.length<$,D=W.filter(({is_spent:_})=>!_),M=vZ(D),z=Q+M,Y=J&&z>=J;if(B||Y)return VX(D,J);let C=await gX({chain:X,address:Z,apiKey:G,offset:q+$,limit:$,accumulativeValue:z,targetValue:J}),I=[...D,...C];return VX(I,J)}catch(W){return console.error("Failed to fetch unspent UTXOs:",W),[]}}async function IZ({address:X,chain:Z,apiKey:G,fetchTxHex:J=!0,targetValue:Q}){let q=await gX({chain:Z,address:X,apiKey:G,targetValue:Q}),$=[];for(let{hash:W,index:L,script_hex:B,value:D}of q){let M;if(J)M=await mX({txHash:W,chain:Z,apiKey:G});$.push({address:X,hash:W,index:L,txHex:M,value:D,witnessUtxo:{value:D,script:Buffer.from(B,"hex")}})}return $}function _Z(X){let Z=U.SKConfig.get("apiKeys").blockchair||"";return U.warnOnce(!Z,"No Blockchair API key found. Functionality will be limited."),{broadcastTx:(G)=>MZ({txHash:G,chain:X}),getRawTx:(G)=>mX({txHash:G,chain:X,apiKey:Z}),getSuggestedTxFee:()=>TZ(X),getBalance:(G)=>CZ({address:G,chain:X,apiKey:Z}),getAddressData:(G)=>xX({address:G,chain:X,apiKey:Z}),getUtxos:(G)=>IZ({...G,chain:X,apiKey:Z})}}function FZ(X){return X}function O(X){let Z=U.SKConfig.get("apis")[X];if(Z)return U.warnOnce(!0,"Using custom UTXO API. Be sure to implement all methods to avoid issues."),Z;return _Z(X)}function F(){return function X(Z){switch(Z){case U.Chain.Bitcoin:return SX.networks.bitcoin;case U.Chain.BitcoinCash:return m.default.bitcoincash.main.toBitcoinJS();case U.Chain.Dash:return m.default.dash.main.toBitcoinJS();case U.Chain.Litecoin:return m.default.litecoin.main.toBitcoinJS();case U.Chain.Dogecoin:{let G={private:70615956,public:70617039},J=m.default.dogecoin.test;return J.versions.bip32=G,m.default.dogecoin.main.toBitcoinJS()}case U.Chain.Zcash:{let{isStagenet:G}=U.SKConfig.get("envs");return G?OZ:NZ}default:throw new U.SwapKitError("toolbox_utxo_not_supported",{chain:Z})}}}var U,SX,m,NZ,OZ;var lX=N(()=>{U=require("@swapkit/helpers"),SX=require("bitcoinjs-lib");zX();m=x(require("coininfo"));NZ={messagePrefix:`\x19Zcash Signed Message:
|
|
2
2
|
`,bech32:"zc",bip32:{public:76067358,private:76066276},pubKeyHash:28,scriptHash:28,wif:128},OZ={messagePrefix:`\x19Zcash Signed Message:
|
|
3
|
-
`,bech32:"ztestsapling",bip32:{public:70617039,private:70615956},pubKeyHash:29,scriptHash:28,wif:239}});function IX(X){try{return GX(X),!0}catch(Z){return!1}}function _X(X){return GX(X)?.network}function g(X){let Z=GX(X);if(Z?.format==="legacy")return X;return AZ(Z)}function n(X){let Z=GX(X);return kZ(Z)}function GX(X){try{let Z=yZ(X);if(Z)return Z}catch(Z){}try{let Z=PZ(X);if(Z)return Z}catch(Z){}throw new CX.SwapKitError("toolbox_utxo_invalid_address",{address:X})}function yZ(X){try{let Z=HX.default.decode(X);if(Z.length!==21)throw new CX.SwapKitError("toolbox_utxo_invalid_address",{address:X});let G=Z[0],J=Array.prototype.slice.call(Z,1);switch(G){case C.legacy.mainnet.p2pkh:return{hash:J,format:"legacy",network:"mainnet",type:"p2pkh"};case C.legacy.mainnet.p2sh:return{hash:J,format:"legacy",network:"mainnet",type:"p2sh"};case C.legacy.testnet.p2pkh:return{hash:J,format:"legacy",network:"testnet",type:"p2pkh"};case C.legacy.testnet.p2sh:return{hash:J,format:"legacy",network:"testnet",type:"p2sh"};case C.bitpay.mainnet.p2pkh:return{hash:J,format:"bitpay",network:"mainnet",type:"p2pkh"};case C.bitpay.mainnet.p2sh:return{hash:J,format:"bitpay",network:"mainnet",type:"p2sh"};default:return}}catch(Z){return}}function PZ(X){if(X.indexOf(":")!==-1)try{return hX(X)}catch(Z){}else{let Z=["bitcoincash","bchtest","bchreg"];for(let G of Z)try{return hX(`${G}:${X}`)}catch(J){}}return}function hX(X){try{let{hash:Z,prefix:G,type:J}=TX.default.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call(Z,0),network:G==="bitcoincash"?"mainnet":"testnet",type:J==="P2PKH"?"p2pkh":"p2sh"}}catch(Z){return}}function AZ(X){let Z=C.legacy[X.network][X.type],G=Buffer.alloc(1+X.hash.length);return G[0]=Z,G.set(X.hash,1),HX.default.encode(G)}function kZ(X){let Z=X.network==="mainnet"?"bitcoincash":"bchtest",G=X.type==="p2pkh"?"P2PKH":"P2SH",J=new Uint8Array(X.hash);return TX.default.encode(Z,G,J)}var CX,HX,TX,vX,C;var cX=N(()=>{CX=require("@swapkit/helpers"),HX=x(require("bs58check")),TX=x(require("cashaddrjs"));((G)=>{G.Mainnet="mainnet";G.Testnet="testnet"})(vX||={});C={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}}});var P,JX=(X)=>{switch(X){case P.Chain.Bitcoin:case P.Chain.BitcoinCash:return 550;case P.Chain.Dash:case P.Chain.Litecoin:return 5500;case P.Chain.Dogecoin:return 1e5;case P.Chain.Zcash:return 546;default:throw new P.SwapKitError("toolbox_utxo_not_supported",{chain:X})}},K=({inputs:X,outputs:Z,feeRate:G=1,chain:J=P.Chain.Bitcoin})=>{let Q=Math.ceil(G),q=X[0]&&"address"in X[0]&&X[0].address?d(X[0].address):"P2PKH",$=X.filter((z)=>w(z)*Q<=z.value),L=QX+Z.reduce((z,Y)=>z+r(Y,q),0),W=Z.reduce((z,Y)=>z+Y.value,0),B=L*Q,D=0,M=[];for(let z of $){let Y=w(z),H=Q*Y;B+=H,D+=z.value,M.push(z);let I=B+W;if(D<I)continue;let _=D-I,S=Q*r({address:"",value:0},q);if(_>S){let R=S+B,AX=D-(W+R);if(AX>Math.max(w({})*Q,JX(J)))return{inputs:M,outputs:Z.concat({value:AX,address:""}),fee:R}}return{inputs:M,outputs:Z,fee:B}}return{fee:Q*l({inputs:X,outputs:Z,feeRate:Q})}};var pX=N(()=>{P=require("@swapkit/helpers");h()});function b(X){let Z=Buffer.from(X,"utf8");return LX.script.compile([LX.opcodes.OP_RETURN,Z])}var uX,LX,wZ=1000,QX=10,oX=10,KZ=41,bZ=107,$X,qX,i,d=(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.SwapKitError("toolbox_utxo_invalid_address",{address:X})},l=({inputs:X,outputs:Z,feeRate:G})=>{let J=X[0]&&"address"in X[0]&&X[0].address?d(X[0].address):"P2PKH",Q=X.filter(($)=>$.value>=qX["type"in $?$.type:"P2PKH"]*Math.ceil(G)).reduce(($,L)=>$+w(L),0),q=Z?.reduce(($,L)=>$+r(L),0)||i[J];return QX+Q+q},w=(X)=>{if("type"in X)return qX[X.type];if("address"in X&&X.address)return qX[d(X.address)];return KZ+bZ},r=(X,Z)=>{if(X?.script)return oX+X.script.length+(X.script.length>=74?2:1);if(Z)return i[Z];return i.P2PKH};var nX=N(()=>{uX=require("@swapkit/helpers"),LX=require("bitcoinjs-lib");((G)=>{G.P2PKH="P2PKH";G.P2WPKH="P2WPKH"})($X||={});qX={["P2PKH"]:148,["P2WPKH"]:68},i={["P2PKH"]:34,["P2WPKH"]:31}});var h=N(()=>{lX();cX();pX();nX()});function EZ(X,Z=!1){let G=aX.hash160(X),J=Z?Buffer.from([28,186]):Buffer.from([28,184]),Q=Buffer.concat([J,G]);return FX.default.encode(Q)}function WX(X){try{if(X.startsWith("z"))return console.warn("Shielded Zcash addresses (z-addresses) are not supported. Use transparent addresses (t1/t3) only."),!1;let Z=X.startsWith("t1"),G=X.startsWith("t3");if(!(Z||G))return!1;let{isStagenet:J}=T.SKConfig.get("envs");if(Z&&J||G&&!J)return!1;return fZ(X,tX)}catch{return!1}}function fZ(X,Z){try{let G=FX.default.decode(X);if(G.length<21)return!1;let J=G[0];return J===Z.pubKeyHash||J===Z.scriptHash}catch{return!1}}async function SZ({phrase:X,derivationPathString:Z}){let G=iX.mnemonicToSeedSync(X),Q=dX.HDKey.fromMasterSeed(G).derive(Z);if(!Q.privateKey)throw new Error("Unable to derive private key");let q=VZ.fromPrivateKey(Buffer.from(Q.privateKey),{network:tX}),{isStagenet:$}=T.SKConfig.get("envs"),L=EZ(q.publicKey,$);return{getAddress(){return Promise.resolve(L)},signTransaction(W){for(let B=0;B<W.inputCount;B++)W.signInput(B,q);return Promise.resolve(W)}}}async function NX(X){let Z=await c.match(X).with({signer:c.P.not(c.P.nullish)},({signer:L})=>Promise.resolve(L)).with({phrase:c.P.string},({phrase:L,derivationPath:W,index:B=0})=>{let D=W||T.NetworkDerivationPath[T.Chain.Zcash]||[44,133,0,0,0],M=T.updateDerivationPath(D,{index:B}),z=T.derivationPathToString(M);return SZ({phrase:L,derivationPathString:z})}).otherwise(()=>Promise.resolve(void 0)),{getFeeRates:G,broadcastTx:J,...Q}=await E({chain:T.Chain.Zcash,signer:Z});function q(L){return L.getAddress()}async function $({recipient:L,assetValue:W,feeOptionKey:B=T.FeeOption.Fast,...D}){let M=await Z?.getAddress();if(!(Z&&M))throw new T.SwapKitError("toolbox_utxo_no_signer");let z=D.feeRate||(await G())[B],Y={...D,assetValue:W,feeRate:z,recipient:L,sender:M},{psbt:H}=await Q.createTransaction(Y),I=await Z.signTransaction(H);I.finalizeAllInputs();let _=I.extractTransaction().toHex();return J(_)}return{...Q,broadcastTx:J,getFeeRates:G,transfer:$,getAddressFromKeys:q,validateAddress:WX}}var rX,dX,iX,T,aX,FX,sX,c,RZ,tX,VZ;var jX=N(()=>{rX=x(require("@bitcoinerlab/secp256k1")),dX=require("@scure/bip32"),iX=require("@scure/bip39"),T=require("@swapkit/helpers"),aX=require("bitcoinjs-lib/src/crypto"),FX=x(require("bs58check")),sX=require("ecpair"),c=require("ts-pattern");h();a();RZ=T.Chain.Zcash,tX=F()(RZ);VZ=sX.ECPairFactory(rX.default)});function xZ({inputs:X,outputs:Z,chain:G,psbt:J,sender:Q,compiledMemo:q}){for(let $ of X){let L=!!$.witnessUtxo&&!s.includes(G)&&{witnessUtxo:$.witnessUtxo},W=s.includes(G)&&{nonWitnessUtxo:$.txHex?Buffer.from($.txHex,"hex"):void 0};J.addInput({hash:$.hash,index:$.index,...L,...W})}for(let $ of Z){let L="address"in $&&$.address?$.address:Q,W=$.script;if(W&&!q)continue;let B=W?{script:q,value:0}:{address:L,value:$.value};A.initEccLib(BX.default),J.addOutput(B)}return{psbt:J,inputs:X}}async function ZZ({assetValue:X,recipient:Z,memo:G,feeRate:J,sender:Q,fetchTxHex:q=!1}){let $=X.chain,L=G?await b(G):null,W=await QZ({assetValue:X,recipient:Z,memo:G,sender:Q,fetchTxHex:q}),{inputs:B,outputs:D}=K({...W,feeRate:J,chain:$});if(!(B&&D))throw new j.SwapKitError("toolbox_utxo_insufficient_balance",{sender:Q,assetValue:X});let M=await F(),z=new A.Psbt({network:M($)});if($===j.Chain.Dogecoin)z.setMaximumFeeRate(650000000);let{psbt:Y,inputs:H}=await xZ({inputs:B,outputs:D,chain:$,psbt:z,sender:Q,compiledMemo:L});return{psbt:Y,utxos:W.inputs,inputs:H}}async function GZ(){let X=await F();return function Z({address:G,chain:J}){if(J===j.Chain.BitcoinCash)return f(G);if(J===j.Chain.Zcash)return WX(G);try{return A.initEccLib(BX.default),A.address.toOutputScript(G,X(J)),!0}catch(Q){return!1}}}async function mZ({chain:X,phrase:Z,derivationPath:G}){let J=(await t(X))({phrase:Z,derivationPath:G});async function Q($){return await $.signAllInputs(J),$}async function q(){return(await yX(X))(J)}return{getAddress:q,signTransaction:Q}}async function E({chain:X,...Z}){let G="phrase"in Z?Z.phrase:void 0,J="index"in Z?Z.index||0:0,Q=j.derivationPathToString("derivationPath"in Z&&Z.derivationPath?Z.derivationPath:j.updateDerivationPath(j.NetworkDerivationPath[X],{index:J})),q=G?await mZ({chain:X,phrase:G,derivationPath:Q}):("signer"in Z)?Z.signer:void 0;function $(){return Promise.resolve(q?.getAddress())}let L=await yX(X),W=await GZ(),B=await t(X);return{accumulative:K,calculateTxSize:l,getAddressFromKeys:L,getAddress:$,validateAddress:(D)=>W({address:D,chain:X}),broadcastTx:(D)=>O(X).broadcastTx(D),createTransaction:ZZ,createKeysForPath:B,getFeeRates:()=>e(X),getInputsOutputsFee:JZ,transfer:hZ(q),getPrivateKeyFromMnemonic:(D)=>{return B(D).toWIF()},getBalance:EX(X),estimateTransactionFee:lZ(X),estimateMaxSendableAmount:gZ(X)}}async function JZ({assetValue:X,feeOptionKey:Z=j.FeeOption.Fast,feeRate:G,memo:J,sender:Q,recipient:q}){let $=X.chain,L=await QZ({assetValue:X,sender:Q,memo:J,recipient:q}),W=G?Math.floor(G):(await e($))[Z];return K({...L,feeRate:W,chain:$})}function gZ(X){return async function Z({from:G,memo:J,feeRate:Q,feeOptionKey:q=j.FeeOption.Fast,recipients:$=1}){let L=await O(X).getAddressData(G),W=Q?Math.ceil(Q):(await e(X))[q],B=L?.utxo.map((H)=>({...H,type:"P2PKH",hash:""})).filter((H)=>H.value>Math.max(JX(X),w(H)*W));if(!B?.length)return j.AssetValue.from({chain:X});let D=j.AssetValue.from({chain:X,value:B.reduce((H,I)=>H+I.value,0)}),M=typeof $==="number"?Array.from({length:$},()=>({address:G,value:0})):$;if(J){let H=await b(J);M.push({address:G,script:H,value:0})}let Y=l({inputs:B,outputs:M,feeRate:W})*W;return D.sub(Y)}}function lZ(X){return async(Z)=>{let G=await JZ(Z);return j.AssetValue.from({chain:X,value:j.SwapKitNumber.fromBigInt(BigInt(G.fee),8).getValue("string")})}}async function t(X){let Z=await F();switch(X){case j.Chain.BitcoinCash:return function G({phrase:J,derivationPath:Q=`${j.DerivationPath.BCH}/0`,wif:q}){let $=Z(X);if(q)return DX.ECPair.fromWIF(q,$);if(!J)throw new j.SwapKitError("toolbox_utxo_invalid_params",{error:"No phrase provided"});return DX.HDNode.fromSeedBuffer(Buffer.from(OX.mnemonicToSeedSync(J)),$).derivePath(Q).keyPair};case j.Chain.Bitcoin:case j.Chain.Dogecoin:case j.Chain.Litecoin:case j.Chain.Zcash:case j.Chain.Dash:return function G({phrase:J,wif:Q,derivationPath:q}){if(!(Q||J))throw new j.SwapKitError("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let $=eX.ECPairFactory(BX.default),L=Z(X);if(Q)return $.fromWIF(Q,L);let W=OX.mnemonicToSeedSync(J),B=XZ.HDKey.fromMasterSeed(W,L).derive(q);if(!B.privateKey)throw new j.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not get private key from phrase"});return $.fromPrivateKey(Buffer.from(B.privateKey),{network:L})};default:throw new j.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}async function yX(X){let Z=await F();return function G(J){if(!J)throw new j.SwapKitError("toolbox_utxo_invalid_params",{error:"Keys must be provided"});let Q=s.includes(X)?A.payments.p2pkh:A.payments.p2wpkh,{address:q}=Q({pubkey:J.publicKey,network:Z(X)});if(!q)throw new j.SwapKitError("toolbox_utxo_invalid_address",{error:"Address not defined"});return q}}function hZ(X){return async function Z({memo:G,recipient:J,feeOptionKey:Q,feeRate:q,assetValue:$}){let L=await X?.getAddress(),W=$.chain;if(!(X&&L))throw new j.SwapKitError("toolbox_utxo_no_signer");if(!J)throw new j.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let B=q||(await e(W))[Q||j.FeeOption.Fast],{psbt:D}=await ZZ({recipient:J,feeRate:B,sender:L,assetValue:$,memo:G}),M=await X.signTransaction(D);return M.finalizeAllInputs(),O(W).broadcastTx(M.extractTransaction().toHex())}}async function e(X){let Z=await O(X).getSuggestedTxFee();return{[j.FeeOption.Average]:Z,[j.FeeOption.Fast]:j.applyFeeMultiplier(Z,j.FeeOption.Fast),[j.FeeOption.Fastest]:j.applyFeeMultiplier(Z,j.FeeOption.Fastest)}}async function QZ({assetValue:X,recipient:Z,memo:G,sender:J,fetchTxHex:Q=!1}){let q=X.chain,$=(await e(q))[j.FeeOption.Fastest],L=Q||s.includes(q),W=X.getBaseValue("number"),B=Math.ceil(W+$*5000);return{inputs:await O(q).getUtxos({address:J,fetchTxHex:L,targetValue:B}),outputs:[{address:Z,value:W},...G?[{address:"",script:await b(G),value:0}]:[]]}}var j,A,eX,BX,DX,XZ,OX,s;var a=N(()=>{j=require("@swapkit/helpers"),A=require("bitcoinjs-lib"),eX=require("ecpair");zX();h();XX();BX=x(require("@bitcoinerlab/secp256k1")),DX=require("@psf/bitcoincashjs-lib"),XZ=require("@scure/bip32"),OX=require("@scure/bip39");jX();s=[j.Chain.Dash,j.Chain.Dogecoin]});function p(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function f(X){let Z=p(X);return IX(Z)&&_X(Z)==="mainnet"}function V(X){return p(n(X))}async function cZ(X){async function Z({builder:J,utxos:Q}){return Q.forEach((q,$)=>{J.sign($,X,void 0,65,q.witnessUtxo?.value)}),J.build()}return{getAddress:()=>{let J=X.getAddress(0);return Promise.resolve(V(J))},signTransaction:Z}}async function PX(X){let Z="phrase"in X?X.phrase:void 0,G="index"in X?X.index||0:0,J=v.derivationPathToString("derivationPath"in X&&X.derivationPath?X.derivationPath:v.updateDerivationPath(v.NetworkDerivationPath[y],{index:G})),Q=Z?(await t(y))({phrase:Z,derivationPath:J}):void 0,q=Q?await cZ(Q):("signer"in X)?X.signer:void 0;function $(){return Promise.resolve(q?.getAddress())}let{getBalance:L,getFeeRates:W,broadcastTx:B,...D}=await E({chain:y});function M(z,Y=!0){return L(p(n(z)))}return{...D,getAddress:$,broadcastTx:B,createTransaction:qZ,buildTx:uZ,getAddressFromKeys:oZ,getBalance:M,getFeeRates:W,stripPrefix:p,stripToCashAddress:V,validateAddress:f,transfer:pZ({getFeeRates:W,broadcastTx:B,signer:q})}}async function qZ({assetValue:X,recipient:Z,memo:G,feeRate:J,sender:Q}){if(!f(Z))throw new v.SwapKitError("toolbox_utxo_invalid_address",{address:Z});let q=Math.ceil(X.getBaseValue("number")+J*7500),$=await O(y).getUtxos({address:V(Q),fetchTxHex:!0,targetValue:q}),L=G?await b(G):null,W=[];W.push({address:Z,value:X.getBaseValue("number")});let{inputs:B,outputs:D}=K({inputs:$,outputs:W,feeRate:J,chain:y});if(!(B&&D))throw new v.SwapKitError("toolbox_utxo_insufficient_balance",{sender:Q,assetValue:X});let M=await F(),z=new u.TransactionBuilder(M(y));await Promise.all(B.map(async(Y)=>{let H=await O(y).getRawTx(Y.hash);z.addInput(u.Transaction.fromBuffer(Buffer.from(H,"hex")),Y.index)}));for(let Y of D){let H="address"in Y&&Y.address?Y.address:g(Q),I=await F(),_=u.address.toOutputScript(g(H),I(y));z.addOutput(_,Y.value)}if(L)z.addOutput(L,0);return{builder:z,utxos:B}}function pZ({broadcastTx:X,getFeeRates:Z,signer:G}){return async function J({recipient:Q,assetValue:q,feeOptionKey:$=v.FeeOption.Fast,...L}){let W=await G?.getAddress();if(!(G&&W))throw new v.SwapKitError("toolbox_utxo_no_signer");if(!Q)throw new v.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let B=L.feeRate||(await Z())[$],{builder:D,utxos:M}=await qZ({...L,assetValue:q,feeRate:B,recipient:Q,sender:W}),Y=(await G.signTransaction({builder:D,utxos:M})).toHex();return X(Y)}}async function uZ({assetValue:X,recipient:Z,memo:G,feeRate:J,sender:Q,setSigHashType:q}){let $=n(Z);if(!f($))throw new v.SwapKitError("toolbox_utxo_invalid_address",{address:$});let L=Math.ceil(X.getBaseValue("number")+J*7500),W=await O(y).getUtxos({address:V(Q),fetchTxHex:!1,targetValue:L}),B=Number(J.toFixed(0)),D=G?await b(G):null,M=[];if(M.push({address:g(Z),value:X.getBaseValue("number")}),D)M.push({script:D,value:0});let{inputs:z,outputs:Y}=K({inputs:W,outputs:M,feeRate:B,chain:y});if(!(z&&Y))throw new v.SwapKitError("toolbox_utxo_insufficient_balance",{sender:Q,assetValue:X});let H=await F(),I=new $Z.Psbt({network:H(y)});for(let{hash:_,index:S,witnessUtxo:R}of z)I.addInput({hash:_,index:S,witnessUtxo:R,sighashType:q?65:void 0});for(let _ of Y){let S="address"in _&&_.address?_.address:g(Q),R=_.script?D?{script:D,value:0}:void 0:{address:S,value:_.value};if(R)I.addOutput(R)}return{psbt:I,utxos:W,inputs:z}}function oZ(X){let Z=X.getAddress(0);return V(Z)}var u,v,$Z,y;var XX=N(()=>{u=require("@psf/bitcoincashjs-lib"),v=require("@swapkit/helpers"),$Z=require("bitcoinjs-lib");h();a();y=v.Chain.BitcoinCash});async function nZ(X,Z){switch(X){case k.Chain.BitcoinCash:return await PX(Z||{});case k.Chain.Zcash:return await NX(Z);case k.Chain.Bitcoin:case k.Chain.Dogecoin:case k.Chain.Litecoin:case k.Chain.Dash:return await E({chain:X,...Z});default:throw new k.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}var k;var LZ=N(()=>{k=require("@swapkit/helpers");XX();a();jX();XX()});var dZ={};UZ(dZ,{validateZcashAddress:()=>WX,toLegacyAddress:()=>g,toCashAddress:()=>n,stripToCashAddress:()=>V,stripPrefix:()=>p,nonSegwitChains:()=>s,isValidAddress:()=>IX,getUtxoToolbox:()=>nZ,getUtxoNetwork:()=>F,getUtxoApi:()=>O,getUTXOAddressValidator:()=>GZ,getScriptTypeForAddress:()=>d,getOutputSize:()=>r,getInputSize:()=>w,getDustThreshold:()=>JX,getCreateKeysForPath:()=>t,detectAddressNetwork:()=>_X,createZcashToolbox:()=>NX,createUTXOToolbox:()=>E,createCustomUtxoApi:()=>FZ,createBCHToolbox:()=>PX,compileMemo:()=>b,calculateTxSize:()=>l,bchValidateAddress:()=>f,addressFromKeysGetter:()=>yX,accumulative:()=>K,UtxoNetwork:()=>vX,UTXOScriptType:()=>$X,TX_OVERHEAD:()=>QX,OutputSizes:()=>i,OP_RETURN_OVERHEAD:()=>oX,MIN_TX_FEE:()=>wZ,InputSizes:()=>qX});module.exports=DZ(dZ);var iZ=N(()=>{LZ();XX();a();jX();h()});iZ();
|
|
3
|
+
`,bech32:"ztestsapling",bip32:{public:70617039,private:70615956},pubKeyHash:29,scriptHash:28,wif:239}});function IX(X){try{return GX(X),!0}catch(Z){return!1}}function _X(X){return GX(X)?.network}function g(X){let Z=GX(X);if(Z?.format==="legacy")return X;return AZ(Z)}function n(X){let Z=GX(X);return kZ(Z)}function GX(X){try{let Z=yZ(X);if(Z)return Z}catch(Z){}try{let Z=PZ(X);if(Z)return Z}catch(Z){}throw new TX.SwapKitError("toolbox_utxo_invalid_address",{address:X})}function yZ(X){try{let Z=CX.default.decode(X);if(Z.length!==21)throw new TX.SwapKitError("toolbox_utxo_invalid_address",{address:X});let G=Z[0],J=Array.prototype.slice.call(Z,1);switch(G){case T.legacy.mainnet.p2pkh:return{hash:J,format:"legacy",network:"mainnet",type:"p2pkh"};case T.legacy.mainnet.p2sh:return{hash:J,format:"legacy",network:"mainnet",type:"p2sh"};case T.legacy.testnet.p2pkh:return{hash:J,format:"legacy",network:"testnet",type:"p2pkh"};case T.legacy.testnet.p2sh:return{hash:J,format:"legacy",network:"testnet",type:"p2sh"};case T.bitpay.mainnet.p2pkh:return{hash:J,format:"bitpay",network:"mainnet",type:"p2pkh"};case T.bitpay.mainnet.p2sh:return{hash:J,format:"bitpay",network:"mainnet",type:"p2sh"};default:return}}catch(Z){return}}function PZ(X){if(X.indexOf(":")!==-1)try{return hX(X)}catch(Z){}else{let Z=["bitcoincash","bchtest","bchreg"];for(let G of Z)try{return hX(`${G}:${X}`)}catch(J){}}return}function hX(X){try{let{hash:Z,prefix:G,type:J}=HX.default.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call(Z,0),network:G==="bitcoincash"?"mainnet":"testnet",type:J==="P2PKH"?"p2pkh":"p2sh"}}catch(Z){return}}function AZ(X){let Z=T.legacy[X.network][X.type],G=Buffer.alloc(1+X.hash.length);return G[0]=Z,G.set(X.hash,1),CX.default.encode(G)}function kZ(X){let Z=X.network==="mainnet"?"bitcoincash":"bchtest",G=X.type==="p2pkh"?"P2PKH":"P2SH",J=new Uint8Array(X.hash);return HX.default.encode(Z,G,J)}var TX,CX,HX,vX,T;var cX=N(()=>{TX=require("@swapkit/helpers"),CX=x(require("bs58check")),HX=x(require("cashaddrjs"));((G)=>{G.Mainnet="mainnet";G.Testnet="testnet"})(vX||={});T={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}}});var P,JX=(X)=>{switch(X){case P.Chain.Bitcoin:case P.Chain.BitcoinCash:return 550;case P.Chain.Dash:case P.Chain.Litecoin:return 5500;case P.Chain.Dogecoin:return 1e5;case P.Chain.Zcash:return 546;default:throw new P.SwapKitError("toolbox_utxo_not_supported",{chain:X})}},K=({inputs:X,outputs:Z,feeRate:G=1,chain:J=P.Chain.Bitcoin})=>{let Q=Math.ceil(G),q=X[0]&&"address"in X[0]&&X[0].address?d(X[0].address):"P2PKH",$=X.filter((z)=>w(z)*Q<=z.value),W=QX+Z.reduce((z,Y)=>z+r(Y,q),0),L=Z.reduce((z,Y)=>z+Y.value,0),B=W*Q,D=0,M=[];for(let z of $){let Y=w(z),C=Q*Y;B+=C,D+=z.value,M.push(z);let I=B+L;if(D<I)continue;let _=D-I,S=Q*r({address:"",value:0},q);if(_>S){let b=S+B,AX=D-(L+b);if(AX>Math.max(w({})*Q,JX(J)))return{inputs:M,outputs:Z.concat({value:AX,address:""}),fee:b}}return{inputs:M,outputs:Z,fee:B}}return{fee:Q*l({inputs:X,outputs:Z,feeRate:Q})}};var pX=N(()=>{P=require("@swapkit/helpers");h()});function R(X){let Z=Buffer.from(X,"utf8");return WX.script.compile([WX.opcodes.OP_RETURN,Z])}var uX,WX,wZ=1000,QX=10,oX=10,KZ=41,RZ=107,$X,qX,i,d=(X)=>{if(X.startsWith("bc1")||X.startsWith("tb1")||X.startsWith("ltc1")||X.startsWith("tltc1"))return"P2WPKH";if(X.startsWith("1")||X.startsWith("m")||X.startsWith("n")||X.startsWith("bitcoincash:q")||X.startsWith("bitcoincash:p")||X.startsWith("q")||X.startsWith("p")||X.startsWith("L")||X.startsWith("M")||X.startsWith("3")||X.startsWith("D")||X.startsWith("A")||X.startsWith("9")||X.startsWith("X")||X.startsWith("7")||X.startsWith("y")||X.startsWith("t1")||X.startsWith("t3")||X.startsWith("tm"))return"P2PKH";throw new uX.SwapKitError("toolbox_utxo_invalid_address",{address:X})},l=({inputs:X,outputs:Z,feeRate:G})=>{let J=X[0]&&"address"in X[0]&&X[0].address?d(X[0].address):"P2PKH",Q=X.filter(($)=>$.value>=qX["type"in $?$.type:"P2PKH"]*Math.ceil(G)).reduce(($,W)=>$+w(W),0),q=Z?.reduce(($,W)=>$+r(W),0)||i[J];return QX+Q+q},w=(X)=>{if("type"in X)return qX[X.type];if("address"in X&&X.address)return qX[d(X.address)];return KZ+RZ},r=(X,Z)=>{if(X?.script)return oX+X.script.length+(X.script.length>=74?2:1);if(Z)return i[Z];return i.P2PKH};var nX=N(()=>{uX=require("@swapkit/helpers"),WX=require("bitcoinjs-lib");((G)=>{G.P2PKH="P2PKH";G.P2WPKH="P2WPKH"})($X||={});qX={["P2PKH"]:148,["P2WPKH"]:68},i={["P2PKH"]:34,["P2WPKH"]:31}});var h=N(()=>{lX();cX();pX();nX()});function EZ(X,Z=!1){let G=aX.hash160(X),J=Z?Buffer.from([28,186]):Buffer.from([28,184]),Q=Buffer.concat([J,G]);return FX.default.encode(Q)}function LX(X){try{if(X.startsWith("z"))return console.warn("Shielded Zcash addresses (z-addresses) are not supported. Use transparent addresses (t1/t3) only."),!1;let Z=X.startsWith("t1"),G=X.startsWith("t3");if(!(Z||G))return!1;let{isStagenet:J}=H.SKConfig.get("envs");if(Z&&J||G&&!J)return!1;return fZ(X,tX)}catch{return!1}}function fZ(X,Z){try{let G=FX.default.decode(X);if(G.length<21)return!1;let J=G[0];return J===Z.pubKeyHash||J===Z.scriptHash}catch{return!1}}async function SZ({phrase:X,derivationPathString:Z}){let G=iX.mnemonicToSeedSync(X),Q=dX.HDKey.fromMasterSeed(G).derive(Z);if(!Q.privateKey)throw new Error("Unable to derive private key");let q=VZ.fromPrivateKey(Buffer.from(Q.privateKey),{network:tX}),{isStagenet:$}=H.SKConfig.get("envs"),W=EZ(q.publicKey,$);return{getAddress(){return Promise.resolve(W)},signTransaction(L){for(let B=0;B<L.inputCount;B++)L.signInput(B,q);return Promise.resolve(L)}}}async function NX(X){let Z=await c.match(X).with({signer:c.P.not(c.P.nullish)},({signer:W})=>Promise.resolve(W)).with({phrase:c.P.string},({phrase:W,derivationPath:L,index:B=0})=>{let D=L||H.NetworkDerivationPath[H.Chain.Zcash]||[44,133,0,0,0],M=H.updateDerivationPath(D,{index:B}),z=H.derivationPathToString(M);return SZ({phrase:W,derivationPathString:z})}).otherwise(()=>Promise.resolve(void 0)),{getFeeRates:G,broadcastTx:J,...Q}=await E({chain:H.Chain.Zcash,signer:Z});function q(W){return W.getAddress()}async function $({recipient:W,assetValue:L,feeOptionKey:B=H.FeeOption.Fast,...D}){let M=await Z?.getAddress();if(!(Z&&M))throw new H.SwapKitError("toolbox_utxo_no_signer");let z=D.feeRate||(await G())[B],Y={...D,assetValue:L,feeRate:z,recipient:W,sender:M},{psbt:C}=await Q.createTransaction(Y),I=await Z.signTransaction(C);I.finalizeAllInputs();let _=I.extractTransaction().toHex();return J(_)}return{...Q,broadcastTx:J,getFeeRates:G,transfer:$,getAddressFromKeys:q,validateAddress:LX}}var rX,dX,iX,H,aX,FX,sX,c,bZ,tX,VZ;var jX=N(()=>{rX=x(require("@bitcoinerlab/secp256k1")),dX=require("@scure/bip32"),iX=require("@scure/bip39"),H=require("@swapkit/helpers"),aX=require("bitcoinjs-lib/src/crypto"),FX=x(require("bs58check")),sX=require("ecpair"),c=require("ts-pattern");h();a();bZ=H.Chain.Zcash,tX=F()(bZ);VZ=sX.ECPairFactory(rX.default)});function xZ({inputs:X,outputs:Z,chain:G,psbt:J,sender:Q,compiledMemo:q}){for(let $ of X){let W=!!$.witnessUtxo&&!s.includes(G)&&{witnessUtxo:$.witnessUtxo},L=s.includes(G)&&{nonWitnessUtxo:$.txHex?Buffer.from($.txHex,"hex"):void 0};J.addInput({hash:$.hash,index:$.index,...W,...L})}for(let $ of Z){let W="address"in $&&$.address?$.address:Q,L=$.script;if(L&&!q)continue;let B=L?{script:q,value:0}:{address:W,value:$.value};A.initEccLib(BX.default),J.addOutput(B)}return{psbt:J,inputs:X}}async function ZZ({assetValue:X,recipient:Z,memo:G,feeRate:J,sender:Q,fetchTxHex:q=!1}){let $=X.chain,W=G?await R(G):null,L=await QZ({assetValue:X,recipient:Z,memo:G,sender:Q,fetchTxHex:q}),{inputs:B,outputs:D}=K({...L,feeRate:J,chain:$});if(!(B&&D))throw new j.SwapKitError("toolbox_utxo_insufficient_balance",{sender:Q,assetValue:X});let M=await F(),z=new A.Psbt({network:M($)});if($===j.Chain.Dogecoin)z.setMaximumFeeRate(650000000);let{psbt:Y,inputs:C}=await xZ({inputs:B,outputs:D,chain:$,psbt:z,sender:Q,compiledMemo:W});return{psbt:Y,utxos:L.inputs,inputs:C}}async function GZ(){let X=await F();return function Z({address:G,chain:J}){if(J===j.Chain.BitcoinCash)return f(G);if(J===j.Chain.Zcash)return LX(G);try{return A.initEccLib(BX.default),A.address.toOutputScript(G,X(J)),!0}catch(Q){return!1}}}async function mZ({chain:X,phrase:Z,derivationPath:G}){let J=(await t(X))({phrase:Z,derivationPath:G});async function Q($){return await $.signAllInputs(J),$}async function q(){return(await yX(X))(J)}return{getAddress:q,signTransaction:Q}}async function E({chain:X,...Z}){let G="phrase"in Z?Z.phrase:void 0,J="index"in Z?Z.index||0:0,Q=j.derivationPathToString("derivationPath"in Z&&Z.derivationPath?Z.derivationPath:j.updateDerivationPath(j.NetworkDerivationPath[X],{index:J})),q=G?await mZ({chain:X,phrase:G,derivationPath:Q}):("signer"in Z)?Z.signer:void 0;function $(){return Promise.resolve(q?.getAddress())}let W=await yX(X),L=await GZ(),B=await t(X);return{accumulative:K,calculateTxSize:l,getAddressFromKeys:W,getAddress:$,validateAddress:(D)=>L({address:D,chain:X}),broadcastTx:(D)=>O(X).broadcastTx(D),createTransaction:ZZ,createKeysForPath:B,getFeeRates:()=>e(X),getInputsOutputsFee:JZ,transfer:hZ(q),getPrivateKeyFromMnemonic:(D)=>{return B(D).toWIF()},getBalance:EX(X),estimateTransactionFee:lZ(X),estimateMaxSendableAmount:gZ(X)}}async function JZ({assetValue:X,feeOptionKey:Z=j.FeeOption.Fast,feeRate:G,memo:J,sender:Q,recipient:q}){let $=X.chain,W=await QZ({assetValue:X,sender:Q,memo:J,recipient:q}),L=G?Math.floor(G):(await e($))[Z];return K({...W,feeRate:L,chain:$})}function gZ(X){return async function Z({from:G,memo:J,feeRate:Q,feeOptionKey:q=j.FeeOption.Fast,recipients:$=1}){let W=await O(X).getAddressData(G),L=Q?Math.ceil(Q):(await e(X))[q],B=W?.utxo.map((C)=>({...C,type:"P2PKH",hash:""})).filter((C)=>C.value>Math.max(JX(X),w(C)*L));if(!B?.length)return j.AssetValue.from({chain:X});let D=j.AssetValue.from({chain:X,value:B.reduce((C,I)=>C+I.value,0)}),M=typeof $==="number"?Array.from({length:$},()=>({address:G,value:0})):$;if(J){let C=await R(J);M.push({address:G,script:C,value:0})}let Y=l({inputs:B,outputs:M,feeRate:L})*L;return D.sub(Y)}}function lZ(X){return async(Z)=>{let G=await JZ(Z);return j.AssetValue.from({chain:X,value:j.SwapKitNumber.fromBigInt(BigInt(G.fee),8).getValue("string")})}}async function t(X){let Z=await F();switch(X){case j.Chain.BitcoinCash:return function G({phrase:J,derivationPath:Q=`${j.DerivationPath.BCH}/0`,wif:q}){let $=Z(X);if(q)return DX.ECPair.fromWIF(q,$);if(!J)throw new j.SwapKitError("toolbox_utxo_invalid_params",{error:"No phrase provided"});return DX.HDNode.fromSeedBuffer(Buffer.from(OX.mnemonicToSeedSync(J)),$).derivePath(Q).keyPair};case j.Chain.Bitcoin:case j.Chain.Dogecoin:case j.Chain.Litecoin:case j.Chain.Zcash:case j.Chain.Dash:return function G({phrase:J,wif:Q,derivationPath:q}){if(!(Q||J))throw new j.SwapKitError("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let $=eX.ECPairFactory(BX.default),W=Z(X);if(Q)return $.fromWIF(Q,W);let L=OX.mnemonicToSeedSync(J),B=XZ.HDKey.fromMasterSeed(L,W).derive(q);if(!B.privateKey)throw new j.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not get private key from phrase"});return $.fromPrivateKey(Buffer.from(B.privateKey),{network:W})};default:throw new j.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}async function yX(X){let Z=await F();return function G(J){if(!J)throw new j.SwapKitError("toolbox_utxo_invalid_params",{error:"Keys must be provided"});let Q=s.includes(X)?A.payments.p2pkh:A.payments.p2wpkh,{address:q}=Q({pubkey:J.publicKey,network:Z(X)});if(!q)throw new j.SwapKitError("toolbox_utxo_invalid_address",{error:"Address not defined"});return q}}function hZ(X){return async function Z({memo:G,recipient:J,feeOptionKey:Q,feeRate:q,assetValue:$}){let W=await X?.getAddress(),L=$.chain;if(!(X&&W))throw new j.SwapKitError("toolbox_utxo_no_signer");if(!J)throw new j.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let B=q||(await e(L))[Q||j.FeeOption.Fast],{psbt:D}=await ZZ({recipient:J,feeRate:B,sender:W,assetValue:$,memo:G}),M=await X.signTransaction(D);return M.finalizeAllInputs(),O(L).broadcastTx(M.extractTransaction().toHex())}}async function e(X){let Z=await O(X).getSuggestedTxFee();return{[j.FeeOption.Average]:Z,[j.FeeOption.Fast]:j.applyFeeMultiplier(Z,j.FeeOption.Fast),[j.FeeOption.Fastest]:j.applyFeeMultiplier(Z,j.FeeOption.Fastest)}}async function QZ({assetValue:X,recipient:Z,memo:G,sender:J,fetchTxHex:Q=!1}){let q=X.chain,$=(await e(q))[j.FeeOption.Fastest],W=Q||s.includes(q),L=X.getBaseValue("number"),B=Math.ceil(L+$*5000);return{inputs:await O(q).getUtxos({address:J,fetchTxHex:W,targetValue:B}),outputs:[{address:Z,value:L},...G?[{address:"",script:await R(G),value:0}]:[]]}}var j,A,eX,BX,DX,XZ,OX,s;var a=N(()=>{j=require("@swapkit/helpers"),A=require("bitcoinjs-lib"),eX=require("ecpair");zX();h();XX();BX=x(require("@bitcoinerlab/secp256k1")),DX=require("@psf/bitcoincashjs-lib"),XZ=require("@scure/bip32"),OX=require("@scure/bip39");jX();s=[j.Chain.Dash,j.Chain.Dogecoin]});function p(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function f(X){let Z=p(X);return IX(Z)&&_X(Z)==="mainnet"}function V(X){return p(n(X))}async function cZ(X){async function Z({builder:J,utxos:Q}){return Q.forEach((q,$)=>{J.sign($,X,void 0,65,q.witnessUtxo?.value)}),J.build()}return{getAddress:()=>{let J=X.getAddress(0);return Promise.resolve(V(J))},signTransaction:Z}}async function PX(X){let Z="phrase"in X?X.phrase:void 0,G="index"in X?X.index||0:0,J=v.derivationPathToString("derivationPath"in X&&X.derivationPath?X.derivationPath:v.updateDerivationPath(v.NetworkDerivationPath[y],{index:G})),Q=Z?(await t(y))({phrase:Z,derivationPath:J}):void 0,q=Q?await cZ(Q):("signer"in X)?X.signer:void 0;function $(){return Promise.resolve(q?.getAddress())}let{getBalance:W,getFeeRates:L,broadcastTx:B,...D}=await E({chain:y});function M(z,Y=!0){return W(p(n(z)))}return{...D,getAddress:$,broadcastTx:B,createTransaction:qZ,buildTx:uZ,getAddressFromKeys:oZ,getBalance:M,getFeeRates:L,stripPrefix:p,stripToCashAddress:V,validateAddress:f,transfer:pZ({getFeeRates:L,broadcastTx:B,signer:q})}}async function qZ({assetValue:X,recipient:Z,memo:G,feeRate:J,sender:Q}){if(!f(Z))throw new v.SwapKitError("toolbox_utxo_invalid_address",{address:Z});let q=Math.ceil(X.getBaseValue("number")+J*7500),$=await O(y).getUtxos({address:V(Q),fetchTxHex:!0,targetValue:q}),W=G?await R(G):null,L=[];L.push({address:Z,value:X.getBaseValue("number")});let{inputs:B,outputs:D}=K({inputs:$,outputs:L,feeRate:J,chain:y});if(!(B&&D))throw new v.SwapKitError("toolbox_utxo_insufficient_balance",{sender:Q,assetValue:X});let M=await F(),z=new u.TransactionBuilder(M(y));await Promise.all(B.map(async(Y)=>{let C=await O(y).getRawTx(Y.hash);z.addInput(u.Transaction.fromBuffer(Buffer.from(C,"hex")),Y.index)}));for(let Y of D){let C="address"in Y&&Y.address?Y.address:g(Q),I=await F(),_=u.address.toOutputScript(g(C),I(y));z.addOutput(_,Y.value)}if(W)z.addOutput(W,0);return{builder:z,utxos:B}}function pZ({broadcastTx:X,getFeeRates:Z,signer:G}){return async function J({recipient:Q,assetValue:q,feeOptionKey:$=v.FeeOption.Fast,...W}){let L=await G?.getAddress();if(!(G&&L))throw new v.SwapKitError("toolbox_utxo_no_signer");if(!Q)throw new v.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let B=W.feeRate||(await Z())[$],{builder:D,utxos:M}=await qZ({...W,assetValue:q,feeRate:B,recipient:Q,sender:L}),Y=(await G.signTransaction({builder:D,utxos:M})).toHex();return X(Y)}}async function uZ({assetValue:X,recipient:Z,memo:G,feeRate:J,sender:Q,setSigHashType:q}){let $=n(Z);if(!f($))throw new v.SwapKitError("toolbox_utxo_invalid_address",{address:$});let W=Math.ceil(X.getBaseValue("number")+J*7500),L=await O(y).getUtxos({address:V(Q),fetchTxHex:!1,targetValue:W}),B=Number(J.toFixed(0)),D=G?await R(G):null,M=[];if(M.push({address:g(Z),value:X.getBaseValue("number")}),D)M.push({script:D,value:0});let{inputs:z,outputs:Y}=K({inputs:L,outputs:M,feeRate:B,chain:y});if(!(z&&Y))throw new v.SwapKitError("toolbox_utxo_insufficient_balance",{sender:Q,assetValue:X});let C=await F(),I=new $Z.Psbt({network:C(y)});for(let{hash:_,index:S,witnessUtxo:b}of z)I.addInput({hash:_,index:S,witnessUtxo:b,sighashType:q?65:void 0});for(let _ of Y){let S="address"in _&&_.address?_.address:g(Q),b=_.script?D?{script:D,value:0}:void 0:{address:S,value:_.value};if(b)I.addOutput(b)}return{psbt:I,utxos:L,inputs:z}}function oZ(X){let Z=X.getAddress(0);return V(Z)}var u,v,$Z,y;var XX=N(()=>{u=require("@psf/bitcoincashjs-lib"),v=require("@swapkit/helpers"),$Z=require("bitcoinjs-lib");h();a();y=v.Chain.BitcoinCash});async function nZ(X,Z){switch(X){case k.Chain.BitcoinCash:return await PX(Z||{});case k.Chain.Zcash:return await NX(Z);case k.Chain.Bitcoin:case k.Chain.Dogecoin:case k.Chain.Litecoin:case k.Chain.Dash:return await E({chain:X,...Z});default:throw new k.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}var k;var WZ=N(()=>{k=require("@swapkit/helpers");XX();a();jX();XX()});var dZ={};UZ(dZ,{validateZcashAddress:()=>LX,toLegacyAddress:()=>g,toCashAddress:()=>n,stripToCashAddress:()=>V,stripPrefix:()=>p,nonSegwitChains:()=>s,isValidAddress:()=>IX,getUtxoToolbox:()=>nZ,getUtxoNetwork:()=>F,getUtxoApi:()=>O,getUTXOAddressValidator:()=>GZ,getScriptTypeForAddress:()=>d,getOutputSize:()=>r,getInputSize:()=>w,getDustThreshold:()=>JX,getCreateKeysForPath:()=>t,detectAddressNetwork:()=>_X,createZcashToolbox:()=>NX,createUTXOToolbox:()=>E,createCustomUtxoApi:()=>FZ,createBCHToolbox:()=>PX,compileMemo:()=>R,calculateTxSize:()=>l,bchValidateAddress:()=>f,addressFromKeysGetter:()=>yX,accumulative:()=>K,UtxoNetwork:()=>vX,UTXOScriptType:()=>$X,TX_OVERHEAD:()=>QX,OutputSizes:()=>i,OP_RETURN_OVERHEAD:()=>oX,MIN_TX_FEE:()=>wZ,InputSizes:()=>qX});module.exports=DZ(dZ);var iZ=N(()=>{WZ();XX();a();jX();h()});iZ();
|
|
4
4
|
|
|
5
|
-
//# debugId=
|
|
5
|
+
//# debugId=66CF851B082B35C564756E2164756E21
|
|
6
6
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"import {\n Chain,\n RequestClient,\n SKConfig,\n SwapKitError,\n type UTXOChain,\n warnOnce,\n} from \"@swapkit/helpers\";\nimport { networks } from \"bitcoinjs-lib\";\nimport { uniqid } from \"../../utils\";\n\n// @ts-ignore\nimport coininfo from \"coininfo\";\n\ntype BlockchairParams<T> = T & { chain: Chain; apiKey?: string };\ntype BlockchairFetchUnspentUtxoParams = BlockchairParams<{\n offset?: number;\n limit?: number;\n address: string;\n targetValue?: number;\n accumulativeValue?: number;\n}>;\n\nasync function broadcastUTXOTx({ chain, txHash }: { chain: Chain; txHash: string }) {\n const rpcUrl = SKConfig.get(\"rpcUrls\")[chain];\n const body = JSON.stringify({\n jsonrpc: \"2.0\",\n method: \"sendrawtransaction\",\n params: [txHash],\n id: uniqid(),\n });\n\n const response = await RequestClient.post<{\n id: string;\n result: string;\n error: { message: string; code?: number } | null;\n }>(rpcUrl, { headers: { \"Content-Type\": \"application/json\" }, body });\n\n if (response.error) {\n throw new SwapKitError(\"toolbox_utxo_broadcast_failed\", {\n error: response.error?.message,\n });\n }\n\n if (response.result.includes('\"code\":-26')) {\n throw new SwapKitError(\"toolbox_utxo_invalid_transaction\", {\n error: \"Transaction amount was too low\",\n });\n }\n\n return response.result;\n}\n\nfunction baseUrl(chain: Chain) {\n return `https://api.blockchair.com/${mapChainToBlockchairChain(chain)}`;\n}\n\nfunction getDefaultTxFeeByChain(chain: Chain) {\n switch (chain) {\n case Chain.Bitcoin:\n return 5;\n case Chain.Dogecoin:\n return 10000;\n case Chain.Litecoin:\n return 1;\n case Chain.Zcash:\n return 1;\n default:\n return 2;\n }\n}\n\nfunction mapChainToBlockchairChain(chain: Chain) {\n switch (chain) {\n case Chain.BitcoinCash:\n return \"bitcoin-cash\";\n case Chain.Litecoin:\n return \"litecoin\";\n case Chain.Dash:\n return \"dash\";\n case Chain.Dogecoin:\n return \"dogecoin\";\n case Chain.Zcash:\n return \"zcash\";\n case Chain.Polkadot:\n return \"polkadot\";\n default:\n return \"bitcoin\";\n }\n}\n\nasync function getSuggestedTxFee(chain: Chain) {\n try {\n //Use Bitgo API for fee estimation\n //Refer: https://app.bitgo.com/docs/#operation/v2.tx.getfeeestimate\n const { feePerKb } = await RequestClient.get<{\n feePerKb: number;\n cpfpFeePerKb: number;\n numBlocks: number;\n feeByBlockTarget: { 1: number; 3: number };\n }>(`https://app.bitgo.com/api/v2/${chain.toLowerCase()}/tx/fee`);\n const suggestedFee = feePerKb / 1000;\n\n return Math.max(suggestedFee, getDefaultTxFeeByChain(chain));\n } catch (_error) {\n return getDefaultTxFeeByChain(chain);\n }\n}\n\nasync function blockchairRequest<T>(url: string, apiKey?: string): Promise<T> {\n const response = await RequestClient.get<BlockchairResponse<T>>(\n `${url}${apiKey ? `${url.includes(\"?\") ? \"&\" : \"?\"}key=${apiKey}` : \"\"}`,\n );\n\n if (!response || response.context.code !== 200)\n throw new SwapKitError(\"toolbox_utxo_api_error\", {\n error: `Failed to query ${url}`,\n });\n\n return response.data as T;\n}\n\nasync function getAddressData({ address, chain, apiKey }: BlockchairParams<{ address?: string }>) {\n if (!address)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Address is required\",\n });\n\n try {\n const response = await blockchairRequest<BlockchairAddressResponse>(\n `${baseUrl(chain)}/dashboards/address/${address}?transaction_details=true`,\n apiKey,\n );\n\n return response[address];\n } catch (_error) {\n return { utxo: [], address: { balance: 0, transaction_count: 0 } };\n }\n}\n\nasync function getUnconfirmedBalance({\n address,\n chain,\n apiKey,\n}: BlockchairParams<{ address?: string }>) {\n const response = await getAddressData({ address, chain, apiKey });\n\n return response?.address.balance || 0;\n}\n\nasync function getRawTx({ chain, apiKey, txHash }: BlockchairParams<{ txHash?: string }>) {\n if (!txHash)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"TxHash is required\",\n });\n\n try {\n const rawTxResponse = await blockchairRequest<BlockchairRawTransactionResponse>(\n `${baseUrl(chain)}/raw/transaction/${txHash}`,\n apiKey,\n );\n return rawTxResponse?.[txHash]?.raw_transaction || \"\";\n } catch (error) {\n console.error(\"Failed to fetch raw transaction:\", error);\n return \"\";\n }\n}\n\nasync function fetchUtxosBatch({\n chain,\n address,\n apiKey,\n offset = 0,\n limit = 30,\n}: BlockchairFetchUnspentUtxoParams) {\n // Only fetch the fields we need to reduce payload size\n const fields = \"is_spent,transaction_hash,index,value,script_hex,block_id,spending_signature_hex\";\n\n const response = await blockchairRequest<BlockchairOutputsResponse[]>(\n // TODO - remove max value limit once we updated bitcoinjs-lib to support larger values\n `${baseUrl(chain)}/outputs?q=recipient(${address}),is_spent(false),value(..2000000000000000)&s=value(desc)&fields=${fields}&limit=${limit}&offset=${offset}`,\n apiKey,\n );\n\n const txs = response.map(\n ({\n is_spent,\n script_hex,\n block_id,\n transaction_hash,\n index,\n value,\n spending_signature_hex,\n }) => ({\n hash: transaction_hash,\n index,\n value,\n txHex: spending_signature_hex,\n script_hex,\n is_confirmed: block_id !== -1,\n is_spent,\n }),\n );\n\n return txs;\n}\n\nfunction getTxsValue(txs: Awaited<ReturnType<typeof fetchUtxosBatch>>) {\n return txs.reduce((total, tx) => total + tx.value, 0);\n}\n\nfunction pickMostValuableTxs(\n txs: Awaited<ReturnType<typeof fetchUtxosBatch>>,\n targetValue?: number,\n): Awaited<ReturnType<typeof fetchUtxosBatch>> {\n const sortedTxs = [...txs].sort((a, b) => b.value - a.value);\n\n if (targetValue) {\n const result = [];\n let accumulated = 0;\n\n for (const utxo of sortedTxs) {\n result.push(utxo);\n accumulated += utxo.value;\n if (accumulated >= targetValue) break;\n }\n\n return result;\n }\n\n return sortedTxs;\n}\n\nasync function getUnspentUtxos({\n chain,\n address,\n apiKey,\n targetValue,\n accumulativeValue = 0,\n offset = 0,\n limit = 30,\n}: BlockchairFetchUnspentUtxoParams): Promise<Awaited<ReturnType<typeof fetchUtxosBatch>>> {\n if (!address)\n throw new SwapKitError(\"toolbox_utxo_invalid_params\", {\n error: \"Address is required\",\n });\n\n try {\n const utxos = await fetchUtxosBatch({\n targetValue,\n chain,\n address,\n apiKey,\n offset,\n limit,\n });\n const utxosCount = utxos.length;\n const isComplete = utxosCount < limit;\n\n const unspentUtxos = utxos.filter(({ is_spent }) => !is_spent);\n\n const unspentUtxosValue = getTxsValue(unspentUtxos);\n const totalCurrentValue = accumulativeValue + unspentUtxosValue;\n\n const limitReached = targetValue && totalCurrentValue >= targetValue;\n\n if (isComplete || limitReached) {\n return pickMostValuableTxs(unspentUtxos, targetValue);\n }\n\n const nextBatch = await getUnspentUtxos({\n chain,\n address,\n apiKey,\n offset: offset + limit,\n limit,\n accumulativeValue: totalCurrentValue,\n targetValue,\n });\n\n const allUtxos = [...unspentUtxos, ...nextBatch];\n\n return pickMostValuableTxs(allUtxos, targetValue);\n } catch (error) {\n console.error(\"Failed to fetch unspent UTXOs:\", error);\n return [];\n }\n}\n\nasync function getUtxos({\n address,\n chain,\n apiKey,\n fetchTxHex = true,\n targetValue,\n}: BlockchairParams<{\n address: string;\n fetchTxHex?: boolean;\n targetValue?: number;\n}>) {\n const utxos = await getUnspentUtxos({ chain, address, apiKey, targetValue });\n\n const results = [];\n\n for (const { hash, index, script_hex, value } of utxos) {\n let txHex: string | undefined;\n if (fetchTxHex) {\n txHex = await getRawTx({ txHash: hash, chain, apiKey });\n }\n results.push({\n address,\n hash,\n index,\n txHex,\n value,\n witnessUtxo: { value, script: Buffer.from(script_hex, \"hex\") },\n });\n }\n return results;\n}\n\nfunction utxoApi(chain: UTXOChain) {\n const apiKey = SKConfig.get(\"apiKeys\").blockchair || \"\";\n\n warnOnce(!apiKey, \"No Blockchair API key found. Functionality will be limited.\");\n\n return {\n broadcastTx: (txHash: string) => broadcastUTXOTx({ txHash, chain }),\n getRawTx: (txHash: string) => getRawTx({ txHash, chain, apiKey }),\n getSuggestedTxFee: () => getSuggestedTxFee(chain),\n getBalance: (address: string) => getUnconfirmedBalance({ address, chain, apiKey }),\n getAddressData: (address: string) => getAddressData({ address, chain, apiKey }),\n getUtxos: (params: {\n address: string;\n fetchTxHex?: boolean;\n targetValue?: number;\n }) => getUtxos({ ...params, chain, apiKey }),\n };\n}\n\n/**\n * \"Factory\" to ensure typing for custom UTXO APIs\n */\nexport function createCustomUtxoApi(methods: ReturnType<typeof utxoApi>) {\n return methods;\n}\n\nexport function getUtxoApi(chain: UTXOChain) {\n const customUtxoApi = SKConfig.get(\"apis\")[chain];\n\n if (customUtxoApi) {\n warnOnce(true, \"Using custom UTXO API. Be sure to implement all methods to avoid issues.\");\n return customUtxoApi as ReturnType<typeof utxoApi>;\n }\n\n return utxoApi(chain);\n}\n\n// Define Zcash network objects that match ECPair's expected interface\nconst ZCASH_MAINNET = {\n messagePrefix: \"\\x19Zcash Signed Message:\\n\",\n bech32: \"zc\",\n bip32: {\n public: 0x0488b21e,\n private: 0x0488ade4,\n },\n pubKeyHash: 0x1c, // 28 in decimal - correct for Zcash mainnet\n scriptHash: 0x1c, // 28 in decimal\n wif: 0x80, // 128 in decimal\n};\n\nconst ZCASH_TESTNET = {\n messagePrefix: \"\\x19Zcash Signed Message:\\n\",\n bech32: \"ztestsapling\",\n bip32: {\n public: 0x043587cf,\n private: 0x04358394,\n },\n pubKeyHash: 0x1d, // 29 in decimal - correct for Zcash testnet\n scriptHash: 0x1c, // 28 in decimal\n wif: 0xef, // 239 in decimal\n};\n\nexport function getUtxoNetwork() {\n return function getNetwork(chain: Chain) {\n switch (chain) {\n case Chain.Bitcoin:\n return networks.bitcoin;\n case Chain.BitcoinCash:\n return coininfo.bitcoincash.main.toBitcoinJS();\n case Chain.Dash:\n return coininfo.dash.main.toBitcoinJS();\n case Chain.Litecoin:\n return coininfo.litecoin.main.toBitcoinJS();\n\n case Chain.Dogecoin: {\n const bip32 = { private: 0x04358394, public: 0x043587cf };\n const test = coininfo.dogecoin.test;\n test.versions.bip32 = bip32;\n return coininfo.dogecoin.main.toBitcoinJS();\n }\n\n case Chain.Zcash: {\n // Get Zcash network configuration using our custom objects\n const { isStagenet } = SKConfig.get(\"envs\");\n return isStagenet ? ZCASH_TESTNET : ZCASH_MAINNET;\n }\n\n default:\n throw new SwapKitError(\"toolbox_utxo_not_supported\", { chain });\n }\n };\n}\n\ninterface BlockchairVin {\n txid: string;\n vout: number;\n scriptSig: {\n asm: string;\n hex: string;\n };\n sequence: number;\n}\n\ninterface BlockchairVout {\n value: number;\n n: number;\n scriptPubKey: {\n asm: string;\n hex: string;\n address: string;\n type: string;\n addresses: string[];\n reqSigs: number;\n };\n}\n\ninterface BlockchairTransaction {\n block_id: number;\n hash: string;\n time: string;\n balance_change: number;\n}\n\ninterface BlockchairUtxo {\n block_id: number;\n transaction_hash: string;\n index: number;\n value: number;\n}\n\ninterface BlockchairAddressCoreData {\n type: string;\n script_hex: string;\n balance: number;\n balance_usd: number;\n received: number;\n received_usd: number;\n spent: number;\n spent_usd: number;\n output_count: number;\n unspent_output_count: number;\n first_seen_receiving: string;\n last_seen_receiving: string;\n first_seen_spending: null | string;\n last_seen_spending: null | string;\n transaction_count: number;\n scripthash_type: null | string;\n}\n\ninterface BlockchairInputOutputCommonData {\n block_id: number;\n transaction_id: number;\n index: number;\n transaction_hash: string;\n date: string;\n time: string;\n value: number;\n value_usd: number;\n recipient: string;\n type: string;\n script_hex: string;\n is_from_coinbase: boolean;\n is_spendable: boolean | null;\n is_spent: boolean;\n lifespan: number | null;\n cdd: number | null;\n}\n\ninterface BlockchairSpendingBlockData {\n spending_block_id: number | null;\n spending_transaction_id: number | null;\n spending_index: number | null;\n spending_transaction_hash: string | null;\n spending_date: string | null;\n spending_time: string | null;\n spending_value_usd: number | null;\n spending_sequence: number | null;\n spending_signature_hex: string | null;\n spending_witness: string | null;\n}\n\ninterface BlockchairAddressResponse {\n [key: string]: {\n address: BlockchairAddressCoreData;\n transactions: BlockchairTransaction[];\n utxo: BlockchairUtxo[];\n };\n}\n\ninterface BlockchairOutputsResponse\n extends BlockchairSpendingBlockData,\n BlockchairInputOutputCommonData {}\n\ninterface BlockchairRawTransactionResponse {\n [key: string]: {\n raw_transaction: string;\n decoded_raw_transaction: {\n txid: string;\n hash: string;\n version: number;\n size: number;\n vsize: number;\n weight: number;\n locktime: number;\n vin: BlockchairVin[];\n vout: BlockchairVout[];\n };\n };\n}\n\ninterface BlockchairResponse<T> {\n data: T;\n context: {\n code: number;\n source: string;\n results: number;\n state: number;\n market_price_usd: number;\n cache: {\n live: boolean;\n duration: number;\n since: string;\n until: string;\n time: any;\n };\n api: {\n version: string;\n last_major_update: string;\n next_major_update: null | string;\n documentation: string;\n notice: string;\n };\n servers: string;\n time: number;\n render_time: number;\n full_time: number;\n request_cost: number;\n };\n}\n",
|
|
7
7
|
"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 const decoded = decodeBase58Address(address);\n if (decoded) {\n return decoded;\n }\n } catch (_error) {\n // Try to decode as cashaddr if base58 decoding fails.\n }\n try {\n const decoded = decodeCashAddress(address);\n if (decoded) {\n return decoded;\n }\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 return;\n }\n } catch (_error) {\n return;\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 return;\n}\n\nfunction decodeCashAddressWithPrefix(address: string) {\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 return;\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",
|
|
8
8
|
"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 case Chain.Zcash:\n return 546;\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",
|
|
9
|
-
"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\")
|
|
9
|
+
"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 // Native SegWit (Bech32) addresses - P2WPKH\n // Bitcoin: bc1 (mainnet), tb1 (testnet)\n // Litecoin: ltc1 (mainnet), tltc1 (testnet)\n if (\n address.startsWith(\"bc1\") ||\n address.startsWith(\"tb1\") ||\n address.startsWith(\"ltc1\") ||\n address.startsWith(\"tltc1\")\n ) {\n // Note: bc1p/tb1p are Taproot (P2TR) addresses, but we're treating them as P2WPKH for now\n // since P2TR is not yet implemented\n return UTXOScriptType.P2WPKH;\n }\n\n // P2SH addresses (Pay-to-Script-Hash) - Currently commented out but kept for future use\n // Bitcoin: 3 (mainnet), 2 (testnet)\n // Litecoin: M or 2 (mainnet), Q (testnet)\n // Dash: 7 (mainnet)\n // if (address.startsWith('3') || address.startsWith('2') ||\n // address.startsWith('M') || address.startsWith('Q') ||\n // address.startsWith('7')) {\n // return UTXOScriptType.P2SH;\n // }\n\n // Legacy P2PKH addresses\n // Bitcoin: 1 (mainnet), m/n (testnet)\n // Bitcoin Cash: bitcoincash:q (CashAddr format), q (legacy), 1 (legacy)\n // Litecoin: L (mainnet), m/n (testnet)\n // Dogecoin: D (mainnet), n (testnet)\n // Dash: X (mainnet), y (testnet)\n // Zcash: t1 (transparent mainnet), tm (testnet)\n if (\n // Bitcoin legacy\n address.startsWith(\"1\") ||\n address.startsWith(\"m\") ||\n address.startsWith(\"n\") ||\n // Bitcoin Cash\n address.startsWith(\"bitcoincash:q\") ||\n address.startsWith(\"bitcoincash:p\") ||\n address.startsWith(\"q\") ||\n address.startsWith(\"p\") ||\n // Litecoin legacy (also uses 3 for P2SH but treating as P2PKH for now)\n address.startsWith(\"L\") ||\n address.startsWith(\"M\") ||\n address.startsWith(\"3\") ||\n // Dogecoin\n address.startsWith(\"D\") ||\n address.startsWith(\"A\") ||\n address.startsWith(\"9\") ||\n // Dash\n address.startsWith(\"X\") ||\n address.startsWith(\"7\") ||\n address.startsWith(\"y\") ||\n // Zcash transparent addresses\n address.startsWith(\"t1\") ||\n address.startsWith(\"t3\") ||\n address.startsWith(\"tm\")\n ) {\n return UTXOScriptType.P2PKH;\n }\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",
|
|
10
10
|
"export * from \"./api\";\nexport * from \"./bchaddrjs\";\nexport * from \"./coinselect\";\nexport * from \"./txSize\";\n",
|
|
11
11
|
"import secp256k1 from \"@bitcoinerlab/secp256k1\";\nimport { HDKey } from \"@scure/bip32\";\nimport { mnemonicToSeedSync } from \"@scure/bip39\";\nimport {\n Chain,\n type ChainSigner,\n type DerivationPathArray,\n FeeOption,\n NetworkDerivationPath,\n SKConfig,\n SwapKitError,\n derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport type { Psbt } from \"bitcoinjs-lib\";\nimport { hash160 } from \"bitcoinjs-lib/src/crypto\";\nimport bs58check from \"bs58check\";\nimport { ECPairFactory } from \"ecpair\";\nimport { P, match } from \"ts-pattern\";\nimport { getUtxoNetwork } from \"../helpers\";\nimport type { UTXOBuildTxParams, UTXOTransferParams } from \"../types\";\nimport { createUTXOToolbox } from \"./utxo\";\n\nconst chain = Chain.Zcash;\nconst network = getUtxoNetwork()(chain);\n\n/**\n * Custom Zcash address generation that handles 2-byte prefixes\n *\n * Zcash transparent addresses use 2-byte version prefixes, unlike Bitcoin's single byte.\n * This is incompatible with bitcoinjs-lib's payment methods which expect UInt8 values.\n *\n * @param publicKey - The public key buffer to generate address from\n * @param isTestnet - Whether to generate testnet or mainnet address\n * @returns A valid Zcash transparent address (t1... for mainnet, tm... for testnet)\n */\nfunction generateZcashAddress(publicKey: Buffer, isTestnet = false): string {\n // Hash the public key using RIPEMD160(SHA256(pubkey))\n const publicKeyHash = hash160(publicKey);\n\n // Zcash uses 2-byte prefixes for transparent addresses\n // These prefixes ensure addresses start with expected characters when base58 encoded\n const prefix = isTestnet\n ? Buffer.from([0x1c, 0xba]) // testnet prefix (results in tm... addresses)\n : Buffer.from([0x1c, 0xb8]); // mainnet prefix (results in t1... addresses)\n\n // Combine prefix + hash (22 bytes total: 2 byte prefix + 20 byte hash)\n const payload = Buffer.concat([prefix, publicKeyHash]);\n\n // Encode with base58check for final address\n return bs58check.encode(payload);\n}\n\nexport function validateZcashAddress(address: string) {\n try {\n // Shielded addresses are not supported\n if (address.startsWith(\"z\")) {\n console.warn(\n \"Shielded Zcash addresses (z-addresses) are not supported. Use transparent addresses (t1/t3) only.\",\n );\n return false;\n }\n\n const isMainnet = address.startsWith(\"t1\");\n const isTestnet = address.startsWith(\"t3\");\n\n if (!(isMainnet || isTestnet)) {\n return false;\n }\n\n // Verify network matches address type\n const { isStagenet } = SKConfig.get(\"envs\");\n if ((isMainnet && isStagenet) || (isTestnet && !isStagenet)) {\n return false;\n }\n\n return validateBase58Check(address, network);\n } catch {\n return false;\n }\n}\n\nfunction validateBase58Check(\n address: string,\n network: ReturnType<ReturnType<typeof getUtxoNetwork>>,\n) {\n try {\n const decoded = bs58check.decode(address);\n\n if (decoded.length < 21) {\n return false;\n }\n\n const version = decoded[0];\n return version === network.pubKeyHash || version === network.scriptHash;\n } catch {\n return false;\n }\n}\n\nconst ECPair = ECPairFactory(secp256k1);\n\ntype ZcashSigner = ChainSigner<Psbt, Psbt>;\n\nasync function createZcashSignerFromPhrase({\n phrase,\n derivationPathString,\n}: {\n phrase: string;\n derivationPathString: string;\n}) {\n const seed = mnemonicToSeedSync(phrase);\n const root = HDKey.fromMasterSeed(seed);\n\n const node = root.derive(derivationPathString);\n\n if (!node.privateKey) {\n throw new Error(\"Unable to derive private key\");\n }\n\n const keyPair = ECPair.fromPrivateKey(Buffer.from(node.privateKey), { network });\n\n const { isStagenet } = SKConfig.get(\"envs\");\n const address = generateZcashAddress(keyPair.publicKey, isStagenet);\n\n return {\n getAddress() {\n return Promise.resolve(address);\n },\n\n signTransaction(psbt: Psbt) {\n for (let i = 0; i < psbt.inputCount; i++) {\n psbt.signInput(i, keyPair);\n }\n return Promise.resolve(psbt);\n },\n };\n}\n\nexport async function createZcashToolbox(\n toolboxParams:\n | {\n signer?: ZcashSigner;\n }\n | {\n phrase?: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n },\n) {\n const signer = await match(toolboxParams)\n .with({ signer: P.not(P.nullish) }, ({ signer }) => Promise.resolve(signer))\n .with({ phrase: P.string }, ({ phrase, derivationPath, index = 0 }) => {\n // Handle derivation path processing at toolbox level\n const baseDerivationPath = derivationPath ||\n NetworkDerivationPath[Chain.Zcash] || [44, 133, 0, 0, 0];\n const updatedDerivationPath = updateDerivationPath(baseDerivationPath, { index });\n const derivationPathString = derivationPathToString(updatedDerivationPath);\n\n return createZcashSignerFromPhrase({ phrase, derivationPathString });\n })\n .otherwise(() => Promise.resolve(undefined));\n\n const { getFeeRates, broadcastTx, ...toolbox } = await createUTXOToolbox({\n chain: Chain.Zcash,\n signer,\n });\n\n function getAddressFromKeys(keys: { getAddress: () => string }) {\n return keys.getAddress();\n }\n\n async function transfer({\n recipient,\n assetValue,\n feeOptionKey = FeeOption.Fast,\n ...rest\n }: UTXOTransferParams) {\n const from = await signer?.getAddress();\n if (!(signer && from)) throw new SwapKitError(\"toolbox_utxo_no_signer\");\n\n const feeRate = rest.feeRate || (await getFeeRates())[feeOptionKey];\n\n const buildTxParams: UTXOBuildTxParams = {\n ...rest,\n assetValue,\n feeRate,\n recipient,\n sender: from,\n };\n\n const { psbt } = await toolbox.createTransaction(buildTxParams);\n const signedPsbt = await signer.signTransaction(psbt);\n signedPsbt.finalizeAllInputs();\n const txHex = signedPsbt.extractTransaction().toHex();\n\n return broadcastTx(txHex);\n }\n\n return {\n ...toolbox,\n broadcastTx,\n getFeeRates,\n transfer,\n getAddressFromKeys,\n validateAddress: validateZcashAddress,\n };\n}\n",
|
|
12
12
|
"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 { 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\";\nimport type { UtxoToolboxParams } from \"./index\";\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\";\nimport { validateZcashAddress } from \"./zcash\";\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 if (chain === Chain.Zcash) {\n return validateZcashAddress(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 [Chain.Zcash]: 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.Zcash:\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 const feeRate = (await getFeeRates(chain))[FeeOption.Fastest];\n\n const fetchTxHex = fetchTxOverwrite || nonSegwitChains.includes(chain);\n\n const amountToSend = assetValue.getBaseValue(\"number\");\n\n // Overestimate by 5000 byte * highest feeRate to ensure we have enough UTXOs for fees and change\n const targetValue = Math.ceil(amountToSend + feeRate * 5000);\n\n const inputs = await getUtxoApi(chain).getUtxos({ address: sender, fetchTxHex, targetValue });\n\n return {\n inputs,\n outputs: [\n { address: recipient, value: amountToSend },\n ...(memo ? [{ address: \"\", script: await compileMemo(memo), value: 0 }] : []),\n ],\n };\n}\n",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"import {\n Chain,\n type ChainSigner,\n type DerivationPathArray,\n SwapKitError,\n type UTXOChain,\n} from \"@swapkit/helpers\";\nimport type { Psbt } from \"bitcoinjs-lib\";\n\nimport type { TransactionBuilderType, TransactionType, UTXOType } from \"../types\";\nimport { createBCHToolbox } from \"./bitcoinCash\";\nimport { createUTXOToolbox } from \"./utxo\";\nimport { createZcashToolbox } from \"./zcash\";\n\ntype BCHToolbox = Awaited<ReturnType<typeof createBCHToolbox>>;\ntype CommonUTXOToolbox = Awaited<\n ReturnType<typeof createUTXOToolbox<Exclude<UTXOChain, Chain.BitcoinCash | Chain.Zcash>>>\n>;\ntype ZcashToolbox = Awaited<ReturnType<typeof createZcashToolbox>>;\n\nexport type UTXOToolboxes = {\n [Chain.BitcoinCash]: BCHToolbox;\n [Chain.Bitcoin]: CommonUTXOToolbox;\n [Chain.Dogecoin]: CommonUTXOToolbox;\n [Chain.Litecoin]: CommonUTXOToolbox;\n [Chain.Dash]: CommonUTXOToolbox;\n [Chain.Zcash]: ZcashToolbox;\n};\n\nexport type UTXOWallets = {\n [key in keyof UTXOToolboxes]: UTXOToolboxes[key];\n};\n\nexport type UtxoToolboxParams = {\n [Chain.BitcoinCash]: {\n signer: ChainSigner<{ builder: TransactionBuilderType; utxos: UTXOType[] }, TransactionType>;\n };\n [Chain.Bitcoin]: { signer: ChainSigner<Psbt, Psbt> };\n [Chain.Dogecoin]: { signer: ChainSigner<Psbt, Psbt> };\n [Chain.Litecoin]: { signer: ChainSigner<Psbt, Psbt> };\n [Chain.Dash]: { signer: ChainSigner<Psbt, Psbt> };\n [Chain.Zcash]: {\n signer?: ChainSigner<Psbt, Psbt>;\n };\n};\n\nexport async function getUtxoToolbox<T extends keyof UTXOToolboxes>(\n chain: T,\n params?:\n | UtxoToolboxParams[T]\n | {\n phrase?: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n },\n): Promise<UTXOToolboxes[T]> {\n switch (chain) {\n case Chain.BitcoinCash: {\n const toolbox = await createBCHToolbox(\n (params as UtxoToolboxParams[Chain.BitcoinCash]) || {},\n );\n return toolbox as UTXOToolboxes[T];\n }\n\n case Chain.Zcash: {\n const toolbox = await createZcashToolbox(params as UtxoToolboxParams[Chain.Zcash]);\n return toolbox as UTXOToolboxes[T];\n }\n\n case Chain.Bitcoin:\n case Chain.Dogecoin:\n case Chain.Litecoin:\n case Chain.Dash: {\n const toolbox = await createUTXOToolbox({\n chain,\n ...(params as UtxoToolboxParams[Exclude<T, Chain.BitcoinCash | Chain.Zcash>]),\n });\n return toolbox as UTXOToolboxes[Exclude<T, Chain.BitcoinCash | Chain.Zcash>];\n }\n\n default:\n throw new SwapKitError(\"toolbox_utxo_not_supported\", { chain });\n }\n}\n\nexport {\n stripToCashAddress,\n stripPrefix,\n bchValidateAddress,\n} from \"./bitcoinCash\";\n",
|
|
15
15
|
"export * from \"./toolbox\";\nexport * from \"./toolbox/bitcoinCash\";\nexport * from \"./toolbox/utxo\";\nexport * from \"./toolbox/zcash\";\nexport * from \"./helpers\";\nexport * from \"./types\";\n"
|
|
16
16
|
],
|
|
17
|
-
"mappings": "utBAMO,SAAS,EAAM,EAAG,CACvB,SAAS,CAAG,EAAG,CACb,IAAM,EAAO,KAAK,IAAI,EAChB,EAAW,IAAQ,EAGzB,OAFA,GAAO,EAEA,EAAO,GAAO,EAAO,EAAW,EAGzC,OAAO,GAAM,EAAI,EAAE,SAAS,EAAE,EAGzB,SAAS,EAA2B,CAAC,EAAU,CACpD,OAAO,eAAe,CAAU,CAAC,EAAiB,EAAa,GAAM,CAGnE,OAFiB,MAAM,cAAW,gBAAgB,CAAE,QAAO,UAAS,YAAW,CAAC,GAEhE,IAAI,EAAG,aAAY,QAAO,aAAc,CACtD,OAAO,IAAI,cAAW,CAAE,QAAS,GAAW,eAAY,GAAQ,QAAO,YAAW,CAAC,EACpF,OAxBL,GACA,GAEM,GAEF,GAAO,gBALX,+BACA,mCAEM,GAAM,OAAO,UAAY,aAAe,QAAQ,IAAM,QAAQ,IAAI,SAAS,EAAE,EAAI,KCoBvF,eAAe,EAAe,EAAG,QAAO,UAA4C,CAClF,IAAM,EAAS,WAAS,IAAI,SAAS,EAAE,GACjC,EAAO,KAAK,UAAU,CAC1B,QAAS,MACT,OAAQ,qBACR,OAAQ,CAAC,CAAM,EACf,GAAI,GAAO,CACb,CAAC,EAEK,EAAW,MAAM,gBAAc,KAIlC,EAAQ,CAAE,QAAS,CAAE,eAAgB,kBAAmB,EAAG,MAAK,CAAC,EAEpE,GAAI,EAAS,MACX,MAAM,IAAI,eAAa,gCAAiC,CACtD,MAAO,EAAS,OAAO,OACzB,CAAC,EAGH,GAAI,EAAS,OAAO,SAAS,YAAY,EACvC,MAAM,IAAI,eAAa,mCAAoC,CACzD,MAAO,gCACT,CAAC,EAGH,OAAO,EAAS,OAGlB,SAAS,EAAO,CAAC,EAAc,CAC7B,MAAO,8BAA8B,GAA0B,CAAK,IAGtE,SAAS,EAAsB,CAAC,EAAc,CAC5C,OAAQ,QACD,QAAM,QACT,MAAO,QACJ,QAAM,SACT,MAAO,UACJ,QAAM,SACT,MAAO,QACJ,QAAM,MACT,MAAO,WAEP,MAAO,IAIb,SAAS,EAAyB,CAAC,EAAc,CAC/C,OAAQ,QACD,QAAM,YACT,MAAO,oBACJ,QAAM,SACT,MAAO,gBACJ,QAAM,KACT,MAAO,YACJ,QAAM,SACT,MAAO,gBACJ,QAAM,MACT,MAAO,aACJ,QAAM,SACT,MAAO,mBAEP,MAAO,WAIb,eAAe,EAAiB,CAAC,EAAc,CAC7C,GAAI,CAGF,IAAQ,YAAa,MAAM,gBAAc,IAKtC,gCAAgC,EAAM,YAAY,UAAU,EACzD,EAAe,EAAW,KAEhC,OAAO,KAAK,IAAI,EAAc,GAAuB,CAAK,CAAC,EAC3D,MAAO,EAAQ,CACf,OAAO,GAAuB,CAAK,GAIvC,eAAe,EAAoB,CAAC,EAAa,EAA6B,CAC5E,IAAM,EAAW,MAAM,gBAAc,IACnC,GAAG,IAAM,EAAS,GAAG,EAAI,SAAS,GAAG,EAAI,IAAM,UAAU,IAAW,IACtE,EAEA,IAAK,GAAY,EAAS,QAAQ,OAAS,IACzC,MAAM,IAAI,eAAa,yBAA0B,CAC/C,MAAO,mBAAmB,GAC5B,CAAC,EAEH,OAAO,EAAS,KAGlB,eAAe,EAAc,EAAG,UAAS,QAAO,UAAkD,CAChG,IAAK,EACH,MAAM,IAAI,eAAa,8BAA+B,CACpD,MAAO,qBACT,CAAC,EAEH,GAAI,CAMF,OALiB,MAAM,GACrB,GAAG,GAAQ,CAAK,wBAAwB,6BACxC,CACF,GAEgB,GAChB,MAAO,EAAQ,CACf,MAAO,CAAE,KAAM,CAAC,EAAG,QAAS,CAAE,QAAS,EAAG,kBAAmB,CAAE,CAAE,GAIrE,eAAe,EAAqB,EAClC,UACA,QACA,UACyC,CAGzC,OAFiB,MAAM,GAAe,CAAE,UAAS,QAAO,QAAO,CAAC,IAE/C,QAAQ,SAAW,EAGtC,eAAe,EAAQ,EAAG,QAAO,SAAQ,UAAiD,CACxF,IAAK,EACH,MAAM,IAAI,eAAa,8BAA+B,CACpD,MAAO,oBACT,CAAC,EAEH,GAAI,CAKF,OAJsB,MAAM,GAC1B,GAAG,GAAQ,CAAK,qBAAqB,IACrC,CACF,KACuB,IAAS,iBAAmB,GACnD,MAAO,EAAO,CAEd,OADA,QAAQ,MAAM,mCAAoC,CAAK,EAChD,IAIX,eAAe,EAAe,EAC5B,QACA,UACA,SACA,SAAS,EACT,QAAQ,IAC2B,CA8BnC,OA1BiB,MAAM,GAErB,GAAG,GAAQ,CAAK,yBAAyB,4JAA2F,YAAgB,IACpJ,CACF,GAEqB,IACnB,EACE,WACA,aACA,WACA,mBACA,QACA,QACA,6BACK,CACL,KAAM,EACN,QACA,QACA,MAAO,EACP,aACA,aAAc,IAAa,GAC3B,UACF,EACF,EAKF,SAAS,EAAW,CAAC,EAAkD,CACrE,OAAO,EAAI,OAAO,CAAC,EAAO,IAAO,EAAQ,EAAG,MAAO,CAAC,EAGtD,SAAS,EAAmB,CAC1B,EACA,EAC6C,CAC7C,IAAM,EAAY,CAAC,GAAG,CAAG,EAAE,KAAK,CAAC,EAAG,IAAM,EAAE,MAAQ,EAAE,KAAK,EAE3D,GAAI,EAAa,CACf,IAAM,EAAS,CAAC,EACZ,EAAc,EAElB,QAAW,KAAQ,EAGjB,GAFA,EAAO,KAAK,CAAI,EAChB,GAAe,EAAK,MAChB,GAAe,EAAa,MAGlC,OAAO,EAGT,OAAO,EAGT,eAAe,EAAe,EAC5B,QACA,UACA,SACA,cACA,oBAAoB,EACpB,SAAS,EACT,QAAQ,IACiF,CACzF,IAAK,EACH,MAAM,IAAI,eAAa,8BAA+B,CACpD,MAAO,qBACT,CAAC,EAEH,GAAI,CACF,IAAM,EAAQ,MAAM,GAAgB,CAClC,cACA,QACA,UACA,SACA,SACA,OACF,CAAC,EAEK,EADa,EAAM,OACO,EAE1B,EAAe,EAAM,OAAO,EAAG,eAAgB,CAAQ,EAEvD,EAAoB,GAAY,CAAY,EAC5C,EAAoB,EAAoB,EAExC,EAAe,GAAe,GAAqB,EAEzD,GAAI,GAAc,EAChB,OAAO,GAAoB,EAAc,CAAW,EAGtD,IAAM,EAAY,MAAM,GAAgB,CACtC,QACA,UACA,SACA,OAAQ,EAAS,EACjB,QACA,kBAAmB,EACnB,aACF,CAAC,EAEK,EAAW,CAAC,GAAG,EAAc,GAAG,CAAS,EAE/C,OAAO,GAAoB,EAAU,CAAW,EAChD,MAAO,EAAO,CAEd,OADA,QAAQ,MAAM,iCAAkC,CAAK,EAC9C,CAAC,GAIZ,eAAe,EAAQ,EACrB,UACA,QACA,SACA,aAAa,GACb,eAKE,CACF,IAAM,EAAQ,MAAM,GAAgB,CAAE,QAAO,UAAS,SAAQ,aAAY,CAAC,EAErE,EAAU,CAAC,EAEjB,QAAa,OAAM,QAAO,aAAY,WAAW,EAAO,CACtD,IAAI,EACJ,GAAI,EACF,EAAQ,MAAM,GAAS,CAAE,OAAQ,EAAM,QAAO,QAAO,CAAC,EAExD,EAAQ,KAAK,CACX,UACA,OACA,QACA,QACA,QACA,YAAa,CAAE,QAAO,OAAQ,OAAO,KAAK,EAAY,KAAK,CAAE,CAC/D,CAAC,EAEH,OAAO,EAGT,SAAS,EAAO,CAAC,EAAkB,CACjC,IAAM,EAAS,WAAS,IAAI,SAAS,EAAE,YAAc,GAIrD,OAFA,YAAU,EAAQ,6DAA6D,EAExE,CACL,YAAa,CAAC,IAAmB,GAAgB,CAAE,SAAQ,OAAM,CAAC,EAClE,SAAU,CAAC,IAAmB,GAAS,CAAE,SAAQ,QAAO,QAAO,CAAC,EAChE,kBAAmB,IAAM,GAAkB,CAAK,EAChD,WAAY,CAAC,IAAoB,GAAsB,CAAE,UAAS,QAAO,QAAO,CAAC,EACjF,eAAgB,CAAC,IAAoB,GAAe,CAAE,UAAS,QAAO,QAAO,CAAC,EAC9E,SAAU,CAAC,IAIL,GAAS,IAAK,EAAQ,QAAO,QAAO,CAAC,CAC7C,EAMK,SAAS,EAAmB,CAAC,EAAqC,CACvE,OAAO,EAGF,SAAS,CAAU,CAAC,EAAkB,CAC3C,IAAM,EAAgB,WAAS,IAAI,MAAM,EAAE,GAE3C,GAAI,EAEF,OADA,WAAS,GAAM,0EAA0E,EAClF,EAGT,OAAO,GAAQ,CAAK,EA4Bf,SAAS,CAAc,EAAG,CAC/B,OAAO,SAAS,CAAU,CAAC,EAAc,CACvC,OAAQ,QACD,QAAM,QACT,OAAO,YAAS,aACb,QAAM,YACT,OAAO,UAAS,YAAY,KAAK,YAAY,OAC1C,QAAM,KACT,OAAO,UAAS,KAAK,KAAK,YAAY,OACnC,QAAM,SACT,OAAO,UAAS,SAAS,KAAK,YAAY,OAEvC,QAAM,SAAU,CACnB,IAAM,EAAQ,CAAE,QAAS,SAAY,OAAQ,QAAW,EAClD,EAAO,UAAS,SAAS,KAE/B,OADA,EAAK,SAAS,MAAQ,EACf,UAAS,SAAS,KAAK,YAAY,CAC5C,MAEK,QAAM,MAAO,CAEhB,IAAQ,cAAe,WAAS,IAAI,MAAM,EAC1C,OAAO,EAAa,GAAgB,EACtC,SAGE,MAAM,IAAI,eAAa,6BAA8B,CAAE,OAAM,CAAC,QAzZtE,EAQA,GAIA,EA2VM,GAYA,iBAnXN,8BAQA,4BACA,KAGA,yBA2VM,GAAgB,CACpB,cAAe;AAAA,EACf,OAAQ,KACR,MAAO,CACL,OAAQ,SACR,QAAS,QACX,EACA,WAAY,GACZ,WAAY,GACZ,IAAK,GACP,EAEM,GAAgB,CACpB,cAAe;AAAA,EACf,OAAQ,eACR,MAAO,CACL,OAAQ,SACR,QAAS,QACX,EACA,WAAY,GACZ,WAAY,GACZ,IAAK,GACP,IC5UA,SAAS,EAAc,CAAC,EAAY,CAClC,GAAI,CAEF,OADA,GAAc,CAAK,EACZ,GACP,MAAO,EAAQ,CACf,MAAO,IAIX,SAAS,EAAoB,CAAC,EAAiB,CAC7C,OAAO,GAAc,CAAO,GAAG,QAGjC,SAAS,CAAe,CAAC,EAAyB,CAChD,IAAM,EAAU,GAAc,CAAO,EACrC,GAAI,GAAS,SAAW,SACtB,OAAO,EAET,OAAO,GAAe,CAAO,EAG/B,SAAS,CAAa,CAAC,EAAyB,CAC9C,IAAM,EAAU,GAAc,CAAO,EACrC,OAAO,GAAiB,CAAO,EAGjC,SAAS,EAAa,CAAC,EAAiB,CACtC,GAAI,CACF,IAAM,EAAU,GAAoB,CAAO,EAC3C,GAAI,EACF,OAAO,EAET,MAAO,EAAQ,EAGjB,GAAI,CACF,IAAM,EAAU,GAAkB,CAAO,EACzC,GAAI,EACF,OAAO,EAET,MAAO,EAAQ,EAGjB,MAAM,IAAI,gBAAa,+BAAgC,CAAE,SAAQ,CAAC,EAGpE,SAAS,EAAmB,CAAC,EAAiB,CAC5C,GAAI,CACF,IAAM,EAAU,WAAY,OAAO,CAAO,EAG1C,GAAI,EAAQ,SAAW,GAAI,MAAM,IAAI,gBAAa,+BAAgC,CAAE,SAAQ,CAAC,EAC7F,IAAM,EAAc,EAAQ,GACtB,EAAO,MAAM,UAAU,MAAM,KAAK,EAAS,CAAC,EAElD,OAAQ,QACD,EAAa,OAAe,QAAqB,MACpD,MAAO,CAAE,OAAM,OAAQ,SAAe,QAAS,UAAqB,KAAM,OAAW,OAElF,EAAa,OAAe,QAAqB,KACpD,MAAO,CAAE,OAAM,OAAQ,SAAe,QAAS,UAAqB,KAAM,MAAU,OAEjF,EAAa,OAAe,QAAqB,MACpD,MAAO,CAAE,OAAM,OAAQ,SAAe,QAAS,UAAqB,KAAM,OAAW,OAElF,EAAa,OAAe,QAAqB,KACpD,MAAO,CAAE,OAAM,OAAQ,SAAe,QAAS,UAAqB,KAAM,MAAU,OAEjF,EAAa,OAAe,QAAqB,MACpD,MAAO,CAAE,OAAM,OAAQ,SAAe,QAAS,UAAqB,KAAM,OAAW,OAElF,EAAa,OAAe,QAAqB,KACpD,MAAO,CAAE,OAAM,OAAQ,SAAe,QAAS,UAAqB,KAAM,MAAU,UAGpF,QAEJ,MAAO,EAAQ,CACf,QAIJ,SAAS,EAAiB,CAAC,EAAiB,CAC1C,GAAI,EAAQ,QAAQ,GAAG,IAAM,GAC3B,GAAI,CACF,OAAO,GAA4B,CAAO,EAC1C,MAAO,EAAQ,EAGZ,KACL,IAAM,EAAW,CAAC,cAAe,UAAW,QAAQ,EACpD,QAAW,KAAU,EACnB,GAAI,CACF,OAAO,GAA4B,GAAG,KAAU,GAAS,EACzD,MAAO,EAAQ,GAMrB,OAGF,SAAS,EAA2B,CAAC,EAAiB,CACpD,GAAI,CACF,IAAQ,OAAM,SAAQ,QAAS,WAAS,OAAO,CAAO,EAEtD,MAAO,CACL,OAAQ,WACR,KAAM,MAAM,UAAU,MAAM,KAAK,EAAM,CAAC,EACxC,QAAS,IAAW,cAAgB,UAAsB,UAC1D,KAAM,IAAS,QAAU,QAAa,MACxC,EACA,MAAO,EAAQ,CACf,QAIJ,SAAS,EAAc,CAAC,EAAsB,CAC5C,IAAM,EAAc,EAAa,OAAe,EAAQ,SAAS,EAAQ,MACnE,EAAS,OAAO,MAAM,EAAI,EAAQ,KAAK,MAAM,EAGnD,OAFA,EAAO,GAAK,EACZ,EAAO,IAAI,EAAQ,KAAM,CAAC,EACnB,WAAY,OAAO,CAAM,EAGlC,SAAS,EAAgB,CAAC,EAAsB,CAC9C,IAAM,EAAS,EAAQ,UAAY,UAAsB,cAAgB,UACnE,EAAO,EAAQ,OAAS,QAAa,QAAU,OAC/C,EAAO,IAAI,WAAW,EAAQ,IAAI,EACxC,OAAO,WAAS,OAAO,EAAQ,EAAM,CAAI,MAnL3C,GACA,GAEA,GAOK,GASC,gBAnBN,+BACA,2BAEA,6BAOA,CAAK,IAAL,CACE,UAAU,UACV,UAAU,YAFP,SASC,EAAe,EAClB,UAAgB,EACd,WAAsB,EACpB,SAAa,GACb,QAAY,CACf,GACC,WAAsB,EACpB,SAAa,KACb,QAAY,GACf,CACF,GACC,UAAgB,EACd,WAAsB,EACpB,SAAa,IACb,QAAY,EACf,GACC,WAAsB,EACpB,SAAa,KACb,QAAY,GACf,CACF,CACF,QCxCA,EAYa,GAAmB,CAAC,IAAqB,CACpD,OAAQ,QACD,QAAM,aACN,QAAM,YACT,MAAO,UACJ,QAAM,UACN,QAAM,SACT,MAAO,WACJ,QAAM,SACT,MAAO,UACJ,QAAM,MACT,MAAO,aAEP,MAAM,IAAI,eAAa,6BAA8B,CAAE,OAAM,CAAC,IAIvD,EAAe,EAC1B,SACA,UACA,QAAS,EAAiB,EAC1B,QAAQ,QAAM,WACiE,CAC/E,IAAM,EAAU,KAAK,KAAK,CAAc,EAElC,EACJ,EAAO,IAAM,YAAa,EAAO,IAAM,EAAO,GAAG,QAC7C,EAAwB,EAAO,GAAG,OAAO,UAGzC,EAAiB,EAAO,OAAO,CAAC,IAAU,EAAa,CAAK,EAAI,GAAW,EAAM,KAAK,EAEtF,EACJ,GAAc,EAAQ,OAAO,CAAC,EAAO,IAAW,EAAQ,EAAc,EAAQ,CAAS,EAAG,CAAC,EAEvF,EAAe,EAAQ,OAAO,CAAC,EAAO,IAAW,EAAQ,EAAO,MAAO,CAAC,EAE1E,EAAO,EAAsB,EAC7B,EAAc,EACZ,EAA6B,CAAC,EAEpC,QAAW,KAAS,EAAgB,CAClC,IAAM,EAAY,EAAa,CAAK,EAC9B,EAAW,EAAU,EAE3B,GAAQ,EACR,GAAe,EAAM,MAErB,EAAY,KAAK,CAAK,EAEtB,IAAM,EAAY,EAAO,EAGzB,GAAI,EAAc,EAAW,SAE7B,IAAM,EAAY,EAAc,EAE1B,EAAoB,EAAU,EAAc,CAAE,QAAS,GAAI,MAAO,CAAE,EAAG,CAAS,EAGtF,GAAI,EAAY,EAAmB,CACjC,IAAM,EAAsB,EAAoB,EAC1C,GAA4B,GAAe,EAAe,GAGhE,GACE,GACA,KAAK,IAAI,EAAa,CAAC,CAAa,EAAI,EAAS,GAAiB,CAAK,CAAC,EAExE,MAAO,CACL,OAAQ,EACR,QAAS,EAAQ,OAAO,CAAE,MAAO,GAA2B,QAAS,EAAG,CAAC,EACzE,IAAK,CACP,EAGJ,MAAO,CACL,OAAQ,EACR,UACA,IAAK,CACP,EAIF,MAAO,CAAE,IAAK,EAAU,EAAgB,CAAE,SAAQ,UAAS,SAAQ,CAAC,CAAE,iBAhGxE,8BAEA,MCkBO,SAAS,CAAW,CAAC,EAAc,CACxC,IAAM,EAAO,OAAO,KAAK,EAAM,MAAM,EACrC,OAAO,UAAO,QAAQ,CAAC,WAAQ,UAAqB,CAAI,CAAC,MAtB3D,GACA,GAaa,GAAa,KACb,GAAc,GACd,GAAqB,GAC5B,GAAgB,GAChB,GAAsB,IAOhB,GAOC,GAMA,EAMA,EAA0B,CAAC,IAAoB,CAC1D,GAAI,EAAQ,WAAW,KAAK,GAAK,EAAQ,WAAW,MAAM,EACxD,MAAO,SAKT,GACE,EAAQ,WAAW,GAAG,GACtB,EAAQ,WAAW,GAAG,GACtB,EAAQ,WAAW,GAAG,GACtB,EAAQ,WAAW,GAAG,GACtB,EAAQ,WAAW,GAAG,GACtB,EAAQ,WAAW,GAAG,GACtB,EAAQ,WAAW,eAAe,GAClC,EAAQ,WAAW,GAAG,EAEtB,MAAO,QAET,MAAM,IAAI,gBAAa,+BAAgC,CAAE,SAAQ,CAAC,GAGvD,EAAkB,EAAG,SAAQ,UAAS,aAAyC,CAC1F,IAAM,EACJ,EAAO,IAAM,YAAa,EAAO,IAAM,EAAO,GAAG,QAC7C,EAAwB,EAAO,GAAG,OAAO,EACzC,QACA,EAAY,EACf,OACC,CAAC,IACC,EAAK,OACL,GAAW,SAAU,EAAO,EAAK,KAAO,SAAwB,KAAK,KAAK,CAAO,CACrF,EACC,OAAO,CAAC,EAAO,IAAS,EAAQ,EAAa,CAAI,EAAG,CAAC,EAElD,EACJ,GAAS,OAAO,CAAC,EAAO,IAAW,EAAQ,EAAc,CAAM,EAAG,CAAC,GAAK,EAAY,GAEtF,OAAO,GAAc,EAAY,GAGtB,EAAe,CAAC,IAA8C,CACzE,GAAI,SAAU,EACZ,OAAO,GAAW,EAAM,MAE1B,GAAI,YAAa,GAAS,EAAM,QAC9B,OAAO,GAAW,EAAwB,EAAM,OAAiB,GAEnE,OAAO,GAAgB,IAGZ,EAAgB,CAAC,EAAsB,IAAgC,CAClF,GAAI,GAAQ,OACV,OAAO,GAAqB,EAAO,OAAO,QAAU,EAAO,OAAO,QAAU,GAAK,EAAI,GAEvF,GAAI,EACF,OAAO,EAAY,GAErB,OAAO,EAAY,qBAtGrB,+BACA,6BAwBO,CAAK,IAAL,CACL,QAAQ,QAER,SAAS,WAHC,SAOC,GAA6C,EACvD,SAAuB,KAEvB,UAAwB,EAC3B,EAEa,EAA8C,EACxD,SAAuB,IAEvB,UAAwB,EAC3B,iBC1CA,KACA,KACA,KACA,OCiCA,SAAS,EAAoB,CAAC,EAAmB,EAAY,GAAe,CAE1E,IAAM,EAAgB,WAAQ,CAAS,EAIjC,EAAS,EACX,OAAO,KAAK,CAAC,GAAM,GAAI,CAAC,EACxB,OAAO,KAAK,CAAC,GAAM,GAAI,CAAC,EAGtB,EAAU,OAAO,OAAO,CAAC,EAAQ,CAAa,CAAC,EAGrD,OAAO,WAAU,OAAO,CAAO,EAG1B,SAAS,EAAoB,CAAC,EAAiB,CACpD,GAAI,CAEF,GAAI,EAAQ,WAAW,GAAG,EAIxB,OAHA,QAAQ,KACN,mGACF,EACO,GAGT,IAAM,EAAY,EAAQ,WAAW,IAAI,EACnC,EAAY,EAAQ,WAAW,IAAI,EAEzC,KAAM,GAAa,GACjB,MAAO,GAIT,IAAQ,cAAe,WAAS,IAAI,MAAM,EAC1C,GAAK,GAAa,GAAgB,IAAc,EAC9C,MAAO,GAGT,OAAO,GAAoB,EAAS,EAAO,EAC3C,KAAM,CACN,MAAO,IAIX,SAAS,EAAmB,CAC1B,EACA,EACA,CACA,GAAI,CACF,IAAM,EAAU,WAAU,OAAO,CAAO,EAExC,GAAI,EAAQ,OAAS,GACnB,MAAO,GAGT,IAAM,EAAU,EAAQ,GACxB,OAAO,IAAY,EAAQ,YAAc,IAAY,EAAQ,WAC7D,KAAM,CACN,MAAO,IAQX,eAAe,EAA2B,EACxC,SACA,wBAIC,CACD,IAAM,EAAO,sBAAmB,CAAM,EAGhC,EAFO,SAAM,eAAe,CAAI,EAEpB,OAAO,CAAoB,EAE7C,IAAK,EAAK,WACR,MAAM,IAAI,MAAM,8BAA8B,EAGhD,IAAM,EAAU,GAAO,eAAe,OAAO,KAAK,EAAK,UAAU,EAAG,CAAE,UAAQ,CAAC,GAEvE,cAAe,WAAS,IAAI,MAAM,EACpC,EAAU,GAAqB,EAAQ,UAAW,CAAU,EAElE,MAAO,CACL,UAAU,EAAG,CACX,OAAO,QAAQ,QAAQ,CAAO,GAGhC,eAAe,CAAC,EAAY,CAC1B,QAAS,EAAI,EAAG,EAAI,EAAK,WAAY,IACnC,EAAK,UAAU,EAAG,CAAO,EAE3B,OAAO,QAAQ,QAAQ,CAAI,EAE/B,EAGF,eAAsB,EAAkB,CACtC,EASA,CACA,IAAM,EAAS,MAAM,QAAM,CAAa,EACrC,KAAK,CAAE,OAAQ,IAAE,IAAI,IAAE,OAAO,CAAE,EAAG,EAAG,YAAa,QAAQ,QAAQ,CAAM,CAAC,EAC1E,KAAK,CAAE,OAAQ,IAAE,MAAO,EAAG,EAAG,SAAQ,iBAAgB,QAAQ,KAAQ,CAErE,IAAM,EAAqB,GACzB,wBAAsB,QAAM,QAAU,CAAC,GAAI,IAAK,EAAG,EAAG,CAAC,EACnD,EAAwB,uBAAqB,EAAoB,CAAE,OAAM,CAAC,EAC1E,EAAuB,yBAAuB,CAAqB,EAEzE,OAAO,GAA4B,CAAE,SAAQ,sBAAqB,CAAC,EACpE,EACA,UAAU,IAAM,QAAQ,QAAQ,MAAS,CAAC,GAErC,cAAa,iBAAgB,GAAY,MAAM,EAAkB,CACvE,MAAO,QAAM,MACb,QACF,CAAC,EAED,SAAS,CAAkB,CAAC,EAAoC,CAC9D,OAAO,EAAK,WAAW,EAGzB,eAAe,CAAQ,EACrB,YACA,aACA,eAAe,YAAU,QACtB,GACkB,CACrB,IAAM,EAAO,MAAM,GAAQ,WAAW,EACtC,KAAM,GAAU,GAAO,MAAM,IAAI,eAAa,wBAAwB,EAEtE,IAAM,EAAU,EAAK,UAAY,MAAM,EAAY,GAAG,GAEhD,EAAmC,IACpC,EACH,aACA,UACA,YACA,OAAQ,CACV,GAEQ,QAAS,MAAM,EAAQ,kBAAkB,CAAa,EACxD,EAAa,MAAM,EAAO,gBAAgB,CAAI,EACpD,EAAW,kBAAkB,EAC7B,IAAM,EAAQ,EAAW,mBAAmB,EAAE,MAAM,EAEpD,OAAO,EAAY,CAAK,EAG1B,MAAO,IACF,EACH,cACA,cACA,WACA,qBACA,gBAAiB,EACnB,MA9MF,GACA,GACA,GACA,EAYA,GACA,GACA,GACA,EAKM,GACA,GA4EA,iBApGN,yCACA,2BACA,2BACA,8BAYA,uCACA,2BACA,qBACA,wBACA,IAEA,IAEM,GAAQ,QAAM,MACd,GAAU,EAAe,EAAE,EAAK,EA4EhC,GAAS,iBAAc,UAAS,ICpDtC,SAAS,EAAmB,EAC1B,SACA,UACA,QACA,OACA,SACA,gBAQC,CACD,QAAW,KAAQ,EAAQ,CACzB,IAAM,IAAgB,EAAK,cACxB,EAAgB,SAAS,CAAK,GAAK,CAAE,YAAa,EAAK,WAAY,EAEhE,EAAiB,EAAgB,SAAS,CAAK,GAAK,CACxD,eAAgB,EAAK,MAAQ,OAAO,KAAK,EAAK,MAAO,KAAK,EAAI,MAChE,EAEA,EAAK,SAAS,CAAE,KAAM,EAAK,KAAM,MAAO,EAAK,SAAU,KAAgB,CAAe,CAAC,EAGzF,QAAW,KAAU,EAAS,CAC5B,IAAM,EAAU,YAAa,GAAU,EAAO,QAAU,EAAO,QAAU,EACnE,EAAkB,EAAO,OAE/B,GAAI,IAAoB,EACtB,SAGF,IAAM,EAAe,EACjB,CACE,OAAQ,EACR,MAAO,CACT,EACA,CACE,UACA,MAAO,EAAO,KAChB,EAEJ,aAAW,UAAS,EACpB,EAAK,UAAU,CAAY,EAG7B,MAAO,CAAE,OAAM,QAAO,EAGxB,eAAe,EAAiB,EAC9B,aACA,YACA,OACA,UACA,SACA,aAAa,IAKZ,CACD,IAAM,EAAQ,EAAW,MACnB,EAAe,EAAO,MAAM,EAAY,CAAI,EAAI,KAEhD,EAAmB,MAAM,GAA0B,CACvD,aACA,YACA,OACA,SACA,YACF,CAAC,GAEO,SAAQ,WAAY,EAAa,IAAK,EAAkB,UAAS,OAAM,CAAC,EAGhF,KAAM,GAAU,GACd,MAAM,IAAI,eAAa,oCAAqC,CAAE,SAAQ,YAAW,CAAC,EACpF,IAAM,EAAa,MAAM,EAAe,EAClC,EAAO,IAAI,OAAK,CAAE,QAAS,EAAW,CAAK,CAAE,CAAC,EAEpD,GAAI,IAAU,QAAM,SAAU,EAAK,kBAAkB,SAAS,EAE9D,IAAQ,KAAM,EAAY,OAAQ,GAAiB,MAAM,GAAoB,CAC3E,SACA,UACA,QACA,OACA,SACA,cACF,CAAC,EAED,MAAO,CACL,KAAM,EACN,MAAO,EAAiB,OACxB,OAAQ,CACV,EAGF,eAAsB,EAAuB,EAAG,CAC9C,IAAM,EAAa,MAAM,EAAe,EAExC,OAAO,SAAS,CAAe,EAAG,UAAS,SAAgD,CACzF,GAAI,IAAU,QAAM,YAClB,OAAO,EAAmB,CAAO,EAGnC,GAAI,IAAU,QAAM,MAClB,OAAO,GAAqB,CAAO,EAGrC,GAAI,CAGF,OAFA,aAAW,UAAS,EACpB,UAAc,eAAe,EAAS,EAAW,CAAK,CAAC,EAChD,GACP,MAAO,EAAQ,CACf,MAAO,KAKb,eAAe,EAAoB,EACjC,QACA,SACA,kBAC+D,CAC/D,IAAM,GAAW,MAAM,EAAqB,CAAsB,GAAG,CAAE,SAAQ,gBAAe,CAAC,EAE/F,eAAe,CAAe,CAAC,EAAY,CAEzC,OADA,MAAM,EAAK,cAAc,CAAO,EACzB,EAGT,eAAe,CAAU,EAAG,CAE1B,OADsB,MAAM,GAAsB,CAAK,GAClC,CAAO,EAG9B,MAAO,CACL,aACA,iBACF,EAGF,eAAsB,CAAsC,EAC1D,WACG,GAQa,CAChB,IAAM,EAAS,WAAY,EAAgB,EAAc,OAAS,OAE5D,EAAQ,UAAW,EAAgB,EAAc,OAAS,EAAI,EAE9D,EAAiB,yBACrB,mBAAoB,GAAiB,EAAc,eAC/C,EAAc,eACd,uBAAqB,wBAAsB,GAAQ,CAAE,OAAM,CAAC,CAClE,EAEM,EAAS,EACX,MAAM,GAAqB,CAAE,QAAO,SAAQ,gBAAe,CAAC,GAC5D,WAAY,GACV,EAAc,OACd,OAEN,SAAS,CAAU,EAAG,CACpB,OAAO,QAAQ,QAAQ,GAAQ,WAAW,CAAC,EAI7C,IAAM,EAAqB,MAAM,GAAsB,CAAK,EACtD,EAAkB,MAAM,GAAwB,EAChD,EAAoB,MAAM,EAAqB,CAAK,EAE1D,MAAO,CACL,eACA,kBACA,qBACA,aACA,gBAAiB,CAAC,IAAoB,EAAgB,CAAE,UAAS,OAAM,CAAC,EACxE,YAAa,CAAC,IAAmB,EAAW,CAAK,EAAE,YAAY,CAAM,EACrE,qBACA,oBACA,YAAa,IAAM,EAAY,CAAK,EACpC,uBACA,SAAU,GAAS,CAA4C,EAC/D,0BAA2B,CAAC,IAAuD,CAEjF,OADa,EAAkB,CAAM,EACzB,MAAM,GAGpB,WAAY,GAAW,CAAK,EAC5B,uBAAwB,GAAuB,CAAK,EACpD,0BAA2B,GAA0B,CAAK,CAC5D,EAGF,eAAe,EAAmB,EAChC,aACA,eAAe,YAAU,KACzB,UACA,OACA,SACA,aAIC,CACD,IAAM,EAAQ,EAAW,MAEnB,EAAmB,MAAM,GAA0B,CACvD,aACA,SACA,OACA,WACF,CAAC,EAEK,EAAe,EAAU,KAAK,MAAM,CAAO,GAAK,MAAM,EAAY,CAAK,GAAG,GAEhF,OAAO,EAAa,IAAK,EAAkB,QAAS,EAAc,OAAM,CAAC,EAG3E,SAAS,EAAyB,CAAC,EAAkB,CACnD,OAAO,eAAe,CAAyB,EAC7C,OACA,OACA,UACA,eAAe,YAAU,KACzB,aAAa,GAOZ,CACD,IAAM,EAAc,MAAM,EAAW,CAAK,EAAE,eAAe,CAAI,EACzD,EAAe,EAAU,KAAK,KAAK,CAAO,GAAK,MAAM,EAAY,CAAK,GAAG,GAEzE,EAAS,GAAa,KACzB,IAAI,CAAC,KAAU,IACX,EAEH,aACA,KAAM,EACR,EAAE,EACD,OACC,CAAC,IAAS,EAAK,MAAQ,KAAK,IAAI,GAAiB,CAAK,EAAG,EAAa,CAAI,EAAI,CAAY,CAC5F,EAEF,IAAK,GAAQ,OAAQ,OAAO,aAAW,KAAK,CAAE,OAAM,CAAC,EAErD,IAAM,EAAU,aAAW,KAAK,CAC9B,QACA,MAAO,EAAO,OAAO,CAAC,EAAK,IAAS,EAAM,EAAK,MAAO,CAAC,CACzD,CAAC,EAEK,EACJ,OAAO,IAAe,SACjB,MAAM,KAAK,CAAE,OAAQ,CAAW,EAAG,KAAO,CACzC,QAAS,EACT,MAAO,CACT,EAAE,EACF,EAEN,GAAI,EAAM,CACR,IAAM,EAAS,MAAM,EAAY,CAAI,EACrC,EAAQ,KAAK,CAAE,QAAS,EAAM,SAAQ,MAAO,CAAE,CAAC,EAKlD,IAAM,EAFS,EAAgB,CAAE,SAAQ,UAAS,QAAS,CAAa,CAAC,EAEpD,EAErB,OAAO,EAAQ,IAAI,CAAG,GAI1B,SAAS,EAAsB,CAAC,EAAkB,CAChD,MAAO,OAAO,IAQR,CACJ,IAAM,EAAY,MAAM,GAAoB,CAAM,EAElD,OAAO,aAAW,KAAK,CACrB,QACA,MAAO,gBAAc,WAAW,OAAO,EAAU,GAAG,EAAG,CAAC,EAAE,SAAS,QAAQ,CAC7E,CAAC,GAaL,eAAsB,CAAiE,CACrF,EAOA,CACA,IAAM,EAAa,MAAM,EAAe,EAExC,OAAQ,QACD,QAAM,YACT,OAAO,SAAS,CAAiB,EAC/B,SACA,iBAAiB,GAAG,iBAAe,QACnC,OAC6D,CAC7D,IAAM,EAAU,EAAW,CAAK,EAEhC,GAAI,EACF,OAAO,UAAO,QAAQ,EAAK,CAAO,EAEpC,IAAK,EACH,MAAM,IAAI,eAAa,8BAA+B,CAAE,MAAO,oBAAqB,CAAC,EAQvF,OANqB,UAAO,eAC1B,OAAO,KAAK,sBAAmB,CAAM,CAAC,EACtC,CACF,EAC6B,WAAW,CAAc,EAAE,cASvD,QAAM,aACN,QAAM,cACN,QAAM,cACN,QAAM,WACN,QAAM,KACT,OAAO,SAAS,CAAiB,EAC/B,SACA,MACA,kBAC4D,CAC5D,KAAM,GAAO,GACX,MAAM,IAAI,eAAa,8BAA+B,CACpD,MAAO,uCACT,CAAC,EAEH,IAAM,EAAU,iBAAc,UAAS,EACjC,EAAU,EAAW,CAAK,EAEhC,GAAI,EAAK,OAAO,EAAQ,QAAQ,EAAK,CAAO,EAE5C,IAAM,EAAO,sBAAmB,CAAgB,EAC1C,EAAS,SAAM,eAAe,EAAM,CAAO,EAAE,OAAO,CAAc,EACxE,IAAK,EAAO,WACV,MAAM,IAAI,eAAa,8BAA+B,CACpD,MAAO,uCACT,CAAC,EAEH,OAAO,EAAQ,eAAe,OAAO,KAAK,EAAO,UAAU,EAAG,CAAE,SAAQ,CAAC,WAQ3E,MAAM,IAAI,eAAa,6BAA8B,CAAE,OAAM,CAAC,GAIpE,eAAsB,EAAqB,CAAC,EAAkB,CAC5D,IAAM,EAAa,MAAM,EAAe,EAExC,OAAO,SAAS,CAAkB,CAAC,EAAmC,CACpE,IAAK,EACH,MAAM,IAAI,eAAa,8BAA+B,CAAE,MAAO,uBAAwB,CAAC,EAE1F,IAAM,EAAS,EAAgB,SAAS,CAAK,EAAI,WAAS,MAAQ,WAAS,QACnE,WAAY,EAAO,CAAE,OAAQ,EAAK,UAAqB,QAAS,EAAW,CAAK,CAAE,CAAC,EAC3F,IAAK,EACH,MAAM,IAAI,eAAa,+BAAgC,CAAE,MAAO,qBAAsB,CAAC,EAEzF,OAAO,GAIX,SAAS,EAAQ,CAAC,EAAkC,CAClD,OAAO,eAAe,CAAQ,EAC5B,OACA,YACA,eACA,UACA,cACqB,CACrB,IAAM,EAAO,MAAM,GAAQ,WAAW,EAEhC,EAAQ,EAAW,MAEzB,KAAM,GAAU,GAAO,MAAM,IAAI,eAAa,wBAAwB,EACtE,IAAK,EACH,MAAM,IAAI,eAAa,8BAA+B,CACpD,MAAO,oCACT,CAAC,EACH,IAAM,EAAY,IAAY,MAAM,EAAY,CAAK,GAAG,GAAgB,YAAU,OAE1E,QAAS,MAAM,GAAkB,CACvC,YACA,QAAS,EACT,OAAQ,EACR,aACA,MACF,CAAC,EACK,EAAa,MAAM,EAAO,gBAAgB,CAAI,EAGpD,OAFA,EAAW,kBAAkB,EAEtB,EAAW,CAAK,EAAE,YAAY,EAAW,mBAAmB,EAAE,MAAM,CAAC,GAIhF,eAAe,CAAW,CAAC,EAAkB,CAC3C,IAAM,EAAmB,MAAM,EAAW,CAAK,EAAE,kBAAkB,EAEnE,MAAO,EACJ,YAAU,SAAU,GACpB,YAAU,MAAO,qBAAmB,EAAkB,YAAU,IAAI,GACpE,YAAU,SAAU,qBAAmB,EAAkB,YAAU,OAAO,CAC7E,EAGF,eAAe,EAAyB,EACtC,aACA,YACA,OACA,SACA,WAAY,EAAmB,IACM,CACrC,IAAM,EAAQ,EAAW,MACnB,GAAW,MAAM,EAAY,CAAK,GAAG,YAAU,SAE/C,EAAa,GAAoB,EAAgB,SAAS,CAAK,EAE/D,EAAe,EAAW,aAAa,QAAQ,EAG/C,EAAc,KAAK,KAAK,EAAe,EAAU,IAAI,EAI3D,MAAO,CACL,OAHa,MAAM,EAAW,CAAK,EAAE,SAAS,CAAE,QAAS,EAAQ,aAAY,aAAY,CAAC,EAI1F,QAAS,CACP,CAAE,QAAS,EAAW,MAAO,CAAa,EAC1C,GAAI,EAAO,CAAC,CAAE,QAAS,GAAI,OAAQ,MAAM,EAAY,CAAI,EAAG,MAAO,CAAE,CAAC,EAAI,CAAC,CAC7E,CACF,MA3gBF,EAeA,EAEA,GAsBA,GAEA,GACA,GACA,GAGa,eA9Cb,8BAeA,2BAEA,qBACA,KACA,IAiBA,KAGA,yCAEA,qCACA,2BACA,2BACA,KAEa,EAAkB,CAAC,QAAM,KAAM,QAAM,QAAQ,ICJnD,SAAS,CAAW,CAAC,EAAiB,CAC3C,OAAO,EAAQ,QAAQ,0BAA2B,EAAE,EAG/C,SAAS,CAAkB,CAAC,EAAiB,CAClD,IAAM,EAAkB,EAAY,CAAO,EAC3C,OACE,GAAe,CAAe,GAAK,GAAqB,CAAe,cAIpE,SAAS,CAAkB,CAAC,EAAiB,CAClD,OAAO,EAAY,EAAc,CAAO,CAAC,EAG3C,eAAe,EAAoB,CAAC,EAAiB,CACnD,eAAe,CAAe,EAC5B,UACA,SACyD,CAKzD,OAJA,EAAM,QAAQ,CAAC,EAAM,IAAU,CAC7B,EAAQ,KAAK,EAAO,EAAM,OAAW,GAAM,EAAK,aAAa,KAAK,EACnE,EAEM,EAAQ,MAAM,EAQvB,MAAO,CACL,WANiB,IAAM,CACvB,IAAM,EAAU,EAAK,WAAW,CAAC,EACjC,OAAO,QAAQ,QAAQ,EAAmB,CAAO,CAAC,GAKlD,iBACF,EAGF,eAAsB,EAA6C,CACjE,EAOA,CACA,IAAM,EAAS,WAAY,EAAgB,EAAc,OAAS,OAE5D,EAAQ,UAAW,EAAgB,EAAc,OAAS,EAAI,EAE9D,EAAiB,yBACrB,mBAAoB,GAAiB,EAAc,eAC/C,EAAc,eACd,uBAAqB,wBAAsB,GAAQ,CAAE,OAAM,CAAC,CAClE,EAEM,EAAO,GAAU,MAAM,EAAqB,CAAK,GAAG,CAAE,SAAQ,gBAAe,CAAC,EAAI,OAElF,EAAS,EACX,MAAM,GAAqB,CAAI,GAC/B,WAAY,GACV,EAAc,OACd,OAEN,SAAS,CAAU,EAAG,CACpB,OAAO,QAAQ,QAAQ,GAAQ,WAAW,CAAC,EAG7C,IAAQ,aAAY,cAAa,iBAAgB,GAAY,MAAM,EAAkB,CAAE,OAAM,CAAC,EAE9F,SAAS,CAAgB,CAAC,EAAiB,EAAc,GAAM,CAC7D,OAAO,EAAW,EAAY,EAAc,CAAO,CAAC,CAAC,EAGvD,MAAO,IACF,EACH,aACA,cACA,qBACA,WACA,sBACA,WAAY,EACZ,cACA,cACA,qBACA,gBAAiB,EACjB,SAAU,GAAS,CAAE,cAAa,cAAa,QAAO,CAAC,CACzD,EAGF,eAAe,EAAiB,EAC9B,aACA,YACA,OACA,UACA,UACoB,CACpB,IAAK,EAAmB,CAAS,EAC/B,MAAM,IAAI,eAAa,+BAAgC,CAAE,QAAS,CAAU,CAAC,EAG/E,IAAM,EAAc,KAAK,KAAK,EAAW,aAAa,QAAQ,EAAI,EAAU,IAAI,EAE1E,EAAQ,MAAM,EAAW,CAAK,EAAE,SAAS,CAC7C,QAAS,EAAmB,CAAM,EAClC,WAAY,GACZ,aACF,CAAC,EAEK,EAAe,EAAO,MAAM,EAAY,CAAI,EAAI,KAEhD,EAAgC,CAAC,EAEvC,EAAc,KAAK,CACjB,QAAS,EACT,MAAO,EAAW,aAAa,QAAQ,CACzC,CAAC,EACD,IAAQ,SAAQ,WAAY,EAAa,CACvC,OAAQ,EACR,QAAS,EACT,UACA,OACF,CAAC,EAGD,KAAM,GAAU,GACd,MAAM,IAAI,eAAa,oCAAqC,CAAE,SAAQ,YAAW,CAAC,EACpF,IAAM,EAAa,MAAM,EAAe,EAClC,EAAU,IAAI,qBAAmB,EAAW,CAAK,CAAC,EAExD,MAAM,QAAQ,IACZ,EAAO,IAAI,MAAO,IAAmB,CACnC,IAAM,EAAQ,MAAM,EAAW,CAAK,EAAE,SAAS,EAAK,IAAI,EAExD,EAAQ,SAAS,cAAY,WAAW,OAAO,KAAK,EAAO,KAAK,CAAC,EAAG,EAAK,KAAK,EAC/E,CACH,EAEA,QAAW,KAAU,EAAS,CAC5B,IAAM,EACJ,YAAa,GAAU,EAAO,QAAU,EAAO,QAAU,EAAgB,CAAM,EAC3E,EAAa,MAAM,EAAe,EAClC,EAAe,UAAW,eAAe,EAAgB,CAAO,EAAG,EAAW,CAAK,CAAC,EAE1F,EAAQ,UAAU,EAAc,EAAO,KAAK,EAI9C,GAAI,EACF,EAAQ,UAAU,EAAc,CAAC,EAGnC,MAAO,CAAE,UAAS,MAAO,CAAO,EAGlC,SAAS,EAAQ,EACf,cACA,cACA,UAKC,CACD,OAAO,eAAe,CAAQ,EAC5B,YACA,aACA,eAAe,YAAU,QACtB,GACkB,CACrB,IAAM,EAAO,MAAM,GAAQ,WAAW,EACtC,KAAM,GAAU,GAAO,MAAM,IAAI,eAAa,wBAAwB,EACtE,IAAK,EACH,MAAM,IAAI,eAAa,8BAA+B,CACpD,MAAO,oCACT,CAAC,EAEH,IAAM,EAAU,EAAK,UAAY,MAAM,EAAY,GAAG,IAG9C,UAAS,SAAU,MAAM,GAAkB,IAC9C,EACH,aACA,UACA,YACA,OAAQ,CACV,CAAC,EAGK,GADK,MAAM,EAAO,gBAAgB,CAAE,UAAS,OAAM,CAAC,GACzC,MAAM,EAEvB,OAAO,EAAY,CAAK,GAK5B,eAAe,EAAO,EACpB,aACA,YACA,OACA,UACA,SACA,kBACmD,CACnD,IAAM,EAAuB,EAAc,CAAS,EACpD,IAAK,EAAmB,CAAoB,EAC1C,MAAM,IAAI,eAAa,+BAAgC,CAAE,QAAS,CAAqB,CAAC,EAG1F,IAAM,EAAc,KAAK,KAAK,EAAW,aAAa,QAAQ,EAAI,EAAU,IAAI,EAE1E,EAAQ,MAAM,EAAW,CAAK,EAAE,SAAS,CAC7C,QAAS,EAAmB,CAAM,EAClC,WAAY,GACZ,aACF,CAAC,EAEK,EAAe,OAAO,EAAQ,QAAQ,CAAC,CAAC,EACxC,EAAe,EAAO,MAAM,EAAY,CAAI,EAAI,KAEhD,EAAgB,CAAC,EASvB,GANA,EAAc,KAAK,CACjB,QAAS,EAAgB,CAAS,EAClC,MAAO,EAAW,aAAa,QAAQ,CACzC,CAAC,EAGG,EACF,EAAc,KAAK,CAAE,OAAQ,EAAc,MAAO,CAAE,CAAC,EAGvD,IAAQ,SAAQ,WAAY,EAAa,CACvC,OAAQ,EACR,QAAS,EACT,QAAS,EACT,OACF,CAAC,EAGD,KAAM,GAAU,GACd,MAAM,IAAI,eAAa,oCAAqC,CAAE,SAAQ,YAAW,CAAC,EACpF,IAAM,EAAa,MAAM,EAAe,EAClC,EAAO,IAAI,QAAK,CAAE,QAAS,EAAW,CAAK,CAAE,CAAC,EAEpD,QAAa,OAAM,QAAO,iBAAiB,EACzC,EAAK,SAAS,CACZ,OACA,QACA,cACA,YAAa,EAAiB,GAAO,MACvC,CAAC,EAIH,QAAW,KAAU,EAAS,CAC5B,IAAM,EACJ,YAAa,GAAU,EAAO,QAAU,EAAO,QAAU,EAAgB,CAAM,EAC3E,EAAS,EAAO,OAClB,EACE,CAAE,OAAQ,EAAc,MAAO,CAAE,EACjC,OACF,CAAE,UAAS,MAAO,EAAO,KAAM,EAEnC,GAAI,EACF,EAAK,UAAU,CAAM,EAIzB,MAAO,CAAE,OAAM,QAAO,OAAQ,CAAqB,EAGrD,SAAS,EAAkB,CAAC,EAAkD,CAC5E,IAAM,EAAU,EAAK,WAAW,CAAC,EACjC,OAAO,EAAmB,CAAO,MA9TnC,EAMA,EAUA,GAwBM,gBAxCN,oCAMA,8BAUA,4BACA,IAqBA,IAEM,EAAQ,QAAM,cCMpB,eAAsB,EAA6C,CACjE,EACA,EAO2B,CAC3B,OAAQ,QACD,QAAM,YAIT,OAHgB,MAAM,GACnB,GAAmD,CAAC,CACvD,OAIG,QAAM,MAET,OADgB,MAAM,GAAmB,CAAwC,OAI9E,QAAM,aACN,QAAM,cACN,QAAM,cACN,QAAM,KAKT,OAJgB,MAAM,EAAkB,CACtC,WACI,CACN,CAAC,UAKD,MAAM,IAAI,eAAa,6BAA8B,CAAE,OAAM,CAAC,OAjFpE,8CAUA,KACA,IACA,KAyEA,4yBCrFA,KACA,KACA,IACA,KACA",
|
|
18
|
-
"debugId": "
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "66CF851B082B35C564756E2164756E21",
|
|
19
19
|
"names": []
|
|
20
20
|
}
|
package/dist/src/utxo/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var eX=Object.create;var{getPrototypeOf:XZ,defineProperty:qX,getOwnPropertyNames:ZZ}=Object;var GZ=Object.prototype.hasOwnProperty;var AG=(X,Z,G)=>{G=X!=null?eX(XZ(X)):{};let J=Z||!X||!X.__esModule?qX(G,"default",{value:X,enumerable:!0}):G;for(let Q of ZZ(X))if(!GZ.call(J,Q))qX(J,Q,{get:()=>X[Q],enumerable:!0});return J};var JZ=(X,Z)=>{for(var G in Z)qX(X,G,{get:Z[G],enumerable:!0,configurable:!0,set:(J)=>Z[G]=()=>J})};var I=(X,Z)=>()=>(X&&(Z=X(X=0)),Z);var kG=((X)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(X,{get:(Z,G)=>(typeof require!=="undefined"?require:Z)[G]}):X)(function(X){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+X+'" is not supported')});import{AssetValue as QZ,BaseDecimal as $Z}from"@swapkit/helpers";import{SwapKitApi as qZ}from"@swapkit/helpers/api";function NX(){function X(){let Z=Date.now(),G=
|
|
1
|
+
var eX=Object.create;var{getPrototypeOf:XZ,defineProperty:qX,getOwnPropertyNames:ZZ}=Object;var GZ=Object.prototype.hasOwnProperty;var AG=(X,Z,G)=>{G=X!=null?eX(XZ(X)):{};let J=Z||!X||!X.__esModule?qX(G,"default",{value:X,enumerable:!0}):G;for(let Q of ZZ(X))if(!GZ.call(J,Q))qX(J,Q,{get:()=>X[Q],enumerable:!0});return J};var JZ=(X,Z)=>{for(var G in Z)qX(X,G,{get:Z[G],enumerable:!0,configurable:!0,set:(J)=>Z[G]=()=>J})};var I=(X,Z)=>()=>(X&&(Z=X(X=0)),Z);var kG=((X)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(X,{get:(Z,G)=>(typeof require!=="undefined"?require:Z)[G]}):X)(function(X){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+X+'" is not supported')});import{AssetValue as QZ,BaseDecimal as $Z}from"@swapkit/helpers";import{SwapKitApi as qZ}from"@swapkit/helpers/api";function NX(){function X(){let Z=Date.now(),G=WX||Z;return WX=G,Z>WX?Z:G+1}return WZ+X().toString(36)}function OX(X){return async function Z(G,J=!0){return(await qZ.getChainBalance({chain:X,address:G,scamFilter:J})).map(({identifier:q,value:$,decimal:W})=>{return new QZ({decimal:W||$Z[X],value:$,identifier:q})})}}var WZ,WX=0;var LX=I(()=>{WZ=typeof process!=="undefined"&&process.pid?process.pid.toString(36):""});import{Chain as T,RequestClient as jX,SKConfig as t,SwapKitError as K,warnOnce as AX}from"@swapkit/helpers";import{networks as LZ}from"bitcoinjs-lib";import c from"coininfo";async function jZ({chain:X,txHash:Z}){let G=t.get("rpcUrls")[X],J=JSON.stringify({jsonrpc:"2.0",method:"sendrawtransaction",params:[Z],id:NX()}),Q=await jX.post(G,{headers:{"Content-Type":"application/json"},body:J});if(Q.error)throw new K("toolbox_utxo_broadcast_failed",{error:Q.error?.message});if(Q.result.includes('"code":-26'))throw new K("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return Q.result}function BX(X){return`https://api.blockchair.com/${BZ(X)}`}function yX(X){switch(X){case T.Bitcoin:return 5;case T.Dogecoin:return 1e4;case T.Litecoin:return 1;case T.Zcash:return 1;default:return 2}}function BZ(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.Zcash:return"zcash";case T.Polkadot:return"polkadot";default:return"bitcoin"}}async function DZ(X){try{let{feePerKb:Z}=await jX.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),G=Z/1000;return Math.max(G,yX(X))}catch(Z){return yX(X)}}async function DX(X,Z){let G=await jX.get(`${X}${Z?`${X.includes("?")?"&":"?"}key=${Z}`:""}`);if(!G||G.context.code!==200)throw new K("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return G.data}async function kX({address:X,chain:Z,apiKey:G}){if(!X)throw new K("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await DX(`${BX(Z)}/dashboards/address/${X}?transaction_details=true`,G))[X]}catch(J){return{utxo:[],address:{balance:0,transaction_count:0}}}}async function UZ({address:X,chain:Z,apiKey:G}){return(await kX({address:X,chain:Z,apiKey:G}))?.address.balance||0}async function wX({chain:X,apiKey:Z,txHash:G}){if(!G)throw new K("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await DX(`${BX(X)}/raw/transaction/${G}`,Z))?.[G]?.raw_transaction||""}catch(J){return console.error("Failed to fetch raw transaction:",J),""}}async function zZ({chain:X,address:Z,apiKey:G,offset:J=0,limit:Q=30}){return(await DX(`${BX(X)}/outputs?q=recipient(${Z}),is_spent(false),value(..2000000000000000)&s=value(desc)&fields=is_spent,transaction_hash,index,value,script_hex,block_id,spending_signature_hex&limit=${Q}&offset=${J}`,G)).map(({is_spent:L,script_hex:j,block_id:B,transaction_hash:U,index:D,value:z,spending_signature_hex:Y})=>({hash:U,index:D,value:z,txHex:Y,script_hex:j,is_confirmed:B!==-1,is_spent:L}))}function MZ(X){return X.reduce((Z,G)=>Z+G.value,0)}function PX(X,Z){let G=[...X].sort((J,Q)=>Q.value-J.value);if(Z){let J=[],Q=0;for(let q of G)if(J.push(q),Q+=q.value,Q>=Z)break;return J}return G}async function KX({chain:X,address:Z,apiKey:G,targetValue:J,accumulativeValue:Q=0,offset:q=0,limit:$=30}){if(!Z)throw new K("toolbox_utxo_invalid_params",{error:"Address is required"});try{let W=await zZ({targetValue:J,chain:X,address:Z,apiKey:G,offset:q,limit:$}),j=W.length<$,B=W.filter(({is_spent:H})=>!H),U=MZ(B),D=Q+U,z=J&&D>=J;if(j||z)return PX(B,J);let Y=await KX({chain:X,address:Z,apiKey:G,offset:q+$,limit:$,accumulativeValue:D,targetValue:J}),C=[...B,...Y];return PX(C,J)}catch(W){return console.error("Failed to fetch unspent UTXOs:",W),[]}}async function YZ({address:X,chain:Z,apiKey:G,fetchTxHex:J=!0,targetValue:Q}){let q=await KX({chain:Z,address:X,apiKey:G,targetValue:Q}),$=[];for(let{hash:W,index:L,script_hex:j,value:B}of q){let U;if(J)U=await wX({txHash:W,chain:Z,apiKey:G});$.push({address:X,hash:W,index:L,txHex:U,value:B,witnessUtxo:{value:B,script:Buffer.from(j,"hex")}})}return $}function TZ(X){let Z=t.get("apiKeys").blockchair||"";return AX(!Z,"No Blockchair API key found. Functionality will be limited."),{broadcastTx:(G)=>jZ({txHash:G,chain:X}),getRawTx:(G)=>wX({txHash:G,chain:X,apiKey:Z}),getSuggestedTxFee:()=>DZ(X),getBalance:(G)=>UZ({address:G,chain:X,apiKey:Z}),getAddressData:(G)=>kX({address:G,chain:X,apiKey:Z}),getUtxos:(G)=>YZ({...G,chain:X,apiKey:Z})}}function CZ(X){return X}function _(X){let Z=t.get("apis")[X];if(Z)return AX(!0,"Using custom UTXO API. Be sure to implement all methods to avoid issues."),Z;return TZ(X)}function v(){return function X(Z){switch(Z){case T.Bitcoin:return LZ.bitcoin;case T.BitcoinCash:return c.bitcoincash.main.toBitcoinJS();case T.Dash:return c.dash.main.toBitcoinJS();case T.Litecoin:return c.litecoin.main.toBitcoinJS();case T.Dogecoin:{let G={private:70615956,public:70617039},J=c.dogecoin.test;return J.versions.bip32=G,c.dogecoin.main.toBitcoinJS()}case T.Zcash:{let{isStagenet:G}=t.get("envs");return G?vZ:HZ}default:throw new K("toolbox_utxo_not_supported",{chain:Z})}}}var HZ,vZ;var RX=I(()=>{LX();HZ={messagePrefix:`\x19Zcash Signed Message:
|
|
2
2
|
`,bech32:"zc",bip32:{public:76067358,private:76066276},pubKeyHash:28,scriptHash:28,wif:128},vZ={messagePrefix:`\x19Zcash Signed Message:
|
|
3
|
-
`,bech32:"ztestsapling",bip32:{public:70617039,private:70615956},pubKeyHash:29,scriptHash:28,wif:239}});import{SwapKitError as EX}from"@swapkit/helpers";import fX from"bs58check";import VX from"cashaddrjs";function zX(X){try{return e(X),!0}catch(Z){return!1}}function MX(X){return e(X)?.network}function S(X){let Z=e(X);if(Z?.format==="legacy")return X;return FZ(Z)}function p(X){let Z=e(X);return NZ(Z)}function e(X){try{let Z=IZ(X);if(Z)return Z}catch(Z){}try{let Z=_Z(X);if(Z)return Z}catch(Z){}throw new EX("toolbox_utxo_invalid_address",{address:X})}function IZ(X){try{let Z=fX.decode(X);if(Z.length!==21)throw new EX("toolbox_utxo_invalid_address",{address:X});let G=Z[0],J=Array.prototype.slice.call(Z,1);switch(G){case M.legacy.mainnet.p2pkh:return{hash:J,format:"legacy",network:"mainnet",type:"p2pkh"};case M.legacy.mainnet.p2sh:return{hash:J,format:"legacy",network:"mainnet",type:"p2sh"};case M.legacy.testnet.p2pkh:return{hash:J,format:"legacy",network:"testnet",type:"p2pkh"};case M.legacy.testnet.p2sh:return{hash:J,format:"legacy",network:"testnet",type:"p2sh"};case M.bitpay.mainnet.p2pkh:return{hash:J,format:"bitpay",network:"mainnet",type:"p2pkh"};case M.bitpay.mainnet.p2sh:return{hash:J,format:"bitpay",network:"mainnet",type:"p2sh"};default:return}}catch(Z){return}}function _Z(X){if(X.indexOf(":")!==-1)try{return RX(X)}catch(Z){}else{let Z=["bitcoincash","bchtest","bchreg"];for(let G of Z)try{return RX(`${G}:${X}`)}catch(J){}}return}function RX(X){try{let{hash:Z,prefix:G,type:J}=VX.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call(Z,0),network:G==="bitcoincash"?"mainnet":"testnet",type:J==="P2PKH"?"p2pkh":"p2sh"}}catch(Z){return}}function FZ(X){let Z=M.legacy[X.network][X.type],G=Buffer.alloc(1+X.hash.length);return G[0]=Z,G.set(X.hash,1),fX.encode(G)}function NZ(X){let Z=X.network==="mainnet"?"bitcoincash":"bchtest",G=X.type==="p2pkh"?"P2PKH":"P2SH",J=new Uint8Array(X.hash);return VX.encode(Z,G,J)}var UX,M;var SX=I(()=>{((G)=>{G.Mainnet="mainnet";G.Testnet="testnet"})(UX||={});M={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}}});import{Chain as b,SwapKitError as OZ}from"@swapkit/helpers";var XX=(X)=>{switch(X){case b.Bitcoin:case b.BitcoinCash:return 550;case b.Dash:case b.Litecoin:return 5500;case b.Dogecoin:return 1e5;case b.Zcash:return 546;default:throw new OZ("toolbox_utxo_not_supported",{chain:X})}},A=({inputs:X,outputs:Z,feeRate:G=1,chain:J=b.Bitcoin})=>{let Q=Math.ceil(G),q=X[0]&&"address"in X[0]&&X[0].address?o(X[0].address):"P2PKH",$=X.filter((D)=>P(D)*Q<=D.value),L=ZX+Z.reduce((D,z)=>D+u(z,q),0),W=Z.reduce((D,z)=>D+z.value,0),j=L*Q,B=0,U=[];for(let D of $){let z=P(D),Y=Q*z;j+=Y,B+=D.value,U.push(D);let H=j+W;if(B<H)continue;let T=B-H,V=Q*u({address:"",value:0},q);if(T>V){let w=V+j,FX=B-(W+w);if(FX>Math.max(P({})*Q,XX(J)))return{inputs:U,outputs:Z.concat({value:FX,address:""}),fee:w}}return{inputs:U,outputs:Z,fee:j}}return{fee:Q*x({inputs:X,outputs:Z,feeRate:Q})}};var xX=I(()=>{m()});import{SwapKitError as yZ}from"@swapkit/helpers";import{opcodes as PZ,script as AZ}from"bitcoinjs-lib";function k(X){let Z=Buffer.from(X,"utf8");return AZ.compile([PZ.OP_RETURN,Z])}var kZ=1000,ZX=10,mX=10,wZ=41,KZ=107,GX,JX,n,o=(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 yZ("toolbox_utxo_invalid_address",{address:X})},x=({inputs:X,outputs:Z,feeRate:G})=>{let J=X[0]&&"address"in X[0]&&X[0].address?o(X[0].address):"P2PKH",Q=X.filter(($)=>$.value>=JX["type"in $?$.type:"P2PKH"]*Math.ceil(G)).reduce(($,L)=>$+P(L),0),q=Z?.reduce(($,L)=>$+u(L),0)||n[J];return ZX+Q+q},P=(X)=>{if("type"in X)return JX[X.type];if("address"in X&&X.address)return JX[o(X.address)];return wZ+KZ},u=(X,Z)=>{if(X?.script)return mX+X.script.length+(X.script.length>=74?2:1);if(Z)return n[Z];return n.P2PKH};var gX=I(()=>{((G)=>{G.P2PKH="P2PKH";G.P2WPKH="P2WPKH"})(GX||={});JX={["P2PKH"]:148,["P2WPKH"]:68},n={["P2PKH"]:34,["P2WPKH"]:31}});var m=I(()=>{bX();SX();xX();gX()});import bZ from"@bitcoinerlab/secp256k1";import{HDKey as RZ}from"@scure/bip32";import{mnemonicToSeedSync as EZ}from"@scure/bip39";import{Chain as CX,FeeOption as fZ,NetworkDerivationPath as VZ,SKConfig as lX,SwapKitError as SZ,derivationPathToString as xZ,updateDerivationPath as mZ}from"@swapkit/helpers";import{hash160 as gZ}from"bitcoinjs-lib/src/crypto";import hX from"bs58check";import{ECPairFactory as lZ}from"ecpair";import{P as YX,match as hZ}from"ts-pattern";function pZ(X,Z=!1){let G=gZ(X),J=Z?Buffer.from([28,186]):Buffer.from([28,184]),Q=Buffer.concat([J,G]);return hX.encode(Q)}function QX(X){try{if(X.startsWith("z"))return console.warn("Shielded Zcash addresses (z-addresses) are not supported. Use transparent addresses (t1/t3) only."),!1;let Z=X.startsWith("t1"),G=X.startsWith("t3");if(!(Z||G))return!1;let{isStagenet:J}=lX.get("envs");if(Z&&J||G&&!J)return!1;return uZ(X,cX)}catch{return!1}}function uZ(X,Z){try{let G=hX.decode(X);if(G.length<21)return!1;let J=G[0];return J===Z.pubKeyHash||J===Z.scriptHash}catch{return!1}}async function nZ({phrase:X,derivationPathString:Z}){let G=EZ(X),Q=RZ.fromMasterSeed(G).derive(Z);if(!Q.privateKey)throw new Error("Unable to derive private key");let q=oZ.fromPrivateKey(Buffer.from(Q.privateKey),{network:cX}),{isStagenet:$}=lX.get("envs"),L=pZ(q.publicKey,$);return{getAddress(){return Promise.resolve(L)},signTransaction(W){for(let j=0;j<W.inputCount;j++)W.signInput(j,q);return Promise.resolve(W)}}}async function HX(X){let Z=await hZ(X).with({signer:YX.not(YX.nullish)},({signer:L})=>Promise.resolve(L)).with({phrase:YX.string},({phrase:L,derivationPath:W,index:j=0})=>{let B=W||VZ[CX.Zcash]||[44,133,0,0,0],U=mZ(B,{index:j}),D=xZ(U);return nZ({phrase:L,derivationPathString:D})}).otherwise(()=>Promise.resolve(void 0)),{getFeeRates:G,broadcastTx:J,...Q}=await R({chain:CX.Zcash,signer:Z});function q(L){return L.getAddress()}async function $({recipient:L,assetValue:W,feeOptionKey:j=fZ.Fast,...B}){let U=await Z?.getAddress();if(!(Z&&U))throw new SZ("toolbox_utxo_no_signer");let D=B.feeRate||(await G())[j],z={...B,assetValue:W,feeRate:D,recipient:L,sender:U},{psbt:Y}=await Q.createTransaction(z),H=await Z.signTransaction(Y);H.finalizeAllInputs();let T=H.extractTransaction().toHex();return J(T)}return{...Q,broadcastTx:J,getFeeRates:G,transfer:$,getAddressFromKeys:q,validateAddress:QX}}var cZ,cX,oZ;var $X=I(()=>{m();r();cZ=CX.Zcash,cX=v()(cZ);oZ=lZ(bZ)});import{AssetValue as TX,Chain as F,DerivationPath as rZ,FeeOption as O,NetworkDerivationPath as dZ,SwapKitError as y,SwapKitNumber as iZ,applyFeeMultiplier as pX,derivationPathToString as aZ,updateDerivationPath as sZ}from"@swapkit/helpers";import{Psbt as tZ,address as eZ,initEccLib as nX,payments as uX}from"bitcoinjs-lib";import{ECPairFactory as XG}from"ecpair";import vX from"@bitcoinerlab/secp256k1";import{ECPair as ZG,HDNode as GG}from"@psf/bitcoincashjs-lib";import{HDKey as JG}from"@scure/bip32";import{mnemonicToSeedSync as oX}from"@scure/bip39";function QG({inputs:X,outputs:Z,chain:G,psbt:J,sender:Q,compiledMemo:q}){for(let $ of X){let L=!!$.witnessUtxo&&!d.includes(G)&&{witnessUtxo:$.witnessUtxo},W=d.includes(G)&&{nonWitnessUtxo:$.txHex?Buffer.from($.txHex,"hex"):void 0};J.addInput({hash:$.hash,index:$.index,...L,...W})}for(let $ of Z){let L="address"in $&&$.address?$.address:Q,W=$.script;if(W&&!q)continue;let j=W?{script:q,value:0}:{address:L,value:$.value};nX(vX),J.addOutput(j)}return{psbt:J,inputs:X}}async function rX({assetValue:X,recipient:Z,memo:G,feeRate:J,sender:Q,fetchTxHex:q=!1}){let $=X.chain,L=G?await k(G):null,W=await aX({assetValue:X,recipient:Z,memo:G,sender:Q,fetchTxHex:q}),{inputs:j,outputs:B}=A({...W,feeRate:J,chain:$});if(!(j&&B))throw new y("toolbox_utxo_insufficient_balance",{sender:Q,assetValue:X});let U=await v(),D=new tZ({network:U($)});if($===F.Dogecoin)D.setMaximumFeeRate(650000000);let{psbt:z,inputs:Y}=await QG({inputs:j,outputs:B,chain:$,psbt:D,sender:Q,compiledMemo:L});return{psbt:z,utxos:W.inputs,inputs:Y}}async function dX(){let X=await v();return function Z({address:G,chain:J}){if(J===F.BitcoinCash)return E(G);if(J===F.Zcash)return QX(G);try{return nX(vX),eZ.toOutputScript(G,X(J)),!0}catch(Q){return!1}}}async function $G({chain:X,phrase:Z,derivationPath:G}){let J=(await i(X))({phrase:Z,derivationPath:G});async function Q($){return await $.signAllInputs(J),$}async function q(){return(await IX(X))(J)}return{getAddress:q,signTransaction:Q}}async function R({chain:X,...Z}){let G="phrase"in Z?Z.phrase:void 0,J="index"in Z?Z.index||0:0,Q=aZ("derivationPath"in Z&&Z.derivationPath?Z.derivationPath:sZ(dZ[X],{index:J})),q=G?await $G({chain:X,phrase:G,derivationPath:Q}):("signer"in Z)?Z.signer:void 0;function $(){return Promise.resolve(q?.getAddress())}let L=await IX(X),W=await dX(),j=await i(X);return{accumulative:A,calculateTxSize:x,getAddressFromKeys:L,getAddress:$,validateAddress:(B)=>W({address:B,chain:X}),broadcastTx:(B)=>_(X).broadcastTx(B),createTransaction:rX,createKeysForPath:j,getFeeRates:()=>a(X),getInputsOutputsFee:iX,transfer:WG(q),getPrivateKeyFromMnemonic:(B)=>{return j(B).toWIF()},getBalance:OX(X),estimateTransactionFee:LG(X),estimateMaxSendableAmount:qG(X)}}async function iX({assetValue:X,feeOptionKey:Z=O.Fast,feeRate:G,memo:J,sender:Q,recipient:q}){let $=X.chain,L=await aX({assetValue:X,sender:Q,memo:J,recipient:q}),W=G?Math.floor(G):(await a($))[Z];return A({...L,feeRate:W,chain:$})}function qG(X){return async function Z({from:G,memo:J,feeRate:Q,feeOptionKey:q=O.Fast,recipients:$=1}){let L=await _(X).getAddressData(G),W=Q?Math.ceil(Q):(await a(X))[q],j=L?.utxo.map((Y)=>({...Y,type:"P2PKH",hash:""})).filter((Y)=>Y.value>Math.max(XX(X),P(Y)*W));if(!j?.length)return TX.from({chain:X});let B=TX.from({chain:X,value:j.reduce((Y,H)=>Y+H.value,0)}),U=typeof $==="number"?Array.from({length:$},()=>({address:G,value:0})):$;if(J){let Y=await k(J);U.push({address:G,script:Y,value:0})}let z=x({inputs:j,outputs:U,feeRate:W})*W;return B.sub(z)}}function LG(X){return async(Z)=>{let G=await iX(Z);return TX.from({chain:X,value:iZ.fromBigInt(BigInt(G.fee),8).getValue("string")})}}async function i(X){let Z=await v();switch(X){case F.BitcoinCash:return function G({phrase:J,derivationPath:Q=`${rZ.BCH}/0`,wif:q}){let $=Z(X);if(q)return ZG.fromWIF(q,$);if(!J)throw new y("toolbox_utxo_invalid_params",{error:"No phrase provided"});return GG.fromSeedBuffer(Buffer.from(oX(J)),$).derivePath(Q).keyPair};case F.Bitcoin:case F.Dogecoin:case F.Litecoin:case F.Zcash:case F.Dash:return function G({phrase:J,wif:Q,derivationPath:q}){if(!(Q||J))throw new y("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let $=XG(vX),L=Z(X);if(Q)return $.fromWIF(Q,L);let W=oX(J),j=JG.fromMasterSeed(W,L).derive(q);if(!j.privateKey)throw new y("toolbox_utxo_invalid_params",{error:"Could not get private key from phrase"});return $.fromPrivateKey(Buffer.from(j.privateKey),{network:L})};default:throw new y("toolbox_utxo_not_supported",{chain:X})}}async function IX(X){let Z=await v();return function G(J){if(!J)throw new y("toolbox_utxo_invalid_params",{error:"Keys must be provided"});let Q=d.includes(X)?uX.p2pkh:uX.p2wpkh,{address:q}=Q({pubkey:J.publicKey,network:Z(X)});if(!q)throw new y("toolbox_utxo_invalid_address",{error:"Address not defined"});return q}}function WG(X){return async function Z({memo:G,recipient:J,feeOptionKey:Q,feeRate:q,assetValue:$}){let L=await X?.getAddress(),W=$.chain;if(!(X&&L))throw new y("toolbox_utxo_no_signer");if(!J)throw new y("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let j=q||(await a(W))[Q||O.Fast],{psbt:B}=await rX({recipient:J,feeRate:j,sender:L,assetValue:$,memo:G}),U=await X.signTransaction(B);return U.finalizeAllInputs(),_(W).broadcastTx(U.extractTransaction().toHex())}}async function a(X){let Z=await _(X).getSuggestedTxFee();return{[O.Average]:Z,[O.Fast]:pX(Z,O.Fast),[O.Fastest]:pX(Z,O.Fastest)}}async function aX({assetValue:X,recipient:Z,memo:G,sender:J,fetchTxHex:Q=!1}){let q=X.chain,$=(await a(q))[O.Fastest],L=Q||d.includes(q),W=X.getBaseValue("number"),j=Math.ceil(W+$*5000);return{inputs:await _(q).getUtxos({address:J,fetchTxHex:L,targetValue:j}),outputs:[{address:Z,value:W},...G?[{address:"",script:await k(G),value:0}]:[]]}}var d;var r=I(()=>{WX();m();s();$X();d=[F.Dash,F.Dogecoin]});import{Transaction as jG,TransactionBuilder as BG,address as DG}from"@psf/bitcoincashjs-lib";import{Chain as UG,FeeOption as zG,NetworkDerivationPath as MG,SwapKitError as g,derivationPathToString as YG,updateDerivationPath as CG}from"@swapkit/helpers";import{Psbt as HG}from"bitcoinjs-lib";function l(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function E(X){let Z=l(X);return zX(Z)&&MX(Z)==="mainnet"}function f(X){return l(p(X))}async function TG(X){async function Z({builder:J,utxos:Q}){return Q.forEach((q,$)=>{J.sign($,X,void 0,65,q.witnessUtxo?.value)}),J.build()}return{getAddress:()=>{let J=X.getAddress(0);return Promise.resolve(f(J))},signTransaction:Z}}async function _X(X){let Z="phrase"in X?X.phrase:void 0,G="index"in X?X.index||0:0,J=YG("derivationPath"in X&&X.derivationPath?X.derivationPath:CG(MG[N],{index:G})),Q=Z?(await i(N))({phrase:Z,derivationPath:J}):void 0,q=Q?await TG(Q):("signer"in X)?X.signer:void 0;function $(){return Promise.resolve(q?.getAddress())}let{getBalance:L,getFeeRates:W,broadcastTx:j,...B}=await R({chain:N});function U(D,z=!0){return L(l(p(D)))}return{...B,getAddress:$,broadcastTx:j,createTransaction:sX,buildTx:IG,getAddressFromKeys:_G,getBalance:U,getFeeRates:W,stripPrefix:l,stripToCashAddress:f,validateAddress:E,transfer:vG({getFeeRates:W,broadcastTx:j,signer:q})}}async function sX({assetValue:X,recipient:Z,memo:G,feeRate:J,sender:Q}){if(!E(Z))throw new g("toolbox_utxo_invalid_address",{address:Z});let q=Math.ceil(X.getBaseValue("number")+J*7500),$=await _(N).getUtxos({address:f(Q),fetchTxHex:!0,targetValue:q}),L=G?await k(G):null,W=[];W.push({address:Z,value:X.getBaseValue("number")});let{inputs:j,outputs:B}=A({inputs:$,outputs:W,feeRate:J,chain:N});if(!(j&&B))throw new g("toolbox_utxo_insufficient_balance",{sender:Q,assetValue:X});let U=await v(),D=new BG(U(N));await Promise.all(j.map(async(z)=>{let Y=await _(N).getRawTx(z.hash);D.addInput(jG.fromBuffer(Buffer.from(Y,"hex")),z.index)}));for(let z of B){let Y="address"in z&&z.address?z.address:S(Q),H=await v(),T=DG.toOutputScript(S(Y),H(N));D.addOutput(T,z.value)}if(L)D.addOutput(L,0);return{builder:D,utxos:j}}function vG({broadcastTx:X,getFeeRates:Z,signer:G}){return async function J({recipient:Q,assetValue:q,feeOptionKey:$=zG.Fast,...L}){let W=await G?.getAddress();if(!(G&&W))throw new g("toolbox_utxo_no_signer");if(!Q)throw new g("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let j=L.feeRate||(await Z())[$],{builder:B,utxos:U}=await sX({...L,assetValue:q,feeRate:j,recipient:Q,sender:W}),z=(await G.signTransaction({builder:B,utxos:U})).toHex();return X(z)}}async function IG({assetValue:X,recipient:Z,memo:G,feeRate:J,sender:Q,setSigHashType:q}){let $=p(Z);if(!E($))throw new g("toolbox_utxo_invalid_address",{address:$});let L=Math.ceil(X.getBaseValue("number")+J*7500),W=await _(N).getUtxos({address:f(Q),fetchTxHex:!1,targetValue:L}),j=Number(J.toFixed(0)),B=G?await k(G):null,U=[];if(U.push({address:S(Z),value:X.getBaseValue("number")}),B)U.push({script:B,value:0});let{inputs:D,outputs:z}=A({inputs:W,outputs:U,feeRate:j,chain:N});if(!(D&&z))throw new g("toolbox_utxo_insufficient_balance",{sender:Q,assetValue:X});let Y=await v(),H=new HG({network:Y(N)});for(let{hash:T,index:V,witnessUtxo:w}of D)H.addInput({hash:T,index:V,witnessUtxo:w,sighashType:q?65:void 0});for(let T of z){let V="address"in T&&T.address?T.address:S(Q),w=T.script?B?{script:B,value:0}:void 0:{address:V,value:T.value};if(w)H.addOutput(w)}return{psbt:H,utxos:W,inputs:D}}function _G(X){let Z=X.getAddress(0);return f(Z)}var N;var s=I(()=>{m();r();N=UG.BitcoinCash});import{Chain as h,SwapKitError as FG}from"@swapkit/helpers";async function NG(X,Z){switch(X){case h.BitcoinCash:return await _X(Z||{});case h.Zcash:return await HX(Z);case h.Bitcoin:case h.Dogecoin:case h.Litecoin:case h.Dash:return await R({chain:X,...Z});default:throw new FG("toolbox_utxo_not_supported",{chain:X})}}var tX=I(()=>{s();r();$X();s()});var yG={};JZ(yG,{validateZcashAddress:()=>QX,toLegacyAddress:()=>S,toCashAddress:()=>p,stripToCashAddress:()=>f,stripPrefix:()=>l,nonSegwitChains:()=>d,isValidAddress:()=>zX,getUtxoToolbox:()=>NG,getUtxoNetwork:()=>v,getUtxoApi:()=>_,getUTXOAddressValidator:()=>dX,getScriptTypeForAddress:()=>o,getOutputSize:()=>u,getInputSize:()=>P,getDustThreshold:()=>XX,getCreateKeysForPath:()=>i,detectAddressNetwork:()=>MX,createZcashToolbox:()=>HX,createUTXOToolbox:()=>R,createCustomUtxoApi:()=>HZ,createBCHToolbox:()=>_X,compileMemo:()=>k,calculateTxSize:()=>x,bchValidateAddress:()=>E,addressFromKeysGetter:()=>IX,accumulative:()=>A,UtxoNetwork:()=>UX,UTXOScriptType:()=>GX,TX_OVERHEAD:()=>ZX,OutputSizes:()=>n,OP_RETURN_OVERHEAD:()=>mX,MIN_TX_FEE:()=>kZ,InputSizes:()=>JX});var PG=I(()=>{tX();s();r();$X();m()});PG();export{QX as validateZcashAddress,S as toLegacyAddress,p as toCashAddress,f as stripToCashAddress,l as stripPrefix,d as nonSegwitChains,zX as isValidAddress,NG as getUtxoToolbox,v as getUtxoNetwork,_ as getUtxoApi,dX as getUTXOAddressValidator,o as getScriptTypeForAddress,u as getOutputSize,P as getInputSize,XX as getDustThreshold,i as getCreateKeysForPath,MX as detectAddressNetwork,HX as createZcashToolbox,R as createUTXOToolbox,HZ as createCustomUtxoApi,_X as createBCHToolbox,k as compileMemo,x as calculateTxSize,E as bchValidateAddress,IX as addressFromKeysGetter,A as accumulative,UX as UtxoNetwork,GX as UTXOScriptType,ZX as TX_OVERHEAD,n as OutputSizes,mX as OP_RETURN_OVERHEAD,kZ as MIN_TX_FEE,JX as InputSizes};
|
|
3
|
+
`,bech32:"ztestsapling",bip32:{public:70617039,private:70615956},pubKeyHash:29,scriptHash:28,wif:239}});import{SwapKitError as EX}from"@swapkit/helpers";import fX from"bs58check";import VX from"cashaddrjs";function zX(X){try{return e(X),!0}catch(Z){return!1}}function MX(X){return e(X)?.network}function S(X){let Z=e(X);if(Z?.format==="legacy")return X;return FZ(Z)}function p(X){let Z=e(X);return NZ(Z)}function e(X){try{let Z=IZ(X);if(Z)return Z}catch(Z){}try{let Z=_Z(X);if(Z)return Z}catch(Z){}throw new EX("toolbox_utxo_invalid_address",{address:X})}function IZ(X){try{let Z=fX.decode(X);if(Z.length!==21)throw new EX("toolbox_utxo_invalid_address",{address:X});let G=Z[0],J=Array.prototype.slice.call(Z,1);switch(G){case M.legacy.mainnet.p2pkh:return{hash:J,format:"legacy",network:"mainnet",type:"p2pkh"};case M.legacy.mainnet.p2sh:return{hash:J,format:"legacy",network:"mainnet",type:"p2sh"};case M.legacy.testnet.p2pkh:return{hash:J,format:"legacy",network:"testnet",type:"p2pkh"};case M.legacy.testnet.p2sh:return{hash:J,format:"legacy",network:"testnet",type:"p2sh"};case M.bitpay.mainnet.p2pkh:return{hash:J,format:"bitpay",network:"mainnet",type:"p2pkh"};case M.bitpay.mainnet.p2sh:return{hash:J,format:"bitpay",network:"mainnet",type:"p2sh"};default:return}}catch(Z){return}}function _Z(X){if(X.indexOf(":")!==-1)try{return bX(X)}catch(Z){}else{let Z=["bitcoincash","bchtest","bchreg"];for(let G of Z)try{return bX(`${G}:${X}`)}catch(J){}}return}function bX(X){try{let{hash:Z,prefix:G,type:J}=VX.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call(Z,0),network:G==="bitcoincash"?"mainnet":"testnet",type:J==="P2PKH"?"p2pkh":"p2sh"}}catch(Z){return}}function FZ(X){let Z=M.legacy[X.network][X.type],G=Buffer.alloc(1+X.hash.length);return G[0]=Z,G.set(X.hash,1),fX.encode(G)}function NZ(X){let Z=X.network==="mainnet"?"bitcoincash":"bchtest",G=X.type==="p2pkh"?"P2PKH":"P2SH",J=new Uint8Array(X.hash);return VX.encode(Z,G,J)}var UX,M;var SX=I(()=>{((G)=>{G.Mainnet="mainnet";G.Testnet="testnet"})(UX||={});M={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}}});import{Chain as R,SwapKitError as OZ}from"@swapkit/helpers";var XX=(X)=>{switch(X){case R.Bitcoin:case R.BitcoinCash:return 550;case R.Dash:case R.Litecoin:return 5500;case R.Dogecoin:return 1e5;case R.Zcash:return 546;default:throw new OZ("toolbox_utxo_not_supported",{chain:X})}},A=({inputs:X,outputs:Z,feeRate:G=1,chain:J=R.Bitcoin})=>{let Q=Math.ceil(G),q=X[0]&&"address"in X[0]&&X[0].address?o(X[0].address):"P2PKH",$=X.filter((D)=>P(D)*Q<=D.value),W=ZX+Z.reduce((D,z)=>D+u(z,q),0),L=Z.reduce((D,z)=>D+z.value,0),j=W*Q,B=0,U=[];for(let D of $){let z=P(D),Y=Q*z;j+=Y,B+=D.value,U.push(D);let C=j+L;if(B<C)continue;let H=B-C,V=Q*u({address:"",value:0},q);if(H>V){let w=V+j,FX=B-(L+w);if(FX>Math.max(P({})*Q,XX(J)))return{inputs:U,outputs:Z.concat({value:FX,address:""}),fee:w}}return{inputs:U,outputs:Z,fee:j}}return{fee:Q*x({inputs:X,outputs:Z,feeRate:Q})}};var xX=I(()=>{m()});import{SwapKitError as yZ}from"@swapkit/helpers";import{opcodes as PZ,script as AZ}from"bitcoinjs-lib";function k(X){let Z=Buffer.from(X,"utf8");return AZ.compile([PZ.OP_RETURN,Z])}var kZ=1000,ZX=10,mX=10,wZ=41,KZ=107,GX,JX,n,o=(X)=>{if(X.startsWith("bc1")||X.startsWith("tb1")||X.startsWith("ltc1")||X.startsWith("tltc1"))return"P2WPKH";if(X.startsWith("1")||X.startsWith("m")||X.startsWith("n")||X.startsWith("bitcoincash:q")||X.startsWith("bitcoincash:p")||X.startsWith("q")||X.startsWith("p")||X.startsWith("L")||X.startsWith("M")||X.startsWith("3")||X.startsWith("D")||X.startsWith("A")||X.startsWith("9")||X.startsWith("X")||X.startsWith("7")||X.startsWith("y")||X.startsWith("t1")||X.startsWith("t3")||X.startsWith("tm"))return"P2PKH";throw new yZ("toolbox_utxo_invalid_address",{address:X})},x=({inputs:X,outputs:Z,feeRate:G})=>{let J=X[0]&&"address"in X[0]&&X[0].address?o(X[0].address):"P2PKH",Q=X.filter(($)=>$.value>=JX["type"in $?$.type:"P2PKH"]*Math.ceil(G)).reduce(($,W)=>$+P(W),0),q=Z?.reduce(($,W)=>$+u(W),0)||n[J];return ZX+Q+q},P=(X)=>{if("type"in X)return JX[X.type];if("address"in X&&X.address)return JX[o(X.address)];return wZ+KZ},u=(X,Z)=>{if(X?.script)return mX+X.script.length+(X.script.length>=74?2:1);if(Z)return n[Z];return n.P2PKH};var gX=I(()=>{((G)=>{G.P2PKH="P2PKH";G.P2WPKH="P2WPKH"})(GX||={});JX={["P2PKH"]:148,["P2WPKH"]:68},n={["P2PKH"]:34,["P2WPKH"]:31}});var m=I(()=>{RX();SX();xX();gX()});import RZ from"@bitcoinerlab/secp256k1";import{HDKey as bZ}from"@scure/bip32";import{mnemonicToSeedSync as EZ}from"@scure/bip39";import{Chain as TX,FeeOption as fZ,NetworkDerivationPath as VZ,SKConfig as lX,SwapKitError as SZ,derivationPathToString as xZ,updateDerivationPath as mZ}from"@swapkit/helpers";import{hash160 as gZ}from"bitcoinjs-lib/src/crypto";import hX from"bs58check";import{ECPairFactory as lZ}from"ecpair";import{P as YX,match as hZ}from"ts-pattern";function pZ(X,Z=!1){let G=gZ(X),J=Z?Buffer.from([28,186]):Buffer.from([28,184]),Q=Buffer.concat([J,G]);return hX.encode(Q)}function QX(X){try{if(X.startsWith("z"))return console.warn("Shielded Zcash addresses (z-addresses) are not supported. Use transparent addresses (t1/t3) only."),!1;let Z=X.startsWith("t1"),G=X.startsWith("t3");if(!(Z||G))return!1;let{isStagenet:J}=lX.get("envs");if(Z&&J||G&&!J)return!1;return uZ(X,cX)}catch{return!1}}function uZ(X,Z){try{let G=hX.decode(X);if(G.length<21)return!1;let J=G[0];return J===Z.pubKeyHash||J===Z.scriptHash}catch{return!1}}async function nZ({phrase:X,derivationPathString:Z}){let G=EZ(X),Q=bZ.fromMasterSeed(G).derive(Z);if(!Q.privateKey)throw new Error("Unable to derive private key");let q=oZ.fromPrivateKey(Buffer.from(Q.privateKey),{network:cX}),{isStagenet:$}=lX.get("envs"),W=pZ(q.publicKey,$);return{getAddress(){return Promise.resolve(W)},signTransaction(L){for(let j=0;j<L.inputCount;j++)L.signInput(j,q);return Promise.resolve(L)}}}async function CX(X){let Z=await hZ(X).with({signer:YX.not(YX.nullish)},({signer:W})=>Promise.resolve(W)).with({phrase:YX.string},({phrase:W,derivationPath:L,index:j=0})=>{let B=L||VZ[TX.Zcash]||[44,133,0,0,0],U=mZ(B,{index:j}),D=xZ(U);return nZ({phrase:W,derivationPathString:D})}).otherwise(()=>Promise.resolve(void 0)),{getFeeRates:G,broadcastTx:J,...Q}=await b({chain:TX.Zcash,signer:Z});function q(W){return W.getAddress()}async function $({recipient:W,assetValue:L,feeOptionKey:j=fZ.Fast,...B}){let U=await Z?.getAddress();if(!(Z&&U))throw new SZ("toolbox_utxo_no_signer");let D=B.feeRate||(await G())[j],z={...B,assetValue:L,feeRate:D,recipient:W,sender:U},{psbt:Y}=await Q.createTransaction(z),C=await Z.signTransaction(Y);C.finalizeAllInputs();let H=C.extractTransaction().toHex();return J(H)}return{...Q,broadcastTx:J,getFeeRates:G,transfer:$,getAddressFromKeys:q,validateAddress:QX}}var cZ,cX,oZ;var $X=I(()=>{m();r();cZ=TX.Zcash,cX=v()(cZ);oZ=lZ(RZ)});import{AssetValue as HX,Chain as F,DerivationPath as rZ,FeeOption as O,NetworkDerivationPath as dZ,SwapKitError as y,SwapKitNumber as iZ,applyFeeMultiplier as pX,derivationPathToString as aZ,updateDerivationPath as sZ}from"@swapkit/helpers";import{Psbt as tZ,address as eZ,initEccLib as nX,payments as uX}from"bitcoinjs-lib";import{ECPairFactory as XG}from"ecpair";import vX from"@bitcoinerlab/secp256k1";import{ECPair as ZG,HDNode as GG}from"@psf/bitcoincashjs-lib";import{HDKey as JG}from"@scure/bip32";import{mnemonicToSeedSync as oX}from"@scure/bip39";function QG({inputs:X,outputs:Z,chain:G,psbt:J,sender:Q,compiledMemo:q}){for(let $ of X){let W=!!$.witnessUtxo&&!d.includes(G)&&{witnessUtxo:$.witnessUtxo},L=d.includes(G)&&{nonWitnessUtxo:$.txHex?Buffer.from($.txHex,"hex"):void 0};J.addInput({hash:$.hash,index:$.index,...W,...L})}for(let $ of Z){let W="address"in $&&$.address?$.address:Q,L=$.script;if(L&&!q)continue;let j=L?{script:q,value:0}:{address:W,value:$.value};nX(vX),J.addOutput(j)}return{psbt:J,inputs:X}}async function rX({assetValue:X,recipient:Z,memo:G,feeRate:J,sender:Q,fetchTxHex:q=!1}){let $=X.chain,W=G?await k(G):null,L=await aX({assetValue:X,recipient:Z,memo:G,sender:Q,fetchTxHex:q}),{inputs:j,outputs:B}=A({...L,feeRate:J,chain:$});if(!(j&&B))throw new y("toolbox_utxo_insufficient_balance",{sender:Q,assetValue:X});let U=await v(),D=new tZ({network:U($)});if($===F.Dogecoin)D.setMaximumFeeRate(650000000);let{psbt:z,inputs:Y}=await QG({inputs:j,outputs:B,chain:$,psbt:D,sender:Q,compiledMemo:W});return{psbt:z,utxos:L.inputs,inputs:Y}}async function dX(){let X=await v();return function Z({address:G,chain:J}){if(J===F.BitcoinCash)return E(G);if(J===F.Zcash)return QX(G);try{return nX(vX),eZ.toOutputScript(G,X(J)),!0}catch(Q){return!1}}}async function $G({chain:X,phrase:Z,derivationPath:G}){let J=(await i(X))({phrase:Z,derivationPath:G});async function Q($){return await $.signAllInputs(J),$}async function q(){return(await IX(X))(J)}return{getAddress:q,signTransaction:Q}}async function b({chain:X,...Z}){let G="phrase"in Z?Z.phrase:void 0,J="index"in Z?Z.index||0:0,Q=aZ("derivationPath"in Z&&Z.derivationPath?Z.derivationPath:sZ(dZ[X],{index:J})),q=G?await $G({chain:X,phrase:G,derivationPath:Q}):("signer"in Z)?Z.signer:void 0;function $(){return Promise.resolve(q?.getAddress())}let W=await IX(X),L=await dX(),j=await i(X);return{accumulative:A,calculateTxSize:x,getAddressFromKeys:W,getAddress:$,validateAddress:(B)=>L({address:B,chain:X}),broadcastTx:(B)=>_(X).broadcastTx(B),createTransaction:rX,createKeysForPath:j,getFeeRates:()=>a(X),getInputsOutputsFee:iX,transfer:LG(q),getPrivateKeyFromMnemonic:(B)=>{return j(B).toWIF()},getBalance:OX(X),estimateTransactionFee:WG(X),estimateMaxSendableAmount:qG(X)}}async function iX({assetValue:X,feeOptionKey:Z=O.Fast,feeRate:G,memo:J,sender:Q,recipient:q}){let $=X.chain,W=await aX({assetValue:X,sender:Q,memo:J,recipient:q}),L=G?Math.floor(G):(await a($))[Z];return A({...W,feeRate:L,chain:$})}function qG(X){return async function Z({from:G,memo:J,feeRate:Q,feeOptionKey:q=O.Fast,recipients:$=1}){let W=await _(X).getAddressData(G),L=Q?Math.ceil(Q):(await a(X))[q],j=W?.utxo.map((Y)=>({...Y,type:"P2PKH",hash:""})).filter((Y)=>Y.value>Math.max(XX(X),P(Y)*L));if(!j?.length)return HX.from({chain:X});let B=HX.from({chain:X,value:j.reduce((Y,C)=>Y+C.value,0)}),U=typeof $==="number"?Array.from({length:$},()=>({address:G,value:0})):$;if(J){let Y=await k(J);U.push({address:G,script:Y,value:0})}let z=x({inputs:j,outputs:U,feeRate:L})*L;return B.sub(z)}}function WG(X){return async(Z)=>{let G=await iX(Z);return HX.from({chain:X,value:iZ.fromBigInt(BigInt(G.fee),8).getValue("string")})}}async function i(X){let Z=await v();switch(X){case F.BitcoinCash:return function G({phrase:J,derivationPath:Q=`${rZ.BCH}/0`,wif:q}){let $=Z(X);if(q)return ZG.fromWIF(q,$);if(!J)throw new y("toolbox_utxo_invalid_params",{error:"No phrase provided"});return GG.fromSeedBuffer(Buffer.from(oX(J)),$).derivePath(Q).keyPair};case F.Bitcoin:case F.Dogecoin:case F.Litecoin:case F.Zcash:case F.Dash:return function G({phrase:J,wif:Q,derivationPath:q}){if(!(Q||J))throw new y("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let $=XG(vX),W=Z(X);if(Q)return $.fromWIF(Q,W);let L=oX(J),j=JG.fromMasterSeed(L,W).derive(q);if(!j.privateKey)throw new y("toolbox_utxo_invalid_params",{error:"Could not get private key from phrase"});return $.fromPrivateKey(Buffer.from(j.privateKey),{network:W})};default:throw new y("toolbox_utxo_not_supported",{chain:X})}}async function IX(X){let Z=await v();return function G(J){if(!J)throw new y("toolbox_utxo_invalid_params",{error:"Keys must be provided"});let Q=d.includes(X)?uX.p2pkh:uX.p2wpkh,{address:q}=Q({pubkey:J.publicKey,network:Z(X)});if(!q)throw new y("toolbox_utxo_invalid_address",{error:"Address not defined"});return q}}function LG(X){return async function Z({memo:G,recipient:J,feeOptionKey:Q,feeRate:q,assetValue:$}){let W=await X?.getAddress(),L=$.chain;if(!(X&&W))throw new y("toolbox_utxo_no_signer");if(!J)throw new y("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let j=q||(await a(L))[Q||O.Fast],{psbt:B}=await rX({recipient:J,feeRate:j,sender:W,assetValue:$,memo:G}),U=await X.signTransaction(B);return U.finalizeAllInputs(),_(L).broadcastTx(U.extractTransaction().toHex())}}async function a(X){let Z=await _(X).getSuggestedTxFee();return{[O.Average]:Z,[O.Fast]:pX(Z,O.Fast),[O.Fastest]:pX(Z,O.Fastest)}}async function aX({assetValue:X,recipient:Z,memo:G,sender:J,fetchTxHex:Q=!1}){let q=X.chain,$=(await a(q))[O.Fastest],W=Q||d.includes(q),L=X.getBaseValue("number"),j=Math.ceil(L+$*5000);return{inputs:await _(q).getUtxos({address:J,fetchTxHex:W,targetValue:j}),outputs:[{address:Z,value:L},...G?[{address:"",script:await k(G),value:0}]:[]]}}var d;var r=I(()=>{LX();m();s();$X();d=[F.Dash,F.Dogecoin]});import{Transaction as jG,TransactionBuilder as BG,address as DG}from"@psf/bitcoincashjs-lib";import{Chain as UG,FeeOption as zG,NetworkDerivationPath as MG,SwapKitError as g,derivationPathToString as YG,updateDerivationPath as TG}from"@swapkit/helpers";import{Psbt as CG}from"bitcoinjs-lib";function l(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function E(X){let Z=l(X);return zX(Z)&&MX(Z)==="mainnet"}function f(X){return l(p(X))}async function HG(X){async function Z({builder:J,utxos:Q}){return Q.forEach((q,$)=>{J.sign($,X,void 0,65,q.witnessUtxo?.value)}),J.build()}return{getAddress:()=>{let J=X.getAddress(0);return Promise.resolve(f(J))},signTransaction:Z}}async function _X(X){let Z="phrase"in X?X.phrase:void 0,G="index"in X?X.index||0:0,J=YG("derivationPath"in X&&X.derivationPath?X.derivationPath:TG(MG[N],{index:G})),Q=Z?(await i(N))({phrase:Z,derivationPath:J}):void 0,q=Q?await HG(Q):("signer"in X)?X.signer:void 0;function $(){return Promise.resolve(q?.getAddress())}let{getBalance:W,getFeeRates:L,broadcastTx:j,...B}=await b({chain:N});function U(D,z=!0){return W(l(p(D)))}return{...B,getAddress:$,broadcastTx:j,createTransaction:sX,buildTx:IG,getAddressFromKeys:_G,getBalance:U,getFeeRates:L,stripPrefix:l,stripToCashAddress:f,validateAddress:E,transfer:vG({getFeeRates:L,broadcastTx:j,signer:q})}}async function sX({assetValue:X,recipient:Z,memo:G,feeRate:J,sender:Q}){if(!E(Z))throw new g("toolbox_utxo_invalid_address",{address:Z});let q=Math.ceil(X.getBaseValue("number")+J*7500),$=await _(N).getUtxos({address:f(Q),fetchTxHex:!0,targetValue:q}),W=G?await k(G):null,L=[];L.push({address:Z,value:X.getBaseValue("number")});let{inputs:j,outputs:B}=A({inputs:$,outputs:L,feeRate:J,chain:N});if(!(j&&B))throw new g("toolbox_utxo_insufficient_balance",{sender:Q,assetValue:X});let U=await v(),D=new BG(U(N));await Promise.all(j.map(async(z)=>{let Y=await _(N).getRawTx(z.hash);D.addInput(jG.fromBuffer(Buffer.from(Y,"hex")),z.index)}));for(let z of B){let Y="address"in z&&z.address?z.address:S(Q),C=await v(),H=DG.toOutputScript(S(Y),C(N));D.addOutput(H,z.value)}if(W)D.addOutput(W,0);return{builder:D,utxos:j}}function vG({broadcastTx:X,getFeeRates:Z,signer:G}){return async function J({recipient:Q,assetValue:q,feeOptionKey:$=zG.Fast,...W}){let L=await G?.getAddress();if(!(G&&L))throw new g("toolbox_utxo_no_signer");if(!Q)throw new g("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let j=W.feeRate||(await Z())[$],{builder:B,utxos:U}=await sX({...W,assetValue:q,feeRate:j,recipient:Q,sender:L}),z=(await G.signTransaction({builder:B,utxos:U})).toHex();return X(z)}}async function IG({assetValue:X,recipient:Z,memo:G,feeRate:J,sender:Q,setSigHashType:q}){let $=p(Z);if(!E($))throw new g("toolbox_utxo_invalid_address",{address:$});let W=Math.ceil(X.getBaseValue("number")+J*7500),L=await _(N).getUtxos({address:f(Q),fetchTxHex:!1,targetValue:W}),j=Number(J.toFixed(0)),B=G?await k(G):null,U=[];if(U.push({address:S(Z),value:X.getBaseValue("number")}),B)U.push({script:B,value:0});let{inputs:D,outputs:z}=A({inputs:L,outputs:U,feeRate:j,chain:N});if(!(D&&z))throw new g("toolbox_utxo_insufficient_balance",{sender:Q,assetValue:X});let Y=await v(),C=new CG({network:Y(N)});for(let{hash:H,index:V,witnessUtxo:w}of D)C.addInput({hash:H,index:V,witnessUtxo:w,sighashType:q?65:void 0});for(let H of z){let V="address"in H&&H.address?H.address:S(Q),w=H.script?B?{script:B,value:0}:void 0:{address:V,value:H.value};if(w)C.addOutput(w)}return{psbt:C,utxos:L,inputs:D}}function _G(X){let Z=X.getAddress(0);return f(Z)}var N;var s=I(()=>{m();r();N=UG.BitcoinCash});import{Chain as h,SwapKitError as FG}from"@swapkit/helpers";async function NG(X,Z){switch(X){case h.BitcoinCash:return await _X(Z||{});case h.Zcash:return await CX(Z);case h.Bitcoin:case h.Dogecoin:case h.Litecoin:case h.Dash:return await b({chain:X,...Z});default:throw new FG("toolbox_utxo_not_supported",{chain:X})}}var tX=I(()=>{s();r();$X();s()});var yG={};JZ(yG,{validateZcashAddress:()=>QX,toLegacyAddress:()=>S,toCashAddress:()=>p,stripToCashAddress:()=>f,stripPrefix:()=>l,nonSegwitChains:()=>d,isValidAddress:()=>zX,getUtxoToolbox:()=>NG,getUtxoNetwork:()=>v,getUtxoApi:()=>_,getUTXOAddressValidator:()=>dX,getScriptTypeForAddress:()=>o,getOutputSize:()=>u,getInputSize:()=>P,getDustThreshold:()=>XX,getCreateKeysForPath:()=>i,detectAddressNetwork:()=>MX,createZcashToolbox:()=>CX,createUTXOToolbox:()=>b,createCustomUtxoApi:()=>CZ,createBCHToolbox:()=>_X,compileMemo:()=>k,calculateTxSize:()=>x,bchValidateAddress:()=>E,addressFromKeysGetter:()=>IX,accumulative:()=>A,UtxoNetwork:()=>UX,UTXOScriptType:()=>GX,TX_OVERHEAD:()=>ZX,OutputSizes:()=>n,OP_RETURN_OVERHEAD:()=>mX,MIN_TX_FEE:()=>kZ,InputSizes:()=>JX});var PG=I(()=>{tX();s();r();$X();m()});PG();export{QX as validateZcashAddress,S as toLegacyAddress,p as toCashAddress,f as stripToCashAddress,l as stripPrefix,d as nonSegwitChains,zX as isValidAddress,NG as getUtxoToolbox,v as getUtxoNetwork,_ as getUtxoApi,dX as getUTXOAddressValidator,o as getScriptTypeForAddress,u as getOutputSize,P as getInputSize,XX as getDustThreshold,i as getCreateKeysForPath,MX as detectAddressNetwork,CX as createZcashToolbox,b as createUTXOToolbox,CZ as createCustomUtxoApi,_X as createBCHToolbox,k as compileMemo,x as calculateTxSize,E as bchValidateAddress,IX as addressFromKeysGetter,A as accumulative,UX as UtxoNetwork,GX as UTXOScriptType,ZX as TX_OVERHEAD,n as OutputSizes,mX as OP_RETURN_OVERHEAD,kZ as MIN_TX_FEE,JX as InputSizes};
|
|
4
4
|
|
|
5
|
-
//# debugId=
|
|
5
|
+
//# debugId=67DE645DC503FA4864756E2164756E21
|
|
6
6
|
//# sourceMappingURL=index.js.map
|