@swapkit/toolboxes 4.23.1 → 4.24.1
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/CHANGELOG.md +19 -0
- package/dist/chunk-ap5mzmjf.js +1 -0
- package/dist/{chunk-9psy287z.js → chunk-btth5bse.js} +1 -1
- package/dist/{chunk-jdh5asaw.js → chunk-nvfkjbyq.js} +1 -1
- package/dist/{chunk-fjyc6m34.js → chunk-xbdjxeqd.js} +1 -1
- package/dist/chunk-z61r1327.js +2 -0
- package/dist/src/aptos/index.cjs +1 -1
- package/dist/src/aptos/index.js +1 -1
- package/dist/src/cardano/index.cjs +1 -1
- package/dist/src/cardano/index.js +1 -1
- package/dist/src/cosmos/index.cjs +1 -1
- package/dist/src/cosmos/index.js +1 -1
- package/dist/src/evm/index.cjs +1 -1
- package/dist/src/evm/index.js +1 -1
- package/dist/src/hypercore/index.cjs +1 -1
- package/dist/src/hypercore/index.js +1 -1
- package/dist/src/index.cjs +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/near/index.cjs +1 -1
- package/dist/src/near/index.js +1 -1
- package/dist/src/radix/index.js +1 -1
- package/dist/src/ripple/index.cjs +1 -1
- package/dist/src/ripple/index.js +1 -1
- package/dist/src/solana/index.cjs +1 -1
- package/dist/src/solana/index.js +1 -1
- package/dist/src/starknet/index.cjs +1 -1
- package/dist/src/starknet/index.js +1 -1
- package/dist/src/stellar/index.cjs +1 -1
- package/dist/src/stellar/index.js +1 -1
- package/dist/src/substrate/index.cjs +1 -1
- package/dist/src/substrate/index.js +1 -1
- package/dist/src/sui/index.cjs +1 -1
- package/dist/src/sui/index.js +1 -1
- package/dist/src/ton/index.cjs +1 -1
- package/dist/src/ton/index.js +1 -1
- package/dist/src/tron/index.cjs +1 -1
- package/dist/src/tron/index.js +1 -1
- package/dist/src/utxo/index.cjs +1 -1
- package/dist/src/utxo/index.js +1 -1
- package/dist/types/aptos/toolbox.d.ts +11 -7
- package/dist/types/cardano/toolbox.d.ts +2 -2
- package/dist/types/cosmos/thorchainUtils/messages.d.ts +2 -1
- package/dist/types/cosmos/thorchainUtils/registry.d.ts +1 -1
- package/dist/types/cosmos/toolbox/cosmos.d.ts +1 -1
- package/dist/types/cosmos/toolbox/thorchain.d.ts +6 -6
- package/dist/types/cosmos/util.d.ts +16 -2
- package/dist/types/evm/toolbox/baseEVMToolbox.d.ts +66 -21
- package/dist/types/evm/toolbox/evm.d.ts +1603 -234
- package/dist/types/evm/toolbox/op.d.ts +235 -11
- package/dist/types/evm/types.d.ts +7 -13
- package/dist/types/hypercore/toolbox.d.ts +2 -2
- package/dist/types/hypercore/types.d.ts +3 -1
- package/dist/types/near/toolbox.d.ts +22 -3
- package/dist/types/near/types.d.ts +4 -1
- package/dist/types/ripple/index.d.ts +3 -2
- package/dist/types/solana/toolbox.d.ts +2 -2
- package/dist/types/starknet/toolbox.d.ts +2 -2
- package/dist/types/starknet/types.d.ts +3 -12
- package/dist/types/stellar/toolbox.d.ts +2 -2
- package/dist/types/sui/toolbox.d.ts +3 -3
- package/dist/types/ton/toolbox.d.ts +1 -4
- package/dist/types/tron/toolbox.d.ts +2 -2
- package/dist/types/utxo/helpers/coinselect.d.ts +2 -1
- package/dist/types/utxo/toolbox/bitcoinCash.d.ts +7 -5
- package/dist/types/utxo/toolbox/utxo.d.ts +8 -5
- package/dist/types/utxo/toolbox/zcash.d.ts +6 -4
- package/package.json +2 -2
- package/dist/chunk-6b99avsd.js +0 -2
- package/dist/chunk-e02sjx7s.js +0 -1
package/dist/src/tron/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../../chunk-fjyc6m34.js";import{bytesToHex as qJ}from"@noble/hashes/utils.js";import{HDKey as GJ}from"@scure/bip32";import{mnemonicToSeedSync as MJ}from"@scure/bip39";import{AssetValue as D,BaseDecimal as m,Chain as N,derivationPathToString as Tz,getRPCUrl as WJ,NetworkDerivationPath as Iz,SwapKitError as H,updateDerivationPath as vz,warnOnce as Fz}from"@swapkit/helpers";import{match as OJ,P as o}from"ts-pattern";import{sha256 as pz}from"@noble/hashes/sha2.js";import{bytesToHex as zz,hexToBytes as Jz}from"@noble/hashes/utils.js";import{SwapKitError as S}from"@swapkit/helpers";var g=0,Qz=1,A=2,Zz=5,lz=8,cz=10,oz=18;function p(J,z){let Q=0n,Z=0n,$=z;while($<J.length&&$-z<10){let j=J[$++];if(j===void 0)break;if(Q|=BigInt(j&127)<<Z,Z+=7n,(j&128)===0)return[Q,$]}throw new S("toolbox_tron_transaction_creation_failed")}function v(J){let z=[],Q=J<0n?J+2n**64n:J;while(Q>=128n)z.push(Number(Q&0x7fn)|128),Q>>=7n;return z.push(Number(Q)),z}function b(J,z,Q){let Z=J.get(z);if(Z)Z.push(Q);else J.set(z,[Q])}function iz(J){let z=new Map,Q=0;while(Q<J.length){let[Z,$]=p(J,Q);Q=$;let j=Number(Z>>3n),M=Number(Z&7n);if(M===g){let[k,U]=p(J,Q);Q=U,b(z,j,{data:new Uint8Array(v(k)),wireType:g})}else if(M===A){let[k,U]=p(J,Q);Q=U;let F=Number(k);if(F<0||Q+F>J.length)throw new S("toolbox_tron_transaction_creation_failed");let u=J.slice(Q,Q+F);Q+=F,b(z,j,{data:u,wireType:A})}else if(M===Qz){if(Q+8>J.length)throw new S("toolbox_tron_transaction_creation_failed");let k=J.slice(Q,Q+8);Q+=8,b(z,j,{data:k,wireType:Qz})}else if(M===Zz){if(Q+4>J.length)throw new S("toolbox_tron_transaction_creation_failed");let k=J.slice(Q,Q+4);Q+=4,b(z,j,{data:k,wireType:Zz})}else throw new S("toolbox_tron_transaction_creation_failed")}return z}function nz(J){let z=[];for(let[j,M]of[...J.entries()].sort(([k],[U])=>k-U))for(let{wireType:k,data:U}of M){let F=BigInt(j<<3|k);if(z.push(new Uint8Array(v(F))),k===A)z.push(new Uint8Array(v(BigInt(U.length))));z.push(U)}let Q=z.reduce((j,M)=>j+M.length,0),Z=new Uint8Array(Q),$=0;for(let j of z)Z.set(j,$),$+=j.length;return Z}function $z(J,z){if(!J||J.length%2!==0)throw new S("toolbox_tron_transaction_creation_failed");let Q=Jz(J),Z=iz(Q);if(z.expiration!==void 0)Z.set(lz,[{data:new Uint8Array(v(BigInt(z.expiration))),wireType:g}]);if(z.data!==void 0)Z.set(cz,[{data:Jz(z.data),wireType:A}]);if(z.fee_limit!==void 0)Z.set(oz,[{data:new Uint8Array(v(BigInt(z.fee_limit))),wireType:g}]);let $=nz(Z),j=zz($),M=zz(pz($));return{raw_data_hex:j,txID:M}}import{Chain as zJ,getRPCUrlSync as JJ,SwapKitError as K,warnOnce as E}from"@swapkit/helpers";import{secp256k1 as Yz}from"@noble/curves/secp256k1.js";import{sha256 as Xz}from"@noble/hashes/sha2.js";import{keccak_256 as dz}from"@noble/hashes/sha3.js";import{bytesToHex as _,hexToBytes as y}from"@noble/hashes/utils.js";import{createBase58check as tz}from"@scure/base";import{SwapKitError as jz}from"@swapkit/helpers";var h=tz(Xz),qz=65,az=2n**256n;function B(J){if(typeof J!=="string")return!1;try{let z=h.decode(J);return z.length===21&&z[0]===qz}catch{return!1}}function Gz(J){return _(h.decode(J))}function sz(J){return h.decode(J).slice(1)}function Mz(J){let z=Yz.getPublicKey(y(J),!1),Q=dz(z.slice(1)).slice(-20),Z=new Uint8Array(21);return Z[0]=qz,Z.set(Q,1),h.encode(Z)}function Wz({txID:J,privateKey:z}){let Q=Yz.sign(y(J),y(z),{format:"recovered",prehash:!1}),Z=Q[0]??0,$=_(Q.slice(1,33)),j=_(Q.slice(33,65)),M=(Z+27).toString(16).padStart(2,"0");return $+j+M}function T({txID:J,raw_data_hex:z}){let Q=_(Xz(y(z)));if(J!==Q)throw new jz("toolbox_tron_invalid_transaction_integrity",{expected:Q,txID:J})}function rz(J){return`000000000000000000000000${_(sz(J))}`}function ez(J){let z=typeof J==="bigint"?J:BigInt(J);if(z<0n||z>=az)throw new jz("toolbox_tron_invalid_token_identifier",{identifier:z.toString()});return z.toString(16).padStart(64,"0")}function I(J){return J.map(({type:z,value:Q})=>z==="address"?rz(Q):ez(BigInt(Q))).join("")}function Oz(J){return _(new TextEncoder().encode(J))}var Cz="https://api.trongrid.io",QJ=1000,ZJ=1e6,$J=420,YJ=1e6,XJ=30000;function kz(){try{return JJ(zJ.Tron)}catch{return Cz}}function Hz(){let J=new AbortController,z=setTimeout(()=>J.abort(),XJ);return{cleanup:()=>clearTimeout(z),signal:J.signal}}async function V(J,z){let{signal:Q,cleanup:Z}=Hz();try{let $=await fetch(`${kz()}${J}`,{body:JSON.stringify(z),headers:{"Content-Type":"application/json"},method:"POST",signal:Q});if(!$.ok)throw new K("toolbox_tron_trongrid_api_error",{message:`${$.status} ${$.statusText} on ${J}`});return await $.json()}finally{Z()}}async function Kz(J,z){let{signal:Q,cleanup:Z}=Hz();try{let $=await fetch(`${z??kz()}${J}`,{headers:{"Content-Type":"application/json"},signal:Q});if(!$.ok)throw new K("toolbox_tron_trongrid_api_error",{message:`${$.status} ${$.statusText} on ${J}`});return await $.json()}finally{Z()}}async function Pz(J){if(!B(J))throw new K("toolbox_tron_trongrid_api_error",{address:J,message:"Invalid address"});try{let z=await Kz(`/v1/accounts/${J}`,Cz);if(!(z.success&&z.data)||z.data.length===0)return;let Q;try{Q=Gz(J).toLowerCase()}catch{Q=J.toLowerCase()}let Z=z.data.find(($)=>$.address.toLowerCase()===Q);if(!Z)return;return{balance:Z.balance,trc20:Z.trc20||[]}}catch(z){if(z instanceof K)throw z;throw new K("toolbox_tron_trongrid_api_error",{address:J,message:z instanceof Error?z.message:"Unknown error"})}}async function Lz({from:J,to:z,amount:Q}){let $=await V("/wallet/createtransaction",{amount:Q,owner_address:J,to_address:z,visible:!0});if(!$.txID||!$.raw_data_hex||!$.raw_data)throw new K("toolbox_tron_transaction_creation_failed");let M=$.raw_data?.contract?.[0]?.parameter?.value;if(M?.to_address!==z||M?.owner_address!==J||M?.amount!==Q)throw new K("toolbox_tron_transaction_creation_failed");return T($),$}async function Nz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z,feeLimit:$,callValue:j=0}){let M=await V("/wallet/triggersmartcontract",{call_value:j,contract_address:z,fee_limit:$,function_selector:Q,owner_address:J,parameter:Z,visible:!0});if(!M.result.result||!M.transaction?.txID||!M.transaction?.raw_data_hex)throw new K("toolbox_tron_transaction_creation_failed");let U=M.transaction.raw_data?.contract?.[0]?.parameter?.value;if(U?.contract_address!==z||U?.owner_address!==J)throw new K("toolbox_tron_transaction_creation_failed");return T(M.transaction),M.transaction}function Bz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z}){return V("/wallet/triggerconstantcontract",{contract_address:z,function_selector:Q,owner_address:J,parameter:Z,visible:!0})}function jJ({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z}){return V("/wallet/estimateenergy",{contract_address:z,function_selector:Q,owner_address:J,parameter:Z,visible:!0})}function Uz(J){let z=typeof J==="number"?J:typeof J==="string"?Number(J):Number.NaN;return Number.isFinite(z)&&z>0?z:void 0}async function f(J){try{let{result:z,txid:Q}=await V("/wallet/broadcasttransaction",{raw_data:J.raw_data,raw_data_hex:J.raw_data_hex,signature:J.signature,txID:J.txID,visible:J.visible});if(!z||!Q)throw new K("toolbox_tron_token_transfer_failed");return Q}catch(z){throw new K("toolbox_tron_broadcast_failed",{error:z})}}async function w(){let J={};try{let{chainParameter:z}=await Kz("/wallet/getchainparameters");for(let Q of z)J[Q.key]=Q.value}catch(z){E({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${z instanceof Error?z.message:z}`})}return{bandwidthFee:J.getTransactionFee??QJ,createAccountFee:J.getCreateNewAccountFeeInSystemContract??J.getCreateAccountFee??ZJ,energyFee:J.getEnergyFee??$J,memoFee:J.getMemoFee??YJ}}async function l(J){try{let z=await V("/wallet/getaccountresource",{address:J,visible:!0});return{bandwidth:{free:(z.freeNetLimit??600)-(z.freeNetUsed??0),total:z.NetLimit??0,used:z.NetUsed??0},energy:{total:z.EnergyLimit??0,used:z.EnergyUsed??0}}}catch(z){return E({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${z instanceof Error?z.message:z}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function x(J){try{let z=await V("/wallet/getaccount",{address:J,visible:!0});return z&&Object.keys(z).length>0}catch{return!1}}async function c(J){try{let z=await jJ({...J,ownerAddress:J.sender}),Q=z.energy_required??z.energyRequired;if(z.result&&!z.result.result)throw new K("toolbox_tron_trongrid_api_error",{message:z.result.message||"estimateenergy failed"});if(Q!==void 0){let Z=Uz(Q);if(Z!==void 0)return Z;throw new K("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(z){E({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${z instanceof Error?z.message:z}`})}try{let{energy_used:z}=await Bz({...J,ownerAddress:J.sender}),Q=Uz(z);if(Q!==void 0)return Q;throw new K("toolbox_tron_trongrid_api_error",{message:"Invalid triggerconstantcontract energy response"})}catch(z){throw E({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy: ${z instanceof Error?z.message:z}`}),new K("toolbox_tron_trongrid_api_error",{message:`Unable to estimate contract energy: ${z instanceof Error?z.message:z}`})}}async function Dz({assetAddress:J,owner:z,spender:Q}){let Z=I([{type:"address",value:z},{type:"address",value:Q}]),j=(await Bz({contractAddress:J,functionSelector:"allowance(address,address)",ownerAddress:Q,parameter:Z})).constant_result?.[0];if(!j)return 0n;try{return BigInt(`0x${j}`)}catch{return 0n}}var UJ=B,Rz=268,Vz=65000,i=25000,Sz=345,n="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",CJ="115792089237316195423570985008687907853269984665640564039457584007913129639935";function fz({phrase:J,derivationPath:z}){let Q=GJ.fromMasterSeed(MJ(J)).derive(z);if(!Q.privateKey)throw new H("toolbox_tron_no_signer");return qJ(Q.privateKey)}function kJ(J,z){return{...J,value:String(z)}}function HJ(J,z){if(!z)return J;return{...J,data:z.startsWith("0x")?z:`0x${z}`}}function KJ({phrase:J,derivationPath:z,index:Q}){let Z=z||Tz(vz(Iz[N.Tron],{index:Q||0}));return fz({derivationPath:Z,phrase:J})}function PJ({phrase:J,derivationPath:z}){let Q=fz({derivationPath:z,phrase:J}),Z=Mz(Q);return{getAddress:()=>Promise.resolve(Z),signTransaction:($)=>{T($);let j=Wz({privateKey:Q,txID:$.txID});return Promise.resolve({...$,signature:[j]})}}}function _z({transaction:J,memo:z,expiration:Q,feeLimit:Z}){let $={},j={};if(Z!==void 0&&J.raw_data)$.fee_limit=Z,j.fee_limit=Z;if(z){let U=z.startsWith("0x")?z.replace(/^0x/,""):Oz(z);$.data=U,j.data=U}if(Q){let U=J.raw_data.expiration+Q*1000;$.expiration=U,j.expiration=U}if(Object.keys($).length===0)return J;let{raw_data_hex:M,txID:k}=$z(J.raw_data_hex,$);return{...J,raw_data:{...J.raw_data,...j},raw_data_hex:M,txID:k}}function LJ(J={}){let z="index"in J?J.index||0:0,Q=Tz("derivationPath"in J&&J.derivationPath?J.derivationPath:vz(Iz[N.Tron],{index:z})),Z,$=!1;function j(){if($)return Promise.resolve(Z);return Z=OJ(J).with({phrase:o.string},({phrase:Y})=>PJ({derivationPath:Q,phrase:Y})).with({signer:o.not(o.nullish)},({signer:Y})=>Y).otherwise(()=>{return}),$=!0,Promise.resolve(Z)}async function M(){let Y=await j();if(!Y)throw new H("toolbox_tron_no_signer");return Y.getAddress()}async function k(Y,X){let G=Y||Vz,q=X??(await w()).energyFee,O=G*q,W=Math.ceil(O*1.5);return Math.min(Math.max(W,1e7),150000000)}async function U({contractAddress:Y,functionSelector:X,parameter:G,sender:q,memo:O,expiration:W,extraEnergy:P=0}){let C=await c({contractAddress:Y,functionSelector:X,parameter:G,sender:q}),L=await k(C+P),R=await Nz({contractAddress:Y,feeLimit:L,functionSelector:X,ownerAddress:q,parameter:G});return _z({expiration:W,feeLimit:L,memo:O,transaction:R})}async function F(Y){if(!B(Y))return[D.from({chain:N.Tron})];try{let X=await Pz(Y);if(!X)return[D.from({chain:N.Tron})];let G=[D.from({chain:N.Tron,fromBaseDecimal:6,value:String(X.balance)})],q=X.trc20?.find((O)=>(n in O));if(q){let O=q[n];G.push(D.from({asset:`TRON.USDT-${n}`,fromBaseDecimal:6,value:O}))}return G}catch(X){return Fz({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${X instanceof Error?X.message:X}`}),[D.from({chain:N.Tron})]}}async function u({recipient:Y,assetValue:X,memo:G,expiration:q}){if(!B(Y))throw new H("toolbox_tron_token_transfer_failed",{message:"invalid address"});let O=await j();if(!O)throw new H("toolbox_tron_no_signer");try{let W=await M(),P=await t({assetValue:X,expiration:q,memo:G,recipient:Y,sender:W}),C=await O.signTransaction(P),L=await f(C);if(!L)throw new H("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return L}catch(W){throw new H("toolbox_tron_token_transfer_failed",{message:W instanceof Error?W.message:String(W)})}}function d({requiredBandwidth:Y,resources:X,feePerUnit:G}){let q=Math.max(0,X.free+X.total-X.used);return Y>q?(Y-q)*G:0}async function wz({memo:Y,recipient:X,senderAddress:G}){let[q,O,W]=await Promise.all([w(),x(X),l(G)]),P=O?0:q.createAccountFee,C=d({feePerUnit:q.bandwidthFee,requiredBandwidth:Rz,resources:W.bandwidth}),L=Y?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:P+C+L})}async function xz({assetValue:Y,memo:X,recipient:G,senderAddress:q}){let O=Y.address;if(!O)throw new H("toolbox_tron_invalid_token_identifier",{identifier:Y.toString()});let[W,P,C,L]=await Promise.all([w(),x(G),l(q),c({contractAddress:O,functionSelector:"transfer(address,uint256)",parameter:I([{type:"address",value:G},{type:"uint256",value:Y.getBaseValue("string")}]),sender:q})]),r=L+(P?0:i),Ez=d({feePerUnit:W.bandwidthFee,requiredBandwidth:Sz,resources:C.bandwidth}),e=Math.max(0,C.energy.total-C.energy.used),mz=r>e?(r-e)*W.energyFee:0,uz=X?W.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:Ez+mz+uz})}async function bz({assetValue:Y,memo:X,recipient:G}){let[q,O]=await Promise.all([w(),x(G)]);if(Y.isGasAsset){let L=O?0:q.createAccountFee,R=X?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:L+Rz*q.bandwidthFee+R})}let P=await k(Vz+(O?0:i),q.energyFee),C=X?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:P+Sz*q.bandwidthFee+C})}async function gz({assetValue:Y,memo:X,recipient:G,sender:q}){let O=await j();try{let W=q?q:O?await M():void 0;if(!W)return bz({assetValue:Y,memo:X,recipient:G});return Y.isGasAsset?wz({memo:X,recipient:G,senderAddress:W}):xz({assetValue:Y,memo:X,recipient:G,senderAddress:W})}catch(W){throw Fz({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${W instanceof Error?W.message:W}`}),new H("toolbox_fee_estimation_failed",{chain:N.Tron,error:W})}}async function t({recipient:Y,assetValue:X,memo:G,sender:q,expiration:O}){if(!B(Y)||!B(q))throw new H("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(X.isGasAsset){let C=await Lz({amount:X.getBaseValue("number"),from:q,to:Y});return _z({expiration:O,memo:G,transaction:C})}let W=X.address;if(!W)throw new H("toolbox_tron_invalid_token_identifier",{identifier:X.toString()});let P=await x(Y);return U({contractAddress:W,expiration:O,extraEnergy:P?0:i,functionSelector:"transfer(address,uint256)",memo:G,parameter:I([{type:"address",value:Y},{type:"uint256",value:X.getBaseValue("string")}]),sender:q})}async function a(Y){T(Y);let X=await j();if(!X)throw new H("toolbox_tron_no_signer");return X.signTransaction(Y)}async function Az(Y){let X=await a(Y);return f(X)}function s({assetAddress:Y,spenderAddress:X,from:G}){return Dz({assetAddress:Y,owner:G,spender:X})}async function yz({assetAddress:Y,spenderAddress:X,from:G,amount:q}){let O=await s({assetAddress:Y,from:G,spenderAddress:X});if(!q)return O>0n;return O>=BigInt(q)}async function hz({assetAddress:Y,spenderAddress:X,amount:G,from:q}){if(!B(Y)||!B(X))throw new H("toolbox_tron_approve_failed");let O=await j();if(!O)throw new H("toolbox_tron_no_signer");let W=q||await M(),P=G!==void 0?BigInt(G).toString():CJ;try{let C=await U({contractAddress:Y,functionSelector:"approve(address,uint256)",parameter:I([{type:"address",value:X},{type:"uint256",value:P}]),sender:W}),L=await O.signTransaction(C),R=await f(L);if(!R)throw new H("toolbox_tron_approve_failed");return R}catch(C){if(C instanceof H)throw C;throw new H("toolbox_tron_approve_failed",{error:C})}}return{approve:hz,broadcastTransaction:f,createTransaction:t,estimateTransactionFee:gz,getAddress:M,getApprovedAmount:s,getBalance:F,getRpcUrl:()=>WJ(N.Tron),isApproved:yz,signAndBroadcastTransaction:Az,signTransaction:a,transfer:u,validateAddress:B}}export{kJ as withTronTransactionValue,HJ as withTronTransactionData,UJ as validateTronAddress,LJ as getTronToolbox,KJ as getTronPrivateKeyFromMnemonic};
|
|
1
|
+
import"../../chunk-xbdjxeqd.js";import{bytesToHex as WJ}from"@noble/hashes/utils.js";import{HDKey as OJ}from"@scure/bip32";import{mnemonicToSeedSync as CJ}from"@scure/bip39";import{AssetValue as F,BaseDecimal as l,Chain as D,derivationPathToString as xz,getRPCUrl as kJ,NetworkDerivationPath as bz,SwapKitError as U,updateDerivationPath as wz,warnOnce as Tz}from"@swapkit/helpers";import{match as UJ,P as t}from"ts-pattern";import{sha256 as oz}from"@noble/hashes/sha2.js";import{bytesToHex as Yz,hexToBytes as Xz}from"@noble/hashes/utils.js";import{SwapKitError as _}from"@swapkit/helpers";var h=0,jz=1,A=2,qz=5,iz=8,dz=10,nz=18;function i(J,z){let Q=0n,$=0n,X=z;while(X<J.length&&X-z<10){let q=J[X++];if(q===void 0)break;if(Q|=BigInt(q&127)<<$,$+=7n,(q&128)===0)return[Q,X]}throw new _("toolbox_tron_transaction_creation_failed")}function x(J){let z=[],Q=J<0n?J+2n**64n:J;while(Q>=128n)z.push(Number(Q&0x7fn)|128),Q>>=7n;return z.push(Number(Q)),z}function y(J,z,Q){let $=J.get(z);if($)$.push(Q);else J.set(z,[Q])}function tz(J){let z=new Map,Q=0;while(Q<J.length){let[$,X]=i(J,Q);Q=X;let q=Number($>>3n),O=Number($&7n);if(O===h){let[P,K]=i(J,Q);Q=K,y(z,q,{data:new Uint8Array(x(P)),wireType:h})}else if(O===A){let[P,K]=i(J,Q);Q=K;let B=Number(P);if(B<0||Q+B>J.length)throw new _("toolbox_tron_transaction_creation_failed");let c=J.slice(Q,Q+B);Q+=B,y(z,q,{data:c,wireType:A})}else if(O===jz){if(Q+8>J.length)throw new _("toolbox_tron_transaction_creation_failed");let P=J.slice(Q,Q+8);Q+=8,y(z,q,{data:P,wireType:jz})}else if(O===qz){if(Q+4>J.length)throw new _("toolbox_tron_transaction_creation_failed");let P=J.slice(Q,Q+4);Q+=4,y(z,q,{data:P,wireType:qz})}else throw new _("toolbox_tron_transaction_creation_failed")}return z}function az(J){let z=[];for(let[q,O]of[...J.entries()].sort(([P],[K])=>P-K))for(let{wireType:P,data:K}of O){let B=BigInt(q<<3|P);if(z.push(new Uint8Array(x(B))),P===A)z.push(new Uint8Array(x(BigInt(K.length))));z.push(K)}let Q=z.reduce((q,O)=>q+O.length,0),$=new Uint8Array(Q),X=0;for(let q of z)$.set(q,X),X+=q.length;return $}function Gz(J,z){if(!J||J.length%2!==0)throw new _("toolbox_tron_transaction_creation_failed");let Q=Xz(J),$=tz(Q);if(z.expiration!==void 0)$.set(iz,[{data:new Uint8Array(x(BigInt(z.expiration))),wireType:h}]);if(z.data!==void 0)$.set(dz,[{data:Xz(z.data),wireType:A}]);if(z.fee_limit!==void 0)$.set(nz,[{data:new Uint8Array(x(BigInt(z.fee_limit))),wireType:h}]);let X=az($),q=Yz(X),O=Yz(oz(X));return{raw_data_hex:q,txID:O}}import{Chain as ZJ,getRPCUrlSync as $J,SwapKitError as N,warnOnce as u}from"@swapkit/helpers";import{secp256k1 as Mz}from"@noble/curves/secp256k1.js";import{sha256 as Wz}from"@noble/hashes/sha2.js";import{keccak_256 as rz}from"@noble/hashes/sha3.js";import{bytesToHex as T,hexToBytes as E}from"@noble/hashes/utils.js";import{createBase58check as sz}from"@scure/base";import{SwapKitError as Oz}from"@swapkit/helpers";var m=sz(Wz),Cz=65,ez=2n**256n;function R(J){if(typeof J!=="string")return!1;try{let z=m.decode(J);return z.length===21&&z[0]===Cz}catch{return!1}}function kz(J){return T(m.decode(J))}function zJ(J){return m.decode(J).slice(1)}function Uz(J){let z=Mz.getPublicKey(E(J),!1),Q=rz(z.slice(1)).slice(-20),$=new Uint8Array(21);return $[0]=Cz,$.set(Q,1),m.encode($)}function Hz({txID:J,privateKey:z}){let Q=Mz.sign(E(J),E(z),{format:"recovered",prehash:!1}),$=Q[0]??0,X=T(Q.slice(1,33)),q=T(Q.slice(33,65)),O=($+27).toString(16).padStart(2,"0");return X+q+O}function V({txID:J,raw_data_hex:z}){let Q=T(Wz(E(z)));if(J!==Q)throw new Oz("toolbox_tron_invalid_transaction_integrity",{expected:Q,txID:J})}function JJ(J){return`000000000000000000000000${T(zJ(J))}`}function QJ(J){let z=typeof J==="bigint"?J:BigInt(J);if(z<0n||z>=ez)throw new Oz("toolbox_tron_invalid_token_identifier",{identifier:z.toString()});return z.toString(16).padStart(64,"0")}function I(J){return J.map(({type:z,value:Q})=>z==="address"?JJ(Q):QJ(BigInt(Q))).join("")}function Kz(J){return T(new TextEncoder().encode(J))}var Lz="https://api.trongrid.io",YJ=1000,XJ=1e6,jJ=420,qJ=1e6,GJ=30000;function Nz(){try{return $J(ZJ.Tron)}catch{return Lz}}function Dz(){let J=new AbortController,z=setTimeout(()=>J.abort(),GJ);return{cleanup:()=>clearTimeout(z),signal:J.signal}}async function S(J,z){let{signal:Q,cleanup:$}=Dz();try{let X=await fetch(`${Nz()}${J}`,{body:JSON.stringify(z),headers:{"Content-Type":"application/json"},method:"POST",signal:Q});if(!X.ok)throw new N("toolbox_tron_trongrid_api_error",{message:`${X.status} ${X.statusText} on ${J}`});return await X.json()}finally{$()}}async function Rz(J,z){let{signal:Q,cleanup:$}=Dz();try{let X=await fetch(`${z??Nz()}${J}`,{headers:{"Content-Type":"application/json"},signal:Q});if(!X.ok)throw new N("toolbox_tron_trongrid_api_error",{message:`${X.status} ${X.statusText} on ${J}`});return await X.json()}finally{$()}}async function p(J){if(!R(J))throw new N("toolbox_tron_trongrid_api_error",{address:J,message:"Invalid address"});try{let z=await Rz(`/v1/accounts/${J}`,Lz);if(!(z.success&&z.data)||z.data.length===0)return;let Q;try{Q=kz(J).toLowerCase()}catch{Q=J.toLowerCase()}let $=z.data.find((X)=>X.address.toLowerCase()===Q);if(!$)return;return{balance:$.balance,trc20:$.trc20||[]}}catch(z){if(z instanceof N)throw z;throw new N("toolbox_tron_trongrid_api_error",{address:J,message:z instanceof Error?z.message:"Unknown error"})}}async function Fz({from:J,to:z,amount:Q}){let X=await S("/wallet/createtransaction",{amount:Q,owner_address:J,to_address:z,visible:!0});if(!X.txID||!X.raw_data_hex||!X.raw_data)throw new N("toolbox_tron_transaction_creation_failed");let O=X.raw_data?.contract?.[0]?.parameter?.value;if(O?.to_address!==z||O?.owner_address!==J||O?.amount!==Q)throw new N("toolbox_tron_transaction_creation_failed");return V(X),X}async function Bz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:$,feeLimit:X,callValue:q=0}){let O=await S("/wallet/triggersmartcontract",{call_value:q,contract_address:z,fee_limit:X,function_selector:Q,owner_address:J,parameter:$,visible:!0});if(!O.result.result||!O.transaction?.txID||!O.transaction?.raw_data_hex)throw new N("toolbox_tron_transaction_creation_failed");let K=O.transaction.raw_data?.contract?.[0]?.parameter?.value;if(K?.contract_address!==z||K?.owner_address!==J)throw new N("toolbox_tron_transaction_creation_failed");return V(O.transaction),O.transaction}function Sz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:$}){return S("/wallet/triggerconstantcontract",{contract_address:z,function_selector:Q,owner_address:J,parameter:$,visible:!0})}function MJ({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:$}){return S("/wallet/estimateenergy",{contract_address:z,function_selector:Q,owner_address:J,parameter:$,visible:!0})}function Pz(J){let z=typeof J==="number"?J:typeof J==="string"?Number(J):Number.NaN;return Number.isFinite(z)&&z>0?z:void 0}async function b(J){try{let{result:z,txid:Q}=await S("/wallet/broadcasttransaction",{raw_data:J.raw_data,raw_data_hex:J.raw_data_hex,signature:J.signature,txID:J.txID,visible:J.visible});if(!z||!Q)throw new N("toolbox_tron_token_transfer_failed");return Q}catch(z){throw new N("toolbox_tron_broadcast_failed",{error:z})}}async function w(){let J={};try{let{chainParameter:z}=await Rz("/wallet/getchainparameters");for(let Q of z)J[Q.key]=Q.value}catch(z){u({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${z instanceof Error?z.message:z}`})}return{bandwidthFee:J.getTransactionFee??YJ,createAccountFee:J.getCreateNewAccountFeeInSystemContract??J.getCreateAccountFee??XJ,energyFee:J.getEnergyFee??jJ,memoFee:J.getMemoFee??qJ}}async function d(J){try{let z=await S("/wallet/getaccountresource",{address:J,visible:!0});return{bandwidth:{free:(z.freeNetLimit??600)-(z.freeNetUsed??0),total:z.NetLimit??0,used:z.NetUsed??0},energy:{total:z.EnergyLimit??0,used:z.EnergyUsed??0}}}catch(z){return u({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${z instanceof Error?z.message:z}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function g(J){try{let z=await S("/wallet/getaccount",{address:J,visible:!0});return z&&Object.keys(z).length>0}catch{return!1}}async function n(J){try{let z=await MJ({...J,ownerAddress:J.sender}),Q=z.energy_required??z.energyRequired;if(z.result&&!z.result.result)throw new N("toolbox_tron_trongrid_api_error",{message:z.result.message||"estimateenergy failed"});if(Q!==void 0){let $=Pz(Q);if($!==void 0)return $;throw new N("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(z){u({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${z instanceof Error?z.message:z}`})}try{let{energy_used:z}=await Sz({...J,ownerAddress:J.sender}),Q=Pz(z);if(Q!==void 0)return Q;throw new N("toolbox_tron_trongrid_api_error",{message:"Invalid triggerconstantcontract energy response"})}catch(z){throw u({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy: ${z instanceof Error?z.message:z}`}),new N("toolbox_tron_trongrid_api_error",{message:`Unable to estimate contract energy: ${z instanceof Error?z.message:z}`})}}async function _z({assetAddress:J,owner:z,spender:Q}){let $=I([{type:"address",value:z},{type:"address",value:Q}]),q=(await Sz({contractAddress:J,functionSelector:"allowance(address,address)",ownerAddress:Q,parameter:$})).constant_result?.[0];if(!q)return 0n;try{return BigInt(`0x${q}`)}catch{return 0n}}var HJ=R,Vz=268,Iz=65000,a=25000,vz=345,r="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",KJ="115792089237316195423570985008687907853269984665640564039457584007913129639935";function gz({phrase:J,derivationPath:z}){let Q=OJ.fromMasterSeed(CJ(J)).derive(z);if(!Q.privateKey)throw new U("toolbox_tron_no_signer");return WJ(Q.privateKey)}function PJ(J,z){return{...J,value:String(z)}}function LJ(J,z){if(!z)return J;return{...J,data:z.startsWith("0x")?z:`0x${z}`}}function NJ({phrase:J,derivationPath:z,index:Q}){let $=z||xz(wz(bz[D.Tron],{index:Q||0}));return gz({derivationPath:$,phrase:J})}function DJ({phrase:J,derivationPath:z}){let Q=gz({derivationPath:z,phrase:J}),$=Uz(Q);return{getAddress:()=>Promise.resolve($),signTransaction:(X)=>{V(X);let q=Hz({privateKey:Q,txID:X.txID});return Promise.resolve({...X,signature:[q]})}}}function fz({transaction:J,memo:z,expiration:Q,feeLimit:$}){let X={},q={};if($!==void 0&&J.raw_data)X.fee_limit=$,q.fee_limit=$;if(z){let K=z.startsWith("0x")?z.replace(/^0x/,""):Kz(z);X.data=K,q.data=K}if(Q){let K=J.raw_data.expiration+Q*1000;X.expiration=K,q.expiration=K}if(Object.keys(X).length===0)return J;let{raw_data_hex:O,txID:P}=Gz(J.raw_data_hex,X);return{...J,raw_data:{...J.raw_data,...q},raw_data_hex:O,txID:P}}function RJ(J={}){let z="index"in J?J.index||0:0,Q=xz("derivationPath"in J&&J.derivationPath?J.derivationPath:wz(bz[D.Tron],{index:z})),$,X=!1;function q(){if(X)return Promise.resolve($);return $=UJ(J).with({phrase:t.string},({phrase:Z})=>DJ({derivationPath:Q,phrase:Z})).with({signer:t.not(t.nullish)},({signer:Z})=>Z).otherwise(()=>{return}),X=!0,Promise.resolve($)}async function O(){let Z=await q();if(!Z)throw new U("toolbox_tron_no_signer");return Z.getAddress()}async function P(Z,Y){let G=Z||Iz,j=Y??(await w()).energyFee,M=G*j,W=Math.ceil(M*1.5);return Math.min(Math.max(W,1e7),150000000)}async function K({contractAddress:Z,functionSelector:Y,parameter:G,sender:j,memo:M,expiration:W,extraEnergy:C=0}){let k=await n({contractAddress:Z,functionSelector:Y,parameter:G,sender:j}),H=await P(k+C),L=await Bz({contractAddress:Z,feeLimit:H,functionSelector:Y,ownerAddress:j,parameter:G});return fz({expiration:W,feeLimit:H,memo:M,transaction:L})}async function B(Z){if(!R(Z))return[F.from({chain:D.Tron})];try{let Y=await p(Z);if(!Y)return[F.from({chain:D.Tron})];let G=[F.from({chain:D.Tron,fromBaseDecimal:6,value:String(Y.balance)})],j=Y.trc20?.find((M)=>(r in M));if(j){let M=j[r];G.push(F.from({asset:`TRON.USDT-${r}`,fromBaseDecimal:6,value:M}))}return G}catch(Y){return Tz({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${Y instanceof Error?Y.message:Y}`}),[F.from({chain:D.Tron})]}}async function c({recipient:Z,assetValue:Y,memo:G,expiration:j,sweep:M}){if(!R(Z))throw new U("toolbox_tron_token_transfer_failed",{message:"invalid address"});let W=await q();if(!W)throw new U("toolbox_tron_no_signer");try{let C=await O(),k=await Jz({assetValue:Y,expiration:j,memo:G,recipient:Z,sender:C,sweep:M}),H=await W.signTransaction(k),L=await b(H);if(!L)throw new U("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return L}catch(C){if(C instanceof U&&C.errorKey==="toolbox_sweep_amount_too_low")throw C;throw new U("toolbox_tron_token_transfer_failed",{message:C instanceof Error?C.message:String(C)})}}function s({requiredBandwidth:Z,resources:Y,feePerUnit:G}){let j=Math.max(0,Y.free+Y.total-Y.used);return Z>j?(Z-j)*G:0}async function e({memo:Z,recipient:Y,senderAddress:G}){let[j,M,W]=await Promise.all([w(),g(Y),d(G)]),C=M?0:j.createAccountFee,k=s({feePerUnit:j.bandwidthFee,requiredBandwidth:Vz,resources:W.bandwidth}),H=Z?j.memoFee:0;return F.from({chain:D.Tron,fromBaseDecimal:l.TRON,value:C+k+H})}async function zz({assetValue:Z,amountInBaseUnits:Y=Z.getBaseValue("string"),memo:G,recipient:j,senderAddress:M}){let W=Z.address;if(!W)throw new U("toolbox_tron_invalid_token_identifier",{identifier:Z.toString()});let[C,k,H,L]=await Promise.all([w(),g(j),d(M),n({contractAddress:W,functionSelector:"transfer(address,uint256)",parameter:I([{type:"address",value:j},{type:"uint256",value:Y}]),sender:M})]),f=L+(k?0:a),o=s({feePerUnit:C.bandwidthFee,requiredBandwidth:vz,resources:H.bandwidth}),$z=Math.max(0,H.energy.total-H.energy.used),lz=f>$z?(f-$z)*C.energyFee:0,cz=G?C.memoFee:0;return F.from({chain:D.Tron,fromBaseDecimal:l.TRON,value:o+lz+cz})}async function yz({assetValue:Z,memo:Y,recipient:G}){let[j,M]=await Promise.all([w(),g(G)]);if(Z.isGasAsset){let H=M?0:j.createAccountFee,L=Y?j.memoFee:0;return F.from({chain:D.Tron,fromBaseDecimal:l.TRON,value:H+Vz*j.bandwidthFee+L})}let C=await P(Iz+(M?0:a),j.energyFee),k=Y?j.memoFee:0;return F.from({chain:D.Tron,fromBaseDecimal:l.TRON,value:C+vz*j.bandwidthFee+k})}async function hz({assetValue:Z,memo:Y,recipient:G,sender:j}){let M=await q();try{let W=j?j:M?await O():void 0;if(!W)return yz({assetValue:Z,memo:Y,recipient:G});return Z.isGasAsset?e({memo:Y,recipient:G,senderAddress:W}):zz({assetValue:Z,memo:Y,recipient:G,senderAddress:W})}catch(W){throw Tz({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${W instanceof Error?W.message:W}`}),new U("toolbox_fee_estimation_failed",{chain:D.Tron,error:W})}}async function Az({assetValue:Z,memo:Y,recipient:G,sender:j,sweep:M}){if(!M)return Z.getBaseValue("bigint");let[W,C]=await Promise.all([p(j),e({memo:Y,recipient:G,senderAddress:j})]),k=BigInt(W?.balance??0)-C.getBaseValue("bigint");if(k<=0n)throw new U({errorKey:"toolbox_sweep_amount_too_low",info:{amount:k.toString(),asset:Z.toString()}});return k}async function Ez({assetValue:Z,memo:Y,recipient:G,sender:j,sweep:M}){if(!M)return Z.getBaseValue("string");let W=Z.address;if(!W)throw new U("toolbox_tron_invalid_token_identifier",{identifier:Z.toString()});let C=await p(j),H=C?.trc20.find((o)=>(W in o))?.[W]??"0";if(BigInt(H)<=0n)throw new U({errorKey:"toolbox_sweep_amount_too_low",info:{asset:Z.toString(),balance:H}});let L=await zz({amountInBaseUnits:H,assetValue:Z,memo:Y,recipient:G,senderAddress:j}),v=BigInt(C?.balance??0),f=L.getBaseValue("bigint");if(v<f)throw new U({errorKey:"toolbox_sweep_amount_too_low",info:{asset:Z.toString(),nativeBalance:v.toString(),requiredNativeFee:f.toString()}});return H}async function Jz({recipient:Z,assetValue:Y,memo:G,sender:j,expiration:M,sweep:W}){if(!R(Z)||!R(j))throw new U("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(Y.isGasAsset){let L=await Az({assetValue:Y,expiration:M,memo:G,recipient:Z,sender:j,sweep:W});if(L>BigInt(Number.MAX_SAFE_INTEGER))throw new U({errorKey:"toolbox_tron_transaction_creation_failed",info:{amount:L.toString(),reason:`Native transfer amount exceeds the safe integer limit of ${Number.MAX_SAFE_INTEGER} SUN`}});let v=await Fz({amount:Number(L),from:j,to:Z});return fz({expiration:M,memo:G,transaction:v})}let C=Y.address;if(!C)throw new U("toolbox_tron_invalid_token_identifier",{identifier:Y.toString()});let k=await Ez({assetValue:Y,expiration:M,memo:G,recipient:Z,sender:j,sweep:W}),H=await g(Z);return K({contractAddress:C,expiration:M,extraEnergy:H?0:a,functionSelector:"transfer(address,uint256)",memo:G,parameter:I([{type:"address",value:Z},{type:"uint256",value:k}]),sender:j})}async function Qz(Z){V(Z);let Y=await q();if(!Y)throw new U("toolbox_tron_no_signer");return Y.signTransaction(Z)}async function mz(Z){let Y=await Qz(Z);return b(Y)}function Zz({assetAddress:Z,spenderAddress:Y,from:G}){return _z({assetAddress:Z,owner:G,spender:Y})}async function uz({assetAddress:Z,spenderAddress:Y,from:G,amount:j}){let M=await Zz({assetAddress:Z,from:G,spenderAddress:Y});if(!j)return M>0n;return M>=BigInt(j)}async function pz({assetAddress:Z,spenderAddress:Y,amount:G,from:j}){if(!R(Z)||!R(Y))throw new U("toolbox_tron_approve_failed");let M=await q();if(!M)throw new U("toolbox_tron_no_signer");let W=j||await O(),C=G!==void 0?BigInt(G).toString():KJ;try{let k=await K({contractAddress:Z,functionSelector:"approve(address,uint256)",parameter:I([{type:"address",value:Y},{type:"uint256",value:C}]),sender:W}),H=await M.signTransaction(k),L=await b(H);if(!L)throw new U("toolbox_tron_approve_failed");return L}catch(k){if(k instanceof U)throw k;throw new U("toolbox_tron_approve_failed",{error:k})}}return{approve:pz,broadcastTransaction:b,createTransaction:Jz,estimateTransactionFee:hz,getAddress:O,getApprovedAmount:Zz,getBalance:B,getRpcUrl:()=>kJ(D.Tron),isApproved:uz,signAndBroadcastTransaction:mz,signTransaction:Qz,transfer:c,validateAddress:R}}export{PJ as withTronTransactionValue,LJ as withTronTransactionData,HJ as validateTronAddress,RJ as getTronToolbox,NJ as getTronPrivateKeyFromMnemonic};
|
package/dist/src/utxo/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Q0=Object.create;var{getPrototypeOf:Z0,defineProperty:DX,getOwnPropertyNames:C2,getOwnPropertyDescriptor:G0}=Object,D2=Object.prototype.hasOwnProperty;function H2(X){return this[X]}var Y0,q0,X1=(X,$,J)=>{var j=X!=null&&typeof X==="object";if(j){var Q=$?Y0??=new WeakMap:q0??=new WeakMap,Z=Q.get(X);if(Z)return Z}J=X!=null?Q0(Z0(X)):{};let Y=$||!X||!X.__esModule?DX(J,"default",{value:X,enumerable:!0}):J;for(let L of C2(X))if(!D2.call(Y,L))DX(Y,L,{get:H2.bind(X,L),enumerable:!0});if(j)Q.set(X,Y);return Y},L0=(X)=>{var $=(M2??=new WeakMap).get(X),J;if($)return $;if($=DX({},"__esModule",{value:!0}),X&&typeof X==="object"||typeof X==="function"){for(var j of C2(X))if(!D2.call($,j))DX($,j,{get:H2.bind(X,j),enumerable:!(J=G0(X,j))||J.enumerable})}return M2.set(X,$),$},M2;var z0=(X)=>X;function U0(X,$){this[X]=z0.bind(null,$)}var W0=(X,$)=>{for(var J in $)DX(X,J,{get:$[J],enumerable:!0,configurable:!0,set:U0.bind($,J)})};var R=(X,$)=>()=>(X&&($=X(X=0)),$);function K(X,$){if(!Number.isInteger($)||$<0)throw RangeError(`${X} must be a non-negative integer, got: ${$}`)}function i({accountIndex:X,chain:$,derivationPath:J}){if(X!==void 0)K("accountIndex",X);let j=[...J?.slice(0,3)??O2.NetworkDerivationPath[$].slice(0,3)];if(X!==void 0)j[2]=X;return j}function qX({accountIndex:X,change:$=!1,chain:J,derivationPath:j,index:Q}){return K("index",Q),[...i({accountIndex:X,chain:J,derivationPath:j}),Number($),Q]}function $X(X){return X[2]??0}function V2({deriveAddress:X,getBalance:$,getUtxos:J}){async function j(L){let{accountIndex:G,count:q,startIndex:W=0,change:z=!1}=L;if(K("count",q),q<1)throw RangeError("count must be at least 1");K("startIndex",W);let B=[];for(let _=0;_<q;_++){let N=await X({accountIndex:G,change:z,index:W+_});if(N)B.push(N)}return B}async function Q(L){let{gapLimit:G=20,change:q=!1}=L??{},W=[],z=0,B=0;while(z<G){let _=await X({change:q,index:B});if(!_)break;if((await $(_.address)).some((T)=>T.getValue("number")>0))W.push(_),z=0;else z++;B++}return W}async function Z(L=20){let[G,q]=await Promise.all([Q({change:!1,gapLimit:L}),Q({change:!0,gapLimit:L})]),W=[...G,...q],z=await Promise.all(W.map(async(_)=>{let O=(await $(_.address)).reduce((T,YX)=>T+YX.getValue("number"),0);return{..._,balance:O}})),B=z.reduce((_,N)=>_+N.balance,0);return{addresses:z,total:B}}async function Y(L=20){let[G,q]=await Promise.all([Q({change:!1,gapLimit:L}),Q({change:!0,gapLimit:L})]),W=[...G,...q];return(await Promise.all(W.map(async(B)=>{return(await J(B.address)).map((N)=>({...N,address:B.address,derivationIndex:B.index,isChange:B.change}))}))).flat()}return{deriveAddresses:j,getAggregatedBalance:Z,getAggregatedUtxos:Y,scanForAddresses:Q}}var O2;var HX=R(()=>{O2=require("@swapkit/helpers")});function k2(){function X(){let $=Date.now(),J=iX||$;return iX=J,$>iX?$:J+1}return B0+X().toString(36)}function f2(X){return async function(J,j=!0){let Q=await b2.SwapKitApi.getChainBalance({address:J,chain:X,scamFilter:j}),{baseDecimal:Z}=OX.getChainConfig(X),Y=Q.map(({identifier:G,value:q,decimal:W})=>{return new OX.AssetValue({decimal:W||Z,identifier:G,value:q})});if(!Y.some((G)=>G.isGasAsset))return[OX.AssetValue.from({chain:X}),...Y];return Y}}var OX,b2,B0,iX=0;var sX=R(()=>{OX=require("@swapkit/helpers"),b2=require("@swapkit/helpers/api"),B0=typeof process<"u"&&process.pid?process.pid.toString(36):""});async function _0({chain:X,txHash:$}){let J=`${VX(X)}/push/transaction`,j=JSON.stringify({data:$});try{let Q=await C.RequestClient.post(J,{body:j,headers:{"Content-Type":"application/json"}});if(Q.context.code!==200)throw new C.SwapKitError("toolbox_utxo_broadcast_failed",{error:Q.context.error||"Transaction broadcast failed"});return Q.data?.transaction_hash||$}catch(Q){let Z=await C.getRPCUrl(X);if(Z){let Y=JSON.stringify({id:k2(),jsonrpc:"2.0",method:"sendrawtransaction",params:[$]}),L=await C.RequestClient.post(Z,{body:Y,headers:{"Content-Type":"application/json"}});if(L.error)throw new C.SwapKitError("toolbox_utxo_broadcast_failed",{error:L.error?.message});if(L.result.includes('"code":-26'))throw new C.SwapKitError("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return L.result}throw Q}}function VX(X){return`https://api.blockchair.com/${N0(X)}`}function I2(X){switch(X){case C.Chain.Bitcoin:return 5;case C.Chain.Dogecoin:return 1e4;case C.Chain.Litecoin:return 1;case C.Chain.Zcash:return 1;default:return 2}}function N0(X){switch(X){case C.Chain.BitcoinCash:return"bitcoin-cash";case C.Chain.Litecoin:return"litecoin";case C.Chain.Dash:return"dash";case C.Chain.Dogecoin:return"dogecoin";case C.Chain.Zcash:return"zcash";case C.Chain.Polkadot:return"polkadot";default:return"bitcoin"}}async function M0(X){try{let{feePerKb:$}=await C.RequestClient.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=$/1000;return Math.max(J,I2(X))}catch{return I2(X)}}async function KX(X,$){let J=await C.RequestClient.get(`${X}${$?`${X.includes("?")?"&":"?"}key=${$}`:""}`);if(!J||J.context.code!==200)throw new C.SwapKitError("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return J.data}async function F2({address:X,chain:$,apiKey:J}){if(!X)throw new C.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await KX(`${VX($)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch{return{address:{balance:0,transaction_count:0},utxo:[]}}}async function C0({address:X,chain:$,apiKey:J}){return(await F2({address:X,apiKey:J,chain:$}))?.address.balance||0}async function P2({chain:X,apiKey:$,txHash:J}){if(!J)throw new C.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await KX(`${VX(X)}/raw/transaction/${J}`,$))?.[J]?.raw_transaction||""}catch(j){let Q=j instanceof Error?j.message:String(j);return console.error(`Failed to fetch raw transaction: ${Q}`),""}}async function H0({chain:X,apiKey:$,txHash:J}){if(!J)throw new C.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});let Q=(await KX(`${VX(X)}/dashboards/transaction/${J}`,$))?.[J];if(!Q)throw new C.SwapKitError("toolbox_utxo_tx_not_found",{txHash:J});let{transaction:Z,inputs:Y,outputs:L}=Q,G=Y.map((W)=>W.spending_sequence),q=Z.is_rbf===!0||G.some((W)=>W<D0);return{blockId:Z.block_id,confirmed:Z.block_id!==-1,fee:Z.fee,inputs:Y,isRBF:q,outputs:L,sequences:G,size:Z.size,txid:Z.hash,weight:Z.weight}}async function O0({chain:X,address:$,apiKey:J,offset:j=0,limit:Q=30}){return(await KX(`${VX(X)}/outputs?q=recipient(${$}),is_spent(false)&s=value(desc)&fields=is_spent,transaction_hash,index,value,script_hex,block_id,spending_signature_hex&limit=${Q}&offset=${j}`,J)).map(({is_spent:G,script_hex:q,block_id:W,transaction_hash:z,index:B,value:_,spending_signature_hex:N})=>({hash:z,index:B,is_confirmed:W!==-1,is_spent:G,script_hex:q,txHex:N,value:_}))}function V0(X){return X.reduce(($,J)=>$+J.value,0)}function T2(X,$){let J=[...X].sort((j,Q)=>Q.value-j.value);if($){let j=[],Q=0;for(let Z of J)if(j.push(Z),Q+=Z.value,Q>=$)break;return j}return J}async function E2({chain:X,address:$,apiKey:J,targetValue:j,accumulativeValue:Q=0,offset:Z=0,limit:Y=30}){if(!$)throw new C.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{let L=await O0({address:$,apiKey:J,chain:X,limit:Y,offset:Z,targetValue:j}),q=L.length<Y,W=L.filter(({is_spent:T})=>!T),z=V0(W),B=Q+z,_=j&&B>=j;if(q||_)return T2(W,j);let N=await E2({accumulativeValue:B,address:$,apiKey:J,chain:X,limit:Y,offset:Z+Y,targetValue:j}),O=[...W,...N];return T2(O,j)}catch(L){let G=L instanceof Error?L.message:String(L);return console.error(`Failed to fetch unspent UTXOs: ${G}`),[]}}async function b0({address:X,chain:$,apiKey:J,fetchTxHex:j=!0,targetValue:Q}){let Z=await E2({address:X,apiKey:J,chain:$,targetValue:Q}),Y=[];for(let{hash:L,index:G,script_hex:q,value:W}of Z){let z;if(j)z=await P2({apiKey:J,chain:$,txHash:L});Y.push({address:X,hash:L,index:G,txHex:z,value:W,witnessUtxo:{script:Buffer.from(q,"hex"),value:W}})}return Y}function E(X){let $=C.SKConfig.get("apiKeys").blockchair||"";return C.warnOnce({condition:!$,id:"no_blockchair_api_key_warning",warning:"No Blockchair API key found. Functionality will be limited."}),{broadcastTx:(J)=>_0({chain:X,txHash:J}),getAddressData:(J)=>F2({address:J,apiKey:$,chain:X}),getBalance:(J)=>C0({address:J,apiKey:$,chain:X}),getRawTx:(J)=>P2({apiKey:$,chain:X,txHash:J}),getSuggestedTxFee:()=>M0(X),getTransactionDetails:(J)=>H0({apiKey:$,chain:X,txHash:J}),getUtxos:(J)=>b0({...J,apiKey:$,chain:X})}}function k0(X){return X}function f0(){return function($){switch($){case C.Chain.Bitcoin:return JX.NETWORKS.bitcoin;case C.Chain.BitcoinCash:return JX.NETWORKS.bitcoinCash;case C.Chain.Dash:return JX.NETWORKS.dash;case C.Chain.Litecoin:return JX.NETWORKS.litecoin;case C.Chain.Dogecoin:return JX.NETWORKS.dogecoin;case C.Chain.Zcash:return JX.NETWORKS.zcash;default:throw new C.SwapKitError("toolbox_utxo_not_supported",{chain:$})}}}var C,JX,D0=4294967294;var A2=R(()=>{sX();C=require("@swapkit/helpers"),JX=require("@swapkit/utxo-signer")});function F0(X,$,J){return o.encodeCashAddr({hash:J,prefix:X,type:I0[$]})}function P0(X){let $=o.decodeCashAddr(X),J=T0[$.type];if(!J)throw Error(`Unknown CashAddr type: ${$.type}`);return{hash:$.hash,prefix:$.prefix,type:J}}var o,I0,T0,tX;var R2=R(()=>{o=require("@swapkit/utxo-signer"),I0={P2PKH:o.CashAddrType.P2PKH,P2SH:o.CashAddrType.P2SH},T0={[o.CashAddrType.P2PKH]:"P2PKH",[o.CashAddrType.P2SH]:"P2SH"};tX={decode:P0,encode:F0}});function X2(X){try{return mX(X),!0}catch{return!1}}function $2(X){return mX(X)?.network}function u(X){let $=mX(X);if($?.format==="legacy")return X;return R0($)}function bX(X){let $=mX(X);return y0($)}function mX(X){try{let $=E0(X);if($)return $}catch{}try{let $=A0(X);if($)return $}catch{}throw new aX.SwapKitError("toolbox_utxo_invalid_address",{address:X})}function E0(X){try{let $=S2.decode(X);if($.length!==21)throw new aX.SwapKitError("toolbox_utxo_invalid_address",{address:X});let J=$[0],j=Array.prototype.slice.call($,1);switch(J){case jX.legacy.mainnet.p2pkh:return{format:"legacy",hash:j,network:"mainnet",type:"p2pkh"};case jX.legacy.mainnet.p2sh:return{format:"legacy",hash:j,network:"mainnet",type:"p2sh"};case jX.legacy.testnet.p2pkh:return{format:"legacy",hash:j,network:"testnet",type:"p2pkh"};case jX.legacy.testnet.p2sh:return{format:"legacy",hash:j,network:"testnet",type:"p2sh"};case jX.bitpay.mainnet.p2pkh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2pkh"};case jX.bitpay.mainnet.p2sh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2sh"};default:return}}catch{return}}function A0(X){if(X.indexOf(":")!==-1)try{return y2(X)}catch{}else{let $=["bitcoincash","bchtest","bchreg"];for(let J of $)try{return y2(`${J}:${X}`)}catch{}}return}function y2(X){try{let{hash:$,prefix:J,type:j}=tX.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call($,0),network:J==="bitcoincash"?"mainnet":"testnet",type:j==="P2PKH"?"p2pkh":"p2sh"}}catch{return}}function R0(X){let $=jX.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=$,J.set(X.hash,1),S2.encode(J)}function y0(X){let $=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",j=new Uint8Array(X.hash);return tX.encode($,J,j)}var v2,w2,aX,S2,eX,jX;var K2=R(()=>{R2();v2=require("@noble/hashes/sha2.js"),w2=require("@scure/base"),aX=require("@swapkit/helpers"),S2=w2.createBase58check(v2.sha256);((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})(eX||={});jX={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}}});function w(X){let $=new Uint8Array(Buffer.from(X,"utf8"));return g2.Script.encode(["RETURN",$])}var m2,g2,v0=1000,lX=10,xX=2,l2=10,w0=41,S0=107,hX,gX,kX,LX=(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 m2.SwapKitError("toolbox_utxo_invalid_address",{address:X})},QX=({inputs:X,outputs:$,feeRate:J})=>{let j=X[0]&&"address"in X[0]&&X[0].address?LX(X[0].address):"P2PKH",Z=(J?X.filter((q)=>q.value>=gX["type"in q&&q.type?q.type:"P2PKH"]*Math.ceil(J)):X).reduce((q,W)=>q+s(W),0),Y=$?.reduce((q,W)=>q+fX(W),0)||kX[j],L=lX+Z+Y;return j==="P2WPKH"?Math.ceil(L+xX/4):L},s=(X)=>{if("type"in X&&X.type)return gX[X.type];if("address"in X&&X.address)return gX[LX(X.address)];return w0+S0},fX=(X,$)=>{if(X?.script)return l2+X.script.length+(X.script.length>=74?2:1);if($)return kX[$];if("address"in X&&X.address)return kX[LX(X.address)];return kX.P2PKH};var J2=R(()=>{m2=require("@swapkit/helpers"),g2=require("@swapkit/utxo-signer");((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(hX||={});gX={["P2PKH"]:148,["P2WPKH"]:68},kX={["P2PKH"]:34,["P2WPKH"]:31}});function IX(X){switch(X){case x.Chain.Bitcoin:case x.Chain.BitcoinCash:return 550;case x.Chain.Dash:case x.Chain.Litecoin:return 5500;case x.Chain.Dogecoin:return 1e5;case x.Chain.Zcash:return 546;default:throw new x.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}function m({inputs:X,outputs:$,feeRate:J=1,chain:j=x.Chain.Bitcoin,changeAddress:Q=""}){let Z=X[0]&&"address"in X[0]&&X[0].address?LX(X[0].address):"P2PKH",Y=X.filter((N)=>s(N)*J<=N.value),G=Z==="P2WPKH"?Math.ceil(xX/4):0,q=lX+G+$.reduce((N,O)=>N+fX(O),0),W=$.reduce((N,O)=>N+O.value,0),z=q*J,B=0,_=[];for(let N of Y){let O=s(N),T=J*O;z+=T,B+=N.value,_.push(N);let YX=z+W;if(B<YX)continue;let AX=B-YX,RX=J*fX({address:Q,value:0});if(AX>RX){let NX=RX+z,MX=B-(W+Math.ceil(NX));if(MX>Math.max(s({value:0})*J,IX(j)))return{fee:Math.ceil(NX),inputs:_,outputs:$.concat({address:Q,value:MX})}}return{fee:Math.ceil(z),inputs:_,outputs:$}}return{fee:Math.ceil(J*QX({inputs:X,outputs:$}))}}var x;var x2=R(()=>{J2();x=require("@swapkit/helpers")});var zX=R(()=>{A2();K2();x2();J2()});function ZX(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function t(X){let $=ZX(X);return X2($)&&$2($)==="mainnet"}var GX;var TX=R(()=>{zX();GX=require("@swapkit/utxo-signer")});function Z2({address:X,chain:$}){return Q2.match($).with(U.Chain.BitcoinCash,()=>t(X)).with(U.Chain.Zcash,()=>GX.validateZcashAddress(X)).otherwise(()=>{try{return D.Address(y($)).decode(X),!0}catch{return!1}})}function y(X){return Q2.match(X).with(U.Chain.Bitcoin,()=>D.NETWORKS.bitcoin).with(U.Chain.BitcoinCash,()=>D.NETWORKS.bitcoinCash).with(U.Chain.Dash,()=>D.NETWORKS.dash).with(U.Chain.Dogecoin,()=>D.NETWORKS.dogecoin).with(U.Chain.Litecoin,()=>D.NETWORKS.litecoin).with(U.Chain.Zcash,()=>D.NETWORKS.zcash).exhaustive()}function K0({phrase:X,derivationPath:$,network:J,seed:j}){let Q=j??oX.mnemonicToSeedSync(X),Y=j2.HDKey.fromMasterSeed(Q,J.bip32).derive($);if(!Y.privateKey)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not derive private key from phrase"});return Y.privateKey}function h2(X){return p2.secp256k1.getPublicKey(X,!0)}function PX({publicKey:X,chain:$,network:J}){if($===U.Chain.BitcoinCash){let Z=D.p2pkh(X,J);if(!Z.hash)throw new U.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return D.encodeCashAddr({hash:Z.hash,prefix:D.CashAddrPrefix.MAINNET,type:D.CashAddrType.P2PKH}).replace(/^bitcoincash:/,"")}let Q=!FX.includes($)?D.p2wpkh(X,J):D.p2pkh(X,J);if(!Q.address)throw new U.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive address"});return Q.address}function UX({phrase:X,derivationPath:$,chain:J,wif:j,seed:Q}){let Z=y(J);if(j){let q=D.WIF(Z).decode(j),W=h2(q);return{privateKey:q,publicKey:W}}if(!X)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let Y=$||U.derivationPathToString(U.NetworkDerivationPath[J]),L=K0({derivationPath:Y,network:Z,phrase:X,seed:Q}),G=h2(L);return{privateKey:L,publicKey:G}}function m0(X,$){return D.WIF(y($)).encode(X)}function g0({phrase:X,derivationPath:$,chain:J,seed:j}){let Q=$.split("/");if(Q.length<4)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:`Derivation path must have at least 4 levels (got ${Q.length}): ${$}`});let Z=y(J),Y=j??oX.mnemonicToSeedSync(X),L=j2.HDKey.fromMasterSeed(Y,Z.bip32),G=Q.slice(0,4).join("/");return L.derive(G)}function e({inputs:X,outputs:$,chain:J,tx:j,sender:Q,compiledMemo:Z,enableRBF:Y=!1}){let L=y(J),G=!FX.includes(J),q=Y?D.RBF_SEQUENCE:void 0,W=new Set;for(let z of X){let B=`${z.hash}:${z.index}`;if(W.has(B))throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Duplicate input detected"});W.add(B);let _=typeof z.hash==="string"?a.hex.decode(z.hash):z.hash;if(G&&z.witnessUtxo)j.addInput({index:z.index,sequence:q,txid:_,witnessUtxo:{amount:BigInt(z.witnessUtxo.value),script:z.witnessUtxo.script}});else if(z.txHex)j.addInput({index:z.index,nonWitnessUtxo:a.hex.decode(z.txHex),sequence:q,txid:_,...J===U.Chain.BitcoinCash?{sighashType:D.BCHSigHash.ALL}:{}});else throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Input requires either witnessUtxo or txHex for non-segwit chains"})}for(let z of $){let B="address"in z&&z.address?z.address:Q;if(J===U.Chain.BitcoinCash)B=u(B);if(z.script){if(Z)j.addOutput({amount:0n,script:Z})}else j.addOutputAddress(B,BigInt(z.value),L)}return{inputs:X,tx:j}}async function WX(X){let $=await E(X).getSuggestedTxFee();return{[U.FeeOption.Average]:$,[U.FeeOption.Fast]:U.applyFeeMultiplier($,U.FeeOption.Fast),[U.FeeOption.Fastest]:U.applyFeeMultiplier($,U.FeeOption.Fastest)}}async function o2({assetValue:X,recipient:$,memo:J,sender:j,fetchTxHex:Q=!1}){let Z=X.chain,Y=(await WX(Z))[U.FeeOption.Fastest],L=Q||FX.includes(Z),G=X.getBaseValue("number"),q=Math.ceil(G+Y*5000);return{inputs:await E(Z).getUtxos({address:j,fetchTxHex:L,targetValue:q}),outputs:[{address:$,value:G},...J?[{address:"",script:w(J),value:0}]:[]]}}async function u2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q,fetchTxHex:Z=!1,enableRBF:Y=!1}){let L=X.chain,G=J?w(J):null,q=await o2({assetValue:X,fetchTxHex:Z,memo:J,recipient:$,sender:Q}),{inputs:W,outputs:z}=m({...q,chain:L,feeRate:j});if(!(W&&z))throw new U.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let B=new D.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!G,version:1}),{inputs:_,tx:N}=e({chain:L,compiledMemo:G,enableRBF:Y,inputs:W,outputs:z,sender:Q,tx:B});return{inputs:_,tx:N,utxos:q.inputs}}async function c2({assetValue:X,feeOptionKey:$=U.FeeOption.Fast,feeRate:J,memo:j,sender:Q,recipient:Z}){let Y=X.chain,L=await o2({assetValue:X,memo:j,recipient:Z,sender:Q}),G=J?Math.floor(J):(await WX(Y))[$];return m({...L,chain:Y,feeRate:G})}function l0(X){return async function({from:J,memo:j,feeRate:Q,feeOptionKey:Z=U.FeeOption.Fast,recipients:Y=1}){let L=await E(X).getAddressData(J),G=Q?Math.ceil(Q):(await WX(X))[Z],q=L?.utxo.map((O)=>({...O,hash:"",type:"P2PKH"})).filter((O)=>O.value>Math.max(IX(X),s(O)*G));if(!q?.length)return U.AssetValue.from({chain:X});let W=BigInt(q.reduce((O,T)=>O+T.value,0)),z=U.AssetValue.from({chain:X,value:W}),B=typeof Y==="number"?Array.from({length:Y},()=>({address:J,value:0})):Y;if(j)B.push({address:J,script:w(j),value:0});let _=QX({inputs:q,outputs:B}),N=U.AssetValue.from({chain:X,value:BigInt(_*G)});return z.sub(N)}}function x0(X){return async function(J){let{fee:j}=await c2(J);return U.AssetValue.from({chain:X,value:U.SwapKitNumber.fromBigInt(BigInt(j),8).getValue("string")})}}function h0({chain:X,phrase:$,derivationPath:J,seed:j}){let Q=y(X),{privateKey:Z,publicKey:Y}=UX({chain:X,derivationPath:J,phrase:$,seed:j}),L=X===U.Chain.BitcoinCash?[D.BCHSigHash.ALL]:[D.SigHash.ALL];return{getAddress:()=>PX({chain:X,network:Q,publicKey:Y}),privateKey:Z,publicKey:Y,signTransaction:(G)=>{return G.sign(Z,L),G}}}function p0(X,$){return async function({memo:j,recipient:Q,feeOptionKey:Z,feeRate:Y,assetValue:L,enableRBF:G=!1}){let q=await $?.getAddress();if(!($&&q))throw new U.SwapKitError("toolbox_utxo_no_signer");if(!Q)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});U.warnOnce({condition:G&&!pX.includes(X),id:`rbf_not_supported_${X}`,warning:`RBF (Replace-by-Fee) is not reliably supported on ${X}. Transaction will be created without RBF signaling.`});let W=G&&pX.includes(X),z=Y||(await WX(X))[Z||U.FeeOption.Fast],{tx:B}=await u2({assetValue:L,enableRBF:W,feeRate:z,memo:j,recipient:Q,sender:q}),_=await $.signTransaction(B);return _.finalize(),E(X).broadcastTx(a.hex.encode(_.extract()))}}function G2(X){return($)=>Z2({address:$,chain:X})}function Y2(X){let $=y(X);return function(j){if(!j)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Keys must be provided"});return PX({chain:X,network:$,publicKey:j.publicKey})}}function XX({chain:X,...$}){let J="phrase"in $?$.phrase:void 0,j="index"in $?$.index||0:0,Q=J?oX.mnemonicToSeedSync(J):void 0,Z="derivationPath"in $&&$.derivationPath?$.derivationPath:U.updateDerivationPath(U.NetworkDerivationPath[X],{index:j}),Y=U.derivationPathToString(Z),L=J?h0({chain:X,derivationPath:Y,phrase:J,seed:Q}):void 0,G="signer"in $?$.signer:void 0,q=L||G,W=J?UX({chain:X,derivationPath:Y,phrase:J,seed:Q}):void 0;function z(){if(q)return q.getAddress();return Promise.resolve(void 0)}function B(M){if(!J)return;let H=i({accountIndex:M,chain:X,derivationPath:Z});return g0({chain:X,derivationPath:U.derivationPathToString(H),phrase:J,seed:Q})}let _=B();function N(){if(!_)return;return _.publicExtendedKey}function O({accountIndex:M}={}){let H=M===void 0?_:B(M);if(!H)return;let b=i({accountIndex:M,chain:X,derivationPath:Z});return{accountIndex:$X(b),path:U.derivationPathToString(b),xpub:H.publicExtendedKey}}function T({accountIndex:M,index:H,change:b=!1}){let k=M===void 0?_:B(M);if(!k)return;let f=qX({accountIndex:M,chain:X,change:b,derivationPath:Z,index:H}),S=y(X),g=k.deriveChild(Number(b)).deriveChild(H);if(!g.publicKey)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not derive public key"});let v=PX({chain:X,network:S,publicKey:g.publicKey}),l=a.hex.encode(g.publicKey);return{accountIndex:$X(f),address:v,change:b,index:H,path:U.derivationPathToString(f),pubkey:l}}async function YX(M){if(!pX.includes(X))return{reason:`RBF is not supported on ${X}`,supported:!1};let H=await E(X).getTransactionDetails(M);return{canReplace:H.isRBF&&!H.confirmed,confirmed:H.confirmed,enabled:H.isRBF,fee:H.fee,sequences:H.sequences,supported:!0}}async function AX({txid:M,newFeeRate:H,recipient:b,memo:k}){if(!pX.includes(X))throw new U.SwapKitError("toolbox_utxo_rbf_not_supported",{chain:X});let f=await E(X).getTransactionDetails(M);if(!f.isRBF)throw new U.SwapKitError("toolbox_utxo_tx_not_replaceable",{txid:M});if(f.confirmed)throw new U.SwapKitError("toolbox_utxo_tx_already_confirmed",{blockId:f.blockId,txid:M});let S=f.inputs.reduce((A,n)=>A+n.value,0),v=f.outputs.find((A)=>A.recipient===b)?.value||0;if(v===0)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not determine send amount from original transaction"});let l=await Promise.all(f.inputs.map(async(A)=>{let n=await E(X).getRawTx(A.transaction_hash);return{hash:A.transaction_hash,index:A.index,txHex:n,value:A.value,witnessUtxo:void 0}})),yX=k?w(k):null,rX=QX({feeRate:H,inputs:l.map((A)=>({...A,type:"P2WPKH"})),outputs:[{address:b,value:v}]}),p=Math.ceil(rX*H);if(p<=f.fee)throw new U.SwapKitError("toolbox_utxo_rbf_fee_too_low",{newFee:p,originalFee:f.fee});let CX=p-f.fee,d=v-CX;if(d<=0)throw new U.SwapKitError("toolbox_utxo_rbf_insufficient_change");let vX=new D.Transaction({allowLegacyWitnessUtxo:!0,version:1}),wX=[{address:b,value:d},...k?[{address:"",script:w(k),value:0}]:[]],SX=S-d-p,r=await z();if(SX>IX(X)&&r)wX.push({address:r,value:SX});return e({chain:X,compiledMemo:yX,inputs:l,outputs:wX,sender:r||b,tx:vX}),{feeDelta:CX,newFee:p,originalFee:f.fee,tx:vX}}async function RX({txid:M,newFeeRate:H,recipient:b,memo:k}){let{tx:f,originalFee:S,newFee:g}=await AX({memo:k,newFeeRate:H,recipient:b,txid:M}),v=await dX(f);v.finalize();let l=await E(X).broadcastTx(a.hex.encode(v.extract()));return{newFee:g,originalFee:S,txid:l}}function NX({accountIndex:M,index:H,change:b=!1}){K("index",H);let k=M===void 0?_:B(M);if(!k)return;return k.deriveChild(Number(b)).deriveChild(H).privateKey||void 0}function MX({tx:M,inputDerivations:H}){if(!_)throw new U.SwapKitError("toolbox_utxo_no_signer");let b=X===U.Chain.BitcoinCash?[D.BCHSigHash.ALL]:[D.SigHash.ALL];for(let k=0;k<H.length;k++){let f=H[k];if(!f)continue;let{derivationIndex:S,isChange:g}=f,v=NX({change:g,index:S});if(!v)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:`Could not derive private key for input ${k} at index ${S}`});M.signIdx(v,k,b)}return M}async function X0({utxos:M,recipient:H,assetValue:b,memo:k,feeRate:f,feeOptionKey:S,changeAddress:g}){if(!_)throw new U.SwapKitError("toolbox_utxo_no_signer");let v=f||(await WX(X))[S||U.FeeOption.Fast],l=k?w(k):null,yX=[{address:H,value:b.getBaseValue("number")}];if(l)yX.push({address:"",script:l,value:0});let rX=M.map(({hash:r,index:A,value:n,txHex:j0,witnessUtxo:nX})=>({hash:r,index:A,txHex:j0,value:n,witnessUtxo:nX?{script:nX.script,value:nX.value}:void 0})),{inputs:p,outputs:CX}=m({chain:X,feeRate:v,inputs:rX,outputs:yX});if(!(p&&CX))throw new U.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:b,sender:"multiple addresses"});let d=new D.Transaction({allowLegacyWitnessUtxo:!0,version:1}),vX=M[0]?.address,wX=g||await z()||vX||H;e({chain:X,compiledMemo:l,inputs:p,outputs:CX,sender:wX,tx:d});let SX=p.map((r)=>{let A=M.find((n)=>n.hash===r.hash&&n.index===r.index);return A?{derivationIndex:A.derivationIndex,isChange:A.isChange}:{derivationIndex:0,isChange:!1}});return MX({inputDerivations:SX,tx:d}),d.finalize(),E(X).broadcastTx(a.hex.encode(d.extract()))}function $0({address:M,gapLimit:H=20}){if(!_)return;for(let b=0;b<H;b++){let k=T({change:!1,index:b}),f=T({change:!0,index:b}),S=k?.address===M?!1:f?.address===M;if(k?.address===M||f?.address===M)return{change:S,index:b}}return}function dX(M){if(!q)throw new U.SwapKitError("toolbox_utxo_no_signer");return q.signTransaction(M)}async function J0(M){let H=await dX(M);return H.finalize(),await E(X).broadcastTx(a.hex.encode(H.extract()))}return{accumulative:m,broadcastTx:(M)=>E(X).broadcastTx(M),bumpFee:RX,calculateTxSize:QX,createKeysForPath:(M)=>UX({...M,chain:X}),createReplacementTransaction:AX,createTransaction:u2,deriveAddressAtIndex:T,derivePrivateKeyAtIndex:NX,estimateMaxSendableAmount:l0(X),estimateTransactionFee:x0(X),getAddress:z,getAddressFromKeys:Y2(X),getBalance:f2(X),getExtendedPublicKey:N,getExtendedPublicKeyInfo:O,getFeeRates:()=>WX(X),getInputsOutputsFee:c2,getNetworkForChain:()=>y(X),getPrivateKeyFromMnemonic:(M)=>m0(UX({...M,chain:X}).privateKey,X),isRBFEnabled:YX,keys:W,resolveDerivationIndex:$0,signAndBroadcastTransaction:J0,signTransaction:dX,signTransactionWithMultipleKeys:MX,transfer:p0(X,q),transferFromMultipleAddresses:X0,validateAddress:G2(X)}}var p2,a,j2,oX,U,D,Q2,FX,pX;var BX=R(()=>{sX();HX();zX();TX();p2=require("@noble/curves/secp256k1.js"),a=require("@scure/base"),j2=require("@scure/bip32"),oX=require("@scure/bip39"),U=require("@swapkit/helpers"),D=require("@swapkit/utxo-signer"),Q2=require("ts-pattern"),FX=[U.Chain.Dash,U.Chain.Dogecoin,U.Chain.Zcash,U.Chain.BitcoinCash],pX=[U.Chain.Bitcoin]});function EX(X){return ZX(bX(X))}function o0(X){let $=y(h);function J(Q){return Q.sign(X.privateKey,[P.BCHSigHash.ALL]),Q}function j(){let Q=P.p2pkh(X.publicKey,$);if(!Q.hash)throw new F.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});let Z=P.encodeCashAddr({hash:Q.hash,prefix:P.CashAddrPrefix.MAINNET,type:P.CashAddrType.P2PKH});return Promise.resolve(Z.replace(/^bitcoincash:/,""))}return{getAddress:j,signTransaction:J}}function L2(X){let $="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,j=F.derivationPathToString("derivationPath"in X&&X.derivationPath?X.derivationPath:F.updateDerivationPath(F.NetworkDerivationPath[h],{index:J})),Q=$?UX({chain:h,derivationPath:j,phrase:$}):void 0,Z=Q?o0(Q):("signer"in X)?X.signer:void 0;function Y(){return Promise.resolve(Z?.getAddress())}let{getBalance:L,getFeeRates:G,broadcastTx:q,...W}=XX({chain:h});function z(N,O=!0){return L(ZX(bX(N)))}function B(N){if(!Z)throw new F.SwapKitError("toolbox_utxo_no_signer");return Z.signTransaction(N)}async function _(N){let O=await B(N);return O.finalize(),await q(q2.hex.encode(O.extract()))}return{...W,broadcastTx:q,buildTx:c0,createTransaction:d2,getAddress:Y,getAddressFromKeys:d0,getBalance:z,getFeeRates:G,signAndBroadcastTransaction:_,signTransaction:B,stripPrefix:ZX,stripToCashAddress:EX,transfer:u0({broadcastTx:q,getFeeRates:G,signer:Z}),validateAddress:t}}async function d2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q}){if(!t($))throw new F.SwapKitError("toolbox_utxo_invalid_address",{address:$});let Z=Math.ceil(X.getBaseValue("number")+j*7500),Y=await E(h).getUtxos({address:EX(Q),fetchTxHex:!0,targetValue:Z}),L=J?w(J):null,G=[],q=u($);if(G.push({address:q,value:X.getBaseValue("number")}),L)G.push({script:L,value:0});let{inputs:W,outputs:z}=m({chain:h,feeRate:j,inputs:Y,outputs:G});if(!(W&&z))throw new F.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let B=new P.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!L,version:1}),_=u(Q),{inputs:N,tx:O}=e({chain:h,compiledMemo:L,inputs:W,outputs:z.map((T)=>("address"in T)&&T.address?{...T,address:u(T.address)}:T),sender:_,tx:B});return{inputs:N,tx:O,utxos:W}}function u0({broadcastTx:X,getFeeRates:$,signer:J}){return async function({recipient:Q,assetValue:Z,feeOptionKey:Y=F.FeeOption.Fast,...L}){let G=await J?.getAddress();if(!(J&&G))throw new F.SwapKitError("toolbox_utxo_no_signer");if(!Q)throw new F.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let q=L.feeRate||(await $())[Y],{tx:W}=await d2({...L,assetValue:Z,feeRate:q,recipient:Q,sender:G}),z=await J.signTransaction(W);return z.finalize(),X(q2.hex.encode(z.extract()))}}async function c0({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q}){let Z=bX($);if(!t(Z))throw new F.SwapKitError("toolbox_utxo_invalid_address",{address:Z});let Y=Math.ceil(X.getBaseValue("number")+j*7500),L=await E(h).getUtxos({address:EX(Q),fetchTxHex:!0,targetValue:Y}),G=Number(j.toFixed(0)),q=J?w(J):null,W=[];if(W.push({address:u($),value:X.getBaseValue("number")}),q)W.push({script:q,value:0});let{inputs:z,outputs:B}=m({chain:h,feeRate:G,inputs:L,outputs:W});if(!(z&&B))throw new F.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new P.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!q,version:1}),{inputs:N,tx:O}=e({chain:h,compiledMemo:q,inputs:z,outputs:B,sender:u(Q),tx:_});return{inputs:N,tx:O,utxos:L}}function d0(X){let $=P.NETWORKS.bitcoinCash,J=P.p2pkh(X.publicKey,$);if(!J.hash)throw new F.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return P.encodeCashAddr({hash:J.hash,prefix:P.CashAddrPrefix.MAINNET,type:P.CashAddrType.P2PKH}).replace(/^bitcoincash:/,"")}var q2,F,P,h;var uX=R(()=>{zX();BX();TX();q2=require("@scure/base"),F=require("@swapkit/helpers"),P=require("@swapkit/utxo-signer"),h=F.Chain.BitcoinCash});function W2(){let{isStagenet:X}=I.SKConfig.get("envs");return X?V.ZCASH_TEST_NETWORK:V.ZCASH_NETWORK}function n0(X){return r0.encode(X)}function i0({phrase:X,derivationPath:$}){let J=U2.mnemonicToSeedSync(X),Q=z2.HDKey.fromMasterSeed(J).derive($);if(!Q.privateKey||!Q.publicKey)throw new I.SwapKitError("toolbox_utxo_invalid_params");let{privateKey:Z,publicKey:Y}=Q,L=V.utils.hash160(Y),{isStagenet:G}=I.SKConfig.get("envs"),q=G?new Uint8Array([29,37]):new Uint8Array([28,184]),W=new Uint8Array(q.length+L.length);W.set(q,0),W.set(L,q.length);let z=n0(W);return{getAddress:()=>Promise.resolve(z),signTransaction:(B)=>{if(B instanceof V.ZcashPSBT){let _=B.toPCZT();return _.signAllInputs(Z,Y,V.ZcashSigHash.ALL),_.finalizeAllInputs(),Promise.resolve(_.extract())}if(B instanceof V.PCZT)return B.signAllInputs(Z,Y,V.ZcashSigHash.ALL),B.finalizeAllInputs(),Promise.resolve(B.extract());return B.signAllInputs(Z,Y,V.ZcashSigHash.ALL),Promise.resolve(B)}}}function s0({inputs:X,outputs:$,tx:J,sender:j,compiledMemo:Q}){let Z=W2();for(let Y of X){let L=V.Address(Z).decode(j),G=V.OutScript.encode(L);J.addInput({index:Y.index,script:G,sequence:4294967295,txid:cX.hex.decode(Y.hash),value:BigInt(Y.value)})}for(let Y of $){let L="address"in Y&&Y.address?Y.address:j,G=Y.script;if(G&&!Q)continue;if(G&&Q)J.addOutput({amount:0n,script:Q});else J.addOutputAddress(L,BigInt(Y.value),Z)}return{inputs:X,tx:J}}async function r2(X){let{assetValue:$,recipient:J,memo:j,feeRate:Q,sender:Z,fetchTxHex:Y}=X,L=W2();if(!V.isTransparentZcashAddress(Z,L))throw new I.SwapKitError("toolbox_utxo_invalid_address",{address:Z});if(!V.isTransparentZcashAddress(J,L))throw new I.SwapKitError("toolbox_utxo_invalid_address",{address:J,error:"Zcash transaction creation currently supports transparent addresses only"});let G=j?w(j):null,q=await E(I.Chain.Zcash).getUtxos({address:Z,fetchTxHex:Y!==!1}),W=[{address:J,value:Number($.getBaseValue("string"))},...G?[{script:G,value:0}]:[]],{inputs:z,outputs:B}=m({chain:I.Chain.Zcash,changeAddress:Z,feeRate:Q,inputs:q,outputs:W});if(!(z&&B))throw new I.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:$,sender:Z});let _=V.createZcashTransaction({consensusBranchId:V.ZcashConsensusBranchId.NU6_2,expiryHeight:0,lockTime:0,version:4,versionGroupId:V.ZcashVersionGroupId.SAPLING}),{tx:N,inputs:O}=s0({compiledMemo:G,inputs:z,outputs:B,sender:Z,tx:_});return{inputs:O,outputs:B,tx:N}}function B2(X){let $=_X.match(X).with({signer:_X.P.not(_X.P.nullish)},({signer:G})=>G).with({phrase:_X.P.string},({phrase:G,derivationPath:q,index:W=0})=>{let z=q||I.NetworkDerivationPath[I.Chain.Zcash]||[44,133,0,0,0],B=I.updateDerivationPath(z,{index:W}),_=I.derivationPathToString(B);return i0({derivationPath:_,phrase:G})}).otherwise(()=>{return}),J=XX({chain:I.Chain.Zcash,signer:$});async function j(G){if(!$)throw new I.SwapKitError("toolbox_utxo_no_signer");return await $.signTransaction(G)}async function Q(G){let q=await j(G);return J.broadcastTx(q.toHex())}async function Z({recipient:G,assetValue:q,feeOptionKey:W=I.FeeOption.Fast,...z}){let B=await $?.getAddress();if(!($&&B))throw new I.SwapKitError("toolbox_utxo_no_signer");let _=z.feeRate||(await J.getFeeRates())[W],{tx:N}=await r2({...z,assetValue:q,feeRate:_,recipient:G,sender:B}),T=(await $.signTransaction(N)).toHex();return J.broadcastTx(T)}function Y({phrase:G,derivationPath:q="m/44'/133'/0'/0/0"}){let W=U2.mnemonicToSeedSync(G),B=z2.HDKey.fromMasterSeed(W).derive(q);if(!B.privateKey||!B.publicKey)throw new I.SwapKitError("toolbox_utxo_invalid_params");return{privateKey:B.privateKey,publicKey:B.publicKey}}function L({phrase:G,derivationPath:q="m/44'/133'/0'/0/0"}){let W=Y({derivationPath:q,phrase:G}),z=W2();return V.WIF(z).encode(W.privateKey)}return{...J,createKeysForPath:Y,createTransaction:r2,getPrivateKeyFromMnemonic:L,signAndBroadcastTransaction:Q,signTransaction:j,transfer:Z,validateAddress:GX.validateZcashAddress}}var cX,z2,U2,I,V,_X,r0;var _2=R(()=>{zX();BX();TX();cX=require("@scure/base"),z2=require("@scure/bip32"),U2=require("@scure/bip39"),I=require("@swapkit/helpers"),V=require("@swapkit/utxo-signer"),_X=require("ts-pattern");r0=cX.createBase58check(V.utils.sha256)});function t2({xpub:X,chain:$,count:J,startIndex:j=0,accountIndex:Q}){if(K("count",J),J<1)throw RangeError("count must be at least 1");K("startIndex",j);let Z=y($),Y=i2.HDKey.fromExtendedKey(X,Z.bip32),L=i({accountIndex:Q,chain:$}),G=$X(L),q=[];for(let W of[!1,!0]){let z=Y.deriveChild(Number(W));for(let B=0;B<J;B++){let _=j+B,N=z.deriveChild(_);if(!N.publicKey)continue;let O=qX({accountIndex:Q,chain:$,change:W,index:_});q.push({accountIndex:G,address:PX({chain:$,network:Z,publicKey:N.publicKey}),change:W,index:_,path:s2.derivationPathToString(O),pubkey:n2.hex.encode(N.publicKey)})}}return q}var n2,i2,s2;var a2=R(()=>{HX();BX();n2=require("@scure/base"),i2=require("@scure/bip32"),s2=require("@swapkit/helpers")});function t0(X,$){switch(X){case c.Chain.BitcoinCash:return L2($||{});case c.Chain.Zcash:return B2($);case c.Chain.Bitcoin:case c.Chain.Dogecoin:case c.Chain.Litecoin:case c.Chain.Dash:return XX({chain:X,...$});default:throw new c.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}var c;var e2=R(()=>{uX();BX();_2();HX();a2();uX();TX();c=require("@swapkit/helpers")});var a0={};W0(a0,{validateZcashAddress:()=>GX.validateZcashAddress,validateUtxoAddress:()=>Z2,validateBchAddress:()=>t,toLegacyAddress:()=>u,toCashAddress:()=>bX,stripToCashAddress:()=>EX,stripPrefix:()=>ZX,nonSegwitChains:()=>FX,isValidAddress:()=>X2,getUtxoToolbox:()=>t0,getUtxoNetwork:()=>f0,getUtxoApi:()=>E,getUTXOAddressValidator:()=>G2,getUTXOAddressPath:()=>qX,getUTXOAccountPath:()=>i,getUTXOAccountIndexFromPath:()=>$X,getScriptTypeForAddress:()=>LX,getOutputSize:()=>fX,getNetworkForChain:()=>y,getInputSize:()=>s,getDustThreshold:()=>IX,detectAddressNetwork:()=>$2,deriveAddressesFromXpub:()=>t2,createZcashToolbox:()=>B2,createUTXOToolbox:()=>XX,createHDWalletHelpers:()=>V2,createCustomUtxoApi:()=>k0,createBCHToolbox:()=>L2,compileMemo:()=>w,calculateTxSize:()=>QX,assertDerivationIndex:()=>K,addressFromKeysGetter:()=>Y2,addInputsAndOutputs:()=>e,accumulative:()=>m,UtxoNetwork:()=>eX,UTXOScriptType:()=>hX,TX_OVERHEAD:()=>lX,SEGWIT_MARKER_FLAG_WEIGHT:()=>xX,OutputSizes:()=>kX,OP_RETURN_OVERHEAD:()=>l2,MIN_TX_FEE:()=>v0,InputSizes:()=>gX});module.exports=L0(a0);var e0=R(()=>{BX();HX();zX();e2();uX();_2()});e0();
|
|
1
|
+
var Z0=Object.create;var{getPrototypeOf:G0,defineProperty:VX,getOwnPropertyNames:O2,getOwnPropertyDescriptor:Y0}=Object,b2=Object.prototype.hasOwnProperty;function k2(X){return this[X]}var q0,L0,$1=(X,$,J)=>{var j=X!=null&&typeof X==="object";if(j){var Q=$?q0??=new WeakMap:L0??=new WeakMap,Z=Q.get(X);if(Z)return Z}J=X!=null?Z0(G0(X)):{};let Y=$||!X||!X.__esModule?VX(J,"default",{value:X,enumerable:!0}):J;for(let G of O2(X))if(!b2.call(Y,G))VX(Y,G,{get:k2.bind(X,G),enumerable:!0});if(j)Q.set(X,Y);return Y},z0=(X)=>{var $=(H2??=new WeakMap).get(X),J;if($)return $;if($=VX({},"__esModule",{value:!0}),X&&typeof X==="object"||typeof X==="function"){for(var j of O2(X))if(!b2.call($,j))VX($,j,{get:k2.bind(X,j),enumerable:!(J=Y0(X,j))||J.enumerable})}return H2.set(X,$),$},H2;var W0=(X)=>X;function U0(X,$){this[X]=W0.bind(null,$)}var B0=(X,$)=>{for(var J in $)VX(X,J,{get:$[J],enumerable:!0,configurable:!0,set:U0.bind($,J)})};var y=(X,$)=>()=>(X&&($=X(X=0)),$);function x(X,$){if(!Number.isInteger($)||$<0)throw RangeError(`${X} must be a non-negative integer, got: ${$}`)}function i({accountIndex:X,chain:$,derivationPath:J}){if(X!==void 0)x("accountIndex",X);let j=[...J?.slice(0,3)??V2.NetworkDerivationPath[$].slice(0,3)];if(X!==void 0)j[2]=X;return j}function BX({accountIndex:X,change:$=!1,chain:J,derivationPath:j,index:Q}){return x("index",Q),[...i({accountIndex:X,chain:J,derivationPath:j}),Number($),Q]}function ZX(X){return X[2]??0}function f2({deriveAddress:X,getBalance:$,getUtxos:J}){async function j(G){let{accountIndex:L,count:q,startIndex:U=0,change:B=!1}=G;if(x("count",q),q<1)throw RangeError("count must be at least 1");x("startIndex",U);let z=[];for(let _=0;_<q;_++){let N=await X({accountIndex:L,change:B,index:U+_});if(N)z.push(N)}return z}async function Q(G){let{gapLimit:L=20,change:q=!1}=G??{},U=[],B=0,z=0;while(B<L){let _=await X({change:q,index:z});if(!_)break;if((await $(_.address)).some((O)=>O.getValue("number")>0))U.push(_),B=0;else B++;z++}return U}async function Z(G=20){let[L,q]=await Promise.all([Q({change:!1,gapLimit:G}),Q({change:!0,gapLimit:G})]),U=[...L,...q],B=await Promise.all(U.map(async(_)=>{let k=(await $(_.address)).reduce((O,P)=>O+P.getValue("number"),0);return{..._,balance:k}})),z=B.reduce((_,N)=>_+N.balance,0);return{addresses:B,total:z}}async function Y(G=20){let[L,q]=await Promise.all([Q({change:!1,gapLimit:G}),Q({change:!0,gapLimit:G})]),U=[...L,...q];return(await Promise.all(U.map(async(z)=>{return(await J(z.address)).map((N)=>({...N,address:z.address,derivationIndex:z.index,isChange:z.change}))}))).flat()}return{deriveAddresses:j,getAggregatedBalance:Z,getAggregatedUtxos:Y,scanForAddresses:Q}}var V2;var fX=y(()=>{V2=require("@swapkit/helpers")});function T2(){function X(){let $=Date.now(),J=tX||$;return tX=J,$>tX?$:J+1}return _0+X().toString(36)}function P2(X){return async function(J,j=!0){let Q=await I2.SwapKitApi.getChainBalance({address:J,chain:X,scamFilter:j}),{baseDecimal:Z}=IX.getChainConfig(X),Y=Q.map(({identifier:L,value:q,decimal:U})=>{return new IX.AssetValue({decimal:U||Z,identifier:L,value:q})});if(!Y.some((L)=>L.isGasAsset))return[IX.AssetValue.from({chain:X}),...Y];return Y}}var IX,I2,_0,tX=0;var eX=y(()=>{IX=require("@swapkit/helpers"),I2=require("@swapkit/helpers/api"),_0=typeof process<"u"&&process.pid?process.pid.toString(36):""});async function N0({chain:X,txHash:$}){let J=`${TX(X)}/push/transaction`,j=JSON.stringify({data:$});try{let Q=await D.RequestClient.post(J,{body:j,headers:{"Content-Type":"application/json"}});if(Q.context.code!==200)throw new D.SwapKitError("toolbox_utxo_broadcast_failed",{error:Q.context.error||"Transaction broadcast failed"});return Q.data?.transaction_hash||$}catch(Q){let Z=await D.getRPCUrl(X);if(Z){let Y=JSON.stringify({id:T2(),jsonrpc:"2.0",method:"sendrawtransaction",params:[$]}),G=await D.RequestClient.post(Z,{body:Y,headers:{"Content-Type":"application/json"}});if(G.error)throw new D.SwapKitError("toolbox_utxo_broadcast_failed",{error:G.error?.message});if(G.result.includes('"code":-26'))throw new D.SwapKitError("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return G.result}throw Q}}function TX(X){return`https://api.blockchair.com/${M0(X)}`}function F2(X){switch(X){case D.Chain.Bitcoin:return 5;case D.Chain.Dogecoin:return 1e4;case D.Chain.Litecoin:return 1;case D.Chain.Zcash:return 1;default:return 2}}function M0(X){switch(X){case D.Chain.BitcoinCash:return"bitcoin-cash";case D.Chain.Litecoin:return"litecoin";case D.Chain.Dash:return"dash";case D.Chain.Dogecoin:return"dogecoin";case D.Chain.Zcash:return"zcash";case D.Chain.Polkadot:return"polkadot";default:return"bitcoin"}}async function D0(X){try{let{feePerKb:$}=await D.RequestClient.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=$/1000;return Math.max(J,F2(X))}catch{return F2(X)}}async function xX(X,$){let J=await D.RequestClient.get(`${X}${$?`${X.includes("?")?"&":"?"}key=${$}`:""}`);if(!J||J.context.code!==200)throw new D.SwapKitError("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return J.data}async function R2({address:X,chain:$,apiKey:J}){if(!X)throw new D.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await xX(`${TX($)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch{return{address:{balance:0,transaction_count:0},utxo:[]}}}async function C0({address:X,chain:$,apiKey:J}){return(await R2({address:X,apiKey:J,chain:$}))?.address.balance||0}async function A2({chain:X,apiKey:$,txHash:J}){if(!J)throw new D.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await xX(`${TX(X)}/raw/transaction/${J}`,$))?.[J]?.raw_transaction||""}catch(j){let Q=j instanceof Error?j.message:String(j);return console.error(`Failed to fetch raw transaction: ${Q}`),""}}async function O0({chain:X,apiKey:$,txHash:J}){if(!J)throw new D.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});let Q=(await xX(`${TX(X)}/dashboards/transaction/${J}`,$))?.[J];if(!Q)throw new D.SwapKitError("toolbox_utxo_tx_not_found",{txHash:J});let{transaction:Z,inputs:Y,outputs:G}=Q,L=Y.map((U)=>U.spending_sequence),q=Z.is_rbf===!0||L.some((U)=>U<H0);return{blockId:Z.block_id,confirmed:Z.block_id!==-1,fee:Z.fee,inputs:Y,isRBF:q,outputs:G,sequences:L,size:Z.size,txid:Z.hash,weight:Z.weight}}async function b0({chain:X,address:$,apiKey:J,offset:j=0,limit:Q=30}){return(await xX(`${TX(X)}/outputs?q=recipient(${$}),is_spent(false)&s=value(desc)&fields=is_spent,transaction_hash,index,value,script_hex,block_id,spending_signature_hex&limit=${Q}&offset=${j}`,J)).map(({is_spent:L,script_hex:q,block_id:U,transaction_hash:B,index:z,value:_,spending_signature_hex:N})=>({hash:B,index:z,is_confirmed:U!==-1,is_spent:L,script_hex:q,txHex:N,value:_}))}function k0(X){return X.reduce(($,J)=>$+J.value,0)}function E2(X,$){let J=[...X].sort((j,Q)=>Q.value-j.value);if($){let j=[],Q=0;for(let Z of J)if(j.push(Z),Q+=Z.value,Q>=$)break;return j}return J}async function y2({chain:X,address:$,apiKey:J,targetValue:j,accumulativeValue:Q=0,offset:Z=0,limit:Y=30}){if(!$)throw new D.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{let G=await b0({address:$,apiKey:J,chain:X,limit:Y,offset:Z,targetValue:j}),q=G.length<Y,U=G.filter(({is_spent:O})=>!O),B=k0(U),z=Q+B,_=j&&z>=j;if(q||_)return E2(U,j);let N=await y2({accumulativeValue:z,address:$,apiKey:J,chain:X,limit:Y,offset:Z+Y,targetValue:j}),k=[...U,...N];return E2(k,j)}catch(G){let L=G instanceof Error?G.message:String(G);return console.error(`Failed to fetch unspent UTXOs: ${L}`),[]}}async function V0({address:X,chain:$,apiKey:J,fetchTxHex:j=!0,targetValue:Q}){let Z=await y2({address:X,apiKey:J,chain:$,targetValue:Q}),Y=[];for(let{hash:G,index:L,script_hex:q,value:U}of Z){let B;if(j)B=await A2({apiKey:J,chain:$,txHash:G});Y.push({address:X,hash:G,index:L,txHex:B,value:U,witnessUtxo:{script:Buffer.from(q,"hex"),value:U}})}return Y}function R(X){let $=D.SKConfig.get("apiKeys").blockchair||"";return D.warnOnce({condition:!$,id:"no_blockchair_api_key_warning",warning:"No Blockchair API key found. Functionality will be limited."}),{broadcastTx:(J)=>N0({chain:X,txHash:J}),getAddressData:(J)=>R2({address:J,apiKey:$,chain:X}),getBalance:(J)=>C0({address:J,apiKey:$,chain:X}),getRawTx:(J)=>A2({apiKey:$,chain:X,txHash:J}),getSuggestedTxFee:()=>D0(X),getTransactionDetails:(J)=>O0({apiKey:$,chain:X,txHash:J}),getUtxos:(J)=>V0({...J,apiKey:$,chain:X})}}function f0(X){return X}function I0(){return function($){switch($){case D.Chain.Bitcoin:return GX.NETWORKS.bitcoin;case D.Chain.BitcoinCash:return GX.NETWORKS.bitcoinCash;case D.Chain.Dash:return GX.NETWORKS.dash;case D.Chain.Litecoin:return GX.NETWORKS.litecoin;case D.Chain.Dogecoin:return GX.NETWORKS.dogecoin;case D.Chain.Zcash:return GX.NETWORKS.zcash;default:throw new D.SwapKitError("toolbox_utxo_not_supported",{chain:$})}}}var D,GX,H0=4294967294;var v2=y(()=>{eX();D=require("@swapkit/helpers"),GX=require("@swapkit/utxo-signer")});function F0(X,$,J){return u.encodeCashAddr({hash:J,prefix:X,type:T0[$]})}function E0(X){let $=u.decodeCashAddr(X),J=P0[$.type];if(!J)throw Error(`Unknown CashAddr type: ${$.type}`);return{hash:$.hash,prefix:$.prefix,type:J}}var u,T0,P0,X2;var S2=y(()=>{u=require("@swapkit/utxo-signer"),T0={P2PKH:u.CashAddrType.P2PKH,P2SH:u.CashAddrType.P2SH},P0={[u.CashAddrType.P2PKH]:"P2PKH",[u.CashAddrType.P2SH]:"P2SH"};X2={decode:E0,encode:F0}});function j2(X){try{return hX(X),!0}catch{return!1}}function Q2(X){return hX(X)?.network}function d(X){let $=hX(X);if($?.format==="legacy")return X;return y0($)}function PX(X){let $=hX(X);return v0($)}function hX(X){try{let $=R0(X);if($)return $}catch{}try{let $=A0(X);if($)return $}catch{}throw new $2.SwapKitError("toolbox_utxo_invalid_address",{address:X})}function R0(X){try{let $=g2.decode(X);if($.length!==21)throw new $2.SwapKitError("toolbox_utxo_invalid_address",{address:X});let J=$[0],j=Array.prototype.slice.call($,1);switch(J){case YX.legacy.mainnet.p2pkh:return{format:"legacy",hash:j,network:"mainnet",type:"p2pkh"};case YX.legacy.mainnet.p2sh:return{format:"legacy",hash:j,network:"mainnet",type:"p2sh"};case YX.legacy.testnet.p2pkh:return{format:"legacy",hash:j,network:"testnet",type:"p2pkh"};case YX.legacy.testnet.p2sh:return{format:"legacy",hash:j,network:"testnet",type:"p2sh"};case YX.bitpay.mainnet.p2pkh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2pkh"};case YX.bitpay.mainnet.p2sh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2sh"};default:return}}catch{return}}function A0(X){if(X.indexOf(":")!==-1)try{return w2(X)}catch{}else{let $=["bitcoincash","bchtest","bchreg"];for(let J of $)try{return w2(`${J}:${X}`)}catch{}}return}function w2(X){try{let{hash:$,prefix:J,type:j}=X2.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call($,0),network:J==="bitcoincash"?"mainnet":"testnet",type:j==="P2PKH"?"p2pkh":"p2sh"}}catch{return}}function y0(X){let $=YX.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=$,J.set(X.hash,1),g2.encode(J)}function v0(X){let $=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",j=new Uint8Array(X.hash);return X2.encode($,J,j)}var K2,m2,$2,g2,J2,YX;var l2=y(()=>{S2();K2=require("@noble/hashes/sha2.js"),m2=require("@scure/base"),$2=require("@swapkit/helpers"),g2=m2.createBase58check(K2.sha256);((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})(J2||={});YX={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}}});function w(X){let $=new Uint8Array(Buffer.from(X,"utf8"));return h2.Script.encode(["RETURN",$])}var x2,h2,S0=1000,cX=10,pX=2,o2=10,w0=41,K0=107,uX,oX,FX,_X=(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 x2.SwapKitError("toolbox_utxo_invalid_address",{address:X})},qX=({inputs:X,outputs:$,feeRate:J})=>{let j=X[0]&&"address"in X[0]&&X[0].address?_X(X[0].address):"P2PKH",Z=(J?X.filter((q)=>q.value>=oX["type"in q&&q.type?q.type:"P2PKH"]*Math.ceil(J)):X).reduce((q,U)=>q+s(U),0),Y=$?.reduce((q,U)=>q+EX(U),0)||FX[j],G=cX+Z+Y;return j==="P2WPKH"?Math.ceil(G+pX/4):G},s=(X)=>{if("type"in X&&X.type)return oX[X.type];if("address"in X&&X.address)return oX[_X(X.address)];return w0+K0},EX=(X,$)=>{if(X?.script)return o2+X.script.length+(X.script.length>=74?2:1);if($)return FX[$];if("address"in X&&X.address)return FX[_X(X.address)];return FX.P2PKH};var Z2=y(()=>{x2=require("@swapkit/helpers"),h2=require("@swapkit/utxo-signer");((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(uX||={});oX={["P2PKH"]:148,["P2WPKH"]:68},FX={["P2PKH"]:34,["P2WPKH"]:31}});function NX(X){switch(X){case g.Chain.Bitcoin:case g.Chain.BitcoinCash:return 550;case g.Chain.Dash:case g.Chain.Litecoin:return 5500;case g.Chain.Dogecoin:return 1e5;case g.Chain.Zcash:return 546;default:throw new g.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}function l({inputs:X,outputs:$,feeRate:J=1,chain:j=g.Chain.Bitcoin,changeAddress:Q="",sweep:Z=!1}){let Y=NX(j),G=X.filter((O)=>{let P=s(O)*J;return Z?O.value>Math.max(P,Y):P<=O.value});if(Z){let O=Math.ceil(J*qX({inputs:G,outputs:$})),P=G.reduce((K,c)=>K+c.value,0),$X=P-O;if($X<=Y)throw new g.SwapKitError("toolbox_sweep_amount_too_low",{available:P,dustThreshold:Y,fee:O});let JX=$.findIndex((K)=>("address"in K)&&K.address);if(JX===-1)throw new g.SwapKitError("toolbox_utxo_invalid_params",{error:"Sweep requires a recipient output"});return{fee:O,inputs:G,outputs:$.map((K,c)=>c===JX?{...K,value:$X}:K)}}let U=(X[0]&&"address"in X[0]&&X[0].address?_X(X[0].address):"P2PKH")==="P2WPKH"?Math.ceil(pX/4):0,B=cX+U+$.reduce((O,P)=>O+EX(P),0),z=$.reduce((O,P)=>O+P.value,0),_=B*J,N=0,k=[];for(let O of G){let P=s(O),$X=J*P;_+=$X,N+=O.value,k.push(O);let JX=_+z;if(N<JX)continue;let K=N-JX,c=J*EX({address:Q,value:0});if(K>c){let SX=c+_,wX=N-(z+Math.ceil(SX));if(wX>Math.max(s({value:0})*J,NX(j)))return{fee:Math.ceil(SX),inputs:k,outputs:$.concat({address:Q,value:wX})}}return{fee:Math.ceil(_),inputs:k,outputs:$}}return{fee:Math.ceil(J*qX({inputs:X,outputs:$}))}}var g;var c2=y(()=>{Z2();g=require("@swapkit/helpers")});var MX=y(()=>{v2();l2();c2();Z2()});function LX(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function a(X){let $=LX(X);return j2($)&&Q2($)==="mainnet"}var zX;var RX=y(()=>{MX();zX=require("@swapkit/utxo-signer")});function q2({address:X,chain:$}){return Y2.match($).with(W.Chain.BitcoinCash,()=>a(X)).with(W.Chain.Zcash,()=>zX.validateZcashAddress(X)).otherwise(()=>{try{return C.Address(v($)).decode(X),!0}catch{return!1}})}function v(X){return Y2.match(X).with(W.Chain.Bitcoin,()=>C.NETWORKS.bitcoin).with(W.Chain.BitcoinCash,()=>C.NETWORKS.bitcoinCash).with(W.Chain.Dash,()=>C.NETWORKS.dash).with(W.Chain.Dogecoin,()=>C.NETWORKS.dogecoin).with(W.Chain.Litecoin,()=>C.NETWORKS.litecoin).with(W.Chain.Zcash,()=>C.NETWORKS.zcash).exhaustive()}function m0({phrase:X,derivationPath:$,network:J,seed:j}){let Q=j??rX.mnemonicToSeedSync(X),Y=G2.HDKey.fromMasterSeed(Q,J.bip32).derive($);if(!Y.privateKey)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not derive private key from phrase"});return Y.privateKey}function p2(X){return u2.secp256k1.getPublicKey(X,!0)}function yX({publicKey:X,chain:$,network:J}){if($===W.Chain.BitcoinCash){let Z=C.p2pkh(X,J);if(!Z.hash)throw new W.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return C.encodeCashAddr({hash:Z.hash,prefix:C.CashAddrPrefix.MAINNET,type:C.CashAddrType.P2PKH}).replace(/^bitcoincash:/,"")}let Q=!AX.includes($)?C.p2wpkh(X,J):C.p2pkh(X,J);if(!Q.address)throw new W.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive address"});return Q.address}function DX({phrase:X,derivationPath:$,chain:J,wif:j,seed:Q}){let Z=v(J);if(j){let q=C.WIF(Z).decode(j),U=p2(q);return{privateKey:q,publicKey:U}}if(!X)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let Y=$||W.derivationPathToString(W.NetworkDerivationPath[J]),G=m0({derivationPath:Y,network:Z,phrase:X,seed:Q}),L=p2(G);return{privateKey:G,publicKey:L}}function g0(X,$){return C.WIF(v($)).encode(X)}function l0({phrase:X,derivationPath:$,chain:J,seed:j}){let Q=$.split("/");if(Q.length<4)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:`Derivation path must have at least 4 levels (got ${Q.length}): ${$}`});let Z=v(J),Y=j??rX.mnemonicToSeedSync(X),G=G2.HDKey.fromMasterSeed(Y,Z.bip32),L=Q.slice(0,4).join("/");return G.derive(L)}function e({inputs:X,outputs:$,chain:J,tx:j,sender:Q,compiledMemo:Z,enableRBF:Y=!1}){let G=v(J),L=!AX.includes(J),q=Y?C.RBF_SEQUENCE:void 0,U=new Set;for(let B of X){let z=`${B.hash}:${B.index}`;if(U.has(z))throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Duplicate input detected"});U.add(z);let _=typeof B.hash==="string"?t.hex.decode(B.hash):B.hash;if(L&&B.witnessUtxo)j.addInput({index:B.index,sequence:q,txid:_,witnessUtxo:{amount:BigInt(B.witnessUtxo.value),script:B.witnessUtxo.script}});else if(B.txHex)j.addInput({index:B.index,nonWitnessUtxo:t.hex.decode(B.txHex),sequence:q,txid:_,...J===W.Chain.BitcoinCash?{sighashType:C.BCHSigHash.ALL}:{}});else throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Input requires either witnessUtxo or txHex for non-segwit chains"})}for(let B of $){let z="address"in B&&B.address?B.address:Q;if(J===W.Chain.BitcoinCash)z=d(z);if(B.script){if(Z)j.addOutput({amount:0n,script:Z})}else j.addOutputAddress(z,BigInt(B.value),G)}return{inputs:X,tx:j}}async function CX(X){let $=await R(X).getSuggestedTxFee();return{[W.FeeOption.Average]:$,[W.FeeOption.Fast]:W.applyFeeMultiplier($,W.FeeOption.Fast),[W.FeeOption.Fastest]:W.applyFeeMultiplier($,W.FeeOption.Fastest)}}async function d2({assetValue:X,recipient:$,memo:J,sender:j,sweep:Q,fetchTxHex:Z=!1}){let Y=X.chain,G=Z||AX.includes(Y),L=X.getBaseValue("number"),q=Q?void 0:Math.ceil(L+(await CX(Y))[W.FeeOption.Fastest]*5000);return{inputs:await R(Y).getUtxos({address:j,fetchTxHex:G,targetValue:q}),outputs:[{address:$,value:Q?0:L},...J?[{address:"",script:w(J),value:0}]:[]]}}async function r2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q,fetchTxHex:Z=!1,enableRBF:Y=!1,sweep:G}){let L=X.chain,q=J?w(J):null,U=await d2({assetValue:X,fetchTxHex:Z,memo:J,recipient:$,sender:Q,sweep:G}),{inputs:B,outputs:z}=l({...U,chain:L,feeRate:j,sweep:G});if(!(B&&z))throw new W.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new C.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!q,version:1}),{inputs:N,tx:k}=e({chain:L,compiledMemo:q,enableRBF:Y,inputs:B,outputs:z,sender:Q,tx:_});return{inputs:N,tx:k,utxos:U.inputs}}async function n2({assetValue:X,feeOptionKey:$=W.FeeOption.Fast,feeRate:J,memo:j,sender:Q,recipient:Z,sweep:Y}){let G=X.chain,L=await d2({assetValue:X,memo:j,recipient:Z,sender:Q,sweep:Y}),q=J?Math.floor(J):(await CX(G))[$];return l({...L,chain:G,feeRate:q,sweep:Y})}function x0(X){return async function({from:J,memo:j,feeRate:Q,feeOptionKey:Z=W.FeeOption.Fast,recipient:Y=J,recipients:G=1}){let L=Q??(await CX(X))[Z],U=(await R(X).getUtxos({address:J,fetchTxHex:!1})).filter((k)=>k.value>Math.max(NX(X),s(k)*L));if(!U.length)return W.AssetValue.from({chain:X});let B=typeof G==="number"?Math.max(G,1):G.length,z=typeof G==="number"||B===0?Array.from({length:B||1},()=>({address:Y,value:0})):[...G];if(j)z.push({address:J,script:w(j),value:0});let{outputs:_}=l({chain:X,feeRate:L,inputs:U,outputs:z,sweep:!0}),N=_?.[0]?.value??0;return W.AssetValue.from({chain:X,value:BigInt(N)})}}function h0(X){return async function(J){let{fee:j}=await n2(J);return W.AssetValue.from({chain:X,value:W.SwapKitNumber.fromBigInt(BigInt(j),8).getValue("string")})}}function o0({chain:X,phrase:$,derivationPath:J,seed:j}){let Q=v(X),{privateKey:Z,publicKey:Y}=DX({chain:X,derivationPath:J,phrase:$,seed:j}),G=X===W.Chain.BitcoinCash?[C.BCHSigHash.ALL]:[C.SigHash.ALL];return{getAddress:()=>yX({chain:X,network:Q,publicKey:Y}),privateKey:Z,publicKey:Y,signTransaction:(L)=>{return L.sign(Z,G),L}}}function c0(X,$){return async function({memo:j,recipient:Q,feeOptionKey:Z,feeRate:Y,assetValue:G,enableRBF:L=!1,sweep:q}){let U=await $?.getAddress();if(!($&&U))throw new W.SwapKitError("toolbox_utxo_no_signer");if(!Q)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});W.warnOnce({condition:L&&!dX.includes(X),id:`rbf_not_supported_${X}`,warning:`RBF (Replace-by-Fee) is not reliably supported on ${X}. Transaction will be created without RBF signaling.`});let B=L&&dX.includes(X),z=Y||(await CX(X))[Z||W.FeeOption.Fast],{tx:_}=await r2({assetValue:G,enableRBF:B,feeRate:z,memo:j,recipient:Q,sender:U,sweep:q}),N=await $.signTransaction(_);return N.finalize(),R(X).broadcastTx(t.hex.encode(N.extract()))}}function L2(X){return($)=>q2({address:$,chain:X})}function z2(X){let $=v(X);return function(j){if(!j)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Keys must be provided"});return yX({chain:X,network:$,publicKey:j.publicKey})}}function XX({chain:X,...$}){let J="phrase"in $?$.phrase:void 0,j="index"in $?$.index||0:0,Q=J?rX.mnemonicToSeedSync(J):void 0,Z="derivationPath"in $&&$.derivationPath?$.derivationPath:W.updateDerivationPath(W.NetworkDerivationPath[X],{index:j}),Y=W.derivationPathToString(Z),G=J?o0({chain:X,derivationPath:Y,phrase:J,seed:Q}):void 0,L="signer"in $?$.signer:void 0,q=G||L,U=J?DX({chain:X,derivationPath:Y,phrase:J,seed:Q}):void 0;function B(){if(q)return q.getAddress();return Promise.resolve(void 0)}function z(M){if(!J)return;let H=i({accountIndex:M,chain:X,derivationPath:Z});return l0({chain:X,derivationPath:W.derivationPathToString(H),phrase:J,seed:Q})}let _=z();function N(){if(!_)return;return _.publicExtendedKey}function k({accountIndex:M}={}){let H=M===void 0?_:z(M);if(!H)return;let V=i({accountIndex:M,chain:X,derivationPath:Z});return{accountIndex:ZX(V),path:W.derivationPathToString(V),xpub:H.publicExtendedKey}}function O({accountIndex:M,index:H,change:V=!1}){let f=M===void 0?_:z(M);if(!f)return;let I=BX({accountIndex:M,chain:X,change:V,derivationPath:Z,index:H}),m=v(X),h=f.deriveChild(Number(V)).deriveChild(H);if(!h.publicKey)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not derive public key"});let S=yX({chain:X,network:m,publicKey:h.publicKey}),n=t.hex.encode(h.publicKey);return{accountIndex:ZX(I),address:S,change:V,index:H,path:W.derivationPathToString(I),pubkey:n}}async function P(M){if(!dX.includes(X))return{reason:`RBF is not supported on ${X}`,supported:!1};let H=await R(X).getTransactionDetails(M);return{canReplace:H.isRBF&&!H.confirmed,confirmed:H.confirmed,enabled:H.isRBF,fee:H.fee,sequences:H.sequences,supported:!0}}async function $X({txid:M,newFeeRate:H,recipient:V,memo:f}){if(!dX.includes(X))throw new W.SwapKitError("toolbox_utxo_rbf_not_supported",{chain:X});let I=await R(X).getTransactionDetails(M);if(!I.isRBF)throw new W.SwapKitError("toolbox_utxo_tx_not_replaceable",{txid:M});if(I.confirmed)throw new W.SwapKitError("toolbox_utxo_tx_already_confirmed",{blockId:I.blockId,txid:M});let m=I.inputs.reduce((A,p)=>A+p.value,0),S=I.outputs.find((A)=>A.recipient===V)?.value||0;if(S===0)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not determine send amount from original transaction"});let n=await Promise.all(I.inputs.map(async(A)=>{let p=await R(X).getRawTx(A.transaction_hash);return{hash:A.transaction_hash,index:A.index,txHex:p,value:A.value,witnessUtxo:void 0}})),bX=f?w(f):null,KX=qX({feeRate:H,inputs:n.map((A)=>({...A,type:"P2WPKH"})),outputs:[{address:V,value:S}]}),jX=Math.ceil(KX*H);if(jX<=I.fee)throw new W.SwapKitError("toolbox_utxo_rbf_fee_too_low",{newFee:jX,originalFee:I.fee});let WX=jX-I.fee,UX=S-WX;if(UX<=0)throw new W.SwapKitError("toolbox_utxo_rbf_insufficient_change");let QX=new C.Transaction({allowLegacyWitnessUtxo:!0,version:1}),mX=[{address:V,value:UX},...f?[{address:"",script:w(f),value:0}]:[]],gX=m-UX-jX,kX=await B();if(gX>NX(X)&&kX)mX.push({address:kX,value:gX});return e({chain:X,compiledMemo:bX,inputs:n,outputs:mX,sender:kX||V,tx:QX}),{feeDelta:WX,newFee:jX,originalFee:I.fee,tx:QX}}async function JX({txid:M,newFeeRate:H,recipient:V,memo:f}){let{tx:I,originalFee:m,newFee:h}=await $X({memo:f,newFeeRate:H,recipient:V,txid:M}),S=await sX(I);S.finalize();let n=await R(X).broadcastTx(t.hex.encode(S.extract()));return{newFee:h,originalFee:m,txid:n}}function K({accountIndex:M,index:H,change:V=!1}){x("index",H);let f=M===void 0?_:z(M);if(!f)return;return f.deriveChild(Number(V)).deriveChild(H).privateKey||void 0}function c({tx:M,inputDerivations:H}){if(!_)throw new W.SwapKitError("toolbox_utxo_no_signer");let V=X===W.Chain.BitcoinCash?[C.BCHSigHash.ALL]:[C.SigHash.ALL];for(let f=0;f<H.length;f++){let I=H[f];if(!I)continue;let{derivationIndex:m,isChange:h}=I,S=K({change:h,index:m});if(!S)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:`Could not derive private key for input ${f} at index ${m}`});M.signIdx(S,f,V)}return M}async function SX({utxos:M,recipient:H,assetValue:V,memo:f,feeRate:I,feeOptionKey:m,changeAddress:h,sweep:S}){if(S)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Sweep is not supported for transfers from multiple addresses"});if(!_)throw new W.SwapKitError("toolbox_utxo_no_signer");let n=I||(await CX(X))[m||W.FeeOption.Fast],bX=f?w(f):null,KX=[{address:H,value:V.getBaseValue("number")}];if(bX)KX.push({address:"",script:bX,value:0});let jX=M.map(({hash:A,index:p,value:lX,txHex:Q0,witnessUtxo:aX})=>({hash:A,index:p,txHex:Q0,value:lX,witnessUtxo:aX?{script:aX.script,value:aX.value}:void 0})),{inputs:WX,outputs:UX}=l({chain:X,feeRate:n,inputs:jX,outputs:KX});if(!(WX&&UX))throw new W.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:V,sender:"multiple addresses"});let QX=new C.Transaction({allowLegacyWitnessUtxo:!0,version:1}),mX=M[0]?.address,gX=h||await B()||mX||H;e({chain:X,compiledMemo:bX,inputs:WX,outputs:UX,sender:gX,tx:QX});let kX=WX.map((A)=>{let p=M.find((lX)=>lX.hash===A.hash&&lX.index===A.index);return p?{derivationIndex:p.derivationIndex,isChange:p.isChange}:{derivationIndex:0,isChange:!1}});return c({inputDerivations:kX,tx:QX}),QX.finalize(),R(X).broadcastTx(t.hex.encode(QX.extract()))}function wX({address:M,gapLimit:H=20}){if(!_)return;for(let V=0;V<H;V++){let f=O({change:!1,index:V}),I=O({change:!0,index:V}),m=f?.address===M?!1:I?.address===M;if(f?.address===M||I?.address===M)return{change:m,index:V}}return}function sX(M){if(!q)throw new W.SwapKitError("toolbox_utxo_no_signer");return q.signTransaction(M)}async function j0(M){let H=await sX(M);return H.finalize(),await R(X).broadcastTx(t.hex.encode(H.extract()))}return{accumulative:l,broadcastTx:(M)=>R(X).broadcastTx(M),bumpFee:JX,calculateTxSize:qX,createKeysForPath:(M)=>DX({...M,chain:X}),createReplacementTransaction:$X,createTransaction:r2,deriveAddressAtIndex:O,derivePrivateKeyAtIndex:K,estimateMaxSendableAmount:x0(X),estimateTransactionFee:h0(X),getAddress:B,getAddressFromKeys:z2(X),getBalance:P2(X),getExtendedPublicKey:N,getExtendedPublicKeyInfo:k,getFeeRates:()=>CX(X),getInputsOutputsFee:n2,getNetworkForChain:()=>v(X),getPrivateKeyFromMnemonic:(M)=>g0(DX({...M,chain:X}).privateKey,X),isRBFEnabled:P,keys:U,resolveDerivationIndex:wX,signAndBroadcastTransaction:j0,signTransaction:sX,signTransactionWithMultipleKeys:c,transfer:c0(X,q),transferFromMultipleAddresses:SX,validateAddress:L2(X)}}var u2,t,G2,rX,W,C,Y2,AX,dX;var HX=y(()=>{eX();fX();MX();RX();u2=require("@noble/curves/secp256k1.js"),t=require("@scure/base"),G2=require("@scure/bip32"),rX=require("@scure/bip39"),W=require("@swapkit/helpers"),C=require("@swapkit/utxo-signer"),Y2=require("ts-pattern"),AX=[W.Chain.Dash,W.Chain.Dogecoin,W.Chain.Zcash,W.Chain.BitcoinCash],dX=[W.Chain.Bitcoin]});function vX(X){return LX(PX(X))}function p0(X){let $=v(o);function J(Q){return Q.sign(X.privateKey,[E.BCHSigHash.ALL]),Q}function j(){let Q=E.p2pkh(X.publicKey,$);if(!Q.hash)throw new F.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});let Z=E.encodeCashAddr({hash:Q.hash,prefix:E.CashAddrPrefix.MAINNET,type:E.CashAddrType.P2PKH});return Promise.resolve(Z.replace(/^bitcoincash:/,""))}return{getAddress:j,signTransaction:J}}function U2(X){let $="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,j=F.derivationPathToString("derivationPath"in X&&X.derivationPath?X.derivationPath:F.updateDerivationPath(F.NetworkDerivationPath[o],{index:J})),Q=$?DX({chain:o,derivationPath:j,phrase:$}):void 0,Z=Q?p0(Q):("signer"in X)?X.signer:void 0;function Y(){return Promise.resolve(Z?.getAddress())}let{getBalance:G,getFeeRates:L,broadcastTx:q,...U}=XX({chain:o});function B(N,k=!0){return G(LX(PX(N)))}function z(N){if(!Z)throw new F.SwapKitError("toolbox_utxo_no_signer");return Z.signTransaction(N)}async function _(N){let k=await z(N);return k.finalize(),await q(W2.hex.encode(k.extract()))}return{...U,broadcastTx:q,buildTx:d0,createTransaction:i2,getAddress:Y,getAddressFromKeys:r0,getBalance:B,getFeeRates:L,signAndBroadcastTransaction:_,signTransaction:z,stripPrefix:LX,stripToCashAddress:vX,transfer:u0({broadcastTx:q,getFeeRates:L,signer:Z}),validateAddress:a}}async function i2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q,sweep:Z}){if(!a($))throw new F.SwapKitError("toolbox_utxo_invalid_address",{address:$});let Y=Math.ceil(X.getBaseValue("number")+j*7500),G=await R(o).getUtxos({address:vX(Q),fetchTxHex:!0,targetValue:Z?void 0:Y}),L=J?w(J):null,q=[],U=d($);if(q.push({address:U,value:Z?0:X.getBaseValue("number")}),L)q.push({script:L,value:0});let{inputs:B,outputs:z}=l({chain:o,feeRate:j,inputs:G,outputs:q,sweep:Z});if(!(B&&z))throw new F.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new E.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!L,version:1}),N=d(Q),{inputs:k,tx:O}=e({chain:o,compiledMemo:L,inputs:B,outputs:z.map((P)=>("address"in P)&&P.address?{...P,address:d(P.address)}:P),sender:N,tx:_});return{inputs:k,tx:O,utxos:B}}function u0({broadcastTx:X,getFeeRates:$,signer:J}){return async function({recipient:Q,assetValue:Z,feeOptionKey:Y=F.FeeOption.Fast,sweep:G,...L}){let q=await J?.getAddress();if(!(J&&q))throw new F.SwapKitError("toolbox_utxo_no_signer");if(!Q)throw new F.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let U=L.feeRate||(await $())[Y],{tx:B}=await i2({...L,assetValue:Z,feeRate:U,recipient:Q,sender:q,sweep:G}),z=await J.signTransaction(B);return z.finalize(),X(W2.hex.encode(z.extract()))}}async function d0({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q}){let Z=PX($);if(!a(Z))throw new F.SwapKitError("toolbox_utxo_invalid_address",{address:Z});let Y=Math.ceil(X.getBaseValue("number")+j*7500),G=await R(o).getUtxos({address:vX(Q),fetchTxHex:!0,targetValue:Y}),L=Number(j.toFixed(0)),q=J?w(J):null,U=[];if(U.push({address:d($),value:X.getBaseValue("number")}),q)U.push({script:q,value:0});let{inputs:B,outputs:z}=l({chain:o,feeRate:L,inputs:G,outputs:U});if(!(B&&z))throw new F.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new E.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!q,version:1}),{inputs:N,tx:k}=e({chain:o,compiledMemo:q,inputs:B,outputs:z,sender:d(Q),tx:_});return{inputs:N,tx:k,utxos:G}}function r0(X){let $=E.NETWORKS.bitcoinCash,J=E.p2pkh(X.publicKey,$);if(!J.hash)throw new F.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return E.encodeCashAddr({hash:J.hash,prefix:E.CashAddrPrefix.MAINNET,type:E.CashAddrType.P2PKH}).replace(/^bitcoincash:/,"")}var W2,F,E,o;var nX=y(()=>{MX();HX();RX();W2=require("@scure/base"),F=require("@swapkit/helpers"),E=require("@swapkit/utxo-signer"),o=F.Chain.BitcoinCash});function N2(){let{isStagenet:X}=T.SKConfig.get("envs");return X?b.ZCASH_TEST_NETWORK:b.ZCASH_NETWORK}function i0(X){return n0.encode(X)}function s0({phrase:X,derivationPath:$}){let J=_2.mnemonicToSeedSync(X),Q=B2.HDKey.fromMasterSeed(J).derive($);if(!Q.privateKey||!Q.publicKey)throw new T.SwapKitError("toolbox_utxo_invalid_params");let{privateKey:Z,publicKey:Y}=Q,G=b.utils.hash160(Y),{isStagenet:L}=T.SKConfig.get("envs"),q=L?new Uint8Array([29,37]):new Uint8Array([28,184]),U=new Uint8Array(q.length+G.length);U.set(q,0),U.set(G,q.length);let B=i0(U);return{getAddress:()=>Promise.resolve(B),signTransaction:(z)=>{if(z instanceof b.ZcashPSBT){let _=z.toPCZT();return _.signAllInputs(Z,Y,b.ZcashSigHash.ALL),_.finalizeAllInputs(),Promise.resolve(_.extract())}if(z instanceof b.PCZT)return z.signAllInputs(Z,Y,b.ZcashSigHash.ALL),z.finalizeAllInputs(),Promise.resolve(z.extract());return z.signAllInputs(Z,Y,b.ZcashSigHash.ALL),Promise.resolve(z)}}}function a0({inputs:X,outputs:$,tx:J,sender:j,compiledMemo:Q}){let Z=N2();for(let Y of X){let G=b.Address(Z).decode(j),L=b.OutScript.encode(G);J.addInput({index:Y.index,script:L,sequence:4294967295,txid:iX.hex.decode(Y.hash),value:BigInt(Y.value)})}for(let Y of $){let G="address"in Y&&Y.address?Y.address:j,L=Y.script;if(L&&!Q)continue;if(L&&Q)J.addOutput({amount:0n,script:Q});else J.addOutputAddress(G,BigInt(Y.value),Z)}return{inputs:X,tx:J}}async function s2(X){let{assetValue:$,recipient:J,memo:j,feeRate:Q,sender:Z,fetchTxHex:Y,sweep:G}=X,L=N2();if(!b.isTransparentZcashAddress(Z,L))throw new T.SwapKitError("toolbox_utxo_invalid_address",{address:Z});if(!b.isTransparentZcashAddress(J,L))throw new T.SwapKitError("toolbox_utxo_invalid_address",{address:J,error:"Zcash transaction creation currently supports transparent addresses only"});let q=j?w(j):null,U=await R(T.Chain.Zcash).getUtxos({address:Z,fetchTxHex:Y!==!1}),B=[{address:J,value:G?0:Number($.getBaseValue("string"))},...q?[{script:q,value:0}]:[]],{inputs:z,outputs:_}=l({chain:T.Chain.Zcash,changeAddress:Z,feeRate:Q,inputs:U,outputs:B,sweep:G});if(!(z&&_))throw new T.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:$,sender:Z});let N=b.createZcashTransaction({consensusBranchId:b.ZcashConsensusBranchId.NU6_2,expiryHeight:0,lockTime:0,version:4,versionGroupId:b.ZcashVersionGroupId.SAPLING}),{tx:k,inputs:O}=a0({compiledMemo:q,inputs:z,outputs:_,sender:Z,tx:N});return{inputs:O,outputs:_,tx:k}}function M2(X){let $=OX.match(X).with({signer:OX.P.not(OX.P.nullish)},({signer:L})=>L).with({phrase:OX.P.string},({phrase:L,derivationPath:q,index:U=0})=>{let B=q||T.NetworkDerivationPath[T.Chain.Zcash]||[44,133,0,0,0],z=T.updateDerivationPath(B,{index:U}),_=T.derivationPathToString(z);return s0({derivationPath:_,phrase:L})}).otherwise(()=>{return}),J=XX({chain:T.Chain.Zcash,signer:$});async function j(L){if(!$)throw new T.SwapKitError("toolbox_utxo_no_signer");return await $.signTransaction(L)}async function Q(L){let q=await j(L);return J.broadcastTx(q.toHex())}async function Z({recipient:L,assetValue:q,feeOptionKey:U=T.FeeOption.Fast,sweep:B,...z}){let _=await $?.getAddress();if(!($&&_))throw new T.SwapKitError("toolbox_utxo_no_signer");let N=z.feeRate||(await J.getFeeRates())[U],{tx:k}=await s2({...z,assetValue:q,feeRate:N,recipient:L,sender:_,sweep:B}),P=(await $.signTransaction(k)).toHex();return J.broadcastTx(P)}function Y({phrase:L,derivationPath:q="m/44'/133'/0'/0/0"}){let U=_2.mnemonicToSeedSync(L),z=B2.HDKey.fromMasterSeed(U).derive(q);if(!z.privateKey||!z.publicKey)throw new T.SwapKitError("toolbox_utxo_invalid_params");return{privateKey:z.privateKey,publicKey:z.publicKey}}function G({phrase:L,derivationPath:q="m/44'/133'/0'/0/0"}){let U=Y({derivationPath:q,phrase:L}),B=N2();return b.WIF(B).encode(U.privateKey)}return{...J,createKeysForPath:Y,createTransaction:s2,getPrivateKeyFromMnemonic:G,signAndBroadcastTransaction:Q,signTransaction:j,transfer:Z,validateAddress:zX.validateZcashAddress}}var iX,B2,_2,T,b,OX,n0;var D2=y(()=>{MX();HX();RX();iX=require("@scure/base"),B2=require("@scure/bip32"),_2=require("@scure/bip39"),T=require("@swapkit/helpers"),b=require("@swapkit/utxo-signer"),OX=require("ts-pattern");n0=iX.createBase58check(b.utils.sha256)});function X0({xpub:X,chain:$,count:J,startIndex:j=0,accountIndex:Q}){if(x("count",J),J<1)throw RangeError("count must be at least 1");x("startIndex",j);let Z=v($),Y=t2.HDKey.fromExtendedKey(X,Z.bip32),G=i({accountIndex:Q,chain:$}),L=ZX(G),q=[];for(let U of[!1,!0]){let B=Y.deriveChild(Number(U));for(let z=0;z<J;z++){let _=j+z,N=B.deriveChild(_);if(!N.publicKey)continue;let k=BX({accountIndex:Q,chain:$,change:U,index:_});q.push({accountIndex:L,address:yX({chain:$,network:Z,publicKey:N.publicKey}),change:U,index:_,path:e2.derivationPathToString(k),pubkey:a2.hex.encode(N.publicKey)})}}return q}var a2,t2,e2;var $0=y(()=>{fX();HX();a2=require("@scure/base"),t2=require("@scure/bip32"),e2=require("@swapkit/helpers")});function t0(X,$){switch(X){case r.Chain.BitcoinCash:return U2($||{});case r.Chain.Zcash:return M2($);case r.Chain.Bitcoin:case r.Chain.Dogecoin:case r.Chain.Litecoin:case r.Chain.Dash:return XX({chain:X,...$});default:throw new r.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}var r;var J0=y(()=>{nX();HX();D2();fX();$0();nX();RX();r=require("@swapkit/helpers")});var e0={};B0(e0,{validateZcashAddress:()=>zX.validateZcashAddress,validateUtxoAddress:()=>q2,validateBchAddress:()=>a,toLegacyAddress:()=>d,toCashAddress:()=>PX,stripToCashAddress:()=>vX,stripPrefix:()=>LX,nonSegwitChains:()=>AX,isValidAddress:()=>j2,getUtxoToolbox:()=>t0,getUtxoNetwork:()=>I0,getUtxoApi:()=>R,getUTXOAddressValidator:()=>L2,getUTXOAddressPath:()=>BX,getUTXOAccountPath:()=>i,getUTXOAccountIndexFromPath:()=>ZX,getScriptTypeForAddress:()=>_X,getOutputSize:()=>EX,getNetworkForChain:()=>v,getInputSize:()=>s,getDustThreshold:()=>NX,detectAddressNetwork:()=>Q2,deriveAddressesFromXpub:()=>X0,createZcashToolbox:()=>M2,createUTXOToolbox:()=>XX,createHDWalletHelpers:()=>f2,createCustomUtxoApi:()=>f0,createBCHToolbox:()=>U2,compileMemo:()=>w,calculateTxSize:()=>qX,assertDerivationIndex:()=>x,addressFromKeysGetter:()=>z2,addInputsAndOutputs:()=>e,accumulative:()=>l,UtxoNetwork:()=>J2,UTXOScriptType:()=>uX,TX_OVERHEAD:()=>cX,SEGWIT_MARKER_FLAG_WEIGHT:()=>pX,OutputSizes:()=>FX,OP_RETURN_OVERHEAD:()=>o2,MIN_TX_FEE:()=>S0,InputSizes:()=>oX});module.exports=z0(e0);var X1=y(()=>{HX();fX();MX();J0();nX();D2()});X1();
|
package/dist/src/utxo/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{da as tX,ea as U2}from"../../chunk-jdh5asaw.js";import"../../chunk-fjyc6m34.js";import{NetworkDerivationPath as p2}from"@swapkit/helpers";function y(X,$){if(!Number.isInteger($)||$<0)throw RangeError(`${X} must be a non-negative integer, got: ${$}`)}function o({accountIndex:X,chain:$,derivationPath:J}){if(X!==void 0)y("accountIndex",X);let j=[...J?.slice(0,3)??p2[$].slice(0,3)];if(X!==void 0)j[2]=X;return j}function UX({accountIndex:X,change:$=!1,chain:J,derivationPath:j,index:Q}){return y("index",Q),[...o({accountIndex:X,chain:J,derivationPath:j}),Number($),Q]}function XX(X){return X[2]??0}function u2({deriveAddress:X,getBalance:$,getUtxos:J}){async function j(q){let{accountIndex:G,count:Y,startIndex:W=0,change:z=!1}=q;if(y("count",Y),Y<1)throw RangeError("count must be at least 1");y("startIndex",W);let U=[];for(let _=0;_<Y;_++){let B=await X({accountIndex:G,change:z,index:W+_});if(B)U.push(B)}return U}async function Q(q){let{gapLimit:G=20,change:Y=!1}=q??{},W=[],z=0,U=0;while(z<G){let _=await X({change:Y,index:U});if(!_)break;if((await $(_.address)).some((V)=>V.getValue("number")>0))W.push(_),z=0;else z++;U++}return W}async function Z(q=20){let[G,Y]=await Promise.all([Q({change:!1,gapLimit:q}),Q({change:!0,gapLimit:q})]),W=[...G,...Y],z=await Promise.all(W.map(async(_)=>{let D=(await $(_.address)).reduce((V,e)=>V+e.getValue("number"),0);return{..._,balance:D}})),U=z.reduce((_,B)=>_+B.balance,0);return{addresses:z,total:U}}async function L(q=20){let[G,Y]=await Promise.all([Q({change:!1,gapLimit:q}),Q({change:!0,gapLimit:q})]),W=[...G,...Y];return(await Promise.all(W.map(async(U)=>{return(await J(U.address)).map((B)=>({...B,address:U.address,derivationIndex:U.index,isChange:U.change}))}))).flat()}return{deriveAddresses:j,getAggregatedBalance:Z,getAggregatedUtxos:L,scanForAddresses:Q}}import{Chain as F,getRPCUrl as o2,RequestClient as bX,SKConfig as c2,SwapKitError as w,warnOnce as d2}from"@swapkit/helpers";import{NETWORKS as $X}from"@swapkit/utxo-signer";async function r2({chain:X,txHash:$}){let J=`${WX(X)}/push/transaction`,j=JSON.stringify({data:$});try{let Q=await bX.post(J,{body:j,headers:{"Content-Type":"application/json"}});if(Q.context.code!==200)throw new w("toolbox_utxo_broadcast_failed",{error:Q.context.error||"Transaction broadcast failed"});return Q.data?.transaction_hash||$}catch(Q){let Z=await o2(X);if(Z){let L=JSON.stringify({id:tX(),jsonrpc:"2.0",method:"sendrawtransaction",params:[$]}),q=await bX.post(Z,{body:L,headers:{"Content-Type":"application/json"}});if(q.error)throw new w("toolbox_utxo_broadcast_failed",{error:q.error?.message});if(q.result.includes('"code":-26'))throw new w("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return q.result}throw Q}}function WX(X){return`https://api.blockchair.com/${n2(X)}`}function sX(X){switch(X){case F.Bitcoin:return 5;case F.Dogecoin:return 1e4;case F.Litecoin:return 1;case F.Zcash:return 1;default:return 2}}function n2(X){switch(X){case F.BitcoinCash:return"bitcoin-cash";case F.Litecoin:return"litecoin";case F.Dash:return"dash";case F.Dogecoin:return"dogecoin";case F.Zcash:return"zcash";case F.Polkadot:return"polkadot";default:return"bitcoin"}}async function i2(X){try{let{feePerKb:$}=await bX.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=$/1000;return Math.max(J,sX(X))}catch{return sX(X)}}async function IX(X,$){let J=await bX.get(`${X}${$?`${X.includes("?")?"&":"?"}key=${$}`:""}`);if(!J||J.context.code!==200)throw new w("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return J.data}async function eX({address:X,chain:$,apiKey:J}){if(!X)throw new w("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await IX(`${WX($)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch{return{address:{balance:0,transaction_count:0},utxo:[]}}}async function s2({address:X,chain:$,apiKey:J}){return(await eX({address:X,apiKey:J,chain:$}))?.address.balance||0}async function X2({chain:X,apiKey:$,txHash:J}){if(!J)throw new w("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await IX(`${WX(X)}/raw/transaction/${J}`,$))?.[J]?.raw_transaction||""}catch(j){let Q=j instanceof Error?j.message:String(j);return console.error(`Failed to fetch raw transaction: ${Q}`),""}}var a2=4294967294;async function t2({chain:X,apiKey:$,txHash:J}){if(!J)throw new w("toolbox_utxo_invalid_params",{error:"TxHash is required"});let Q=(await IX(`${WX(X)}/dashboards/transaction/${J}`,$))?.[J];if(!Q)throw new w("toolbox_utxo_tx_not_found",{txHash:J});let{transaction:Z,inputs:L,outputs:q}=Q,G=L.map((W)=>W.spending_sequence),Y=Z.is_rbf===!0||G.some((W)=>W<a2);return{blockId:Z.block_id,confirmed:Z.block_id!==-1,fee:Z.fee,inputs:L,isRBF:Y,outputs:q,sequences:G,size:Z.size,txid:Z.hash,weight:Z.weight}}async function e2({chain:X,address:$,apiKey:J,offset:j=0,limit:Q=30}){return(await IX(`${WX(X)}/outputs?q=recipient(${$}),is_spent(false)&s=value(desc)&fields=is_spent,transaction_hash,index,value,script_hex,block_id,spending_signature_hex&limit=${Q}&offset=${j}`,J)).map(({is_spent:G,script_hex:Y,block_id:W,transaction_hash:z,index:U,value:_,spending_signature_hex:B})=>({hash:z,index:U,is_confirmed:W!==-1,is_spent:G,script_hex:Y,txHex:B,value:_}))}function X0(X){return X.reduce(($,J)=>$+J.value,0)}function aX(X,$){let J=[...X].sort((j,Q)=>Q.value-j.value);if($){let j=[],Q=0;for(let Z of J)if(j.push(Z),Q+=Z.value,Q>=$)break;return j}return J}async function $2({chain:X,address:$,apiKey:J,targetValue:j,accumulativeValue:Q=0,offset:Z=0,limit:L=30}){if(!$)throw new w("toolbox_utxo_invalid_params",{error:"Address is required"});try{let q=await e2({address:$,apiKey:J,chain:X,limit:L,offset:Z,targetValue:j}),Y=q.length<L,W=q.filter(({is_spent:V})=>!V),z=X0(W),U=Q+z,_=j&&U>=j;if(Y||_)return aX(W,j);let B=await $2({accumulativeValue:U,address:$,apiKey:J,chain:X,limit:L,offset:Z+L,targetValue:j}),D=[...W,...B];return aX(D,j)}catch(q){let G=q instanceof Error?q.message:String(q);return console.error(`Failed to fetch unspent UTXOs: ${G}`),[]}}async function $0({address:X,chain:$,apiKey:J,fetchTxHex:j=!0,targetValue:Q}){let Z=await $2({address:X,apiKey:J,chain:$,targetValue:Q}),L=[];for(let{hash:q,index:G,script_hex:Y,value:W}of Z){let z;if(j)z=await X2({apiKey:J,chain:$,txHash:q});L.push({address:X,hash:q,index:G,txHex:z,value:W,witnessUtxo:{script:Buffer.from(Y,"hex"),value:W}})}return L}function I(X){let $=c2.get("apiKeys").blockchair||"";return d2({condition:!$,id:"no_blockchair_api_key_warning",warning:"No Blockchair API key found. Functionality will be limited."}),{broadcastTx:(J)=>r2({chain:X,txHash:J}),getAddressData:(J)=>eX({address:J,apiKey:$,chain:X}),getBalance:(J)=>s2({address:J,apiKey:$,chain:X}),getRawTx:(J)=>X2({apiKey:$,chain:X,txHash:J}),getSuggestedTxFee:()=>i2(X),getTransactionDetails:(J)=>t2({apiKey:$,chain:X,txHash:J}),getUtxos:(J)=>$0({...J,apiKey:$,chain:X})}}function f1(X){return X}function F1(){return function($){switch($){case F.Bitcoin:return $X.bitcoin;case F.BitcoinCash:return $X.bitcoinCash;case F.Dash:return $X.dash;case F.Litecoin:return $X.litecoin;case F.Dogecoin:return $X.dogecoin;case F.Zcash:return $X.zcash;default:throw new w("toolbox_utxo_not_supported",{chain:$})}}}import{sha256 as q0}from"@noble/hashes/sha2.js";import{createBase58check as L0}from"@scure/base";import{SwapKitError as j2}from"@swapkit/helpers";import{CashAddrType as fX,decodeCashAddr as J0,encodeCashAddr as j0}from"@swapkit/utxo-signer";var Q0={P2PKH:fX.P2PKH,P2SH:fX.P2SH},Z0={[fX.P2PKH]:"P2PKH",[fX.P2SH]:"P2SH"};function G0(X,$,J){return j0({hash:J,prefix:X,type:Q0[$]})}function Y0(X){let $=J0(X),J=Z0[$.type];if(!J)throw Error(`Unknown CashAddr type: ${$.type}`);return{hash:$.hash,prefix:$.prefix,type:J}}var lX={decode:Y0,encode:G0};var Q2=L0(q0);var Z2;((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})(Z2||={});var c={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}};function G2(X){try{return PX(X),!0}catch{return!1}}function Y2(X){return PX(X)?.network}function u(X){let $=PX(X);if($?.format==="legacy")return X;return W0($)}function FX(X){let $=PX(X);return _0($)}function PX(X){try{let $=z0(X);if($)return $}catch{}try{let $=U0(X);if($)return $}catch{}throw new j2("toolbox_utxo_invalid_address",{address:X})}function z0(X){try{let $=Q2.decode(X);if($.length!==21)throw new j2("toolbox_utxo_invalid_address",{address:X});let J=$[0],j=Array.prototype.slice.call($,1);switch(J){case c.legacy.mainnet.p2pkh:return{format:"legacy",hash:j,network:"mainnet",type:"p2pkh"};case c.legacy.mainnet.p2sh:return{format:"legacy",hash:j,network:"mainnet",type:"p2sh"};case c.legacy.testnet.p2pkh:return{format:"legacy",hash:j,network:"testnet",type:"p2pkh"};case c.legacy.testnet.p2sh:return{format:"legacy",hash:j,network:"testnet",type:"p2sh"};case c.bitpay.mainnet.p2pkh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2pkh"};case c.bitpay.mainnet.p2sh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2sh"};default:return}}catch{return}}function U0(X){if(X.indexOf(":")!==-1)try{return J2(X)}catch{}else{let $=["bitcoincash","bchtest","bchreg"];for(let J of $)try{return J2(`${J}:${X}`)}catch{}}return}function J2(X){try{let{hash:$,prefix:J,type:j}=lX.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call($,0),network:J==="bitcoincash"?"mainnet":"testnet",type:j==="P2PKH"?"p2pkh":"p2sh"}}catch{return}}function W0(X){let $=c.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=$,J.set(X.hash,1),Q2.encode(J)}function _0(X){let $=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",j=new Uint8Array(X.hash);return lX.encode($,J,j)}import{Chain as r,SwapKitError as H0}from"@swapkit/helpers";import{SwapKitError as B0}from"@swapkit/helpers";import{Script as N0}from"@swapkit/utxo-signer";var m1=1000,hX=10,pX=2,M0=10,D0=41,C0=107;function R(X){let $=new Uint8Array(Buffer.from(X,"utf8"));return N0.encode(["RETURN",$])}var uX;((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(uX||={});var xX={["P2PKH"]:148,["P2WPKH"]:68},TX={["P2PKH"]:34,["P2WPKH"]:31},_X=(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 B0("toolbox_utxo_invalid_address",{address:X})},JX=({inputs:X,outputs:$,feeRate:J})=>{let j=X[0]&&"address"in X[0]&&X[0].address?_X(X[0].address):"P2PKH",Z=(J?X.filter((Y)=>Y.value>=xX["type"in Y&&Y.type?Y.type:"P2PKH"]*Math.ceil(J)):X).reduce((Y,W)=>Y+d(W),0),L=$?.reduce((Y,W)=>Y+EX(W),0)||TX[j],q=hX+Z+L;return j==="P2WPKH"?Math.ceil(q+pX/4):q},d=(X)=>{if("type"in X&&X.type)return xX[X.type];if("address"in X&&X.address)return xX[_X(X.address)];return D0+C0},EX=(X,$)=>{if(X?.script)return M0+X.script.length+(X.script.length>=74?2:1);if($)return TX[$];if("address"in X&&X.address)return TX[_X(X.address)];return TX.P2PKH};function RX(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 H0("toolbox_utxo_not_supported",{chain:X})}}function S({inputs:X,outputs:$,feeRate:J=1,chain:j=r.Bitcoin,changeAddress:Q=""}){let Z=X[0]&&"address"in X[0]&&X[0].address?_X(X[0].address):"P2PKH",L=X.filter((B)=>d(B)*J<=B.value),G=Z==="P2WPKH"?Math.ceil(pX/4):0,Y=hX+G+$.reduce((B,D)=>B+EX(D),0),W=$.reduce((B,D)=>B+D.value,0),z=Y*J,U=0,_=[];for(let B of L){let D=d(B),V=J*D;z+=V,U+=B.value,_.push(B);let e=z+W;if(U<e)continue;let DX=U-e,CX=J*EX({address:Q,value:0});if(DX>CX){let qX=CX+z,LX=U-(W+Math.ceil(qX));if(LX>Math.max(d({value:0})*J,RX(j)))return{fee:Math.ceil(qX),inputs:_,outputs:$.concat({address:Q,value:LX})}}return{fee:Math.ceil(z),inputs:_,outputs:$}}return{fee:Math.ceil(J*JX({inputs:X,outputs:$}))}}import{Chain as YX,SwapKitError as H1}from"@swapkit/helpers";import{hex as b2}from"@scure/base";import{Chain as m0,derivationPathToString as g0,FeeOption as l0,NetworkDerivationPath as x0,SwapKitError as l,updateDerivationPath as h0}from"@swapkit/helpers";import{BCHSigHash as p0,CashAddrPrefix as I2,CashAddrType as f2,encodeCashAddr as F2,NETWORKS as u0,p2pkh as P2,Transaction as T2}from"@swapkit/utxo-signer";import{secp256k1 as O0}from"@noble/curves/secp256k1.js";import{hex as i}from"@scure/base";import{HDKey as W2}from"@scure/bip32";import{mnemonicToSeedSync as cX}from"@scure/bip39";import{AssetValue as AX,applyFeeMultiplier as q2,Chain as b,derivationPathToString as NX,FeeOption as K,NetworkDerivationPath as _2,SwapKitError as k,SwapKitNumber as k0,updateDerivationPath as V0,warnOnce as b0}from"@swapkit/helpers";import{Address as I0,BCHSigHash as dX,CashAddrPrefix as f0,CashAddrType as F0,encodeCashAddr as P0,NETWORKS as QX,p2pkh as L2,p2wpkh as T0,RBF_SEQUENCE as E0,SigHash as B2,Transaction as oX,WIF as N2}from"@swapkit/utxo-signer";import{match as M2}from"ts-pattern";import{validateZcashAddress as BX}from"@swapkit/utxo-signer";function jX(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function n(X){let $=jX(X);return G2($)&&Y2($)==="mainnet"}var yX=[b.Dash,b.Dogecoin,b.Zcash,b.BitcoinCash],vX=[b.Bitcoin];function D2({address:X,chain:$}){return M2($).with(b.BitcoinCash,()=>n(X)).with(b.Zcash,()=>BX(X)).otherwise(()=>{try{return I0(P($)).decode(X),!0}catch{return!1}})}function P(X){return M2(X).with(b.Bitcoin,()=>QX.bitcoin).with(b.BitcoinCash,()=>QX.bitcoinCash).with(b.Dash,()=>QX.dash).with(b.Dogecoin,()=>QX.dogecoin).with(b.Litecoin,()=>QX.litecoin).with(b.Zcash,()=>QX.zcash).exhaustive()}function R0({phrase:X,derivationPath:$,network:J,seed:j}){let Q=j??cX(X),L=W2.fromMasterSeed(Q,J.bip32).derive($);if(!L.privateKey)throw new k("toolbox_utxo_invalid_params",{error:"Could not derive private key from phrase"});return L.privateKey}function z2(X){return O0.getPublicKey(X,!0)}function MX({publicKey:X,chain:$,network:J}){if($===b.BitcoinCash){let Z=L2(X,J);if(!Z.hash)throw new k("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return P0({hash:Z.hash,prefix:f0.MAINNET,type:F0.P2PKH}).replace(/^bitcoincash:/,"")}let Q=!yX.includes($)?T0(X,J):L2(X,J);if(!Q.address)throw new k("toolbox_utxo_invalid_address",{error:"Could not derive address"});return Q.address}function ZX({phrase:X,derivationPath:$,chain:J,wif:j,seed:Q}){let Z=P(J);if(j){let Y=N2(Z).decode(j),W=z2(Y);return{privateKey:Y,publicKey:W}}if(!X)throw new k("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let L=$||NX(_2[J]),q=R0({derivationPath:L,network:Z,phrase:X,seed:Q}),G=z2(q);return{privateKey:q,publicKey:G}}function A0(X,$){return N2(P($)).encode(X)}function v0({phrase:X,derivationPath:$,chain:J,seed:j}){let Q=$.split("/");if(Q.length<4)throw new k("toolbox_utxo_invalid_params",{error:`Derivation path must have at least 4 levels (got ${Q.length}): ${$}`});let Z=P(J),L=j??cX(X),q=W2.fromMasterSeed(L,Z.bip32),G=Q.slice(0,4).join("/");return q.derive(G)}function s({inputs:X,outputs:$,chain:J,tx:j,sender:Q,compiledMemo:Z,enableRBF:L=!1}){let q=P(J),G=!yX.includes(J),Y=L?E0:void 0,W=new Set;for(let z of X){let U=`${z.hash}:${z.index}`;if(W.has(U))throw new k("toolbox_utxo_invalid_params",{error:"Duplicate input detected"});W.add(U);let _=typeof z.hash==="string"?i.decode(z.hash):z.hash;if(G&&z.witnessUtxo)j.addInput({index:z.index,sequence:Y,txid:_,witnessUtxo:{amount:BigInt(z.witnessUtxo.value),script:z.witnessUtxo.script}});else if(z.txHex)j.addInput({index:z.index,nonWitnessUtxo:i.decode(z.txHex),sequence:Y,txid:_,...J===b.BitcoinCash?{sighashType:dX.ALL}:{}});else throw new k("toolbox_utxo_invalid_params",{error:"Input requires either witnessUtxo or txHex for non-segwit chains"})}for(let z of $){let U="address"in z&&z.address?z.address:Q;if(J===b.BitcoinCash)U=u(U);if(z.script){if(Z)j.addOutput({amount:0n,script:Z})}else j.addOutputAddress(U,BigInt(z.value),q)}return{inputs:X,tx:j}}async function GX(X){let $=await I(X).getSuggestedTxFee();return{[K.Average]:$,[K.Fast]:q2($,K.Fast),[K.Fastest]:q2($,K.Fastest)}}async function C2({assetValue:X,recipient:$,memo:J,sender:j,fetchTxHex:Q=!1}){let Z=X.chain,L=(await GX(Z))[K.Fastest],q=Q||yX.includes(Z),G=X.getBaseValue("number"),Y=Math.ceil(G+L*5000);return{inputs:await I(Z).getUtxos({address:j,fetchTxHex:q,targetValue:Y}),outputs:[{address:$,value:G},...J?[{address:"",script:R(J),value:0}]:[]]}}async function H2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q,fetchTxHex:Z=!1,enableRBF:L=!1}){let q=X.chain,G=J?R(J):null,Y=await C2({assetValue:X,fetchTxHex:Z,memo:J,recipient:$,sender:Q}),{inputs:W,outputs:z}=S({...Y,chain:q,feeRate:j});if(!(W&&z))throw new k("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let U=new oX({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!G,version:1}),{inputs:_,tx:B}=s({chain:q,compiledMemo:G,enableRBF:L,inputs:W,outputs:z,sender:Q,tx:U});return{inputs:_,tx:B,utxos:Y.inputs}}async function O2({assetValue:X,feeOptionKey:$=K.Fast,feeRate:J,memo:j,sender:Q,recipient:Z}){let L=X.chain,q=await C2({assetValue:X,memo:j,recipient:Z,sender:Q}),G=J?Math.floor(J):(await GX(L))[$];return S({...q,chain:L,feeRate:G})}function y0(X){return async function({from:J,memo:j,feeRate:Q,feeOptionKey:Z=K.Fast,recipients:L=1}){let q=await I(X).getAddressData(J),G=Q?Math.ceil(Q):(await GX(X))[Z],Y=q?.utxo.map((D)=>({...D,hash:"",type:"P2PKH"})).filter((D)=>D.value>Math.max(RX(X),d(D)*G));if(!Y?.length)return AX.from({chain:X});let W=BigInt(Y.reduce((D,V)=>D+V.value,0)),z=AX.from({chain:X,value:W}),U=typeof L==="number"?Array.from({length:L},()=>({address:J,value:0})):L;if(j)U.push({address:J,script:R(j),value:0});let _=JX({inputs:Y,outputs:U}),B=AX.from({chain:X,value:BigInt(_*G)});return z.sub(B)}}function w0(X){return async function(J){let{fee:j}=await O2(J);return AX.from({chain:X,value:k0.fromBigInt(BigInt(j),8).getValue("string")})}}function S0({chain:X,phrase:$,derivationPath:J,seed:j}){let Q=P(X),{privateKey:Z,publicKey:L}=ZX({chain:X,derivationPath:J,phrase:$,seed:j}),q=X===b.BitcoinCash?[dX.ALL]:[B2.ALL];return{getAddress:()=>MX({chain:X,network:Q,publicKey:L}),privateKey:Z,publicKey:L,signTransaction:(G)=>{return G.sign(Z,q),G}}}function K0(X,$){return async function({memo:j,recipient:Q,feeOptionKey:Z,feeRate:L,assetValue:q,enableRBF:G=!1}){let Y=await $?.getAddress();if(!($&&Y))throw new k("toolbox_utxo_no_signer");if(!Q)throw new k("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});b0({condition:G&&!vX.includes(X),id:`rbf_not_supported_${X}`,warning:`RBF (Replace-by-Fee) is not reliably supported on ${X}. Transaction will be created without RBF signaling.`});let W=G&&vX.includes(X),z=L||(await GX(X))[Z||K.Fast],{tx:U}=await H2({assetValue:q,enableRBF:W,feeRate:z,memo:j,recipient:Q,sender:Y}),_=await $.signTransaction(U);return _.finalize(),I(X).broadcastTx(i.encode(_.extract()))}}function k2(X){return($)=>D2({address:$,chain:X})}function V2(X){let $=P(X);return function(j){if(!j)throw new k("toolbox_utxo_invalid_params",{error:"Keys must be provided"});return MX({chain:X,network:$,publicKey:j.publicKey})}}function a({chain:X,...$}){let J="phrase"in $?$.phrase:void 0,j="index"in $?$.index||0:0,Q=J?cX(J):void 0,Z="derivationPath"in $&&$.derivationPath?$.derivationPath:V0(_2[X],{index:j}),L=NX(Z),q=J?S0({chain:X,derivationPath:L,phrase:J,seed:Q}):void 0,G="signer"in $?$.signer:void 0,Y=q||G,W=J?ZX({chain:X,derivationPath:L,phrase:J,seed:Q}):void 0;function z(){if(Y)return Y.getAddress();return Promise.resolve(void 0)}function U(N){if(!J)return;let M=o({accountIndex:N,chain:X,derivationPath:Z});return v0({chain:X,derivationPath:NX(M),phrase:J,seed:Q})}let _=U();function B(){if(!_)return;return _.publicExtendedKey}function D({accountIndex:N}={}){let M=N===void 0?_:U(N);if(!M)return;let C=o({accountIndex:N,chain:X,derivationPath:Z});return{accountIndex:XX(C),path:NX(C),xpub:M.publicExtendedKey}}function V({accountIndex:N,index:M,change:C=!1}){let H=N===void 0?_:U(N);if(!H)return;let O=UX({accountIndex:N,chain:X,change:C,derivationPath:Z,index:M}),E=P(X),A=H.deriveChild(Number(C)).deriveChild(M);if(!A.publicKey)throw new k("toolbox_utxo_invalid_params",{error:"Could not derive public key"});let T=MX({chain:X,network:E,publicKey:A.publicKey}),v=i.encode(A.publicKey);return{accountIndex:XX(O),address:T,change:C,index:M,path:NX(O),pubkey:v}}async function e(N){if(!vX.includes(X))return{reason:`RBF is not supported on ${X}`,supported:!1};let M=await I(X).getTransactionDetails(N);return{canReplace:M.isRBF&&!M.confirmed,confirmed:M.confirmed,enabled:M.isRBF,fee:M.fee,sequences:M.sequences,supported:!0}}async function DX({txid:N,newFeeRate:M,recipient:C,memo:H}){if(!vX.includes(X))throw new k("toolbox_utxo_rbf_not_supported",{chain:X});let O=await I(X).getTransactionDetails(N);if(!O.isRBF)throw new k("toolbox_utxo_tx_not_replaceable",{txid:N});if(O.confirmed)throw new k("toolbox_utxo_tx_already_confirmed",{blockId:O.blockId,txid:N});let E=O.inputs.reduce((f,p)=>f+p.value,0),T=O.outputs.find((f)=>f.recipient===C)?.value||0;if(T===0)throw new k("toolbox_utxo_invalid_params",{error:"Could not determine send amount from original transaction"});let v=await Promise.all(O.inputs.map(async(f)=>{let p=await I(X).getRawTx(f.transaction_hash);return{hash:f.transaction_hash,index:f.index,txHex:p,value:f.value,witnessUtxo:void 0}})),HX=H?R(H):null,mX=JX({feeRate:M,inputs:v.map((f)=>({...f,type:"P2WPKH"})),outputs:[{address:C,value:T}]}),g=Math.ceil(mX*M);if(g<=O.fee)throw new k("toolbox_utxo_rbf_fee_too_low",{newFee:g,originalFee:O.fee});let zX=g-O.fee,x=T-zX;if(x<=0)throw new k("toolbox_utxo_rbf_insufficient_change");let OX=new oX({allowLegacyWitnessUtxo:!0,version:1}),kX=[{address:C,value:x},...H?[{address:"",script:R(H),value:0}]:[]],VX=E-x-g,h=await z();if(VX>RX(X)&&h)kX.push({address:h,value:VX});return s({chain:X,compiledMemo:HX,inputs:v,outputs:kX,sender:h||C,tx:OX}),{feeDelta:zX,newFee:g,originalFee:O.fee,tx:OX}}async function CX({txid:N,newFeeRate:M,recipient:C,memo:H}){let{tx:O,originalFee:E,newFee:A}=await DX({memo:H,newFeeRate:M,recipient:C,txid:N}),T=await KX(O);T.finalize();let v=await I(X).broadcastTx(i.encode(T.extract()));return{newFee:A,originalFee:E,txid:v}}function qX({accountIndex:N,index:M,change:C=!1}){y("index",M);let H=N===void 0?_:U(N);if(!H)return;return H.deriveChild(Number(C)).deriveChild(M).privateKey||void 0}function LX({tx:N,inputDerivations:M}){if(!_)throw new k("toolbox_utxo_no_signer");let C=X===b.BitcoinCash?[dX.ALL]:[B2.ALL];for(let H=0;H<M.length;H++){let O=M[H];if(!O)continue;let{derivationIndex:E,isChange:A}=O,T=qX({change:A,index:E});if(!T)throw new k("toolbox_utxo_invalid_params",{error:`Could not derive private key for input ${H} at index ${E}`});N.signIdx(T,H,C)}return N}async function g2({utxos:N,recipient:M,assetValue:C,memo:H,feeRate:O,feeOptionKey:E,changeAddress:A}){if(!_)throw new k("toolbox_utxo_no_signer");let T=O||(await GX(X))[E||K.Fast],v=H?R(H):null,HX=[{address:M,value:C.getBaseValue("number")}];if(v)HX.push({address:"",script:v,value:0});let mX=N.map(({hash:h,index:f,value:p,txHex:h2,witnessUtxo:gX})=>({hash:h,index:f,txHex:h2,value:p,witnessUtxo:gX?{script:gX.script,value:gX.value}:void 0})),{inputs:g,outputs:zX}=S({chain:X,feeRate:T,inputs:mX,outputs:HX});if(!(g&&zX))throw new k("toolbox_utxo_insufficient_balance",{assetValue:C,sender:"multiple addresses"});let x=new oX({allowLegacyWitnessUtxo:!0,version:1}),OX=N[0]?.address,kX=A||await z()||OX||M;s({chain:X,compiledMemo:v,inputs:g,outputs:zX,sender:kX,tx:x});let VX=g.map((h)=>{let f=N.find((p)=>p.hash===h.hash&&p.index===h.index);return f?{derivationIndex:f.derivationIndex,isChange:f.isChange}:{derivationIndex:0,isChange:!1}});return LX({inputDerivations:VX,tx:x}),x.finalize(),I(X).broadcastTx(i.encode(x.extract()))}function l2({address:N,gapLimit:M=20}){if(!_)return;for(let C=0;C<M;C++){let H=V({change:!1,index:C}),O=V({change:!0,index:C}),E=H?.address===N?!1:O?.address===N;if(H?.address===N||O?.address===N)return{change:E,index:C}}return}function KX(N){if(!Y)throw new k("toolbox_utxo_no_signer");return Y.signTransaction(N)}async function x2(N){let M=await KX(N);return M.finalize(),await I(X).broadcastTx(i.encode(M.extract()))}return{accumulative:S,broadcastTx:(N)=>I(X).broadcastTx(N),bumpFee:CX,calculateTxSize:JX,createKeysForPath:(N)=>ZX({...N,chain:X}),createReplacementTransaction:DX,createTransaction:H2,deriveAddressAtIndex:V,derivePrivateKeyAtIndex:qX,estimateMaxSendableAmount:y0(X),estimateTransactionFee:w0(X),getAddress:z,getAddressFromKeys:V2(X),getBalance:U2(X),getExtendedPublicKey:B,getExtendedPublicKeyInfo:D,getFeeRates:()=>GX(X),getInputsOutputsFee:O2,getNetworkForChain:()=>P(X),getPrivateKeyFromMnemonic:(N)=>A0(ZX({...N,chain:X}).privateKey,X),isRBFEnabled:e,keys:W,resolveDerivationIndex:l2,signAndBroadcastTransaction:x2,signTransaction:KX,signTransactionWithMultipleKeys:LX,transfer:K0(X,Y),transferFromMultipleAddresses:g2,validateAddress:k2(X)}}var m=m0.BitcoinCash;function wX(X){return jX(FX(X))}function o0(X){let $=P(m);function J(Q){return Q.sign(X.privateKey,[p0.ALL]),Q}function j(){let Q=P2(X.publicKey,$);if(!Q.hash)throw new l("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});let Z=F2({hash:Q.hash,prefix:I2.MAINNET,type:f2.P2PKH});return Promise.resolve(Z.replace(/^bitcoincash:/,""))}return{getAddress:j,signTransaction:J}}function E2(X){let $="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,j=g0("derivationPath"in X&&X.derivationPath?X.derivationPath:h0(x0[m],{index:J})),Q=$?ZX({chain:m,derivationPath:j,phrase:$}):void 0,Z=Q?o0(Q):("signer"in X)?X.signer:void 0;function L(){return Promise.resolve(Z?.getAddress())}let{getBalance:q,getFeeRates:G,broadcastTx:Y,...W}=a({chain:m});function z(B,D=!0){return q(jX(FX(B)))}function U(B){if(!Z)throw new l("toolbox_utxo_no_signer");return Z.signTransaction(B)}async function _(B){let D=await U(B);return D.finalize(),await Y(b2.encode(D.extract()))}return{...W,broadcastTx:Y,buildTx:d0,createTransaction:R2,getAddress:L,getAddressFromKeys:r0,getBalance:z,getFeeRates:G,signAndBroadcastTransaction:_,signTransaction:U,stripPrefix:jX,stripToCashAddress:wX,transfer:c0({broadcastTx:Y,getFeeRates:G,signer:Z}),validateAddress:n}}async function R2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q}){if(!n($))throw new l("toolbox_utxo_invalid_address",{address:$});let Z=Math.ceil(X.getBaseValue("number")+j*7500),L=await I(m).getUtxos({address:wX(Q),fetchTxHex:!0,targetValue:Z}),q=J?R(J):null,G=[],Y=u($);if(G.push({address:Y,value:X.getBaseValue("number")}),q)G.push({script:q,value:0});let{inputs:W,outputs:z}=S({chain:m,feeRate:j,inputs:L,outputs:G});if(!(W&&z))throw new l("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let U=new T2({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!q,version:1}),_=u(Q),{inputs:B,tx:D}=s({chain:m,compiledMemo:q,inputs:W,outputs:z.map((V)=>("address"in V)&&V.address?{...V,address:u(V.address)}:V),sender:_,tx:U});return{inputs:B,tx:D,utxos:W}}function c0({broadcastTx:X,getFeeRates:$,signer:J}){return async function({recipient:Q,assetValue:Z,feeOptionKey:L=l0.Fast,...q}){let G=await J?.getAddress();if(!(J&&G))throw new l("toolbox_utxo_no_signer");if(!Q)throw new l("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let Y=q.feeRate||(await $())[L],{tx:W}=await R2({...q,assetValue:Z,feeRate:Y,recipient:Q,sender:G}),z=await J.signTransaction(W);return z.finalize(),X(b2.encode(z.extract()))}}async function d0({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q}){let Z=FX($);if(!n(Z))throw new l("toolbox_utxo_invalid_address",{address:Z});let L=Math.ceil(X.getBaseValue("number")+j*7500),q=await I(m).getUtxos({address:wX(Q),fetchTxHex:!0,targetValue:L}),G=Number(j.toFixed(0)),Y=J?R(J):null,W=[];if(W.push({address:u($),value:X.getBaseValue("number")}),Y)W.push({script:Y,value:0});let{inputs:z,outputs:U}=S({chain:m,feeRate:G,inputs:q,outputs:W});if(!(z&&U))throw new l("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new T2({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!Y,version:1}),{inputs:B,tx:D}=s({chain:m,compiledMemo:Y,inputs:z,outputs:U,sender:u(Q),tx:_});return{inputs:B,tx:D,utxos:q}}function r0(X){let $=u0.bitcoinCash,J=P2(X.publicKey,$);if(!J.hash)throw new l("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return F2({hash:J.hash,prefix:I2.MAINNET,type:f2.P2PKH}).replace(/^bitcoincash:/,"")}import{createBase58check as n0,hex as i0}from"@scure/base";import{HDKey as y2}from"@scure/bip32";import{mnemonicToSeedSync as w2}from"@scure/bip39";import{Chain as SX,derivationPathToString as s0,FeeOption as a0,NetworkDerivationPath as t0,SKConfig as S2,SwapKitError as t,updateDerivationPath as e0}from"@swapkit/helpers";import{Address as X1,createZcashTransaction as $1,isTransparentZcashAddress as A2,OutScript as J1,PCZT as j1,utils as K2,WIF as Q1,ZCASH_NETWORK as Z1,ZCASH_TEST_NETWORK as G1,ZcashConsensusBranchId as Y1,ZcashPSBT as q1,ZcashSigHash as rX,ZcashVersionGroupId as L1}from"@swapkit/utxo-signer";import{match as z1,P as nX}from"ts-pattern";function iX(){let{isStagenet:X}=S2.get("envs");return X?G1:Z1}var U1=n0(K2.sha256);function W1(X){return U1.encode(X)}function _1({phrase:X,derivationPath:$}){let J=w2(X),Q=y2.fromMasterSeed(J).derive($);if(!Q.privateKey||!Q.publicKey)throw new t("toolbox_utxo_invalid_params");let{privateKey:Z,publicKey:L}=Q,q=K2.hash160(L),{isStagenet:G}=S2.get("envs"),Y=G?new Uint8Array([29,37]):new Uint8Array([28,184]),W=new Uint8Array(Y.length+q.length);W.set(Y,0),W.set(q,Y.length);let z=W1(W);return{getAddress:()=>Promise.resolve(z),signTransaction:(U)=>{if(U instanceof q1){let _=U.toPCZT();return _.signAllInputs(Z,L,rX.ALL),_.finalizeAllInputs(),Promise.resolve(_.extract())}if(U instanceof j1)return U.signAllInputs(Z,L,rX.ALL),U.finalizeAllInputs(),Promise.resolve(U.extract());return U.signAllInputs(Z,L,rX.ALL),Promise.resolve(U)}}}function B1({inputs:X,outputs:$,tx:J,sender:j,compiledMemo:Q}){let Z=iX();for(let L of X){let q=X1(Z).decode(j),G=J1.encode(q);J.addInput({index:L.index,script:G,sequence:4294967295,txid:i0.decode(L.hash),value:BigInt(L.value)})}for(let L of $){let q="address"in L&&L.address?L.address:j,G=L.script;if(G&&!Q)continue;if(G&&Q)J.addOutput({amount:0n,script:Q});else J.addOutputAddress(q,BigInt(L.value),Z)}return{inputs:X,tx:J}}async function v2(X){let{assetValue:$,recipient:J,memo:j,feeRate:Q,sender:Z,fetchTxHex:L}=X,q=iX();if(!A2(Z,q))throw new t("toolbox_utxo_invalid_address",{address:Z});if(!A2(J,q))throw new t("toolbox_utxo_invalid_address",{address:J,error:"Zcash transaction creation currently supports transparent addresses only"});let G=j?R(j):null,Y=await I(SX.Zcash).getUtxos({address:Z,fetchTxHex:L!==!1}),W=[{address:J,value:Number($.getBaseValue("string"))},...G?[{script:G,value:0}]:[]],{inputs:z,outputs:U}=S({chain:SX.Zcash,changeAddress:Z,feeRate:Q,inputs:Y,outputs:W});if(!(z&&U))throw new t("toolbox_utxo_insufficient_balance",{assetValue:$,sender:Z});let _=$1({consensusBranchId:Y1.NU6_2,expiryHeight:0,lockTime:0,version:4,versionGroupId:L1.SAPLING}),{tx:B,inputs:D}=B1({compiledMemo:G,inputs:z,outputs:U,sender:Z,tx:_});return{inputs:D,outputs:U,tx:B}}function m2(X){let $=z1(X).with({signer:nX.not(nX.nullish)},({signer:G})=>G).with({phrase:nX.string},({phrase:G,derivationPath:Y,index:W=0})=>{let z=Y||t0[SX.Zcash]||[44,133,0,0,0],U=e0(z,{index:W}),_=s0(U);return _1({derivationPath:_,phrase:G})}).otherwise(()=>{return}),J=a({chain:SX.Zcash,signer:$});async function j(G){if(!$)throw new t("toolbox_utxo_no_signer");return await $.signTransaction(G)}async function Q(G){let Y=await j(G);return J.broadcastTx(Y.toHex())}async function Z({recipient:G,assetValue:Y,feeOptionKey:W=a0.Fast,...z}){let U=await $?.getAddress();if(!($&&U))throw new t("toolbox_utxo_no_signer");let _=z.feeRate||(await J.getFeeRates())[W],{tx:B}=await v2({...z,assetValue:Y,feeRate:_,recipient:G,sender:U}),V=(await $.signTransaction(B)).toHex();return J.broadcastTx(V)}function L({phrase:G,derivationPath:Y="m/44'/133'/0'/0/0"}){let W=w2(G),U=y2.fromMasterSeed(W).derive(Y);if(!U.privateKey||!U.publicKey)throw new t("toolbox_utxo_invalid_params");return{privateKey:U.privateKey,publicKey:U.publicKey}}function q({phrase:G,derivationPath:Y="m/44'/133'/0'/0/0"}){let W=L({derivationPath:Y,phrase:G}),z=iX();return Q1(z).encode(W.privateKey)}return{...J,createKeysForPath:L,createTransaction:v2,getPrivateKeyFromMnemonic:q,signAndBroadcastTransaction:Q,signTransaction:j,transfer:Z,validateAddress:BX}}import{hex as N1}from"@scure/base";import{HDKey as M1}from"@scure/bip32";import{derivationPathToString as D1}from"@swapkit/helpers";function C1({xpub:X,chain:$,count:J,startIndex:j=0,accountIndex:Q}){if(y("count",J),J<1)throw RangeError("count must be at least 1");y("startIndex",j);let Z=P($),L=M1.fromExtendedKey(X,Z.bip32),q=o({accountIndex:Q,chain:$}),G=XX(q),Y=[];for(let W of[!1,!0]){let z=L.deriveChild(Number(W));for(let U=0;U<J;U++){let _=j+U,B=z.deriveChild(_);if(!B.publicKey)continue;let D=UX({accountIndex:Q,chain:$,change:W,index:_});Y.push({accountIndex:G,address:MX({chain:$,network:Z,publicKey:B.publicKey}),change:W,index:_,path:D1(D),pubkey:N1.encode(B.publicKey)})}}return Y}function S8(X,$){switch(X){case YX.BitcoinCash:return E2($||{});case YX.Zcash:return m2($);case YX.Bitcoin:case YX.Dogecoin:case YX.Litecoin:case YX.Dash:return a({chain:X,...$});default:throw new H1("toolbox_utxo_not_supported",{chain:X})}}export{BX as validateZcashAddress,D2 as validateUtxoAddress,n as validateBchAddress,u as toLegacyAddress,FX as toCashAddress,wX as stripToCashAddress,jX as stripPrefix,yX as nonSegwitChains,G2 as isValidAddress,S8 as getUtxoToolbox,F1 as getUtxoNetwork,I as getUtxoApi,k2 as getUTXOAddressValidator,UX as getUTXOAddressPath,o as getUTXOAccountPath,XX as getUTXOAccountIndexFromPath,_X as getScriptTypeForAddress,EX as getOutputSize,P as getNetworkForChain,d as getInputSize,RX as getDustThreshold,Y2 as detectAddressNetwork,C1 as deriveAddressesFromXpub,m2 as createZcashToolbox,a as createUTXOToolbox,u2 as createHDWalletHelpers,f1 as createCustomUtxoApi,E2 as createBCHToolbox,R as compileMemo,JX as calculateTxSize,y as assertDerivationIndex,V2 as addressFromKeysGetter,s as addInputsAndOutputs,S as accumulative,Z2 as UtxoNetwork,uX as UTXOScriptType,hX as TX_OVERHEAD,pX as SEGWIT_MARKER_FLAG_WEIGHT,TX as OutputSizes,M0 as OP_RETURN_OVERHEAD,m1 as MIN_TX_FEE,xX as InputSizes};
|
|
1
|
+
import{ea as J2,fa as N2}from"../../chunk-nvfkjbyq.js";import"../../chunk-xbdjxeqd.js";import{NetworkDerivationPath as p2}from"@swapkit/helpers";function w(X,$){if(!Number.isInteger($)||$<0)throw RangeError(`${X} must be a non-negative integer, got: ${$}`)}function n({accountIndex:X,chain:$,derivationPath:J}){if(X!==void 0)w("accountIndex",X);let j=[...J?.slice(0,3)??p2[$].slice(0,3)];if(X!==void 0)j[2]=X;return j}function NX({accountIndex:X,change:$=!1,chain:J,derivationPath:j,index:Q}){return w("index",Q),[...n({accountIndex:X,chain:J,derivationPath:j}),Number($),Q]}function ZX(X){return X[2]??0}function u2({deriveAddress:X,getBalance:$,getUtxos:J}){async function j(Y){let{accountIndex:q,count:G,startIndex:W=0,change:U=!1}=Y;if(w("count",G),G<1)throw RangeError("count must be at least 1");w("startIndex",W);let z=[];for(let _=0;_<G;_++){let B=await X({accountIndex:q,change:U,index:W+_});if(B)z.push(B)}return z}async function Q(Y){let{gapLimit:q=20,change:G=!1}=Y??{},W=[],U=0,z=0;while(U<q){let _=await X({change:G,index:z});if(!_)break;if((await $(_.address)).some((D)=>D.getValue("number")>0))W.push(_),U=0;else U++;z++}return W}async function Z(Y=20){let[q,G]=await Promise.all([Q({change:!1,gapLimit:Y}),Q({change:!0,gapLimit:Y})]),W=[...q,...G],U=await Promise.all(W.map(async(_)=>{let C=(await $(_.address)).reduce((D,V)=>D+V.getValue("number"),0);return{..._,balance:C}})),z=U.reduce((_,B)=>_+B.balance,0);return{addresses:U,total:z}}async function L(Y=20){let[q,G]=await Promise.all([Q({change:!1,gapLimit:Y}),Q({change:!0,gapLimit:Y})]),W=[...q,...G];return(await Promise.all(W.map(async(z)=>{return(await J(z.address)).map((B)=>({...B,address:z.address,derivationIndex:z.index,isChange:z.change}))}))).flat()}return{deriveAddresses:j,getAggregatedBalance:Z,getAggregatedUtxos:L,scanForAddresses:Q}}import{Chain as P,getRPCUrl as d2,RequestClient as FX,SKConfig as r2,SwapKitError as K,warnOnce as n2}from"@swapkit/helpers";import{NETWORKS as GX}from"@swapkit/utxo-signer";async function i2({chain:X,txHash:$}){let J=`${MX(X)}/push/transaction`,j=JSON.stringify({data:$});try{let Q=await FX.post(J,{body:j,headers:{"Content-Type":"application/json"}});if(Q.context.code!==200)throw new K("toolbox_utxo_broadcast_failed",{error:Q.context.error||"Transaction broadcast failed"});return Q.data?.transaction_hash||$}catch(Q){let Z=await d2(X);if(Z){let L=JSON.stringify({id:J2(),jsonrpc:"2.0",method:"sendrawtransaction",params:[$]}),Y=await FX.post(Z,{body:L,headers:{"Content-Type":"application/json"}});if(Y.error)throw new K("toolbox_utxo_broadcast_failed",{error:Y.error?.message});if(Y.result.includes('"code":-26'))throw new K("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return Y.result}throw Q}}function MX(X){return`https://api.blockchair.com/${s2(X)}`}function X2(X){switch(X){case P.Bitcoin:return 5;case P.Dogecoin:return 1e4;case P.Litecoin:return 1;case P.Zcash:return 1;default:return 2}}function s2(X){switch(X){case P.BitcoinCash:return"bitcoin-cash";case P.Litecoin:return"litecoin";case P.Dash:return"dash";case P.Dogecoin:return"dogecoin";case P.Zcash:return"zcash";case P.Polkadot:return"polkadot";default:return"bitcoin"}}async function a2(X){try{let{feePerKb:$}=await FX.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=$/1000;return Math.max(J,X2(X))}catch{return X2(X)}}async function EX(X,$){let J=await FX.get(`${X}${$?`${X.includes("?")?"&":"?"}key=${$}`:""}`);if(!J||J.context.code!==200)throw new K("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return J.data}async function j2({address:X,chain:$,apiKey:J}){if(!X)throw new K("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await EX(`${MX($)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch{return{address:{balance:0,transaction_count:0},utxo:[]}}}async function t2({address:X,chain:$,apiKey:J}){return(await j2({address:X,apiKey:J,chain:$}))?.address.balance||0}async function Q2({chain:X,apiKey:$,txHash:J}){if(!J)throw new K("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await EX(`${MX(X)}/raw/transaction/${J}`,$))?.[J]?.raw_transaction||""}catch(j){let Q=j instanceof Error?j.message:String(j);return console.error(`Failed to fetch raw transaction: ${Q}`),""}}var e2=4294967294;async function X0({chain:X,apiKey:$,txHash:J}){if(!J)throw new K("toolbox_utxo_invalid_params",{error:"TxHash is required"});let Q=(await EX(`${MX(X)}/dashboards/transaction/${J}`,$))?.[J];if(!Q)throw new K("toolbox_utxo_tx_not_found",{txHash:J});let{transaction:Z,inputs:L,outputs:Y}=Q,q=L.map((W)=>W.spending_sequence),G=Z.is_rbf===!0||q.some((W)=>W<e2);return{blockId:Z.block_id,confirmed:Z.block_id!==-1,fee:Z.fee,inputs:L,isRBF:G,outputs:Y,sequences:q,size:Z.size,txid:Z.hash,weight:Z.weight}}async function $0({chain:X,address:$,apiKey:J,offset:j=0,limit:Q=30}){return(await EX(`${MX(X)}/outputs?q=recipient(${$}),is_spent(false)&s=value(desc)&fields=is_spent,transaction_hash,index,value,script_hex,block_id,spending_signature_hex&limit=${Q}&offset=${j}`,J)).map(({is_spent:q,script_hex:G,block_id:W,transaction_hash:U,index:z,value:_,spending_signature_hex:B})=>({hash:U,index:z,is_confirmed:W!==-1,is_spent:q,script_hex:G,txHex:B,value:_}))}function J0(X){return X.reduce(($,J)=>$+J.value,0)}function $2(X,$){let J=[...X].sort((j,Q)=>Q.value-j.value);if($){let j=[],Q=0;for(let Z of J)if(j.push(Z),Q+=Z.value,Q>=$)break;return j}return J}async function Z2({chain:X,address:$,apiKey:J,targetValue:j,accumulativeValue:Q=0,offset:Z=0,limit:L=30}){if(!$)throw new K("toolbox_utxo_invalid_params",{error:"Address is required"});try{let Y=await $0({address:$,apiKey:J,chain:X,limit:L,offset:Z,targetValue:j}),G=Y.length<L,W=Y.filter(({is_spent:D})=>!D),U=J0(W),z=Q+U,_=j&&z>=j;if(G||_)return $2(W,j);let B=await Z2({accumulativeValue:z,address:$,apiKey:J,chain:X,limit:L,offset:Z+L,targetValue:j}),C=[...W,...B];return $2(C,j)}catch(Y){let q=Y instanceof Error?Y.message:String(Y);return console.error(`Failed to fetch unspent UTXOs: ${q}`),[]}}async function j0({address:X,chain:$,apiKey:J,fetchTxHex:j=!0,targetValue:Q}){let Z=await Z2({address:X,apiKey:J,chain:$,targetValue:Q}),L=[];for(let{hash:Y,index:q,script_hex:G,value:W}of Z){let U;if(j)U=await Q2({apiKey:J,chain:$,txHash:Y});L.push({address:X,hash:Y,index:q,txHex:U,value:W,witnessUtxo:{script:Buffer.from(G,"hex"),value:W}})}return L}function f(X){let $=r2.get("apiKeys").blockchair||"";return n2({condition:!$,id:"no_blockchair_api_key_warning",warning:"No Blockchair API key found. Functionality will be limited."}),{broadcastTx:(J)=>i2({chain:X,txHash:J}),getAddressData:(J)=>j2({address:J,apiKey:$,chain:X}),getBalance:(J)=>t2({address:J,apiKey:$,chain:X}),getRawTx:(J)=>Q2({apiKey:$,chain:X,txHash:J}),getSuggestedTxFee:()=>a2(X),getTransactionDetails:(J)=>X0({apiKey:$,chain:X,txHash:J}),getUtxos:(J)=>j0({...J,apiKey:$,chain:X})}}function P1(X){return X}function T1(){return function($){switch($){case P.Bitcoin:return GX.bitcoin;case P.BitcoinCash:return GX.bitcoinCash;case P.Dash:return GX.dash;case P.Litecoin:return GX.litecoin;case P.Dogecoin:return GX.dogecoin;case P.Zcash:return GX.zcash;default:throw new K("toolbox_utxo_not_supported",{chain:$})}}}import{sha256 as z0}from"@noble/hashes/sha2.js";import{createBase58check as W0}from"@scure/base";import{SwapKitError as Y2}from"@swapkit/helpers";import{CashAddrType as RX,decodeCashAddr as Q0,encodeCashAddr as Z0}from"@swapkit/utxo-signer";var G0={P2PKH:RX.P2PKH,P2SH:RX.P2SH},Y0={[RX.P2PKH]:"P2PKH",[RX.P2SH]:"P2SH"};function q0(X,$,J){return Z0({hash:J,prefix:X,type:G0[$]})}function L0(X){let $=Q0(X),J=Y0[$.type];if(!J)throw Error(`Unknown CashAddr type: ${$.type}`);return{hash:$.hash,prefix:$.prefix,type:J}}var hX={decode:L0,encode:q0};var q2=W0(z0);var L2;((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})(L2||={});var i={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}};function z2(X){try{return AX(X),!0}catch{return!1}}function W2(X){return AX(X)?.network}function o(X){let $=AX(X);if($?.format==="legacy")return X;return B0($)}function yX(X){let $=AX(X);return N0($)}function AX(X){try{let $=U0(X);if($)return $}catch{}try{let $=_0(X);if($)return $}catch{}throw new Y2("toolbox_utxo_invalid_address",{address:X})}function U0(X){try{let $=q2.decode(X);if($.length!==21)throw new Y2("toolbox_utxo_invalid_address",{address:X});let J=$[0],j=Array.prototype.slice.call($,1);switch(J){case i.legacy.mainnet.p2pkh:return{format:"legacy",hash:j,network:"mainnet",type:"p2pkh"};case i.legacy.mainnet.p2sh:return{format:"legacy",hash:j,network:"mainnet",type:"p2sh"};case i.legacy.testnet.p2pkh:return{format:"legacy",hash:j,network:"testnet",type:"p2pkh"};case i.legacy.testnet.p2sh:return{format:"legacy",hash:j,network:"testnet",type:"p2sh"};case i.bitpay.mainnet.p2pkh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2pkh"};case i.bitpay.mainnet.p2sh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2sh"};default:return}}catch{return}}function _0(X){if(X.indexOf(":")!==-1)try{return G2(X)}catch{}else{let $=["bitcoincash","bchtest","bchreg"];for(let J of $)try{return G2(`${J}:${X}`)}catch{}}return}function G2(X){try{let{hash:$,prefix:J,type:j}=hX.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call($,0),network:J==="bitcoincash"?"mainnet":"testnet",type:j==="P2PKH"?"p2pkh":"p2sh"}}catch{return}}function B0(X){let $=i.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=$,J.set(X.hash,1),q2.encode(J)}function N0(X){let $=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",j=new Uint8Array(X.hash);return hX.encode($,J,j)}import{Chain as a,SwapKitError as dX}from"@swapkit/helpers";import{SwapKitError as M0}from"@swapkit/helpers";import{Script as D0}from"@swapkit/utxo-signer";var g1=1000,oX=10,pX=2,C0=10,H0=41,O0=107;function A(X){let $=new Uint8Array(Buffer.from(X,"utf8"));return D0.encode(["RETURN",$])}var uX;((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(uX||={});var cX={["P2PKH"]:148,["P2WPKH"]:68},vX={["P2PKH"]:34,["P2WPKH"]:31},DX=(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 M0("toolbox_utxo_invalid_address",{address:X})},YX=({inputs:X,outputs:$,feeRate:J})=>{let j=X[0]&&"address"in X[0]&&X[0].address?DX(X[0].address):"P2PKH",Z=(J?X.filter((G)=>G.value>=cX["type"in G&&G.type?G.type:"P2PKH"]*Math.ceil(J)):X).reduce((G,W)=>G+s(W),0),L=$?.reduce((G,W)=>G+SX(W),0)||vX[j],Y=oX+Z+L;return j==="P2WPKH"?Math.ceil(Y+pX/4):Y},s=(X)=>{if("type"in X&&X.type)return cX[X.type];if("address"in X&&X.address)return cX[DX(X.address)];return H0+O0},SX=(X,$)=>{if(X?.script)return C0+X.script.length+(X.script.length>=74?2:1);if($)return vX[$];if("address"in X&&X.address)return vX[DX(X.address)];return vX.P2PKH};function CX(X){switch(X){case a.Bitcoin:case a.BitcoinCash:return 550;case a.Dash:case a.Litecoin:return 5500;case a.Dogecoin:return 1e5;case a.Zcash:return 546;default:throw new dX("toolbox_utxo_not_supported",{chain:X})}}function v({inputs:X,outputs:$,feeRate:J=1,chain:j=a.Bitcoin,changeAddress:Q="",sweep:Z=!1}){let L=CX(j),Y=X.filter((D)=>{let V=s(D)*J;return Z?D.value>Math.max(V,L):V<=D.value});if(Z){let D=Math.ceil(J*YX({inputs:Y,outputs:$})),V=Y.reduce((R,l)=>R+l.value,0),p=V-D;if(p<=L)throw new dX("toolbox_sweep_amount_too_low",{available:V,dustThreshold:L,fee:D});let u=$.findIndex((R)=>("address"in R)&&R.address);if(u===-1)throw new dX("toolbox_utxo_invalid_params",{error:"Sweep requires a recipient output"});return{fee:D,inputs:Y,outputs:$.map((R,l)=>l===u?{...R,value:p}:R)}}let W=(X[0]&&"address"in X[0]&&X[0].address?DX(X[0].address):"P2PKH")==="P2WPKH"?Math.ceil(pX/4):0,U=oX+W+$.reduce((D,V)=>D+SX(V),0),z=$.reduce((D,V)=>D+V.value,0),_=U*J,B=0,C=[];for(let D of Y){let V=s(D),p=J*V;_+=p,B+=D.value,C.push(D);let u=_+z;if(B<u)continue;let R=B-u,l=J*SX({address:Q,value:0});if(R>l){let kX=l+_,VX=B-(z+Math.ceil(kX));if(VX>Math.max(s({value:0})*J,CX(j)))return{fee:Math.ceil(kX),inputs:C,outputs:$.concat({address:Q,value:VX})}}return{fee:Math.ceil(_),inputs:C,outputs:$}}return{fee:Math.ceil(J*YX({inputs:X,outputs:$}))}}import{Chain as UX,SwapKitError as O1}from"@swapkit/helpers";import{hex as T2}from"@scure/base";import{Chain as g0,derivationPathToString as l0,FeeOption as x0,NetworkDerivationPath as h0,SwapKitError as h,updateDerivationPath as c0}from"@swapkit/helpers";import{BCHSigHash as o0,CashAddrPrefix as F2,CashAddrType as E2,encodeCashAddr as R2,NETWORKS as p0,p2pkh as y2,Transaction as A2}from"@swapkit/utxo-signer";import{secp256k1 as b0}from"@noble/curves/secp256k1.js";import{hex as e}from"@scure/base";import{HDKey as M2}from"@scure/bip32";import{mnemonicToSeedSync as iX}from"@scure/bip39";import{AssetValue as rX,applyFeeMultiplier as U2,Chain as I,derivationPathToString as OX,FeeOption as m,NetworkDerivationPath as D2,SwapKitError as k,SwapKitNumber as k0,updateDerivationPath as V0,warnOnce as I0}from"@swapkit/helpers";import{Address as f0,BCHSigHash as sX,CashAddrPrefix as P0,CashAddrType as T0,encodeCashAddr as F0,NETWORKS as LX,p2pkh as _2,p2wpkh as E0,RBF_SEQUENCE as R0,SigHash as C2,Transaction as nX,WIF as H2}from"@swapkit/utxo-signer";import{match as O2}from"ts-pattern";import{validateZcashAddress as HX}from"@swapkit/utxo-signer";function qX(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function t(X){let $=qX(X);return z2($)&&W2($)==="mainnet"}var KX=[I.Dash,I.Dogecoin,I.Zcash,I.BitcoinCash],wX=[I.Bitcoin];function b2({address:X,chain:$}){return O2($).with(I.BitcoinCash,()=>t(X)).with(I.Zcash,()=>HX(X)).otherwise(()=>{try{return f0(F($)).decode(X),!0}catch{return!1}})}function F(X){return O2(X).with(I.Bitcoin,()=>LX.bitcoin).with(I.BitcoinCash,()=>LX.bitcoinCash).with(I.Dash,()=>LX.dash).with(I.Dogecoin,()=>LX.dogecoin).with(I.Litecoin,()=>LX.litecoin).with(I.Zcash,()=>LX.zcash).exhaustive()}function y0({phrase:X,derivationPath:$,network:J,seed:j}){let Q=j??iX(X),L=M2.fromMasterSeed(Q,J.bip32).derive($);if(!L.privateKey)throw new k("toolbox_utxo_invalid_params",{error:"Could not derive private key from phrase"});return L.privateKey}function B2(X){return b0.getPublicKey(X,!0)}function bX({publicKey:X,chain:$,network:J}){if($===I.BitcoinCash){let Z=_2(X,J);if(!Z.hash)throw new k("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return F0({hash:Z.hash,prefix:P0.MAINNET,type:T0.P2PKH}).replace(/^bitcoincash:/,"")}let Q=!KX.includes($)?E0(X,J):_2(X,J);if(!Q.address)throw new k("toolbox_utxo_invalid_address",{error:"Could not derive address"});return Q.address}function zX({phrase:X,derivationPath:$,chain:J,wif:j,seed:Q}){let Z=F(J);if(j){let G=H2(Z).decode(j),W=B2(G);return{privateKey:G,publicKey:W}}if(!X)throw new k("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let L=$||OX(D2[J]),Y=y0({derivationPath:L,network:Z,phrase:X,seed:Q}),q=B2(Y);return{privateKey:Y,publicKey:q}}function A0(X,$){return H2(F($)).encode(X)}function v0({phrase:X,derivationPath:$,chain:J,seed:j}){let Q=$.split("/");if(Q.length<4)throw new k("toolbox_utxo_invalid_params",{error:`Derivation path must have at least 4 levels (got ${Q.length}): ${$}`});let Z=F(J),L=j??iX(X),Y=M2.fromMasterSeed(L,Z.bip32),q=Q.slice(0,4).join("/");return Y.derive(q)}function XX({inputs:X,outputs:$,chain:J,tx:j,sender:Q,compiledMemo:Z,enableRBF:L=!1}){let Y=F(J),q=!KX.includes(J),G=L?R0:void 0,W=new Set;for(let U of X){let z=`${U.hash}:${U.index}`;if(W.has(z))throw new k("toolbox_utxo_invalid_params",{error:"Duplicate input detected"});W.add(z);let _=typeof U.hash==="string"?e.decode(U.hash):U.hash;if(q&&U.witnessUtxo)j.addInput({index:U.index,sequence:G,txid:_,witnessUtxo:{amount:BigInt(U.witnessUtxo.value),script:U.witnessUtxo.script}});else if(U.txHex)j.addInput({index:U.index,nonWitnessUtxo:e.decode(U.txHex),sequence:G,txid:_,...J===I.BitcoinCash?{sighashType:sX.ALL}:{}});else throw new k("toolbox_utxo_invalid_params",{error:"Input requires either witnessUtxo or txHex for non-segwit chains"})}for(let U of $){let z="address"in U&&U.address?U.address:Q;if(J===I.BitcoinCash)z=o(z);if(U.script){if(Z)j.addOutput({amount:0n,script:Z})}else j.addOutputAddress(z,BigInt(U.value),Y)}return{inputs:X,tx:j}}async function WX(X){let $=await f(X).getSuggestedTxFee();return{[m.Average]:$,[m.Fast]:U2($,m.Fast),[m.Fastest]:U2($,m.Fastest)}}async function k2({assetValue:X,recipient:$,memo:J,sender:j,sweep:Q,fetchTxHex:Z=!1}){let L=X.chain,Y=Z||KX.includes(L),q=X.getBaseValue("number"),G=Q?void 0:Math.ceil(q+(await WX(L))[m.Fastest]*5000);return{inputs:await f(L).getUtxos({address:j,fetchTxHex:Y,targetValue:G}),outputs:[{address:$,value:Q?0:q},...J?[{address:"",script:A(J),value:0}]:[]]}}async function V2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q,fetchTxHex:Z=!1,enableRBF:L=!1,sweep:Y}){let q=X.chain,G=J?A(J):null,W=await k2({assetValue:X,fetchTxHex:Z,memo:J,recipient:$,sender:Q,sweep:Y}),{inputs:U,outputs:z}=v({...W,chain:q,feeRate:j,sweep:Y});if(!(U&&z))throw new k("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new nX({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!G,version:1}),{inputs:B,tx:C}=XX({chain:q,compiledMemo:G,enableRBF:L,inputs:U,outputs:z,sender:Q,tx:_});return{inputs:B,tx:C,utxos:W.inputs}}async function I2({assetValue:X,feeOptionKey:$=m.Fast,feeRate:J,memo:j,sender:Q,recipient:Z,sweep:L}){let Y=X.chain,q=await k2({assetValue:X,memo:j,recipient:Z,sender:Q,sweep:L}),G=J?Math.floor(J):(await WX(Y))[$];return v({...q,chain:Y,feeRate:G,sweep:L})}function S0(X){return async function({from:J,memo:j,feeRate:Q,feeOptionKey:Z=m.Fast,recipient:L=J,recipients:Y=1}){let q=Q??(await WX(X))[Z],W=(await f(X).getUtxos({address:J,fetchTxHex:!1})).filter((C)=>C.value>Math.max(CX(X),s(C)*q));if(!W.length)return rX.from({chain:X});let U=typeof Y==="number"?Math.max(Y,1):Y.length,z=typeof Y==="number"||U===0?Array.from({length:U||1},()=>({address:L,value:0})):[...Y];if(j)z.push({address:J,script:A(j),value:0});let{outputs:_}=v({chain:X,feeRate:q,inputs:W,outputs:z,sweep:!0}),B=_?.[0]?.value??0;return rX.from({chain:X,value:BigInt(B)})}}function w0(X){return async function(J){let{fee:j}=await I2(J);return rX.from({chain:X,value:k0.fromBigInt(BigInt(j),8).getValue("string")})}}function K0({chain:X,phrase:$,derivationPath:J,seed:j}){let Q=F(X),{privateKey:Z,publicKey:L}=zX({chain:X,derivationPath:J,phrase:$,seed:j}),Y=X===I.BitcoinCash?[sX.ALL]:[C2.ALL];return{getAddress:()=>bX({chain:X,network:Q,publicKey:L}),privateKey:Z,publicKey:L,signTransaction:(q)=>{return q.sign(Z,Y),q}}}function m0(X,$){return async function({memo:j,recipient:Q,feeOptionKey:Z,feeRate:L,assetValue:Y,enableRBF:q=!1,sweep:G}){let W=await $?.getAddress();if(!($&&W))throw new k("toolbox_utxo_no_signer");if(!Q)throw new k("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});I0({condition:q&&!wX.includes(X),id:`rbf_not_supported_${X}`,warning:`RBF (Replace-by-Fee) is not reliably supported on ${X}. Transaction will be created without RBF signaling.`});let U=q&&wX.includes(X),z=L||(await WX(X))[Z||m.Fast],{tx:_}=await V2({assetValue:Y,enableRBF:U,feeRate:z,memo:j,recipient:Q,sender:W,sweep:G}),B=await $.signTransaction(_);return B.finalize(),f(X).broadcastTx(e.encode(B.extract()))}}function f2(X){return($)=>b2({address:$,chain:X})}function P2(X){let $=F(X);return function(j){if(!j)throw new k("toolbox_utxo_invalid_params",{error:"Keys must be provided"});return bX({chain:X,network:$,publicKey:j.publicKey})}}function $X({chain:X,...$}){let J="phrase"in $?$.phrase:void 0,j="index"in $?$.index||0:0,Q=J?iX(J):void 0,Z="derivationPath"in $&&$.derivationPath?$.derivationPath:V0(D2[X],{index:j}),L=OX(Z),Y=J?K0({chain:X,derivationPath:L,phrase:J,seed:Q}):void 0,q="signer"in $?$.signer:void 0,G=Y||q,W=J?zX({chain:X,derivationPath:L,phrase:J,seed:Q}):void 0;function U(){if(G)return G.getAddress();return Promise.resolve(void 0)}function z(N){if(!J)return;let M=n({accountIndex:N,chain:X,derivationPath:Z});return v0({chain:X,derivationPath:OX(M),phrase:J,seed:Q})}let _=z();function B(){if(!_)return;return _.publicExtendedKey}function C({accountIndex:N}={}){let M=N===void 0?_:z(N);if(!M)return;let H=n({accountIndex:N,chain:X,derivationPath:Z});return{accountIndex:ZX(H),path:OX(H),xpub:M.publicExtendedKey}}function D({accountIndex:N,index:M,change:H=!1}){let O=N===void 0?_:z(N);if(!O)return;let b=NX({accountIndex:N,chain:X,change:H,derivationPath:Z,index:M}),y=F(X),S=O.deriveChild(Number(H)).deriveChild(M);if(!S.publicKey)throw new k("toolbox_utxo_invalid_params",{error:"Could not derive public key"});let E=bX({chain:X,network:y,publicKey:S.publicKey}),c=e.encode(S.publicKey);return{accountIndex:ZX(b),address:E,change:H,index:M,path:OX(b),pubkey:c}}async function V(N){if(!wX.includes(X))return{reason:`RBF is not supported on ${X}`,supported:!1};let M=await f(X).getTransactionDetails(N);return{canReplace:M.isRBF&&!M.confirmed,confirmed:M.confirmed,enabled:M.isRBF,fee:M.fee,sequences:M.sequences,supported:!0}}async function p({txid:N,newFeeRate:M,recipient:H,memo:O}){if(!wX.includes(X))throw new k("toolbox_utxo_rbf_not_supported",{chain:X});let b=await f(X).getTransactionDetails(N);if(!b.isRBF)throw new k("toolbox_utxo_tx_not_replaceable",{txid:N});if(b.confirmed)throw new k("toolbox_utxo_tx_already_confirmed",{blockId:b.blockId,txid:N});let y=b.inputs.reduce((T,x)=>T+x.value,0),E=b.outputs.find((T)=>T.recipient===H)?.value||0;if(E===0)throw new k("toolbox_utxo_invalid_params",{error:"Could not determine send amount from original transaction"});let c=await Promise.all(b.inputs.map(async(T)=>{let x=await f(X).getRawTx(T.transaction_hash);return{hash:T.transaction_hash,index:T.index,txHex:x,value:T.value,witnessUtxo:void 0}})),_X=O?A(O):null,IX=YX({feeRate:M,inputs:c.map((T)=>({...T,type:"P2WPKH"})),outputs:[{address:H,value:E}]}),d=Math.ceil(IX*M);if(d<=b.fee)throw new k("toolbox_utxo_rbf_fee_too_low",{newFee:d,originalFee:b.fee});let jX=d-b.fee,QX=E-jX;if(QX<=0)throw new k("toolbox_utxo_rbf_insufficient_change");let r=new nX({allowLegacyWitnessUtxo:!0,version:1}),fX=[{address:H,value:QX},...O?[{address:"",script:A(O),value:0}]:[]],PX=y-QX-d,BX=await U();if(PX>CX(X)&&BX)fX.push({address:BX,value:PX});return XX({chain:X,compiledMemo:_X,inputs:c,outputs:fX,sender:BX||H,tx:r}),{feeDelta:jX,newFee:d,originalFee:b.fee,tx:r}}async function u({txid:N,newFeeRate:M,recipient:H,memo:O}){let{tx:b,originalFee:y,newFee:S}=await p({memo:O,newFeeRate:M,recipient:H,txid:N}),E=await lX(b);E.finalize();let c=await f(X).broadcastTx(e.encode(E.extract()));return{newFee:S,originalFee:y,txid:c}}function R({accountIndex:N,index:M,change:H=!1}){w("index",M);let O=N===void 0?_:z(N);if(!O)return;return O.deriveChild(Number(H)).deriveChild(M).privateKey||void 0}function l({tx:N,inputDerivations:M}){if(!_)throw new k("toolbox_utxo_no_signer");let H=X===I.BitcoinCash?[sX.ALL]:[C2.ALL];for(let O=0;O<M.length;O++){let b=M[O];if(!b)continue;let{derivationIndex:y,isChange:S}=b,E=R({change:S,index:y});if(!E)throw new k("toolbox_utxo_invalid_params",{error:`Could not derive private key for input ${O} at index ${y}`});N.signIdx(E,O,H)}return N}async function kX({utxos:N,recipient:M,assetValue:H,memo:O,feeRate:b,feeOptionKey:y,changeAddress:S,sweep:E}){if(E)throw new k("toolbox_utxo_invalid_params",{error:"Sweep is not supported for transfers from multiple addresses"});if(!_)throw new k("toolbox_utxo_no_signer");let c=b||(await WX(X))[y||m.Fast],_X=O?A(O):null,IX=[{address:M,value:H.getBaseValue("number")}];if(_X)IX.push({address:"",script:_X,value:0});let d=N.map(({hash:T,index:x,value:TX,txHex:o2,witnessUtxo:xX})=>({hash:T,index:x,txHex:o2,value:TX,witnessUtxo:xX?{script:xX.script,value:xX.value}:void 0})),{inputs:jX,outputs:QX}=v({chain:X,feeRate:c,inputs:d,outputs:IX});if(!(jX&&QX))throw new k("toolbox_utxo_insufficient_balance",{assetValue:H,sender:"multiple addresses"});let r=new nX({allowLegacyWitnessUtxo:!0,version:1}),fX=N[0]?.address,PX=S||await U()||fX||M;XX({chain:X,compiledMemo:_X,inputs:jX,outputs:QX,sender:PX,tx:r});let BX=jX.map((T)=>{let x=N.find((TX)=>TX.hash===T.hash&&TX.index===T.index);return x?{derivationIndex:x.derivationIndex,isChange:x.isChange}:{derivationIndex:0,isChange:!1}});return l({inputDerivations:BX,tx:r}),r.finalize(),f(X).broadcastTx(e.encode(r.extract()))}function VX({address:N,gapLimit:M=20}){if(!_)return;for(let H=0;H<M;H++){let O=D({change:!1,index:H}),b=D({change:!0,index:H}),y=O?.address===N?!1:b?.address===N;if(O?.address===N||b?.address===N)return{change:y,index:H}}return}function lX(N){if(!G)throw new k("toolbox_utxo_no_signer");return G.signTransaction(N)}async function c2(N){let M=await lX(N);return M.finalize(),await f(X).broadcastTx(e.encode(M.extract()))}return{accumulative:v,broadcastTx:(N)=>f(X).broadcastTx(N),bumpFee:u,calculateTxSize:YX,createKeysForPath:(N)=>zX({...N,chain:X}),createReplacementTransaction:p,createTransaction:V2,deriveAddressAtIndex:D,derivePrivateKeyAtIndex:R,estimateMaxSendableAmount:S0(X),estimateTransactionFee:w0(X),getAddress:U,getAddressFromKeys:P2(X),getBalance:N2(X),getExtendedPublicKey:B,getExtendedPublicKeyInfo:C,getFeeRates:()=>WX(X),getInputsOutputsFee:I2,getNetworkForChain:()=>F(X),getPrivateKeyFromMnemonic:(N)=>A0(zX({...N,chain:X}).privateKey,X),isRBFEnabled:V,keys:W,resolveDerivationIndex:VX,signAndBroadcastTransaction:c2,signTransaction:lX,signTransactionWithMultipleKeys:l,transfer:m0(X,G),transferFromMultipleAddresses:kX,validateAddress:f2(X)}}var g=g0.BitcoinCash;function mX(X){return qX(yX(X))}function u0(X){let $=F(g);function J(Q){return Q.sign(X.privateKey,[o0.ALL]),Q}function j(){let Q=y2(X.publicKey,$);if(!Q.hash)throw new h("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});let Z=R2({hash:Q.hash,prefix:F2.MAINNET,type:E2.P2PKH});return Promise.resolve(Z.replace(/^bitcoincash:/,""))}return{getAddress:j,signTransaction:J}}function v2(X){let $="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,j=l0("derivationPath"in X&&X.derivationPath?X.derivationPath:c0(h0[g],{index:J})),Q=$?zX({chain:g,derivationPath:j,phrase:$}):void 0,Z=Q?u0(Q):("signer"in X)?X.signer:void 0;function L(){return Promise.resolve(Z?.getAddress())}let{getBalance:Y,getFeeRates:q,broadcastTx:G,...W}=$X({chain:g});function U(B,C=!0){return Y(qX(yX(B)))}function z(B){if(!Z)throw new h("toolbox_utxo_no_signer");return Z.signTransaction(B)}async function _(B){let C=await z(B);return C.finalize(),await G(T2.encode(C.extract()))}return{...W,broadcastTx:G,buildTx:r0,createTransaction:S2,getAddress:L,getAddressFromKeys:n0,getBalance:U,getFeeRates:q,signAndBroadcastTransaction:_,signTransaction:z,stripPrefix:qX,stripToCashAddress:mX,transfer:d0({broadcastTx:G,getFeeRates:q,signer:Z}),validateAddress:t}}async function S2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q,sweep:Z}){if(!t($))throw new h("toolbox_utxo_invalid_address",{address:$});let L=Math.ceil(X.getBaseValue("number")+j*7500),Y=await f(g).getUtxos({address:mX(Q),fetchTxHex:!0,targetValue:Z?void 0:L}),q=J?A(J):null,G=[],W=o($);if(G.push({address:W,value:Z?0:X.getBaseValue("number")}),q)G.push({script:q,value:0});let{inputs:U,outputs:z}=v({chain:g,feeRate:j,inputs:Y,outputs:G,sweep:Z});if(!(U&&z))throw new h("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new A2({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!q,version:1}),B=o(Q),{inputs:C,tx:D}=XX({chain:g,compiledMemo:q,inputs:U,outputs:z.map((V)=>("address"in V)&&V.address?{...V,address:o(V.address)}:V),sender:B,tx:_});return{inputs:C,tx:D,utxos:U}}function d0({broadcastTx:X,getFeeRates:$,signer:J}){return async function({recipient:Q,assetValue:Z,feeOptionKey:L=x0.Fast,sweep:Y,...q}){let G=await J?.getAddress();if(!(J&&G))throw new h("toolbox_utxo_no_signer");if(!Q)throw new h("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let W=q.feeRate||(await $())[L],{tx:U}=await S2({...q,assetValue:Z,feeRate:W,recipient:Q,sender:G,sweep:Y}),z=await J.signTransaction(U);return z.finalize(),X(T2.encode(z.extract()))}}async function r0({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q}){let Z=yX($);if(!t(Z))throw new h("toolbox_utxo_invalid_address",{address:Z});let L=Math.ceil(X.getBaseValue("number")+j*7500),Y=await f(g).getUtxos({address:mX(Q),fetchTxHex:!0,targetValue:L}),q=Number(j.toFixed(0)),G=J?A(J):null,W=[];if(W.push({address:o($),value:X.getBaseValue("number")}),G)W.push({script:G,value:0});let{inputs:U,outputs:z}=v({chain:g,feeRate:q,inputs:Y,outputs:W});if(!(U&&z))throw new h("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new A2({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!G,version:1}),{inputs:B,tx:C}=XX({chain:g,compiledMemo:G,inputs:U,outputs:z,sender:o(Q),tx:_});return{inputs:B,tx:C,utxos:Y}}function n0(X){let $=p0.bitcoinCash,J=y2(X.publicKey,$);if(!J.hash)throw new h("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return R2({hash:J.hash,prefix:F2.MAINNET,type:E2.P2PKH}).replace(/^bitcoincash:/,"")}import{createBase58check as i0,hex as s0}from"@scure/base";import{HDKey as m2}from"@scure/bip32";import{mnemonicToSeedSync as g2}from"@scure/bip39";import{Chain as gX,derivationPathToString as a0,FeeOption as t0,NetworkDerivationPath as e0,SKConfig as l2,SwapKitError as JX,updateDerivationPath as X1}from"@swapkit/helpers";import{Address as $1,createZcashTransaction as J1,isTransparentZcashAddress as w2,OutScript as j1,PCZT as Q1,utils as x2,WIF as Z1,ZCASH_NETWORK as G1,ZCASH_TEST_NETWORK as Y1,ZcashConsensusBranchId as q1,ZcashPSBT as L1,ZcashSigHash as aX,ZcashVersionGroupId as z1}from"@swapkit/utxo-signer";import{match as W1,P as tX}from"ts-pattern";function eX(){let{isStagenet:X}=l2.get("envs");return X?Y1:G1}var U1=i0(x2.sha256);function _1(X){return U1.encode(X)}function B1({phrase:X,derivationPath:$}){let J=g2(X),Q=m2.fromMasterSeed(J).derive($);if(!Q.privateKey||!Q.publicKey)throw new JX("toolbox_utxo_invalid_params");let{privateKey:Z,publicKey:L}=Q,Y=x2.hash160(L),{isStagenet:q}=l2.get("envs"),G=q?new Uint8Array([29,37]):new Uint8Array([28,184]),W=new Uint8Array(G.length+Y.length);W.set(G,0),W.set(Y,G.length);let U=_1(W);return{getAddress:()=>Promise.resolve(U),signTransaction:(z)=>{if(z instanceof L1){let _=z.toPCZT();return _.signAllInputs(Z,L,aX.ALL),_.finalizeAllInputs(),Promise.resolve(_.extract())}if(z instanceof Q1)return z.signAllInputs(Z,L,aX.ALL),z.finalizeAllInputs(),Promise.resolve(z.extract());return z.signAllInputs(Z,L,aX.ALL),Promise.resolve(z)}}}function N1({inputs:X,outputs:$,tx:J,sender:j,compiledMemo:Q}){let Z=eX();for(let L of X){let Y=$1(Z).decode(j),q=j1.encode(Y);J.addInput({index:L.index,script:q,sequence:4294967295,txid:s0.decode(L.hash),value:BigInt(L.value)})}for(let L of $){let Y="address"in L&&L.address?L.address:j,q=L.script;if(q&&!Q)continue;if(q&&Q)J.addOutput({amount:0n,script:Q});else J.addOutputAddress(Y,BigInt(L.value),Z)}return{inputs:X,tx:J}}async function K2(X){let{assetValue:$,recipient:J,memo:j,feeRate:Q,sender:Z,fetchTxHex:L,sweep:Y}=X,q=eX();if(!w2(Z,q))throw new JX("toolbox_utxo_invalid_address",{address:Z});if(!w2(J,q))throw new JX("toolbox_utxo_invalid_address",{address:J,error:"Zcash transaction creation currently supports transparent addresses only"});let G=j?A(j):null,W=await f(gX.Zcash).getUtxos({address:Z,fetchTxHex:L!==!1}),U=[{address:J,value:Y?0:Number($.getBaseValue("string"))},...G?[{script:G,value:0}]:[]],{inputs:z,outputs:_}=v({chain:gX.Zcash,changeAddress:Z,feeRate:Q,inputs:W,outputs:U,sweep:Y});if(!(z&&_))throw new JX("toolbox_utxo_insufficient_balance",{assetValue:$,sender:Z});let B=J1({consensusBranchId:q1.NU6_2,expiryHeight:0,lockTime:0,version:4,versionGroupId:z1.SAPLING}),{tx:C,inputs:D}=N1({compiledMemo:G,inputs:z,outputs:_,sender:Z,tx:B});return{inputs:D,outputs:_,tx:C}}function h2(X){let $=W1(X).with({signer:tX.not(tX.nullish)},({signer:q})=>q).with({phrase:tX.string},({phrase:q,derivationPath:G,index:W=0})=>{let U=G||e0[gX.Zcash]||[44,133,0,0,0],z=X1(U,{index:W}),_=a0(z);return B1({derivationPath:_,phrase:q})}).otherwise(()=>{return}),J=$X({chain:gX.Zcash,signer:$});async function j(q){if(!$)throw new JX("toolbox_utxo_no_signer");return await $.signTransaction(q)}async function Q(q){let G=await j(q);return J.broadcastTx(G.toHex())}async function Z({recipient:q,assetValue:G,feeOptionKey:W=t0.Fast,sweep:U,...z}){let _=await $?.getAddress();if(!($&&_))throw new JX("toolbox_utxo_no_signer");let B=z.feeRate||(await J.getFeeRates())[W],{tx:C}=await K2({...z,assetValue:G,feeRate:B,recipient:q,sender:_,sweep:U}),V=(await $.signTransaction(C)).toHex();return J.broadcastTx(V)}function L({phrase:q,derivationPath:G="m/44'/133'/0'/0/0"}){let W=g2(q),z=m2.fromMasterSeed(W).derive(G);if(!z.privateKey||!z.publicKey)throw new JX("toolbox_utxo_invalid_params");return{privateKey:z.privateKey,publicKey:z.publicKey}}function Y({phrase:q,derivationPath:G="m/44'/133'/0'/0/0"}){let W=L({derivationPath:G,phrase:q}),U=eX();return Z1(U).encode(W.privateKey)}return{...J,createKeysForPath:L,createTransaction:K2,getPrivateKeyFromMnemonic:Y,signAndBroadcastTransaction:Q,signTransaction:j,transfer:Z,validateAddress:HX}}import{hex as M1}from"@scure/base";import{HDKey as D1}from"@scure/bip32";import{derivationPathToString as C1}from"@swapkit/helpers";function H1({xpub:X,chain:$,count:J,startIndex:j=0,accountIndex:Q}){if(w("count",J),J<1)throw RangeError("count must be at least 1");w("startIndex",j);let Z=F($),L=D1.fromExtendedKey(X,Z.bip32),Y=n({accountIndex:Q,chain:$}),q=ZX(Y),G=[];for(let W of[!1,!0]){let U=L.deriveChild(Number(W));for(let z=0;z<J;z++){let _=j+z,B=U.deriveChild(_);if(!B.publicKey)continue;let C=NX({accountIndex:Q,chain:$,change:W,index:_});G.push({accountIndex:q,address:bX({chain:$,network:Z,publicKey:B.publicKey}),change:W,index:_,path:C1(C),pubkey:M1.encode(B.publicKey)})}}return G}function K8(X,$){switch(X){case UX.BitcoinCash:return v2($||{});case UX.Zcash:return h2($);case UX.Bitcoin:case UX.Dogecoin:case UX.Litecoin:case UX.Dash:return $X({chain:X,...$});default:throw new O1("toolbox_utxo_not_supported",{chain:X})}}export{HX as validateZcashAddress,b2 as validateUtxoAddress,t as validateBchAddress,o as toLegacyAddress,yX as toCashAddress,mX as stripToCashAddress,qX as stripPrefix,KX as nonSegwitChains,z2 as isValidAddress,K8 as getUtxoToolbox,T1 as getUtxoNetwork,f as getUtxoApi,f2 as getUTXOAddressValidator,NX as getUTXOAddressPath,n as getUTXOAccountPath,ZX as getUTXOAccountIndexFromPath,DX as getScriptTypeForAddress,SX as getOutputSize,F as getNetworkForChain,s as getInputSize,CX as getDustThreshold,W2 as detectAddressNetwork,H1 as deriveAddressesFromXpub,h2 as createZcashToolbox,$X as createUTXOToolbox,u2 as createHDWalletHelpers,P1 as createCustomUtxoApi,v2 as createBCHToolbox,A as compileMemo,YX as calculateTxSize,w as assertDerivationIndex,P2 as addressFromKeysGetter,XX as addInputsAndOutputs,v as accumulative,L2 as UtxoNetwork,uX as UTXOScriptType,oX as TX_OVERHEAD,pX as SEGWIT_MARKER_FLAG_WEIGHT,vX as OutputSizes,C0 as OP_RETURN_OVERHEAD,g1 as MIN_TX_FEE,cX as InputSizes};
|
|
@@ -3,18 +3,22 @@ import type { AptosCreateTransactionParams, AptosExtensionProvider, AptosToolbox
|
|
|
3
3
|
export declare function validateAptosAddress(address: string): boolean;
|
|
4
4
|
export declare function getAptosToolbox({ derivationPath, provider: providerParam, ...signerParams }?: AptosToolboxParams): {
|
|
5
5
|
broadcastTransaction: ({ senderAuthenticator, transaction, }: {
|
|
6
|
-
senderAuthenticator: Awaited<ReturnType<(transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>) => Promise<import("@aptos-labs/ts-sdk").AccountAuthenticator>>>;
|
|
7
|
-
transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>;
|
|
6
|
+
senderAuthenticator: Awaited<ReturnType<(transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>) => Promise<import("@aptos-labs/ts-sdk").AccountAuthenticator>>>;
|
|
7
|
+
transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>;
|
|
8
8
|
}) => Promise<string>;
|
|
9
|
-
createTransaction: ({ recipient, assetValue, maxGasAmount, sender: _senderAddress, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>;
|
|
9
|
+
createTransaction: ({ recipient, assetValue, maxGasAmount, sender: _senderAddress, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>;
|
|
10
10
|
estimateTransactionFee: (params?: AptosCreateTransactionParams) => Promise<AssetValue>;
|
|
11
11
|
getAddress: () => Promise<"" | `0x${string}`>;
|
|
12
12
|
getBalance: (targetAddress?: string) => Promise<AssetValue[]>;
|
|
13
|
-
signAndBroadcastTransaction: (transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>) => Promise<string>;
|
|
14
|
-
signTransaction: (transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>) => Promise<import("@aptos-labs/ts-sdk").AccountAuthenticator>;
|
|
15
|
-
transfer: ({ assetValue, maxGasAmount, recipient }: AptosTransferParams) => Promise<string>;
|
|
13
|
+
signAndBroadcastTransaction: (transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>) => Promise<string>;
|
|
14
|
+
signTransaction: (transaction: Awaited<ReturnType<({ recipient, assetValue, maxGasAmount, sender: _senderAddress, sweep, }: AptosCreateTransactionParams) => Promise<import("@aptos-labs/ts-sdk").SimpleTransaction>>>) => Promise<import("@aptos-labs/ts-sdk").AccountAuthenticator>;
|
|
15
|
+
transfer: ({ assetValue, maxGasAmount, recipient, sweep }: AptosTransferParams) => Promise<string>;
|
|
16
16
|
validateAddress: typeof validateAptosAddress;
|
|
17
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Extension wallets control gas parameters themselves, so the fee reserve for a native sweep cannot
|
|
20
|
+
* be computed at build time, and this factory has no Aptos client for token balance lookups.
|
|
21
|
+
*/
|
|
18
22
|
export declare function createAptosExtensionTransfer({ provider }: {
|
|
19
23
|
provider: AptosExtensionProvider;
|
|
20
|
-
}): ({ assetValue, recipient }: AptosTransferParams) => Promise<string>;
|
|
24
|
+
}): ({ assetValue, recipient, sweep }: AptosTransferParams) => Promise<string>;
|
|
@@ -14,7 +14,7 @@ export declare function getCardanoToolbox(toolboxParams?: {
|
|
|
14
14
|
index?: number;
|
|
15
15
|
derivationPath?: DerivationPathArray;
|
|
16
16
|
}): {
|
|
17
|
-
createTransaction: ({ sender, recipient, assetValue, memo, pureLovelaceOnly, }: CardanoCreateTransactionParams) => Promise<{
|
|
17
|
+
createTransaction: ({ sender, recipient, assetValue, memo, pureLovelaceOnly, sweep, }: CardanoCreateTransactionParams) => Promise<{
|
|
18
18
|
tx: Transaction;
|
|
19
19
|
unsignedTx: string;
|
|
20
20
|
}>;
|
|
@@ -23,7 +23,7 @@ export declare function getCardanoToolbox(toolboxParams?: {
|
|
|
23
23
|
getBalance: (addressParam?: string) => Promise<AssetValue[]>;
|
|
24
24
|
signAndBroadcastTransaction: (txInput: string) => Promise<string>;
|
|
25
25
|
signTransaction: (tx: string) => Promise<string>;
|
|
26
|
-
transfer: ({ recipient, assetValue, memo }: CardanoTransferParams) => Promise<string>;
|
|
26
|
+
transfer: ({ recipient, assetValue, memo, sweep }: CardanoTransferParams) => Promise<string>;
|
|
27
27
|
validateAddress: typeof validateCardanoAddress;
|
|
28
28
|
};
|
|
29
29
|
export type CardanoWallet = ReturnType<typeof getCardanoToolbox>;
|
|
@@ -86,7 +86,7 @@ export declare function createTransaction(params: ThorchainCreateTransactionPara
|
|
|
86
86
|
};
|
|
87
87
|
})[];
|
|
88
88
|
sequence: number;
|
|
89
|
-
}
|
|
89
|
+
} | {
|
|
90
90
|
accountNumber: number;
|
|
91
91
|
chainId: import("@swapkit/types").ChainId.Maya | import("@swapkit/types").ChainId.THORChain;
|
|
92
92
|
fee: {
|
|
@@ -110,6 +110,7 @@ export declare function createTransaction(params: ThorchainCreateTransactionPara
|
|
|
110
110
|
})[];
|
|
111
111
|
sequence: number;
|
|
112
112
|
}>;
|
|
113
|
+
export declare function resolveThorchainSweepAssetValue({ assetValue, sender, }: Pick<ThorchainCreateTransactionParams, "assetValue" | "sender">): Promise<AssetValue>;
|
|
113
114
|
export declare function buildTransferTx({ sender, recipient, assetValue, memo, asSignable, asAminoMessage, sequence, accountNumber, }: ThorchainCreateTransactionParams): Promise<{
|
|
114
115
|
accountNumber: number;
|
|
115
116
|
chainId: import("@swapkit/types").ChainId.Maya | import("@swapkit/types").ChainId.THORChain;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { type TCLikeChain } from "@swapkit/helpers";
|
|
2
2
|
export declare function createDefaultRegistry(): Promise<import("@cosmjs/proto-signing/build").Registry>;
|
|
3
|
-
export declare function createDefaultAminoTypes(chain: TCLikeChain): Promise<import("@cosmjs/stargate/build").AminoTypes>;
|
|
3
|
+
export declare function createDefaultAminoTypes(chain: TCLikeChain, addressPrefix?: string): Promise<import("@cosmjs/stargate/build").AminoTypes>;
|
|
@@ -47,7 +47,7 @@ export declare function createCosmosToolbox({ chain, ...toolboxParams }: CosmosT
|
|
|
47
47
|
getSignerFromPrivateKey: (privateKey: Uint8Array) => Promise<import("@cosmjs/proto-signing/build").DirectSecp256k1Wallet>;
|
|
48
48
|
signAndBroadcastTransaction: (transaction: CosmosTransaction) => Promise<string>;
|
|
49
49
|
signTransaction: (transaction: CosmosTransaction) => Promise<TxRaw>;
|
|
50
|
-
transfer: ({ recipient, assetValue, memo, feeRate, feeOptionKey, }: GenericTransferParams) => Promise<string>;
|
|
50
|
+
transfer: ({ recipient, assetValue, memo, feeRate, feeOptionKey, sweep, }: GenericTransferParams) => Promise<string>;
|
|
51
51
|
validateAddress: (address: string) => boolean;
|
|
52
52
|
verifySignature: ({ signature, message, address, }: {
|
|
53
53
|
signature: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Pubkey, Secp256k1HdWallet } from "@cosmjs/amino";
|
|
2
|
-
import { type GenericTransferParams,
|
|
2
|
+
import { type GenericTransferParams, type TCLikeChain } from "@swapkit/helpers";
|
|
3
3
|
import type { CosmosTransaction } from "@swapkit/helpers/api";
|
|
4
4
|
import { buildEncodedTxBody, createDefaultRegistry, createTransaction, parseAminoMessageForDirectSigning } from "../thorchainUtils";
|
|
5
5
|
import type { CosmosToolboxParams, MultiSigSigner, MultisigTx } from "../types";
|
|
@@ -63,13 +63,13 @@ export declare function createThorchainToolbox({ chain, ...toolboxParams }: Cosm
|
|
|
63
63
|
createDefaultRegistry: typeof createDefaultRegistry;
|
|
64
64
|
createMultisig: typeof createMultisig;
|
|
65
65
|
createTransaction: typeof createTransaction;
|
|
66
|
-
deposit: ({ assetValue, memo, recipient, }: Omit<GenericTransferParams, "recipient"> & {
|
|
66
|
+
deposit: ({ assetValue, memo, recipient, sweep, }: Omit<GenericTransferParams, "recipient"> & {
|
|
67
67
|
recipient?: string;
|
|
68
68
|
}) => Promise<string>;
|
|
69
69
|
getFees: () => Promise<{
|
|
70
|
-
average: SwapKitNumber;
|
|
71
|
-
fast: SwapKitNumber;
|
|
72
|
-
fastest: SwapKitNumber;
|
|
70
|
+
average: import("@swapkit/helpers").SwapKitNumber;
|
|
71
|
+
fast: import("@swapkit/helpers").SwapKitNumber;
|
|
72
|
+
fastest: import("@swapkit/helpers").SwapKitNumber;
|
|
73
73
|
}>;
|
|
74
74
|
importSignature: typeof importSignature;
|
|
75
75
|
parseAminoMessageForDirectSigning: typeof parseAminoMessageForDirectSigning;
|
|
@@ -85,7 +85,7 @@ export declare function createThorchainToolbox({ chain, ...toolboxParams }: Cosm
|
|
|
85
85
|
}>;
|
|
86
86
|
signTransaction: (transaction: CosmosTransaction) => Promise<import("cosmjs-types/cosmos/tx/v1beta1/tx").TxRaw>;
|
|
87
87
|
signWithPrivateKey: typeof signWithPrivateKey;
|
|
88
|
-
transfer: ({ assetValue, memo, recipient, }: Omit<GenericTransferParams, "recipient"> & {
|
|
88
|
+
transfer: ({ assetValue, memo, recipient, sweep, }: Omit<GenericTransferParams, "recipient"> & {
|
|
89
89
|
recipient?: string;
|
|
90
90
|
}) => Promise<string>;
|
|
91
91
|
createPrivateKeyFromPhrase: (phrase: string) => Promise<Uint8Array<ArrayBufferLike>>;
|