@swapkit/toolboxes 4.20.0 → 4.20.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/dist/{chunk-r2htb2ce.js → chunk-x9db9hmg.js} +1 -1
- package/dist/chunk-xs0j1eze.js +2 -0
- package/dist/src/evm/index.cjs +1 -1
- package/dist/src/evm/index.js +1 -1
- package/dist/src/hypercore/index.cjs +1 -1
- package/dist/src/hypercore/index.js +1 -1
- package/dist/src/index.cjs +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/ton/index.cjs +1 -1
- package/dist/src/ton/index.js +1 -1
- package/dist/src/tron/index.cjs +1 -1
- package/dist/src/tron/index.js +1 -1
- package/dist/src/utxo/index.cjs +1 -1
- package/dist/src/utxo/index.js +1 -1
- package/dist/types/evm/toolbox/baseEVMToolbox.d.ts +90 -5
- package/dist/types/evm/toolbox/evm.d.ts +1584 -88
- package/dist/types/evm/toolbox/op.d.ts +72 -4
- package/dist/types/evm/types.d.ts +7 -7
- package/dist/types/ton/toolbox.d.ts +5 -5
- package/dist/types/ton/types.d.ts +5 -0
- package/dist/types/tron/index.d.ts +2 -2
- package/dist/types/tron/toolbox.d.ts +3 -1
- package/dist/types/tron/types.d.ts +5 -0
- package/dist/types/utxo/toolbox/validators.d.ts +1 -1
- package/package.json +2 -2
- package/dist/chunk-4q573g5z.js +0 -2
package/dist/src/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ea as t}from"../chunk-ntbvmmch.js";import{AssetValue as R,Chain as o,CosmosChains as x,EVMChains as c,FeeOption as W,SwapKitError as k,UTXOChains as b}from"@swapkit/helpers";async function V(){let{match:s}=await import("ts-pattern"),{validateAptosAddress:r}=await import("./aptos/index.js"),{validateEVMAddress:i}=await import("./evm/index.js"),{validateCardanoAddress:e}=await import("./cardano/index.js"),{getCosmosAddressValidator:a}=await import("./cosmos/index.js"),{validateHyperCoreAddress:l}=await import("./hypercore/index.js"),{validateSolanaAddress:T}=await import("./solana/index.js"),{validateStarknetAddress:p}=await import("./starknet/index.js"),{validateSuiAddress:C}=await import("./sui/index.js"),{validateTonAddress:h}=await import("./ton/index.js"),{getUTXOAddressValidator:u}=await import("./utxo/index.js"),{validateNearAddress:d}=await import("./near/index.js"),{validateRadixAddress:f}=await import("./radix/index.js"),{validateRippleAddress:g}=await import("./ripple/index.js"),{validateTronAddress:w}=await import("./tron/index.js"),{validateStellarAddress:S}=await import("./stellar/index.js");return function({address:n,chain:P}){return s(P).with(...c,()=>i(n)).with(...b,(m)=>{return u(m)(n)}).with(...x,(m)=>{return a(m)(n)}).with(o.Aptos,()=>r(n)).with(o.Radix,()=>f(n)).with(o.Hype,()=>l(n)).with(o.Near,()=>d(n)).with(o.Ripple,()=>g(n)).with(o.Solana,()=>T(n)).with(o.Stellar,()=>S(n)).with(o.Starknet,()=>p(n)).with(o.Sui,()=>C(n)).with(o.Ton,()=>h(n)).with(o.Tron,()=>w(n)).with(o.Cardano,()=>e(n)).otherwise(()=>!1)}}function E(s){return async function(i){let{match:e}=await import("ts-pattern");return e(s).returnType().with(...c,async(a)=>{let l=await y(a),T=await l.createTransaction(i),p="feeOptionKey"in i?i.feeOptionKey:W.Fast;return l.estimateTransactionFee({...T,feeOption:p})}).with(o.Bitcoin,o.BitcoinCash,o.Dogecoin,o.Dash,o.Litecoin,o.Solana,o.Ripple,o.Tron,o.Near,o.Cardano,o.Hype,async(a)=>{return(await y(a)).estimateTransactionFee(i)}).with(o.Aptos,async()=>{let{getAptosToolbox:a}=await import("./aptos/index.js");return a().estimateTransactionFee(i)}).with(o.Starknet,async()=>{let{getStarknetToolbox:a}=await import("./starknet/index.js");return(await a()).estimateTransactionFee(i)}).with(o.Stellar,async()=>{let{getStellarToolbox:a}=await import("./stellar/index.js");return a().estimateTransactionFee()}).with(o.Sui,async()=>{let{getSuiToolbox:a}=await import("./sui/index.js");return a().estimateTransactionFee(i)}).with(o.Ton,async()=>{let{getTONToolbox:a}=await import("./ton/index.js");return a().estimateTransactionFee(i)}).with(...x,async()=>{let{estimateTransactionFee:a}=await import("./cosmos/index.js");return a(i)}).otherwise(async()=>R.from({chain:s}))}}async function y(s,r){let{match:i}=await import("ts-pattern");return i(s).returnType().with(...c,async()=>{let{getEvmToolboxAsync:e}=await import("../chunk-
|
|
1
|
+
import{ea as t}from"../chunk-ntbvmmch.js";import{AssetValue as R,Chain as o,CosmosChains as x,EVMChains as c,FeeOption as W,SwapKitError as k,UTXOChains as b}from"@swapkit/helpers";async function V(){let{match:s}=await import("ts-pattern"),{validateAptosAddress:r}=await import("./aptos/index.js"),{validateEVMAddress:i}=await import("./evm/index.js"),{validateCardanoAddress:e}=await import("./cardano/index.js"),{getCosmosAddressValidator:a}=await import("./cosmos/index.js"),{validateHyperCoreAddress:l}=await import("./hypercore/index.js"),{validateSolanaAddress:T}=await import("./solana/index.js"),{validateStarknetAddress:p}=await import("./starknet/index.js"),{validateSuiAddress:C}=await import("./sui/index.js"),{validateTonAddress:h}=await import("./ton/index.js"),{getUTXOAddressValidator:u}=await import("./utxo/index.js"),{validateNearAddress:d}=await import("./near/index.js"),{validateRadixAddress:f}=await import("./radix/index.js"),{validateRippleAddress:g}=await import("./ripple/index.js"),{validateTronAddress:w}=await import("./tron/index.js"),{validateStellarAddress:S}=await import("./stellar/index.js");return function({address:n,chain:P}){return s(P).with(...c,()=>i(n)).with(...b,(m)=>{return u(m)(n)}).with(...x,(m)=>{return a(m)(n)}).with(o.Aptos,()=>r(n)).with(o.Radix,()=>f(n)).with(o.Hype,()=>l(n)).with(o.Near,()=>d(n)).with(o.Ripple,()=>g(n)).with(o.Solana,()=>T(n)).with(o.Stellar,()=>S(n)).with(o.Starknet,()=>p(n)).with(o.Sui,()=>C(n)).with(o.Ton,()=>h(n)).with(o.Tron,()=>w(n)).with(o.Cardano,()=>e(n)).otherwise(()=>!1)}}function E(s){return async function(i){let{match:e}=await import("ts-pattern");return e(s).returnType().with(...c,async(a)=>{let l=await y(a),T=await l.createTransaction(i),p="feeOptionKey"in i?i.feeOptionKey:W.Fast;return l.estimateTransactionFee({...T,feeOption:p})}).with(o.Bitcoin,o.BitcoinCash,o.Dogecoin,o.Dash,o.Litecoin,o.Solana,o.Ripple,o.Tron,o.Near,o.Cardano,o.Hype,async(a)=>{return(await y(a)).estimateTransactionFee(i)}).with(o.Aptos,async()=>{let{getAptosToolbox:a}=await import("./aptos/index.js");return a().estimateTransactionFee(i)}).with(o.Starknet,async()=>{let{getStarknetToolbox:a}=await import("./starknet/index.js");return(await a()).estimateTransactionFee(i)}).with(o.Stellar,async()=>{let{getStellarToolbox:a}=await import("./stellar/index.js");return a().estimateTransactionFee()}).with(o.Sui,async()=>{let{getSuiToolbox:a}=await import("./sui/index.js");return a().estimateTransactionFee(i)}).with(o.Ton,async()=>{let{getTONToolbox:a}=await import("./ton/index.js");return a().estimateTransactionFee(i)}).with(...x,async()=>{let{estimateTransactionFee:a}=await import("./cosmos/index.js");return a(i)}).otherwise(async()=>R.from({chain:s}))}}async function y(s,r){let{match:i}=await import("ts-pattern");return i(s).returnType().with(...c,async()=>{let{getEvmToolboxAsync:e}=await import("../chunk-x9db9hmg.js");return await e(s,r)}).with(...b,async()=>{let{getUtxoToolbox:e}=await import("./utxo/index.js");return e(s,r)}).with(...x,async()=>{let{getCosmosToolbox:e}=await import("./cosmos/index.js");return e(s,r)}).with(o.Aptos,async()=>{let{getAptosToolbox:e}=await import("./aptos/index.js");return e(r)}).with(o.Hype,async()=>{let{getHyperCoreToolbox:e}=await import("./hypercore/index.js");return e(r)}).with(o.Radix,async()=>{let{getRadixToolbox:e}=await import("./radix/index.js");return e(r)}).with(o.Ripple,async()=>{let{getRippleToolbox:e}=await import("./ripple/index.js");return e(r)}).with(o.Solana,async()=>{let{getSolanaToolbox:e}=await import("./solana/index.js");return e(r)}).with(o.Stellar,async()=>{let{getStellarToolbox:e}=await import("./stellar/index.js");return e(r)}).with(o.Starknet,async()=>{let{getStarknetToolbox:e}=await import("./starknet/index.js");return e(r)}).with(o.Sui,async()=>{let{getSuiToolbox:e}=await import("./sui/index.js");return e(r)}).with(o.Tron,async()=>{let{getTronToolbox:e}=await import("./tron/index.js");return e(r)}).with(o.Near,async()=>{let{getNearToolbox:e}=await import("./near/index.js");return e(r)}).with(o.Cardano,async()=>{let{getCardanoToolbox:e}=await import("./cardano/index.js");return e(r)}).with(o.Ton,async()=>{let{getTONToolbox:e}=await import("./ton/index.js");return e(r)}).otherwise(()=>{throw new k("toolbox_not_supported",{chain:s})})}export{y as getToolbox,E as getFeeEstimator,V as getAddressValidator};
|
package/dist/src/ton/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var v3=Object.create;var{getPrototypeOf:
|
|
1
|
+
var v3=Object.create;var{getPrototypeOf:G3,defineProperty:h,getOwnPropertyNames:p,getOwnPropertyDescriptor:Q3}=Object,A=Object.prototype.hasOwnProperty;function c(v){return this[v]}var X3,Y3,O3=(v,Y,x)=>{var k=v!=null&&typeof v==="object";if(k){var L=Y?X3??=new WeakMap:Y3??=new WeakMap,J=L.get(v);if(J)return J}x=v!=null?v3(G3(v)):{};let B=Y||!v||!v.__esModule?h(x,"default",{value:v,enumerable:!0}):x;for(let R of p(v))if(!A.call(B,R))h(B,R,{get:c.bind(v,R),enumerable:!0});if(k)L.set(v,B);return B},Z3=(v)=>{var Y=(w??=new WeakMap).get(v),x;if(Y)return Y;if(Y=h({},"__esModule",{value:!0}),v&&typeof v==="object"||typeof v==="function"){for(var k of p(v))if(!A.call(Y,k))h(Y,k,{get:c.bind(v,k),enumerable:!(x=Q3(v,k))||x.enumerable})}return w.set(v,Y),Y},w;var $3=(v)=>v;function q3(v,Y){this[v]=$3.bind(null,Y)}var x3=(v,Y)=>{for(var x in Y)h(v,x,{get:Y[x],enumerable:!0,configurable:!0,set:q3.bind(Y,x)})};var W=(v,Y)=>()=>(v&&(Y=v(v=0)),Y);function D3(){function v(){let Y=Date.now(),x=u||Y;return u=x,Y>u?Y:x+1}return z3+v().toString(36)}function g(v){return async function(x,k=!0){let L=await m.SwapKitApi.getChainBalance({address:x,chain:v,scamFilter:k}),{baseDecimal:J}=P.getChainConfig(v),B=L.map(({identifier:O,value:_,decimal:j})=>{return new P.AssetValue({decimal:j||J,identifier:O,value:_})});if(!B.some((O)=>O.isGasAsset))return[P.AssetValue.from({chain:v}),...B];return B}}var P,m,z3,u=0;var i=W(()=>{P=require("@swapkit/helpers"),m=require("@swapkit/helpers/api"),z3=typeof process<"u"&&process.pid?process.pid.toString(36):""});async function R3(){let v=Date.now();if(y&&v-d<L3)return y;let{getHttpEndpoint:Y}=await import("@orbs-network/ton-access");return y=await Y(),d=v,y}async function J3(){let[v]=q.SKConfig.get("rpcUrls")[q.Chain.Ton]??[];if(v)return v;return await R3()}function K3(v={}){let Y,x,k;async function L(){if(!Y){let{TonClient:G}=await import("@ton/ton"),Q=v.provider??await J3();Y=new G({endpoint:Q})}return Y}async function J(){return(await R()).address.toString()}async function B(){if(k)return k;return k=await U.match(v).with({phrase:U.P.string},async({phrase:G})=>{let{mnemonicToWalletKey:Q}=await import("@ton/crypto");return Q(G.split(" "))}).with({signer:U.P.any},({signer:G})=>G).otherwise(()=>{return}),k}async function R(G){if(!x||G){let Q=await B(),Z=await L(),z=G||Q;if(!z)throw new q.SwapKitError("core_wallet_connection_not_found");let{WalletContractV4:$}=await import("@ton/ton"),H=$.create({publicKey:z.publicKey,workchain:0});x=Z.open(H)}return x}let O=g(q.Chain.Ton);async function _({assetValue:G,recipient:Q,memo:Z,sender:z,sweep:$}){if(G.isGasAsset){let e=Z?S(Z).toBoc().toString("base64"):void 0;return[{address:Q,amount:G.getBaseValue("string"),payload:e}]}if($)throw new q.SwapKitError({errorKey:"core_swap_invalid_params",info:{asset:G.toString(),reason:"TON sweep is only supported for the native gas asset"}});let H=G.address;if(!H)throw new q.SwapKitError({errorKey:"core_swap_contract_not_found",info:{asset:G.toString()}});let I=z??await J(),N=await E({jettonMasterAddress:H,ownerAddress:I}),K=X.Address.parse(Q),D=X.Address.parse(I),V=G.getBaseValue("bigint"),F=Z?S(Z):void 0,f=s({destinationAddress:K,forwardPayload:F,jettonAmount:V,responseAddress:D});return[{address:N.toString(),amount:B3.toString(),payload:f.toBoc().toString("base64")}]}async function j({sender:G,sweep:Q,...Z}){return{messages:await _({...Z,sender:G,sweep:Q}),sendMode:Q?I3:l}}function n(G){if(!Array.isArray(G))return G;let[Q]=G;return{messages:G.map(({sendMode:z,...$})=>$),sendMode:Q?.sendMode??l}}function M(G){return G.map((Q)=>{let Z=Q.payload?X.Cell.fromBase64(Q.payload):void 0,z=Q.stateInit?X.loadStateInit(X.Cell.fromBase64(Q.stateInit).asSlice()):void 0,$=X.Address.parse(Q.address),H=X.Address.isFriendly(Q.address)?X.Address.parseFriendly(Q.address).isBounceable:!0;return X.internal({body:Z,bounce:H,init:z,to:$,value:BigInt(Q.amount)})})}async function b(G){let Q=await B(),Z=await R();if(!Z||!Q)throw new q.SwapKitError("core_wallet_connection_not_found");let z=await L(),{state:$}=await z.getContractState(Z.address),H=$==="active",I=H?await Z.getSeqno():0,{messages:N,sendMode:K}=n(G),D=Z.createTransfer({messages:M(N),secretKey:Q.secretKey,sendMode:K,seqno:I}),V=X.external({body:D,init:H?void 0:Z.init,to:Z.address});return X.beginCell().store(X.storeMessage(V)).endCell()}async function T(G){return await(await L()).sendFile(G.toBoc()),G.hash().toString("hex")}async function C(G){let Q=await b(G);return T(Q)}async function a({assetValue:G,recipient:Q,memo:Z,sweep:z}){let $=await j({assetValue:G,memo:Z,recipient:Q,sweep:z});return C($)}async function t({sender:G,...Q}){let{baseDecimal:Z}=q.getChainConfig(q.Chain.Ton),z=await U.match(G).with(U.P.string,(I)=>{return X.Address.parseFriendly(I).address}).otherwise(async()=>{return(await R()).address});if(!z)throw new q.SwapKitError("toolbox_fee_estimation_failed",{chain:q.Chain.Ton});let $=q.AssetValue.from({chain:q.Chain.Ton,value:"0.01"}),H=await L();try{let I=await j({sender:G,...Q}),N=await B(),K=await R();if(!K||!N)return $;let D=await K.getSeqno(),V=K.createTransfer({messages:M(I.messages),secretKey:N.secretKey,sendMode:I.sendMode,seqno:D}),{source_fees:F}=await H.estimateExternalMessageFee(z,{body:V,ignoreSignature:!0,initCode:null,initData:null}),f=F.in_fwd_fee+F.storage_fee+F.gas_fee+F.fwd_fee;return $.set(q.SwapKitNumber.fromBigInt(BigInt(f),Z))}catch{return $}}async function E({jettonMasterAddress:G,ownerAddress:Q}){try{let Z=await L(),z=X.Address.parse(G),$=X.Address.parse(Q),{JettonMaster:H}=await import("@ton/ton");return await Z.open(H.create(z)).getWalletAddress($)}catch{throw new q.SwapKitError({errorKey:"core_swap_contract_not_found",info:{jettonMasterAddress:G,ownerAddress:Q}})}}function s({jettonAmount:G,destinationAddress:Q,responseAddress:Z,forwardAmount:z=k3,forwardPayload:$}){let H=X.beginCell().storeUint(H3,32).storeUint(0,64).storeCoins(G).storeAddress(Q).storeAddress(Z).storeBit(0).storeCoins(z);if($)H.storeBit(1).storeRef($);else H.storeBit(0);return H.endCell()}function S(G){return X.beginCell().storeUint(0,32).storeStringTail(G).endCell()}return{broadcastTransaction:T,createTransaction:j,estimateTransactionFee:t,getAddress:J,getBalance:O,getJettonWalletAddress:E,sign:b,signAndBroadcastTransaction:C,transfer:a,validateAddress:o}}function o(v){try{return X.Address.parse(v),!0}catch{return!1}}var q,X,U,H3=260734629,k3,B3,l,I3,L3=60000,y,d=0;var r=W(()=>{i();q=require("@swapkit/helpers"),X=require("@ton/core"),U=require("ts-pattern"),k3=X.toNano("0.01"),B3=X.toNano("0.05"),l=X.SendMode.PAY_GAS_SEPARATELY+X.SendMode.IGNORE_ERRORS,I3=X.SendMode.CARRY_ALL_REMAINING_BALANCE+X.SendMode.IGNORE_ERRORS});var N3={};x3(N3,{validateTonAddress:()=>o,getTONToolbox:()=>K3});module.exports=Z3(N3);var F3=W(()=>{r()});F3();
|
package/dist/src/ton/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{da as
|
|
1
|
+
import{da as p}from"../../chunk-54gntgt1.js";import{ea as U}from"../../chunk-ntbvmmch.js";import{AssetValue as n,Chain as K,getChainConfig as a,SKConfig as s,SwapKitError as I,SwapKitNumber as t}from"@swapkit/helpers";import{Address as k,beginCell as h,Cell as S,external as e,internal as QQ,loadStateInit as XQ,SendMode as N,storeMessage as YQ,toNano as m}from"@ton/core";import{match as u,P as y}from"ts-pattern";var ZQ=260734629,$Q=m("0.01"),zQ=m("0.05"),w=N.PAY_GAS_SEPARATELY+N.IGNORE_ERRORS,GQ=N.CARRY_ALL_REMAINING_BALANCE+N.IGNORE_ERRORS,HQ=60000,j,A=0;async function kQ(){let H=Date.now();if(j&&H-A<HQ)return j;let{getHttpEndpoint:L}=await import("@orbs-network/ton-access");return j=await L(),A=H,j}async function qQ(){let[H]=s.get("rpcUrls")[K.Ton]??[];if(H)return H;return await kQ()}function JQ(H={}){let L,D,F;async function R(){if(!L){let{TonClient:Q}=await import("@ton/ton"),X=H.provider??await qQ();L=new Q({endpoint:X})}return L}async function W(){return(await O()).address.toString()}async function P(){if(F)return F;return F=await u(H).with({phrase:y.string},async({phrase:Q})=>{let{mnemonicToWalletKey:X}=await import("@ton/crypto");return X(Q.split(" "))}).with({signer:y.any},({signer:Q})=>Q).otherwise(()=>{return}),F}async function O(Q){if(!D||Q){let X=await P(),Y=await R(),$=Q||X;if(!$)throw new I("core_wallet_connection_not_found");let{WalletContractV4:Z}=await import("@ton/ton"),z=Z.create({publicKey:$.publicKey,workchain:0});D=Y.open(z)}return D}let g=p(K.Ton);async function c({assetValue:Q,recipient:X,memo:Y,sender:$,sweep:Z}){if(Q.isGasAsset){let r=Y?C(Y).toBoc().toString("base64"):void 0;return[{address:X,amount:Q.getBaseValue("string"),payload:r}]}if(Z)throw new I({errorKey:"core_swap_invalid_params",info:{asset:Q.toString(),reason:"TON sweep is only supported for the native gas asset"}});let z=Q.address;if(!z)throw new I({errorKey:"core_swap_contract_not_found",info:{asset:Q.toString()}});let G=$??await W(),v=await f({jettonMasterAddress:z,ownerAddress:G}),q=k.parse(X),J=k.parse(G),B=Q.getBaseValue("bigint"),x=Y?C(Y):void 0,_=o({destinationAddress:q,forwardPayload:x,jettonAmount:B,responseAddress:J});return[{address:v.toString(),amount:zQ.toString(),payload:_.toBoc().toString("base64")}]}async function V({sender:Q,sweep:X,...Y}){return{messages:await c({...Y,sender:Q,sweep:X}),sendMode:X?GQ:w}}function i(Q){if(!Array.isArray(Q))return Q;let[X]=Q;return{messages:Q.map(({sendMode:$,...Z})=>Z),sendMode:X?.sendMode??w}}function M(Q){return Q.map((X)=>{let Y=X.payload?S.fromBase64(X.payload):void 0,$=X.stateInit?XQ(S.fromBase64(X.stateInit).asSlice()):void 0,Z=k.parse(X.address),z=k.isFriendly(X.address)?k.parseFriendly(X.address).isBounceable:!0;return QQ({body:Y,bounce:z,init:$,to:Z,value:BigInt(X.amount)})})}async function b(Q){let X=await P(),Y=await O();if(!Y||!X)throw new I("core_wallet_connection_not_found");let $=await R(),{state:Z}=await $.getContractState(Y.address),z=Z==="active",G=z?await Y.getSeqno():0,{messages:v,sendMode:q}=i(Q),J=Y.createTransfer({messages:M(v),secretKey:X.secretKey,sendMode:q,seqno:G}),B=e({body:J,init:z?void 0:Y.init,to:Y.address});return h().store(YQ(B)).endCell()}async function E(Q){return await(await R()).sendFile(Q.toBoc()),Q.hash().toString("hex")}async function T(Q){let X=await b(Q);return E(X)}async function l({assetValue:Q,recipient:X,memo:Y,sweep:$}){let Z=await V({assetValue:Q,memo:Y,recipient:X,sweep:$});return T(Z)}async function d({sender:Q,...X}){let{baseDecimal:Y}=a(K.Ton),$=await u(Q).with(y.string,(G)=>{return k.parseFriendly(G).address}).otherwise(async()=>{return(await O()).address});if(!$)throw new I("toolbox_fee_estimation_failed",{chain:K.Ton});let Z=n.from({chain:K.Ton,value:"0.01"}),z=await R();try{let G=await V({sender:Q,...X}),v=await P(),q=await O();if(!q||!v)return Z;let J=await q.getSeqno(),B=q.createTransfer({messages:M(G.messages),secretKey:v.secretKey,sendMode:G.sendMode,seqno:J}),{source_fees:x}=await z.estimateExternalMessageFee($,{body:B,ignoreSignature:!0,initCode:null,initData:null}),_=x.in_fwd_fee+x.storage_fee+x.gas_fee+x.fwd_fee;return Z.set(t.fromBigInt(BigInt(_),Y))}catch{return Z}}async function f({jettonMasterAddress:Q,ownerAddress:X}){try{let Y=await R(),$=k.parse(Q),Z=k.parse(X),{JettonMaster:z}=await import("@ton/ton");return await Y.open(z.create($)).getWalletAddress(Z)}catch{throw new I({errorKey:"core_swap_contract_not_found",info:{jettonMasterAddress:Q,ownerAddress:X}})}}function o({jettonAmount:Q,destinationAddress:X,responseAddress:Y,forwardAmount:$=$Q,forwardPayload:Z}){let z=h().storeUint(ZQ,32).storeUint(0,64).storeCoins(Q).storeAddress(X).storeAddress(Y).storeBit(0).storeCoins($);if(Z)z.storeBit(1).storeRef(Z);else z.storeBit(0);return z.endCell()}function C(Q){return h().storeUint(0,32).storeStringTail(Q).endCell()}return{broadcastTransaction:E,createTransaction:V,estimateTransactionFee:d,getAddress:W,getBalance:g,getJettonWalletAddress:f,sign:b,signAndBroadcastTransaction:T,transfer:l,validateAddress:vQ}}function vQ(H){try{return k.parse(H),!0}catch{return!1}}export{vQ as validateTonAddress,JQ as getTONToolbox};
|
package/dist/src/tron/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var sz=Object.create;var{getPrototypeOf:rz,defineProperty:T,getOwnPropertyNames:Zz,getOwnPropertyDescriptor:ez}=Object,$z=Object.prototype.hasOwnProperty;function Yz(z){return this[z]}var zJ,JJ,VJ=(z,J,Q)=>{var Z=z!=null&&typeof z==="object";if(Z){var Y=J?zJ??=new WeakMap:JJ??=new WeakMap,q=Y.get(z);if(q)return q}Q=z!=null?sz(rz(z)):{};let W=J||!z||!z.__esModule?T(Q,"default",{value:z,enumerable:!0}):Q;for(let k of Zz(z))if(!$z.call(W,k))T(W,k,{get:Yz.bind(z,k),enumerable:!0});if(Z)Y.set(z,W);return W},QJ=(z)=>{var J=(Qz??=new WeakMap).get(z),Q;if(J)return J;if(J=T({},"__esModule",{value:!0}),z&&typeof z==="object"||typeof z==="function"){for(var Z of Zz(z))if(!$z.call(J,Z))T(J,Z,{get:Yz.bind(z,Z),enumerable:!(Q=ez(z,Z))||Q.enumerable})}return Qz.set(z,J),J},Qz;var ZJ=(z)=>z;function $J(z,J){this[z]=ZJ.bind(null,J)}var YJ=(z,J)=>{for(var Q in J)T(z,Q,{get:J[Q],enumerable:!0,configurable:!0,set:$J.bind(J,Q)})};var f=(z,J)=>()=>(z&&(J=z(z=0)),J);function u(z,J){let Q=0n,Z=0n,Y=J;while(Y<z.length&&Y-J<10){let q=z[Y++];if(q===void 0)break;if(Q|=BigInt(q&127)<<Z,Z+=7n,(q&128)===0)return[Q,Y]}throw new R.SwapKitError("toolbox_tron_transaction_creation_failed")}function x(z){let J=[],Q=z<0n?z+2n**64n:z;while(Q>=128n)J.push(Number(Q&0x7fn)|128),Q>>=7n;return J.push(Number(Q)),J}function A(z,J,Q){let Z=z.get(J);if(Z)Z.push(Q);else z.set(J,[Q])}function GJ(z){let J=new Map,Q=0;while(Q<z.length){let[Z,Y]=u(z,Q);Q=Y;let q=Number(Z>>3n),W=Number(Z&7n);if(W===y){let[k,H]=u(z,Q);Q=H,A(J,q,{data:new Uint8Array(x(k)),wireType:y})}else if(W===h){let[k,H]=u(z,Q);Q=H;let D=Number(k);if(D<0||Q+D>z.length)throw new R.SwapKitError("toolbox_tron_transaction_creation_failed");let m=z.slice(Q,Q+D);Q+=D,A(J,q,{data:m,wireType:h})}else if(W===Xz){if(Q+8>z.length)throw new R.SwapKitError("toolbox_tron_transaction_creation_failed");let k=z.slice(Q,Q+8);Q+=8,A(J,q,{data:k,wireType:Xz})}else if(W===jz){if(Q+4>z.length)throw new R.SwapKitError("toolbox_tron_transaction_creation_failed");let k=z.slice(Q,Q+4);Q+=4,A(J,q,{data:k,wireType:jz})}else throw new R.SwapKitError("toolbox_tron_transaction_creation_failed")}return J}function WJ(z){let J=[];for(let[q,W]of[...z.entries()].sort(([k],[H])=>k-H))for(let{wireType:k,data:H}of W){let D=BigInt(q<<3|k);if(J.push(new Uint8Array(x(D))),k===h)J.push(new Uint8Array(x(BigInt(H.length))));J.push(H)}let Q=J.reduce((q,W)=>q+W.length,0),Z=new Uint8Array(Q),Y=0;for(let q of J)Z.set(q,Y),Y+=q.length;return Z}function Gz(z,J){if(!z||z.length%2!==0)throw new R.SwapKitError("toolbox_tron_transaction_creation_failed");let Q=S.hexToBytes(z),Z=GJ(Q);if(J.expiration!==void 0)Z.set(XJ,[{data:new Uint8Array(x(BigInt(J.expiration))),wireType:y}]);if(J.data!==void 0)Z.set(jJ,[{data:S.hexToBytes(J.data),wireType:h}]);if(J.fee_limit!==void 0)Z.set(qJ,[{data:new Uint8Array(x(BigInt(J.fee_limit))),wireType:y}]);let Y=WJ(Z),q=S.bytesToHex(Y),W=S.bytesToHex(qz.sha256(Y));return{raw_data_hex:q,txID:W}}var qz,S,R,y=0,Xz=1,h=2,jz=5,XJ=8,jJ=10,qJ=18;var Wz=f(()=>{qz=require("@noble/hashes/sha2.js"),S=require("@noble/hashes/utils.js"),R=require("@swapkit/helpers")});function B(z){if(typeof z!=="string")return!1;try{let J=E.decode(z);return J.length===21&&J[0]===Uz}catch{return!1}}function Cz(z){return N.bytesToHex(E.decode(z))}function OJ(z){return E.decode(z).slice(1)}function kz(z){let J=p.secp256k1.getPublicKey(N.hexToBytes(z),!1),Q=Mz.keccak_256(J.slice(1)).slice(-20),Z=new Uint8Array(21);return Z[0]=Uz,Z.set(Q,1),E.encode(Z)}function Hz({txID:z,privateKey:J}){let Q=p.secp256k1.sign(N.hexToBytes(z),N.hexToBytes(J),{format:"recovered",prehash:!1}),Z=Q[0]??0,Y=N.bytesToHex(Q.slice(1,33)),q=N.bytesToHex(Q.slice(33,65)),W=(Z+27).toString(16).padStart(2,"0");return Y+q+W}function _({txID:z,raw_data_hex:J}){let Q=N.bytesToHex(l.sha256(N.hexToBytes(J)));if(z!==Q)throw new c.SwapKitError("toolbox_tron_invalid_transaction_integrity",{expected:Q,txID:z})}function UJ(z){return`000000000000000000000000${N.bytesToHex(OJ(z))}`}function CJ(z){let J=typeof z==="bigint"?z:BigInt(z);if(J<0n||J>=MJ)throw new c.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:J.toString()});return J.toString(16).padStart(64,"0")}function I(z){return z.map(({type:J,value:Q})=>J==="address"?UJ(Q):CJ(BigInt(Q))).join("")}function Kz(z){return N.bytesToHex(new TextEncoder().encode(z))}var p,l,Mz,N,Oz,c,E,Uz=65,MJ;var o=f(()=>{p=require("@noble/curves/secp256k1.js"),l=require("@noble/hashes/sha2.js"),Mz=require("@noble/hashes/sha3.js"),N=require("@noble/hashes/utils.js"),Oz=require("@scure/base"),c=require("@swapkit/helpers"),E=Oz.createBase58check(l.sha256),MJ=2n**256n});function Nz(){try{return C.getRPCUrlSync(C.Chain.Tron)}catch{return Lz}}function Bz(){let z=new AbortController,J=setTimeout(()=>z.abort(),LJ);return{cleanup:()=>clearTimeout(J),signal:z.signal}}async function V(z,J){let{signal:Q,cleanup:Z}=Bz();try{let Y=await fetch(`${Nz()}${z}`,{body:JSON.stringify(J),headers:{"Content-Type":"application/json"},method:"POST",signal:Q});if(!Y.ok)throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:`${Y.status} ${Y.statusText} on ${z}`});return await Y.json()}finally{Z()}}async function Dz(z,J){let{signal:Q,cleanup:Z}=Bz();try{let Y=await fetch(`${J??Nz()}${z}`,{headers:{"Content-Type":"application/json"},signal:Q});if(!Y.ok)throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:`${Y.status} ${Y.statusText} on ${z}`});return await Y.json()}finally{Z()}}async function Fz(z){if(!B(z))throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{address:z,message:"Invalid address"});try{let J=await Dz(`/v1/accounts/${z}`,Lz);if(!(J.success&&J.data)||J.data.length===0)return;let Q;try{Q=Cz(z).toLowerCase()}catch{Q=z.toLowerCase()}let Z=J.data.find((Y)=>Y.address.toLowerCase()===Q);if(!Z)return;return{balance:Z.balance,trc20:Z.trc20||[]}}catch(J){if(J instanceof C.SwapKitError)throw J;throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{address:z,message:J instanceof Error?J.message:"Unknown error"})}}async function Rz({from:z,to:J,amount:Q}){let Y=await V("/wallet/createtransaction",{amount:Q,owner_address:z,to_address:J,visible:!0});if(!Y.txID||!Y.raw_data_hex||!Y.raw_data)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let W=Y.raw_data?.contract?.[0]?.parameter?.value;if(W?.to_address!==J||W?.owner_address!==z||W?.amount!==Q)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");return _(Y),Y}async function Vz({ownerAddress:z,contractAddress:J,functionSelector:Q,parameter:Z,feeLimit:Y,callValue:q=0}){let W=await V("/wallet/triggersmartcontract",{call_value:q,contract_address:J,fee_limit:Y,function_selector:Q,owner_address:z,parameter:Z,visible:!0});if(!W.result.result||!W.transaction?.txID||!W.transaction?.raw_data_hex)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let H=W.transaction.raw_data?.contract?.[0]?.parameter?.value;if(H?.contract_address!==J||H?.owner_address!==z)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");return _(W.transaction),W.transaction}function Sz({ownerAddress:z,contractAddress:J,functionSelector:Q,parameter:Z}){return V("/wallet/triggerconstantcontract",{contract_address:J,function_selector:Q,owner_address:z,parameter:Z,visible:!0})}function NJ({ownerAddress:z,contractAddress:J,functionSelector:Q,parameter:Z}){return V("/wallet/estimateenergy",{contract_address:J,function_selector:Q,owner_address:z,parameter:Z,visible:!0})}function Pz(z){let J=typeof z==="number"?z:typeof z==="string"?Number(z):Number.NaN;return Number.isFinite(J)&&J>0?J:void 0}async function w(z){try{let{result:J,txid:Q}=await V("/wallet/broadcasttransaction",{raw_data:z.raw_data,raw_data_hex:z.raw_data_hex,signature:z.signature,txID:z.txID,visible:z.visible});if(!J||!Q)throw new C.SwapKitError("toolbox_tron_token_transfer_failed");return Q}catch(J){throw new C.SwapKitError("toolbox_tron_broadcast_failed",{error:J})}}async function b(){let z={};try{let{chainParameter:J}=await Dz("/wallet/getchainparameters");for(let Q of J)z[Q.key]=Q.value}catch(J){C.warnOnce({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${J instanceof Error?J.message:J}`})}return{bandwidthFee:z.getTransactionFee??kJ,createAccountFee:z.getCreateNewAccountFeeInSystemContract??z.getCreateAccountFee??HJ,energyFee:z.getEnergyFee??KJ,memoFee:z.getMemoFee??PJ}}async function i(z){try{let J=await V("/wallet/getaccountresource",{address:z,visible:!0});return{bandwidth:{free:(J.freeNetLimit??600)-(J.freeNetUsed??0),total:J.NetLimit??0,used:J.NetUsed??0},energy:{total:J.EnergyLimit??0,used:J.EnergyUsed??0}}}catch(J){return C.warnOnce({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${J instanceof Error?J.message:J}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function g(z){try{let J=await V("/wallet/getaccount",{address:z,visible:!0});return J&&Object.keys(J).length>0}catch{return!1}}async function n(z){try{let J=await NJ({...z,ownerAddress:z.sender}),Q=J.energy_required??J.energyRequired;if(J.result&&!J.result.result)throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:J.result.message||"estimateenergy failed"});if(Q!==void 0){let Z=Pz(Q);if(Z!==void 0)return Z;throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(J){C.warnOnce({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${J instanceof Error?J.message:J}`})}try{let{energy_used:J}=await Sz({...z,ownerAddress:z.sender}),Q=Pz(J);if(Q!==void 0)return Q;throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:"Invalid triggerconstantcontract energy response"})}catch(J){throw C.warnOnce({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy: ${J instanceof Error?J.message:J}`}),new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:`Unable to estimate contract energy: ${J instanceof Error?J.message:J}`})}}async function _z({assetAddress:z,owner:J,spender:Q}){let Z=I([{type:"address",value:J},{type:"address",value:Q}]),q=(await Sz({contractAddress:z,functionSelector:"allowance(address,address)",ownerAddress:Q,parameter:Z})).constant_result?.[0];if(!q)return 0n;try{return BigInt(`0x${q}`)}catch{return 0n}}var C,Lz="https://api.trongrid.io",kJ=1000,HJ=1e6,KJ=420,PJ=1e6,LJ=30000;var Iz=f(()=>{o();C=require("@swapkit/helpers")});function yz({phrase:z,derivationPath:J}){let Q=bz.HDKey.fromMasterSeed(gz.mnemonicToSeedSync(z)).derive(J);if(!Q.privateKey)throw new $.SwapKitError("toolbox_tron_no_signer");return wz.bytesToHex(Q.privateKey)}function hz({phrase:z,derivationPath:J,index:Q}){let Z=J||$.derivationPathToString($.updateDerivationPath($.NetworkDerivationPath[$.Chain.Tron],{index:Q||0}));return yz({derivationPath:Z,phrase:z})}function DJ({phrase:z,derivationPath:J}){let Q=yz({derivationPath:J,phrase:z}),Z=kz(Q);return{getAddress:()=>Promise.resolve(Z),signTransaction:(Y)=>{_(Y);let q=Hz({privateKey:Q,txID:Y.txID});return Promise.resolve({...Y,signature:[q]})}}}function xz({transaction:z,memo:J,expiration:Q,feeLimit:Z}){let Y={},q={};if(Z!==void 0&&z.raw_data)Y.fee_limit=Z,q.fee_limit=Z;if(J){let H=J.startsWith("0x")?J.replace(/^0x/,""):Kz(J);Y.data=H,q.data=H}if(Q){let H=z.raw_data.expiration+Q*1000;Y.expiration=H,q.expiration=H}if(Object.keys(Y).length===0)return z;let{raw_data_hex:W,txID:k}=Gz(z.raw_data_hex,Y);return{...z,raw_data:{...z.raw_data,...q},raw_data_hex:W,txID:k}}function Ez(z={}){let J="index"in z?z.index||0:0,Q=$.derivationPathToString("derivationPath"in z&&z.derivationPath?z.derivationPath:$.updateDerivationPath($.NetworkDerivationPath[$.Chain.Tron],{index:J})),Z,Y=!1;function q(){if(Y)return Promise.resolve(Z);return Z=v.match(z).with({phrase:v.P.string},({phrase:X})=>DJ({derivationPath:Q,phrase:X})).with({signer:v.P.not(v.P.nullish)},({signer:X})=>X).otherwise(()=>{return}),Y=!0,Promise.resolve(Z)}async function W(){let X=await q();if(!X)throw new $.SwapKitError("toolbox_tron_no_signer");return X.getAddress()}async function k(X,j){let M=X||Tz,G=j??(await b()).energyFee,U=M*G,O=Math.ceil(U*1.5);return Math.min(Math.max(O,1e7),150000000)}async function H({contractAddress:X,functionSelector:j,parameter:M,sender:G,memo:U,expiration:O,extraEnergy:P=0}){let K=await n({contractAddress:X,functionSelector:j,parameter:M,sender:G}),L=await k(K+P),F=await Vz({contractAddress:X,feeLimit:L,functionSelector:j,ownerAddress:G,parameter:M});return xz({expiration:O,feeLimit:L,memo:U,transaction:F})}async function D(X){if(!B(X))return[$.AssetValue.from({chain:$.Chain.Tron})];try{let j=await Fz(X);if(!j)return[$.AssetValue.from({chain:$.Chain.Tron})];let M=[$.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:6,value:String(j.balance)})],G=j.trc20?.find((U)=>(t in U));if(G){let U=G[t];M.push($.AssetValue.from({asset:`TRON.USDT-${t}`,fromBaseDecimal:6,value:U}))}return M}catch(j){return $.warnOnce({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${j instanceof Error?j.message:j}`}),[$.AssetValue.from({chain:$.Chain.Tron})]}}async function m({recipient:X,assetValue:j,memo:M,expiration:G}){if(!B(X))throw new $.SwapKitError("toolbox_tron_token_transfer_failed",{message:"invalid address"});let U=await q();if(!U)throw new $.SwapKitError("toolbox_tron_no_signer");try{let O=await W(),P=await s({assetValue:j,expiration:G,memo:M,recipient:X,sender:O}),K=await U.signTransaction(P),L=await w(K);if(!L)throw new $.SwapKitError("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return L}catch(O){throw new $.SwapKitError("toolbox_tron_token_transfer_failed",{message:O instanceof Error?O.message:String(O)})}}function a({requiredBandwidth:X,resources:j,feePerUnit:M}){let G=Math.max(0,j.free+j.total-j.used);return X>G?(X-G)*M:0}async function uz({memo:X,recipient:j,senderAddress:M}){let[G,U,O]=await Promise.all([b(),g(j),i(M)]),P=U?0:G.createAccountFee,K=a({feePerUnit:G.bandwidthFee,requiredBandwidth:vz,resources:O.bandwidth}),L=X?G.memoFee:0;return $.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:$.BaseDecimal.TRON,value:P+K+L})}async function pz({assetValue:X,memo:j,recipient:M,senderAddress:G}){let U=X.address;if(!U)throw new $.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:X.toString()});let[O,P,K,L]=await Promise.all([b(),g(M),i(G),n({contractAddress:U,functionSelector:"transfer(address,uint256)",parameter:I([{type:"address",value:M},{type:"uint256",value:X.getBaseValue("string")}]),sender:G})]),zz=L+(P?0:d),dz=a({feePerUnit:O.bandwidthFee,requiredBandwidth:fz,resources:K.bandwidth}),Jz=Math.max(0,K.energy.total-K.energy.used),tz=zz>Jz?(zz-Jz)*O.energyFee:0,az=j?O.memoFee:0;return $.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:$.BaseDecimal.TRON,value:dz+tz+az})}async function lz({assetValue:X,memo:j,recipient:M}){let[G,U]=await Promise.all([b(),g(M)]);if(X.isGasAsset){let L=U?0:G.createAccountFee,F=j?G.memoFee:0;return $.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:$.BaseDecimal.TRON,value:L+vz*G.bandwidthFee+F})}let P=await k(Tz+(U?0:d),G.energyFee),K=j?G.memoFee:0;return $.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:$.BaseDecimal.TRON,value:P+fz*G.bandwidthFee+K})}async function cz({assetValue:X,memo:j,recipient:M,sender:G}){let U=await q();try{let O=G?G:U?await W():void 0;if(!O)return lz({assetValue:X,memo:j,recipient:M});return X.isGasAsset?uz({memo:j,recipient:M,senderAddress:O}):pz({assetValue:X,memo:j,recipient:M,senderAddress:O})}catch(O){throw $.warnOnce({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${O instanceof Error?O.message:O}`}),new $.SwapKitError("toolbox_fee_estimation_failed",{chain:$.Chain.Tron,error:O})}}async function s({recipient:X,assetValue:j,memo:M,sender:G,expiration:U}){if(!B(X)||!B(G))throw new $.SwapKitError("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(j.isGasAsset){let K=await Rz({amount:j.getBaseValue("number"),from:G,to:X});return xz({expiration:U,memo:M,transaction:K})}let O=j.address;if(!O)throw new $.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:j.toString()});let P=await g(X);return H({contractAddress:O,expiration:U,extraEnergy:P?0:d,functionSelector:"transfer(address,uint256)",memo:M,parameter:I([{type:"address",value:X},{type:"uint256",value:j.getBaseValue("string")}]),sender:G})}async function r(X){_(X);let j=await q();if(!j)throw new $.SwapKitError("toolbox_tron_no_signer");return j.signTransaction(X)}async function oz(X){let j=await r(X);return w(j)}function e({assetAddress:X,spenderAddress:j,from:M}){return _z({assetAddress:X,owner:M,spender:j})}async function iz({assetAddress:X,spenderAddress:j,from:M,amount:G}){let U=await e({assetAddress:X,from:M,spenderAddress:j});if(!G)return U>0n;return U>=BigInt(G)}async function nz({assetAddress:X,spenderAddress:j,amount:M,from:G}){if(!B(X)||!B(j))throw new $.SwapKitError("toolbox_tron_approve_failed");let U=await q();if(!U)throw new $.SwapKitError("toolbox_tron_no_signer");let O=G||await W(),P=M!==void 0?BigInt(M).toString():BJ;try{let K=await H({contractAddress:X,functionSelector:"approve(address,uint256)",parameter:I([{type:"address",value:j},{type:"uint256",value:P}]),sender:O}),L=await U.signTransaction(K),F=await w(L);if(!F)throw new $.SwapKitError("toolbox_tron_approve_failed");return F}catch(K){if(K instanceof $.SwapKitError)throw K;throw new $.SwapKitError("toolbox_tron_approve_failed",{error:K})}}return{approve:nz,broadcastTransaction:w,createTransaction:s,estimateTransactionFee:cz,getAddress:W,getApprovedAmount:e,getBalance:D,getRpcUrl:()=>$.getRPCUrl($.Chain.Tron),isApproved:iz,signAndBroadcastTransaction:oz,signTransaction:r,transfer:m,validateAddress:B}}var wz,bz,gz,$,v,Az,vz=268,Tz=65000,d=25000,fz=345,t="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",BJ="115792089237316195423570985008687907853269984665640564039457584007913129639935";var mz=f(()=>{Wz();Iz();o();wz=require("@noble/hashes/utils.js"),bz=require("@scure/bip32"),gz=require("@scure/bip39"),$=require("@swapkit/helpers"),v=require("ts-pattern"),Az=B});var FJ={};YJ(FJ,{validateTronAddress:()=>Az,getTronToolbox:()=>Ez,getTronPrivateKeyFromMnemonic:()=>hz});module.exports=QJ(FJ);var RJ=f(()=>{mz()});RJ();
|
|
1
|
+
var ez=Object.create;var{getPrototypeOf:zJ,defineProperty:v,getOwnPropertyNames:Zz,getOwnPropertyDescriptor:JJ}=Object,$z=Object.prototype.hasOwnProperty;function Yz(z){return this[z]}var QJ,ZJ,_J=(z,J,Q)=>{var Z=z!=null&&typeof z==="object";if(Z){var Y=J?QJ??=new WeakMap:ZJ??=new WeakMap,q=Y.get(z);if(q)return q}Q=z!=null?ez(zJ(z)):{};let M=J||!z||!z.__esModule?v(Q,"default",{value:z,enumerable:!0}):Q;for(let k of Zz(z))if(!$z.call(M,k))v(M,k,{get:Yz.bind(z,k),enumerable:!0});if(Z)Y.set(z,M);return M},$J=(z)=>{var J=(Qz??=new WeakMap).get(z),Q;if(J)return J;if(J=v({},"__esModule",{value:!0}),z&&typeof z==="object"||typeof z==="function"){for(var Z of Zz(z))if(!$z.call(J,Z))v(J,Z,{get:Yz.bind(z,Z),enumerable:!(Q=JJ(z,Z))||Q.enumerable})}return Qz.set(z,J),J},Qz;var YJ=(z)=>z;function XJ(z,J){this[z]=YJ.bind(null,J)}var jJ=(z,J)=>{for(var Q in J)v(z,Q,{get:J[Q],enumerable:!0,configurable:!0,set:XJ.bind(J,Q)})};var f=(z,J)=>()=>(z&&(J=z(z=0)),J);function u(z,J){let Q=0n,Z=0n,Y=J;while(Y<z.length&&Y-J<10){let q=z[Y++];if(q===void 0)break;if(Q|=BigInt(q&127)<<Z,Z+=7n,(q&128)===0)return[Q,Y]}throw new R.SwapKitError("toolbox_tron_transaction_creation_failed")}function w(z){let J=[],Q=z<0n?z+2n**64n:z;while(Q>=128n)J.push(Number(Q&0x7fn)|128),Q>>=7n;return J.push(Number(Q)),J}function A(z,J,Q){let Z=z.get(J);if(Z)Z.push(Q);else z.set(J,[Q])}function WJ(z){let J=new Map,Q=0;while(Q<z.length){let[Z,Y]=u(z,Q);Q=Y;let q=Number(Z>>3n),M=Number(Z&7n);if(M===y){let[k,H]=u(z,Q);Q=H,A(J,q,{data:new Uint8Array(w(k)),wireType:y})}else if(M===h){let[k,H]=u(z,Q);Q=H;let D=Number(k);if(D<0||Q+D>z.length)throw new R.SwapKitError("toolbox_tron_transaction_creation_failed");let m=z.slice(Q,Q+D);Q+=D,A(J,q,{data:m,wireType:h})}else if(M===Xz){if(Q+8>z.length)throw new R.SwapKitError("toolbox_tron_transaction_creation_failed");let k=z.slice(Q,Q+8);Q+=8,A(J,q,{data:k,wireType:Xz})}else if(M===jz){if(Q+4>z.length)throw new R.SwapKitError("toolbox_tron_transaction_creation_failed");let k=z.slice(Q,Q+4);Q+=4,A(J,q,{data:k,wireType:jz})}else throw new R.SwapKitError("toolbox_tron_transaction_creation_failed")}return J}function OJ(z){let J=[];for(let[q,M]of[...z.entries()].sort(([k],[H])=>k-H))for(let{wireType:k,data:H}of M){let D=BigInt(q<<3|k);if(J.push(new Uint8Array(w(D))),k===h)J.push(new Uint8Array(w(BigInt(H.length))));J.push(H)}let Q=J.reduce((q,M)=>q+M.length,0),Z=new Uint8Array(Q),Y=0;for(let q of J)Z.set(q,Y),Y+=q.length;return Z}function Gz(z,J){if(!z||z.length%2!==0)throw new R.SwapKitError("toolbox_tron_transaction_creation_failed");let Q=S.hexToBytes(z),Z=WJ(Q);if(J.expiration!==void 0)Z.set(qJ,[{data:new Uint8Array(w(BigInt(J.expiration))),wireType:y}]);if(J.data!==void 0)Z.set(GJ,[{data:S.hexToBytes(J.data),wireType:h}]);if(J.fee_limit!==void 0)Z.set(MJ,[{data:new Uint8Array(w(BigInt(J.fee_limit))),wireType:y}]);let Y=OJ(Z),q=S.bytesToHex(Y),M=S.bytesToHex(qz.sha256(Y));return{raw_data_hex:q,txID:M}}var qz,S,R,y=0,Xz=1,h=2,jz=5,qJ=8,GJ=10,MJ=18;var Mz=f(()=>{qz=require("@noble/hashes/sha2.js"),S=require("@noble/hashes/utils.js"),R=require("@swapkit/helpers")});function B(z){if(typeof z!=="string")return!1;try{let J=E.decode(z);return J.length===21&&J[0]===Uz}catch{return!1}}function Cz(z){return N.bytesToHex(E.decode(z))}function CJ(z){return E.decode(z).slice(1)}function kz(z){let J=p.secp256k1.getPublicKey(N.hexToBytes(z),!1),Q=Wz.keccak_256(J.slice(1)).slice(-20),Z=new Uint8Array(21);return Z[0]=Uz,Z.set(Q,1),E.encode(Z)}function Hz({txID:z,privateKey:J}){let Q=p.secp256k1.sign(N.hexToBytes(z),N.hexToBytes(J),{format:"recovered",prehash:!1}),Z=Q[0]??0,Y=N.bytesToHex(Q.slice(1,33)),q=N.bytesToHex(Q.slice(33,65)),M=(Z+27).toString(16).padStart(2,"0");return Y+q+M}function _({txID:z,raw_data_hex:J}){let Q=N.bytesToHex(l.sha256(N.hexToBytes(J)));if(z!==Q)throw new c.SwapKitError("toolbox_tron_invalid_transaction_integrity",{expected:Q,txID:z})}function kJ(z){return`000000000000000000000000${N.bytesToHex(CJ(z))}`}function HJ(z){let J=typeof z==="bigint"?z:BigInt(z);if(J<0n||J>=UJ)throw new c.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:J.toString()});return J.toString(16).padStart(64,"0")}function T(z){return z.map(({type:J,value:Q})=>J==="address"?kJ(Q):HJ(BigInt(Q))).join("")}function Kz(z){return N.bytesToHex(new TextEncoder().encode(z))}var p,l,Wz,N,Oz,c,E,Uz=65,UJ;var o=f(()=>{p=require("@noble/curves/secp256k1.js"),l=require("@noble/hashes/sha2.js"),Wz=require("@noble/hashes/sha3.js"),N=require("@noble/hashes/utils.js"),Oz=require("@scure/base"),c=require("@swapkit/helpers"),E=Oz.createBase58check(l.sha256),UJ=2n**256n});function Nz(){try{return C.getRPCUrlSync(C.Chain.Tron)}catch{return Lz}}function Bz(){let z=new AbortController,J=setTimeout(()=>z.abort(),BJ);return{cleanup:()=>clearTimeout(J),signal:z.signal}}async function V(z,J){let{signal:Q,cleanup:Z}=Bz();try{let Y=await fetch(`${Nz()}${z}`,{body:JSON.stringify(J),headers:{"Content-Type":"application/json"},method:"POST",signal:Q});if(!Y.ok)throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:`${Y.status} ${Y.statusText} on ${z}`});return await Y.json()}finally{Z()}}async function Dz(z,J){let{signal:Q,cleanup:Z}=Bz();try{let Y=await fetch(`${J??Nz()}${z}`,{headers:{"Content-Type":"application/json"},signal:Q});if(!Y.ok)throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:`${Y.status} ${Y.statusText} on ${z}`});return await Y.json()}finally{Z()}}async function Fz(z){if(!B(z))throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{address:z,message:"Invalid address"});try{let J=await Dz(`/v1/accounts/${z}`,Lz);if(!(J.success&&J.data)||J.data.length===0)return;let Q;try{Q=Cz(z).toLowerCase()}catch{Q=z.toLowerCase()}let Z=J.data.find((Y)=>Y.address.toLowerCase()===Q);if(!Z)return;return{balance:Z.balance,trc20:Z.trc20||[]}}catch(J){if(J instanceof C.SwapKitError)throw J;throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{address:z,message:J instanceof Error?J.message:"Unknown error"})}}async function Rz({from:z,to:J,amount:Q}){let Y=await V("/wallet/createtransaction",{amount:Q,owner_address:z,to_address:J,visible:!0});if(!Y.txID||!Y.raw_data_hex||!Y.raw_data)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let M=Y.raw_data?.contract?.[0]?.parameter?.value;if(M?.to_address!==J||M?.owner_address!==z||M?.amount!==Q)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");return _(Y),Y}async function Vz({ownerAddress:z,contractAddress:J,functionSelector:Q,parameter:Z,feeLimit:Y,callValue:q=0}){let M=await V("/wallet/triggersmartcontract",{call_value:q,contract_address:J,fee_limit:Y,function_selector:Q,owner_address:z,parameter:Z,visible:!0});if(!M.result.result||!M.transaction?.txID||!M.transaction?.raw_data_hex)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let H=M.transaction.raw_data?.contract?.[0]?.parameter?.value;if(H?.contract_address!==J||H?.owner_address!==z)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");return _(M.transaction),M.transaction}function Sz({ownerAddress:z,contractAddress:J,functionSelector:Q,parameter:Z}){return V("/wallet/triggerconstantcontract",{contract_address:J,function_selector:Q,owner_address:z,parameter:Z,visible:!0})}function DJ({ownerAddress:z,contractAddress:J,functionSelector:Q,parameter:Z}){return V("/wallet/estimateenergy",{contract_address:J,function_selector:Q,owner_address:z,parameter:Z,visible:!0})}function Pz(z){let J=typeof z==="number"?z:typeof z==="string"?Number(z):Number.NaN;return Number.isFinite(J)&&J>0?J:void 0}async function x(z){try{let{result:J,txid:Q}=await V("/wallet/broadcasttransaction",{raw_data:z.raw_data,raw_data_hex:z.raw_data_hex,signature:z.signature,txID:z.txID,visible:z.visible});if(!J||!Q)throw new C.SwapKitError("toolbox_tron_token_transfer_failed");return Q}catch(J){throw new C.SwapKitError("toolbox_tron_broadcast_failed",{error:J})}}async function b(){let z={};try{let{chainParameter:J}=await Dz("/wallet/getchainparameters");for(let Q of J)z[Q.key]=Q.value}catch(J){C.warnOnce({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${J instanceof Error?J.message:J}`})}return{bandwidthFee:z.getTransactionFee??KJ,createAccountFee:z.getCreateNewAccountFeeInSystemContract??z.getCreateAccountFee??PJ,energyFee:z.getEnergyFee??LJ,memoFee:z.getMemoFee??NJ}}async function i(z){try{let J=await V("/wallet/getaccountresource",{address:z,visible:!0});return{bandwidth:{free:(J.freeNetLimit??600)-(J.freeNetUsed??0),total:J.NetLimit??0,used:J.NetUsed??0},energy:{total:J.EnergyLimit??0,used:J.EnergyUsed??0}}}catch(J){return C.warnOnce({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${J instanceof Error?J.message:J}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function g(z){try{let J=await V("/wallet/getaccount",{address:z,visible:!0});return J&&Object.keys(J).length>0}catch{return!1}}async function n(z){try{let J=await DJ({...z,ownerAddress:z.sender}),Q=J.energy_required??J.energyRequired;if(J.result&&!J.result.result)throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:J.result.message||"estimateenergy failed"});if(Q!==void 0){let Z=Pz(Q);if(Z!==void 0)return Z;throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(J){C.warnOnce({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${J instanceof Error?J.message:J}`})}try{let{energy_used:J}=await Sz({...z,ownerAddress:z.sender}),Q=Pz(J);if(Q!==void 0)return Q;throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:"Invalid triggerconstantcontract energy response"})}catch(J){throw C.warnOnce({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy: ${J instanceof Error?J.message:J}`}),new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:`Unable to estimate contract energy: ${J instanceof Error?J.message:J}`})}}async function _z({assetAddress:z,owner:J,spender:Q}){let Z=T([{type:"address",value:J},{type:"address",value:Q}]),q=(await Sz({contractAddress:z,functionSelector:"allowance(address,address)",ownerAddress:Q,parameter:Z})).constant_result?.[0];if(!q)return 0n;try{return BigInt(`0x${q}`)}catch{return 0n}}var C,Lz="https://api.trongrid.io",KJ=1000,PJ=1e6,LJ=420,NJ=1e6,BJ=30000;var Tz=f(()=>{o();C=require("@swapkit/helpers")});function yz({phrase:z,derivationPath:J}){let Q=bz.HDKey.fromMasterSeed(gz.mnemonicToSeedSync(z)).derive(J);if(!Q.privateKey)throw new $.SwapKitError("toolbox_tron_no_signer");return xz.bytesToHex(Q.privateKey)}function hz(z,J){return{...z,value:String(J)}}function Ez(z,J){if(!J)return z;return{...z,data:J.startsWith("0x")?J:`0x${J}`}}function mz({phrase:z,derivationPath:J,index:Q}){let Z=J||$.derivationPathToString($.updateDerivationPath($.NetworkDerivationPath[$.Chain.Tron],{index:Q||0}));return yz({derivationPath:Z,phrase:z})}function RJ({phrase:z,derivationPath:J}){let Q=yz({derivationPath:J,phrase:z}),Z=kz(Q);return{getAddress:()=>Promise.resolve(Z),signTransaction:(Y)=>{_(Y);let q=Hz({privateKey:Q,txID:Y.txID});return Promise.resolve({...Y,signature:[q]})}}}function wz({transaction:z,memo:J,expiration:Q,feeLimit:Z}){let Y={},q={};if(Z!==void 0&&z.raw_data)Y.fee_limit=Z,q.fee_limit=Z;if(J){let H=J.startsWith("0x")?J.replace(/^0x/,""):Kz(J);Y.data=H,q.data=H}if(Q){let H=z.raw_data.expiration+Q*1000;Y.expiration=H,q.expiration=H}if(Object.keys(Y).length===0)return z;let{raw_data_hex:M,txID:k}=Gz(z.raw_data_hex,Y);return{...z,raw_data:{...z.raw_data,...q},raw_data_hex:M,txID:k}}function uz(z={}){let J="index"in z?z.index||0:0,Q=$.derivationPathToString("derivationPath"in z&&z.derivationPath?z.derivationPath:$.updateDerivationPath($.NetworkDerivationPath[$.Chain.Tron],{index:J})),Z,Y=!1;function q(){if(Y)return Promise.resolve(Z);return Z=I.match(z).with({phrase:I.P.string},({phrase:X})=>RJ({derivationPath:Q,phrase:X})).with({signer:I.P.not(I.P.nullish)},({signer:X})=>X).otherwise(()=>{return}),Y=!0,Promise.resolve(Z)}async function M(){let X=await q();if(!X)throw new $.SwapKitError("toolbox_tron_no_signer");return X.getAddress()}async function k(X,j){let W=X||vz,G=j??(await b()).energyFee,U=W*G,O=Math.ceil(U*1.5);return Math.min(Math.max(O,1e7),150000000)}async function H({contractAddress:X,functionSelector:j,parameter:W,sender:G,memo:U,expiration:O,extraEnergy:P=0}){let K=await n({contractAddress:X,functionSelector:j,parameter:W,sender:G}),L=await k(K+P),F=await Vz({contractAddress:X,feeLimit:L,functionSelector:j,ownerAddress:G,parameter:W});return wz({expiration:O,feeLimit:L,memo:U,transaction:F})}async function D(X){if(!B(X))return[$.AssetValue.from({chain:$.Chain.Tron})];try{let j=await Fz(X);if(!j)return[$.AssetValue.from({chain:$.Chain.Tron})];let W=[$.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:6,value:String(j.balance)})],G=j.trc20?.find((U)=>(t in U));if(G){let U=G[t];W.push($.AssetValue.from({asset:`TRON.USDT-${t}`,fromBaseDecimal:6,value:U}))}return W}catch(j){return $.warnOnce({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${j instanceof Error?j.message:j}`}),[$.AssetValue.from({chain:$.Chain.Tron})]}}async function m({recipient:X,assetValue:j,memo:W,expiration:G}){if(!B(X))throw new $.SwapKitError("toolbox_tron_token_transfer_failed",{message:"invalid address"});let U=await q();if(!U)throw new $.SwapKitError("toolbox_tron_no_signer");try{let O=await M(),P=await s({assetValue:j,expiration:G,memo:W,recipient:X,sender:O}),K=await U.signTransaction(P),L=await x(K);if(!L)throw new $.SwapKitError("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return L}catch(O){throw new $.SwapKitError("toolbox_tron_token_transfer_failed",{message:O instanceof Error?O.message:String(O)})}}function a({requiredBandwidth:X,resources:j,feePerUnit:W}){let G=Math.max(0,j.free+j.total-j.used);return X>G?(X-G)*W:0}async function lz({memo:X,recipient:j,senderAddress:W}){let[G,U,O]=await Promise.all([b(),g(j),i(W)]),P=U?0:G.createAccountFee,K=a({feePerUnit:G.bandwidthFee,requiredBandwidth:Iz,resources:O.bandwidth}),L=X?G.memoFee:0;return $.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:$.BaseDecimal.TRON,value:P+K+L})}async function cz({assetValue:X,memo:j,recipient:W,senderAddress:G}){let U=X.address;if(!U)throw new $.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:X.toString()});let[O,P,K,L]=await Promise.all([b(),g(W),i(G),n({contractAddress:U,functionSelector:"transfer(address,uint256)",parameter:T([{type:"address",value:W},{type:"uint256",value:X.getBaseValue("string")}]),sender:G})]),zz=L+(P?0:d),az=a({feePerUnit:O.bandwidthFee,requiredBandwidth:fz,resources:K.bandwidth}),Jz=Math.max(0,K.energy.total-K.energy.used),sz=zz>Jz?(zz-Jz)*O.energyFee:0,rz=j?O.memoFee:0;return $.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:$.BaseDecimal.TRON,value:az+sz+rz})}async function oz({assetValue:X,memo:j,recipient:W}){let[G,U]=await Promise.all([b(),g(W)]);if(X.isGasAsset){let L=U?0:G.createAccountFee,F=j?G.memoFee:0;return $.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:$.BaseDecimal.TRON,value:L+Iz*G.bandwidthFee+F})}let P=await k(vz+(U?0:d),G.energyFee),K=j?G.memoFee:0;return $.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:$.BaseDecimal.TRON,value:P+fz*G.bandwidthFee+K})}async function iz({assetValue:X,memo:j,recipient:W,sender:G}){let U=await q();try{let O=G?G:U?await M():void 0;if(!O)return oz({assetValue:X,memo:j,recipient:W});return X.isGasAsset?lz({memo:j,recipient:W,senderAddress:O}):cz({assetValue:X,memo:j,recipient:W,senderAddress:O})}catch(O){throw $.warnOnce({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${O instanceof Error?O.message:O}`}),new $.SwapKitError("toolbox_fee_estimation_failed",{chain:$.Chain.Tron,error:O})}}async function s({recipient:X,assetValue:j,memo:W,sender:G,expiration:U}){if(!B(X)||!B(G))throw new $.SwapKitError("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(j.isGasAsset){let K=await Rz({amount:j.getBaseValue("number"),from:G,to:X});return wz({expiration:U,memo:W,transaction:K})}let O=j.address;if(!O)throw new $.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:j.toString()});let P=await g(X);return H({contractAddress:O,expiration:U,extraEnergy:P?0:d,functionSelector:"transfer(address,uint256)",memo:W,parameter:T([{type:"address",value:X},{type:"uint256",value:j.getBaseValue("string")}]),sender:G})}async function r(X){_(X);let j=await q();if(!j)throw new $.SwapKitError("toolbox_tron_no_signer");return j.signTransaction(X)}async function nz(X){let j=await r(X);return x(j)}function e({assetAddress:X,spenderAddress:j,from:W}){return _z({assetAddress:X,owner:W,spender:j})}async function dz({assetAddress:X,spenderAddress:j,from:W,amount:G}){let U=await e({assetAddress:X,from:W,spenderAddress:j});if(!G)return U>0n;return U>=BigInt(G)}async function tz({assetAddress:X,spenderAddress:j,amount:W,from:G}){if(!B(X)||!B(j))throw new $.SwapKitError("toolbox_tron_approve_failed");let U=await q();if(!U)throw new $.SwapKitError("toolbox_tron_no_signer");let O=G||await M(),P=W!==void 0?BigInt(W).toString():FJ;try{let K=await H({contractAddress:X,functionSelector:"approve(address,uint256)",parameter:T([{type:"address",value:j},{type:"uint256",value:P}]),sender:O}),L=await U.signTransaction(K),F=await x(L);if(!F)throw new $.SwapKitError("toolbox_tron_approve_failed");return F}catch(K){if(K instanceof $.SwapKitError)throw K;throw new $.SwapKitError("toolbox_tron_approve_failed",{error:K})}}return{approve:tz,broadcastTransaction:x,createTransaction:s,estimateTransactionFee:iz,getAddress:M,getApprovedAmount:e,getBalance:D,getRpcUrl:()=>$.getRPCUrl($.Chain.Tron),isApproved:dz,signAndBroadcastTransaction:nz,signTransaction:r,transfer:m,validateAddress:B}}var xz,bz,gz,$,I,Az,Iz=268,vz=65000,d=25000,fz=345,t="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",FJ="115792089237316195423570985008687907853269984665640564039457584007913129639935";var pz=f(()=>{Mz();Tz();o();xz=require("@noble/hashes/utils.js"),bz=require("@scure/bip32"),gz=require("@scure/bip39"),$=require("@swapkit/helpers"),I=require("ts-pattern"),Az=B});var VJ={};jJ(VJ,{withTronTransactionValue:()=>hz,withTronTransactionData:()=>Ez,validateTronAddress:()=>Az,getTronToolbox:()=>uz,getTronPrivateKeyFromMnemonic:()=>mz});module.exports=$J(VJ);var SJ=f(()=>{pz()});SJ();
|
package/dist/src/tron/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../../chunk-ntbvmmch.js";import{bytesToHex as qJ}from"@noble/hashes/utils.js";import{HDKey as GJ}from"@scure/bip32";import{mnemonicToSeedSync as WJ}from"@scure/bip39";import{AssetValue as D,BaseDecimal as m,Chain as N,derivationPathToString as Iz,getRPCUrl as MJ,NetworkDerivationPath as vz,SwapKitError as H,updateDerivationPath as Tz,warnOnce as Fz}from"@swapkit/helpers";import{match as OJ,P as o}from"ts-pattern";import{sha256 as pz}from"@noble/hashes/sha2.js";import{bytesToHex as zz,hexToBytes as Jz}from"@noble/hashes/utils.js";import{SwapKitError as S}from"@swapkit/helpers";var g=0,Qz=1,A=2,Zz=5,lz=8,cz=10,oz=18;function p(J,z){let Q=0n,Z=0n,$=z;while($<J.length&&$-z<10){let j=J[$++];if(j===void 0)break;if(Q|=BigInt(j&127)<<Z,Z+=7n,(j&128)===0)return[Q,$]}throw new S("toolbox_tron_transaction_creation_failed")}function T(J){let z=[],Q=J<0n?J+2n**64n:J;while(Q>=128n)z.push(Number(Q&0x7fn)|128),Q>>=7n;return z.push(Number(Q)),z}function b(J,z,Q){let Z=J.get(z);if(Z)Z.push(Q);else J.set(z,[Q])}function iz(J){let z=new Map,Q=0;while(Q<J.length){let[Z,$]=p(J,Q);Q=$;let j=Number(Z>>3n),W=Number(Z&7n);if(W===g){let[k,U]=p(J,Q);Q=U,b(z,j,{data:new Uint8Array(T(k)),wireType:g})}else if(W===A){let[k,U]=p(J,Q);Q=U;let F=Number(k);if(F<0||Q+F>J.length)throw new S("toolbox_tron_transaction_creation_failed");let u=J.slice(Q,Q+F);Q+=F,b(z,j,{data:u,wireType:A})}else if(W===Qz){if(Q+8>J.length)throw new S("toolbox_tron_transaction_creation_failed");let k=J.slice(Q,Q+8);Q+=8,b(z,j,{data:k,wireType:Qz})}else if(W===Zz){if(Q+4>J.length)throw new S("toolbox_tron_transaction_creation_failed");let k=J.slice(Q,Q+4);Q+=4,b(z,j,{data:k,wireType:Zz})}else throw new S("toolbox_tron_transaction_creation_failed")}return z}function nz(J){let z=[];for(let[j,W]of[...J.entries()].sort(([k],[U])=>k-U))for(let{wireType:k,data:U}of W){let F=BigInt(j<<3|k);if(z.push(new Uint8Array(T(F))),k===A)z.push(new Uint8Array(T(BigInt(U.length))));z.push(U)}let Q=z.reduce((j,W)=>j+W.length,0),Z=new Uint8Array(Q),$=0;for(let j of z)Z.set(j,$),$+=j.length;return Z}function $z(J,z){if(!J||J.length%2!==0)throw new S("toolbox_tron_transaction_creation_failed");let Q=Jz(J),Z=iz(Q);if(z.expiration!==void 0)Z.set(lz,[{data:new Uint8Array(T(BigInt(z.expiration))),wireType:g}]);if(z.data!==void 0)Z.set(cz,[{data:Jz(z.data),wireType:A}]);if(z.fee_limit!==void 0)Z.set(oz,[{data:new Uint8Array(T(BigInt(z.fee_limit))),wireType:g}]);let $=nz(Z),j=zz($),W=zz(pz($));return{raw_data_hex:j,txID:W}}import{Chain as zJ,getRPCUrlSync as JJ,SwapKitError as K,warnOnce as E}from"@swapkit/helpers";import{secp256k1 as Yz}from"@noble/curves/secp256k1.js";import{sha256 as Xz}from"@noble/hashes/sha2.js";import{keccak_256 as dz}from"@noble/hashes/sha3.js";import{bytesToHex as _,hexToBytes as y}from"@noble/hashes/utils.js";import{createBase58check as tz}from"@scure/base";import{SwapKitError as jz}from"@swapkit/helpers";var h=tz(Xz),qz=65,az=2n**256n;function B(J){if(typeof J!=="string")return!1;try{let z=h.decode(J);return z.length===21&&z[0]===qz}catch{return!1}}function Gz(J){return _(h.decode(J))}function sz(J){return h.decode(J).slice(1)}function Wz(J){let z=Yz.getPublicKey(y(J),!1),Q=dz(z.slice(1)).slice(-20),Z=new Uint8Array(21);return Z[0]=qz,Z.set(Q,1),h.encode(Z)}function Mz({txID:J,privateKey:z}){let Q=Yz.sign(y(J),y(z),{format:"recovered",prehash:!1}),Z=Q[0]??0,$=_(Q.slice(1,33)),j=_(Q.slice(33,65)),W=(Z+27).toString(16).padStart(2,"0");return $+j+W}function I({txID:J,raw_data_hex:z}){let Q=_(Xz(y(z)));if(J!==Q)throw new jz("toolbox_tron_invalid_transaction_integrity",{expected:Q,txID:J})}function rz(J){return`000000000000000000000000${_(sz(J))}`}function ez(J){let z=typeof J==="bigint"?J:BigInt(J);if(z<0n||z>=az)throw new jz("toolbox_tron_invalid_token_identifier",{identifier:z.toString()});return z.toString(16).padStart(64,"0")}function v(J){return J.map(({type:z,value:Q})=>z==="address"?rz(Q):ez(BigInt(Q))).join("")}function Oz(J){return _(new TextEncoder().encode(J))}var Cz="https://api.trongrid.io",QJ=1000,ZJ=1e6,$J=420,YJ=1e6,XJ=30000;function kz(){try{return JJ(zJ.Tron)}catch{return Cz}}function Hz(){let J=new AbortController,z=setTimeout(()=>J.abort(),XJ);return{cleanup:()=>clearTimeout(z),signal:J.signal}}async function V(J,z){let{signal:Q,cleanup:Z}=Hz();try{let $=await fetch(`${kz()}${J}`,{body:JSON.stringify(z),headers:{"Content-Type":"application/json"},method:"POST",signal:Q});if(!$.ok)throw new K("toolbox_tron_trongrid_api_error",{message:`${$.status} ${$.statusText} on ${J}`});return await $.json()}finally{Z()}}async function Kz(J,z){let{signal:Q,cleanup:Z}=Hz();try{let $=await fetch(`${z??kz()}${J}`,{headers:{"Content-Type":"application/json"},signal:Q});if(!$.ok)throw new K("toolbox_tron_trongrid_api_error",{message:`${$.status} ${$.statusText} on ${J}`});return await $.json()}finally{Z()}}async function Pz(J){if(!B(J))throw new K("toolbox_tron_trongrid_api_error",{address:J,message:"Invalid address"});try{let z=await Kz(`/v1/accounts/${J}`,Cz);if(!(z.success&&z.data)||z.data.length===0)return;let Q;try{Q=Gz(J).toLowerCase()}catch{Q=J.toLowerCase()}let Z=z.data.find(($)=>$.address.toLowerCase()===Q);if(!Z)return;return{balance:Z.balance,trc20:Z.trc20||[]}}catch(z){if(z instanceof K)throw z;throw new K("toolbox_tron_trongrid_api_error",{address:J,message:z instanceof Error?z.message:"Unknown error"})}}async function Lz({from:J,to:z,amount:Q}){let $=await V("/wallet/createtransaction",{amount:Q,owner_address:J,to_address:z,visible:!0});if(!$.txID||!$.raw_data_hex||!$.raw_data)throw new K("toolbox_tron_transaction_creation_failed");let W=$.raw_data?.contract?.[0]?.parameter?.value;if(W?.to_address!==z||W?.owner_address!==J||W?.amount!==Q)throw new K("toolbox_tron_transaction_creation_failed");return I($),$}async function Nz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z,feeLimit:$,callValue:j=0}){let W=await V("/wallet/triggersmartcontract",{call_value:j,contract_address:z,fee_limit:$,function_selector:Q,owner_address:J,parameter:Z,visible:!0});if(!W.result.result||!W.transaction?.txID||!W.transaction?.raw_data_hex)throw new K("toolbox_tron_transaction_creation_failed");let U=W.transaction.raw_data?.contract?.[0]?.parameter?.value;if(U?.contract_address!==z||U?.owner_address!==J)throw new K("toolbox_tron_transaction_creation_failed");return I(W.transaction),W.transaction}function Bz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z}){return V("/wallet/triggerconstantcontract",{contract_address:z,function_selector:Q,owner_address:J,parameter:Z,visible:!0})}function jJ({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z}){return V("/wallet/estimateenergy",{contract_address:z,function_selector:Q,owner_address:J,parameter:Z,visible:!0})}function Uz(J){let z=typeof J==="number"?J:typeof J==="string"?Number(J):Number.NaN;return Number.isFinite(z)&&z>0?z:void 0}async function f(J){try{let{result:z,txid:Q}=await V("/wallet/broadcasttransaction",{raw_data:J.raw_data,raw_data_hex:J.raw_data_hex,signature:J.signature,txID:J.txID,visible:J.visible});if(!z||!Q)throw new K("toolbox_tron_token_transfer_failed");return Q}catch(z){throw new K("toolbox_tron_broadcast_failed",{error:z})}}async function x(){let J={};try{let{chainParameter:z}=await Kz("/wallet/getchainparameters");for(let Q of z)J[Q.key]=Q.value}catch(z){E({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${z instanceof Error?z.message:z}`})}return{bandwidthFee:J.getTransactionFee??QJ,createAccountFee:J.getCreateNewAccountFeeInSystemContract??J.getCreateAccountFee??ZJ,energyFee:J.getEnergyFee??$J,memoFee:J.getMemoFee??YJ}}async function l(J){try{let z=await V("/wallet/getaccountresource",{address:J,visible:!0});return{bandwidth:{free:(z.freeNetLimit??600)-(z.freeNetUsed??0),total:z.NetLimit??0,used:z.NetUsed??0},energy:{total:z.EnergyLimit??0,used:z.EnergyUsed??0}}}catch(z){return E({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${z instanceof Error?z.message:z}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function w(J){try{let z=await V("/wallet/getaccount",{address:J,visible:!0});return z&&Object.keys(z).length>0}catch{return!1}}async function c(J){try{let z=await jJ({...J,ownerAddress:J.sender}),Q=z.energy_required??z.energyRequired;if(z.result&&!z.result.result)throw new K("toolbox_tron_trongrid_api_error",{message:z.result.message||"estimateenergy failed"});if(Q!==void 0){let Z=Uz(Q);if(Z!==void 0)return Z;throw new K("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(z){E({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${z instanceof Error?z.message:z}`})}try{let{energy_used:z}=await Bz({...J,ownerAddress:J.sender}),Q=Uz(z);if(Q!==void 0)return Q;throw new K("toolbox_tron_trongrid_api_error",{message:"Invalid triggerconstantcontract energy response"})}catch(z){throw E({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy: ${z instanceof Error?z.message:z}`}),new K("toolbox_tron_trongrid_api_error",{message:`Unable to estimate contract energy: ${z instanceof Error?z.message:z}`})}}async function Dz({assetAddress:J,owner:z,spender:Q}){let Z=v([{type:"address",value:z},{type:"address",value:Q}]),j=(await Bz({contractAddress:J,functionSelector:"allowance(address,address)",ownerAddress:Q,parameter:Z})).constant_result?.[0];if(!j)return 0n;try{return BigInt(`0x${j}`)}catch{return 0n}}var UJ=B,Rz=268,Vz=65000,i=25000,Sz=345,n="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",CJ="115792089237316195423570985008687907853269984665640564039457584007913129639935";function fz({phrase:J,derivationPath:z}){let Q=GJ.fromMasterSeed(WJ(J)).derive(z);if(!Q.privateKey)throw new H("toolbox_tron_no_signer");return qJ(Q.privateKey)}function kJ({phrase:J,derivationPath:z,index:Q}){let Z=z||Iz(Tz(vz[N.Tron],{index:Q||0}));return fz({derivationPath:Z,phrase:J})}function HJ({phrase:J,derivationPath:z}){let Q=fz({derivationPath:z,phrase:J}),Z=Wz(Q);return{getAddress:()=>Promise.resolve(Z),signTransaction:($)=>{I($);let j=Mz({privateKey:Q,txID:$.txID});return Promise.resolve({...$,signature:[j]})}}}function _z({transaction:J,memo:z,expiration:Q,feeLimit:Z}){let $={},j={};if(Z!==void 0&&J.raw_data)$.fee_limit=Z,j.fee_limit=Z;if(z){let U=z.startsWith("0x")?z.replace(/^0x/,""):Oz(z);$.data=U,j.data=U}if(Q){let U=J.raw_data.expiration+Q*1000;$.expiration=U,j.expiration=U}if(Object.keys($).length===0)return J;let{raw_data_hex:W,txID:k}=$z(J.raw_data_hex,$);return{...J,raw_data:{...J.raw_data,...j},raw_data_hex:W,txID:k}}function KJ(J={}){let z="index"in J?J.index||0:0,Q=Iz("derivationPath"in J&&J.derivationPath?J.derivationPath:Tz(vz[N.Tron],{index:z})),Z,$=!1;function j(){if($)return Promise.resolve(Z);return Z=OJ(J).with({phrase:o.string},({phrase:Y})=>HJ({derivationPath:Q,phrase:Y})).with({signer:o.not(o.nullish)},({signer:Y})=>Y).otherwise(()=>{return}),$=!0,Promise.resolve(Z)}async function W(){let Y=await j();if(!Y)throw new H("toolbox_tron_no_signer");return Y.getAddress()}async function k(Y,X){let G=Y||Vz,q=X??(await x()).energyFee,O=G*q,M=Math.ceil(O*1.5);return Math.min(Math.max(M,1e7),150000000)}async function U({contractAddress:Y,functionSelector:X,parameter:G,sender:q,memo:O,expiration:M,extraEnergy:P=0}){let C=await c({contractAddress:Y,functionSelector:X,parameter:G,sender:q}),L=await k(C+P),R=await Nz({contractAddress:Y,feeLimit:L,functionSelector:X,ownerAddress:q,parameter:G});return _z({expiration:M,feeLimit:L,memo:O,transaction:R})}async function F(Y){if(!B(Y))return[D.from({chain:N.Tron})];try{let X=await Pz(Y);if(!X)return[D.from({chain:N.Tron})];let G=[D.from({chain:N.Tron,fromBaseDecimal:6,value:String(X.balance)})],q=X.trc20?.find((O)=>(n in O));if(q){let O=q[n];G.push(D.from({asset:`TRON.USDT-${n}`,fromBaseDecimal:6,value:O}))}return G}catch(X){return Fz({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${X instanceof Error?X.message:X}`}),[D.from({chain:N.Tron})]}}async function u({recipient:Y,assetValue:X,memo:G,expiration:q}){if(!B(Y))throw new H("toolbox_tron_token_transfer_failed",{message:"invalid address"});let O=await j();if(!O)throw new H("toolbox_tron_no_signer");try{let M=await W(),P=await t({assetValue:X,expiration:q,memo:G,recipient:Y,sender:M}),C=await O.signTransaction(P),L=await f(C);if(!L)throw new H("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return L}catch(M){throw new H("toolbox_tron_token_transfer_failed",{message:M instanceof Error?M.message:String(M)})}}function d({requiredBandwidth:Y,resources:X,feePerUnit:G}){let q=Math.max(0,X.free+X.total-X.used);return Y>q?(Y-q)*G:0}async function xz({memo:Y,recipient:X,senderAddress:G}){let[q,O,M]=await Promise.all([x(),w(X),l(G)]),P=O?0:q.createAccountFee,C=d({feePerUnit:q.bandwidthFee,requiredBandwidth:Rz,resources:M.bandwidth}),L=Y?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:P+C+L})}async function wz({assetValue:Y,memo:X,recipient:G,senderAddress:q}){let O=Y.address;if(!O)throw new H("toolbox_tron_invalid_token_identifier",{identifier:Y.toString()});let[M,P,C,L]=await Promise.all([x(),w(G),l(q),c({contractAddress:O,functionSelector:"transfer(address,uint256)",parameter:v([{type:"address",value:G},{type:"uint256",value:Y.getBaseValue("string")}]),sender:q})]),r=L+(P?0:i),Ez=d({feePerUnit:M.bandwidthFee,requiredBandwidth:Sz,resources:C.bandwidth}),e=Math.max(0,C.energy.total-C.energy.used),mz=r>e?(r-e)*M.energyFee:0,uz=X?M.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:Ez+mz+uz})}async function bz({assetValue:Y,memo:X,recipient:G}){let[q,O]=await Promise.all([x(),w(G)]);if(Y.isGasAsset){let L=O?0:q.createAccountFee,R=X?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:L+Rz*q.bandwidthFee+R})}let P=await k(Vz+(O?0:i),q.energyFee),C=X?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:P+Sz*q.bandwidthFee+C})}async function gz({assetValue:Y,memo:X,recipient:G,sender:q}){let O=await j();try{let M=q?q:O?await W():void 0;if(!M)return bz({assetValue:Y,memo:X,recipient:G});return Y.isGasAsset?xz({memo:X,recipient:G,senderAddress:M}):wz({assetValue:Y,memo:X,recipient:G,senderAddress:M})}catch(M){throw Fz({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${M instanceof Error?M.message:M}`}),new H("toolbox_fee_estimation_failed",{chain:N.Tron,error:M})}}async function t({recipient:Y,assetValue:X,memo:G,sender:q,expiration:O}){if(!B(Y)||!B(q))throw new H("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(X.isGasAsset){let C=await Lz({amount:X.getBaseValue("number"),from:q,to:Y});return _z({expiration:O,memo:G,transaction:C})}let M=X.address;if(!M)throw new H("toolbox_tron_invalid_token_identifier",{identifier:X.toString()});let P=await w(Y);return U({contractAddress:M,expiration:O,extraEnergy:P?0:i,functionSelector:"transfer(address,uint256)",memo:G,parameter:v([{type:"address",value:Y},{type:"uint256",value:X.getBaseValue("string")}]),sender:q})}async function a(Y){I(Y);let X=await j();if(!X)throw new H("toolbox_tron_no_signer");return X.signTransaction(Y)}async function Az(Y){let X=await a(Y);return f(X)}function s({assetAddress:Y,spenderAddress:X,from:G}){return Dz({assetAddress:Y,owner:G,spender:X})}async function yz({assetAddress:Y,spenderAddress:X,from:G,amount:q}){let O=await s({assetAddress:Y,from:G,spenderAddress:X});if(!q)return O>0n;return O>=BigInt(q)}async function hz({assetAddress:Y,spenderAddress:X,amount:G,from:q}){if(!B(Y)||!B(X))throw new H("toolbox_tron_approve_failed");let O=await j();if(!O)throw new H("toolbox_tron_no_signer");let M=q||await W(),P=G!==void 0?BigInt(G).toString():CJ;try{let C=await U({contractAddress:Y,functionSelector:"approve(address,uint256)",parameter:v([{type:"address",value:X},{type:"uint256",value:P}]),sender:M}),L=await O.signTransaction(C),R=await f(L);if(!R)throw new H("toolbox_tron_approve_failed");return R}catch(C){if(C instanceof H)throw C;throw new H("toolbox_tron_approve_failed",{error:C})}}return{approve:hz,broadcastTransaction:f,createTransaction:t,estimateTransactionFee:gz,getAddress:W,getApprovedAmount:s,getBalance:F,getRpcUrl:()=>MJ(N.Tron),isApproved:yz,signAndBroadcastTransaction:Az,signTransaction:a,transfer:u,validateAddress:B}}export{UJ as validateTronAddress,KJ as getTronToolbox,kJ as getTronPrivateKeyFromMnemonic};
|
|
1
|
+
import"../../chunk-ntbvmmch.js";import{bytesToHex as qJ}from"@noble/hashes/utils.js";import{HDKey as GJ}from"@scure/bip32";import{mnemonicToSeedSync as MJ}from"@scure/bip39";import{AssetValue as D,BaseDecimal as m,Chain as N,derivationPathToString as Tz,getRPCUrl as WJ,NetworkDerivationPath as Iz,SwapKitError as H,updateDerivationPath as vz,warnOnce as Fz}from"@swapkit/helpers";import{match as OJ,P as o}from"ts-pattern";import{sha256 as pz}from"@noble/hashes/sha2.js";import{bytesToHex as zz,hexToBytes as Jz}from"@noble/hashes/utils.js";import{SwapKitError as S}from"@swapkit/helpers";var g=0,Qz=1,A=2,Zz=5,lz=8,cz=10,oz=18;function p(J,z){let Q=0n,Z=0n,$=z;while($<J.length&&$-z<10){let j=J[$++];if(j===void 0)break;if(Q|=BigInt(j&127)<<Z,Z+=7n,(j&128)===0)return[Q,$]}throw new S("toolbox_tron_transaction_creation_failed")}function v(J){let z=[],Q=J<0n?J+2n**64n:J;while(Q>=128n)z.push(Number(Q&0x7fn)|128),Q>>=7n;return z.push(Number(Q)),z}function b(J,z,Q){let Z=J.get(z);if(Z)Z.push(Q);else J.set(z,[Q])}function iz(J){let z=new Map,Q=0;while(Q<J.length){let[Z,$]=p(J,Q);Q=$;let j=Number(Z>>3n),M=Number(Z&7n);if(M===g){let[k,U]=p(J,Q);Q=U,b(z,j,{data:new Uint8Array(v(k)),wireType:g})}else if(M===A){let[k,U]=p(J,Q);Q=U;let F=Number(k);if(F<0||Q+F>J.length)throw new S("toolbox_tron_transaction_creation_failed");let u=J.slice(Q,Q+F);Q+=F,b(z,j,{data:u,wireType:A})}else if(M===Qz){if(Q+8>J.length)throw new S("toolbox_tron_transaction_creation_failed");let k=J.slice(Q,Q+8);Q+=8,b(z,j,{data:k,wireType:Qz})}else if(M===Zz){if(Q+4>J.length)throw new S("toolbox_tron_transaction_creation_failed");let k=J.slice(Q,Q+4);Q+=4,b(z,j,{data:k,wireType:Zz})}else throw new S("toolbox_tron_transaction_creation_failed")}return z}function nz(J){let z=[];for(let[j,M]of[...J.entries()].sort(([k],[U])=>k-U))for(let{wireType:k,data:U}of M){let F=BigInt(j<<3|k);if(z.push(new Uint8Array(v(F))),k===A)z.push(new Uint8Array(v(BigInt(U.length))));z.push(U)}let Q=z.reduce((j,M)=>j+M.length,0),Z=new Uint8Array(Q),$=0;for(let j of z)Z.set(j,$),$+=j.length;return Z}function $z(J,z){if(!J||J.length%2!==0)throw new S("toolbox_tron_transaction_creation_failed");let Q=Jz(J),Z=iz(Q);if(z.expiration!==void 0)Z.set(lz,[{data:new Uint8Array(v(BigInt(z.expiration))),wireType:g}]);if(z.data!==void 0)Z.set(cz,[{data:Jz(z.data),wireType:A}]);if(z.fee_limit!==void 0)Z.set(oz,[{data:new Uint8Array(v(BigInt(z.fee_limit))),wireType:g}]);let $=nz(Z),j=zz($),M=zz(pz($));return{raw_data_hex:j,txID:M}}import{Chain as zJ,getRPCUrlSync as JJ,SwapKitError as K,warnOnce as E}from"@swapkit/helpers";import{secp256k1 as Yz}from"@noble/curves/secp256k1.js";import{sha256 as Xz}from"@noble/hashes/sha2.js";import{keccak_256 as dz}from"@noble/hashes/sha3.js";import{bytesToHex as _,hexToBytes as y}from"@noble/hashes/utils.js";import{createBase58check as tz}from"@scure/base";import{SwapKitError as jz}from"@swapkit/helpers";var h=tz(Xz),qz=65,az=2n**256n;function B(J){if(typeof J!=="string")return!1;try{let z=h.decode(J);return z.length===21&&z[0]===qz}catch{return!1}}function Gz(J){return _(h.decode(J))}function sz(J){return h.decode(J).slice(1)}function Mz(J){let z=Yz.getPublicKey(y(J),!1),Q=dz(z.slice(1)).slice(-20),Z=new Uint8Array(21);return Z[0]=qz,Z.set(Q,1),h.encode(Z)}function Wz({txID:J,privateKey:z}){let Q=Yz.sign(y(J),y(z),{format:"recovered",prehash:!1}),Z=Q[0]??0,$=_(Q.slice(1,33)),j=_(Q.slice(33,65)),M=(Z+27).toString(16).padStart(2,"0");return $+j+M}function T({txID:J,raw_data_hex:z}){let Q=_(Xz(y(z)));if(J!==Q)throw new jz("toolbox_tron_invalid_transaction_integrity",{expected:Q,txID:J})}function rz(J){return`000000000000000000000000${_(sz(J))}`}function ez(J){let z=typeof J==="bigint"?J:BigInt(J);if(z<0n||z>=az)throw new jz("toolbox_tron_invalid_token_identifier",{identifier:z.toString()});return z.toString(16).padStart(64,"0")}function I(J){return J.map(({type:z,value:Q})=>z==="address"?rz(Q):ez(BigInt(Q))).join("")}function Oz(J){return _(new TextEncoder().encode(J))}var Cz="https://api.trongrid.io",QJ=1000,ZJ=1e6,$J=420,YJ=1e6,XJ=30000;function kz(){try{return JJ(zJ.Tron)}catch{return Cz}}function Hz(){let J=new AbortController,z=setTimeout(()=>J.abort(),XJ);return{cleanup:()=>clearTimeout(z),signal:J.signal}}async function V(J,z){let{signal:Q,cleanup:Z}=Hz();try{let $=await fetch(`${kz()}${J}`,{body:JSON.stringify(z),headers:{"Content-Type":"application/json"},method:"POST",signal:Q});if(!$.ok)throw new K("toolbox_tron_trongrid_api_error",{message:`${$.status} ${$.statusText} on ${J}`});return await $.json()}finally{Z()}}async function Kz(J,z){let{signal:Q,cleanup:Z}=Hz();try{let $=await fetch(`${z??kz()}${J}`,{headers:{"Content-Type":"application/json"},signal:Q});if(!$.ok)throw new K("toolbox_tron_trongrid_api_error",{message:`${$.status} ${$.statusText} on ${J}`});return await $.json()}finally{Z()}}async function Pz(J){if(!B(J))throw new K("toolbox_tron_trongrid_api_error",{address:J,message:"Invalid address"});try{let z=await Kz(`/v1/accounts/${J}`,Cz);if(!(z.success&&z.data)||z.data.length===0)return;let Q;try{Q=Gz(J).toLowerCase()}catch{Q=J.toLowerCase()}let Z=z.data.find(($)=>$.address.toLowerCase()===Q);if(!Z)return;return{balance:Z.balance,trc20:Z.trc20||[]}}catch(z){if(z instanceof K)throw z;throw new K("toolbox_tron_trongrid_api_error",{address:J,message:z instanceof Error?z.message:"Unknown error"})}}async function Lz({from:J,to:z,amount:Q}){let $=await V("/wallet/createtransaction",{amount:Q,owner_address:J,to_address:z,visible:!0});if(!$.txID||!$.raw_data_hex||!$.raw_data)throw new K("toolbox_tron_transaction_creation_failed");let M=$.raw_data?.contract?.[0]?.parameter?.value;if(M?.to_address!==z||M?.owner_address!==J||M?.amount!==Q)throw new K("toolbox_tron_transaction_creation_failed");return T($),$}async function Nz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z,feeLimit:$,callValue:j=0}){let M=await V("/wallet/triggersmartcontract",{call_value:j,contract_address:z,fee_limit:$,function_selector:Q,owner_address:J,parameter:Z,visible:!0});if(!M.result.result||!M.transaction?.txID||!M.transaction?.raw_data_hex)throw new K("toolbox_tron_transaction_creation_failed");let U=M.transaction.raw_data?.contract?.[0]?.parameter?.value;if(U?.contract_address!==z||U?.owner_address!==J)throw new K("toolbox_tron_transaction_creation_failed");return T(M.transaction),M.transaction}function Bz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z}){return V("/wallet/triggerconstantcontract",{contract_address:z,function_selector:Q,owner_address:J,parameter:Z,visible:!0})}function jJ({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z}){return V("/wallet/estimateenergy",{contract_address:z,function_selector:Q,owner_address:J,parameter:Z,visible:!0})}function Uz(J){let z=typeof J==="number"?J:typeof J==="string"?Number(J):Number.NaN;return Number.isFinite(z)&&z>0?z:void 0}async function f(J){try{let{result:z,txid:Q}=await V("/wallet/broadcasttransaction",{raw_data:J.raw_data,raw_data_hex:J.raw_data_hex,signature:J.signature,txID:J.txID,visible:J.visible});if(!z||!Q)throw new K("toolbox_tron_token_transfer_failed");return Q}catch(z){throw new K("toolbox_tron_broadcast_failed",{error:z})}}async function w(){let J={};try{let{chainParameter:z}=await Kz("/wallet/getchainparameters");for(let Q of z)J[Q.key]=Q.value}catch(z){E({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${z instanceof Error?z.message:z}`})}return{bandwidthFee:J.getTransactionFee??QJ,createAccountFee:J.getCreateNewAccountFeeInSystemContract??J.getCreateAccountFee??ZJ,energyFee:J.getEnergyFee??$J,memoFee:J.getMemoFee??YJ}}async function l(J){try{let z=await V("/wallet/getaccountresource",{address:J,visible:!0});return{bandwidth:{free:(z.freeNetLimit??600)-(z.freeNetUsed??0),total:z.NetLimit??0,used:z.NetUsed??0},energy:{total:z.EnergyLimit??0,used:z.EnergyUsed??0}}}catch(z){return E({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${z instanceof Error?z.message:z}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function x(J){try{let z=await V("/wallet/getaccount",{address:J,visible:!0});return z&&Object.keys(z).length>0}catch{return!1}}async function c(J){try{let z=await jJ({...J,ownerAddress:J.sender}),Q=z.energy_required??z.energyRequired;if(z.result&&!z.result.result)throw new K("toolbox_tron_trongrid_api_error",{message:z.result.message||"estimateenergy failed"});if(Q!==void 0){let Z=Uz(Q);if(Z!==void 0)return Z;throw new K("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(z){E({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${z instanceof Error?z.message:z}`})}try{let{energy_used:z}=await Bz({...J,ownerAddress:J.sender}),Q=Uz(z);if(Q!==void 0)return Q;throw new K("toolbox_tron_trongrid_api_error",{message:"Invalid triggerconstantcontract energy response"})}catch(z){throw E({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy: ${z instanceof Error?z.message:z}`}),new K("toolbox_tron_trongrid_api_error",{message:`Unable to estimate contract energy: ${z instanceof Error?z.message:z}`})}}async function Dz({assetAddress:J,owner:z,spender:Q}){let Z=I([{type:"address",value:z},{type:"address",value:Q}]),j=(await Bz({contractAddress:J,functionSelector:"allowance(address,address)",ownerAddress:Q,parameter:Z})).constant_result?.[0];if(!j)return 0n;try{return BigInt(`0x${j}`)}catch{return 0n}}var UJ=B,Rz=268,Vz=65000,i=25000,Sz=345,n="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",CJ="115792089237316195423570985008687907853269984665640564039457584007913129639935";function fz({phrase:J,derivationPath:z}){let Q=GJ.fromMasterSeed(MJ(J)).derive(z);if(!Q.privateKey)throw new H("toolbox_tron_no_signer");return qJ(Q.privateKey)}function kJ(J,z){return{...J,value:String(z)}}function HJ(J,z){if(!z)return J;return{...J,data:z.startsWith("0x")?z:`0x${z}`}}function KJ({phrase:J,derivationPath:z,index:Q}){let Z=z||Tz(vz(Iz[N.Tron],{index:Q||0}));return fz({derivationPath:Z,phrase:J})}function PJ({phrase:J,derivationPath:z}){let Q=fz({derivationPath:z,phrase:J}),Z=Mz(Q);return{getAddress:()=>Promise.resolve(Z),signTransaction:($)=>{T($);let j=Wz({privateKey:Q,txID:$.txID});return Promise.resolve({...$,signature:[j]})}}}function _z({transaction:J,memo:z,expiration:Q,feeLimit:Z}){let $={},j={};if(Z!==void 0&&J.raw_data)$.fee_limit=Z,j.fee_limit=Z;if(z){let U=z.startsWith("0x")?z.replace(/^0x/,""):Oz(z);$.data=U,j.data=U}if(Q){let U=J.raw_data.expiration+Q*1000;$.expiration=U,j.expiration=U}if(Object.keys($).length===0)return J;let{raw_data_hex:M,txID:k}=$z(J.raw_data_hex,$);return{...J,raw_data:{...J.raw_data,...j},raw_data_hex:M,txID:k}}function LJ(J={}){let z="index"in J?J.index||0:0,Q=Tz("derivationPath"in J&&J.derivationPath?J.derivationPath:vz(Iz[N.Tron],{index:z})),Z,$=!1;function j(){if($)return Promise.resolve(Z);return Z=OJ(J).with({phrase:o.string},({phrase:Y})=>PJ({derivationPath:Q,phrase:Y})).with({signer:o.not(o.nullish)},({signer:Y})=>Y).otherwise(()=>{return}),$=!0,Promise.resolve(Z)}async function M(){let Y=await j();if(!Y)throw new H("toolbox_tron_no_signer");return Y.getAddress()}async function k(Y,X){let G=Y||Vz,q=X??(await w()).energyFee,O=G*q,W=Math.ceil(O*1.5);return Math.min(Math.max(W,1e7),150000000)}async function U({contractAddress:Y,functionSelector:X,parameter:G,sender:q,memo:O,expiration:W,extraEnergy:P=0}){let C=await c({contractAddress:Y,functionSelector:X,parameter:G,sender:q}),L=await k(C+P),R=await Nz({contractAddress:Y,feeLimit:L,functionSelector:X,ownerAddress:q,parameter:G});return _z({expiration:W,feeLimit:L,memo:O,transaction:R})}async function F(Y){if(!B(Y))return[D.from({chain:N.Tron})];try{let X=await Pz(Y);if(!X)return[D.from({chain:N.Tron})];let G=[D.from({chain:N.Tron,fromBaseDecimal:6,value:String(X.balance)})],q=X.trc20?.find((O)=>(n in O));if(q){let O=q[n];G.push(D.from({asset:`TRON.USDT-${n}`,fromBaseDecimal:6,value:O}))}return G}catch(X){return Fz({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${X instanceof Error?X.message:X}`}),[D.from({chain:N.Tron})]}}async function u({recipient:Y,assetValue:X,memo:G,expiration:q}){if(!B(Y))throw new H("toolbox_tron_token_transfer_failed",{message:"invalid address"});let O=await j();if(!O)throw new H("toolbox_tron_no_signer");try{let W=await M(),P=await t({assetValue:X,expiration:q,memo:G,recipient:Y,sender:W}),C=await O.signTransaction(P),L=await f(C);if(!L)throw new H("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return L}catch(W){throw new H("toolbox_tron_token_transfer_failed",{message:W instanceof Error?W.message:String(W)})}}function d({requiredBandwidth:Y,resources:X,feePerUnit:G}){let q=Math.max(0,X.free+X.total-X.used);return Y>q?(Y-q)*G:0}async function wz({memo:Y,recipient:X,senderAddress:G}){let[q,O,W]=await Promise.all([w(),x(X),l(G)]),P=O?0:q.createAccountFee,C=d({feePerUnit:q.bandwidthFee,requiredBandwidth:Rz,resources:W.bandwidth}),L=Y?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:P+C+L})}async function xz({assetValue:Y,memo:X,recipient:G,senderAddress:q}){let O=Y.address;if(!O)throw new H("toolbox_tron_invalid_token_identifier",{identifier:Y.toString()});let[W,P,C,L]=await Promise.all([w(),x(G),l(q),c({contractAddress:O,functionSelector:"transfer(address,uint256)",parameter:I([{type:"address",value:G},{type:"uint256",value:Y.getBaseValue("string")}]),sender:q})]),r=L+(P?0:i),Ez=d({feePerUnit:W.bandwidthFee,requiredBandwidth:Sz,resources:C.bandwidth}),e=Math.max(0,C.energy.total-C.energy.used),mz=r>e?(r-e)*W.energyFee:0,uz=X?W.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:Ez+mz+uz})}async function bz({assetValue:Y,memo:X,recipient:G}){let[q,O]=await Promise.all([w(),x(G)]);if(Y.isGasAsset){let L=O?0:q.createAccountFee,R=X?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:L+Rz*q.bandwidthFee+R})}let P=await k(Vz+(O?0:i),q.energyFee),C=X?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:P+Sz*q.bandwidthFee+C})}async function gz({assetValue:Y,memo:X,recipient:G,sender:q}){let O=await j();try{let W=q?q:O?await M():void 0;if(!W)return bz({assetValue:Y,memo:X,recipient:G});return Y.isGasAsset?wz({memo:X,recipient:G,senderAddress:W}):xz({assetValue:Y,memo:X,recipient:G,senderAddress:W})}catch(W){throw Fz({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${W instanceof Error?W.message:W}`}),new H("toolbox_fee_estimation_failed",{chain:N.Tron,error:W})}}async function t({recipient:Y,assetValue:X,memo:G,sender:q,expiration:O}){if(!B(Y)||!B(q))throw new H("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(X.isGasAsset){let C=await Lz({amount:X.getBaseValue("number"),from:q,to:Y});return _z({expiration:O,memo:G,transaction:C})}let W=X.address;if(!W)throw new H("toolbox_tron_invalid_token_identifier",{identifier:X.toString()});let P=await x(Y);return U({contractAddress:W,expiration:O,extraEnergy:P?0:i,functionSelector:"transfer(address,uint256)",memo:G,parameter:I([{type:"address",value:Y},{type:"uint256",value:X.getBaseValue("string")}]),sender:q})}async function a(Y){T(Y);let X=await j();if(!X)throw new H("toolbox_tron_no_signer");return X.signTransaction(Y)}async function Az(Y){let X=await a(Y);return f(X)}function s({assetAddress:Y,spenderAddress:X,from:G}){return Dz({assetAddress:Y,owner:G,spender:X})}async function yz({assetAddress:Y,spenderAddress:X,from:G,amount:q}){let O=await s({assetAddress:Y,from:G,spenderAddress:X});if(!q)return O>0n;return O>=BigInt(q)}async function hz({assetAddress:Y,spenderAddress:X,amount:G,from:q}){if(!B(Y)||!B(X))throw new H("toolbox_tron_approve_failed");let O=await j();if(!O)throw new H("toolbox_tron_no_signer");let W=q||await M(),P=G!==void 0?BigInt(G).toString():CJ;try{let C=await U({contractAddress:Y,functionSelector:"approve(address,uint256)",parameter:I([{type:"address",value:X},{type:"uint256",value:P}]),sender:W}),L=await O.signTransaction(C),R=await f(L);if(!R)throw new H("toolbox_tron_approve_failed");return R}catch(C){if(C instanceof H)throw C;throw new H("toolbox_tron_approve_failed",{error:C})}}return{approve:hz,broadcastTransaction:f,createTransaction:t,estimateTransactionFee:gz,getAddress:M,getApprovedAmount:s,getBalance:F,getRpcUrl:()=>WJ(N.Tron),isApproved:yz,signAndBroadcastTransaction:Az,signTransaction:a,transfer:u,validateAddress:B}}export{kJ as withTronTransactionValue,HJ as withTronTransactionData,UJ as validateTronAddress,LJ as getTronToolbox,KJ as getTronPrivateKeyFromMnemonic};
|
package/dist/src/utxo/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Z0=Object.create;var{getPrototypeOf:G0,defineProperty:CX,getOwnPropertyNames:D2,getOwnPropertyDescriptor:Y0}=Object,C2=Object.prototype.hasOwnProperty;function H2(X){return this[X]}var q0,L0,$1=(X,$,J)=>{var j=X!=null&&typeof X==="object";if(j){var Q=$?q0??=new WeakMap:L0??=new WeakMap,Z=Q.get(X);if(Z)return Z}J=X!=null?Z0(G0(X)):{};let G=$||!X||!X.__esModule?CX(J,"default",{value:X,enumerable:!0}):J;for(let Y of D2(X))if(!C2.call(G,Y))CX(G,Y,{get:H2.bind(X,Y),enumerable:!0});if(j)Q.set(X,G);return G},z0=(X)=>{var $=(M2??=new WeakMap).get(X),J;if($)return $;if($=CX({},"__esModule",{value:!0}),X&&typeof X==="object"||typeof X==="function"){for(var j of D2(X))if(!C2.call($,j))CX($,j,{get:H2.bind(X,j),enumerable:!(J=Y0(X,j))||J.enumerable})}return M2.set(X,$),$},M2;var U0=(X)=>X;function W0(X,$){this[X]=U0.bind(null,$)}var B0=(X,$)=>{for(var J in $)CX(X,J,{get:$[J],enumerable:!0,configurable:!0,set:W0.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 j=[...J?.slice(0,3)??O2.NetworkDerivationPath[$].slice(0,3)];if(X!==void 0)j[2]=X;return j}function YX({accountIndex:X,change:$=!1,chain:J,derivationPath:j,index:Q}){return K("index",Q),[...i({accountIndex:X,chain:J,derivationPath:j}),Number($),Q]}function $X(X){return X[2]??0}function V2({deriveAddress:X,getBalance:$,getUtxos:J}){async function j(Y){let{accountIndex:q,count:L,startIndex:U=0,change:z=!1}=Y;if(K("count",L),L<1)throw RangeError("count must be at least 1");K("startIndex",U);let B=[];for(let _=0;_<L;_++){let N=await X({accountIndex:q,change:z,index:U+_});if(N)B.push(N)}return B}async function Q(Y){let{gapLimit:q=20,change:L=!1}=Y??{},U=[],z=0,B=0;while(z<q){let _=await X({change:L,index:B});if(!_)break;if((await $(_.address)).some((T)=>T.getValue("number")>0))U.push(_),z=0;else z++;B++}return U}async function Z(Y=20){let[q,L]=await Promise.all([Q({change:!1,gapLimit:Y}),Q({change:!0,gapLimit:Y})]),U=[...q,...L],z=await Promise.all(U.map(async(_)=>{let O=(await $(_.address)).reduce((T,GX)=>T+GX.getValue("number"),0);return{..._,balance:O}})),B=z.reduce((_,N)=>_+N.balance,0);return{addresses:z,total:B}}async function G(Y=20){let[q,L]=await Promise.all([Q({change:!1,gapLimit:Y}),Q({change:!0,gapLimit:Y})]),U=[...q,...L];return(await Promise.all(U.map(async(B)=>{return(await J(B.address)).map((N)=>({...N,address:B.address,derivationIndex:B.index,isChange:B.change}))}))).flat()}return{deriveAddresses:j,getAggregatedBalance:Z,getAggregatedUtxos:G,scanForAddresses:Q}}var O2;var HX=y(()=>{O2=require("@swapkit/helpers")});function k2(){function X(){let $=Date.now(),J=sX||$;return sX=J,$>sX?$:J+1}return _0+X().toString(36)}function I2(X){return async function(J,j=!0){let Q=await b2.SwapKitApi.getChainBalance({address:J,chain:X,scamFilter:j}),{baseDecimal:Z}=OX.getChainConfig(X),G=Q.map(({identifier:q,value:L,decimal:U})=>{return new OX.AssetValue({decimal:U||Z,identifier:q,value:L})});if(!G.some((q)=>q.isGasAsset))return[OX.AssetValue.from({chain:X}),...G];return G}}var OX,b2,_0,sX=0;var aX=y(()=>{OX=require("@swapkit/helpers"),b2=require("@swapkit/helpers/api"),_0=typeof process<"u"&&process.pid?process.pid.toString(36):""});async function N0({chain:X,txHash:$}){let J=`${VX(X)}/push/transaction`,j=JSON.stringify({data:$});try{let Q=await D.RequestClient.post(J,{body:j,headers:{"Content-Type":"application/json"}});if(Q.context.code!==200)throw new D.SwapKitError("toolbox_utxo_broadcast_failed",{error:Q.context.error||"Transaction broadcast failed"});return Q.data?.transaction_hash||$}catch(Q){let Z=await D.getRPCUrl(X);if(Z){let G=JSON.stringify({id:k2(),jsonrpc:"2.0",method:"sendrawtransaction",params:[$]}),Y=await D.RequestClient.post(Z,{body:G,headers:{"Content-Type":"application/json"}});if(Y.error)throw new D.SwapKitError("toolbox_utxo_broadcast_failed",{error:Y.error?.message});if(Y.result.includes('"code":-26'))throw new D.SwapKitError("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return Y.result}throw Q}}function VX(X){return`https://api.blockchair.com/${M0(X)}`}function f2(X){switch(X){case D.Chain.Bitcoin:return 5;case D.Chain.Dogecoin:return 1e4;case D.Chain.Litecoin:return 1;case D.Chain.Zcash:return 1;default:return 2}}function M0(X){switch(X){case D.Chain.BitcoinCash:return"bitcoin-cash";case D.Chain.Litecoin:return"litecoin";case D.Chain.Dash:return"dash";case D.Chain.Dogecoin:return"dogecoin";case D.Chain.Zcash:return"zcash";case D.Chain.Polkadot:return"polkadot";default:return"bitcoin"}}async function D0(X){try{let{feePerKb:$}=await D.RequestClient.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=$/1000;return Math.max(J,f2(X))}catch{return f2(X)}}async function KX(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 E2({address:X,chain:$,apiKey:J}){if(!X)throw new D.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await KX(`${VX($)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch{return{address:{balance:0,transaction_count:0},utxo:[]}}}async function C0({address:X,chain:$,apiKey:J}){return(await E2({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 KX(`${VX(X)}/raw/transaction/${J}`,$))?.[J]?.raw_transaction||""}catch(j){let Q=j instanceof Error?j.message:String(j);return console.error(`Failed to fetch raw transaction: ${Q}`),""}}async function O0({chain:X,apiKey:$,txHash:J}){if(!J)throw new D.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});let Q=(await KX(`${VX(X)}/dashboards/transaction/${J}`,$))?.[J];if(!Q)throw new D.SwapKitError("toolbox_utxo_tx_not_found",{txHash:J});let{transaction:Z,inputs:G,outputs:Y}=Q,q=G.map((U)=>U.spending_sequence),L=Z.is_rbf===!0||q.some((U)=>U<H0);return{blockId:Z.block_id,confirmed:Z.block_id!==-1,fee:Z.fee,inputs:G,isRBF:L,outputs:Y,sequences:q,size:Z.size,txid:Z.hash,weight:Z.weight}}async function V0({chain:X,address:$,apiKey:J,offset:j=0,limit:Q=30}){return(await KX(`${VX(X)}/outputs?q=recipient(${$}),is_spent(false)&s=value(desc)&fields=is_spent,transaction_hash,index,value,script_hex,block_id,spending_signature_hex&limit=${Q}&offset=${j}`,J)).map(({is_spent:q,script_hex:L,block_id:U,transaction_hash:z,index:B,value:_,spending_signature_hex:N})=>({hash:z,index:B,is_confirmed:U!==-1,is_spent:q,script_hex:L,txHex:N,value:_}))}function b0(X){return X.reduce(($,J)=>$+J.value,0)}function T2(X,$){let J=[...X].sort((j,Q)=>Q.value-j.value);if($){let j=[],Q=0;for(let Z of J)if(j.push(Z),Q+=Z.value,Q>=$)break;return j}return J}async function P2({chain:X,address:$,apiKey:J,targetValue:j,accumulativeValue:Q=0,offset:Z=0,limit:G=30}){if(!$)throw new D.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{let Y=await V0({address:$,apiKey:J,chain:X,limit:G,offset:Z,targetValue:j}),L=Y.length<G,U=Y.filter(({is_spent:T})=>!T),z=b0(U),B=Q+z,_=j&&B>=j;if(L||_)return T2(U,j);let N=await P2({accumulativeValue:B,address:$,apiKey:J,chain:X,limit:G,offset:Z+G,targetValue:j}),O=[...U,...N];return T2(O,j)}catch(Y){let q=Y instanceof Error?Y.message:String(Y);return console.error(`Failed to fetch unspent UTXOs: ${q}`),[]}}async function k0({address:X,chain:$,apiKey:J,fetchTxHex:j=!0,targetValue:Q}){let Z=await P2({address:X,apiKey:J,chain:$,targetValue:Q}),G=[];for(let{hash:Y,index:q,script_hex:L,value:U}of Z){let z;if(j)z=await F2({apiKey:J,chain:$,txHash:Y});G.push({address:X,hash:Y,index:q,txHex:z,value:U,witnessUtxo:{script:Buffer.from(L,"hex"),value:U}})}return G}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)=>N0({chain:X,txHash:J}),getAddressData:(J)=>E2({address:J,apiKey:$,chain:X}),getBalance:(J)=>C0({address:J,apiKey:$,chain:X}),getRawTx:(J)=>F2({apiKey:$,chain:X,txHash:J}),getSuggestedTxFee:()=>D0(X),getTransactionDetails:(J)=>O0({apiKey:$,chain:X,txHash:J}),getUtxos:(J)=>k0({...J,apiKey:$,chain:X})}}function I0(X){return X}function f0(){return function($){switch($){case D.Chain.Bitcoin:return JX.NETWORKS.bitcoin;case D.Chain.BitcoinCash:return JX.NETWORKS.bitcoinCash;case D.Chain.Dash:return JX.NETWORKS.dash;case D.Chain.Litecoin:return JX.NETWORKS.litecoin;case D.Chain.Dogecoin:return JX.NETWORKS.dogecoin;case D.Chain.Zcash:return JX.NETWORKS.zcash;default:throw new D.SwapKitError("toolbox_utxo_not_supported",{chain:$})}}}var D,JX,H0=4294967294;var R2=y(()=>{aX();D=require("@swapkit/helpers"),JX=require("@swapkit/utxo-signer")});function F0(X,$,J){return u.encodeCashAddr({hash:J,prefix:X,type:T0[$]})}function P0(X){let $=u.decodeCashAddr(X),J=E0[$.type];if(!J)throw Error(`Unknown CashAddr type: ${$.type}`);return{hash:$.hash,prefix:$.prefix,type:J}}var u,T0,E0,tX;var y2=y(()=>{u=require("@swapkit/utxo-signer"),T0={P2PKH:u.CashAddrType.P2PKH,P2SH:u.CashAddrType.P2SH},E0={[u.CashAddrType.P2PKH]:"P2PKH",[u.CashAddrType.P2SH]:"P2SH"};tX={decode:P0,encode:F0}});function $2(X){try{return mX(X),!0}catch{return!1}}function J2(X){return mX(X)?.network}function o(X){let $=mX(X);if($?.format==="legacy")return X;return v0($)}function bX(X){let $=mX(X);return A0($)}function mX(X){try{let $=R0(X);if($)return $}catch{}try{let $=y0(X);if($)return $}catch{}throw new eX.SwapKitError("toolbox_utxo_invalid_address",{address:X})}function R0(X){try{let $=S2.decode(X);if($.length!==21)throw new eX.SwapKitError("toolbox_utxo_invalid_address",{address:X});let J=$[0],j=Array.prototype.slice.call($,1);switch(J){case jX.legacy.mainnet.p2pkh:return{format:"legacy",hash:j,network:"mainnet",type:"p2pkh"};case jX.legacy.mainnet.p2sh:return{format:"legacy",hash:j,network:"mainnet",type:"p2sh"};case jX.legacy.testnet.p2pkh:return{format:"legacy",hash:j,network:"testnet",type:"p2pkh"};case jX.legacy.testnet.p2sh:return{format:"legacy",hash:j,network:"testnet",type:"p2sh"};case jX.bitpay.mainnet.p2pkh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2pkh"};case jX.bitpay.mainnet.p2sh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2sh"};default:return}}catch{return}}function y0(X){if(X.indexOf(":")!==-1)try{return v2(X)}catch{}else{let $=["bitcoincash","bchtest","bchreg"];for(let J of $)try{return v2(`${J}:${X}`)}catch{}}return}function v2(X){try{let{hash:$,prefix:J,type:j}=tX.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call($,0),network:J==="bitcoincash"?"mainnet":"testnet",type:j==="P2PKH"?"p2pkh":"p2sh"}}catch{return}}function v0(X){let $=jX.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=$,J.set(X.hash,1),S2.encode(J)}function A0(X){let $=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",j=new Uint8Array(X.hash);return tX.encode($,J,j)}var A2,w2,eX,S2,X2,jX;var K2=y(()=>{y2();A2=require("@noble/hashes/sha2.js"),w2=require("@scure/base"),eX=require("@swapkit/helpers"),S2=w2.createBase58check(A2.sha256);((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})(X2||={});jX={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}}});function w(X){let $=new Uint8Array(Buffer.from(X,"utf8"));return g2.Script.encode(["RETURN",$])}var m2,g2,w0=1000,lX=10,xX=2,l2=10,S0=41,K0=107,hX,gX,kX,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 m2.SwapKitError("toolbox_utxo_invalid_address",{address:X})},QX=({inputs:X,outputs:$,feeRate:J})=>{let j=X[0]&&"address"in X[0]&&X[0].address?qX(X[0].address):"P2PKH",Z=(J?X.filter((L)=>L.value>=gX["type"in L&&L.type?L.type:"P2PKH"]*Math.ceil(J)):X).reduce((L,U)=>L+s(U),0),G=$?.reduce((L,U)=>L+IX(U),0)||kX[j],Y=lX+Z+G;return j==="P2WPKH"?Math.ceil(Y+xX/4):Y},s=(X)=>{if("type"in X&&X.type)return gX[X.type];if("address"in X&&X.address)return gX[qX(X.address)];return S0+K0},IX=(X,$)=>{if(X?.script)return l2+X.script.length+(X.script.length>=74?2:1);if($)return kX[$];if("address"in X&&X.address)return kX[qX(X.address)];return kX.P2PKH};var j2=y(()=>{m2=require("@swapkit/helpers"),g2=require("@swapkit/utxo-signer");((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(hX||={});gX={["P2PKH"]:148,["P2WPKH"]:68},kX={["P2PKH"]:34,["P2WPKH"]:31}});function fX(X){switch(X){case x.Chain.Bitcoin:case x.Chain.BitcoinCash:return 550;case x.Chain.Dash:case x.Chain.Litecoin:return 5500;case x.Chain.Dogecoin:return 1e5;case x.Chain.Zcash:return 546;default:throw new x.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}function m({inputs:X,outputs:$,feeRate:J=1,chain:j=x.Chain.Bitcoin,changeAddress:Q=""}){let Z=X[0]&&"address"in X[0]&&X[0].address?qX(X[0].address):"P2PKH",G=X.filter((N)=>s(N)*J<=N.value),q=Z==="P2WPKH"?Math.ceil(xX/4):0,L=lX+q+$.reduce((N,O)=>N+IX(O),0),U=$.reduce((N,O)=>N+O.value,0),z=L*J,B=0,_=[];for(let N of G){let O=s(N),T=J*O;z+=T,B+=N.value,_.push(N);let GX=z+U;if(B<GX)continue;let RX=B-GX,yX=J*IX({address:Q,value:0});if(RX>yX){let NX=yX+z,MX=B-(U+Math.ceil(NX));if(MX>Math.max(s({value:0})*J,fX(j)))return{fee:Math.ceil(NX),inputs:_,outputs:$.concat({address:Q,value:MX})}}return{fee:Math.ceil(z),inputs:_,outputs:$}}return{fee:Math.ceil(J*QX({inputs:X,outputs:$}))}}var x;var x2=y(()=>{j2();x=require("@swapkit/helpers")});var LX=y(()=>{R2();K2();x2();j2()});function ZX(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function a(X){let $=ZX(X);return $2($)&&J2($)==="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=pX.Address(pX.ZCASH_NETWORK).decode(X);return J.type==="pkh"||J.type==="sh"}catch{return!1}}var pX;var TX=y(()=>{LX();pX=require("@swapkit/utxo-signer")});function G2({address:X,chain:$}){return Z2.match($).with(W.Chain.BitcoinCash,()=>a(X)).with(W.Chain.Zcash,()=>zX(X)).otherwise(()=>{try{return C.Address(v($)).decode(X),!0}catch{return!1}})}function v(X){return Z2.match(X).with(W.Chain.Bitcoin,()=>C.NETWORKS.bitcoin).with(W.Chain.BitcoinCash,()=>C.NETWORKS.bitcoinCash).with(W.Chain.Dash,()=>C.NETWORKS.dash).with(W.Chain.Dogecoin,()=>C.NETWORKS.dogecoin).with(W.Chain.Litecoin,()=>C.NETWORKS.litecoin).with(W.Chain.Zcash,()=>C.NETWORKS.zcash).exhaustive()}function m0({phrase:X,derivationPath:$,network:J,seed:j}){let Q=j??oX.mnemonicToSeedSync(X),G=Q2.HDKey.fromMasterSeed(Q,J.bip32).derive($);if(!G.privateKey)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not derive private key from phrase"});return G.privateKey}function h2(X){return p2.secp256k1.getPublicKey(X,!0)}function FX({publicKey:X,chain:$,network:J}){if($===W.Chain.BitcoinCash){let Z=C.p2pkh(X,J);if(!Z.hash)throw new W.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return C.encodeCashAddr({hash:Z.hash,prefix:C.CashAddrPrefix.MAINNET,type:C.CashAddrType.P2PKH}).replace(/^bitcoincash:/,"")}let Q=!EX.includes($)?C.p2wpkh(X,J):C.p2pkh(X,J);if(!Q.address)throw new W.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive address"});return Q.address}function UX({phrase:X,derivationPath:$,chain:J,wif:j,seed:Q}){let Z=v(J);if(j){let L=C.WIF(Z).decode(j),U=h2(L);return{privateKey:L,publicKey:U}}if(!X)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let G=$||W.derivationPathToString(W.NetworkDerivationPath[J]),Y=m0({derivationPath:G,network:Z,phrase:X,seed:Q}),q=h2(Y);return{privateKey:Y,publicKey:q}}function g0(X,$){return C.WIF(v($)).encode(X)}function l0({phrase:X,derivationPath:$,chain:J,seed:j}){let Q=$.split("/");if(Q.length<4)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:`Derivation path must have at least 4 levels (got ${Q.length}): ${$}`});let Z=v(J),G=j??oX.mnemonicToSeedSync(X),Y=Q2.HDKey.fromMasterSeed(G,Z.bip32),q=Q.slice(0,4).join("/");return Y.derive(q)}function e({inputs:X,outputs:$,chain:J,tx:j,sender:Q,compiledMemo:Z,enableRBF:G=!1}){let Y=v(J),q=!EX.includes(J),L=G?C.RBF_SEQUENCE:void 0,U=new Set;for(let z of X){let B=`${z.hash}:${z.index}`;if(U.has(B))throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Duplicate input detected"});U.add(B);let _=typeof z.hash==="string"?t.hex.decode(z.hash):z.hash;if(q&&z.witnessUtxo)j.addInput({index:z.index,sequence:L,txid:_,witnessUtxo:{amount:BigInt(z.witnessUtxo.value),script:z.witnessUtxo.script}});else if(z.txHex)j.addInput({index:z.index,nonWitnessUtxo:t.hex.decode(z.txHex),sequence:L,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 z of $){let B="address"in z&&z.address?z.address:Q;if(J===W.Chain.BitcoinCash)B=o(B);if(z.script){if(Z)j.addOutput({amount:0n,script:Z})}else j.addOutputAddress(B,BigInt(z.value),Y)}return{inputs:X,tx:j}}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 u2({assetValue:X,recipient:$,memo:J,sender:j,fetchTxHex:Q=!1}){let Z=X.chain,G=(await WX(Z))[W.FeeOption.Fastest],Y=Q||EX.includes(Z),q=X.getBaseValue("number"),L=Math.ceil(q+G*5000);return{inputs:await P(Z).getUtxos({address:j,fetchTxHex:Y,targetValue:L}),outputs:[{address:$,value:q},...J?[{address:"",script:w(J),value:0}]:[]]}}async function o2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q,fetchTxHex:Z=!1,enableRBF:G=!1}){let Y=X.chain,q=J?w(J):null,L=await u2({assetValue:X,fetchTxHex:Z,memo:J,recipient:$,sender:Q}),{inputs:U,outputs:z}=m({...L,chain:Y,feeRate:j});if(!(U&&z))throw new W.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let B=new C.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!q,version:1}),{inputs:_,tx:N}=e({chain:Y,compiledMemo:q,enableRBF:G,inputs:U,outputs:z,sender:Q,tx:B});return{inputs:_,tx:N,utxos:L.inputs}}async function c2({assetValue:X,feeOptionKey:$=W.FeeOption.Fast,feeRate:J,memo:j,sender:Q,recipient:Z}){let G=X.chain,Y=await u2({assetValue:X,memo:j,recipient:Z,sender:Q}),q=J?Math.floor(J):(await WX(G))[$];return m({...Y,chain:G,feeRate:q})}function x0(X){return async function({from:J,memo:j,feeRate:Q,feeOptionKey:Z=W.FeeOption.Fast,recipients:G=1}){let Y=await P(X).getAddressData(J),q=Q?Math.ceil(Q):(await WX(X))[Z],L=Y?.utxo.map((O)=>({...O,hash:"",type:"P2PKH"})).filter((O)=>O.value>Math.max(fX(X),s(O)*q));if(!L?.length)return W.AssetValue.from({chain:X});let U=BigInt(L.reduce((O,T)=>O+T.value,0)),z=W.AssetValue.from({chain:X,value:U}),B=typeof G==="number"?Array.from({length:G},()=>({address:J,value:0})):G;if(j)B.push({address:J,script:w(j),value:0});let _=QX({inputs:L,outputs:B}),N=W.AssetValue.from({chain:X,value:BigInt(_*q)});return z.sub(N)}}function h0(X){return async function(J){let{fee:j}=await c2(J);return W.AssetValue.from({chain:X,value:W.SwapKitNumber.fromBigInt(BigInt(j),8).getValue("string")})}}function p0({chain:X,phrase:$,derivationPath:J,seed:j}){let Q=v(X),{privateKey:Z,publicKey:G}=UX({chain:X,derivationPath:J,phrase:$,seed:j}),Y=X===W.Chain.BitcoinCash?[C.BCHSigHash.ALL]:[C.SigHash.ALL];return{getAddress:()=>FX({chain:X,network:Q,publicKey:G}),privateKey:Z,publicKey:G,signTransaction:(q)=>{return q.sign(Z,Y),q}}}function u0(X,$){return async function({memo:j,recipient:Q,feeOptionKey:Z,feeRate:G,assetValue:Y,enableRBF:q=!1}){let L=await $?.getAddress();if(!($&&L))throw new W.SwapKitError("toolbox_utxo_no_signer");if(!Q)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});W.warnOnce({condition:q&&!uX.includes(X),id:`rbf_not_supported_${X}`,warning:`RBF (Replace-by-Fee) is not reliably supported on ${X}. Transaction will be created without RBF signaling.`});let U=q&&uX.includes(X),z=G||(await WX(X))[Z||W.FeeOption.Fast],{tx:B}=await o2({assetValue:Y,enableRBF:U,feeRate:z,memo:j,recipient:Q,sender:L}),_=await $.signTransaction(B);return _.finalize(),P(X).broadcastTx(t.hex.encode(_.extract()))}}function Y2(X){return($)=>G2({address:$,chain:X})}function q2(X){let $=v(X);return function(j){if(!j)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Keys must be provided"});return FX({chain:X,network:$,publicKey:j.publicKey})}}function XX({chain:X,...$}){let J="phrase"in $?$.phrase:void 0,j="index"in $?$.index||0:0,Q=J?oX.mnemonicToSeedSync(J):void 0,Z="derivationPath"in $&&$.derivationPath?$.derivationPath:W.updateDerivationPath(W.NetworkDerivationPath[X],{index:j}),G=W.derivationPathToString(Z),Y=J?p0({chain:X,derivationPath:G,phrase:J,seed:Q}):void 0,q="signer"in $?$.signer:void 0,L=Y||q,U=J?UX({chain:X,derivationPath:G,phrase:J,seed:Q}):void 0;function z(){if(L)return L.getAddress();return Promise.resolve(void 0)}function B(M){if(!J)return;let H=i({accountIndex:M,chain:X,derivationPath:Z});return l0({chain:X,derivationPath:W.derivationPathToString(H),phrase:J,seed:Q})}let _=B();function N(){if(!_)return;return _.publicExtendedKey}function O({accountIndex:M}={}){let H=M===void 0?_:B(M);if(!H)return;let b=i({accountIndex:M,chain:X,derivationPath:Z});return{accountIndex:$X(b),path:W.derivationPathToString(b),xpub:H.publicExtendedKey}}function T({accountIndex:M,index:H,change:b=!1}){let k=M===void 0?_:B(M);if(!k)return;let I=YX({accountIndex:M,chain:X,change:b,derivationPath:Z,index:H}),S=v(X),g=k.deriveChild(Number(b)).deriveChild(H);if(!g.publicKey)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not derive public key"});let A=FX({chain:X,network:S,publicKey:g.publicKey}),l=t.hex.encode(g.publicKey);return{accountIndex:$X(I),address:A,change:b,index:H,path:W.derivationPathToString(I),pubkey:l}}async function GX(M){if(!uX.includes(X))return{reason:`RBF is not supported on ${X}`,supported:!1};let H=await P(X).getTransactionDetails(M);return{canReplace:H.isRBF&&!H.confirmed,confirmed:H.confirmed,enabled:H.isRBF,fee:H.fee,sequences:H.sequences,supported:!0}}async function RX({txid:M,newFeeRate:H,recipient:b,memo:k}){if(!uX.includes(X))throw new W.SwapKitError("toolbox_utxo_rbf_not_supported",{chain:X});let I=await P(X).getTransactionDetails(M);if(!I.isRBF)throw new W.SwapKitError("toolbox_utxo_tx_not_replaceable",{txid:M});if(I.confirmed)throw new W.SwapKitError("toolbox_utxo_tx_already_confirmed",{blockId:I.blockId,txid:M});let S=I.inputs.reduce((R,n)=>R+n.value,0),A=I.outputs.find((R)=>R.recipient===b)?.value||0;if(A===0)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not determine send amount from original transaction"});let l=await Promise.all(I.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}})),vX=k?w(k):null,nX=QX({feeRate:H,inputs:l.map((R)=>({...R,type:"P2WPKH"})),outputs:[{address:b,value:A}]}),p=Math.ceil(nX*H);if(p<=I.fee)throw new W.SwapKitError("toolbox_utxo_rbf_fee_too_low",{newFee:p,originalFee:I.fee});let DX=p-I.fee,d=A-DX;if(d<=0)throw new W.SwapKitError("toolbox_utxo_rbf_insufficient_change");let AX=new C.Transaction({allowLegacyWitnessUtxo:!0,version:1}),wX=[{address:b,value:d},...k?[{address:"",script:w(k),value:0}]:[]],SX=S-d-p,r=await z();if(SX>fX(X)&&r)wX.push({address:r,value:SX});return e({chain:X,compiledMemo:vX,inputs:l,outputs:wX,sender:r||b,tx:AX}),{feeDelta:DX,newFee:p,originalFee:I.fee,tx:AX}}async function yX({txid:M,newFeeRate:H,recipient:b,memo:k}){let{tx:I,originalFee:S,newFee:g}=await RX({memo:k,newFeeRate:H,recipient:b,txid:M}),A=await rX(I);A.finalize();let l=await P(X).broadcastTx(t.hex.encode(A.extract()));return{newFee:g,originalFee:S,txid:l}}function NX({accountIndex:M,index:H,change:b=!1}){K("index",H);let k=M===void 0?_:B(M);if(!k)return;return k.deriveChild(Number(b)).deriveChild(H).privateKey||void 0}function MX({tx:M,inputDerivations:H}){if(!_)throw new W.SwapKitError("toolbox_utxo_no_signer");let b=X===W.Chain.BitcoinCash?[C.BCHSigHash.ALL]:[C.SigHash.ALL];for(let k=0;k<H.length;k++){let I=H[k];if(!I)continue;let{derivationIndex:S,isChange:g}=I,A=NX({change:g,index:S});if(!A)throw new W.SwapKitError("toolbox_utxo_invalid_params",{error:`Could not derive private key for input ${k} at index ${S}`});M.signIdx(A,k,b)}return M}async function $0({utxos:M,recipient:H,assetValue:b,memo:k,feeRate:I,feeOptionKey:S,changeAddress:g}){if(!_)throw new W.SwapKitError("toolbox_utxo_no_signer");let A=I||(await WX(X))[S||W.FeeOption.Fast],l=k?w(k):null,vX=[{address:H,value:b.getBaseValue("number")}];if(l)vX.push({address:"",script:l,value:0});let nX=M.map(({hash:r,index:R,value:n,txHex:Q0,witnessUtxo:iX})=>({hash:r,index:R,txHex:Q0,value:n,witnessUtxo:iX?{script:iX.script,value:iX.value}:void 0})),{inputs:p,outputs:DX}=m({chain:X,feeRate:A,inputs:nX,outputs:vX});if(!(p&&DX))throw new W.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:b,sender:"multiple addresses"});let d=new C.Transaction({allowLegacyWitnessUtxo:!0,version:1}),AX=M[0]?.address,wX=g||await z()||AX||H;e({chain:X,compiledMemo:l,inputs:p,outputs:DX,sender:wX,tx:d});let SX=p.map((r)=>{let R=M.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:SX,tx:d}),d.finalize(),P(X).broadcastTx(t.hex.encode(d.extract()))}function J0({address:M,gapLimit:H=20}){if(!_)return;for(let b=0;b<H;b++){let k=T({change:!1,index:b}),I=T({change:!0,index:b}),S=k?.address===M?!1:I?.address===M;if(k?.address===M||I?.address===M)return{change:S,index:b}}return}function rX(M){if(!L)throw new W.SwapKitError("toolbox_utxo_no_signer");return L.signTransaction(M)}async function j0(M){let H=await rX(M);return H.finalize(),await P(X).broadcastTx(t.hex.encode(H.extract()))}return{accumulative:m,broadcastTx:(M)=>P(X).broadcastTx(M),bumpFee:yX,calculateTxSize:QX,createKeysForPath:(M)=>UX({...M,chain:X}),createReplacementTransaction:RX,createTransaction:o2,deriveAddressAtIndex:T,derivePrivateKeyAtIndex:NX,estimateMaxSendableAmount:x0(X),estimateTransactionFee:h0(X),getAddress:z,getAddressFromKeys:q2(X),getBalance:I2(X),getExtendedPublicKey:N,getExtendedPublicKeyInfo:O,getFeeRates:()=>WX(X),getInputsOutputsFee:c2,getNetworkForChain:()=>v(X),getPrivateKeyFromMnemonic:(M)=>g0(UX({...M,chain:X}).privateKey,X),isRBFEnabled:GX,keys:U,resolveDerivationIndex:J0,signAndBroadcastTransaction:j0,signTransaction:rX,signTransactionWithMultipleKeys:MX,transfer:u0(X,L),transferFromMultipleAddresses:$0,validateAddress:Y2(X)}}var p2,t,Q2,oX,W,C,Z2,EX,uX;var BX=y(()=>{aX();HX();LX();TX();p2=require("@noble/curves/secp256k1.js"),t=require("@scure/base"),Q2=require("@scure/bip32"),oX=require("@scure/bip39"),W=require("@swapkit/helpers"),C=require("@swapkit/utxo-signer"),Z2=require("ts-pattern"),EX=[W.Chain.Dash,W.Chain.Dogecoin,W.Chain.Zcash,W.Chain.BitcoinCash],uX=[W.Chain.Bitcoin]});function PX(X){return ZX(bX(X))}function o0(X){let $=v(h);function J(Q){return Q.sign(X.privateKey,[F.BCHSigHash.ALL]),Q}function j(){let Q=F.p2pkh(X.publicKey,$);if(!Q.hash)throw new E.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});let Z=F.encodeCashAddr({hash:Q.hash,prefix:F.CashAddrPrefix.MAINNET,type:F.CashAddrType.P2PKH});return Promise.resolve(Z.replace(/^bitcoincash:/,""))}return{getAddress:j,signTransaction:J}}function z2(X){let $="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,j=E.derivationPathToString("derivationPath"in X&&X.derivationPath?X.derivationPath:E.updateDerivationPath(E.NetworkDerivationPath[h],{index:J})),Q=$?UX({chain:h,derivationPath:j,phrase:$}):void 0,Z=Q?o0(Q):("signer"in X)?X.signer:void 0;function G(){return Promise.resolve(Z?.getAddress())}let{getBalance:Y,getFeeRates:q,broadcastTx:L,...U}=XX({chain:h});function z(N,O=!0){return Y(ZX(bX(N)))}function B(N){if(!Z)throw new E.SwapKitError("toolbox_utxo_no_signer");return Z.signTransaction(N)}async function _(N){let O=await B(N);return O.finalize(),await L(L2.hex.encode(O.extract()))}return{...U,broadcastTx:L,buildTx:d0,createTransaction:d2,getAddress:G,getAddressFromKeys:r0,getBalance:z,getFeeRates:q,signAndBroadcastTransaction:_,signTransaction:B,stripPrefix:ZX,stripToCashAddress:PX,transfer:c0({broadcastTx:L,getFeeRates:q,signer:Z}),validateAddress:a}}async function d2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q}){if(!a($))throw new E.SwapKitError("toolbox_utxo_invalid_address",{address:$});let Z=Math.ceil(X.getBaseValue("number")+j*7500),G=await P(h).getUtxos({address:PX(Q),fetchTxHex:!0,targetValue:Z}),Y=J?w(J):null,q=[],L=o($);if(q.push({address:L,value:X.getBaseValue("number")}),Y)q.push({script:Y,value:0});let{inputs:U,outputs:z}=m({chain:h,feeRate:j,inputs:G,outputs:q});if(!(U&&z))throw new E.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let B=new F.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!Y,version:1}),_=o(Q),{inputs:N,tx:O}=e({chain:h,compiledMemo:Y,inputs:U,outputs:z.map((T)=>("address"in T)&&T.address?{...T,address:o(T.address)}:T),sender:_,tx:B});return{inputs:N,tx:O,utxos:U}}function c0({broadcastTx:X,getFeeRates:$,signer:J}){return async function({recipient:Q,assetValue:Z,feeOptionKey:G=E.FeeOption.Fast,...Y}){let q=await J?.getAddress();if(!(J&&q))throw new E.SwapKitError("toolbox_utxo_no_signer");if(!Q)throw new E.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let L=Y.feeRate||(await $())[G],{tx:U}=await d2({...Y,assetValue:Z,feeRate:L,recipient:Q,sender:q}),z=await J.signTransaction(U);return z.finalize(),X(L2.hex.encode(z.extract()))}}async function d0({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q}){let Z=bX($);if(!a(Z))throw new E.SwapKitError("toolbox_utxo_invalid_address",{address:Z});let G=Math.ceil(X.getBaseValue("number")+j*7500),Y=await P(h).getUtxos({address:PX(Q),fetchTxHex:!0,targetValue:G}),q=Number(j.toFixed(0)),L=J?w(J):null,U=[];if(U.push({address:o($),value:X.getBaseValue("number")}),L)U.push({script:L,value:0});let{inputs:z,outputs:B}=m({chain:h,feeRate:q,inputs:Y,outputs:U});if(!(z&&B))throw new E.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new F.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!L,version:1}),{inputs:N,tx:O}=e({chain:h,compiledMemo:L,inputs:z,outputs:B,sender:o(Q),tx:_});return{inputs:N,tx:O,utxos:Y}}function r0(X){let $=F.NETWORKS.bitcoinCash,J=F.p2pkh(X.publicKey,$);if(!J.hash)throw new E.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return F.encodeCashAddr({hash:J.hash,prefix:F.CashAddrPrefix.MAINNET,type:F.CashAddrType.P2PKH}).replace(/^bitcoincash:/,"")}var L2,E,F,h;var cX=y(()=>{LX();BX();TX();L2=require("@scure/base"),E=require("@swapkit/helpers"),F=require("@swapkit/utxo-signer"),h=E.Chain.BitcoinCash});function n2(){let{isStagenet:X}=f.SKConfig.get("envs");return X?V.ZCASH_TEST_NETWORK:V.ZCASH_NETWORK}function i0(X){return n0.encode(X)}function s0({phrase:X,derivationPath:$}){let J=W2.mnemonicToSeedSync(X),Q=U2.HDKey.fromMasterSeed(J).derive($);if(!Q.privateKey||!Q.publicKey)throw new f.SwapKitError("toolbox_utxo_invalid_params");let{privateKey:Z,publicKey:G}=Q,Y=V.utils.hash160(G),{isStagenet:q}=f.SKConfig.get("envs"),L=q?new Uint8Array([29,37]):new Uint8Array([28,184]),U=new Uint8Array(L.length+Y.length);U.set(L,0),U.set(Y,L.length);let z=i0(U);return{getAddress:()=>Promise.resolve(z),signTransaction:(B)=>{if(B instanceof V.ZcashPSBT){let _=B.toPCZT();return _.signAllInputs(Z,G,V.ZcashSigHash.ALL),_.finalizeAllInputs(),Promise.resolve(_.extract())}if(B instanceof V.PCZT)return B.signAllInputs(Z,G,V.ZcashSigHash.ALL),B.finalizeAllInputs(),Promise.resolve(B.extract());return B.signAllInputs(Z,G,V.ZcashSigHash.ALL),Promise.resolve(B)}}}function a0({inputs:X,outputs:$,tx:J,sender:j,compiledMemo:Q}){let Z=n2();for(let G of X){let Y=V.Address(Z).decode(j),q=V.OutScript.encode(Y);J.addInput({index:G.index,script:q,sequence:4294967295,txid:dX.hex.decode(G.hash),value:BigInt(G.value)})}for(let G of $){let Y="address"in G&&G.address?G.address:j,q=G.script;if(q&&!Q)continue;if(q&&Q)J.addOutput({amount:0n,script:Q});else J.addOutputAddress(Y,BigInt(G.value),Z)}return{inputs:X,tx:J}}async function r2(X){let{assetValue:$,recipient:J,memo:j,feeRate:Q,sender:Z,fetchTxHex:G}=X,Y=j?w(j):null,q=await P(f.Chain.Zcash).getUtxos({address:Z,fetchTxHex:G!==!1}),L=[{address:J,value:Number($.getBaseValue("string"))},...Y?[{script:Y,value:0}]:[]],{inputs:U,outputs:z}=m({chain:f.Chain.Zcash,changeAddress:Z,feeRate:Q,inputs:q,outputs:L});if(!(U&&z))throw new f.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:$,sender:Z});let B=V.createZcashTransaction({consensusBranchId:V.ZcashConsensusBranchId.NU6_2,expiryHeight:0,lockTime:0,version:4,versionGroupId:V.ZcashVersionGroupId.SAPLING}),{tx:_,inputs:N}=a0({compiledMemo:Y,inputs:U,outputs:z,sender:Z,tx:B});return{inputs:N,outputs:z,tx:_}}function B2(X){let $=_X.match(X).with({signer:_X.P.not(_X.P.nullish)},({signer:q})=>q).with({phrase:_X.P.string},({phrase:q,derivationPath:L,index:U=0})=>{let z=L||f.NetworkDerivationPath[f.Chain.Zcash]||[44,133,0,0,0],B=f.updateDerivationPath(z,{index:U}),_=f.derivationPathToString(B);return s0({derivationPath:_,phrase:q})}).otherwise(()=>{return}),J=XX({chain:f.Chain.Zcash,signer:$});async function j(q){if(!$)throw new f.SwapKitError("toolbox_utxo_no_signer");return await $.signTransaction(q)}async function Q(q){let L=await j(q);return J.broadcastTx(L.toHex())}async function Z({recipient:q,assetValue:L,feeOptionKey:U=f.FeeOption.Fast,...z}){let B=await $?.getAddress();if(!($&&B))throw new f.SwapKitError("toolbox_utxo_no_signer");let _=z.feeRate||(await J.getFeeRates())[U],{tx:N}=await r2({...z,assetValue:L,feeRate:_,recipient:q,sender:B}),T=(await $.signTransaction(N)).toHex();return J.broadcastTx(T)}function G({phrase:q,derivationPath:L="m/44'/133'/0'/0/0"}){let U=W2.mnemonicToSeedSync(q),B=U2.HDKey.fromMasterSeed(U).derive(L);if(!B.privateKey||!B.publicKey)throw new f.SwapKitError("toolbox_utxo_invalid_params");return{privateKey:B.privateKey,publicKey:B.publicKey}}function Y({phrase:q,derivationPath:L="m/44'/133'/0'/0/0"}){let U=G({derivationPath:L,phrase:q}),z=n2();return V.WIF(z).encode(U.privateKey)}return{...J,createKeysForPath:G,createTransaction:r2,getPrivateKeyFromMnemonic:Y,signAndBroadcastTransaction:Q,signTransaction:j,transfer:Z,validateAddress:zX}}var dX,U2,W2,f,V,_X,n0;var _2=y(()=>{LX();BX();TX();dX=require("@scure/base"),U2=require("@scure/bip32"),W2=require("@scure/bip39"),f=require("@swapkit/helpers"),V=require("@swapkit/utxo-signer"),_X=require("ts-pattern");n0=dX.createBase58check(V.utils.sha256)});function t2({xpub:X,chain:$,count:J,startIndex:j=0,accountIndex:Q}){if(K("count",J),J<1)throw RangeError("count must be at least 1");K("startIndex",j);let Z=v($),G=s2.HDKey.fromExtendedKey(X,Z.bip32),Y=i({accountIndex:Q,chain:$}),q=$X(Y),L=[];for(let U of[!1,!0]){let z=G.deriveChild(Number(U));for(let B=0;B<J;B++){let _=j+B,N=z.deriveChild(_);if(!N.publicKey)continue;let O=YX({accountIndex:Q,chain:$,change:U,index:_});L.push({accountIndex:q,address:FX({chain:$,network:Z,publicKey:N.publicKey}),change:U,index:_,path:a2.derivationPathToString(O),pubkey:i2.hex.encode(N.publicKey)})}}return L}var i2,s2,a2;var e2=y(()=>{HX();BX();i2=require("@scure/base"),s2=require("@scure/bip32"),a2=require("@swapkit/helpers")});function t0(X,$){switch(X){case c.Chain.BitcoinCash:return z2($||{});case c.Chain.Zcash:return B2($);case c.Chain.Bitcoin:case c.Chain.Dogecoin:case c.Chain.Litecoin:case c.Chain.Dash:return XX({chain:X,...$});default:throw new c.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}var c;var X0=y(()=>{cX();BX();_2();HX();e2();cX();TX();c=require("@swapkit/helpers")});var e0={};B0(e0,{validateZcashAddress:()=>zX,validateUtxoAddress:()=>G2,validateBchAddress:()=>a,toLegacyAddress:()=>o,toCashAddress:()=>bX,stripToCashAddress:()=>PX,stripPrefix:()=>ZX,nonSegwitChains:()=>EX,isValidAddress:()=>$2,getUtxoToolbox:()=>t0,getUtxoNetwork:()=>f0,getUtxoApi:()=>P,getUTXOAddressValidator:()=>Y2,getUTXOAddressPath:()=>YX,getUTXOAccountPath:()=>i,getUTXOAccountIndexFromPath:()=>$X,getScriptTypeForAddress:()=>qX,getOutputSize:()=>IX,getNetworkForChain:()=>v,getInputSize:()=>s,getDustThreshold:()=>fX,detectAddressNetwork:()=>J2,deriveAddressesFromXpub:()=>t2,createZcashToolbox:()=>B2,createUTXOToolbox:()=>XX,createHDWalletHelpers:()=>V2,createCustomUtxoApi:()=>I0,createBCHToolbox:()=>z2,compileMemo:()=>w,calculateTxSize:()=>QX,assertDerivationIndex:()=>K,addressFromKeysGetter:()=>q2,addInputsAndOutputs:()=>e,accumulative:()=>m,UtxoNetwork:()=>X2,UTXOScriptType:()=>hX,TX_OVERHEAD:()=>lX,SEGWIT_MARKER_FLAG_WEIGHT:()=>xX,OutputSizes:()=>kX,OP_RETURN_OVERHEAD:()=>l2,MIN_TX_FEE:()=>w0,InputSizes:()=>gX});module.exports=z0(e0);var X1=y(()=>{BX();HX();LX();X0();cX();_2()});X1();
|
|
1
|
+
var Q0=Object.create;var{getPrototypeOf:Z0,defineProperty:DX,getOwnPropertyNames:C2,getOwnPropertyDescriptor:G0}=Object,D2=Object.prototype.hasOwnProperty;function H2(X){return this[X]}var Y0,q0,X1=(X,$,J)=>{var j=X!=null&&typeof X==="object";if(j){var Q=$?Y0??=new WeakMap:q0??=new WeakMap,Z=Q.get(X);if(Z)return Z}J=X!=null?Q0(Z0(X)):{};let Y=$||!X||!X.__esModule?DX(J,"default",{value:X,enumerable:!0}):J;for(let L of C2(X))if(!D2.call(Y,L))DX(Y,L,{get:H2.bind(X,L),enumerable:!0});if(j)Q.set(X,Y);return Y},L0=(X)=>{var $=(M2??=new WeakMap).get(X),J;if($)return $;if($=DX({},"__esModule",{value:!0}),X&&typeof X==="object"||typeof X==="function"){for(var j of C2(X))if(!D2.call($,j))DX($,j,{get:H2.bind(X,j),enumerable:!(J=G0(X,j))||J.enumerable})}return M2.set(X,$),$},M2;var z0=(X)=>X;function U0(X,$){this[X]=z0.bind(null,$)}var W0=(X,$)=>{for(var J in $)DX(X,J,{get:$[J],enumerable:!0,configurable:!0,set:U0.bind($,J)})};var R=(X,$)=>()=>(X&&($=X(X=0)),$);function K(X,$){if(!Number.isInteger($)||$<0)throw RangeError(`${X} must be a non-negative integer, got: ${$}`)}function i({accountIndex:X,chain:$,derivationPath:J}){if(X!==void 0)K("accountIndex",X);let j=[...J?.slice(0,3)??O2.NetworkDerivationPath[$].slice(0,3)];if(X!==void 0)j[2]=X;return j}function qX({accountIndex:X,change:$=!1,chain:J,derivationPath:j,index:Q}){return K("index",Q),[...i({accountIndex:X,chain:J,derivationPath:j}),Number($),Q]}function $X(X){return X[2]??0}function V2({deriveAddress:X,getBalance:$,getUtxos:J}){async function j(L){let{accountIndex:G,count:q,startIndex:W=0,change:z=!1}=L;if(K("count",q),q<1)throw RangeError("count must be at least 1");K("startIndex",W);let B=[];for(let _=0;_<q;_++){let N=await X({accountIndex:G,change:z,index:W+_});if(N)B.push(N)}return B}async function Q(L){let{gapLimit:G=20,change:q=!1}=L??{},W=[],z=0,B=0;while(z<G){let _=await X({change:q,index:B});if(!_)break;if((await $(_.address)).some((T)=>T.getValue("number")>0))W.push(_),z=0;else z++;B++}return W}async function Z(L=20){let[G,q]=await Promise.all([Q({change:!1,gapLimit:L}),Q({change:!0,gapLimit:L})]),W=[...G,...q],z=await Promise.all(W.map(async(_)=>{let O=(await $(_.address)).reduce((T,YX)=>T+YX.getValue("number"),0);return{..._,balance:O}})),B=z.reduce((_,N)=>_+N.balance,0);return{addresses:z,total:B}}async function Y(L=20){let[G,q]=await Promise.all([Q({change:!1,gapLimit:L}),Q({change:!0,gapLimit:L})]),W=[...G,...q];return(await Promise.all(W.map(async(B)=>{return(await J(B.address)).map((N)=>({...N,address:B.address,derivationIndex:B.index,isChange:B.change}))}))).flat()}return{deriveAddresses:j,getAggregatedBalance:Z,getAggregatedUtxos:Y,scanForAddresses:Q}}var O2;var HX=R(()=>{O2=require("@swapkit/helpers")});function k2(){function X(){let $=Date.now(),J=iX||$;return iX=J,$>iX?$:J+1}return B0+X().toString(36)}function f2(X){return async function(J,j=!0){let Q=await b2.SwapKitApi.getChainBalance({address:J,chain:X,scamFilter:j}),{baseDecimal:Z}=OX.getChainConfig(X),Y=Q.map(({identifier:G,value:q,decimal:W})=>{return new OX.AssetValue({decimal:W||Z,identifier:G,value:q})});if(!Y.some((G)=>G.isGasAsset))return[OX.AssetValue.from({chain:X}),...Y];return Y}}var OX,b2,B0,iX=0;var sX=R(()=>{OX=require("@swapkit/helpers"),b2=require("@swapkit/helpers/api"),B0=typeof process<"u"&&process.pid?process.pid.toString(36):""});async function _0({chain:X,txHash:$}){let J=`${VX(X)}/push/transaction`,j=JSON.stringify({data:$});try{let Q=await C.RequestClient.post(J,{body:j,headers:{"Content-Type":"application/json"}});if(Q.context.code!==200)throw new C.SwapKitError("toolbox_utxo_broadcast_failed",{error:Q.context.error||"Transaction broadcast failed"});return Q.data?.transaction_hash||$}catch(Q){let Z=await C.getRPCUrl(X);if(Z){let Y=JSON.stringify({id:k2(),jsonrpc:"2.0",method:"sendrawtransaction",params:[$]}),L=await C.RequestClient.post(Z,{body:Y,headers:{"Content-Type":"application/json"}});if(L.error)throw new C.SwapKitError("toolbox_utxo_broadcast_failed",{error:L.error?.message});if(L.result.includes('"code":-26'))throw new C.SwapKitError("toolbox_utxo_invalid_transaction",{error:"Transaction amount was too low"});return L.result}throw Q}}function VX(X){return`https://api.blockchair.com/${N0(X)}`}function I2(X){switch(X){case C.Chain.Bitcoin:return 5;case C.Chain.Dogecoin:return 1e4;case C.Chain.Litecoin:return 1;case C.Chain.Zcash:return 1;default:return 2}}function N0(X){switch(X){case C.Chain.BitcoinCash:return"bitcoin-cash";case C.Chain.Litecoin:return"litecoin";case C.Chain.Dash:return"dash";case C.Chain.Dogecoin:return"dogecoin";case C.Chain.Zcash:return"zcash";case C.Chain.Polkadot:return"polkadot";default:return"bitcoin"}}async function M0(X){try{let{feePerKb:$}=await C.RequestClient.get(`https://app.bitgo.com/api/v2/${X.toLowerCase()}/tx/fee`),J=$/1000;return Math.max(J,I2(X))}catch{return I2(X)}}async function KX(X,$){let J=await C.RequestClient.get(`${X}${$?`${X.includes("?")?"&":"?"}key=${$}`:""}`);if(!J||J.context.code!==200)throw new C.SwapKitError("toolbox_utxo_api_error",{error:`Failed to query ${X}`});return J.data}async function F2({address:X,chain:$,apiKey:J}){if(!X)throw new C.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{return(await KX(`${VX($)}/dashboards/address/${X}?transaction_details=true`,J))[X]}catch{return{address:{balance:0,transaction_count:0},utxo:[]}}}async function C0({address:X,chain:$,apiKey:J}){return(await F2({address:X,apiKey:J,chain:$}))?.address.balance||0}async function P2({chain:X,apiKey:$,txHash:J}){if(!J)throw new C.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});try{return(await KX(`${VX(X)}/raw/transaction/${J}`,$))?.[J]?.raw_transaction||""}catch(j){let Q=j instanceof Error?j.message:String(j);return console.error(`Failed to fetch raw transaction: ${Q}`),""}}async function H0({chain:X,apiKey:$,txHash:J}){if(!J)throw new C.SwapKitError("toolbox_utxo_invalid_params",{error:"TxHash is required"});let Q=(await KX(`${VX(X)}/dashboards/transaction/${J}`,$))?.[J];if(!Q)throw new C.SwapKitError("toolbox_utxo_tx_not_found",{txHash:J});let{transaction:Z,inputs:Y,outputs:L}=Q,G=Y.map((W)=>W.spending_sequence),q=Z.is_rbf===!0||G.some((W)=>W<D0);return{blockId:Z.block_id,confirmed:Z.block_id!==-1,fee:Z.fee,inputs:Y,isRBF:q,outputs:L,sequences:G,size:Z.size,txid:Z.hash,weight:Z.weight}}async function O0({chain:X,address:$,apiKey:J,offset:j=0,limit:Q=30}){return(await KX(`${VX(X)}/outputs?q=recipient(${$}),is_spent(false)&s=value(desc)&fields=is_spent,transaction_hash,index,value,script_hex,block_id,spending_signature_hex&limit=${Q}&offset=${j}`,J)).map(({is_spent:G,script_hex:q,block_id:W,transaction_hash:z,index:B,value:_,spending_signature_hex:N})=>({hash:z,index:B,is_confirmed:W!==-1,is_spent:G,script_hex:q,txHex:N,value:_}))}function V0(X){return X.reduce(($,J)=>$+J.value,0)}function T2(X,$){let J=[...X].sort((j,Q)=>Q.value-j.value);if($){let j=[],Q=0;for(let Z of J)if(j.push(Z),Q+=Z.value,Q>=$)break;return j}return J}async function E2({chain:X,address:$,apiKey:J,targetValue:j,accumulativeValue:Q=0,offset:Z=0,limit:Y=30}){if(!$)throw new C.SwapKitError("toolbox_utxo_invalid_params",{error:"Address is required"});try{let L=await O0({address:$,apiKey:J,chain:X,limit:Y,offset:Z,targetValue:j}),q=L.length<Y,W=L.filter(({is_spent:T})=>!T),z=V0(W),B=Q+z,_=j&&B>=j;if(q||_)return T2(W,j);let N=await E2({accumulativeValue:B,address:$,apiKey:J,chain:X,limit:Y,offset:Z+Y,targetValue:j}),O=[...W,...N];return T2(O,j)}catch(L){let G=L instanceof Error?L.message:String(L);return console.error(`Failed to fetch unspent UTXOs: ${G}`),[]}}async function b0({address:X,chain:$,apiKey:J,fetchTxHex:j=!0,targetValue:Q}){let Z=await E2({address:X,apiKey:J,chain:$,targetValue:Q}),Y=[];for(let{hash:L,index:G,script_hex:q,value:W}of Z){let z;if(j)z=await P2({apiKey:J,chain:$,txHash:L});Y.push({address:X,hash:L,index:G,txHex:z,value:W,witnessUtxo:{script:Buffer.from(q,"hex"),value:W}})}return Y}function E(X){let $=C.SKConfig.get("apiKeys").blockchair||"";return C.warnOnce({condition:!$,id:"no_blockchair_api_key_warning",warning:"No Blockchair API key found. Functionality will be limited."}),{broadcastTx:(J)=>_0({chain:X,txHash:J}),getAddressData:(J)=>F2({address:J,apiKey:$,chain:X}),getBalance:(J)=>C0({address:J,apiKey:$,chain:X}),getRawTx:(J)=>P2({apiKey:$,chain:X,txHash:J}),getSuggestedTxFee:()=>M0(X),getTransactionDetails:(J)=>H0({apiKey:$,chain:X,txHash:J}),getUtxos:(J)=>b0({...J,apiKey:$,chain:X})}}function k0(X){return X}function f0(){return function($){switch($){case C.Chain.Bitcoin:return JX.NETWORKS.bitcoin;case C.Chain.BitcoinCash:return JX.NETWORKS.bitcoinCash;case C.Chain.Dash:return JX.NETWORKS.dash;case C.Chain.Litecoin:return JX.NETWORKS.litecoin;case C.Chain.Dogecoin:return JX.NETWORKS.dogecoin;case C.Chain.Zcash:return JX.NETWORKS.zcash;default:throw new C.SwapKitError("toolbox_utxo_not_supported",{chain:$})}}}var C,JX,D0=4294967294;var A2=R(()=>{sX();C=require("@swapkit/helpers"),JX=require("@swapkit/utxo-signer")});function F0(X,$,J){return o.encodeCashAddr({hash:J,prefix:X,type:I0[$]})}function P0(X){let $=o.decodeCashAddr(X),J=T0[$.type];if(!J)throw Error(`Unknown CashAddr type: ${$.type}`);return{hash:$.hash,prefix:$.prefix,type:J}}var o,I0,T0,tX;var R2=R(()=>{o=require("@swapkit/utxo-signer"),I0={P2PKH:o.CashAddrType.P2PKH,P2SH:o.CashAddrType.P2SH},T0={[o.CashAddrType.P2PKH]:"P2PKH",[o.CashAddrType.P2SH]:"P2SH"};tX={decode:P0,encode:F0}});function X2(X){try{return mX(X),!0}catch{return!1}}function $2(X){return mX(X)?.network}function u(X){let $=mX(X);if($?.format==="legacy")return X;return R0($)}function bX(X){let $=mX(X);return y0($)}function mX(X){try{let $=E0(X);if($)return $}catch{}try{let $=A0(X);if($)return $}catch{}throw new aX.SwapKitError("toolbox_utxo_invalid_address",{address:X})}function E0(X){try{let $=S2.decode(X);if($.length!==21)throw new aX.SwapKitError("toolbox_utxo_invalid_address",{address:X});let J=$[0],j=Array.prototype.slice.call($,1);switch(J){case jX.legacy.mainnet.p2pkh:return{format:"legacy",hash:j,network:"mainnet",type:"p2pkh"};case jX.legacy.mainnet.p2sh:return{format:"legacy",hash:j,network:"mainnet",type:"p2sh"};case jX.legacy.testnet.p2pkh:return{format:"legacy",hash:j,network:"testnet",type:"p2pkh"};case jX.legacy.testnet.p2sh:return{format:"legacy",hash:j,network:"testnet",type:"p2sh"};case jX.bitpay.mainnet.p2pkh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2pkh"};case jX.bitpay.mainnet.p2sh:return{format:"bitpay",hash:j,network:"mainnet",type:"p2sh"};default:return}}catch{return}}function A0(X){if(X.indexOf(":")!==-1)try{return y2(X)}catch{}else{let $=["bitcoincash","bchtest","bchreg"];for(let J of $)try{return y2(`${J}:${X}`)}catch{}}return}function y2(X){try{let{hash:$,prefix:J,type:j}=tX.decode(X);return{format:"cashaddr",hash:Array.prototype.slice.call($,0),network:J==="bitcoincash"?"mainnet":"testnet",type:j==="P2PKH"?"p2pkh":"p2sh"}}catch{return}}function R0(X){let $=jX.legacy[X.network][X.type],J=Buffer.alloc(1+X.hash.length);return J[0]=$,J.set(X.hash,1),S2.encode(J)}function y0(X){let $=X.network==="mainnet"?"bitcoincash":"bchtest",J=X.type==="p2pkh"?"P2PKH":"P2SH",j=new Uint8Array(X.hash);return tX.encode($,J,j)}var v2,w2,aX,S2,eX,jX;var K2=R(()=>{R2();v2=require("@noble/hashes/sha2.js"),w2=require("@scure/base"),aX=require("@swapkit/helpers"),S2=w2.createBase58check(v2.sha256);((J)=>{J.Mainnet="mainnet";J.Testnet="testnet"})(eX||={});jX={["legacy"]:{["mainnet"]:{["p2pkh"]:0,["p2sh"]:5},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}},["bitpay"]:{["mainnet"]:{["p2pkh"]:28,["p2sh"]:40},["testnet"]:{["p2pkh"]:111,["p2sh"]:196}}}});function w(X){let $=new Uint8Array(Buffer.from(X,"utf8"));return g2.Script.encode(["RETURN",$])}var m2,g2,v0=1000,lX=10,xX=2,l2=10,w0=41,S0=107,hX,gX,kX,LX=(X)=>{if(X.startsWith("bc1")||X.startsWith("tb1")||X.startsWith("ltc1")||X.startsWith("tltc1"))return"P2WPKH";if(X.startsWith("1")||X.startsWith("m")||X.startsWith("n")||X.startsWith("bitcoincash:q")||X.startsWith("bitcoincash:p")||X.startsWith("q")||X.startsWith("p")||X.startsWith("L")||X.startsWith("M")||X.startsWith("3")||X.startsWith("D")||X.startsWith("A")||X.startsWith("9")||X.startsWith("X")||X.startsWith("7")||X.startsWith("y")||X.startsWith("t1")||X.startsWith("t3")||X.startsWith("tm"))return"P2PKH";throw new m2.SwapKitError("toolbox_utxo_invalid_address",{address:X})},QX=({inputs:X,outputs:$,feeRate:J})=>{let j=X[0]&&"address"in X[0]&&X[0].address?LX(X[0].address):"P2PKH",Z=(J?X.filter((q)=>q.value>=gX["type"in q&&q.type?q.type:"P2PKH"]*Math.ceil(J)):X).reduce((q,W)=>q+s(W),0),Y=$?.reduce((q,W)=>q+fX(W),0)||kX[j],L=lX+Z+Y;return j==="P2WPKH"?Math.ceil(L+xX/4):L},s=(X)=>{if("type"in X&&X.type)return gX[X.type];if("address"in X&&X.address)return gX[LX(X.address)];return w0+S0},fX=(X,$)=>{if(X?.script)return l2+X.script.length+(X.script.length>=74?2:1);if($)return kX[$];if("address"in X&&X.address)return kX[LX(X.address)];return kX.P2PKH};var J2=R(()=>{m2=require("@swapkit/helpers"),g2=require("@swapkit/utxo-signer");((J)=>{J.P2PKH="P2PKH";J.P2WPKH="P2WPKH"})(hX||={});gX={["P2PKH"]:148,["P2WPKH"]:68},kX={["P2PKH"]:34,["P2WPKH"]:31}});function IX(X){switch(X){case x.Chain.Bitcoin:case x.Chain.BitcoinCash:return 550;case x.Chain.Dash:case x.Chain.Litecoin:return 5500;case x.Chain.Dogecoin:return 1e5;case x.Chain.Zcash:return 546;default:throw new x.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}function m({inputs:X,outputs:$,feeRate:J=1,chain:j=x.Chain.Bitcoin,changeAddress:Q=""}){let Z=X[0]&&"address"in X[0]&&X[0].address?LX(X[0].address):"P2PKH",Y=X.filter((N)=>s(N)*J<=N.value),G=Z==="P2WPKH"?Math.ceil(xX/4):0,q=lX+G+$.reduce((N,O)=>N+fX(O),0),W=$.reduce((N,O)=>N+O.value,0),z=q*J,B=0,_=[];for(let N of Y){let O=s(N),T=J*O;z+=T,B+=N.value,_.push(N);let YX=z+W;if(B<YX)continue;let AX=B-YX,RX=J*fX({address:Q,value:0});if(AX>RX){let NX=RX+z,MX=B-(W+Math.ceil(NX));if(MX>Math.max(s({value:0})*J,IX(j)))return{fee:Math.ceil(NX),inputs:_,outputs:$.concat({address:Q,value:MX})}}return{fee:Math.ceil(z),inputs:_,outputs:$}}return{fee:Math.ceil(J*QX({inputs:X,outputs:$}))}}var x;var x2=R(()=>{J2();x=require("@swapkit/helpers")});var zX=R(()=>{A2();K2();x2();J2()});function ZX(X){return X.replace(/(bchtest:|bitcoincash:)/,"")}function t(X){let $=ZX(X);return X2($)&&$2($)==="mainnet"}var GX;var TX=R(()=>{zX();GX=require("@swapkit/utxo-signer")});function Z2({address:X,chain:$}){return Q2.match($).with(U.Chain.BitcoinCash,()=>t(X)).with(U.Chain.Zcash,()=>GX.validateZcashAddress(X)).otherwise(()=>{try{return D.Address(y($)).decode(X),!0}catch{return!1}})}function y(X){return Q2.match(X).with(U.Chain.Bitcoin,()=>D.NETWORKS.bitcoin).with(U.Chain.BitcoinCash,()=>D.NETWORKS.bitcoinCash).with(U.Chain.Dash,()=>D.NETWORKS.dash).with(U.Chain.Dogecoin,()=>D.NETWORKS.dogecoin).with(U.Chain.Litecoin,()=>D.NETWORKS.litecoin).with(U.Chain.Zcash,()=>D.NETWORKS.zcash).exhaustive()}function K0({phrase:X,derivationPath:$,network:J,seed:j}){let Q=j??oX.mnemonicToSeedSync(X),Y=j2.HDKey.fromMasterSeed(Q,J.bip32).derive($);if(!Y.privateKey)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not derive private key from phrase"});return Y.privateKey}function h2(X){return p2.secp256k1.getPublicKey(X,!0)}function PX({publicKey:X,chain:$,network:J}){if($===U.Chain.BitcoinCash){let Z=D.p2pkh(X,J);if(!Z.hash)throw new U.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return D.encodeCashAddr({hash:Z.hash,prefix:D.CashAddrPrefix.MAINNET,type:D.CashAddrType.P2PKH}).replace(/^bitcoincash:/,"")}let Q=!FX.includes($)?D.p2wpkh(X,J):D.p2pkh(X,J);if(!Q.address)throw new U.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive address"});return Q.address}function UX({phrase:X,derivationPath:$,chain:J,wif:j,seed:Q}){let Z=y(J);if(j){let q=D.WIF(Z).decode(j),W=h2(q);return{privateKey:q,publicKey:W}}if(!X)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Either phrase or wif must be provided"});let Y=$||U.derivationPathToString(U.NetworkDerivationPath[J]),L=K0({derivationPath:Y,network:Z,phrase:X,seed:Q}),G=h2(L);return{privateKey:L,publicKey:G}}function m0(X,$){return D.WIF(y($)).encode(X)}function g0({phrase:X,derivationPath:$,chain:J,seed:j}){let Q=$.split("/");if(Q.length<4)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:`Derivation path must have at least 4 levels (got ${Q.length}): ${$}`});let Z=y(J),Y=j??oX.mnemonicToSeedSync(X),L=j2.HDKey.fromMasterSeed(Y,Z.bip32),G=Q.slice(0,4).join("/");return L.derive(G)}function e({inputs:X,outputs:$,chain:J,tx:j,sender:Q,compiledMemo:Z,enableRBF:Y=!1}){let L=y(J),G=!FX.includes(J),q=Y?D.RBF_SEQUENCE:void 0,W=new Set;for(let z of X){let B=`${z.hash}:${z.index}`;if(W.has(B))throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Duplicate input detected"});W.add(B);let _=typeof z.hash==="string"?a.hex.decode(z.hash):z.hash;if(G&&z.witnessUtxo)j.addInput({index:z.index,sequence:q,txid:_,witnessUtxo:{amount:BigInt(z.witnessUtxo.value),script:z.witnessUtxo.script}});else if(z.txHex)j.addInput({index:z.index,nonWitnessUtxo:a.hex.decode(z.txHex),sequence:q,txid:_,...J===U.Chain.BitcoinCash?{sighashType:D.BCHSigHash.ALL}:{}});else throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Input requires either witnessUtxo or txHex for non-segwit chains"})}for(let z of $){let B="address"in z&&z.address?z.address:Q;if(J===U.Chain.BitcoinCash)B=u(B);if(z.script){if(Z)j.addOutput({amount:0n,script:Z})}else j.addOutputAddress(B,BigInt(z.value),L)}return{inputs:X,tx:j}}async function WX(X){let $=await E(X).getSuggestedTxFee();return{[U.FeeOption.Average]:$,[U.FeeOption.Fast]:U.applyFeeMultiplier($,U.FeeOption.Fast),[U.FeeOption.Fastest]:U.applyFeeMultiplier($,U.FeeOption.Fastest)}}async function o2({assetValue:X,recipient:$,memo:J,sender:j,fetchTxHex:Q=!1}){let Z=X.chain,Y=(await WX(Z))[U.FeeOption.Fastest],L=Q||FX.includes(Z),G=X.getBaseValue("number"),q=Math.ceil(G+Y*5000);return{inputs:await E(Z).getUtxos({address:j,fetchTxHex:L,targetValue:q}),outputs:[{address:$,value:G},...J?[{address:"",script:w(J),value:0}]:[]]}}async function u2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q,fetchTxHex:Z=!1,enableRBF:Y=!1}){let L=X.chain,G=J?w(J):null,q=await o2({assetValue:X,fetchTxHex:Z,memo:J,recipient:$,sender:Q}),{inputs:W,outputs:z}=m({...q,chain:L,feeRate:j});if(!(W&&z))throw new U.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let B=new D.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!G,version:1}),{inputs:_,tx:N}=e({chain:L,compiledMemo:G,enableRBF:Y,inputs:W,outputs:z,sender:Q,tx:B});return{inputs:_,tx:N,utxos:q.inputs}}async function c2({assetValue:X,feeOptionKey:$=U.FeeOption.Fast,feeRate:J,memo:j,sender:Q,recipient:Z}){let Y=X.chain,L=await o2({assetValue:X,memo:j,recipient:Z,sender:Q}),G=J?Math.floor(J):(await WX(Y))[$];return m({...L,chain:Y,feeRate:G})}function l0(X){return async function({from:J,memo:j,feeRate:Q,feeOptionKey:Z=U.FeeOption.Fast,recipients:Y=1}){let L=await E(X).getAddressData(J),G=Q?Math.ceil(Q):(await WX(X))[Z],q=L?.utxo.map((O)=>({...O,hash:"",type:"P2PKH"})).filter((O)=>O.value>Math.max(IX(X),s(O)*G));if(!q?.length)return U.AssetValue.from({chain:X});let W=BigInt(q.reduce((O,T)=>O+T.value,0)),z=U.AssetValue.from({chain:X,value:W}),B=typeof Y==="number"?Array.from({length:Y},()=>({address:J,value:0})):Y;if(j)B.push({address:J,script:w(j),value:0});let _=QX({inputs:q,outputs:B}),N=U.AssetValue.from({chain:X,value:BigInt(_*G)});return z.sub(N)}}function x0(X){return async function(J){let{fee:j}=await c2(J);return U.AssetValue.from({chain:X,value:U.SwapKitNumber.fromBigInt(BigInt(j),8).getValue("string")})}}function h0({chain:X,phrase:$,derivationPath:J,seed:j}){let Q=y(X),{privateKey:Z,publicKey:Y}=UX({chain:X,derivationPath:J,phrase:$,seed:j}),L=X===U.Chain.BitcoinCash?[D.BCHSigHash.ALL]:[D.SigHash.ALL];return{getAddress:()=>PX({chain:X,network:Q,publicKey:Y}),privateKey:Z,publicKey:Y,signTransaction:(G)=>{return G.sign(Z,L),G}}}function p0(X,$){return async function({memo:j,recipient:Q,feeOptionKey:Z,feeRate:Y,assetValue:L,enableRBF:G=!1}){let q=await $?.getAddress();if(!($&&q))throw new U.SwapKitError("toolbox_utxo_no_signer");if(!Q)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});U.warnOnce({condition:G&&!pX.includes(X),id:`rbf_not_supported_${X}`,warning:`RBF (Replace-by-Fee) is not reliably supported on ${X}. Transaction will be created without RBF signaling.`});let W=G&&pX.includes(X),z=Y||(await WX(X))[Z||U.FeeOption.Fast],{tx:B}=await u2({assetValue:L,enableRBF:W,feeRate:z,memo:j,recipient:Q,sender:q}),_=await $.signTransaction(B);return _.finalize(),E(X).broadcastTx(a.hex.encode(_.extract()))}}function G2(X){return($)=>Z2({address:$,chain:X})}function Y2(X){let $=y(X);return function(j){if(!j)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Keys must be provided"});return PX({chain:X,network:$,publicKey:j.publicKey})}}function XX({chain:X,...$}){let J="phrase"in $?$.phrase:void 0,j="index"in $?$.index||0:0,Q=J?oX.mnemonicToSeedSync(J):void 0,Z="derivationPath"in $&&$.derivationPath?$.derivationPath:U.updateDerivationPath(U.NetworkDerivationPath[X],{index:j}),Y=U.derivationPathToString(Z),L=J?h0({chain:X,derivationPath:Y,phrase:J,seed:Q}):void 0,G="signer"in $?$.signer:void 0,q=L||G,W=J?UX({chain:X,derivationPath:Y,phrase:J,seed:Q}):void 0;function z(){if(q)return q.getAddress();return Promise.resolve(void 0)}function B(M){if(!J)return;let H=i({accountIndex:M,chain:X,derivationPath:Z});return g0({chain:X,derivationPath:U.derivationPathToString(H),phrase:J,seed:Q})}let _=B();function N(){if(!_)return;return _.publicExtendedKey}function O({accountIndex:M}={}){let H=M===void 0?_:B(M);if(!H)return;let b=i({accountIndex:M,chain:X,derivationPath:Z});return{accountIndex:$X(b),path:U.derivationPathToString(b),xpub:H.publicExtendedKey}}function T({accountIndex:M,index:H,change:b=!1}){let k=M===void 0?_:B(M);if(!k)return;let f=qX({accountIndex:M,chain:X,change:b,derivationPath:Z,index:H}),S=y(X),g=k.deriveChild(Number(b)).deriveChild(H);if(!g.publicKey)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not derive public key"});let v=PX({chain:X,network:S,publicKey:g.publicKey}),l=a.hex.encode(g.publicKey);return{accountIndex:$X(f),address:v,change:b,index:H,path:U.derivationPathToString(f),pubkey:l}}async function YX(M){if(!pX.includes(X))return{reason:`RBF is not supported on ${X}`,supported:!1};let H=await E(X).getTransactionDetails(M);return{canReplace:H.isRBF&&!H.confirmed,confirmed:H.confirmed,enabled:H.isRBF,fee:H.fee,sequences:H.sequences,supported:!0}}async function AX({txid:M,newFeeRate:H,recipient:b,memo:k}){if(!pX.includes(X))throw new U.SwapKitError("toolbox_utxo_rbf_not_supported",{chain:X});let f=await E(X).getTransactionDetails(M);if(!f.isRBF)throw new U.SwapKitError("toolbox_utxo_tx_not_replaceable",{txid:M});if(f.confirmed)throw new U.SwapKitError("toolbox_utxo_tx_already_confirmed",{blockId:f.blockId,txid:M});let S=f.inputs.reduce((A,n)=>A+n.value,0),v=f.outputs.find((A)=>A.recipient===b)?.value||0;if(v===0)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:"Could not determine send amount from original transaction"});let l=await Promise.all(f.inputs.map(async(A)=>{let n=await E(X).getRawTx(A.transaction_hash);return{hash:A.transaction_hash,index:A.index,txHex:n,value:A.value,witnessUtxo:void 0}})),yX=k?w(k):null,rX=QX({feeRate:H,inputs:l.map((A)=>({...A,type:"P2WPKH"})),outputs:[{address:b,value:v}]}),p=Math.ceil(rX*H);if(p<=f.fee)throw new U.SwapKitError("toolbox_utxo_rbf_fee_too_low",{newFee:p,originalFee:f.fee});let CX=p-f.fee,d=v-CX;if(d<=0)throw new U.SwapKitError("toolbox_utxo_rbf_insufficient_change");let vX=new D.Transaction({allowLegacyWitnessUtxo:!0,version:1}),wX=[{address:b,value:d},...k?[{address:"",script:w(k),value:0}]:[]],SX=S-d-p,r=await z();if(SX>IX(X)&&r)wX.push({address:r,value:SX});return e({chain:X,compiledMemo:yX,inputs:l,outputs:wX,sender:r||b,tx:vX}),{feeDelta:CX,newFee:p,originalFee:f.fee,tx:vX}}async function RX({txid:M,newFeeRate:H,recipient:b,memo:k}){let{tx:f,originalFee:S,newFee:g}=await AX({memo:k,newFeeRate:H,recipient:b,txid:M}),v=await dX(f);v.finalize();let l=await E(X).broadcastTx(a.hex.encode(v.extract()));return{newFee:g,originalFee:S,txid:l}}function NX({accountIndex:M,index:H,change:b=!1}){K("index",H);let k=M===void 0?_:B(M);if(!k)return;return k.deriveChild(Number(b)).deriveChild(H).privateKey||void 0}function MX({tx:M,inputDerivations:H}){if(!_)throw new U.SwapKitError("toolbox_utxo_no_signer");let b=X===U.Chain.BitcoinCash?[D.BCHSigHash.ALL]:[D.SigHash.ALL];for(let k=0;k<H.length;k++){let f=H[k];if(!f)continue;let{derivationIndex:S,isChange:g}=f,v=NX({change:g,index:S});if(!v)throw new U.SwapKitError("toolbox_utxo_invalid_params",{error:`Could not derive private key for input ${k} at index ${S}`});M.signIdx(v,k,b)}return M}async function X0({utxos:M,recipient:H,assetValue:b,memo:k,feeRate:f,feeOptionKey:S,changeAddress:g}){if(!_)throw new U.SwapKitError("toolbox_utxo_no_signer");let v=f||(await WX(X))[S||U.FeeOption.Fast],l=k?w(k):null,yX=[{address:H,value:b.getBaseValue("number")}];if(l)yX.push({address:"",script:l,value:0});let rX=M.map(({hash:r,index:A,value:n,txHex:j0,witnessUtxo:nX})=>({hash:r,index:A,txHex:j0,value:n,witnessUtxo:nX?{script:nX.script,value:nX.value}:void 0})),{inputs:p,outputs:CX}=m({chain:X,feeRate:v,inputs:rX,outputs:yX});if(!(p&&CX))throw new U.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:b,sender:"multiple addresses"});let d=new D.Transaction({allowLegacyWitnessUtxo:!0,version:1}),vX=M[0]?.address,wX=g||await z()||vX||H;e({chain:X,compiledMemo:l,inputs:p,outputs:CX,sender:wX,tx:d});let SX=p.map((r)=>{let A=M.find((n)=>n.hash===r.hash&&n.index===r.index);return A?{derivationIndex:A.derivationIndex,isChange:A.isChange}:{derivationIndex:0,isChange:!1}});return MX({inputDerivations:SX,tx:d}),d.finalize(),E(X).broadcastTx(a.hex.encode(d.extract()))}function $0({address:M,gapLimit:H=20}){if(!_)return;for(let b=0;b<H;b++){let k=T({change:!1,index:b}),f=T({change:!0,index:b}),S=k?.address===M?!1:f?.address===M;if(k?.address===M||f?.address===M)return{change:S,index:b}}return}function dX(M){if(!q)throw new U.SwapKitError("toolbox_utxo_no_signer");return q.signTransaction(M)}async function J0(M){let H=await dX(M);return H.finalize(),await E(X).broadcastTx(a.hex.encode(H.extract()))}return{accumulative:m,broadcastTx:(M)=>E(X).broadcastTx(M),bumpFee:RX,calculateTxSize:QX,createKeysForPath:(M)=>UX({...M,chain:X}),createReplacementTransaction:AX,createTransaction:u2,deriveAddressAtIndex:T,derivePrivateKeyAtIndex:NX,estimateMaxSendableAmount:l0(X),estimateTransactionFee:x0(X),getAddress:z,getAddressFromKeys:Y2(X),getBalance:f2(X),getExtendedPublicKey:N,getExtendedPublicKeyInfo:O,getFeeRates:()=>WX(X),getInputsOutputsFee:c2,getNetworkForChain:()=>y(X),getPrivateKeyFromMnemonic:(M)=>m0(UX({...M,chain:X}).privateKey,X),isRBFEnabled:YX,keys:W,resolveDerivationIndex:$0,signAndBroadcastTransaction:J0,signTransaction:dX,signTransactionWithMultipleKeys:MX,transfer:p0(X,q),transferFromMultipleAddresses:X0,validateAddress:G2(X)}}var p2,a,j2,oX,U,D,Q2,FX,pX;var BX=R(()=>{sX();HX();zX();TX();p2=require("@noble/curves/secp256k1.js"),a=require("@scure/base"),j2=require("@scure/bip32"),oX=require("@scure/bip39"),U=require("@swapkit/helpers"),D=require("@swapkit/utxo-signer"),Q2=require("ts-pattern"),FX=[U.Chain.Dash,U.Chain.Dogecoin,U.Chain.Zcash,U.Chain.BitcoinCash],pX=[U.Chain.Bitcoin]});function EX(X){return ZX(bX(X))}function o0(X){let $=y(h);function J(Q){return Q.sign(X.privateKey,[P.BCHSigHash.ALL]),Q}function j(){let Q=P.p2pkh(X.publicKey,$);if(!Q.hash)throw new F.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});let Z=P.encodeCashAddr({hash:Q.hash,prefix:P.CashAddrPrefix.MAINNET,type:P.CashAddrType.P2PKH});return Promise.resolve(Z.replace(/^bitcoincash:/,""))}return{getAddress:j,signTransaction:J}}function L2(X){let $="phrase"in X?X.phrase:void 0,J="index"in X?X.index||0:0,j=F.derivationPathToString("derivationPath"in X&&X.derivationPath?X.derivationPath:F.updateDerivationPath(F.NetworkDerivationPath[h],{index:J})),Q=$?UX({chain:h,derivationPath:j,phrase:$}):void 0,Z=Q?o0(Q):("signer"in X)?X.signer:void 0;function Y(){return Promise.resolve(Z?.getAddress())}let{getBalance:L,getFeeRates:G,broadcastTx:q,...W}=XX({chain:h});function z(N,O=!0){return L(ZX(bX(N)))}function B(N){if(!Z)throw new F.SwapKitError("toolbox_utxo_no_signer");return Z.signTransaction(N)}async function _(N){let O=await B(N);return O.finalize(),await q(q2.hex.encode(O.extract()))}return{...W,broadcastTx:q,buildTx:c0,createTransaction:d2,getAddress:Y,getAddressFromKeys:d0,getBalance:z,getFeeRates:G,signAndBroadcastTransaction:_,signTransaction:B,stripPrefix:ZX,stripToCashAddress:EX,transfer:u0({broadcastTx:q,getFeeRates:G,signer:Z}),validateAddress:t}}async function d2({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q}){if(!t($))throw new F.SwapKitError("toolbox_utxo_invalid_address",{address:$});let Z=Math.ceil(X.getBaseValue("number")+j*7500),Y=await E(h).getUtxos({address:EX(Q),fetchTxHex:!0,targetValue:Z}),L=J?w(J):null,G=[],q=u($);if(G.push({address:q,value:X.getBaseValue("number")}),L)G.push({script:L,value:0});let{inputs:W,outputs:z}=m({chain:h,feeRate:j,inputs:Y,outputs:G});if(!(W&&z))throw new F.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let B=new P.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!L,version:1}),_=u(Q),{inputs:N,tx:O}=e({chain:h,compiledMemo:L,inputs:W,outputs:z.map((T)=>("address"in T)&&T.address?{...T,address:u(T.address)}:T),sender:_,tx:B});return{inputs:N,tx:O,utxos:W}}function u0({broadcastTx:X,getFeeRates:$,signer:J}){return async function({recipient:Q,assetValue:Z,feeOptionKey:Y=F.FeeOption.Fast,...L}){let G=await J?.getAddress();if(!(J&&G))throw new F.SwapKitError("toolbox_utxo_no_signer");if(!Q)throw new F.SwapKitError("toolbox_utxo_invalid_params",{error:"Recipient address must be provided"});let q=L.feeRate||(await $())[Y],{tx:W}=await d2({...L,assetValue:Z,feeRate:q,recipient:Q,sender:G}),z=await J.signTransaction(W);return z.finalize(),X(q2.hex.encode(z.extract()))}}async function c0({assetValue:X,recipient:$,memo:J,feeRate:j,sender:Q}){let Z=bX($);if(!t(Z))throw new F.SwapKitError("toolbox_utxo_invalid_address",{address:Z});let Y=Math.ceil(X.getBaseValue("number")+j*7500),L=await E(h).getUtxos({address:EX(Q),fetchTxHex:!0,targetValue:Y}),G=Number(j.toFixed(0)),q=J?w(J):null,W=[];if(W.push({address:u($),value:X.getBaseValue("number")}),q)W.push({script:q,value:0});let{inputs:z,outputs:B}=m({chain:h,feeRate:G,inputs:L,outputs:W});if(!(z&&B))throw new F.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:X,sender:Q});let _=new P.Transaction({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!q,version:1}),{inputs:N,tx:O}=e({chain:h,compiledMemo:q,inputs:z,outputs:B,sender:u(Q),tx:_});return{inputs:N,tx:O,utxos:L}}function d0(X){let $=P.NETWORKS.bitcoinCash,J=P.p2pkh(X.publicKey,$);if(!J.hash)throw new F.SwapKitError("toolbox_utxo_invalid_address",{error:"Could not derive BCH address hash"});return P.encodeCashAddr({hash:J.hash,prefix:P.CashAddrPrefix.MAINNET,type:P.CashAddrType.P2PKH}).replace(/^bitcoincash:/,"")}var q2,F,P,h;var uX=R(()=>{zX();BX();TX();q2=require("@scure/base"),F=require("@swapkit/helpers"),P=require("@swapkit/utxo-signer"),h=F.Chain.BitcoinCash});function W2(){let{isStagenet:X}=I.SKConfig.get("envs");return X?V.ZCASH_TEST_NETWORK:V.ZCASH_NETWORK}function n0(X){return r0.encode(X)}function i0({phrase:X,derivationPath:$}){let J=U2.mnemonicToSeedSync(X),Q=z2.HDKey.fromMasterSeed(J).derive($);if(!Q.privateKey||!Q.publicKey)throw new I.SwapKitError("toolbox_utxo_invalid_params");let{privateKey:Z,publicKey:Y}=Q,L=V.utils.hash160(Y),{isStagenet:G}=I.SKConfig.get("envs"),q=G?new Uint8Array([29,37]):new Uint8Array([28,184]),W=new Uint8Array(q.length+L.length);W.set(q,0),W.set(L,q.length);let z=n0(W);return{getAddress:()=>Promise.resolve(z),signTransaction:(B)=>{if(B instanceof V.ZcashPSBT){let _=B.toPCZT();return _.signAllInputs(Z,Y,V.ZcashSigHash.ALL),_.finalizeAllInputs(),Promise.resolve(_.extract())}if(B instanceof V.PCZT)return B.signAllInputs(Z,Y,V.ZcashSigHash.ALL),B.finalizeAllInputs(),Promise.resolve(B.extract());return B.signAllInputs(Z,Y,V.ZcashSigHash.ALL),Promise.resolve(B)}}}function s0({inputs:X,outputs:$,tx:J,sender:j,compiledMemo:Q}){let Z=W2();for(let Y of X){let L=V.Address(Z).decode(j),G=V.OutScript.encode(L);J.addInput({index:Y.index,script:G,sequence:4294967295,txid:cX.hex.decode(Y.hash),value:BigInt(Y.value)})}for(let Y of $){let L="address"in Y&&Y.address?Y.address:j,G=Y.script;if(G&&!Q)continue;if(G&&Q)J.addOutput({amount:0n,script:Q});else J.addOutputAddress(L,BigInt(Y.value),Z)}return{inputs:X,tx:J}}async function r2(X){let{assetValue:$,recipient:J,memo:j,feeRate:Q,sender:Z,fetchTxHex:Y}=X,L=W2();if(!V.isTransparentZcashAddress(Z,L))throw new I.SwapKitError("toolbox_utxo_invalid_address",{address:Z});if(!V.isTransparentZcashAddress(J,L))throw new I.SwapKitError("toolbox_utxo_invalid_address",{address:J,error:"Zcash transaction creation currently supports transparent addresses only"});let G=j?w(j):null,q=await E(I.Chain.Zcash).getUtxos({address:Z,fetchTxHex:Y!==!1}),W=[{address:J,value:Number($.getBaseValue("string"))},...G?[{script:G,value:0}]:[]],{inputs:z,outputs:B}=m({chain:I.Chain.Zcash,changeAddress:Z,feeRate:Q,inputs:q,outputs:W});if(!(z&&B))throw new I.SwapKitError("toolbox_utxo_insufficient_balance",{assetValue:$,sender:Z});let _=V.createZcashTransaction({consensusBranchId:V.ZcashConsensusBranchId.NU6_2,expiryHeight:0,lockTime:0,version:4,versionGroupId:V.ZcashVersionGroupId.SAPLING}),{tx:N,inputs:O}=s0({compiledMemo:G,inputs:z,outputs:B,sender:Z,tx:_});return{inputs:O,outputs:B,tx:N}}function B2(X){let $=_X.match(X).with({signer:_X.P.not(_X.P.nullish)},({signer:G})=>G).with({phrase:_X.P.string},({phrase:G,derivationPath:q,index:W=0})=>{let z=q||I.NetworkDerivationPath[I.Chain.Zcash]||[44,133,0,0,0],B=I.updateDerivationPath(z,{index:W}),_=I.derivationPathToString(B);return i0({derivationPath:_,phrase:G})}).otherwise(()=>{return}),J=XX({chain:I.Chain.Zcash,signer:$});async function j(G){if(!$)throw new I.SwapKitError("toolbox_utxo_no_signer");return await $.signTransaction(G)}async function Q(G){let q=await j(G);return J.broadcastTx(q.toHex())}async function Z({recipient:G,assetValue:q,feeOptionKey:W=I.FeeOption.Fast,...z}){let B=await $?.getAddress();if(!($&&B))throw new I.SwapKitError("toolbox_utxo_no_signer");let _=z.feeRate||(await J.getFeeRates())[W],{tx:N}=await r2({...z,assetValue:q,feeRate:_,recipient:G,sender:B}),T=(await $.signTransaction(N)).toHex();return J.broadcastTx(T)}function Y({phrase:G,derivationPath:q="m/44'/133'/0'/0/0"}){let W=U2.mnemonicToSeedSync(G),B=z2.HDKey.fromMasterSeed(W).derive(q);if(!B.privateKey||!B.publicKey)throw new I.SwapKitError("toolbox_utxo_invalid_params");return{privateKey:B.privateKey,publicKey:B.publicKey}}function L({phrase:G,derivationPath:q="m/44'/133'/0'/0/0"}){let W=Y({derivationPath:q,phrase:G}),z=W2();return V.WIF(z).encode(W.privateKey)}return{...J,createKeysForPath:Y,createTransaction:r2,getPrivateKeyFromMnemonic:L,signAndBroadcastTransaction:Q,signTransaction:j,transfer:Z,validateAddress:GX.validateZcashAddress}}var cX,z2,U2,I,V,_X,r0;var _2=R(()=>{zX();BX();TX();cX=require("@scure/base"),z2=require("@scure/bip32"),U2=require("@scure/bip39"),I=require("@swapkit/helpers"),V=require("@swapkit/utxo-signer"),_X=require("ts-pattern");r0=cX.createBase58check(V.utils.sha256)});function t2({xpub:X,chain:$,count:J,startIndex:j=0,accountIndex:Q}){if(K("count",J),J<1)throw RangeError("count must be at least 1");K("startIndex",j);let Z=y($),Y=i2.HDKey.fromExtendedKey(X,Z.bip32),L=i({accountIndex:Q,chain:$}),G=$X(L),q=[];for(let W of[!1,!0]){let z=Y.deriveChild(Number(W));for(let B=0;B<J;B++){let _=j+B,N=z.deriveChild(_);if(!N.publicKey)continue;let O=qX({accountIndex:Q,chain:$,change:W,index:_});q.push({accountIndex:G,address:PX({chain:$,network:Z,publicKey:N.publicKey}),change:W,index:_,path:s2.derivationPathToString(O),pubkey:n2.hex.encode(N.publicKey)})}}return q}var n2,i2,s2;var a2=R(()=>{HX();BX();n2=require("@scure/base"),i2=require("@scure/bip32"),s2=require("@swapkit/helpers")});function t0(X,$){switch(X){case c.Chain.BitcoinCash:return L2($||{});case c.Chain.Zcash:return B2($);case c.Chain.Bitcoin:case c.Chain.Dogecoin:case c.Chain.Litecoin:case c.Chain.Dash:return XX({chain:X,...$});default:throw new c.SwapKitError("toolbox_utxo_not_supported",{chain:X})}}var c;var e2=R(()=>{uX();BX();_2();HX();a2();uX();TX();c=require("@swapkit/helpers")});var a0={};W0(a0,{validateZcashAddress:()=>GX.validateZcashAddress,validateUtxoAddress:()=>Z2,validateBchAddress:()=>t,toLegacyAddress:()=>u,toCashAddress:()=>bX,stripToCashAddress:()=>EX,stripPrefix:()=>ZX,nonSegwitChains:()=>FX,isValidAddress:()=>X2,getUtxoToolbox:()=>t0,getUtxoNetwork:()=>f0,getUtxoApi:()=>E,getUTXOAddressValidator:()=>G2,getUTXOAddressPath:()=>qX,getUTXOAccountPath:()=>i,getUTXOAccountIndexFromPath:()=>$X,getScriptTypeForAddress:()=>LX,getOutputSize:()=>fX,getNetworkForChain:()=>y,getInputSize:()=>s,getDustThreshold:()=>IX,detectAddressNetwork:()=>$2,deriveAddressesFromXpub:()=>t2,createZcashToolbox:()=>B2,createUTXOToolbox:()=>XX,createHDWalletHelpers:()=>V2,createCustomUtxoApi:()=>k0,createBCHToolbox:()=>L2,compileMemo:()=>w,calculateTxSize:()=>QX,assertDerivationIndex:()=>K,addressFromKeysGetter:()=>Y2,addInputsAndOutputs:()=>e,accumulative:()=>m,UtxoNetwork:()=>eX,UTXOScriptType:()=>hX,TX_OVERHEAD:()=>lX,SEGWIT_MARKER_FLAG_WEIGHT:()=>xX,OutputSizes:()=>kX,OP_RETURN_OVERHEAD:()=>l2,MIN_TX_FEE:()=>v0,InputSizes:()=>gX});module.exports=L0(a0);var e0=R(()=>{BX();HX();zX();e2();uX();_2()});e0();
|