@swapkit/toolboxes 4.15.4 → 4.15.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/aptos/index.cjs +1 -1
- package/dist/src/cardano/index.cjs +1 -1
- package/dist/src/cosmos/index.cjs +1 -1
- package/dist/src/evm/index.cjs +1 -1
- package/dist/src/hypercore/index.cjs +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.cjs +1 -1
- package/dist/src/ripple/index.cjs +1 -1
- package/dist/src/solana/index.cjs +1 -1
- package/dist/src/starknet/index.cjs +1 -1
- package/dist/src/stellar/index.cjs +1 -1
- package/dist/src/substrate/index.cjs +1 -1
- package/dist/src/sui/index.cjs +1 -1
- package/dist/src/ton/index.cjs +1 -1
- package/dist/src/tron/index.cjs +1 -1
- package/dist/src/utxo/index.cjs +1 -1
- package/dist/types/near/helpers/core.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/src/tron/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var __create=Object.create;var{getPrototypeOf:__getProtoOf,defineProperty:__defProp,getOwnPropertyNames:__getOwnPropNames,getOwnPropertyDescriptor:__getOwnPropDesc}=Object,__hasOwnProp=Object.prototype.hasOwnProperty;function __accessProp(key){return this[key]}var __toESMCache_node,__toESMCache_esm,__toESM=(mod,isNodeMode,target)=>{var canCache=mod!=null&&typeof mod==="object";if(canCache){var cache=isNodeMode?__toESMCache_node??=new WeakMap:__toESMCache_esm??=new WeakMap,cached=cache.get(mod);if(cached)return cached}target=mod!=null?__create(__getProtoOf(mod)):{};let to=isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target;for(let key of __getOwnPropNames(mod))if(!__hasOwnProp.call(to,key))__defProp(to,key,{get:__accessProp.bind(mod,key),enumerable:!0});if(canCache)cache.set(mod,to);return to},__toCommonJS=(from)=>{var entry=(__moduleCache??=new WeakMap).get(from),desc;if(entry)return entry;if(entry=__defProp({},"__esModule",{value:!0}),from&&typeof from==="object"||typeof from==="function"){for(var key of __getOwnPropNames(from))if(!__hasOwnProp.call(entry,key))__defProp(entry,key,{get:__accessProp.bind(from,key),enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return __moduleCache.set(from,entry),entry},__moduleCache;var __returnValue=(v)=>v;function __exportSetter(name,newValue){this[name]=__returnValue.bind(null,newValue)}var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0,configurable:!0,set:__exportSetter.bind(all,name)})};var __esm=(fn,res)=>()=>(fn&&(res=fn(fn=0)),res);function decodeVarint(bytes,offset){let result=0n,shift=0n,pos=offset;while(pos<bytes.length&&pos-offset<10){let byte=bytes[pos++];if(byte===void 0)break;if(result|=BigInt(byte&127)<<shift,shift+=7n,(byte&128)===0)return[result,pos]}throw new import_helpers.SwapKitError("toolbox_tron_transaction_creation_failed")}function encodeVarint(value){let bytes=[],v=value<0n?value+2n**64n:value;while(v>=128n)bytes.push(Number(v&0x7fn)|128),v>>=7n;return bytes.push(Number(v)),bytes}function addField(fields,fieldNumber,value){let existing=fields.get(fieldNumber);if(existing)existing.push(value);else fields.set(fieldNumber,[value])}function parseProtoFields(bytes){let fields=new Map,pos=0;while(pos<bytes.length){let[keyLong,newPos]=decodeVarint(bytes,pos);pos=newPos;let fieldNumber=Number(keyLong>>3n),wireType=Number(keyLong&7n);if(wireType===WIRE_VARINT){let[value,p]=decodeVarint(bytes,pos);pos=p,addField(fields,fieldNumber,{data:new Uint8Array(encodeVarint(value)),wireType:WIRE_VARINT})}else if(wireType===WIRE_LENGTH_DELIMITED){let[len,p]=decodeVarint(bytes,pos);pos=p;let numLen=Number(len);if(numLen<0||pos+numLen>bytes.length)throw new import_helpers.SwapKitError("toolbox_tron_transaction_creation_failed");let data=bytes.slice(pos,pos+numLen);pos+=numLen,addField(fields,fieldNumber,{data,wireType:WIRE_LENGTH_DELIMITED})}else if(wireType===WIRE_64BIT){if(pos+8>bytes.length)throw new import_helpers.SwapKitError("toolbox_tron_transaction_creation_failed");let data=bytes.slice(pos,pos+8);pos+=8,addField(fields,fieldNumber,{data,wireType:WIRE_64BIT})}else if(wireType===WIRE_32BIT){if(pos+4>bytes.length)throw new import_helpers.SwapKitError("toolbox_tron_transaction_creation_failed");let data=bytes.slice(pos,pos+4);pos+=4,addField(fields,fieldNumber,{data,wireType:WIRE_32BIT})}else throw new import_helpers.SwapKitError("toolbox_tron_transaction_creation_failed")}return fields}function encodeProtoFields(fields){let chunks=[];for(let[fieldNumber,values]of[...fields.entries()].sort(([a],[b])=>a-b))for(let{wireType,data}of values){let key=BigInt(fieldNumber<<3|wireType);if(chunks.push(new Uint8Array(encodeVarint(key))),wireType===WIRE_LENGTH_DELIMITED)chunks.push(new Uint8Array(encodeVarint(BigInt(data.length))));chunks.push(data)}let totalLength=chunks.reduce((sum,c)=>sum+c.length,0),result=new Uint8Array(totalLength),offset=0;for(let chunk of chunks)result.set(chunk,offset),offset+=chunk.length;return result}function patchTransactionRawData(rawDataHex,patches){if(!rawDataHex||rawDataHex.length%2!==0)throw new import_helpers.SwapKitError("toolbox_tron_transaction_creation_failed");let bytes=import_utils.hexToBytes(rawDataHex),fields=parseProtoFields(bytes);if(patches.expiration!==void 0)fields.set(FIELD_EXPIRATION,[{data:new Uint8Array(encodeVarint(BigInt(patches.expiration))),wireType:WIRE_VARINT}]);if(patches.data!==void 0)fields.set(FIELD_DATA,[{data:import_utils.hexToBytes(patches.data),wireType:WIRE_LENGTH_DELIMITED}]);if(patches.fee_limit!==void 0)fields.set(FIELD_FEE_LIMIT,[{data:new Uint8Array(encodeVarint(BigInt(patches.fee_limit))),wireType:WIRE_VARINT}]);let newBytes=encodeProtoFields(fields),newHex=import_utils.bytesToHex(newBytes),txID=import_utils.bytesToHex(import_sha2.sha256(newBytes));return{raw_data_hex:newHex,txID}}var import_sha2,import_utils,import_helpers,WIRE_VARINT=0,WIRE_64BIT=1,WIRE_LENGTH_DELIMITED=2,WIRE_32BIT=5,FIELD_EXPIRATION=8,FIELD_DATA=10,FIELD_FEE_LIMIT=18;var init_proto=__esm(()=>{import_sha2=require("@noble/hashes/sha2.js"),import_utils=require("@noble/hashes/utils.js"),import_helpers=require("@swapkit/helpers")});function isValidTronAddress(address){if(typeof address!=="string")return!1;try{let decoded=TRON_BASE58.decode(address);return decoded.length===21&&decoded[0]===TRON_ADDRESS_PREFIX}catch{return!1}}function tronAddressToHex(address){return import_utils2.bytesToHex(TRON_BASE58.decode(address))}function tronAddressToRaw20(address){return TRON_BASE58.decode(address).slice(1)}function privateKeyToTronAddress(privateKeyHex){let pubKey=import_secp256k1.secp256k1.getPublicKey(import_utils2.hexToBytes(privateKeyHex),!1),ethAddress=import_sha3.keccak_256(pubKey.slice(1)).slice(-20),tronBytes=new Uint8Array(21);return tronBytes[0]=TRON_ADDRESS_PREFIX,tronBytes.set(ethAddress,1),TRON_BASE58.encode(tronBytes)}function signTronTransaction({txID,privateKey}){let sig=import_secp256k1.secp256k1.sign(import_utils2.hexToBytes(txID),import_utils2.hexToBytes(privateKey),{format:"recovered",prehash:!1}),recovery=sig[0]??0,r=import_utils2.bytesToHex(sig.slice(1,33)),s=import_utils2.bytesToHex(sig.slice(33,65)),v=(recovery+27).toString(16).padStart(2,"0");return r+s+v}function validateTransactionIntegrity({txID,raw_data_hex}){let expected=import_utils2.bytesToHex(import_sha22.sha256(import_utils2.hexToBytes(raw_data_hex)));if(txID!==expected)throw new import_helpers2.SwapKitError("toolbox_tron_invalid_transaction_integrity",{expected,txID})}function encodeABIAddress(tronAddress){return`000000000000000000000000${import_utils2.bytesToHex(tronAddressToRaw20(tronAddress))}`}function encodeABIUint256(value){let bigVal=typeof value==="bigint"?value:BigInt(value);if(bigVal<0n||bigVal>=UINT256_MAX)throw new import_helpers2.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:bigVal.toString()});return bigVal.toString(16).padStart(64,"0")}function buildTRC20Parameter(params){return params.map(({type,value})=>type==="address"?encodeABIAddress(value):encodeABIUint256(BigInt(value))).join("")}function memoToHex(memo){return import_utils2.bytesToHex(new TextEncoder().encode(memo))}var import_secp256k1,import_sha22,import_sha3,import_utils2,import_base,import_helpers2,TRON_BASE58,TRON_ADDRESS_PREFIX=65,UINT256_MAX;var init_utils=__esm(()=>{import_secp256k1=require("@noble/curves/secp256k1.js"),import_sha22=require("@noble/hashes/sha2.js"),import_sha3=require("@noble/hashes/sha3.js"),import_utils2=require("@noble/hashes/utils.js"),import_base=require("@scure/base"),import_helpers2=require("@swapkit/helpers"),TRON_BASE58=import_base.createBase58check(import_sha22.sha256),UINT256_MAX=2n**256n});function getApiBase(){try{return import_helpers3.getRPCUrlSync(import_helpers3.Chain.Tron)}catch{return TRONGRID_FALLBACK}}function createAbortSignal(){let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),FETCH_TIMEOUT_MS);return{cleanup:()=>clearTimeout(timeout),signal:controller.signal}}async function tronPost(path,body){let{signal,cleanup}=createAbortSignal();try{let response=await fetch(`${getApiBase()}${path}`,{body:JSON.stringify(body),headers:{"Content-Type":"application/json"},method:"POST",signal});if(!response.ok)throw new import_helpers3.SwapKitError("toolbox_tron_trongrid_api_error",{message:`${response.status} ${response.statusText} on ${path}`});return await response.json()}finally{cleanup()}}async function tronGet(path,baseUrl){let{signal,cleanup}=createAbortSignal();try{let response=await fetch(`${baseUrl??getApiBase()}${path}`,{headers:{"Content-Type":"application/json"},signal});if(!response.ok)throw new import_helpers3.SwapKitError("toolbox_tron_trongrid_api_error",{message:`${response.status} ${response.statusText} on ${path}`});return await response.json()}finally{cleanup()}}async function fetchAccountFromTronGrid(address){if(!isValidTronAddress(address))throw new import_helpers3.SwapKitError("toolbox_tron_trongrid_api_error",{address,message:"Invalid address"});try{let data=await tronGet(`/v1/accounts/${address}`,TRONGRID_FALLBACK);if(!(data.success&&data.data)||data.data.length===0)return;let searchAddressHex;try{searchAddressHex=tronAddressToHex(address).toLowerCase()}catch{searchAddressHex=address.toLowerCase()}let account=data.data.find((acc)=>acc.address.toLowerCase()===searchAddressHex);if(!account)return;return{balance:account.balance,trc20:account.trc20||[]}}catch(error){if(error instanceof import_helpers3.SwapKitError)throw error;throw new import_helpers3.SwapKitError("toolbox_tron_trongrid_api_error",{address,message:error instanceof Error?error.message:"Unknown error"})}}async function buildTrxTransaction({from,to,amount}){let result=await tronPost("/wallet/createtransaction",{amount,owner_address:from,to_address:to,visible:!0});if(!result.txID||!result.raw_data_hex||!result.raw_data)throw new import_helpers3.SwapKitError("toolbox_tron_transaction_creation_failed");let params=result.raw_data?.contract?.[0]?.parameter?.value;if(params?.to_address!==to||params?.owner_address!==from||params?.amount!==amount)throw new import_helpers3.SwapKitError("toolbox_tron_transaction_creation_failed");return validateTransactionIntegrity(result),result}async function buildContractTransaction({ownerAddress,contractAddress,functionSelector,parameter,feeLimit,callValue=0}){let result=await tronPost("/wallet/triggersmartcontract",{call_value:callValue,contract_address:contractAddress,fee_limit:feeLimit,function_selector:functionSelector,owner_address:ownerAddress,parameter,visible:!0});if(!result.result.result||!result.transaction?.txID||!result.transaction?.raw_data_hex)throw new import_helpers3.SwapKitError("toolbox_tron_transaction_creation_failed");let params=result.transaction.raw_data?.contract?.[0]?.parameter?.value;if(params?.contract_address!==contractAddress||params?.owner_address!==ownerAddress)throw new import_helpers3.SwapKitError("toolbox_tron_transaction_creation_failed");return validateTransactionIntegrity(result.transaction),result.transaction}function simulateContractCall({ownerAddress,contractAddress,functionSelector,parameter}){return tronPost("/wallet/triggerconstantcontract",{contract_address:contractAddress,function_selector:functionSelector,owner_address:ownerAddress,parameter,visible:!0})}async function broadcastTronTransaction(signedTx){try{let{result,txid}=await tronPost("/wallet/broadcasttransaction",{raw_data:signedTx.raw_data,raw_data_hex:signedTx.raw_data_hex,signature:signedTx.signature,txID:signedTx.txID,visible:signedTx.visible});if(!result||!txid)throw new import_helpers3.SwapKitError("toolbox_tron_token_transfer_failed");return txid}catch(error){throw new import_helpers3.SwapKitError("toolbox_tron_broadcast_failed",{error})}}async function getTronChainParameters(){let paramMap={};try{let{chainParameter}=await tronGet("/wallet/getchainparameters");for(let param of chainParameter)paramMap[param.key]=param.value}catch(error){import_helpers3.warnOnce({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${error instanceof Error?error.message:error}`})}return{bandwidthFee:paramMap.getTransactionFee??DEFAULT_BANDWIDTH_FEE,createAccountFee:paramMap.getCreateAccountFee??DEFAULT_CREATE_ACCOUNT_FEE,energyFee:paramMap.getEnergyFee??DEFAULT_ENERGY_FEE}}async function getTronAccountResources(address){try{let result=await tronPost("/wallet/getaccountresource",{address,visible:!0});return{bandwidth:{free:(result.freeNetLimit??600)-(result.freeNetUsed??0),total:result.NetLimit??0,used:result.NetUsed??0},energy:{total:result.EnergyLimit??0,used:result.EnergyUsed??0}}}catch(error){return import_helpers3.warnOnce({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${error instanceof Error?error.message:error}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function checkTronAccountExists(address){try{let result=await tronPost("/wallet/getaccount",{address,visible:!0});return result&&Object.keys(result).length>0}catch{return!1}}async function estimateContractEnergy(params){try{let{energy_used}=await simulateContractCall({...params,ownerAddress:params.sender});return energy_used}catch(error){return import_helpers3.warnOnce({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy, using default: ${error instanceof Error?error.message:error}`}),65000}}async function getTrc20Allowance({assetAddress,owner,spender}){let parameter=buildTRC20Parameter([{type:"address",value:owner},{type:"address",value:spender}]),hexResult=(await simulateContractCall({contractAddress:assetAddress,functionSelector:"allowance(address,address)",ownerAddress:spender,parameter})).constant_result?.[0];if(!hexResult)return 0n;try{return BigInt(`0x${hexResult}`)}catch{return 0n}}var import_helpers3,TRONGRID_FALLBACK="https://api.trongrid.io",DEFAULT_BANDWIDTH_FEE=1000,DEFAULT_CREATE_ACCOUNT_FEE=1e5,DEFAULT_ENERGY_FEE=420,FETCH_TIMEOUT_MS=30000;var init_trongrid=__esm(()=>{init_utils();import_helpers3=require("@swapkit/helpers")});function derivePrivateKey({phrase,derivationPath}){let derived=import_bip32.HDKey.fromMasterSeed(import_bip39.mnemonicToSeedSync(phrase)).derive(derivationPath);if(!derived.privateKey)throw new import_helpers4.SwapKitError("toolbox_tron_no_signer");return import_utils4.bytesToHex(derived.privateKey)}function getTronPrivateKeyFromMnemonic({phrase,derivationPath:customPath,index}){let derivationPath=customPath||import_helpers4.derivationPathToString(import_helpers4.updateDerivationPath(import_helpers4.NetworkDerivationPath[import_helpers4.Chain.Tron],{index:index||0}));return derivePrivateKey({derivationPath,phrase})}function createKeysForPath({phrase,derivationPath}){let privateKey=derivePrivateKey({derivationPath,phrase}),address=privateKeyToTronAddress(privateKey);return{getAddress:()=>Promise.resolve(address),signTransaction:(transaction)=>{validateTransactionIntegrity(transaction);let signature=signTronTransaction({privateKey,txID:transaction.txID});return Promise.resolve({...transaction,signature:[signature]})}}}function prepareTx({transaction,memo,expiration,feeLimit}){let patches={},rawDataUpdates={};if(feeLimit!==void 0&&transaction.raw_data)patches.fee_limit=feeLimit,rawDataUpdates.fee_limit=feeLimit;if(memo){let memoHex=memoToHex(memo);patches.data=memoHex,rawDataUpdates.data=memoHex}if(expiration){let newExpiration=transaction.raw_data.expiration+expiration*1000;patches.expiration=newExpiration,rawDataUpdates.expiration=newExpiration}if(Object.keys(patches).length===0)return transaction;let{raw_data_hex,txID}=patchTransactionRawData(transaction.raw_data_hex,patches);return{...transaction,raw_data:{...transaction.raw_data,...rawDataUpdates},raw_data_hex,txID}}function getTronToolbox(options={}){let index="index"in options?options.index||0:0,derivationPath=import_helpers4.derivationPathToString("derivationPath"in options&&options.derivationPath?options.derivationPath:import_helpers4.updateDerivationPath(import_helpers4.NetworkDerivationPath[import_helpers4.Chain.Tron],{index})),cachedSigner,signerResolved=!1;function getSigner(){if(signerResolved)return Promise.resolve(cachedSigner);return cachedSigner=import_ts_pattern.match(options).with({phrase:import_ts_pattern.P.string},({phrase})=>createKeysForPath({derivationPath,phrase})).with({signer:import_ts_pattern.P.not(import_ts_pattern.P.nullish)},({signer})=>signer).otherwise(()=>{return}),signerResolved=!0,Promise.resolve(cachedSigner)}async function getAddress(){let signer=await getSigner();if(!signer)throw new import_helpers4.SwapKitError("toolbox_tron_no_signer");return signer.getAddress()}async function calculateFeeLimitFromEnergy(energyUsed){let energy=energyUsed||DEFAULT_TRC20_TRANSFER_ENERGY,chainParams=await getTronChainParameters(),estimatedFee=energy*chainParams.energyFee,feeWithBuffer=Math.ceil(estimatedFee*1.5);return Math.min(Math.max(feeWithBuffer,1e7),150000000)}async function buildContractTx({contractAddress,functionSelector,parameter,sender,memo,expiration}){let estimatedEnergy=await estimateContractEnergy({contractAddress,functionSelector,parameter,sender}),feeLimit=await calculateFeeLimitFromEnergy(estimatedEnergy),transaction=await buildContractTransaction({contractAddress,feeLimit,functionSelector,ownerAddress:sender,parameter});return prepareTx({expiration,feeLimit,memo,transaction})}async function getBalance(address){if(!isValidTronAddress(address))return[import_helpers4.AssetValue.from({chain:import_helpers4.Chain.Tron})];try{let accountData=await fetchAccountFromTronGrid(address);if(!accountData)return[import_helpers4.AssetValue.from({chain:import_helpers4.Chain.Tron})];let balances=[import_helpers4.AssetValue.from({chain:import_helpers4.Chain.Tron,fromBaseDecimal:6,value:String(accountData.balance)})],usdtEntry=accountData.trc20?.find((token)=>(TRON_USDT_CONTRACT in token));if(usdtEntry){let usdtBalance=usdtEntry[TRON_USDT_CONTRACT];balances.push(import_helpers4.AssetValue.from({asset:`TRON.USDT-${TRON_USDT_CONTRACT}`,fromBaseDecimal:6,value:usdtBalance}))}return balances}catch(error){return import_helpers4.warnOnce({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${error instanceof Error?error.message:error}`}),[import_helpers4.AssetValue.from({chain:import_helpers4.Chain.Tron})]}}async function transfer({recipient,assetValue,memo,expiration}){if(!isValidTronAddress(recipient))throw new import_helpers4.SwapKitError("toolbox_tron_token_transfer_failed",{message:"invalid address"});let signer=await getSigner();if(!signer)throw new import_helpers4.SwapKitError("toolbox_tron_no_signer");try{let from=await getAddress(),transaction=await createTransaction({assetValue,expiration,memo,recipient,sender:from}),signedTx=await signer.signTransaction(transaction),txid=await broadcastTronTransaction(signedTx);if(!txid)throw new import_helpers4.SwapKitError("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return txid}catch(error){throw new import_helpers4.SwapKitError("toolbox_tron_token_transfer_failed",{message:error instanceof Error?error.message:String(error)})}}function calculateBandwidthFee({requiredBandwidth,resources,feePerUnit}){let availableBandwidth=Math.max(0,resources.free+resources.total-resources.used);return requiredBandwidth>availableBandwidth?(requiredBandwidth-availableBandwidth)*feePerUnit:0}async function estimateNativeFee({recipient,senderAddress}){let[chainParams,recipientExists,resources]=await Promise.all([getTronChainParameters(),checkTronAccountExists(recipient),getTronAccountResources(senderAddress)]),activationFee=recipientExists?0:chainParams.createAccountFee,bandwidthFee=calculateBandwidthFee({feePerUnit:chainParams.bandwidthFee,requiredBandwidth:TRX_TRANSFER_BANDWIDTH,resources:resources.bandwidth});return import_helpers4.AssetValue.from({chain:import_helpers4.Chain.Tron,fromBaseDecimal:import_helpers4.BaseDecimal.TRON,value:activationFee+bandwidthFee})}async function estimateTrc20Fee({assetValue,recipient,senderAddress}){let contractAddress=assetValue.address;if(!contractAddress)throw new import_helpers4.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:assetValue.toString()});let[chainParams,recipientExists,resources,energyNeeded]=await Promise.all([getTronChainParameters(),checkTronAccountExists(recipient),getTronAccountResources(senderAddress),estimateContractEnergy({contractAddress,functionSelector:"transfer(address,uint256)",parameter:buildTRC20Parameter([{type:"address",value:recipient},{type:"uint256",value:assetValue.getBaseValue("string")}]),sender:senderAddress})]),activationFee=recipientExists?0:chainParams.createAccountFee,bandwidthFee=calculateBandwidthFee({feePerUnit:chainParams.bandwidthFee,requiredBandwidth:TRC20_TRANSFER_BANDWIDTH,resources:resources.bandwidth}),availableEnergy=Math.max(0,resources.energy.total-resources.energy.used),energyFee=energyNeeded>availableEnergy?(energyNeeded-availableEnergy)*chainParams.energyFee:0;return import_helpers4.AssetValue.from({chain:import_helpers4.Chain.Tron,fromBaseDecimal:import_helpers4.BaseDecimal.TRON,value:activationFee+bandwidthFee+energyFee})}async function estimateTransactionFee({assetValue,recipient,sender}){let signer=await getSigner();try{let senderAddress=sender?sender:signer?await getAddress():void 0;if(!senderAddress)return assetValue.isGasAsset?import_helpers4.AssetValue.from({chain:import_helpers4.Chain.Tron,value:0.1}):import_helpers4.AssetValue.from({chain:import_helpers4.Chain.Tron,value:15});return assetValue.isGasAsset?estimateNativeFee({recipient,senderAddress}):estimateTrc20Fee({assetValue,recipient,senderAddress})}catch(error){throw import_helpers4.warnOnce({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${error instanceof Error?error.message:error}`}),new import_helpers4.SwapKitError("toolbox_fee_estimation_failed",{chain:import_helpers4.Chain.Tron,error})}}async function createTransaction({recipient,assetValue,memo,sender,expiration}){if(!isValidTronAddress(recipient)||!isValidTronAddress(sender))throw new import_helpers4.SwapKitError("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(assetValue.isGasAsset){let transaction=await buildTrxTransaction({amount:assetValue.getBaseValue("number"),from:sender,to:recipient});return prepareTx({expiration,memo,transaction})}let contractAddress=assetValue.address;if(!contractAddress)throw new import_helpers4.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:assetValue.toString()});return buildContractTx({contractAddress,expiration,functionSelector:"transfer(address,uint256)",memo,parameter:buildTRC20Parameter([{type:"address",value:recipient},{type:"uint256",value:assetValue.getBaseValue("string")}]),sender})}async function signTransaction(transaction){validateTransactionIntegrity(transaction);let signer=await getSigner();if(!signer)throw new import_helpers4.SwapKitError("toolbox_tron_no_signer");return signer.signTransaction(transaction)}async function signAndBroadcastTransaction(transaction){let signedTx=await signTransaction(transaction);return broadcastTronTransaction(signedTx)}function getApprovedAmount({assetAddress,spenderAddress,from}){return getTrc20Allowance({assetAddress,owner:from,spender:spenderAddress})}async function isApproved({assetAddress,spenderAddress,from,amount}){let allowance=await getApprovedAmount({assetAddress,from,spenderAddress});if(!amount)return allowance>0n;return allowance>=BigInt(amount)}async function approve({assetAddress,spenderAddress,amount,from}){if(!isValidTronAddress(assetAddress)||!isValidTronAddress(spenderAddress))throw new import_helpers4.SwapKitError("toolbox_tron_approve_failed");let signer=await getSigner();if(!signer)throw new import_helpers4.SwapKitError("toolbox_tron_no_signer");let fromAddress=from||await getAddress(),approvalAmount=amount!==void 0?BigInt(amount).toString():MAX_APPROVAL;try{let transaction=await buildContractTx({contractAddress:assetAddress,functionSelector:"approve(address,uint256)",parameter:buildTRC20Parameter([{type:"address",value:spenderAddress},{type:"uint256",value:approvalAmount}]),sender:fromAddress}),signedTx=await signer.signTransaction(transaction),txid=await broadcastTronTransaction(signedTx);if(!txid)throw new import_helpers4.SwapKitError("toolbox_tron_approve_failed");return txid}catch(error){if(error instanceof import_helpers4.SwapKitError)throw error;throw new import_helpers4.SwapKitError("toolbox_tron_approve_failed",{error})}}return{approve,broadcastTransaction:broadcastTronTransaction,createTransaction,estimateTransactionFee,getAddress,getApprovedAmount,getBalance,getRpcUrl:()=>import_helpers4.getRPCUrl(import_helpers4.Chain.Tron),isApproved,signAndBroadcastTransaction,signTransaction,transfer,validateAddress:isValidTronAddress}}var import_utils4,import_bip32,import_bip39,import_helpers4,import_ts_pattern,validateTronAddress,TRX_TRANSFER_BANDWIDTH=268,DEFAULT_TRC20_TRANSFER_ENERGY=65000,TRC20_TRANSFER_BANDWIDTH=345,TRON_USDT_CONTRACT="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",MAX_APPROVAL="115792089237316195423570985008687907853269984665640564039457584007913129639935";var init_toolbox=__esm(()=>{init_proto();init_trongrid();init_utils();import_utils4=require("@noble/hashes/utils.js"),import_bip32=require("@scure/bip32"),import_bip39=require("@scure/bip39"),import_helpers4=require("@swapkit/helpers"),import_ts_pattern=require("ts-pattern"),validateTronAddress=isValidTronAddress});var exports_tron={};__export(exports_tron,{validateTronAddress:()=>validateTronAddress,getTronToolbox:()=>getTronToolbox,getTronPrivateKeyFromMnemonic:()=>getTronPrivateKeyFromMnemonic});module.exports=__toCommonJS(exports_tron);var init_tron=__esm(()=>{init_toolbox()});init_tron();
|
|
1
|
+
var bn=Object.create;var{getPrototypeOf:dn,defineProperty:j,getOwnPropertyNames:on,getOwnPropertyDescriptor:yn}=Object,tn=Object.prototype.hasOwnProperty;function rn(n){return this[n]}var Vn,Hn,hi=(n,i,o)=>{var t=n!=null&&typeof n==="object";if(t){var a=i?Vn??=new WeakMap:Hn??=new WeakMap,g=a.get(n);if(g)return g}o=n!=null?bn(dn(n)):{};let m=i||!n||!n.__esModule?j(o,"default",{value:n,enumerable:!0}):o;for(let P of on(n))if(!tn.call(m,P))j(m,P,{get:rn.bind(n,P),enumerable:!0});if(t)a.set(n,m);return m},Ln=(n)=>{var i=(nn??=new WeakMap).get(n),o;if(i)return i;if(i=j({},"__esModule",{value:!0}),n&&typeof n==="object"||typeof n==="function"){for(var t of on(n))if(!tn.call(i,t))j(i,t,{get:rn.bind(n,t),enumerable:!(o=yn(n,t))||o.enumerable})}return nn.set(n,i),i},nn;var ln=(n)=>n;function In(n,i){this[n]=ln.bind(null,i)}var sn=(n,i)=>{for(var o in i)j(n,o,{get:i[o],enumerable:!0,configurable:!0,set:In.bind(i,o)})};var X=(n,i)=>()=>(n&&(i=n(n=0)),i);function N(n,i){let o=0n,t=0n,a=i;while(a<n.length&&a-i<10){let g=n[a++];if(g===void 0)break;if(o|=BigInt(g&127)<<t,t+=7n,(g&128)===0)return[o,a]}throw new C.SwapKitError("toolbox_tron_transaction_creation_failed")}function M(n){let i=[],o=n<0n?n+2n**64n:n;while(o>=128n)i.push(Number(o&0x7fn)|128),o>>=7n;return i.push(Number(o)),i}function B(n,i,o){let t=n.get(i);if(t)t.push(o);else n.set(i,[o])}function ii(n){let i=new Map,o=0;while(o<n.length){let[t,a]=N(n,o);o=a;let g=Number(t>>3n),m=Number(t&7n);if(m===A){let[P,w]=N(n,o);o=w,B(i,g,{data:new Uint8Array(M(P)),wireType:A})}else if(m===W){let[P,w]=N(n,o);o=w;let $=Number(P);if($<0||o+$>n.length)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let K=n.slice(o,o+$);o+=$,B(i,g,{data:K,wireType:W})}else if(m===an){if(o+8>n.length)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let P=n.slice(o,o+8);o+=8,B(i,g,{data:P,wireType:an})}else if(m===cn){if(o+4>n.length)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let P=n.slice(o,o+4);o+=4,B(i,g,{data:P,wireType:cn})}else throw new C.SwapKitError("toolbox_tron_transaction_creation_failed")}return i}function oi(n){let i=[];for(let[g,m]of[...n.entries()].sort(([P],[w])=>P-w))for(let{wireType:P,data:w}of m){let $=BigInt(g<<3|P);if(i.push(new Uint8Array(M($))),P===W)i.push(new Uint8Array(M(BigInt(w.length))));i.push(w)}let o=i.reduce((g,m)=>g+m.length,0),t=new Uint8Array(o),a=0;for(let g of i)t.set(g,a),a+=g.length;return t}function gn(n,i){if(!n||n.length%2!==0)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let o=Q.hexToBytes(n),t=ii(o);if(i.expiration!==void 0)t.set(pn,[{data:new Uint8Array(M(BigInt(i.expiration))),wireType:A}]);if(i.data!==void 0)t.set(En,[{data:Q.hexToBytes(i.data),wireType:W}]);if(i.fee_limit!==void 0)t.set(ni,[{data:new Uint8Array(M(BigInt(i.fee_limit))),wireType:A}]);let a=oi(t),g=Q.bytesToHex(a),m=Q.bytesToHex(fn.sha256(a));return{raw_data_hex:g,txID:m}}var fn,Q,C,A=0,an=1,W=2,cn=5,pn=8,En=10,ni=18;var mn=X(()=>{fn=require("@noble/hashes/sha2.js"),Q=require("@noble/hashes/utils.js"),C=require("@swapkit/helpers")});function q(n){if(typeof n!=="string")return!1;try{let i=S.decode(n);return i.length===21&&i[0]===_n}catch{return!1}}function Pn(n){return F.bytesToHex(S.decode(n))}function ri(n){return S.decode(n).slice(1)}function wn(n){let i=D.secp256k1.getPublicKey(F.hexToBytes(n),!1),o=Tn.keccak_256(i.slice(1)).slice(-20),t=new Uint8Array(21);return t[0]=_n,t.set(o,1),S.encode(t)}function vn({txID:n,privateKey:i}){let o=D.secp256k1.sign(F.hexToBytes(n),F.hexToBytes(i),{format:"recovered",prehash:!1}),t=o[0]??0,a=F.bytesToHex(o.slice(1,33)),g=F.bytesToHex(o.slice(33,65)),m=(t+27).toString(16).padStart(2,"0");return a+g+m}function Y({txID:n,raw_data_hex:i}){let o=F.bytesToHex(R.sha256(F.hexToBytes(i)));if(n!==o)throw new b.SwapKitError("toolbox_tron_invalid_transaction_integrity",{expected:o,txID:n})}function ai(n){return`000000000000000000000000${F.bytesToHex(ri(n))}`}function ci(n){let i=typeof n==="bigint"?n:BigInt(n);if(i<0n||i>=ti)throw new b.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:i.toString()});return i.toString(16).padStart(64,"0")}function Z(n){return n.map(({type:i,value:o})=>i==="address"?ai(o):ci(BigInt(o))).join("")}function un(n){return F.bytesToHex(new TextEncoder().encode(n))}var D,R,Tn,F,en,b,S,_n=65,ti;var d=X(()=>{D=require("@noble/curves/secp256k1.js"),R=require("@noble/hashes/sha2.js"),Tn=require("@noble/hashes/sha3.js"),F=require("@noble/hashes/utils.js"),en=require("@scure/base"),b=require("@swapkit/helpers"),S=en.createBase58check(R.sha256),ti=2n**256n});function hn(){try{return v.getRPCUrlSync(v.Chain.Tron)}catch{return xn}}function Fn(){let n=new AbortController,i=setTimeout(()=>n.abort(),Ti);return{cleanup:()=>clearTimeout(i),signal:n.signal}}async function J(n,i){let{signal:o,cleanup:t}=Fn();try{let a=await fetch(`${hn()}${n}`,{body:JSON.stringify(i),headers:{"Content-Type":"application/json"},method:"POST",signal:o});if(!a.ok)throw new v.SwapKitError("toolbox_tron_trongrid_api_error",{message:`${a.status} ${a.statusText} on ${n}`});return await a.json()}finally{t()}}async function qn(n,i){let{signal:o,cleanup:t}=Fn();try{let a=await fetch(`${i??hn()}${n}`,{headers:{"Content-Type":"application/json"},signal:o});if(!a.ok)throw new v.SwapKitError("toolbox_tron_trongrid_api_error",{message:`${a.status} ${a.statusText} on ${n}`});return await a.json()}finally{t()}}async function $n(n){if(!q(n))throw new v.SwapKitError("toolbox_tron_trongrid_api_error",{address:n,message:"Invalid address"});try{let i=await qn(`/v1/accounts/${n}`,xn);if(!(i.success&&i.data)||i.data.length===0)return;let o;try{o=Pn(n).toLowerCase()}catch{o=n.toLowerCase()}let t=i.data.find((a)=>a.address.toLowerCase()===o);if(!t)return;return{balance:t.balance,trc20:t.trc20||[]}}catch(i){if(i instanceof v.SwapKitError)throw i;throw new v.SwapKitError("toolbox_tron_trongrid_api_error",{address:n,message:i instanceof Error?i.message:"Unknown error"})}}async function zn({from:n,to:i,amount:o}){let a=await J("/wallet/createtransaction",{amount:o,owner_address:n,to_address:i,visible:!0});if(!a.txID||!a.raw_data_hex||!a.raw_data)throw new v.SwapKitError("toolbox_tron_transaction_creation_failed");let m=a.raw_data?.contract?.[0]?.parameter?.value;if(m?.to_address!==i||m?.owner_address!==n||m?.amount!==o)throw new v.SwapKitError("toolbox_tron_transaction_creation_failed");return Y(a),a}async function Cn({ownerAddress:n,contractAddress:i,functionSelector:o,parameter:t,feeLimit:a,callValue:g=0}){let m=await J("/wallet/triggersmartcontract",{call_value:g,contract_address:i,fee_limit:a,function_selector:o,owner_address:n,parameter:t,visible:!0});if(!m.result.result||!m.transaction?.txID||!m.transaction?.raw_data_hex)throw new v.SwapKitError("toolbox_tron_transaction_creation_failed");let w=m.transaction.raw_data?.contract?.[0]?.parameter?.value;if(w?.contract_address!==i||w?.owner_address!==n)throw new v.SwapKitError("toolbox_tron_transaction_creation_failed");return Y(m.transaction),m.transaction}function Qn({ownerAddress:n,contractAddress:i,functionSelector:o,parameter:t}){return J("/wallet/triggerconstantcontract",{contract_address:i,function_selector:o,owner_address:n,parameter:t,visible:!0})}async function O(n){try{let{result:i,txid:o}=await J("/wallet/broadcasttransaction",{raw_data:n.raw_data,raw_data_hex:n.raw_data_hex,signature:n.signature,txID:n.txID,visible:n.visible});if(!i||!o)throw new v.SwapKitError("toolbox_tron_token_transfer_failed");return o}catch(i){throw new v.SwapKitError("toolbox_tron_broadcast_failed",{error:i})}}async function k(){let n={};try{let{chainParameter:i}=await qn("/wallet/getchainparameters");for(let o of i)n[o.key]=o.value}catch(i){v.warnOnce({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${i instanceof Error?i.message:i}`})}return{bandwidthFee:n.getTransactionFee??fi,createAccountFee:n.getCreateAccountFee??gi,energyFee:n.getEnergyFee??mi}}async function y(n){try{let i=await J("/wallet/getaccountresource",{address:n,visible:!0});return{bandwidth:{free:(i.freeNetLimit??600)-(i.freeNetUsed??0),total:i.NetLimit??0,used:i.NetUsed??0},energy:{total:i.EnergyLimit??0,used:i.EnergyUsed??0}}}catch(i){return v.warnOnce({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${i instanceof Error?i.message:i}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function V(n){try{let i=await J("/wallet/getaccount",{address:n,visible:!0});return i&&Object.keys(i).length>0}catch{return!1}}async function H(n){try{let{energy_used:i}=await Qn({...n,ownerAddress:n.sender});return i}catch(i){return v.warnOnce({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy, using default: ${i instanceof Error?i.message:i}`}),65000}}async function Yn({assetAddress:n,owner:i,spender:o}){let t=Z([{type:"address",value:i},{type:"address",value:o}]),g=(await Qn({contractAddress:n,functionSelector:"allowance(address,address)",ownerAddress:o,parameter:t})).constant_result?.[0];if(!g)return 0n;try{return BigInt(`0x${g}`)}catch{return 0n}}var v,xn="https://api.trongrid.io",fi=1000,gi=1e5,mi=420,Ti=30000;var Zn=X(()=>{d();v=require("@swapkit/helpers")});function On({phrase:n,derivationPath:i}){let o=jn.HDKey.fromMasterSeed(Xn.mnemonicToSeedSync(n)).derive(i);if(!o.privateKey)throw new r.SwapKitError("toolbox_tron_no_signer");return Un.bytesToHex(o.privateKey)}function Gn({phrase:n,derivationPath:i,index:o}){let t=i||r.derivationPathToString(r.updateDerivationPath(r.NetworkDerivationPath[r.Chain.Tron],{index:o||0}));return On({derivationPath:t,phrase:n})}function vi({phrase:n,derivationPath:i}){let o=On({derivationPath:i,phrase:n}),t=wn(o);return{getAddress:()=>Promise.resolve(t),signTransaction:(a)=>{Y(a);let g=vn({privateKey:o,txID:a.txID});return Promise.resolve({...a,signature:[g]})}}}function Jn({transaction:n,memo:i,expiration:o,feeLimit:t}){let a={},g={};if(t!==void 0&&n.raw_data)a.fee_limit=t,g.fee_limit=t;if(i){let w=un(i);a.data=w,g.data=w}if(o){let w=n.raw_data.expiration+o*1000;a.expiration=w,g.expiration=w}if(Object.keys(a).length===0)return n;let{raw_data_hex:m,txID:P}=gn(n.raw_data_hex,a);return{...n,raw_data:{...n.raw_data,...g},raw_data_hex:m,txID:P}}function Bn(n={}){let i="index"in n?n.index||0:0,o=r.derivationPathToString("derivationPath"in n&&n.derivationPath?n.derivationPath:r.updateDerivationPath(r.NetworkDerivationPath[r.Chain.Tron],{index:i})),t,a=!1;function g(){if(a)return Promise.resolve(t);return t=U.match(n).with({phrase:U.P.string},({phrase:c})=>vi({derivationPath:o,phrase:c})).with({signer:U.P.not(U.P.nullish)},({signer:c})=>c).otherwise(()=>{return}),a=!0,Promise.resolve(t)}async function m(){let c=await g();if(!c)throw new r.SwapKitError("toolbox_tron_no_signer");return c.getAddress()}async function P(c){let f=c||_i,e=await k(),_=f*e.energyFee,T=Math.ceil(_*1.5);return Math.min(Math.max(T,1e7),150000000)}async function w({contractAddress:c,functionSelector:f,parameter:e,sender:_,memo:T,expiration:u}){let x=await H({contractAddress:c,functionSelector:f,parameter:e,sender:_}),h=await P(x),z=await Cn({contractAddress:c,feeLimit:h,functionSelector:f,ownerAddress:_,parameter:e});return Jn({expiration:u,feeLimit:h,memo:T,transaction:z})}async function $(c){if(!q(c))return[r.AssetValue.from({chain:r.Chain.Tron})];try{let f=await $n(c);if(!f)return[r.AssetValue.from({chain:r.Chain.Tron})];let e=[r.AssetValue.from({chain:r.Chain.Tron,fromBaseDecimal:6,value:String(f.balance)})],_=f.trc20?.find((T)=>(L in T));if(_){let T=_[L];e.push(r.AssetValue.from({asset:`TRON.USDT-${L}`,fromBaseDecimal:6,value:T}))}return e}catch(f){return r.warnOnce({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${f instanceof Error?f.message:f}`}),[r.AssetValue.from({chain:r.Chain.Tron})]}}async function K({recipient:c,assetValue:f,memo:e,expiration:_}){if(!q(c))throw new r.SwapKitError("toolbox_tron_token_transfer_failed",{message:"invalid address"});let T=await g();if(!T)throw new r.SwapKitError("toolbox_tron_no_signer");try{let u=await m(),x=await I({assetValue:f,expiration:_,memo:e,recipient:c,sender:u}),h=await T.signTransaction(x),z=await O(h);if(!z)throw new r.SwapKitError("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return z}catch(u){throw new r.SwapKitError("toolbox_tron_token_transfer_failed",{message:u instanceof Error?u.message:String(u)})}}function l({requiredBandwidth:c,resources:f,feePerUnit:e}){let _=Math.max(0,f.free+f.total-f.used);return c>_?(c-_)*e:0}async function Wn({recipient:c,senderAddress:f}){let[e,_,T]=await Promise.all([k(),V(c),y(f)]),u=_?0:e.createAccountFee,x=l({feePerUnit:e.bandwidthFee,requiredBandwidth:ei,resources:T.bandwidth});return r.AssetValue.from({chain:r.Chain.Tron,fromBaseDecimal:r.BaseDecimal.TRON,value:u+x})}async function Sn({assetValue:c,recipient:f,senderAddress:e}){let _=c.address;if(!_)throw new r.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:c.toString()});let[T,u,x,h]=await Promise.all([k(),V(f),y(e),H({contractAddress:_,functionSelector:"transfer(address,uint256)",parameter:Z([{type:"address",value:f},{type:"uint256",value:c.getBaseValue("string")}]),sender:e})]),z=u?0:T.createAccountFee,G=l({feePerUnit:T.bandwidthFee,requiredBandwidth:Pi,resources:x.bandwidth}),E=Math.max(0,x.energy.total-x.energy.used),Rn=h>E?(h-E)*T.energyFee:0;return r.AssetValue.from({chain:r.Chain.Tron,fromBaseDecimal:r.BaseDecimal.TRON,value:z+G+Rn})}async function kn({assetValue:c,recipient:f,sender:e}){let _=await g();try{let T=e?e:_?await m():void 0;if(!T)return c.isGasAsset?r.AssetValue.from({chain:r.Chain.Tron,value:0.1}):r.AssetValue.from({chain:r.Chain.Tron,value:15});return c.isGasAsset?Wn({recipient:f,senderAddress:T}):Sn({assetValue:c,recipient:f,senderAddress:T})}catch(T){throw r.warnOnce({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${T instanceof Error?T.message:T}`}),new r.SwapKitError("toolbox_fee_estimation_failed",{chain:r.Chain.Tron,error:T})}}async function I({recipient:c,assetValue:f,memo:e,sender:_,expiration:T}){if(!q(c)||!q(_))throw new r.SwapKitError("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(f.isGasAsset){let x=await zn({amount:f.getBaseValue("number"),from:_,to:c});return Jn({expiration:T,memo:e,transaction:x})}let u=f.address;if(!u)throw new r.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:f.toString()});return w({contractAddress:u,expiration:T,functionSelector:"transfer(address,uint256)",memo:e,parameter:Z([{type:"address",value:c},{type:"uint256",value:f.getBaseValue("string")}]),sender:_})}async function s(c){Y(c);let f=await g();if(!f)throw new r.SwapKitError("toolbox_tron_no_signer");return f.signTransaction(c)}async function Kn(c){let f=await s(c);return O(f)}function p({assetAddress:c,spenderAddress:f,from:e}){return Yn({assetAddress:c,owner:e,spender:f})}async function Nn({assetAddress:c,spenderAddress:f,from:e,amount:_}){let T=await p({assetAddress:c,from:e,spenderAddress:f});if(!_)return T>0n;return T>=BigInt(_)}async function Dn({assetAddress:c,spenderAddress:f,amount:e,from:_}){if(!q(c)||!q(f))throw new r.SwapKitError("toolbox_tron_approve_failed");let T=await g();if(!T)throw new r.SwapKitError("toolbox_tron_no_signer");let u=_||await m(),x=e!==void 0?BigInt(e).toString():wi;try{let h=await w({contractAddress:c,functionSelector:"approve(address,uint256)",parameter:Z([{type:"address",value:f},{type:"uint256",value:x}]),sender:u}),z=await T.signTransaction(h),G=await O(z);if(!G)throw new r.SwapKitError("toolbox_tron_approve_failed");return G}catch(h){if(h instanceof r.SwapKitError)throw h;throw new r.SwapKitError("toolbox_tron_approve_failed",{error:h})}}return{approve:Dn,broadcastTransaction:O,createTransaction:I,estimateTransactionFee:kn,getAddress:m,getApprovedAmount:p,getBalance:$,getRpcUrl:()=>r.getRPCUrl(r.Chain.Tron),isApproved:Nn,signAndBroadcastTransaction:Kn,signTransaction:s,transfer:K,validateAddress:q}}var Un,jn,Xn,r,U,Mn,ei=268,_i=65000,Pi=345,L="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",wi="115792089237316195423570985008687907853269984665640564039457584007913129639935";var An=X(()=>{mn();Zn();d();Un=require("@noble/hashes/utils.js"),jn=require("@scure/bip32"),Xn=require("@scure/bip39"),r=require("@swapkit/helpers"),U=require("ts-pattern"),Mn=q});var ui={};sn(ui,{validateTronAddress:()=>Mn,getTronToolbox:()=>Bn,getTronPrivateKeyFromMnemonic:()=>Gn});module.exports=Ln(ui);var xi=X(()=>{An()});xi();
|
package/dist/src/utxo/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var __create=Object.create;var{getPrototypeOf:__getProtoOf,defineProperty:__defProp,getOwnPropertyNames:__getOwnPropNames,getOwnPropertyDescriptor:__getOwnPropDesc}=Object,__hasOwnProp=Object.prototype.hasOwnProperty;function __accessProp(key){return this[key]}var __toESMCache_node,__toESMCache_esm,__toESM=(mod,isNodeMode,target)=>{var canCache=mod!=null&&typeof mod==="object";if(canCache){var cache=isNodeMode?__toESMCache_node??=new WeakMap:__toESMCache_esm??=new WeakMap,cached=cache.get(mod);if(cached)return cached}target=mod!=null?__create(__getProtoOf(mod)):{};let to=isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target;for(let key of __getOwnPropNames(mod))if(!__hasOwnProp.call(to,key))__defProp(to,key,{get:__accessProp.bind(mod,key),enumerable:!0});if(canCache)cache.set(mod,to);return to},__toCommonJS=(from)=>{var entry=(__moduleCache??=new WeakMap).get(from),desc;if(entry)return entry;if(entry=__defProp({},"__esModule",{value:!0}),from&&typeof from==="object"||typeof from==="function"){for(var key of __getOwnPropNames(from))if(!__hasOwnProp.call(entry,key))__defProp(entry,key,{get:__accessProp.bind(from,key),enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return __moduleCache.set(from,entry),entry},__moduleCache;var __returnValue=(v)=>v;function __exportSetter(name,newValue){this[name]=__returnValue.bind(null,newValue)}var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0,configurable:!0,set:__exportSetter.bind(all,name)})};var __esm=(fn,res)=>()=>(fn&&(res=fn(fn=0)),res);function assertDerivationIndex(name,value){if(!Number.isInteger(value)||value<0)throw RangeError(`${name} must be a non-negative integer, got: ${value}`)}function getUTXOAccountPath({accountIndex,chain,derivationPath}){if(accountIndex!==void 0)assertDerivationIndex("accountIndex",accountIndex);let accountPath=[...derivationPath?.slice(0,3)??import_helpers.NetworkDerivationPath[chain].slice(0,3)];if(accountIndex!==void 0)accountPath[2]=accountIndex;return accountPath}function getUTXOAddressPath({accountIndex,change=!1,chain,derivationPath,index}){return assertDerivationIndex("index",index),[...getUTXOAccountPath({accountIndex,chain,derivationPath}),Number(change),index]}function getUTXOAccountIndexFromPath(path){return path[2]??0}function createHDWalletHelpers({deriveAddress,getBalance,getUtxos}){async function deriveAddresses(params){let{accountIndex,count,startIndex=0,change=!1}=params;if(assertDerivationIndex("count",count),count<1)throw RangeError("count must be at least 1");assertDerivationIndex("startIndex",startIndex);let addresses=[];for(let i=0;i<count;i++){let derived=await deriveAddress({accountIndex,change,index:startIndex+i});if(derived)addresses.push(derived)}return addresses}async function scanForAddresses(params){let{gapLimit=20,change=!1}=params??{},usedAddresses=[],consecutiveUnused=0,index=0;while(consecutiveUnused<gapLimit){let derived=await deriveAddress({change,index});if(!derived)break;if((await getBalance(derived.address)).some((b)=>b.getValue("number")>0))usedAddresses.push(derived),consecutiveUnused=0;else consecutiveUnused++;index++}return usedAddresses}async function getAggregatedBalance(gapLimit=20){let[receiveAddresses,changeAddresses]=await Promise.all([scanForAddresses({change:!1,gapLimit}),scanForAddresses({change:!0,gapLimit})]),allAddresses=[...receiveAddresses,...changeAddresses],addressBalances=await Promise.all(allAddresses.map(async(addr)=>{let balance=(await getBalance(addr.address)).reduce((sum,b)=>sum+b.getValue("number"),0);return{...addr,balance}})),total=addressBalances.reduce((sum,addr)=>sum+addr.balance,0);return{addresses:addressBalances,total}}async function getAggregatedUtxos(gapLimit=20){let[receiveAddresses,changeAddresses]=await Promise.all([scanForAddresses({change:!1,gapLimit}),scanForAddresses({change:!0,gapLimit})]),allAddresses=[...receiveAddresses,...changeAddresses];return(await Promise.all(allAddresses.map(async(addr)=>{return(await getUtxos(addr.address)).map((utxo)=>({...utxo,address:addr.address,derivationIndex:addr.index,isChange:addr.change}))}))).flat()}return{deriveAddresses,getAggregatedBalance,getAggregatedUtxos,scanForAddresses}}var import_helpers;var init_hdWallet=__esm(()=>{import_helpers=require("@swapkit/helpers")});function uniqid(){function now(){let time=Date.now(),lastTime=last||time;return last=lastTime,time>last?time:lastTime+1}return pid+now().toString(36)}function getBalance(chain){return async function(address,scamFilter=!0){let balances=await import_api.SwapKitApi.getChainBalance({address,chain,scamFilter}),{baseDecimal}=import_helpers2.getChainConfig(chain),assetValues=balances.map(({identifier,value,decimal})=>{return new import_helpers2.AssetValue({decimal:decimal||baseDecimal,identifier,value})});if(!assetValues.some((asset)=>asset.isGasAsset))return[import_helpers2.AssetValue.from({chain}),...assetValues];return assetValues}}var import_helpers2,import_api,pid,last=0;var init_utils=__esm(()=>{import_helpers2=require("@swapkit/helpers"),import_api=require("@swapkit/helpers/api"),pid=typeof process<"u"&&process.pid?process.pid.toString(36):""});async function broadcastUTXOTx({chain,txHash}){let url=`${baseUrl(chain)}/push/transaction`,body=JSON.stringify({data:txHash});try{let response=await import_helpers3.RequestClient.post(url,{body,headers:{"Content-Type":"application/json"}});if(response.context.code!==200)throw new import_helpers3.SwapKitError("toolbox_utxo_broadcast_failed",{error:response.context.error||"Transaction broadcast failed"});return response.data?.transaction_hash||txHash}catch(error){let rpcUrl=await import_helpers3.getRPCUrl(chain);if(rpcUrl){let rpcBody=JSON.stringify({id:uniqid(),jsonrpc:"2.0",method:"sendrawtransaction",params:[txHash]}),rpcResponse=await import_helpers3.RequestClient.post(rpcUrl,{body:rpcBody,headers:{"Content-Type":"application/json"}});if(rpcResponse.error)throw new import_helpers3.SwapKitError("toolbox_utxo_broadcast_failed",{error:rpcResponse.error?.message});if(rpcResponse.result.includes('"code":-26'))throw new import_helpers3.SwapKitError("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return rpcResponse.result}throw error}}function baseUrl(chain){return`https://api.blockchair.com/${mapChainToBlockchairChain(chain)}`}function getDefaultTxFeeByChain(chain){switch(chain){case import_helpers3.Chain.Bitcoin:return 5;case import_helpers3.Chain.Dogecoin:return 1e4;case import_helpers3.Chain.Litecoin:return 1;case import_helpers3.Chain.Zcash:return 1;default:return 2}}function mapChainToBlockchairChain(chain){switch(chain){case import_helpers3.Chain.BitcoinCash:return"bitcoin-cash";case import_helpers3.Chain.Litecoin:return"litecoin";case import_helpers3.Chain.Dash:return"dash";case import_helpers3.Chain.Dogecoin:return"dogecoin";case import_helpers3.Chain.Zcash:return"zcash";case import_helpers3.Chain.Polkadot:return"polkadot";default:return"bitcoin"}}async function getSuggestedTxFee(chain){try{let{feePerKb}=await import_helpers3.RequestClient.get(`https://app.bitgo.com/api/v2/${chain.toLowerCase()}/tx/fee`),suggestedFee=feePerKb/1000;return Math.max(suggestedFee,getDefaultTxFeeByChain(chain))}catch{return getDefaultTxFeeByChain(chain)}}async function blockchairRequest(url,apiKey){let response=await import_helpers3.RequestClient.get(`${url}${apiKey?`${url.includes("?")?"&":"?"}key=${apiKey}`:""}`);if(!response||response.context.code!==200)throw new import_helpers3.SwapKitError("toolbox_utxo_api_error",{error:`Failed to query ${url}`});return response.data}async function getAddressData({address,chain,apiKey}){if(!address)throw new import_helpers3.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await blockchairRequest(`${baseUrl(chain)}/dashboards/address/${address}?transaction_details=true`,apiKey))[address]}catch{return{address:{balance:0,transaction_count:0},utxo:[]}}}async function getUnconfirmedBalance({address,chain,apiKey}){return(await getAddressData({address,apiKey,chain}))?.address.balance||0}async function getRawTx({chain,apiKey,txHash}){if(!txHash)throw new import_helpers3.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await blockchairRequest(`${baseUrl(chain)}/raw/transaction/${txHash}`,apiKey))?.[txHash]?.raw_transaction||""}catch(error){let errorMessage=error instanceof Error?error.message:String(error);return console.error(`Failed to fetch raw transaction: ${errorMessage}`),""}}async function getTransactionDetails({chain,apiKey,txHash}){if(!txHash)throw new import_helpers3.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});let txData=(await blockchairRequest(`${baseUrl(chain)}/dashboards/transaction/${txHash}`,apiKey))?.[txHash];if(!txData)throw new import_helpers3.SwapKitError("toolbox_utxo_tx_not_found",{txHash});let{transaction,inputs,outputs}=txData,sequences=inputs.map((input)=>input.spending_sequence),isRBF=transaction.is_rbf===!0||sequences.some((seq)=>seq<RBF_MAX_SEQUENCE);return{blockId:transaction.block_id,confirmed:transaction.block_id!==-1,fee:transaction.fee,inputs,isRBF,outputs,sequences,size:transaction.size,txid:transaction.hash,weight:transaction.weight}}async function fetchUtxosBatch({chain,address,apiKey,offset=0,limit=30}){return(await blockchairRequest(`${baseUrl(chain)}/outputs?q=recipient(${address}),is_spent(false)&s=value(desc)&fields=is_spent,transaction_hash,index,value,script_hex,block_id,spending_signature_hex&limit=${limit}&offset=${offset}`,apiKey)).map(({is_spent,script_hex,block_id,transaction_hash,index,value,spending_signature_hex})=>({hash:transaction_hash,index,is_confirmed:block_id!==-1,is_spent,script_hex,txHex:spending_signature_hex,value}))}function getTxsValue(txs){return txs.reduce((total,tx)=>total+tx.value,0)}function pickMostValuableTxs(txs,targetValue){let sortedTxs=[...txs].sort((a,b)=>b.value-a.value);if(targetValue){let result=[],accumulated=0;for(let utxo of sortedTxs)if(result.push(utxo),accumulated+=utxo.value,accumulated>=targetValue)break;return result}return sortedTxs}async function getUnspentUtxos({chain,address,apiKey,targetValue,accumulativeValue=0,offset=0,limit=30}){if(!address)throw new import_helpers3.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{let utxos=await fetchUtxosBatch({address,apiKey,chain,limit,offset,targetValue}),isComplete=utxos.length<limit,unspentUtxos=utxos.filter(({is_spent})=>!is_spent),unspentUtxosValue=getTxsValue(unspentUtxos),totalCurrentValue=accumulativeValue+unspentUtxosValue,limitReached=targetValue&&totalCurrentValue>=targetValue;if(isComplete||limitReached)return pickMostValuableTxs(unspentUtxos,targetValue);let nextBatch=await getUnspentUtxos({accumulativeValue:totalCurrentValue,address,apiKey,chain,limit,offset:offset+limit,targetValue}),allUtxos=[...unspentUtxos,...nextBatch];return pickMostValuableTxs(allUtxos,targetValue)}catch(error){let errorMessage=error instanceof Error?error.message:String(error);return console.error(`Failed to fetch unspent UTXOs: ${errorMessage}`),[]}}async function getUtxos({address,chain,apiKey,fetchTxHex=!0,targetValue}){let utxos=await getUnspentUtxos({address,apiKey,chain,targetValue}),results=[];for(let{hash,index,script_hex,value}of utxos){let txHex;if(fetchTxHex)txHex=await getRawTx({apiKey,chain,txHash:hash});results.push({address,hash,index,txHex,value,witnessUtxo:{script:Buffer.from(script_hex,"hex"),value}})}return results}function getUtxoApi(chain){let apiKey=import_helpers3.SKConfig.get("apiKeys").blockchair||"";return import_helpers3.warnOnce({condition:!apiKey,id:"no_blockchair_api_key_warning",warning:"No Blockchair API key found. Functionality will be limited."}),{broadcastTx:(txHash)=>broadcastUTXOTx({chain,txHash}),getAddressData:(address)=>getAddressData({address,apiKey,chain}),getBalance:(address)=>getUnconfirmedBalance({address,apiKey,chain}),getRawTx:(txHash)=>getRawTx({apiKey,chain,txHash}),getSuggestedTxFee:()=>getSuggestedTxFee(chain),getTransactionDetails:(txHash)=>getTransactionDetails({apiKey,chain,txHash}),getUtxos:(params)=>getUtxos({...params,apiKey,chain})}}function createCustomUtxoApi(methods){return methods}function getUtxoNetwork(){return function(chain){switch(chain){case import_helpers3.Chain.Bitcoin:return import_utxo_signer.NETWORKS.bitcoin;case import_helpers3.Chain.BitcoinCash:return import_utxo_signer.NETWORKS.bitcoinCash;case import_helpers3.Chain.Dash:return import_utxo_signer.NETWORKS.dash;case import_helpers3.Chain.Litecoin:return import_utxo_signer.NETWORKS.litecoin;case import_helpers3.Chain.Dogecoin:return import_utxo_signer.NETWORKS.dogecoin;case import_helpers3.Chain.Zcash:return import_utxo_signer.NETWORKS.zcash;default:throw new import_helpers3.SwapKitError("toolbox_utxo_not_supported",{chain})}}}var import_helpers3,import_utxo_signer,RBF_MAX_SEQUENCE=4294967294;var init_api=__esm(()=>{init_utils();import_helpers3=require("@swapkit/helpers"),import_utxo_signer=require("@swapkit/utxo-signer")});function encode(prefix,type,hash){return import_utxo_signer2.encodeCashAddr({hash,prefix,type:typeToNum[type]})}function decode(address){let result=import_utxo_signer2.decodeCashAddr(address),type=numToType[result.type];if(!type)throw Error(`Unknown CashAddr type: ${result.type}`);return{hash:result.hash,prefix:result.prefix,type}}var import_utxo_signer2,typeToNum,numToType,cashaddr;var init_cashaddr=__esm(()=>{import_utxo_signer2=require("@swapkit/utxo-signer"),typeToNum={P2PKH:import_utxo_signer2.CashAddrType.P2PKH,P2SH:import_utxo_signer2.CashAddrType.P2SH},numToType={[import_utxo_signer2.CashAddrType.P2PKH]:"P2PKH",[import_utxo_signer2.CashAddrType.P2SH]:"P2SH"};cashaddr={decode,encode}});function isValidAddress(input){try{return decodeAddress(input),!0}catch{return!1}}function detectAddressNetwork(address){return decodeAddress(address)?.network}function toLegacyAddress(address){let decoded=decodeAddress(address);if(decoded?.format==="legacy")return address;return encodeAsLegacy(decoded)}function toCashAddress(address){let decoded=decodeAddress(address);return encodeAsCashaddr(decoded)}function decodeAddress(address){try{let decoded=decodeBase58Address(address);if(decoded)return decoded}catch{}try{let decoded=decodeCashAddress(address);if(decoded)return decoded}catch{}throw new import_helpers4.SwapKitError("toolbox_utxo_invalid_address",{address})}function decodeBase58Address(address){try{let payload=base58check.decode(address);if(payload.length!==21)throw new import_helpers4.SwapKitError("toolbox_utxo_invalid_address",{address});let versionByte=payload[0],hash=Array.prototype.slice.call(payload,1);switch(versionByte){case VERSION_BYTE.legacy.mainnet.p2pkh:return{format:"legacy",hash,network:"mainnet",type:"p2pkh"};case VERSION_BYTE.legacy.mainnet.p2sh:return{format:"legacy",hash,network:"mainnet",type:"p2sh"};case VERSION_BYTE.legacy.testnet.p2pkh:return{format:"legacy",hash,network:"testnet",type:"p2pkh"};case VERSION_BYTE.legacy.testnet.p2sh:return{format:"legacy",hash,network:"testnet",type:"p2sh"};case VERSION_BYTE.bitpay.mainnet.p2pkh:return{format:"bitpay",hash,network:"mainnet",type:"p2pkh"};case VERSION_BYTE.bitpay.mainnet.p2sh:return{format:"bitpay",hash,network:"mainnet",type:"p2sh"};default:return}}catch{return}}function decodeCashAddress(address){if(address.indexOf(":")!==-1)try{return decodeCashAddressWithPrefix(address)}catch{}else{let prefixes=["bitcoincash","bchtest","bchreg"];for(let prefix of prefixes)try{return decodeCashAddressWithPrefix(`${prefix}:${address}`)}catch{}}return}function decodeCashAddressWithPrefix(address){try{let{hash,prefix,type}=cashaddr.decode(address);return{format:"cashaddr",hash:Array.prototype.slice.call(hash,0),network:prefix==="bitcoincash"?"mainnet":"testnet",type:type==="P2PKH"?"p2pkh":"p2sh"}}catch{return}}function encodeAsLegacy(decoded){let versionByte=VERSION_BYTE.legacy[decoded.network][decoded.type],buffer=Buffer.alloc(1+decoded.hash.length);return buffer[0]=versionByte,buffer.set(decoded.hash,1),base58check.encode(buffer)}function encodeAsCashaddr(decoded){let prefix=decoded.network==="mainnet"?"bitcoincash":"bchtest",type=decoded.type==="p2pkh"?"P2PKH":"P2SH",hash=new Uint8Array(decoded.hash);return cashaddr.encode(prefix,type,hash)}var import_sha2,import_base,import_helpers4,base58check,UtxoNetwork,VERSION_BYTE;var init_bchaddrjs=__esm(()=>{init_cashaddr();import_sha2=require("@noble/hashes/sha2.js"),import_base=require("@scure/base"),import_helpers4=require("@swapkit/helpers"),base58check=import_base.createBase58check(import_sha2.sha256);((UtxoNetwork2)=>{UtxoNetwork2.Mainnet="mainnet";UtxoNetwork2.Testnet="testnet"})(UtxoNetwork||={});VERSION_BYTE={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}}});function compileMemo(memo){let data=new Uint8Array(Buffer.from(memo,"utf8"));return import_utxo_signer3.Script.encode(["RETURN",data])}var import_helpers5,import_utxo_signer3,MIN_TX_FEE=1000,TX_OVERHEAD=10,SEGWIT_MARKER_FLAG_WEIGHT=2,OP_RETURN_OVERHEAD=10,TX_INPUT_BASE=41,TX_INPUT_PUBKEYHASH=107,UTXOScriptType,InputSizes,OutputSizes,getScriptTypeForAddress=(address)=>{if(address.startsWith("bc1")||address.startsWith("tb1")||address.startsWith("ltc1")||address.startsWith("tltc1"))return"P2WPKH";if(address.startsWith("1")||address.startsWith("m")||address.startsWith("n")||address.startsWith("bitcoincash:q")||address.startsWith("bitcoincash:p")||address.startsWith("q")||address.startsWith("p")||address.startsWith("L")||address.startsWith("M")||address.startsWith("3")||address.startsWith("D")||address.startsWith("A")||address.startsWith("9")||address.startsWith("X")||address.startsWith("7")||address.startsWith("y")||address.startsWith("t1")||address.startsWith("t3")||address.startsWith("tm"))return"P2PKH";throw new import_helpers5.SwapKitError("toolbox_utxo_invalid_address",{address})},calculateTxSize=({inputs,outputs,feeRate})=>{let inputType=inputs[0]&&"address"in inputs[0]&&inputs[0].address?getScriptTypeForAddress(inputs[0].address):"P2PKH",inputSize=(feeRate?inputs.filter((utxo)=>utxo.value>=InputSizes["type"in utxo&&utxo.type?utxo.type:"P2PKH"]*Math.ceil(feeRate)):inputs).reduce((total,utxo)=>total+getInputSize(utxo),0),outputSize=outputs?.reduce((total,output)=>total+getOutputSize(output),0)||OutputSizes[inputType],baseSize=TX_OVERHEAD+inputSize+outputSize;return inputType==="P2WPKH"?Math.ceil(baseSize+SEGWIT_MARKER_FLAG_WEIGHT/4):baseSize},getInputSize=(input)=>{if("type"in input&&input.type)return InputSizes[input.type];if("address"in input&&input.address)return InputSizes[getScriptTypeForAddress(input.address)];return TX_INPUT_BASE+TX_INPUT_PUBKEYHASH},getOutputSize=(output,scriptType)=>{if(output?.script)return OP_RETURN_OVERHEAD+output.script.length+(output.script.length>=74?2:1);if(scriptType)return OutputSizes[scriptType];if("address"in output&&output.address)return OutputSizes[getScriptTypeForAddress(output.address)];return OutputSizes.P2PKH};var init_txSize=__esm(()=>{import_helpers5=require("@swapkit/helpers"),import_utxo_signer3=require("@swapkit/utxo-signer");((UTXOScriptType2)=>{UTXOScriptType2.P2PKH="P2PKH";UTXOScriptType2.P2WPKH="P2WPKH"})(UTXOScriptType||={});InputSizes={["P2PKH"]:148,["P2WPKH"]:68},OutputSizes={["P2PKH"]:34,["P2WPKH"]:31}});function getDustThreshold(chain){switch(chain){case import_helpers6.Chain.Bitcoin:case import_helpers6.Chain.BitcoinCash:return 550;case import_helpers6.Chain.Dash:case import_helpers6.Chain.Litecoin:return 5500;case import_helpers6.Chain.Dogecoin:return 1e5;case import_helpers6.Chain.Zcash:return 546;default:throw new import_helpers6.SwapKitError("toolbox_utxo_not_supported",{chain})}}function accumulative({inputs,outputs,feeRate=1,chain=import_helpers6.Chain.Bitcoin,changeAddress=""}){let inputTxType=inputs[0]&&"address"in inputs[0]&&inputs[0].address?getScriptTypeForAddress(inputs[0].address):"P2PKH",filteredInputs=inputs.filter((input)=>getInputSize(input)*feeRate<=input.value),segwitOverhead=inputTxType==="P2WPKH"?Math.ceil(SEGWIT_MARKER_FLAG_WEIGHT/4):0,txSizeWithoutInputs=TX_OVERHEAD+segwitOverhead+outputs.reduce((total,output)=>total+getOutputSize(output),0),amountToSend=outputs.reduce((total,output)=>total+output.value,0),fees=txSizeWithoutInputs*feeRate,inputsValue=0,inputsToUse=[];for(let input of filteredInputs){let inputSize=getInputSize(input),inputFee=feeRate*inputSize;fees+=inputFee,inputsValue+=input.value,inputsToUse.push(input);let totalCost=fees+amountToSend;if(inputsValue<totalCost)continue;let remainder=inputsValue-totalCost,feeForExtraOutput=feeRate*getOutputSize({address:changeAddress,value:0});if(remainder>feeForExtraOutput){let feeAfterExtraOutput=feeForExtraOutput+fees,remainderAfterExtraOutput=inputsValue-(amountToSend+Math.ceil(feeAfterExtraOutput));if(remainderAfterExtraOutput>Math.max(getInputSize({value:0})*feeRate,getDustThreshold(chain)))return{fee:Math.ceil(feeAfterExtraOutput),inputs:inputsToUse,outputs:outputs.concat({address:changeAddress,value:remainderAfterExtraOutput})}}return{fee:Math.ceil(fees),inputs:inputsToUse,outputs}}return{fee:Math.ceil(feeRate*calculateTxSize({inputs,outputs}))}}var import_helpers6;var init_coinselect=__esm(()=>{init_txSize();import_helpers6=require("@swapkit/helpers")});var init_helpers=__esm(()=>{init_api();init_bchaddrjs();init_coinselect();init_txSize()});function stripPrefix(address){return address.replace(/(bchtest:|bitcoincash:)/,"")}function validateBchAddress(address){let strippedAddress=stripPrefix(address);return isValidAddress(strippedAddress)&&detectAddressNetwork(strippedAddress)==="mainnet"}function validateZcashAddress(address){try{if(address.startsWith("z"))return console.warn("Shielded Zcash addresses (z-addresses) are not supported. Use transparent addresses (t1/t3) only."),!1;let decoded=import_utxo_signer4.Address(import_utxo_signer4.ZCASH_NETWORK).decode(address);return decoded.type==="pkh"||decoded.type==="sh"}catch{return!1}}var import_utxo_signer4;var init_validators=__esm(()=>{init_helpers();import_utxo_signer4=require("@swapkit/utxo-signer")});function validateUtxoAddress({address,chain}){return import_ts_pattern.match(chain).with(import_helpers8.Chain.BitcoinCash,()=>validateBchAddress(address)).with(import_helpers8.Chain.Zcash,()=>validateZcashAddress(address)).otherwise(()=>{try{return import_utxo_signer5.Address(getNetworkForChain(chain)).decode(address),!0}catch{return!1}})}function getNetworkForChain(chain){return import_ts_pattern.match(chain).with(import_helpers8.Chain.Bitcoin,()=>import_utxo_signer5.NETWORKS.bitcoin).with(import_helpers8.Chain.BitcoinCash,()=>import_utxo_signer5.NETWORKS.bitcoinCash).with(import_helpers8.Chain.Dash,()=>import_utxo_signer5.NETWORKS.dash).with(import_helpers8.Chain.Dogecoin,()=>import_utxo_signer5.NETWORKS.dogecoin).with(import_helpers8.Chain.Litecoin,()=>import_utxo_signer5.NETWORKS.litecoin).with(import_helpers8.Chain.Zcash,()=>import_utxo_signer5.NETWORKS.zcash).exhaustive()}function derivePrivateKey({phrase,derivationPath,network,seed:providedSeed}){let seed=providedSeed??import_bip39.mnemonicToSeedSync(phrase),derived=import_bip32.HDKey.fromMasterSeed(seed,network.bip32).derive(derivationPath);if(!derived.privateKey)throw new import_helpers8.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not derive private key from phrase"});return derived.privateKey}function getPublicKey(privateKey){return import_secp256k1.secp256k1.getPublicKey(privateKey,!0)}function getAddressFromPublicKey({publicKey,chain,network}){if(chain===import_helpers8.Chain.BitcoinCash){let p2pkhPayment=import_utxo_signer5.p2pkh(publicKey,network);if(!p2pkhPayment.hash)throw new import_helpers8.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return import_utxo_signer5.encodeCashAddr({hash:p2pkhPayment.hash,prefix:import_utxo_signer5.CashAddrPrefix.MAINNET,type:import_utxo_signer5.CashAddrType.P2PKH}).replace(/^bitcoincash:/,"")}let payment=!nonSegwitChains.includes(chain)?import_utxo_signer5.p2wpkh(publicKey,network):import_utxo_signer5.p2pkh(publicKey,network);if(!payment.address)throw new import_helpers8.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive address"});return payment.address}function createKeysForPath({phrase,derivationPath,chain,wif,seed}){let network=getNetworkForChain(chain);if(wif){let privateKey2=import_utxo_signer5.WIF(network).decode(wif),publicKey2=getPublicKey(privateKey2);return{privateKey:privateKey2,publicKey:publicKey2}}if(!phrase)throw new import_helpers8.SwapKitError("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let path=derivationPath||import_helpers8.derivationPathToString(import_helpers8.NetworkDerivationPath[chain]),privateKey=derivePrivateKey({derivationPath:path,network,phrase,seed}),publicKey=getPublicKey(privateKey);return{privateKey,publicKey}}function getWIF(privateKey,chain){return import_utxo_signer5.WIF(getNetworkForChain(chain)).encode(privateKey)}function getAccountHDKey({phrase,derivationPath,chain,seed:providedSeed}){let pathParts=derivationPath.split("/");if(pathParts.length<4)throw new import_helpers8.SwapKitError("toolbox_utxo_invalid_params",{error:`Derivation path must have at least 4 levels (got ${pathParts.length}): ${derivationPath}`});let network=getNetworkForChain(chain),seed=providedSeed??import_bip39.mnemonicToSeedSync(phrase),master=import_bip32.HDKey.fromMasterSeed(seed,network.bip32),accountPath=pathParts.slice(0,4).join("/");return master.derive(accountPath)}function addInputsAndOutputs({inputs,outputs,chain,tx,sender,compiledMemo,enableRBF=!1}){let network=getNetworkForChain(chain),useWitness=!nonSegwitChains.includes(chain),sequence=enableRBF?import_utxo_signer5.RBF_SEQUENCE:void 0,seen=new Set;for(let utxo of inputs){let outpoint=`${utxo.hash}:${utxo.index}`;if(seen.has(outpoint))throw new import_helpers8.SwapKitError("toolbox_utxo_invalid_params",{error:"Duplicate input detected"});seen.add(outpoint);let txid=typeof utxo.hash==="string"?import_base2.hex.decode(utxo.hash):utxo.hash;if(useWitness&&utxo.witnessUtxo)tx.addInput({index:utxo.index,sequence,txid,witnessUtxo:{amount:BigInt(utxo.witnessUtxo.value),script:utxo.witnessUtxo.script}});else if(utxo.txHex)tx.addInput({index:utxo.index,nonWitnessUtxo:import_base2.hex.decode(utxo.txHex),sequence,txid,...chain===import_helpers8.Chain.BitcoinCash?{sighashType:import_utxo_signer5.BCHSigHash.ALL}:{}});else throw new import_helpers8.SwapKitError("toolbox_utxo_invalid_params",{error:"Input requires either witnessUtxo or txHex for non-segwit chains"})}for(let output of outputs){let address="address"in output&&output.address?output.address:sender;if(chain===import_helpers8.Chain.BitcoinCash)address=toLegacyAddress(address);if(output.script){if(compiledMemo)tx.addOutput({amount:0n,script:compiledMemo})}else tx.addOutputAddress(address,BigInt(output.value),network)}return{inputs,tx}}async function getFeeRates(chain){let suggestedFeeRate=await getUtxoApi(chain).getSuggestedTxFee();return{[import_helpers8.FeeOption.Average]:suggestedFeeRate,[import_helpers8.FeeOption.Fast]:import_helpers8.applyFeeMultiplier(suggestedFeeRate,import_helpers8.FeeOption.Fast),[import_helpers8.FeeOption.Fastest]:import_helpers8.applyFeeMultiplier(suggestedFeeRate,import_helpers8.FeeOption.Fastest)}}async function getInputsAndTargetOutputs({assetValue,recipient,memo,sender,fetchTxHex:fetchTxOverwrite=!1}){let chain=assetValue.chain,feeRate=(await getFeeRates(chain))[import_helpers8.FeeOption.Fastest],fetchTxHex=fetchTxOverwrite||nonSegwitChains.includes(chain),amountToSend=assetValue.getBaseValue("number"),targetValue=Math.ceil(amountToSend+feeRate*5000);return{inputs:await getUtxoApi(chain).getUtxos({address:sender,fetchTxHex,targetValue}),outputs:[{address:recipient,value:amountToSend},...memo?[{address:"",script:compileMemo(memo),value:0}]:[]]}}async function createTransaction({assetValue,recipient,memo,feeRate,sender,fetchTxHex=!1,enableRBF=!1}){let chain=assetValue.chain,compiledMemo=memo?compileMemo(memo):null,inputsAndOutputs=await getInputsAndTargetOutputs({assetValue,fetchTxHex,memo,recipient,sender}),{inputs,outputs}=accumulative({...inputsAndOutputs,chain,feeRate});if(!(inputs&&outputs))throw new import_helpers8.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue,sender});let tx=new import_utxo_signer5.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!compiledMemo,version:1}),{inputs:mappedInputs,tx:mappedTx}=addInputsAndOutputs({chain,compiledMemo,enableRBF,inputs,outputs,sender,tx});return{inputs:mappedInputs,tx:mappedTx,utxos:inputsAndOutputs.inputs}}async function getInputsOutputsFee({assetValue,feeOptionKey=import_helpers8.FeeOption.Fast,feeRate,memo,sender,recipient}){let chain=assetValue.chain,inputsAndOutputs=await getInputsAndTargetOutputs({assetValue,memo,recipient,sender}),feeRateWhole=feeRate?Math.floor(feeRate):(await getFeeRates(chain))[feeOptionKey];return accumulative({...inputsAndOutputs,chain,feeRate:feeRateWhole})}function estimateMaxSendableAmount(chain){return async function({from,memo,feeRate,feeOptionKey=import_helpers8.FeeOption.Fast,recipients=1}){let addressData=await getUtxoApi(chain).getAddressData(from),feeRateWhole=feeRate?Math.ceil(feeRate):(await getFeeRates(chain))[feeOptionKey],inputs=addressData?.utxo.map((utxo)=>({...utxo,hash:"",type:"P2PKH"})).filter((utxo)=>utxo.value>Math.max(getDustThreshold(chain),getInputSize(utxo)*feeRateWhole));if(!inputs?.length)return import_helpers8.AssetValue.from({chain});let balanceValue=BigInt(inputs.reduce((sum,utxo)=>sum+utxo.value,0)),balance=import_helpers8.AssetValue.from({chain,value:balanceValue}),outputs=typeof recipients==="number"?Array.from({length:recipients},()=>({address:from,value:0})):recipients;if(memo)outputs.push({address:from,script:compileMemo(memo),value:0});let txSize2=calculateTxSize({inputs,outputs}),fee=import_helpers8.AssetValue.from({chain,value:BigInt(txSize2*feeRateWhole)});return balance.sub(fee)}}function estimateTransactionFee(chain){return async function(params){let{fee}=await getInputsOutputsFee(params);return import_helpers8.AssetValue.from({chain,value:import_helpers8.SwapKitNumber.fromBigInt(BigInt(fee),8).getValue("string")})}}function createSignerWithKeys({chain,phrase,derivationPath,seed}){let network=getNetworkForChain(chain),{privateKey,publicKey}=createKeysForPath({chain,derivationPath,phrase,seed}),allowedSighash=chain===import_helpers8.Chain.BitcoinCash?[import_utxo_signer5.BCHSigHash.ALL]:[import_utxo_signer5.SigHash.ALL];return{getAddress:()=>getAddressFromPublicKey({chain,network,publicKey}),privateKey,publicKey,signTransaction:(tx)=>{return tx.sign(privateKey,allowedSighash),tx}}}function transfer(chain,signer){return async function({memo,recipient,feeOptionKey,feeRate,assetValue,enableRBF=!1}){let from=signer?.getAddress();if(!(signer&&from))throw new import_helpers8.SwapKitError("toolbox_utxo_no_signer");if(!recipient)throw new import_helpers8.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});import_helpers8.warnOnce({condition:enableRBF&&!rbfSupportedChains.includes(chain),id:`rbf_not_supported_${chain}`,warning:`RBF (Replace-by-Fee) is not reliably supported on ${chain}. Transaction will be created without RBF signaling.`});let isRBFEnabled=enableRBF&&rbfSupportedChains.includes(chain),txFeeRate=feeRate||(await getFeeRates(chain))[feeOptionKey||import_helpers8.FeeOption.Fast],{tx}=await createTransaction({assetValue,enableRBF:isRBFEnabled,feeRate:txFeeRate,memo,recipient,sender:from});return signer.signTransaction(tx),tx.finalize(),getUtxoApi(chain).broadcastTx(import_base2.hex.encode(tx.extract()))}}function getUTXOAddressValidator(chain){return(address)=>validateUtxoAddress({address,chain})}function addressFromKeysGetter(chain){let network=getNetworkForChain(chain);return function(keys){if(!keys)throw new import_helpers8.SwapKitError("toolbox_utxo_invalid_params",{error:"Keys must be provided"});return getAddressFromPublicKey({chain,network,publicKey:keys.publicKey})}}function createUTXOToolbox({chain,...toolboxParams}){let phrase="phrase"in toolboxParams?toolboxParams.phrase:void 0,index="index"in toolboxParams?toolboxParams.index||0:0,seed=phrase?import_bip39.mnemonicToSeedSync(phrase):void 0,baseDerivationPath="derivationPath"in toolboxParams&&toolboxParams.derivationPath?toolboxParams.derivationPath:import_helpers8.updateDerivationPath(import_helpers8.NetworkDerivationPath[chain],{index}),derivationPath=import_helpers8.derivationPathToString(baseDerivationPath),internalSigner=phrase?createSignerWithKeys({chain,derivationPath,phrase,seed}):void 0,externalSigner="signer"in toolboxParams?toolboxParams.signer:void 0,keys=phrase?createKeysForPath({chain,derivationPath,phrase,seed}):void 0;function getAddress(){if(internalSigner)return Promise.resolve(internalSigner.getAddress());if(externalSigner)return externalSigner.getAddress();return Promise.resolve(void 0)}function getAccountHDKeyForIndex(accountIndex){if(!phrase)return;let accountPath=getUTXOAccountPath({accountIndex,chain,derivationPath:baseDerivationPath});return getAccountHDKey({chain,derivationPath:import_helpers8.derivationPathToString(accountPath),phrase,seed})}let accountHDKey=getAccountHDKeyForIndex();function getExtendedPublicKey(){if(!accountHDKey)return;return accountHDKey.publicExtendedKey}function getExtendedPublicKeyInfo({accountIndex}={}){let hdKey=accountIndex===void 0?accountHDKey:getAccountHDKeyForIndex(accountIndex);if(!hdKey)return;let accountPath=getUTXOAccountPath({accountIndex,chain,derivationPath:baseDerivationPath});return{accountIndex:getUTXOAccountIndexFromPath(accountPath),path:import_helpers8.derivationPathToString(accountPath),xpub:hdKey.publicExtendedKey}}function deriveAddressAtIndex({accountIndex,index:index2,change=!1}){let hdKey=accountIndex===void 0?accountHDKey:getAccountHDKeyForIndex(accountIndex);if(!hdKey)return;let addressPath=getUTXOAddressPath({accountIndex,chain,change,derivationPath:baseDerivationPath,index:index2}),network=getNetworkForChain(chain),childKey=hdKey.deriveChild(Number(change)).deriveChild(index2);if(!childKey.publicKey)throw new import_helpers8.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not derive public key"});let address=getAddressFromPublicKey({chain,network,publicKey:childKey.publicKey}),pubkey=import_base2.hex.encode(childKey.publicKey);return{accountIndex:getUTXOAccountIndexFromPath(addressPath),address,change,index:index2,path:import_helpers8.derivationPathToString(addressPath),pubkey}}async function isRBFEnabled(txid){if(!rbfSupportedChains.includes(chain))return{reason:`RBF is not supported on ${chain}`,supported:!1};let txDetails=await getUtxoApi(chain).getTransactionDetails(txid);return{canReplace:txDetails.isRBF&&!txDetails.confirmed,confirmed:txDetails.confirmed,enabled:txDetails.isRBF,fee:txDetails.fee,sequences:txDetails.sequences,supported:!0}}async function createReplacementTransaction({txid,newFeeRate,recipient,memo}){if(!rbfSupportedChains.includes(chain))throw new import_helpers8.SwapKitError("toolbox_utxo_rbf_not_supported",{chain});let txDetails=await getUtxoApi(chain).getTransactionDetails(txid);if(!txDetails.isRBF)throw new import_helpers8.SwapKitError("toolbox_utxo_tx_not_replaceable",{txid});if(txDetails.confirmed)throw new import_helpers8.SwapKitError("toolbox_utxo_tx_already_confirmed",{blockId:txDetails.blockId,txid});let totalInputValue=txDetails.inputs.reduce((sum,input)=>sum+input.value,0),sendAmount=txDetails.outputs.find((out)=>out.recipient===recipient)?.value||0;if(sendAmount===0)throw new import_helpers8.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not determine send amount from original transaction"});let inputs=await Promise.all(txDetails.inputs.map(async(input)=>{let rawTx=await getUtxoApi(chain).getRawTx(input.transaction_hash);return{hash:input.transaction_hash,index:input.index,txHex:rawTx,value:input.value,witnessUtxo:void 0}})),compiledMemo=memo?compileMemo(memo):null,estimatedSize=calculateTxSize({feeRate:newFeeRate,inputs:inputs.map((i)=>({...i,type:"P2WPKH"})),outputs:[{address:recipient,value:sendAmount}]}),newFee=Math.ceil(estimatedSize*newFeeRate);if(newFee<=txDetails.fee)throw new import_helpers8.SwapKitError("toolbox_utxo_rbf_fee_too_low",{newFee,originalFee:txDetails.fee});let feeDelta=newFee-txDetails.fee,newSendAmount=sendAmount-feeDelta;if(newSendAmount<=0)throw new import_helpers8.SwapKitError("toolbox_utxo_rbf_insufficient_change");let tx=new import_utxo_signer5.Transaction({allowLegacyWitnessUtxo:!0,version:1}),outputs=[{address:recipient,value:newSendAmount},...memo?[{address:"",script:compileMemo(memo),value:0}]:[]],changeValue=totalInputValue-newSendAmount-newFee,senderAddress=await getAddress();if(changeValue>getDustThreshold(chain)&&senderAddress)outputs.push({address:senderAddress,value:changeValue});return addInputsAndOutputs({chain,compiledMemo,inputs,outputs,sender:senderAddress||recipient,tx}),{feeDelta,newFee,originalFee:txDetails.fee,tx}}async function bumpFee({txid,newFeeRate,recipient,memo}){if(!internalSigner)throw new import_helpers8.SwapKitError("toolbox_utxo_no_signer");let{tx,originalFee,newFee}=await createReplacementTransaction({memo,newFeeRate,recipient,txid});internalSigner.signTransaction(tx),tx.finalize();let newTxid=await getUtxoApi(chain).broadcastTx(import_base2.hex.encode(tx.extract()));return{newFee,originalFee,txid:newTxid}}function derivePrivateKeyAtIndex({accountIndex,index:index2,change=!1}){assertDerivationIndex("index",index2);let hdKey=accountIndex===void 0?accountHDKey:getAccountHDKeyForIndex(accountIndex);if(!hdKey)return;return hdKey.deriveChild(Number(change)).deriveChild(index2).privateKey||void 0}function signTransactionWithMultipleKeys({tx,inputDerivations}){if(!accountHDKey)throw new import_helpers8.SwapKitError("toolbox_utxo_no_signer");let allowedSighash=chain===import_helpers8.Chain.BitcoinCash?[import_utxo_signer5.BCHSigHash.ALL]:[import_utxo_signer5.SigHash.ALL];for(let i=0;i<inputDerivations.length;i++){let derivation=inputDerivations[i];if(!derivation)continue;let{derivationIndex,isChange}=derivation,privateKey=derivePrivateKeyAtIndex({change:isChange,index:derivationIndex});if(!privateKey)throw new import_helpers8.SwapKitError("toolbox_utxo_invalid_params",{error:`Could not derive private key for input ${i} at index ${derivationIndex}`});tx.signIdx(privateKey,i,allowedSighash)}return tx}async function transferFromMultipleAddresses({utxos,recipient,assetValue,memo,feeRate,feeOptionKey,changeAddress}){if(!accountHDKey)throw new import_helpers8.SwapKitError("toolbox_utxo_no_signer");let txFeeRate=feeRate||(await getFeeRates(chain))[feeOptionKey||import_helpers8.FeeOption.Fast],compiledMemo=memo?compileMemo(memo):null,targetOutputs=[{address:recipient,value:assetValue.getBaseValue("number")}];if(compiledMemo)targetOutputs.push({address:"",script:compiledMemo,value:0});let basicUtxos=utxos.map(({hash,index:index2,value,txHex,witnessUtxo})=>({hash,index:index2,txHex,value,witnessUtxo:witnessUtxo?{script:witnessUtxo.script,value:witnessUtxo.value}:void 0})),{inputs:selectedInputs,outputs}=accumulative({chain,feeRate:txFeeRate,inputs:basicUtxos,outputs:targetOutputs});if(!(selectedInputs&&outputs))throw new import_helpers8.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue,sender:"multiple addresses"});let tx=new import_utxo_signer5.Transaction({allowLegacyWitnessUtxo:!0,version:1}),firstUtxoAddress=utxos[0]?.address,senderAddress=changeAddress||await getAddress()||firstUtxoAddress||recipient;addInputsAndOutputs({chain,compiledMemo,inputs:selectedInputs,outputs,sender:senderAddress,tx});let inputDerivations=selectedInputs.map((input)=>{let utxoInfo=utxos.find((u)=>u.hash===input.hash&&u.index===input.index);return utxoInfo?{derivationIndex:utxoInfo.derivationIndex,isChange:utxoInfo.isChange}:{derivationIndex:0,isChange:!1}});return signTransactionWithMultipleKeys({inputDerivations,tx}),tx.finalize(),getUtxoApi(chain).broadcastTx(import_base2.hex.encode(tx.extract()))}function resolveDerivationIndex({address,gapLimit=20}){if(!accountHDKey)return;for(let i=0;i<gapLimit;i++){let derived=deriveAddressAtIndex({change:!1,index:i}),derivedChange=deriveAddressAtIndex({change:!0,index:i}),change=derived?.address===address?!1:derivedChange?.address===address;if(derived?.address===address||derivedChange?.address===address)return{change,index:i}}return}return{accumulative,broadcastTx:(txHash)=>getUtxoApi(chain).broadcastTx(txHash),bumpFee,calculateTxSize,createKeysForPath:(params)=>createKeysForPath({...params,chain}),createReplacementTransaction,createTransaction,deriveAddressAtIndex,derivePrivateKeyAtIndex,estimateMaxSendableAmount:estimateMaxSendableAmount(chain),estimateTransactionFee:estimateTransactionFee(chain),getAddress,getAddressFromKeys:addressFromKeysGetter(chain),getBalance:getBalance(chain),getExtendedPublicKey,getExtendedPublicKeyInfo,getFeeRates:()=>getFeeRates(chain),getInputsOutputsFee,getNetworkForChain:()=>getNetworkForChain(chain),getPrivateKeyFromMnemonic:(params)=>getWIF(createKeysForPath({...params,chain}).privateKey,chain),isRBFEnabled,keys,resolveDerivationIndex,signAndBroadcastTransaction:async(tx)=>{if(!internalSigner)throw new import_helpers8.SwapKitError("toolbox_utxo_no_signer");return internalSigner.signTransaction(tx),tx.finalize(),await getUtxoApi(chain).broadcastTx(import_base2.hex.encode(tx.extract()))},signTransactionWithMultipleKeys,transfer:transfer(chain,internalSigner),transferFromMultipleAddresses,validateAddress:getUTXOAddressValidator(chain)}}var import_secp256k1,import_base2,import_bip32,import_bip39,import_helpers8,import_utxo_signer5,import_ts_pattern,nonSegwitChains,rbfSupportedChains;var init_utxo=__esm(()=>{init_utils();init_hdWallet();init_helpers();init_validators();import_secp256k1=require("@noble/curves/secp256k1.js"),import_base2=require("@scure/base"),import_bip32=require("@scure/bip32"),import_bip39=require("@scure/bip39"),import_helpers8=require("@swapkit/helpers"),import_utxo_signer5=require("@swapkit/utxo-signer"),import_ts_pattern=require("ts-pattern"),nonSegwitChains=[import_helpers8.Chain.Dash,import_helpers8.Chain.Dogecoin,import_helpers8.Chain.Zcash,import_helpers8.Chain.BitcoinCash],rbfSupportedChains=[import_helpers8.Chain.Bitcoin]});function stripToCashAddress(address){return stripPrefix(toCashAddress(address))}function createSignerWithKeys2(keys){let network=getNetworkForChain(chain);function signTransaction(tx){return tx.sign(keys.privateKey,[import_utxo_signer6.BCHSigHash.ALL]),tx}function getAddress(){let p2pkhPayment=import_utxo_signer6.p2pkh(keys.publicKey,network);if(!p2pkhPayment.hash)throw new import_helpers10.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});let fullCashAddr=import_utxo_signer6.encodeCashAddr({hash:p2pkhPayment.hash,prefix:import_utxo_signer6.CashAddrPrefix.MAINNET,type:import_utxo_signer6.CashAddrType.P2PKH});return Promise.resolve(fullCashAddr.replace(/^bitcoincash:/,""))}return{getAddress,signTransaction}}function createBCHToolbox(toolboxParams){let phrase="phrase"in toolboxParams?toolboxParams.phrase:void 0,index="index"in toolboxParams?toolboxParams.index||0:0,derivationPath=import_helpers10.derivationPathToString("derivationPath"in toolboxParams&&toolboxParams.derivationPath?toolboxParams.derivationPath:import_helpers10.updateDerivationPath(import_helpers10.NetworkDerivationPath[chain],{index})),keys=phrase?createKeysForPath({chain,derivationPath,phrase}):void 0,signer=keys?createSignerWithKeys2(keys):("signer"in toolboxParams)?toolboxParams.signer:void 0;function getAddress(){return Promise.resolve(signer?.getAddress())}let{getBalance:getBalance2,getFeeRates:getFeeRates2,broadcastTx,...toolbox}=createUTXOToolbox({chain});function handleGetBalance(address,_scamFilter=!0){return getBalance2(stripPrefix(toCashAddress(address)))}return{...toolbox,broadcastTx,buildTx,createTransaction:createTransaction2,getAddress,getAddressFromKeys,getBalance:handleGetBalance,getFeeRates:getFeeRates2,stripPrefix,stripToCashAddress,transfer:transfer2({broadcastTx,getFeeRates:getFeeRates2,signer}),validateAddress:validateBchAddress}}async function createTransaction2({assetValue,recipient,memo,feeRate,sender}){if(!validateBchAddress(recipient))throw new import_helpers10.SwapKitError("toolbox_utxo_invalid_address",{address:recipient});let targetValue=Math.ceil(assetValue.getBaseValue("number")+feeRate*7500),utxos=await getUtxoApi(chain).getUtxos({address:stripToCashAddress(sender),fetchTxHex:!0,targetValue}),compiledMemo=memo?compileMemo(memo):null,targetOutputs=[],legacyRecipient=toLegacyAddress(recipient);if(targetOutputs.push({address:legacyRecipient,value:assetValue.getBaseValue("number")}),compiledMemo)targetOutputs.push({script:compiledMemo,value:0});let{inputs,outputs}=accumulative({chain,feeRate,inputs:utxos,outputs:targetOutputs});if(!(inputs&&outputs))throw new import_helpers10.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue,sender});let tx=new import_utxo_signer6.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!compiledMemo,version:1}),legacySender=toLegacyAddress(sender),{inputs:mappedInputs,tx:mappedTx}=addInputsAndOutputs({chain,compiledMemo,inputs,outputs:outputs.map((o)=>("address"in o)&&o.address?{...o,address:toLegacyAddress(o.address)}:o),sender:legacySender,tx});return{inputs:mappedInputs,tx:mappedTx,utxos:inputs}}function transfer2({broadcastTx,getFeeRates:getFeeRates2,signer}){return async function({recipient,assetValue,feeOptionKey=import_helpers10.FeeOption.Fast,...rest}){let from=await signer?.getAddress();if(!(signer&&from))throw new import_helpers10.SwapKitError("toolbox_utxo_no_signer");if(!recipient)throw new import_helpers10.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let feeRate=rest.feeRate||(await getFeeRates2())[feeOptionKey],{tx}=await createTransaction2({...rest,assetValue,feeRate,recipient,sender:from}),signedTx=await signer.signTransaction(tx);return signedTx.finalize(),broadcastTx(import_base3.hex.encode(signedTx.extract()))}}async function buildTx({assetValue,recipient,memo,feeRate,sender}){let recipientCashAddress=toCashAddress(recipient);if(!validateBchAddress(recipientCashAddress))throw new import_helpers10.SwapKitError("toolbox_utxo_invalid_address",{address:recipientCashAddress});let targetValue=Math.ceil(assetValue.getBaseValue("number")+feeRate*7500),utxos=await getUtxoApi(chain).getUtxos({address:stripToCashAddress(sender),fetchTxHex:!0,targetValue}),feeRateWhole=Number(feeRate.toFixed(0)),compiledMemo=memo?compileMemo(memo):null,targetOutputs=[];if(targetOutputs.push({address:toLegacyAddress(recipient),value:assetValue.getBaseValue("number")}),compiledMemo)targetOutputs.push({script:compiledMemo,value:0});let{inputs,outputs}=accumulative({chain,feeRate:feeRateWhole,inputs:utxos,outputs:targetOutputs});if(!(inputs&&outputs))throw new import_helpers10.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue,sender});let tx=new import_utxo_signer6.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!compiledMemo,version:1}),{inputs:mappedInputs,tx:mappedTx}=addInputsAndOutputs({chain,compiledMemo,inputs,outputs,sender:toLegacyAddress(sender),tx});return{inputs:mappedInputs,tx:mappedTx,utxos}}function getAddressFromKeys(keys){let network=import_utxo_signer6.NETWORKS.bitcoinCash,p2pkhPayment=import_utxo_signer6.p2pkh(keys.publicKey,network);if(!p2pkhPayment.hash)throw new import_helpers10.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return import_utxo_signer6.encodeCashAddr({hash:p2pkhPayment.hash,prefix:import_utxo_signer6.CashAddrPrefix.MAINNET,type:import_utxo_signer6.CashAddrType.P2PKH}).replace(/^bitcoincash:/,"")}var import_base3,import_helpers10,import_utxo_signer6,chain;var init_bitcoinCash=__esm(()=>{init_helpers();init_utxo();init_validators();import_base3=require("@scure/base"),import_helpers10=require("@swapkit/helpers"),import_utxo_signer6=require("@swapkit/utxo-signer"),chain=import_helpers10.Chain.BitcoinCash});function getZcashNetwork(){let{isStagenet}=import_helpers12.SKConfig.get("envs");return isStagenet?import_utxo_signer7.ZCASH_TEST_NETWORK:import_utxo_signer7.ZCASH_NETWORK}function base58checkEncode(payload){return base58check2.encode(payload)}function createZcashSignerFromPhrase({phrase,derivationPath}){let seed=import_bip392.mnemonicToSeedSync(phrase),node=import_bip322.HDKey.fromMasterSeed(seed).derive(derivationPath);if(!node.privateKey||!node.publicKey)throw new import_helpers12.SwapKitError("toolbox_utxo_invalid_params");let{privateKey,publicKey}=node,pubKeyHash=import_utxo_signer7.utils.hash160(publicKey),{isStagenet}=import_helpers12.SKConfig.get("envs"),prefix=isStagenet?new Uint8Array([29,37]):new Uint8Array([28,184]),payload=new Uint8Array(prefix.length+pubKeyHash.length);payload.set(prefix,0),payload.set(pubKeyHash,prefix.length);let address=base58checkEncode(payload);return{getAddress:()=>Promise.resolve(address),signTransaction:(tx)=>{if(tx instanceof import_utxo_signer7.PCZT)return tx.signAllInputs(privateKey,publicKey,import_utxo_signer7.ZcashSigHash.ALL),tx.finalizeAllInputs(),Promise.resolve(tx.extract());return tx.signAllInputs(privateKey,publicKey,import_utxo_signer7.ZcashSigHash.ALL),Promise.resolve(tx)}}}function addInputsAndOutputs2({inputs,outputs,tx,sender,compiledMemo}){let network=getZcashNetwork();for(let utxo of inputs){let senderDecoded=import_utxo_signer7.Address(network).decode(sender),prevScript=import_utxo_signer7.OutScript.encode(senderDecoded);tx.addInput({index:utxo.index,script:prevScript,sequence:4294967295,txid:import_base4.hex.decode(utxo.hash),value:BigInt(utxo.value)})}for(let output of outputs){let address="address"in output&&output.address?output.address:sender,hasOutputScript=output.script;if(hasOutputScript&&!compiledMemo)continue;if(hasOutputScript&&compiledMemo)tx.addOutput({amount:0n,script:compiledMemo});else tx.addOutputAddress(address,BigInt(output.value),network)}return{inputs,tx}}async function createTransaction3(buildTxParams){let{assetValue,recipient,memo,feeRate,sender,fetchTxHex}=buildTxParams,compiledMemo=memo?compileMemo(memo):null,utxos=await getUtxoApi(import_helpers12.Chain.Zcash).getUtxos({address:sender,fetchTxHex:fetchTxHex!==!1}),targetOutputs=[{address:recipient,value:Number(assetValue.getBaseValue("string"))},...compiledMemo?[{script:compiledMemo,value:0}]:[]],{inputs,outputs}=accumulative({chain:import_helpers12.Chain.Zcash,changeAddress:sender,feeRate,inputs:utxos,outputs:targetOutputs});if(!(inputs&&outputs))throw new import_helpers12.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue,sender});let tx=import_utxo_signer7.createZcashTransaction({consensusBranchId:import_utxo_signer7.ZcashConsensusBranchId.NU6_1,expiryHeight:0,lockTime:0,version:4,versionGroupId:import_utxo_signer7.ZcashVersionGroupId.SAPLING}),{tx:mappedTx,inputs:mappedInputs}=addInputsAndOutputs2({compiledMemo,inputs,outputs,sender,tx});return{inputs:mappedInputs,outputs,tx:mappedTx}}function createZcashToolbox(toolboxParams){let signer=import_ts_pattern2.match(toolboxParams).with({signer:import_ts_pattern2.P.not(import_ts_pattern2.P.nullish)},({signer:signer2})=>signer2).with({phrase:import_ts_pattern2.P.string},({phrase,derivationPath,index=0})=>{let baseDerivationPath=derivationPath||import_helpers12.NetworkDerivationPath[import_helpers12.Chain.Zcash]||[44,133,0,0,0],updatedPath=import_helpers12.updateDerivationPath(baseDerivationPath,{index}),pathString=import_helpers12.derivationPathToString(updatedPath);return createZcashSignerFromPhrase({derivationPath:pathString,phrase})}).otherwise(()=>{return}),baseToolbox=createUTXOToolbox({chain:import_helpers12.Chain.Zcash,signer});async function transfer3({recipient,assetValue,feeOptionKey=import_helpers12.FeeOption.Fast,...rest}){let from=await signer?.getAddress();if(!(signer&&from))throw new import_helpers12.SwapKitError("toolbox_utxo_no_signer");let feeRate=rest.feeRate||(await baseToolbox.getFeeRates())[feeOptionKey],{tx}=await createTransaction3({...rest,assetValue,feeRate,recipient,sender:from}),txHex=(await signer.signTransaction(tx)).toHex();return baseToolbox.broadcastTx(txHex)}function createKeysForPath2({phrase,derivationPath="m/44'/133'/0'/0/0"}){let seed=import_bip392.mnemonicToSeedSync(phrase),node=import_bip322.HDKey.fromMasterSeed(seed).derive(derivationPath);if(!node.privateKey||!node.publicKey)throw new import_helpers12.SwapKitError("toolbox_utxo_invalid_params");return{privateKey:node.privateKey,publicKey:node.publicKey}}function getPrivateKeyFromMnemonic({phrase,derivationPath="m/44'/133'/0'/0/0"}){let keys=createKeysForPath2({derivationPath,phrase}),network=getZcashNetwork();return import_utxo_signer7.WIF(network).encode(keys.privateKey)}function getSignTransaction(signer2){return async function(tx){if(!signer2)throw new import_helpers12.SwapKitError("toolbox_utxo_no_signer");return await signer2.signTransaction(tx)}}function getSignAndBroadcastTransaction(signer2){return async function(tx){if(!signer2)throw new import_helpers12.SwapKitError("toolbox_utxo_no_signer");let signedTx=await signer2.signTransaction(tx);return baseToolbox.broadcastTx(signedTx.toHex())}}return{...baseToolbox,createKeysForPath:createKeysForPath2,createTransaction:createTransaction3,getPrivateKeyFromMnemonic,signAndBroadcastTransaction:getSignAndBroadcastTransaction(signer),signTransaction:getSignTransaction(signer),transfer:transfer3,validateAddress:validateZcashAddress}}var import_base4,import_bip322,import_bip392,import_helpers12,import_utxo_signer7,import_ts_pattern2,base58check2;var init_zcash=__esm(()=>{init_helpers();init_utxo();init_validators();import_base4=require("@scure/base"),import_bip322=require("@scure/bip32"),import_bip392=require("@scure/bip39"),import_helpers12=require("@swapkit/helpers"),import_utxo_signer7=require("@swapkit/utxo-signer"),import_ts_pattern2=require("ts-pattern");base58check2=import_base4.createBase58check(import_utxo_signer7.utils.sha256)});function deriveAddressesFromXpub({xpub,chain:chain2,count,startIndex=0,accountIndex}){if(assertDerivationIndex("count",count),count<1)throw RangeError("count must be at least 1");assertDerivationIndex("startIndex",startIndex);let network=getNetworkForChain(chain2),accountKey=import_bip323.HDKey.fromExtendedKey(xpub,network.bip32),accountPath=getUTXOAccountPath({accountIndex,chain:chain2}),resolvedAccountIndex=getUTXOAccountIndexFromPath(accountPath),addresses=[];for(let change of[!1,!0]){let changeKey=accountKey.deriveChild(Number(change));for(let i=0;i<count;i++){let index=startIndex+i,childKey=changeKey.deriveChild(index);if(!childKey.publicKey)continue;let addressPath=getUTXOAddressPath({accountIndex,chain:chain2,change,index});addresses.push({accountIndex:resolvedAccountIndex,address:getAddressFromPublicKey({chain:chain2,network,publicKey:childKey.publicKey}),change,index,path:import_helpers14.derivationPathToString(addressPath),pubkey:import_base5.hex.encode(childKey.publicKey)})}}return addresses}var import_base5,import_bip323,import_helpers14;var init_xpubDerivation=__esm(()=>{init_hdWallet();init_utxo();import_base5=require("@scure/base"),import_bip323=require("@scure/bip32"),import_helpers14=require("@swapkit/helpers")});function getUtxoToolbox(chain2,params2){switch(chain2){case import_helpers15.Chain.BitcoinCash:return createBCHToolbox(params2||{});case import_helpers15.Chain.Zcash:return createZcashToolbox(params2);case import_helpers15.Chain.Bitcoin:case import_helpers15.Chain.Dogecoin:case import_helpers15.Chain.Litecoin:case import_helpers15.Chain.Dash:return createUTXOToolbox({chain:chain2,...params2});default:throw new import_helpers15.SwapKitError("toolbox_utxo_not_supported",{chain:chain2})}}var import_helpers15;var init_toolbox=__esm(()=>{init_bitcoinCash();init_utxo();init_zcash();init_hdWallet();init_xpubDerivation();init_bitcoinCash();init_validators();import_helpers15=require("@swapkit/helpers")});var exports_utxo={};__export(exports_utxo,{validateZcashAddress:()=>validateZcashAddress,validateUtxoAddress:()=>validateUtxoAddress,validateBchAddress:()=>validateBchAddress,toLegacyAddress:()=>toLegacyAddress,toCashAddress:()=>toCashAddress,stripToCashAddress:()=>stripToCashAddress,stripPrefix:()=>stripPrefix,nonSegwitChains:()=>nonSegwitChains,isValidAddress:()=>isValidAddress,getUtxoToolbox:()=>getUtxoToolbox,getUtxoNetwork:()=>getUtxoNetwork,getUtxoApi:()=>getUtxoApi,getUTXOAddressValidator:()=>getUTXOAddressValidator,getUTXOAddressPath:()=>getUTXOAddressPath,getUTXOAccountPath:()=>getUTXOAccountPath,getUTXOAccountIndexFromPath:()=>getUTXOAccountIndexFromPath,getScriptTypeForAddress:()=>getScriptTypeForAddress,getOutputSize:()=>getOutputSize,getNetworkForChain:()=>getNetworkForChain,getInputSize:()=>getInputSize,getDustThreshold:()=>getDustThreshold,detectAddressNetwork:()=>detectAddressNetwork,deriveAddressesFromXpub:()=>deriveAddressesFromXpub,createZcashToolbox:()=>createZcashToolbox,createUTXOToolbox:()=>createUTXOToolbox,createHDWalletHelpers:()=>createHDWalletHelpers,createCustomUtxoApi:()=>createCustomUtxoApi,createBCHToolbox:()=>createBCHToolbox,compileMemo:()=>compileMemo,calculateTxSize:()=>calculateTxSize,assertDerivationIndex:()=>assertDerivationIndex,addressFromKeysGetter:()=>addressFromKeysGetter,addInputsAndOutputs:()=>addInputsAndOutputs,accumulative:()=>accumulative,UtxoNetwork:()=>UtxoNetwork,UTXOScriptType:()=>UTXOScriptType,TX_OVERHEAD:()=>TX_OVERHEAD,SEGWIT_MARKER_FLAG_WEIGHT:()=>SEGWIT_MARKER_FLAG_WEIGHT,OutputSizes:()=>OutputSizes,OP_RETURN_OVERHEAD:()=>OP_RETURN_OVERHEAD,MIN_TX_FEE:()=>MIN_TX_FEE,InputSizes:()=>InputSizes});module.exports=__toCommonJS(exports_utxo);var init_utxo2=__esm(()=>{init_utxo();init_hdWallet();init_helpers();init_toolbox();init_bitcoinCash();init_zcash()});init_utxo2();
|
|
1
|
+
var J0=Object.create;var{getPrototypeOf:Z0,defineProperty:CX,getOwnPropertyNames:N2,getOwnPropertyDescriptor:j0}=Object,M2=Object.prototype.hasOwnProperty;function D2(X){return this[X]}var Q0,G0,t0=(X,$,J)=>{var Z=X!=null&&typeof X==="object";if(Z){var j=$?Q0??=new WeakMap:G0??=new WeakMap,G=j.get(X);if(G)return G}J=X!=null?J0(Z0(X)):{};let q=$||!X||!X.__esModule?CX(J,"default",{value:X,enumerable:!0}):J;for(let Q of N2(X))if(!M2.call(q,Q))CX(q,Q,{get:D2.bind(X,Q),enumerable:!0});if(Z)j.set(X,q);return q},Y0=(X)=>{var $=(_2??=new WeakMap).get(X),J;if($)return $;if($=CX({},"__esModule",{value:!0}),X&&typeof X==="object"||typeof X==="function"){for(var Z of N2(X))if(!M2.call($,Z))CX($,Z,{get:D2.bind(X,Z),enumerable:!(J=j0(X,Z))||J.enumerable})}return _2.set(X,$),$},_2;var q0=(X)=>X;function L0(X,$){this[X]=q0.bind(null,$)}var z0=(X,$)=>{for(var J in $)CX(X,J,{get:$[J],enumerable:!0,configurable:!0,set:L0.bind($,J)})};var y=(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 Z=[...J?.slice(0,3)??C2.NetworkDerivationPath[$].slice(0,3)];if(X!==void 0)Z[2]=X;return Z}function YX({accountIndex:X,change:$=!1,chain:J,derivationPath:Z,index:j}){return K("index",j),[...i({accountIndex:X,chain:J,derivationPath:Z}),Number($),j]}function JX(X){return X[2]??0}function H2({deriveAddress:X,getBalance:$,getUtxos:J}){async function Z(Q){let{accountIndex:Y,count:z,startIndex:L=0,change:U=!1}=Q;if(K("count",z),z<1)throw RangeError("count must be at least 1");K("startIndex",L);let B=[];for(let _=0;_<z;_++){let M=await X({accountIndex:Y,change:U,index:L+_});if(M)B.push(M)}return B}async function j(Q){let{gapLimit:Y=20,change:z=!1}=Q??{},L=[],U=0,B=0;while(U<Y){let _=await X({change:z,index:B});if(!_)break;if((await $(_.address)).some((f)=>f.getValue("number")>0))L.push(_),U=0;else U++;B++}return L}async function G(Q=20){let[Y,z]=await Promise.all([j({change:!1,gapLimit:Q}),j({change:!0,gapLimit:Q})]),L=[...Y,...z],U=await Promise.all(L.map(async(_)=>{let O=(await $(_.address)).reduce((f,$X)=>f+$X.getValue("number"),0);return{..._,balance:O}})),B=U.reduce((_,M)=>_+M.balance,0);return{addresses:U,total:B}}async function q(Q=20){let[Y,z]=await Promise.all([j({change:!1,gapLimit:Q}),j({change:!0,gapLimit:Q})]),L=[...Y,...z];return(await Promise.all(L.map(async(B)=>{return(await J(B.address)).map((M)=>({...M,address:B.address,derivationIndex:B.index,isChange:B.change}))}))).flat()}return{deriveAddresses:Z,getAggregatedBalance:G,getAggregatedUtxos:q,scanForAddresses:j}}var C2;var HX=y(()=>{C2=require("@swapkit/helpers")});function T2(){function X(){let $=Date.now(),J=iX||$;return iX=J,$>iX?$:J+1}return U0+X().toString(36)}function b2(X){return async function(J,Z=!0){let j=await O2.SwapKitApi.getChainBalance({address:J,chain:X,scamFilter:Z}),{baseDecimal:G}=OX.getChainConfig(X),q=j.map(({identifier:Y,value:z,decimal:L})=>{return new OX.AssetValue({decimal:L||G,identifier:Y,value:z})});if(!q.some((Y)=>Y.isGasAsset))return[OX.AssetValue.from({chain:X}),...q];return q}}var OX,O2,U0,iX=0;var sX=y(()=>{OX=require("@swapkit/helpers"),O2=require("@swapkit/helpers/api"),U0=typeof process<"u"&&process.pid?process.pid.toString(36):""});async function W0({chain:X,txHash:$}){let J=`${TX(X)}/push/transaction`,Z=JSON.stringify({data:$});try{let j=await D.RequestClient.post(J,{body:Z,headers:{"Content-Type":"application/json"}});if(j.context.code!==200)throw new D.SwapKitError("toolbox_utxo_broadcast_failed",{error:j.context.error||"Transaction broadcast failed"});return j.data?.transaction_hash||$}catch(j){let G=await D.getRPCUrl(X);if(G){let q=JSON.stringify({id:T2(),jsonrpc:"2.0",method:"sendrawtransaction",params:[$]}),Q=await D.RequestClient.post(G,{body:q,headers:{"Content-Type":"application/json"}});if(Q.error)throw new D.SwapKitError("toolbox_utxo_broadcast_failed",{error:Q.error?.message});if(Q.result.includes('"code":-26'))throw new D.SwapKitError("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return Q.result}throw j}}function TX(X){return`https://api.blockchair.com/${B0(X)}`}function V2(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 B0(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 _0(X){try{let{feePerKb:$}=await D.RequestClient.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=$/1000;return Math.max(J,V2(X))}catch{return V2(X)}}async function SX(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 I2({address:X,chain:$,apiKey:J}){if(!X)throw new D.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await SX(`${TX($)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch{return{address:{balance:0,transaction_count:0},utxo:[]}}}async function N0({address:X,chain:$,apiKey:J}){return(await I2({address:X,apiKey:J,chain:$}))?.address.balance||0}async function f2({chain:X,apiKey:$,txHash:J}){if(!J)throw new D.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await SX(`${TX(X)}/raw/transaction/${J}`,$))?.[J]?.raw_transaction||""}catch(Z){let j=Z instanceof Error?Z.message:String(Z);return console.error(`Failed to fetch raw transaction: ${j}`),""}}async function D0({chain:X,apiKey:$,txHash:J}){if(!J)throw new D.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});let j=(await SX(`${TX(X)}/dashboards/transaction/${J}`,$))?.[J];if(!j)throw new D.SwapKitError("toolbox_utxo_tx_not_found",{txHash:J});let{transaction:G,inputs:q,outputs:Q}=j,Y=q.map((L)=>L.spending_sequence),z=G.is_rbf===!0||Y.some((L)=>L<M0);return{blockId:G.block_id,confirmed:G.block_id!==-1,fee:G.fee,inputs:q,isRBF:z,outputs:Q,sequences:Y,size:G.size,txid:G.hash,weight:G.weight}}async function C0({chain:X,address:$,apiKey:J,offset:Z=0,limit:j=30}){return(await SX(`${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=${j}&offset=${Z}`,J)).map(({is_spent:Y,script_hex:z,block_id:L,transaction_hash:U,index:B,value:_,spending_signature_hex:M})=>({hash:U,index:B,is_confirmed:L!==-1,is_spent:Y,script_hex:z,txHex:M,value:_}))}function H0(X){return X.reduce(($,J)=>$+J.value,0)}function k2(X,$){let J=[...X].sort((Z,j)=>j.value-Z.value);if($){let Z=[],j=0;for(let G of J)if(Z.push(G),j+=G.value,j>=$)break;return Z}return J}async function F2({chain:X,address:$,apiKey:J,targetValue:Z,accumulativeValue:j=0,offset:G=0,limit:q=30}){if(!$)throw new D.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{let Q=await C0({address:$,apiKey:J,chain:X,limit:q,offset:G,targetValue:Z}),z=Q.length<q,L=Q.filter(({is_spent:f})=>!f),U=H0(L),B=j+U,_=Z&&B>=Z;if(z||_)return k2(L,Z);let M=await F2({accumulativeValue:B,address:$,apiKey:J,chain:X,limit:q,offset:G+q,targetValue:Z}),O=[...L,...M];return k2(O,Z)}catch(Q){let Y=Q instanceof Error?Q.message:String(Q);return console.error(`Failed to fetch unspent UTXOs: ${Y}`),[]}}async function O0({address:X,chain:$,apiKey:J,fetchTxHex:Z=!0,targetValue:j}){let G=await F2({address:X,apiKey:J,chain:$,targetValue:j}),q=[];for(let{hash:Q,index:Y,script_hex:z,value:L}of G){let U;if(Z)U=await f2({apiKey:J,chain:$,txHash:Q});q.push({address:X,hash:Q,index:Y,txHex:U,value:L,witnessUtxo:{script:Buffer.from(z,"hex"),value:L}})}return q}function P(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)=>W0({chain:X,txHash:J}),getAddressData:(J)=>I2({address:J,apiKey:$,chain:X}),getBalance:(J)=>N0({address:J,apiKey:$,chain:X}),getRawTx:(J)=>f2({apiKey:$,chain:X,txHash:J}),getSuggestedTxFee:()=>_0(X),getTransactionDetails:(J)=>D0({apiKey:$,chain:X,txHash:J}),getUtxos:(J)=>O0({...J,apiKey:$,chain:X})}}function T0(X){return X}function b0(){return function($){switch($){case D.Chain.Bitcoin:return ZX.NETWORKS.bitcoin;case D.Chain.BitcoinCash:return ZX.NETWORKS.bitcoinCash;case D.Chain.Dash:return ZX.NETWORKS.dash;case D.Chain.Litecoin:return ZX.NETWORKS.litecoin;case D.Chain.Dogecoin:return ZX.NETWORKS.dogecoin;case D.Chain.Zcash:return ZX.NETWORKS.zcash;default:throw new D.SwapKitError("toolbox_utxo_not_supported",{chain:$})}}}var D,ZX,M0=4294967294;var E2=y(()=>{sX();D=require("@swapkit/helpers"),ZX=require("@swapkit/utxo-signer")});function I0(X,$,J){return p.encodeCashAddr({hash:J,prefix:X,type:V0[$]})}function f0(X){let $=p.decodeCashAddr(X),J=k0[$.type];if(!J)throw Error(`Unknown CashAddr type: ${$.type}`);return{hash:$.hash,prefix:$.prefix,type:J}}var p,V0,k0,aX;var P2=y(()=>{p=require("@swapkit/utxo-signer"),V0={P2PKH:p.CashAddrType.P2PKH,P2SH:p.CashAddrType.P2SH},k0={[p.CashAddrType.P2PKH]:"P2PKH",[p.CashAddrType.P2SH]:"P2SH"};aX={decode:f0,encode:I0}});function X2(X){try{return KX(X),!0}catch{return!1}}function $2(X){return KX(X)?.network}function u(X){let $=KX(X);if($?.format==="legacy")return X;return P0($)}function bX(X){let $=KX(X);return R0($)}function KX(X){try{let $=F0(X);if($)return $}catch{}try{let $=E0(X);if($)return $}catch{}throw new tX.SwapKitError("toolbox_utxo_invalid_address",{address:X})}function F0(X){try{let $=v2.decode(X);if($.length!==21)throw new tX.SwapKitError("toolbox_utxo_invalid_address",{address:X});let J=$[0],Z=Array.prototype.slice.call($,1);switch(J){case jX.legacy.mainnet.p2pkh:return{format:"legacy",hash:Z,network:"mainnet",type:"p2pkh"};case jX.legacy.mainnet.p2sh:return{format:"legacy",hash:Z,network:"mainnet",type:"p2sh"};case jX.legacy.testnet.p2pkh:return{format:"legacy",hash:Z,network:"testnet",type:"p2pkh"};case jX.legacy.testnet.p2sh:return{format:"legacy",hash:Z,network:"testnet",type:"p2sh"};case jX.bitpay.mainnet.p2pkh:return{format:"bitpay",hash:Z,network:"mainnet",type:"p2pkh"};case jX.bitpay.mainnet.p2sh:return{format:"bitpay",hash:Z,network:"mainnet",type:"p2sh"};default:return}}catch{return}}function E0(X){if(X.indexOf(":")!==-1)try{return R2(X)}catch{}else{let $=["bitcoincash","bchtest","bchreg"];for(let J of $)try{return R2(`${J}:${X}`)}catch{}}return}function R2(X){try{let{hash:$,prefix:J,type:Z}=aX.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call($,0),network:J==="bitcoincash"?"mainnet":"testnet",type:Z==="P2PKH"?"p2pkh":"p2sh"}}catch{return}}function P0(X){let $=jX.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=$,J.set(X.hash,1),v2.encode(J)}function R0(X){let $=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",Z=new Uint8Array(X.hash);return aX.encode($,J,Z)}var y2,A2,tX,v2,eX,jX;var w2=y(()=>{P2();y2=require("@noble/hashes/sha2.js"),A2=require("@scure/base"),tX=require("@swapkit/helpers"),v2=A2.createBase58check(y2.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 v(X){let $=new Uint8Array(Buffer.from(X,"utf8"));return K2.Script.encode(["RETURN",$])}var S2,K2,y0=1000,mX=10,lX=2,g2=10,A0=41,v0=107,xX,gX,VX,qX=(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 S2.SwapKitError("toolbox_utxo_invalid_address",{address:X})},QX=({inputs:X,outputs:$,feeRate:J})=>{let Z=X[0]&&"address"in X[0]&&X[0].address?qX(X[0].address):"P2PKH",G=(J?X.filter((z)=>z.value>=gX["type"in z&&z.type?z.type:"P2PKH"]*Math.ceil(J)):X).reduce((z,L)=>z+s(L),0),q=$?.reduce((z,L)=>z+kX(L),0)||VX[Z],Q=mX+G+q;return Z==="P2WPKH"?Math.ceil(Q+lX/4):Q},s=(X)=>{if("type"in X&&X.type)return gX[X.type];if("address"in X&&X.address)return gX[qX(X.address)];return A0+v0},kX=(X,$)=>{if(X?.script)return g2+X.script.length+(X.script.length>=74?2:1);if($)return VX[$];if("address"in X&&X.address)return VX[qX(X.address)];return VX.P2PKH};var J2=y(()=>{S2=require("@swapkit/helpers"),K2=require("@swapkit/utxo-signer");((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(xX||={});gX={["P2PKH"]:148,["P2WPKH"]:68},VX={["P2PKH"]:34,["P2WPKH"]:31}});function IX(X){switch(X){case l.Chain.Bitcoin:case l.Chain.BitcoinCash:return 550;case l.Chain.Dash:case l.Chain.Litecoin:return 5500;case l.Chain.Dogecoin:return 1e5;case l.Chain.Zcash:return 546;default:throw new l.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}function g({inputs:X,outputs:$,feeRate:J=1,chain:Z=l.Chain.Bitcoin,changeAddress:j=""}){let G=X[0]&&"address"in X[0]&&X[0].address?qX(X[0].address):"P2PKH",q=X.filter((M)=>s(M)*J<=M.value),Y=G==="P2WPKH"?Math.ceil(lX/4):0,z=mX+Y+$.reduce((M,O)=>M+kX(O),0),L=$.reduce((M,O)=>M+O.value,0),U=z*J,B=0,_=[];for(let M of q){let O=s(M),f=J*O;U+=f,B+=M.value,_.push(M);let $X=U+L;if(B<$X)continue;let dX=B-$X,NX=J*kX({address:j,value:0});if(dX>NX){let MX=NX+U,RX=B-(L+Math.ceil(MX));if(RX>Math.max(s({value:0})*J,IX(Z)))return{fee:Math.ceil(MX),inputs:_,outputs:$.concat({address:j,value:RX})}}return{fee:Math.ceil(U),inputs:_,outputs:$}}return{fee:Math.ceil(J*QX({inputs:X,outputs:$}))}}var l;var m2=y(()=>{J2();l=require("@swapkit/helpers")});var LX=y(()=>{E2();w2();m2();J2()});function GX(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function a(X){let $=GX(X);return X2($)&&$2($)==="mainnet"}function zX(X){try{if(X.startsWith("z"))return console.warn("Shielded Zcash addresses (z-addresses) are not supported. Use transparent addresses (t1/t3) only."),!1;let J=hX.Address(hX.ZCASH_NETWORK).decode(X);return J.type==="pkh"||J.type==="sh"}catch{return!1}}var hX;var fX=y(()=>{LX();hX=require("@swapkit/utxo-signer")});function Q2({address:X,chain:$}){return j2.match($).with(W.Chain.BitcoinCash,()=>a(X)).with(W.Chain.Zcash,()=>zX(X)).otherwise(()=>{try{return C.Address(A($)).decode(X),!0}catch{return!1}})}function A(X){return j2.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 w0({phrase:X,derivationPath:$,network:J,seed:Z}){let j=Z??uX.mnemonicToSeedSync(X),q=Z2.HDKey.fromMasterSeed(j,J.bip32).derive($);if(!q.privateKey)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not derive private key from phrase"});return q.privateKey}function l2(X){return x2.secp256k1.getPublicKey(X,!0)}function EX({publicKey:X,chain:$,network:J}){if($===W.Chain.BitcoinCash){let G=C.p2pkh(X,J);if(!G.hash)throw new W.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return C.encodeCashAddr({hash:G.hash,prefix:C.CashAddrPrefix.MAINNET,type:C.CashAddrType.P2PKH}).replace(/^bitcoincash:/,"")}let j=!FX.includes($)?C.p2wpkh(X,J):C.p2pkh(X,J);if(!j.address)throw new W.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive address"});return j.address}function UX({phrase:X,derivationPath:$,chain:J,wif:Z,seed:j}){let G=A(J);if(Z){let z=C.WIF(G).decode(Z),L=l2(z);return{privateKey:z,publicKey:L}}if(!X)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let q=$||W.derivationPathToString(W.NetworkDerivationPath[J]),Q=w0({derivationPath:q,network:G,phrase:X,seed:j}),Y=l2(Q);return{privateKey:Q,publicKey:Y}}function S0(X,$){return C.WIF(A($)).encode(X)}function K0({phrase:X,derivationPath:$,chain:J,seed:Z}){let j=$.split("/");if(j.length<4)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:`Derivation path must have at least 4 levels (got ${j.length}): ${$}`});let G=A(J),q=Z??uX.mnemonicToSeedSync(X),Q=Z2.HDKey.fromMasterSeed(q,G.bip32),Y=j.slice(0,4).join("/");return Q.derive(Y)}function e({inputs:X,outputs:$,chain:J,tx:Z,sender:j,compiledMemo:G,enableRBF:q=!1}){let Q=A(J),Y=!FX.includes(J),z=q?C.RBF_SEQUENCE:void 0,L=new Set;for(let U of X){let B=`${U.hash}:${U.index}`;if(L.has(B))throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Duplicate input detected"});L.add(B);let _=typeof U.hash==="string"?t.hex.decode(U.hash):U.hash;if(Y&&U.witnessUtxo)Z.addInput({index:U.index,sequence:z,txid:_,witnessUtxo:{amount:BigInt(U.witnessUtxo.value),script:U.witnessUtxo.script}});else if(U.txHex)Z.addInput({index:U.index,nonWitnessUtxo:t.hex.decode(U.txHex),sequence:z,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 U of $){let B="address"in U&&U.address?U.address:j;if(J===W.Chain.BitcoinCash)B=u(B);if(U.script){if(G)Z.addOutput({amount:0n,script:G})}else Z.addOutputAddress(B,BigInt(U.value),Q)}return{inputs:X,tx:Z}}async function WX(X){let $=await P(X).getSuggestedTxFee();return{[W.FeeOption.Average]:$,[W.FeeOption.Fast]:W.applyFeeMultiplier($,W.FeeOption.Fast),[W.FeeOption.Fastest]:W.applyFeeMultiplier($,W.FeeOption.Fastest)}}async function h2({assetValue:X,recipient:$,memo:J,sender:Z,fetchTxHex:j=!1}){let G=X.chain,q=(await WX(G))[W.FeeOption.Fastest],Q=j||FX.includes(G),Y=X.getBaseValue("number"),z=Math.ceil(Y+q*5000);return{inputs:await P(G).getUtxos({address:Z,fetchTxHex:Q,targetValue:z}),outputs:[{address:$,value:Y},...J?[{address:"",script:v(J),value:0}]:[]]}}async function p2({assetValue:X,recipient:$,memo:J,feeRate:Z,sender:j,fetchTxHex:G=!1,enableRBF:q=!1}){let Q=X.chain,Y=J?v(J):null,z=await h2({assetValue:X,fetchTxHex:G,memo:J,recipient:$,sender:j}),{inputs:L,outputs:U}=g({...z,chain:Q,feeRate:Z});if(!(L&&U))throw new W.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:j});let B=new C.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!Y,version:1}),{inputs:_,tx:M}=e({chain:Q,compiledMemo:Y,enableRBF:q,inputs:L,outputs:U,sender:j,tx:B});return{inputs:_,tx:M,utxos:z.inputs}}async function u2({assetValue:X,feeOptionKey:$=W.FeeOption.Fast,feeRate:J,memo:Z,sender:j,recipient:G}){let q=X.chain,Q=await h2({assetValue:X,memo:Z,recipient:G,sender:j}),Y=J?Math.floor(J):(await WX(q))[$];return g({...Q,chain:q,feeRate:Y})}function g0(X){return async function({from:J,memo:Z,feeRate:j,feeOptionKey:G=W.FeeOption.Fast,recipients:q=1}){let Q=await P(X).getAddressData(J),Y=j?Math.ceil(j):(await WX(X))[G],z=Q?.utxo.map((O)=>({...O,hash:"",type:"P2PKH"})).filter((O)=>O.value>Math.max(IX(X),s(O)*Y));if(!z?.length)return W.AssetValue.from({chain:X});let L=BigInt(z.reduce((O,f)=>O+f.value,0)),U=W.AssetValue.from({chain:X,value:L}),B=typeof q==="number"?Array.from({length:q},()=>({address:J,value:0})):q;if(Z)B.push({address:J,script:v(Z),value:0});let _=QX({inputs:z,outputs:B}),M=W.AssetValue.from({chain:X,value:BigInt(_*Y)});return U.sub(M)}}function m0(X){return async function(J){let{fee:Z}=await u2(J);return W.AssetValue.from({chain:X,value:W.SwapKitNumber.fromBigInt(BigInt(Z),8).getValue("string")})}}function l0({chain:X,phrase:$,derivationPath:J,seed:Z}){let j=A(X),{privateKey:G,publicKey:q}=UX({chain:X,derivationPath:J,phrase:$,seed:Z}),Q=X===W.Chain.BitcoinCash?[C.BCHSigHash.ALL]:[C.SigHash.ALL];return{getAddress:()=>EX({chain:X,network:j,publicKey:q}),privateKey:G,publicKey:q,signTransaction:(Y)=>{return Y.sign(G,Q),Y}}}function x0(X,$){return async function({memo:Z,recipient:j,feeOptionKey:G,feeRate:q,assetValue:Q,enableRBF:Y=!1}){let z=$?.getAddress();if(!($&&z))throw new W.SwapKitError("toolbox_utxo_no_signer");if(!j)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});W.warnOnce({condition:Y&&!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 L=Y&&pX.includes(X),U=q||(await WX(X))[G||W.FeeOption.Fast],{tx:B}=await p2({assetValue:Q,enableRBF:L,feeRate:U,memo:Z,recipient:j,sender:z});return $.signTransaction(B),B.finalize(),P(X).broadcastTx(t.hex.encode(B.extract()))}}function G2(X){return($)=>Q2({address:$,chain:X})}function Y2(X){let $=A(X);return function(Z){if(!Z)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Keys must be provided"});return EX({chain:X,network:$,publicKey:Z.publicKey})}}function XX({chain:X,...$}){let J="phrase"in $?$.phrase:void 0,Z="index"in $?$.index||0:0,j=J?uX.mnemonicToSeedSync(J):void 0,G="derivationPath"in $&&$.derivationPath?$.derivationPath:W.updateDerivationPath(W.NetworkDerivationPath[X],{index:Z}),q=W.derivationPathToString(G),Q=J?l0({chain:X,derivationPath:q,phrase:J,seed:j}):void 0,Y="signer"in $?$.signer:void 0,z=J?UX({chain:X,derivationPath:q,phrase:J,seed:j}):void 0;function L(){if(Q)return Promise.resolve(Q.getAddress());if(Y)return Y.getAddress();return Promise.resolve(void 0)}function U(N){if(!J)return;let H=i({accountIndex:N,chain:X,derivationPath:G});return K0({chain:X,derivationPath:W.derivationPathToString(H),phrase:J,seed:j})}let B=U();function _(){if(!B)return;return B.publicExtendedKey}function M({accountIndex:N}={}){let H=N===void 0?B:U(N);if(!H)return;let T=i({accountIndex:N,chain:X,derivationPath:G});return{accountIndex:JX(T),path:W.derivationPathToString(T),xpub:H.publicExtendedKey}}function O({accountIndex:N,index:H,change:T=!1}){let V=N===void 0?B:U(N);if(!V)return;let b=YX({accountIndex:N,chain:X,change:T,derivationPath:G,index:H}),w=A(X),m=V.deriveChild(Number(T)).deriveChild(H);if(!m.publicKey)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not derive public key"});let S=EX({chain:X,network:w,publicKey:m.publicKey}),c=t.hex.encode(m.publicKey);return{accountIndex:JX(b),address:S,change:T,index:H,path:W.derivationPathToString(b),pubkey:c}}async function f(N){if(!pX.includes(X))return{reason:`RBF is not supported on ${X}`,supported:!1};let H=await P(X).getTransactionDetails(N);return{canReplace:H.isRBF&&!H.confirmed,confirmed:H.confirmed,enabled:H.isRBF,fee:H.fee,sequences:H.sequences,supported:!0}}async function $X({txid:N,newFeeRate:H,recipient:T,memo:V}){if(!pX.includes(X))throw new W.SwapKitError("toolbox_utxo_rbf_not_supported",{chain:X});let b=await P(X).getTransactionDetails(N);if(!b.isRBF)throw new W.SwapKitError("toolbox_utxo_tx_not_replaceable",{txid:N});if(b.confirmed)throw new W.SwapKitError("toolbox_utxo_tx_already_confirmed",{blockId:b.blockId,txid:N});let w=b.inputs.reduce((R,n)=>R+n.value,0),S=b.outputs.find((R)=>R.recipient===T)?.value||0;if(S===0)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not determine send amount from original transaction"});let c=await Promise.all(b.inputs.map(async(R)=>{let n=await P(X).getRawTx(R.transaction_hash);return{hash:R.transaction_hash,index:R.index,txHex:n,value:R.value,witnessUtxo:void 0}})),yX=V?v(V):null,rX=QX({feeRate:H,inputs:c.map((R)=>({...R,type:"P2WPKH"})),outputs:[{address:T,value:S}]}),h=Math.ceil(rX*H);if(h<=b.fee)throw new W.SwapKitError("toolbox_utxo_rbf_fee_too_low",{newFee:h,originalFee:b.fee});let DX=h-b.fee,d=S-DX;if(d<=0)throw new W.SwapKitError("toolbox_utxo_rbf_insufficient_change");let AX=new C.Transaction({allowLegacyWitnessUtxo:!0,version:1}),vX=[{address:T,value:d},...V?[{address:"",script:v(V),value:0}]:[]],wX=w-d-h,r=await L();if(wX>IX(X)&&r)vX.push({address:r,value:wX});return e({chain:X,compiledMemo:yX,inputs:c,outputs:vX,sender:r||T,tx:AX}),{feeDelta:DX,newFee:h,originalFee:b.fee,tx:AX}}async function dX({txid:N,newFeeRate:H,recipient:T,memo:V}){if(!Q)throw new W.SwapKitError("toolbox_utxo_no_signer");let{tx:b,originalFee:w,newFee:m}=await $X({memo:V,newFeeRate:H,recipient:T,txid:N});Q.signTransaction(b),b.finalize();let S=await P(X).broadcastTx(t.hex.encode(b.extract()));return{newFee:m,originalFee:w,txid:S}}function NX({accountIndex:N,index:H,change:T=!1}){K("index",H);let V=N===void 0?B:U(N);if(!V)return;return V.deriveChild(Number(T)).deriveChild(H).privateKey||void 0}function MX({tx:N,inputDerivations:H}){if(!B)throw new W.SwapKitError("toolbox_utxo_no_signer");let T=X===W.Chain.BitcoinCash?[C.BCHSigHash.ALL]:[C.SigHash.ALL];for(let V=0;V<H.length;V++){let b=H[V];if(!b)continue;let{derivationIndex:w,isChange:m}=b,S=NX({change:m,index:w});if(!S)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:`Could not derive private key for input ${V} at index ${w}`});N.signIdx(S,V,T)}return N}async function RX({utxos:N,recipient:H,assetValue:T,memo:V,feeRate:b,feeOptionKey:w,changeAddress:m}){if(!B)throw new W.SwapKitError("toolbox_utxo_no_signer");let S=b||(await WX(X))[w||W.FeeOption.Fast],c=V?v(V):null,yX=[{address:H,value:T.getBaseValue("number")}];if(c)yX.push({address:"",script:c,value:0});let rX=N.map(({hash:r,index:R,value:n,txHex:$0,witnessUtxo:nX})=>({hash:r,index:R,txHex:$0,value:n,witnessUtxo:nX?{script:nX.script,value:nX.value}:void 0})),{inputs:h,outputs:DX}=g({chain:X,feeRate:S,inputs:rX,outputs:yX});if(!(h&&DX))throw new W.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:T,sender:"multiple addresses"});let d=new C.Transaction({allowLegacyWitnessUtxo:!0,version:1}),AX=N[0]?.address,vX=m||await L()||AX||H;e({chain:X,compiledMemo:c,inputs:h,outputs:DX,sender:vX,tx:d});let wX=h.map((r)=>{let R=N.find((n)=>n.hash===r.hash&&n.index===r.index);return R?{derivationIndex:R.derivationIndex,isChange:R.isChange}:{derivationIndex:0,isChange:!1}});return MX({inputDerivations:wX,tx:d}),d.finalize(),P(X).broadcastTx(t.hex.encode(d.extract()))}function X0({address:N,gapLimit:H=20}){if(!B)return;for(let T=0;T<H;T++){let V=O({change:!1,index:T}),b=O({change:!0,index:T}),w=V?.address===N?!1:b?.address===N;if(V?.address===N||b?.address===N)return{change:w,index:T}}return}return{accumulative:g,broadcastTx:(N)=>P(X).broadcastTx(N),bumpFee:dX,calculateTxSize:QX,createKeysForPath:(N)=>UX({...N,chain:X}),createReplacementTransaction:$X,createTransaction:p2,deriveAddressAtIndex:O,derivePrivateKeyAtIndex:NX,estimateMaxSendableAmount:g0(X),estimateTransactionFee:m0(X),getAddress:L,getAddressFromKeys:Y2(X),getBalance:b2(X),getExtendedPublicKey:_,getExtendedPublicKeyInfo:M,getFeeRates:()=>WX(X),getInputsOutputsFee:u2,getNetworkForChain:()=>A(X),getPrivateKeyFromMnemonic:(N)=>S0(UX({...N,chain:X}).privateKey,X),isRBFEnabled:f,keys:z,resolveDerivationIndex:X0,signAndBroadcastTransaction:async(N)=>{if(!Q)throw new W.SwapKitError("toolbox_utxo_no_signer");return Q.signTransaction(N),N.finalize(),await P(X).broadcastTx(t.hex.encode(N.extract()))},signTransactionWithMultipleKeys:MX,transfer:x0(X,Q),transferFromMultipleAddresses:RX,validateAddress:G2(X)}}var x2,t,Z2,uX,W,C,j2,FX,pX;var BX=y(()=>{sX();HX();LX();fX();x2=require("@noble/curves/secp256k1.js"),t=require("@scure/base"),Z2=require("@scure/bip32"),uX=require("@scure/bip39"),W=require("@swapkit/helpers"),C=require("@swapkit/utxo-signer"),j2=require("ts-pattern"),FX=[W.Chain.Dash,W.Chain.Dogecoin,W.Chain.Zcash,W.Chain.BitcoinCash],pX=[W.Chain.Bitcoin]});function PX(X){return GX(bX(X))}function h0(X){let $=A(x);function J(j){return j.sign(X.privateKey,[E.BCHSigHash.ALL]),j}function Z(){let j=E.p2pkh(X.publicKey,$);if(!j.hash)throw new F.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});let G=E.encodeCashAddr({hash:j.hash,prefix:E.CashAddrPrefix.MAINNET,type:E.CashAddrType.P2PKH});return Promise.resolve(G.replace(/^bitcoincash:/,""))}return{getAddress:Z,signTransaction:J}}function q2(X){let $="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,Z=F.derivationPathToString("derivationPath"in X&&X.derivationPath?X.derivationPath:F.updateDerivationPath(F.NetworkDerivationPath[x],{index:J})),j=$?UX({chain:x,derivationPath:Z,phrase:$}):void 0,G=j?h0(j):("signer"in X)?X.signer:void 0;function q(){return Promise.resolve(G?.getAddress())}let{getBalance:Q,getFeeRates:Y,broadcastTx:z,...L}=XX({chain:x});function U(B,_=!0){return Q(GX(bX(B)))}return{...L,broadcastTx:z,buildTx:u0,createTransaction:c2,getAddress:q,getAddressFromKeys:o0,getBalance:U,getFeeRates:Y,stripPrefix:GX,stripToCashAddress:PX,transfer:p0({broadcastTx:z,getFeeRates:Y,signer:G}),validateAddress:a}}async function c2({assetValue:X,recipient:$,memo:J,feeRate:Z,sender:j}){if(!a($))throw new F.SwapKitError("toolbox_utxo_invalid_address",{address:$});let G=Math.ceil(X.getBaseValue("number")+Z*7500),q=await P(x).getUtxos({address:PX(j),fetchTxHex:!0,targetValue:G}),Q=J?v(J):null,Y=[],z=u($);if(Y.push({address:z,value:X.getBaseValue("number")}),Q)Y.push({script:Q,value:0});let{inputs:L,outputs:U}=g({chain:x,feeRate:Z,inputs:q,outputs:Y});if(!(L&&U))throw new F.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:j});let B=new E.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!Q,version:1}),_=u(j),{inputs:M,tx:O}=e({chain:x,compiledMemo:Q,inputs:L,outputs:U.map((f)=>("address"in f)&&f.address?{...f,address:u(f.address)}:f),sender:_,tx:B});return{inputs:M,tx:O,utxos:L}}function p0({broadcastTx:X,getFeeRates:$,signer:J}){return async function({recipient:j,assetValue:G,feeOptionKey:q=F.FeeOption.Fast,...Q}){let Y=await J?.getAddress();if(!(J&&Y))throw new F.SwapKitError("toolbox_utxo_no_signer");if(!j)throw new F.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let z=Q.feeRate||(await $())[q],{tx:L}=await c2({...Q,assetValue:G,feeRate:z,recipient:j,sender:Y}),U=await J.signTransaction(L);return U.finalize(),X(o2.hex.encode(U.extract()))}}async function u0({assetValue:X,recipient:$,memo:J,feeRate:Z,sender:j}){let G=bX($);if(!a(G))throw new F.SwapKitError("toolbox_utxo_invalid_address",{address:G});let q=Math.ceil(X.getBaseValue("number")+Z*7500),Q=await P(x).getUtxos({address:PX(j),fetchTxHex:!0,targetValue:q}),Y=Number(Z.toFixed(0)),z=J?v(J):null,L=[];if(L.push({address:u($),value:X.getBaseValue("number")}),z)L.push({script:z,value:0});let{inputs:U,outputs:B}=g({chain:x,feeRate:Y,inputs:Q,outputs:L});if(!(U&&B))throw new F.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:j});let _=new E.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!z,version:1}),{inputs:M,tx:O}=e({chain:x,compiledMemo:z,inputs:U,outputs:B,sender:u(j),tx:_});return{inputs:M,tx:O,utxos:Q}}function o0(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 o2,F,E,x;var oX=y(()=>{LX();BX();fX();o2=require("@scure/base"),F=require("@swapkit/helpers"),E=require("@swapkit/utxo-signer"),x=F.Chain.BitcoinCash});function r2(){let{isStagenet:X}=I.SKConfig.get("envs");return X?k.ZCASH_TEST_NETWORK:k.ZCASH_NETWORK}function d0(X){return c0.encode(X)}function r0({phrase:X,derivationPath:$}){let J=z2.mnemonicToSeedSync(X),j=L2.HDKey.fromMasterSeed(J).derive($);if(!j.privateKey||!j.publicKey)throw new I.SwapKitError("toolbox_utxo_invalid_params");let{privateKey:G,publicKey:q}=j,Q=k.utils.hash160(q),{isStagenet:Y}=I.SKConfig.get("envs"),z=Y?new Uint8Array([29,37]):new Uint8Array([28,184]),L=new Uint8Array(z.length+Q.length);L.set(z,0),L.set(Q,z.length);let U=d0(L);return{getAddress:()=>Promise.resolve(U),signTransaction:(B)=>{if(B instanceof k.PCZT)return B.signAllInputs(G,q,k.ZcashSigHash.ALL),B.finalizeAllInputs(),Promise.resolve(B.extract());return B.signAllInputs(G,q,k.ZcashSigHash.ALL),Promise.resolve(B)}}}function n0({inputs:X,outputs:$,tx:J,sender:Z,compiledMemo:j}){let G=r2();for(let q of X){let Q=k.Address(G).decode(Z),Y=k.OutScript.encode(Q);J.addInput({index:q.index,script:Y,sequence:4294967295,txid:cX.hex.decode(q.hash),value:BigInt(q.value)})}for(let q of $){let Q="address"in q&&q.address?q.address:Z,Y=q.script;if(Y&&!j)continue;if(Y&&j)J.addOutput({amount:0n,script:j});else J.addOutputAddress(Q,BigInt(q.value),G)}return{inputs:X,tx:J}}async function d2(X){let{assetValue:$,recipient:J,memo:Z,feeRate:j,sender:G,fetchTxHex:q}=X,Q=Z?v(Z):null,Y=await P(I.Chain.Zcash).getUtxos({address:G,fetchTxHex:q!==!1}),z=[{address:J,value:Number($.getBaseValue("string"))},...Q?[{script:Q,value:0}]:[]],{inputs:L,outputs:U}=g({chain:I.Chain.Zcash,changeAddress:G,feeRate:j,inputs:Y,outputs:z});if(!(L&&U))throw new I.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:$,sender:G});let B=k.createZcashTransaction({consensusBranchId:k.ZcashConsensusBranchId.NU6_1,expiryHeight:0,lockTime:0,version:4,versionGroupId:k.ZcashVersionGroupId.SAPLING}),{tx:_,inputs:M}=n0({compiledMemo:Q,inputs:L,outputs:U,sender:G,tx:B});return{inputs:M,outputs:U,tx:_}}function U2(X){let $=_X.match(X).with({signer:_X.P.not(_X.P.nullish)},({signer:Y})=>Y).with({phrase:_X.P.string},({phrase:Y,derivationPath:z,index:L=0})=>{let U=z||I.NetworkDerivationPath[I.Chain.Zcash]||[44,133,0,0,0],B=I.updateDerivationPath(U,{index:L}),_=I.derivationPathToString(B);return r0({derivationPath:_,phrase:Y})}).otherwise(()=>{return}),J=XX({chain:I.Chain.Zcash,signer:$});async function Z({recipient:Y,assetValue:z,feeOptionKey:L=I.FeeOption.Fast,...U}){let B=await $?.getAddress();if(!($&&B))throw new I.SwapKitError("toolbox_utxo_no_signer");let _=U.feeRate||(await J.getFeeRates())[L],{tx:M}=await d2({...U,assetValue:z,feeRate:_,recipient:Y,sender:B}),f=(await $.signTransaction(M)).toHex();return J.broadcastTx(f)}function j({phrase:Y,derivationPath:z="m/44'/133'/0'/0/0"}){let L=z2.mnemonicToSeedSync(Y),B=L2.HDKey.fromMasterSeed(L).derive(z);if(!B.privateKey||!B.publicKey)throw new I.SwapKitError("toolbox_utxo_invalid_params");return{privateKey:B.privateKey,publicKey:B.publicKey}}function G({phrase:Y,derivationPath:z="m/44'/133'/0'/0/0"}){let L=j({derivationPath:z,phrase:Y}),U=r2();return k.WIF(U).encode(L.privateKey)}function q(Y){return async function(L){if(!Y)throw new I.SwapKitError("toolbox_utxo_no_signer");return await Y.signTransaction(L)}}function Q(Y){return async function(L){if(!Y)throw new I.SwapKitError("toolbox_utxo_no_signer");let U=await Y.signTransaction(L);return J.broadcastTx(U.toHex())}}return{...J,createKeysForPath:j,createTransaction:d2,getPrivateKeyFromMnemonic:G,signAndBroadcastTransaction:Q($),signTransaction:q($),transfer:Z,validateAddress:zX}}var cX,L2,z2,I,k,_X,c0;var W2=y(()=>{LX();BX();fX();cX=require("@scure/base"),L2=require("@scure/bip32"),z2=require("@scure/bip39"),I=require("@swapkit/helpers"),k=require("@swapkit/utxo-signer"),_X=require("ts-pattern");c0=cX.createBase58check(k.utils.sha256)});function a2({xpub:X,chain:$,count:J,startIndex:Z=0,accountIndex:j}){if(K("count",J),J<1)throw RangeError("count must be at least 1");K("startIndex",Z);let G=A($),q=i2.HDKey.fromExtendedKey(X,G.bip32),Q=i({accountIndex:j,chain:$}),Y=JX(Q),z=[];for(let L of[!1,!0]){let U=q.deriveChild(Number(L));for(let B=0;B<J;B++){let _=Z+B,M=U.deriveChild(_);if(!M.publicKey)continue;let O=YX({accountIndex:j,chain:$,change:L,index:_});z.push({accountIndex:Y,address:EX({chain:$,network:G,publicKey:M.publicKey}),change:L,index:_,path:s2.derivationPathToString(O),pubkey:n2.hex.encode(M.publicKey)})}}return z}var n2,i2,s2;var t2=y(()=>{HX();BX();n2=require("@scure/base"),i2=require("@scure/bip32"),s2=require("@swapkit/helpers")});function i0(X,$){switch(X){case o.Chain.BitcoinCash:return q2($||{});case o.Chain.Zcash:return U2($);case o.Chain.Bitcoin:case o.Chain.Dogecoin:case o.Chain.Litecoin:case o.Chain.Dash:return XX({chain:X,...$});default:throw new o.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}var o;var e2=y(()=>{oX();BX();W2();HX();t2();oX();fX();o=require("@swapkit/helpers")});var s0={};z0(s0,{validateZcashAddress:()=>zX,validateUtxoAddress:()=>Q2,validateBchAddress:()=>a,toLegacyAddress:()=>u,toCashAddress:()=>bX,stripToCashAddress:()=>PX,stripPrefix:()=>GX,nonSegwitChains:()=>FX,isValidAddress:()=>X2,getUtxoToolbox:()=>i0,getUtxoNetwork:()=>b0,getUtxoApi:()=>P,getUTXOAddressValidator:()=>G2,getUTXOAddressPath:()=>YX,getUTXOAccountPath:()=>i,getUTXOAccountIndexFromPath:()=>JX,getScriptTypeForAddress:()=>qX,getOutputSize:()=>kX,getNetworkForChain:()=>A,getInputSize:()=>s,getDustThreshold:()=>IX,detectAddressNetwork:()=>$2,deriveAddressesFromXpub:()=>a2,createZcashToolbox:()=>U2,createUTXOToolbox:()=>XX,createHDWalletHelpers:()=>H2,createCustomUtxoApi:()=>T0,createBCHToolbox:()=>q2,compileMemo:()=>v,calculateTxSize:()=>QX,assertDerivationIndex:()=>K,addressFromKeysGetter:()=>Y2,addInputsAndOutputs:()=>e,accumulative:()=>g,UtxoNetwork:()=>eX,UTXOScriptType:()=>xX,TX_OVERHEAD:()=>mX,SEGWIT_MARKER_FLAG_WEIGHT:()=>lX,OutputSizes:()=>VX,OP_RETURN_OVERHEAD:()=>g2,MIN_TX_FEE:()=>y0,InputSizes:()=>gX});module.exports=Y0(s0);var a0=y(()=>{BX();HX();LX();e2();oX();W2()});a0();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/near/helpers/core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,KAAK,mBAAmB,EAAwC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/near/helpers/core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,KAAK,mBAAmB,EAAwC,MAAM,kBAAkB,CAAC;AAElG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,WAKlD;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,uBAYA;AAED,wBAAsB,2BAA2B,CAAC,UAAU,EAAE,MAAM,uBAInE;AAuBD,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM;;;GAkBjF"}
|
package/package.json
CHANGED