@uswap/toolboxes 4.3.7 → 4.3.9

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.
Files changed (149) hide show
  1. package/dist/src/cardano/index.cjs +2 -2
  2. package/dist/src/cardano/index.cjs.map +3 -3
  3. package/dist/src/cardano/index.js +2 -2
  4. package/dist/src/cardano/index.js.map +3 -3
  5. package/dist/src/cosmos/index.cjs +2 -2
  6. package/dist/src/cosmos/index.cjs.map +8 -8
  7. package/dist/src/cosmos/index.js +2 -2
  8. package/dist/src/cosmos/index.js.map +8 -8
  9. package/dist/src/evm/index.cjs +2 -2
  10. package/dist/src/evm/index.cjs.map +7 -7
  11. package/dist/src/evm/index.js +2 -2
  12. package/dist/src/evm/index.js.map +7 -7
  13. package/dist/src/index.cjs +3 -3
  14. package/dist/src/index.cjs.map +34 -34
  15. package/dist/src/index.js +3 -3
  16. package/dist/src/index.js.map +34 -34
  17. package/dist/src/near/index.cjs +2 -2
  18. package/dist/src/near/index.cjs.map +5 -5
  19. package/dist/src/near/index.js +2 -2
  20. package/dist/src/near/index.js.map +5 -5
  21. package/dist/src/radix/index.cjs +2 -2
  22. package/dist/src/radix/index.cjs.map +3 -3
  23. package/dist/src/radix/index.js +2 -2
  24. package/dist/src/radix/index.js.map +3 -3
  25. package/dist/src/ripple/index.cjs +2 -2
  26. package/dist/src/ripple/index.cjs.map +3 -3
  27. package/dist/src/ripple/index.js +2 -2
  28. package/dist/src/ripple/index.js.map +3 -3
  29. package/dist/src/solana/index.cjs +2 -2
  30. package/dist/src/solana/index.cjs.map +3 -3
  31. package/dist/src/solana/index.js +2 -2
  32. package/dist/src/solana/index.js.map +3 -3
  33. package/dist/src/substrate/index.cjs +2 -2
  34. package/dist/src/substrate/index.cjs.map +4 -4
  35. package/dist/src/substrate/index.js +2 -2
  36. package/dist/src/substrate/index.js.map +4 -4
  37. package/dist/src/sui/index.cjs +2 -2
  38. package/dist/src/sui/index.cjs.map +3 -3
  39. package/dist/src/sui/index.js +2 -2
  40. package/dist/src/sui/index.js.map +3 -3
  41. package/dist/src/ton/index.cjs +2 -2
  42. package/dist/src/ton/index.cjs.map +3 -3
  43. package/dist/src/ton/index.js +2 -2
  44. package/dist/src/ton/index.js.map +3 -3
  45. package/dist/src/tron/index.cjs +2 -2
  46. package/dist/src/tron/index.cjs.map +4 -4
  47. package/dist/src/tron/index.js +2 -2
  48. package/dist/src/tron/index.js.map +4 -4
  49. package/dist/src/utxo/index.cjs +3 -3
  50. package/dist/src/utxo/index.cjs.map +11 -11
  51. package/dist/src/utxo/index.js +3 -3
  52. package/dist/src/utxo/index.js.map +11 -11
  53. package/dist/types/cardano/toolbox.d.ts +5 -0
  54. package/dist/types/cardano/toolbox.d.ts.map +1 -1
  55. package/dist/types/cosmos/thorchainUtils/addressFormat.d.ts +5 -0
  56. package/dist/types/cosmos/thorchainUtils/addressFormat.d.ts.map +1 -1
  57. package/dist/types/cosmos/thorchainUtils/messages.d.ts +5 -0
  58. package/dist/types/cosmos/thorchainUtils/messages.d.ts.map +1 -1
  59. package/dist/types/cosmos/toolbox/cosmos.d.ts +5 -0
  60. package/dist/types/cosmos/toolbox/cosmos.d.ts.map +1 -1
  61. package/dist/types/cosmos/toolbox/index.d.ts +5 -0
  62. package/dist/types/cosmos/toolbox/index.d.ts.map +1 -1
  63. package/dist/types/cosmos/toolbox/thorchain.d.ts +5 -0
  64. package/dist/types/cosmos/toolbox/thorchain.d.ts.map +1 -1
  65. package/dist/types/cosmos/util.d.ts +5 -0
  66. package/dist/types/cosmos/util.d.ts.map +1 -1
  67. package/dist/types/evm/helpers.d.ts +1 -1
  68. package/dist/types/evm/helpers.d.ts.map +1 -1
  69. package/dist/types/evm/toolbox/baseEVMToolbox.d.ts +7 -0
  70. package/dist/types/evm/toolbox/baseEVMToolbox.d.ts.map +1 -1
  71. package/dist/types/evm/toolbox/evm.d.ts +38 -38
  72. package/dist/types/evm/toolbox/evm.d.ts.map +1 -1
  73. package/dist/types/evm/toolbox/op.d.ts +7 -14
  74. package/dist/types/evm/toolbox/op.d.ts.map +1 -1
  75. package/dist/types/index.d.ts +5 -0
  76. package/dist/types/index.d.ts.map +1 -1
  77. package/dist/types/near/helpers/core.d.ts +5 -0
  78. package/dist/types/near/helpers/core.d.ts.map +1 -1
  79. package/dist/types/near/toolbox.d.ts +5 -0
  80. package/dist/types/near/toolbox.d.ts.map +1 -1
  81. package/dist/types/radix/index.d.ts +5 -0
  82. package/dist/types/radix/index.d.ts.map +1 -1
  83. package/dist/types/ripple/index.d.ts +5 -0
  84. package/dist/types/ripple/index.d.ts.map +1 -1
  85. package/dist/types/solana/toolbox.d.ts +5 -0
  86. package/dist/types/solana/toolbox.d.ts.map +1 -1
  87. package/dist/types/substrate/substrate.d.ts +5 -0
  88. package/dist/types/substrate/substrate.d.ts.map +1 -1
  89. package/dist/types/sui/toolbox.d.ts +5 -0
  90. package/dist/types/sui/toolbox.d.ts.map +1 -1
  91. package/dist/types/ton/toolbox.d.ts +5 -0
  92. package/dist/types/ton/toolbox.d.ts.map +1 -1
  93. package/dist/types/tron/helpers/trongrid.d.ts +5 -0
  94. package/dist/types/tron/helpers/trongrid.d.ts.map +1 -1
  95. package/dist/types/tron/toolbox.d.ts +5 -0
  96. package/dist/types/tron/toolbox.d.ts.map +1 -1
  97. package/dist/types/utils.d.ts.map +1 -1
  98. package/dist/types/utxo/helpers/api.d.ts +5 -0
  99. package/dist/types/utxo/helpers/api.d.ts.map +1 -1
  100. package/dist/types/utxo/helpers/bchaddrjs.d.ts +5 -0
  101. package/dist/types/utxo/helpers/bchaddrjs.d.ts.map +1 -1
  102. package/dist/types/utxo/helpers/coinselect.d.ts +5 -0
  103. package/dist/types/utxo/helpers/coinselect.d.ts.map +1 -1
  104. package/dist/types/utxo/helpers/txSize.d.ts +5 -0
  105. package/dist/types/utxo/helpers/txSize.d.ts.map +1 -1
  106. package/dist/types/utxo/toolbox/bitcoinCash.d.ts +5 -0
  107. package/dist/types/utxo/toolbox/bitcoinCash.d.ts.map +1 -1
  108. package/dist/types/utxo/toolbox/index.d.ts +5 -0
  109. package/dist/types/utxo/toolbox/index.d.ts.map +1 -1
  110. package/dist/types/utxo/toolbox/utxo.d.ts +5 -0
  111. package/dist/types/utxo/toolbox/utxo.d.ts.map +1 -1
  112. package/dist/types/utxo/toolbox/zcash.d.ts +6 -1
  113. package/dist/types/utxo/toolbox/zcash.d.ts.map +1 -1
  114. package/package.json +4 -4
  115. package/src/cardano/toolbox.ts +12 -6
  116. package/src/cosmos/__tests__/toolbox.test.ts +8 -4
  117. package/src/cosmos/thorchainUtils/addressFormat.ts +8 -2
  118. package/src/cosmos/thorchainUtils/messages.ts +8 -2
  119. package/src/cosmos/toolbox/cosmos.ts +11 -5
  120. package/src/cosmos/toolbox/index.ts +8 -2
  121. package/src/cosmos/toolbox/thorchain.ts +9 -3
  122. package/src/cosmos/util.ts +9 -3
  123. package/src/evm/helpers.ts +7 -9
  124. package/src/evm/toolbox/baseEVMToolbox.ts +34 -26
  125. package/src/evm/toolbox/evm.ts +2 -3
  126. package/src/evm/toolbox/op.ts +10 -17
  127. package/src/index.ts +8 -2
  128. package/src/near/helpers/core.ts +8 -2
  129. package/src/near/toolbox.ts +21 -15
  130. package/src/radix/index.ts +15 -3
  131. package/src/ripple/index.ts +15 -12
  132. package/src/solana/toolbox.ts +16 -16
  133. package/src/substrate/balance.ts +2 -2
  134. package/src/substrate/substrate.ts +17 -11
  135. package/src/sui/__tests__/toolbox.test.ts +9 -5
  136. package/src/sui/toolbox.ts +18 -11
  137. package/src/ton/__tests__/toolbox.test.ts +9 -5
  138. package/src/ton/toolbox.ts +14 -8
  139. package/src/tron/helpers/trongrid.ts +8 -2
  140. package/src/tron/toolbox.ts +21 -15
  141. package/src/utils.ts +8 -1
  142. package/src/utxo/helpers/api.ts +15 -9
  143. package/src/utxo/helpers/bchaddrjs.ts +9 -3
  144. package/src/utxo/helpers/coinselect.ts +8 -2
  145. package/src/utxo/helpers/txSize.ts +8 -2
  146. package/src/utxo/toolbox/bitcoinCash.ts +13 -7
  147. package/src/utxo/toolbox/index.ts +8 -2
  148. package/src/utxo/toolbox/utxo.ts +16 -10
  149. package/src/utxo/toolbox/zcash.ts +24 -21
@@ -1,4 +1,4 @@
1
- var Qy=Object.create;var{getPrototypeOf:Zy,defineProperty:P,getOwnPropertyNames:l,getOwnPropertyDescriptor:$y}=Object,A=Object.prototype.hasOwnProperty;var m=(f,Q,j)=>{j=f!=null?Qy(Zy(f)):{};let $=Q||!f||!f.__esModule?P(j,"default",{value:f,enumerable:!0}):j;for(let M of l(f))if(!A.call($,M))P($,M,{get:()=>f[M],enumerable:!0});return $},b=new WeakMap,jy=(f)=>{var Q=b.get(f),j;if(Q)return Q;if(Q=P({},"__esModule",{value:!0}),f&&typeof f==="object"||typeof f==="function")l(f).map(($)=>!A.call(Q,$)&&P(Q,$,{get:()=>f[$],enumerable:!(j=$y(f,$))||j.enumerable}));return b.set(f,Q),Q};var Yy=(f,Q)=>{for(var j in Q)P(f,j,{get:Q[j],enumerable:!0,configurable:!0,set:($)=>Q[j]=()=>$})};var R=(f,Q)=>()=>(f&&(Q=f(f=0)),Q);var C;var T=R(()=>{C=[{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"remaining",type:"uint256"}],stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{anonymous:!1,inputs:[{indexed:!0,name:"_from",type:"address"},{indexed:!0,name:"_to",type:"address"},{indexed:!1,name:"_value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"_owner",type:"address"},{indexed:!0,name:"_spender",type:"address"},{indexed:!1,name:"_value",type:"uint256"}],name:"Approval",type:"event"}]});async function i(f){let Q=await import("tronweb"),j=Q.TronWeb??Q.default?.TronWeb;try{let $=await fetch(`${Xy}/v1/accounts/${f}`);if(!$.ok)throw Error(`TronGrid API error: ${$.status} ${$.statusText}`);let M=await $.json();if(!(M.success&&M.data)||M.data.length===0)throw Error("Invalid response from TronGrid API");let Z;try{Z=j.address.toHex(f).toLowerCase()}catch{Z=f.toLowerCase()}let k=M.data.find((v)=>{return v.address.toLowerCase()===Z});if(!k)return;return{balance:k.balance,trc20:k.trc20||[]}}catch($){throw new h.SwapKitError("toolbox_tron_trongrid_api_error",{address:f,message:$ instanceof Error?$.message:"Unknown error"})}}var h,Xy="https://api.trongrid.io";var n=R(()=>{h=require("@uswap/helpers")});async function N(){let f=await import("tronweb"),Q=f.TronWeb??f.default?.TronWeb;return(j)=>{return Q.isAddress(j)}}async function c({phrase:f,derivationPath:Q,index:j}){let $=Q||y.derivationPathToString(y.updateDerivationPath(y.NetworkDerivationPath[y.Chain.Tron],{index:j||0})),{HDKey:M}=await import("@scure/bip32"),{mnemonicToSeedSync:Z}=await import("@scure/bip39"),k=Z(f),X=M.fromMasterSeed(k).derive($);if(!X.privateKey)throw new y.SwapKitError("toolbox_tron_no_signer");return Buffer.from(X.privateKey).toString("hex")}async function Iy({phrase:f,derivationPath:Q,tronWeb:j}){let{HDKey:$}=await import("@scure/bip32"),{mnemonicToSeedSync:M}=await import("@scure/bip39"),Z=M(f),v=$.fromMasterSeed(Z).derive(Q);if(!v.privateKey)throw new y.SwapKitError("toolbox_tron_no_signer");let X=Buffer.from(v.privateKey).toString("hex");j.setPrivateKey(X);let F=j?.address.fromPrivateKey(X);return{getAddress:()=>Promise.resolve(typeof F==="string"?F:""),signTransaction:async(V)=>{return await j.trx.sign(V,X)}}}var y,x,Gy=268,Ly=13000,My=345,t="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",Uy="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",o=async(f={})=>{let Q=await import("tronweb"),j=Q.TronWeb??Q.default?.TronWeb,$=await y.getRPCUrl(y.Chain.Tron),M=void 0,Z=new j({fullHost:$,headers:void 0}),k="index"in f?f.index||0:0,v=y.derivationPathToString("derivationPath"in f&&f.derivationPath?f.derivationPath:y.updateDerivationPath(y.NetworkDerivationPath[y.Chain.Tron],{index:k})),X=await x.match(f).with({phrase:x.P.string},async({phrase:q})=>Iy({derivationPath:v,phrase:q,tronWeb:Z})).with({signer:x.P.any},({signer:q})=>Promise.resolve(q)).otherwise(()=>Promise.resolve(void 0)),F=async()=>{if(!X)throw new y.SwapKitError("toolbox_tron_no_signer");return await X.getAddress()},V=()=>{return 1e8},D=async()=>{try{let q=await Z.trx.getChainParameters(),z={};for(let _ of q)z[_.key]=_.value;return{bandwidthFee:z.getTransactionFee||1000,createAccountFee:z.getCreateAccountFee||1e5,energyFee:z.getEnergyFee||420}}catch{return{bandwidthFee:1000,createAccountFee:1e5,energyFee:420}}},s=async(q)=>{try{let z=await Z.trx.getAccount(q);return z&&Object.keys(z).length>0}catch{return!1}},a=async(q)=>{try{let z=await Z.trx.getAccountResources(q);return{bandwidth:{free:z.freeNetLimit-z.freeNetUsed,total:z.NetLimit||0,used:z.NetUsed||0},energy:{total:z.EnergyLimit||0,used:z.EnergyUsed||0}}}catch{return{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}},e=async(q,z)=>{try{let _=Z.contract(C,z);if(!_.methods?.balanceOf)return 0n;let[J]=await _.methods.balanceOf(q).call();return J?typeof J==="bigint"?J:BigInt(J):0n}catch(_){let J=_ instanceof Error?_.message:String(_);return console.warn(`balanceOf() failed for ${z}: ${J}`),0n}},r=async(q,z)=>{try{Z.setAddress(z);let _=Z.contract(C,q),[J,u]=await Promise.all([_.symbol().call().catch(()=>"UNKNOWN"),_.decimals().call().catch(()=>"18")]);return{decimals:Number(u??18),symbol:J??"UNKNOWN"}}catch(_){return y.warnOnce({condition:!0,id:"tron_toolbox_get_token_metadata_failed",warning:`Failed to get token metadata for ${q}: ${_ instanceof Error?_.message:_}`}),null}},yy=async(q,z=!0)=>{let _=[y.AssetValue.from({chain:y.Chain.Tron})];try{let J=await i(q);if(J){let u=[];u.push(y.AssetValue.from({chain:y.Chain.Tron,fromBaseDecimal:6,value:J.balance}));for(let Y of J.trc20){let[U,I]=Object.entries(Y)[0]||[];if(!(U&&I))continue;let G=await r(U,q);if(!G)continue;u.push(y.AssetValue.from({asset:`TRON.${G.symbol}-${U}`,fromBaseDecimal:G.decimals,value:BigInt(I||0)}))}return u}return _}catch(J){y.warnOnce({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${J instanceof Error?J.message:J}`});try{let u=[],Y=await Z.trx.getBalance(q);if(Y&&Number(Y)>0)u.push(y.AssetValue.from({chain:y.Chain.Tron,fromBaseDecimal:6,value:Y}));let U=await e(q,t);if(U)u.push(y.AssetValue.from({asset:`TRON.USDT-${t}`,fromBaseDecimal:6,value:U}));if(u.length===0)return _;return u}catch(u){let Y=u instanceof Error?u.message:String(u);return console.error(`Tron balance fetch failed: ${Y}`),_}}},fy=async({recipient:q,assetValue:z,memo:_,expiration:J})=>{if(!X)throw new y.SwapKitError("toolbox_tron_no_signer");let u=await F();Z.setAddress(u);let Y=await E({assetValue:z,expiration:J,memo:_,recipient:q,sender:u}),U=await X.signTransaction(Y),{txid:I}=await Z.trx.sendRawTransaction(U);if(!I)throw new y.SwapKitError("toolbox_tron_token_transfer_failed");return I},uy=async({assetValue:q,recipient:z,sender:_})=>{let J=q.isGasAsset;try{let u=_?_:X?await F():void 0;if(!u)return J?y.AssetValue.from({chain:y.Chain.Tron,fromBaseDecimal:0,value:0.1}):y.AssetValue.from({chain:y.Chain.Tron,fromBaseDecimal:0,value:15});let Y=await D(),I=await s(z)?0:Y.createAccountFee,G=await a(u);if(J){let B=Gy,w=G.bandwidth.free+(G.bandwidth.total-G.bandwidth.used),W=0;if(B>w)W=(B-w)*Y.bandwidthFee;let Jy=I+W;return y.AssetValue.from({chain:y.Chain.Tron,fromBaseDecimal:y.BaseDecimal.TRON,value:Jy})}let L=My,O=Ly,p=G.bandwidth.free+(G.bandwidth.total-G.bandwidth.used),H=G.energy.total-G.energy.used,K=0;if(L>p)K=(L-p)*Y.bandwidthFee;let g=0;if(O>H)g=(O-H)*Y.energyFee;let zy=I+K+g;return y.AssetValue.from({chain:y.Chain.Tron,fromBaseDecimal:y.BaseDecimal.TRON,value:zy})}catch(u){throw y.warnOnce({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee, using conservative estimate: ${u instanceof Error?u.message:u}`}),new y.SwapKitError("toolbox_tron_fee_estimation_failed",{error:u})}},E=async(q)=>{let{recipient:z,assetValue:_,memo:J,sender:u,expiration:Y}=q,U=_.isGasAsset,I=async({transaction:L,memo:O,expiration:p})=>{let H=O?await Z.transactionBuilder.addUpdateData(L,O,"utf8"):L;return p?await Z.transactionBuilder.extendExpiration(H,p):H};if(U){let L=await Z.transactionBuilder.sendTrx(z,_.getBaseValue("number"),u);return I({expiration:Y,memo:J,transaction:L})}Z.setAddress(u);let G=_.address;if(!G)throw new y.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:_.toString()});try{let O=[{type:"address",value:z},{type:"uint256",value:_.getBaseValue("string")}],p={callValue:0,feeLimit:V()},{transaction:H}=await Z.transactionBuilder.triggerSmartContract(G,"transfer(address,uint256)",p,O,u);return I({expiration:Y,memo:J,transaction:H})}catch(L){throw new y.SwapKitError("toolbox_tron_transaction_creation_failed",{message:"Failed to create TRC20 transaction.",originalError:L instanceof Error?L.message:String(L)})}},_y=async(q)=>{if(!X)throw new y.SwapKitError("toolbox_tron_no_signer");return await X.signTransaction(q)},qy=async(q)=>{let{txid:z}=await Z.trx.sendRawTransaction(q);return z},S=async({assetAddress:q,spenderAddress:z,from:_})=>{try{let J=Z.contract(C,q);if(!J.methods?.allowance)throw new y.SwapKitError("toolbox_tron_invalid_token_contract");let[u]=await J.methods.allowance(_,z).call();return u?typeof u==="bigint"?u:BigInt(u):0n}catch(J){throw new y.SwapKitError("toolbox_tron_allowance_check_failed",{error:J})}};return{approve:async({assetAddress:q,spenderAddress:z,amount:_,from:J})=>{if(!X)throw new y.SwapKitError("toolbox_tron_no_signer");let u=J||await F(),Y=_!==void 0?BigInt(_).toString():Uy,U="approve(address,uint256)",I=[{type:"address",value:z},{type:"uint256",value:Y}],L={callValue:0,feeLimit:V()};try{let{transaction:O}=await Z.transactionBuilder.triggerSmartContract(q,U,L,I,u),p=await X.signTransaction(O),{txid:H}=await Z.trx.sendRawTransaction(p);if(!H)throw new y.SwapKitError("toolbox_tron_approve_failed");return H}catch(O){throw new y.SwapKitError("toolbox_tron_approve_failed",{error:O})}},broadcastTransaction:qy,createTransaction:E,estimateTransactionFee:uy,getAddress:F,getApprovedAmount:S,getBalance:yy,isApproved:async({assetAddress:q,spenderAddress:z,from:_,amount:J})=>{let u=await S({assetAddress:q,from:_,spenderAddress:z});if(!J)return u>0n;let Y=BigInt(J);return u>=Y},signTransaction:_y,transfer:fy,tronWeb:Z,validateAddress:await N()}};var d=R(()=>{T();n();y=require("@uswap/helpers"),x=require("ts-pattern")});var Oy={};Yy(Oy,{trc20ABI:()=>C,getTronPrivateKeyFromMnemonic:()=>c,getTronAddressValidator:()=>N,createTronToolbox:()=>o});module.exports=jy(Oy);var Hy=R(()=>{T();d()});Hy();
1
+ var Qy=Object.create;var{getPrototypeOf:Zy,defineProperty:P,getOwnPropertyNames:l,getOwnPropertyDescriptor:$y}=Object,A=Object.prototype.hasOwnProperty;var m=(f,Q,j)=>{j=f!=null?Qy(Zy(f)):{};let $=Q||!f||!f.__esModule?P(j,"default",{value:f,enumerable:!0}):j;for(let M of l(f))if(!A.call($,M))P($,M,{get:()=>f[M],enumerable:!0});return $},b=new WeakMap,jy=(f)=>{var Q=b.get(f),j;if(Q)return Q;if(Q=P({},"__esModule",{value:!0}),f&&typeof f==="object"||typeof f==="function")l(f).map(($)=>!A.call(Q,$)&&P(Q,$,{get:()=>f[$],enumerable:!(j=$y(f,$))||j.enumerable}));return b.set(f,Q),Q};var Yy=(f,Q)=>{for(var j in Q)P(f,j,{get:Q[j],enumerable:!0,configurable:!0,set:($)=>Q[j]=()=>$})};var R=(f,Q)=>()=>(f&&(Q=f(f=0)),Q);var C;var T=R(()=>{C=[{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"remaining",type:"uint256"}],stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{anonymous:!1,inputs:[{indexed:!0,name:"_from",type:"address"},{indexed:!0,name:"_to",type:"address"},{indexed:!1,name:"_value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"_owner",type:"address"},{indexed:!0,name:"_spender",type:"address"},{indexed:!1,name:"_value",type:"uint256"}],name:"Approval",type:"event"}]});async function i(f){let Q=await import("tronweb"),j=Q.TronWeb??Q.default?.TronWeb;try{let $=await fetch(`${Xy}/v1/accounts/${f}`);if(!$.ok)throw Error(`TronGrid API error: ${$.status} ${$.statusText}`);let M=await $.json();if(!(M.success&&M.data)||M.data.length===0)throw Error("Invalid response from TronGrid API");let Z;try{Z=j.address.toHex(f).toLowerCase()}catch{Z=f.toLowerCase()}let k=M.data.find((v)=>{return v.address.toLowerCase()===Z});if(!k)return;return{balance:k.balance,trc20:k.trc20||[]}}catch($){throw new h.USwapError("toolbox_tron_trongrid_api_error",{address:f,message:$ instanceof Error?$.message:"Unknown error"})}}var h,Xy="https://api.trongrid.io";var t=R(()=>{h=require("@uswap/helpers")});async function N(){let f=await import("tronweb"),Q=f.TronWeb??f.default?.TronWeb;return(j)=>{return Q.isAddress(j)}}async function c({phrase:f,derivationPath:Q,index:j}){let $=Q||y.derivationPathToString(y.updateDerivationPath(y.NetworkDerivationPath[y.Chain.Tron],{index:j||0})),{HDKey:M}=await import("@scure/bip32"),{mnemonicToSeedSync:Z}=await import("@scure/bip39"),k=Z(f),X=M.fromMasterSeed(k).derive($);if(!X.privateKey)throw new y.USwapError("toolbox_tron_no_signer");return Buffer.from(X.privateKey).toString("hex")}async function Iy({phrase:f,derivationPath:Q,tronWeb:j}){let{HDKey:$}=await import("@scure/bip32"),{mnemonicToSeedSync:M}=await import("@scure/bip39"),Z=M(f),v=$.fromMasterSeed(Z).derive(Q);if(!v.privateKey)throw new y.USwapError("toolbox_tron_no_signer");let X=Buffer.from(v.privateKey).toString("hex");j.setPrivateKey(X);let F=j?.address.fromPrivateKey(X);return{getAddress:()=>Promise.resolve(typeof F==="string"?F:""),signTransaction:async(V)=>{return await j.trx.sign(V,X)}}}var y,x,Gy=268,Ly=13000,My=345,n="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",Ky="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",o=async(f={})=>{let Q=await import("tronweb"),j=Q.TronWeb??Q.default?.TronWeb,$=await y.getRPCUrl(y.Chain.Tron),M=void 0,Z=new j({fullHost:$,headers:void 0}),k="index"in f?f.index||0:0,v=y.derivationPathToString("derivationPath"in f&&f.derivationPath?f.derivationPath:y.updateDerivationPath(y.NetworkDerivationPath[y.Chain.Tron],{index:k})),X=await x.match(f).with({phrase:x.P.string},async({phrase:q})=>Iy({derivationPath:v,phrase:q,tronWeb:Z})).with({signer:x.P.any},({signer:q})=>Promise.resolve(q)).otherwise(()=>Promise.resolve(void 0)),F=async()=>{if(!X)throw new y.USwapError("toolbox_tron_no_signer");return await X.getAddress()},V=()=>{return 1e8},D=async()=>{try{let q=await Z.trx.getChainParameters(),z={};for(let _ of q)z[_.key]=_.value;return{bandwidthFee:z.getTransactionFee||1000,createAccountFee:z.getCreateAccountFee||1e5,energyFee:z.getEnergyFee||420}}catch{return{bandwidthFee:1000,createAccountFee:1e5,energyFee:420}}},s=async(q)=>{try{let z=await Z.trx.getAccount(q);return z&&Object.keys(z).length>0}catch{return!1}},a=async(q)=>{try{let z=await Z.trx.getAccountResources(q);return{bandwidth:{free:z.freeNetLimit-z.freeNetUsed,total:z.NetLimit||0,used:z.NetUsed||0},energy:{total:z.EnergyLimit||0,used:z.EnergyUsed||0}}}catch{return{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}},e=async(q,z)=>{try{let _=Z.contract(C,z);if(!_.methods?.balanceOf)return 0n;let[J]=await _.methods.balanceOf(q).call();return J?typeof J==="bigint"?J:BigInt(J):0n}catch(_){let J=_ instanceof Error?_.message:String(_);return console.warn(`balanceOf() failed for ${z}: ${J}`),0n}},r=async(q,z)=>{try{Z.setAddress(z);let _=Z.contract(C,q),[J,u]=await Promise.all([_.symbol().call().catch(()=>"UNKNOWN"),_.decimals().call().catch(()=>"18")]);return{decimals:Number(u??18),symbol:J??"UNKNOWN"}}catch(_){return y.warnOnce({condition:!0,id:"tron_toolbox_get_token_metadata_failed",warning:`Failed to get token metadata for ${q}: ${_ instanceof Error?_.message:_}`}),null}},yy=async(q,z=!0)=>{let _=[y.AssetValue.from({chain:y.Chain.Tron})];try{let J=await i(q);if(J){let u=[];u.push(y.AssetValue.from({chain:y.Chain.Tron,fromBaseDecimal:6,value:J.balance}));for(let Y of J.trc20){let[K,I]=Object.entries(Y)[0]||[];if(!(K&&I))continue;let G=await r(K,q);if(!G)continue;u.push(y.AssetValue.from({asset:`TRON.${G.symbol}-${K}`,fromBaseDecimal:G.decimals,value:BigInt(I||0)}))}return u}return _}catch(J){y.warnOnce({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${J instanceof Error?J.message:J}`});try{let u=[],Y=await Z.trx.getBalance(q);if(Y&&Number(Y)>0)u.push(y.AssetValue.from({chain:y.Chain.Tron,fromBaseDecimal:6,value:Y}));let K=await e(q,n);if(K)u.push(y.AssetValue.from({asset:`TRON.USDT-${n}`,fromBaseDecimal:6,value:K}));if(u.length===0)return _;return u}catch(u){let Y=u instanceof Error?u.message:String(u);return console.error(`Tron balance fetch failed: ${Y}`),_}}},fy=async({recipient:q,assetValue:z,memo:_,expiration:J})=>{if(!X)throw new y.USwapError("toolbox_tron_no_signer");let u=await F();Z.setAddress(u);let Y=await E({assetValue:z,expiration:J,memo:_,recipient:q,sender:u}),K=await X.signTransaction(Y),{txid:I}=await Z.trx.sendRawTransaction(K);if(!I)throw new y.USwapError("toolbox_tron_token_transfer_failed");return I},uy=async({assetValue:q,recipient:z,sender:_})=>{let J=q.isGasAsset;try{let u=_?_:X?await F():void 0;if(!u)return J?y.AssetValue.from({chain:y.Chain.Tron,fromBaseDecimal:0,value:0.1}):y.AssetValue.from({chain:y.Chain.Tron,fromBaseDecimal:0,value:15});let Y=await D(),I=await s(z)?0:Y.createAccountFee,G=await a(u);if(J){let B=Gy,w=G.bandwidth.free+(G.bandwidth.total-G.bandwidth.used),W=0;if(B>w)W=(B-w)*Y.bandwidthFee;let Jy=I+W;return y.AssetValue.from({chain:y.Chain.Tron,fromBaseDecimal:y.BaseDecimal.TRON,value:Jy})}let L=My,O=Ly,p=G.bandwidth.free+(G.bandwidth.total-G.bandwidth.used),H=G.energy.total-G.energy.used,U=0;if(L>p)U=(L-p)*Y.bandwidthFee;let g=0;if(O>H)g=(O-H)*Y.energyFee;let zy=I+U+g;return y.AssetValue.from({chain:y.Chain.Tron,fromBaseDecimal:y.BaseDecimal.TRON,value:zy})}catch(u){throw y.warnOnce({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee, using conservative estimate: ${u instanceof Error?u.message:u}`}),new y.USwapError("toolbox_tron_fee_estimation_failed",{error:u})}},E=async(q)=>{let{recipient:z,assetValue:_,memo:J,sender:u,expiration:Y}=q,K=_.isGasAsset,I=async({transaction:L,memo:O,expiration:p})=>{let H=O?await Z.transactionBuilder.addUpdateData(L,O,"utf8"):L;return p?await Z.transactionBuilder.extendExpiration(H,p):H};if(K){let L=await Z.transactionBuilder.sendTrx(z,_.getBaseValue("number"),u);return I({expiration:Y,memo:J,transaction:L})}Z.setAddress(u);let G=_.address;if(!G)throw new y.USwapError("toolbox_tron_invalid_token_identifier",{identifier:_.toString()});try{let O=[{type:"address",value:z},{type:"uint256",value:_.getBaseValue("string")}],p={callValue:0,feeLimit:V()},{transaction:H}=await Z.transactionBuilder.triggerSmartContract(G,"transfer(address,uint256)",p,O,u);return I({expiration:Y,memo:J,transaction:H})}catch(L){throw new y.USwapError("toolbox_tron_transaction_creation_failed",{message:"Failed to create TRC20 transaction.",originalError:L instanceof Error?L.message:String(L)})}},_y=async(q)=>{if(!X)throw new y.USwapError("toolbox_tron_no_signer");return await X.signTransaction(q)},qy=async(q)=>{let{txid:z}=await Z.trx.sendRawTransaction(q);return z},S=async({assetAddress:q,spenderAddress:z,from:_})=>{try{let J=Z.contract(C,q);if(!J.methods?.allowance)throw new y.USwapError("toolbox_tron_invalid_token_contract");let[u]=await J.methods.allowance(_,z).call();return u?typeof u==="bigint"?u:BigInt(u):0n}catch(J){throw new y.USwapError("toolbox_tron_allowance_check_failed",{error:J})}};return{approve:async({assetAddress:q,spenderAddress:z,amount:_,from:J})=>{if(!X)throw new y.USwapError("toolbox_tron_no_signer");let u=J||await F(),Y=_!==void 0?BigInt(_).toString():Ky,K="approve(address,uint256)",I=[{type:"address",value:z},{type:"uint256",value:Y}],L={callValue:0,feeLimit:V()};try{let{transaction:O}=await Z.transactionBuilder.triggerSmartContract(q,K,L,I,u),p=await X.signTransaction(O),{txid:H}=await Z.trx.sendRawTransaction(p);if(!H)throw new y.USwapError("toolbox_tron_approve_failed");return H}catch(O){throw new y.USwapError("toolbox_tron_approve_failed",{error:O})}},broadcastTransaction:qy,createTransaction:E,estimateTransactionFee:uy,getAddress:F,getApprovedAmount:S,getBalance:yy,isApproved:async({assetAddress:q,spenderAddress:z,from:_,amount:J})=>{let u=await S({assetAddress:q,from:_,spenderAddress:z});if(!J)return u>0n;let Y=BigInt(J);return u>=Y},signTransaction:_y,transfer:fy,tronWeb:Z,validateAddress:await N()}};var d=R(()=>{T();t();y=require("@uswap/helpers"),x=require("ts-pattern")});var Oy={};Yy(Oy,{trc20ABI:()=>C,getTronPrivateKeyFromMnemonic:()=>c,getTronAddressValidator:()=>N,createTronToolbox:()=>o});module.exports=jy(Oy);var Hy=R(()=>{T();d()});Hy();
2
2
 
3
- //# debugId=DED39FCCCC275F7F64756E2164756E21
3
+ //# debugId=8B1B2BC1DA3EDC0964756E2164756E21
4
4
  //# sourceMappingURL=index.cjs.map
@@ -3,11 +3,11 @@
3
3
  "sources": ["../src/tron/helpers/trc20.abi.ts", "../src/tron/helpers/trongrid.ts", "../src/tron/toolbox.ts", "../src/tron/index.ts"],
4
4
  "sourcesContent": [
5
5
  "export const trc20ABI = [\n {\n constant: true,\n inputs: [{ name: \"_owner\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"balance\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"_to\", type: \"address\" },\n { name: \"_value\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ name: \"success\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [{ name: \"\", type: \"uint8\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"symbol\",\n outputs: [{ name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"name\",\n outputs: [{ name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n { name: \"_owner\", type: \"address\" },\n { name: \"_spender\", type: \"address\" },\n ],\n name: \"allowance\",\n outputs: [{ name: \"remaining\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"_spender\", type: \"address\" },\n { name: \"_value\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [{ name: \"success\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"totalSupply\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"_from\", type: \"address\" },\n { name: \"_to\", type: \"address\" },\n { name: \"_value\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [{ name: \"success\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"_from\", type: \"address\" },\n { indexed: true, name: \"_to\", type: \"address\" },\n { indexed: false, name: \"_value\", type: \"uint256\" },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"_owner\", type: \"address\" },\n { indexed: true, name: \"_spender\", type: \"address\" },\n { indexed: false, name: \"_value\", type: \"uint256\" },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n] as const;\n",
6
- "import { SwapKitError } from \"@uswap/helpers\";\nimport type { TronGridAccountResponse } from \"../types\";\n\nconst TRONGRID_API_BASE = \"https://api.trongrid.io\";\n\n/**\n * Fetch account information including TRC20 balances from TronGrid API\n */\nexport async function fetchAccountFromTronGrid(address: string) {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n\n try {\n const response = await fetch(`${TRONGRID_API_BASE}/v1/accounts/${address}`);\n\n if (!response.ok) {\n throw new Error(`TronGrid API error: ${response.status} ${response.statusText}`);\n }\n\n const data = (await response.json()) as TronGridAccountResponse;\n\n if (!(data.success && data.data) || data.data.length === 0) {\n throw new Error(\"Invalid response from TronGrid API\");\n }\n\n // Convert search address to hex format for comparison\n let searchAddressHex: string;\n try {\n // If address is base58, convert to hex\n searchAddressHex = TronWeb.address.toHex(address).toLowerCase();\n } catch {\n // If conversion fails, assume it's already hex\n searchAddressHex = address.toLowerCase();\n }\n\n // Find the account that matches the requested address\n const account = data.data.find((acc) => {\n return acc.address.toLowerCase() === searchAddressHex;\n });\n\n if (!account) {\n return;\n }\n\n // Return simplified object with balance and trc20 array\n return { balance: account.balance, trc20: account.trc20 || [] };\n } catch (error) {\n throw new SwapKitError(\"toolbox_tron_trongrid_api_error\", {\n address,\n message: error instanceof Error ? error.message : \"Unknown error\",\n });\n }\n}\n",
7
- "import {\n AssetValue,\n BaseDecimal,\n Chain,\n derivationPathToString,\n getRPCUrl,\n NetworkDerivationPath,\n SwapKitError,\n updateDerivationPath,\n warnOnce,\n} from \"@uswap/helpers\";\nimport type { TronWeb } from \"tronweb\";\nimport { match, P } from \"ts-pattern\";\nimport { trc20ABI } from \"./helpers/trc20.abi\";\nimport { fetchAccountFromTronGrid } from \"./helpers/trongrid\";\nimport type {\n TronApprovedParams,\n TronApproveParams,\n TronCreateTransactionParams,\n TronIsApprovedParams,\n TronSignedTransaction,\n TronSigner,\n TronToolboxOptions,\n TronTransaction,\n TronTransferParams,\n} from \"./types\";\n\n// Constants for TRON resource calculation\nconst TRX_TRANSFER_BANDWIDTH = 268; // Bandwidth consumed by a TRX transfer\nconst TRC20_TRANSFER_ENERGY = 13000; // Average energy consumed by TRC20 transfer\nconst TRC20_TRANSFER_BANDWIDTH = 345; // Bandwidth consumed by TRC20 transfer\n\n// Known TRON tokens\nconst TRON_USDT_CONTRACT = \"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\";\n\nconst MAX_APPROVAL = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\nexport async function getTronAddressValidator() {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n\n return (address: string) => {\n return TronWeb.isAddress(address);\n };\n}\n\nexport async function getTronPrivateKeyFromMnemonic({\n phrase,\n derivationPath: customPath,\n index,\n}: {\n phrase: string;\n derivationPath?: string;\n index?: number;\n}) {\n const derivationPathToUse =\n customPath ||\n derivationPathToString(updateDerivationPath(NetworkDerivationPath[Chain.Tron], { index: index || 0 }));\n\n const { HDKey } = await import(\"@scure/bip32\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n const derived = hdKey.derive(derivationPathToUse);\n\n if (!derived.privateKey) {\n throw new SwapKitError(\"toolbox_tron_no_signer\");\n }\n\n return Buffer.from(derived.privateKey).toString(\"hex\");\n}\n\nasync function createKeysForPath({\n phrase,\n derivationPath,\n tronWeb,\n}: {\n phrase: string;\n derivationPath: string;\n tronWeb: TronWeb;\n}) {\n const { HDKey } = await import(\"@scure/bip32\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n const derived = hdKey.derive(derivationPath);\n\n if (!derived.privateKey) {\n throw new SwapKitError(\"toolbox_tron_no_signer\");\n }\n\n // Convert private key to hex string for TronWeb\n const privateKeyHex = Buffer.from(derived.privateKey).toString(\"hex\");\n\n tronWeb.setPrivateKey(privateKeyHex);\n\n const address = tronWeb?.address.fromPrivateKey(privateKeyHex);\n\n return {\n getAddress: () => Promise.resolve(typeof address === \"string\" ? address : \"\"),\n signTransaction: async (transaction: TronTransaction) => {\n const signedTx = await tronWeb.trx.sign(transaction, privateKeyHex);\n return signedTx;\n },\n };\n}\n\nexport const createTronToolbox = async (\n options: TronToolboxOptions = {},\n): Promise<{\n tronWeb: TronWeb;\n getAddress: () => Promise<string>;\n validateAddress: (address: string) => boolean;\n getBalance: (address: string) => Promise<AssetValue[]>;\n transfer: (params: TronTransferParams) => Promise<string>;\n estimateTransactionFee: (params: TronTransferParams & { sender?: string }) => Promise<AssetValue>;\n createTransaction: (params: TronCreateTransactionParams) => Promise<TronTransaction>;\n signTransaction: (transaction: TronTransaction) => Promise<TronSignedTransaction>;\n broadcastTransaction: (signedTransaction: TronSignedTransaction) => Promise<string>;\n approve: (params: TronApproveParams) => Promise<string>;\n isApproved: (params: TronIsApprovedParams) => Promise<boolean>;\n getApprovedAmount: (params: TronApprovedParams) => Promise<bigint>;\n}> => {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n\n const rpcUrl = await getRPCUrl(Chain.Tron);\n // Note: TRON API key support can be added to SKConfig apiKeys when needed\n const headers = undefined; // No API key needed for basic TronGrid access\n\n const tronWeb = new TronWeb({ fullHost: rpcUrl, headers });\n\n // Handle derivation path and index\n const index = \"index\" in options ? options.index || 0 : 0;\n const derivationPath = derivationPathToString(\n \"derivationPath\" in options && options.derivationPath\n ? options.derivationPath\n : updateDerivationPath(NetworkDerivationPath[Chain.Tron], { index }),\n );\n\n // Create signer based on options using pattern matching\n const signer: TronSigner | undefined = await match(options)\n .with({ phrase: P.string }, async ({ phrase }) => createKeysForPath({ derivationPath, phrase, tronWeb }))\n .with({ signer: P.any }, ({ signer }) => Promise.resolve(signer as TronSigner))\n .otherwise(() => Promise.resolve(undefined));\n\n const getAddress = async () => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n return await signer.getAddress();\n };\n\n const calculateFeeLimit = () => {\n return 100_000_000; // 100 TRX in SUN\n };\n\n /**\n * Get current chain parameters including resource prices\n */\n const getChainParameters = async () => {\n try {\n const parameters = await tronWeb.trx.getChainParameters();\n const paramMap: Record<string, number> = {};\n\n for (const param of parameters) {\n paramMap[param.key] = param.value;\n }\n\n return {\n bandwidthFee: paramMap.getTransactionFee || 1000, // SUN per bandwidth unit\n createAccountFee: paramMap.getCreateAccountFee || 100000, // 0.1 TRX in SUN\n energyFee: paramMap.getEnergyFee || 420, // SUN per energy unit\n };\n } catch {\n // Return default values if unable to fetch\n return { bandwidthFee: 1000, createAccountFee: 100000, energyFee: 420 };\n }\n };\n\n /**\n * Check if an address exists on the blockchain\n */\n const accountExists = async (address: string) => {\n try {\n const account = await tronWeb.trx.getAccount(address);\n return account && Object.keys(account).length > 0;\n } catch {\n return false;\n }\n };\n\n /**\n * Get account resources (bandwidth and energy)\n */\n const getAccountResources = async (address: string) => {\n try {\n const resources = await tronWeb.trx.getAccountResources(address);\n\n return {\n bandwidth: {\n free: resources.freeNetLimit - resources.freeNetUsed,\n total: resources.NetLimit || 0,\n used: resources.NetUsed || 0,\n },\n energy: { total: resources.EnergyLimit || 0, used: resources.EnergyUsed || 0 },\n };\n } catch {\n // Return default structure if unable to fetch\n return {\n bandwidth: { free: 600, total: 0, used: 0 }, // 600 free bandwidth daily\n energy: { total: 0, used: 0 },\n };\n }\n };\n\n /**\n * Get token balance and info directly from contract\n */\n const fetchTokenBalance = async (address: string, contractAddress: string) => {\n try {\n const contract = tronWeb.contract(trc20ABI, contractAddress);\n\n if (!contract.methods?.balanceOf) {\n return 0n;\n }\n\n const [balance] = await contract.methods.balanceOf(address).call();\n\n return balance ? (typeof balance === \"bigint\" ? balance : BigInt(balance)) : 0n;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n console.warn(`balanceOf() failed for ${contractAddress}: ${errorMessage}`);\n return 0n;\n }\n };\n\n /**\n * Get token balance and info directly from contract\n */\n const fetchTokenMetadata = async (contractAddress: string, address: string) => {\n try {\n tronWeb.setAddress(address); // Set address for contract calls\n const contract = tronWeb.contract(trc20ABI, contractAddress);\n\n const [symbolRaw, decimalsRaw] = await Promise.all([\n contract\n .symbol()\n .call()\n .catch(() => \"UNKNOWN\"),\n contract\n .decimals()\n .call()\n .catch(() => \"18\"),\n ]);\n\n return { decimals: Number(decimalsRaw ?? 18), symbol: symbolRaw ?? \"UNKNOWN\" };\n } catch (error) {\n warnOnce({\n condition: true,\n id: \"tron_toolbox_get_token_metadata_failed\",\n warning: `Failed to get token metadata for ${contractAddress}: ${\n error instanceof Error ? error.message : error\n }`,\n });\n return null;\n }\n };\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO\n const getBalance = async (address: string, _scamFilter = true) => {\n const fallbackBalance = [AssetValue.from({ chain: Chain.Tron })];\n // Try primary source (TronGrid)\n try {\n const accountData = await fetchAccountFromTronGrid(address);\n if (accountData) {\n const balances: AssetValue[] = [];\n\n // Add TRX balance\n balances.push(AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 6, value: accountData.balance }));\n\n // Add TRC20 balances\n\n for (const token of accountData.trc20) {\n const [contractAddress, balance] = Object.entries(token)[0] || [];\n\n if (!(contractAddress && balance)) continue;\n\n const tokenMetaData = await fetchTokenMetadata(contractAddress, address);\n\n if (!tokenMetaData) continue;\n\n balances.push(\n AssetValue.from({\n asset: `TRON.${tokenMetaData.symbol}-${contractAddress}`,\n fromBaseDecimal: tokenMetaData.decimals,\n value: BigInt(balance || 0),\n }),\n );\n }\n\n return balances;\n }\n return fallbackBalance;\n } catch (error) {\n warnOnce({\n condition: true,\n id: \"tron_toolbox_get_balance_failed\",\n warning: `Tron API getBalance failed: ${error instanceof Error ? error.message : error}`,\n });\n\n try {\n const balances: AssetValue[] = [];\n\n const trxBalanceInSun = await tronWeb.trx.getBalance(address);\n if (trxBalanceInSun && Number(trxBalanceInSun) > 0) {\n balances.push(AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 6, value: trxBalanceInSun }));\n }\n\n const usdtBalance = await fetchTokenBalance(address, TRON_USDT_CONTRACT);\n if (usdtBalance) {\n balances.push(\n AssetValue.from({ asset: `TRON.USDT-${TRON_USDT_CONTRACT}`, fromBaseDecimal: 6, value: usdtBalance }),\n );\n }\n\n if (balances.length === 0) {\n return fallbackBalance;\n }\n\n return balances;\n } catch (fallbackError) {\n const errorMessage = fallbackError instanceof Error ? fallbackError.message : String(fallbackError);\n console.error(`Tron balance fetch failed: ${errorMessage}`);\n return fallbackBalance;\n }\n }\n };\n\n const transfer = async ({ recipient, assetValue, memo, expiration }: TronTransferParams) => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n\n const from = await getAddress();\n tronWeb.setAddress(from);\n const transaction = await createTransaction({ assetValue, expiration, memo, recipient, sender: from });\n\n const signedTx = await signer.signTransaction(transaction);\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n\n if (!txid) {\n throw new SwapKitError(\"toolbox_tron_token_transfer_failed\");\n }\n\n return txid;\n };\n\n const estimateTransactionFee = async ({\n assetValue,\n recipient,\n sender,\n }: // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO\n TronTransferParams & { sender?: string }) => {\n const isNative = assetValue.isGasAsset;\n\n try {\n const senderAddress = sender ? sender : signer ? await getAddress() : undefined;\n if (!senderAddress) {\n return isNative\n ? AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 0, value: 0.1 })\n : AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 0, value: 15 });\n }\n\n const chainParams = await getChainParameters();\n\n const recipientExists = await accountExists(recipient);\n const activationFee = recipientExists ? 0 : chainParams.createAccountFee;\n\n const resources = await getAccountResources(senderAddress);\n\n if (isNative) {\n const bandwidthNeeded = TRX_TRANSFER_BANDWIDTH;\n const availableBandwidth = resources.bandwidth.free + (resources.bandwidth.total - resources.bandwidth.used);\n\n let bandwidthFee = 0;\n if (bandwidthNeeded > availableBandwidth) {\n const bandwidthToBuy = bandwidthNeeded - availableBandwidth;\n bandwidthFee = bandwidthToBuy * chainParams.bandwidthFee;\n }\n\n const totalFeeSun = activationFee + bandwidthFee;\n\n return AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: BaseDecimal.TRON, value: totalFeeSun });\n }\n\n const bandwidthNeeded = TRC20_TRANSFER_BANDWIDTH;\n const energyNeeded = TRC20_TRANSFER_ENERGY;\n\n const availableBandwidth = resources.bandwidth.free + (resources.bandwidth.total - resources.bandwidth.used);\n const availableEnergy = resources.energy.total - resources.energy.used;\n\n let bandwidthFee = 0;\n if (bandwidthNeeded > availableBandwidth) {\n const bandwidthToBuy = bandwidthNeeded - availableBandwidth;\n bandwidthFee = bandwidthToBuy * chainParams.bandwidthFee;\n }\n\n let energyFee = 0;\n if (energyNeeded > availableEnergy) {\n const energyToBuy = energyNeeded - availableEnergy;\n energyFee = energyToBuy * chainParams.energyFee;\n }\n\n const totalFeeSun = activationFee + bandwidthFee + energyFee;\n\n return AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: BaseDecimal.TRON, value: totalFeeSun });\n } catch (error) {\n warnOnce({\n condition: true,\n id: \"tron_toolbox_fee_estimation_failed\",\n warning: `Failed to calculate exact fee, using conservative estimate: ${\n error instanceof Error ? error.message : error\n }`,\n });\n\n throw new SwapKitError(\"toolbox_tron_fee_estimation_failed\", { error });\n }\n };\n\n const createTransaction = async (params: TronCreateTransactionParams) => {\n const { recipient, assetValue, memo, sender, expiration } = params;\n const isNative = assetValue.isGasAsset;\n\n const addTxData = async ({\n transaction,\n memo,\n expiration,\n }: {\n transaction: TronTransaction;\n memo?: string;\n expiration?: number;\n }) => {\n const transactionWithMemo = memo\n ? await tronWeb.transactionBuilder.addUpdateData(transaction, memo, \"utf8\")\n : transaction;\n\n const transactionFinal = expiration\n ? await tronWeb.transactionBuilder.extendExpiration(transactionWithMemo, expiration)\n : transactionWithMemo;\n\n return transactionFinal;\n };\n\n if (isNative) {\n const transaction = await tronWeb.transactionBuilder.sendTrx(\n recipient,\n assetValue.getBaseValue(\"number\"),\n sender,\n );\n\n const txWithData = addTxData({ expiration, memo, transaction });\n return txWithData;\n }\n\n tronWeb.setAddress(sender);\n const contractAddress = assetValue.address;\n if (!contractAddress) {\n throw new SwapKitError(\"toolbox_tron_invalid_token_identifier\", { identifier: assetValue.toString() });\n }\n\n try {\n const functionSelector = \"transfer(address,uint256)\";\n const parameter = [\n { type: \"address\", value: recipient },\n { type: \"uint256\", value: assetValue.getBaseValue(\"string\") },\n ];\n\n const options = { callValue: 0, feeLimit: calculateFeeLimit() };\n\n const { transaction } = await tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n functionSelector,\n options,\n parameter,\n sender,\n );\n\n const txWithData = addTxData({ expiration, memo, transaction });\n return txWithData;\n } catch (error) {\n throw new SwapKitError(\"toolbox_tron_transaction_creation_failed\", {\n message: \"Failed to create TRC20 transaction.\",\n originalError: error instanceof Error ? error.message : String(error),\n });\n }\n };\n\n const signTransaction = async (transaction: TronTransaction) => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n return await signer.signTransaction(transaction);\n };\n\n const broadcastTransaction = async (signedTx: TronSignedTransaction) => {\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n return txid;\n };\n\n const getApprovedAmount = async ({ assetAddress, spenderAddress, from }: TronApprovedParams) => {\n try {\n const contract = tronWeb.contract(trc20ABI, assetAddress);\n\n if (!contract.methods?.allowance) {\n throw new SwapKitError(\"toolbox_tron_invalid_token_contract\");\n }\n\n const [allowance] = await contract.methods.allowance(from, spenderAddress).call();\n\n return allowance ? (typeof allowance === \"bigint\" ? allowance : BigInt(allowance)) : 0n;\n } catch (error) {\n throw new SwapKitError(\"toolbox_tron_allowance_check_failed\", { error });\n }\n };\n\n const isApproved = async ({ assetAddress, spenderAddress, from, amount }: TronIsApprovedParams) => {\n const allowance = await getApprovedAmount({ assetAddress, from, spenderAddress });\n\n if (!amount) {\n return allowance > 0n;\n }\n\n const amountBigInt = BigInt(amount);\n return allowance >= amountBigInt;\n };\n\n const approve = async ({ assetAddress, spenderAddress, amount, from }: TronApproveParams) => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n\n const fromAddress = from || (await getAddress());\n const approvalAmount = amount !== undefined ? BigInt(amount).toString() : MAX_APPROVAL;\n\n const functionSelector = \"approve(address,uint256)\";\n const parameter = [\n { type: \"address\", value: spenderAddress },\n { type: \"uint256\", value: approvalAmount },\n ];\n\n const feeLimit = calculateFeeLimit();\n const options = { callValue: 0, feeLimit };\n\n try {\n const { transaction } = await tronWeb.transactionBuilder.triggerSmartContract(\n assetAddress,\n functionSelector,\n options,\n parameter,\n fromAddress,\n );\n\n const signedTx = await signer.signTransaction(transaction);\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n\n if (!txid) {\n throw new SwapKitError(\"toolbox_tron_approve_failed\");\n }\n\n return txid;\n } catch (error) {\n throw new SwapKitError(\"toolbox_tron_approve_failed\", { error });\n }\n };\n\n return {\n approve,\n broadcastTransaction,\n createTransaction,\n estimateTransactionFee,\n getAddress,\n getApprovedAmount,\n getBalance,\n isApproved,\n signTransaction,\n transfer,\n tronWeb,\n validateAddress: await getTronAddressValidator(),\n };\n};\n",
6
+ "/**\n * Based on code from SwapKit (https://github.com/swapkit/SwapKit),\n * licensed under the Apache License 2.0.\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { USwapError } from \"@uswap/helpers\";\nimport type { TronGridAccountResponse } from \"../types\";\n\nconst TRONGRID_API_BASE = \"https://api.trongrid.io\";\n\n/**\n * Fetch account information including TRC20 balances from TronGrid API\n */\nexport async function fetchAccountFromTronGrid(address: string) {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n\n try {\n const response = await fetch(`${TRONGRID_API_BASE}/v1/accounts/${address}`);\n\n if (!response.ok) {\n throw new Error(`TronGrid API error: ${response.status} ${response.statusText}`);\n }\n\n const data = (await response.json()) as TronGridAccountResponse;\n\n if (!(data.success && data.data) || data.data.length === 0) {\n throw new Error(\"Invalid response from TronGrid API\");\n }\n\n // Convert search address to hex format for comparison\n let searchAddressHex: string;\n try {\n // If address is base58, convert to hex\n searchAddressHex = TronWeb.address.toHex(address).toLowerCase();\n } catch {\n // If conversion fails, assume it's already hex\n searchAddressHex = address.toLowerCase();\n }\n\n // Find the account that matches the requested address\n const account = data.data.find((acc) => {\n return acc.address.toLowerCase() === searchAddressHex;\n });\n\n if (!account) {\n return;\n }\n\n // Return simplified object with balance and trc20 array\n return { balance: account.balance, trc20: account.trc20 || [] };\n } catch (error) {\n throw new USwapError(\"toolbox_tron_trongrid_api_error\", {\n address,\n message: error instanceof Error ? error.message : \"Unknown error\",\n });\n }\n}\n",
7
+ "/**\n * Based on code from SwapKit (https://github.com/swapkit/SwapKit),\n * licensed under the Apache License 2.0.\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport {\n AssetValue,\n BaseDecimal,\n Chain,\n derivationPathToString,\n getRPCUrl,\n NetworkDerivationPath,\n USwapError,\n updateDerivationPath,\n warnOnce,\n} from \"@uswap/helpers\";\nimport type { TronWeb } from \"tronweb\";\nimport { match, P } from \"ts-pattern\";\nimport { trc20ABI } from \"./helpers/trc20.abi\";\nimport { fetchAccountFromTronGrid } from \"./helpers/trongrid\";\nimport type {\n TronApprovedParams,\n TronApproveParams,\n TronCreateTransactionParams,\n TronIsApprovedParams,\n TronSignedTransaction,\n TronSigner,\n TronToolboxOptions,\n TronTransaction,\n TronTransferParams,\n} from \"./types\";\n\n// Constants for TRON resource calculation\nconst TRX_TRANSFER_BANDWIDTH = 268; // Bandwidth consumed by a TRX transfer\nconst TRC20_TRANSFER_ENERGY = 13000; // Average energy consumed by TRC20 transfer\nconst TRC20_TRANSFER_BANDWIDTH = 345; // Bandwidth consumed by TRC20 transfer\n\n// Known TRON tokens\nconst TRON_USDT_CONTRACT = \"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\";\n\nconst MAX_APPROVAL = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\nexport async function getTronAddressValidator() {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n\n return (address: string) => {\n return TronWeb.isAddress(address);\n };\n}\n\nexport async function getTronPrivateKeyFromMnemonic({\n phrase,\n derivationPath: customPath,\n index,\n}: {\n phrase: string;\n derivationPath?: string;\n index?: number;\n}) {\n const derivationPathToUse =\n customPath ||\n derivationPathToString(updateDerivationPath(NetworkDerivationPath[Chain.Tron], { index: index || 0 }));\n\n const { HDKey } = await import(\"@scure/bip32\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n const derived = hdKey.derive(derivationPathToUse);\n\n if (!derived.privateKey) {\n throw new USwapError(\"toolbox_tron_no_signer\");\n }\n\n return Buffer.from(derived.privateKey).toString(\"hex\");\n}\n\nasync function createKeysForPath({\n phrase,\n derivationPath,\n tronWeb,\n}: {\n phrase: string;\n derivationPath: string;\n tronWeb: TronWeb;\n}) {\n const { HDKey } = await import(\"@scure/bip32\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n const derived = hdKey.derive(derivationPath);\n\n if (!derived.privateKey) {\n throw new USwapError(\"toolbox_tron_no_signer\");\n }\n\n // Convert private key to hex string for TronWeb\n const privateKeyHex = Buffer.from(derived.privateKey).toString(\"hex\");\n\n tronWeb.setPrivateKey(privateKeyHex);\n\n const address = tronWeb?.address.fromPrivateKey(privateKeyHex);\n\n return {\n getAddress: () => Promise.resolve(typeof address === \"string\" ? address : \"\"),\n signTransaction: async (transaction: TronTransaction) => {\n const signedTx = await tronWeb.trx.sign(transaction, privateKeyHex);\n return signedTx;\n },\n };\n}\n\nexport const createTronToolbox = async (\n options: TronToolboxOptions = {},\n): Promise<{\n tronWeb: TronWeb;\n getAddress: () => Promise<string>;\n validateAddress: (address: string) => boolean;\n getBalance: (address: string) => Promise<AssetValue[]>;\n transfer: (params: TronTransferParams) => Promise<string>;\n estimateTransactionFee: (params: TronTransferParams & { sender?: string }) => Promise<AssetValue>;\n createTransaction: (params: TronCreateTransactionParams) => Promise<TronTransaction>;\n signTransaction: (transaction: TronTransaction) => Promise<TronSignedTransaction>;\n broadcastTransaction: (signedTransaction: TronSignedTransaction) => Promise<string>;\n approve: (params: TronApproveParams) => Promise<string>;\n isApproved: (params: TronIsApprovedParams) => Promise<boolean>;\n getApprovedAmount: (params: TronApprovedParams) => Promise<bigint>;\n}> => {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n\n const rpcUrl = await getRPCUrl(Chain.Tron);\n // Note: TRON API key support can be added to SKConfig apiKeys when needed\n const headers = undefined; // No API key needed for basic TronGrid access\n\n const tronWeb = new TronWeb({ fullHost: rpcUrl, headers });\n\n // Handle derivation path and index\n const index = \"index\" in options ? options.index || 0 : 0;\n const derivationPath = derivationPathToString(\n \"derivationPath\" in options && options.derivationPath\n ? options.derivationPath\n : updateDerivationPath(NetworkDerivationPath[Chain.Tron], { index }),\n );\n\n // Create signer based on options using pattern matching\n const signer: TronSigner | undefined = await match(options)\n .with({ phrase: P.string }, async ({ phrase }) => createKeysForPath({ derivationPath, phrase, tronWeb }))\n .with({ signer: P.any }, ({ signer }) => Promise.resolve(signer as TronSigner))\n .otherwise(() => Promise.resolve(undefined));\n\n const getAddress = async () => {\n if (!signer) throw new USwapError(\"toolbox_tron_no_signer\");\n return await signer.getAddress();\n };\n\n const calculateFeeLimit = () => {\n return 100_000_000; // 100 TRX in SUN\n };\n\n /**\n * Get current chain parameters including resource prices\n */\n const getChainParameters = async () => {\n try {\n const parameters = await tronWeb.trx.getChainParameters();\n const paramMap: Record<string, number> = {};\n\n for (const param of parameters) {\n paramMap[param.key] = param.value;\n }\n\n return {\n bandwidthFee: paramMap.getTransactionFee || 1000, // SUN per bandwidth unit\n createAccountFee: paramMap.getCreateAccountFee || 100000, // 0.1 TRX in SUN\n energyFee: paramMap.getEnergyFee || 420, // SUN per energy unit\n };\n } catch {\n // Return default values if unable to fetch\n return { bandwidthFee: 1000, createAccountFee: 100000, energyFee: 420 };\n }\n };\n\n /**\n * Check if an address exists on the blockchain\n */\n const accountExists = async (address: string) => {\n try {\n const account = await tronWeb.trx.getAccount(address);\n return account && Object.keys(account).length > 0;\n } catch {\n return false;\n }\n };\n\n /**\n * Get account resources (bandwidth and energy)\n */\n const getAccountResources = async (address: string) => {\n try {\n const resources = await tronWeb.trx.getAccountResources(address);\n\n return {\n bandwidth: {\n free: resources.freeNetLimit - resources.freeNetUsed,\n total: resources.NetLimit || 0,\n used: resources.NetUsed || 0,\n },\n energy: { total: resources.EnergyLimit || 0, used: resources.EnergyUsed || 0 },\n };\n } catch {\n // Return default structure if unable to fetch\n return {\n bandwidth: { free: 600, total: 0, used: 0 }, // 600 free bandwidth daily\n energy: { total: 0, used: 0 },\n };\n }\n };\n\n /**\n * Get token balance and info directly from contract\n */\n const fetchTokenBalance = async (address: string, contractAddress: string) => {\n try {\n const contract = tronWeb.contract(trc20ABI, contractAddress);\n\n if (!contract.methods?.balanceOf) {\n return 0n;\n }\n\n const [balance] = await contract.methods.balanceOf(address).call();\n\n return balance ? (typeof balance === \"bigint\" ? balance : BigInt(balance)) : 0n;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n console.warn(`balanceOf() failed for ${contractAddress}: ${errorMessage}`);\n return 0n;\n }\n };\n\n /**\n * Get token balance and info directly from contract\n */\n const fetchTokenMetadata = async (contractAddress: string, address: string) => {\n try {\n tronWeb.setAddress(address); // Set address for contract calls\n const contract = tronWeb.contract(trc20ABI, contractAddress);\n\n const [symbolRaw, decimalsRaw] = await Promise.all([\n contract\n .symbol()\n .call()\n .catch(() => \"UNKNOWN\"),\n contract\n .decimals()\n .call()\n .catch(() => \"18\"),\n ]);\n\n return { decimals: Number(decimalsRaw ?? 18), symbol: symbolRaw ?? \"UNKNOWN\" };\n } catch (error) {\n warnOnce({\n condition: true,\n id: \"tron_toolbox_get_token_metadata_failed\",\n warning: `Failed to get token metadata for ${contractAddress}: ${\n error instanceof Error ? error.message : error\n }`,\n });\n return null;\n }\n };\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO\n const getBalance = async (address: string, _scamFilter = true) => {\n const fallbackBalance = [AssetValue.from({ chain: Chain.Tron })];\n // Try primary source (TronGrid)\n try {\n const accountData = await fetchAccountFromTronGrid(address);\n if (accountData) {\n const balances: AssetValue[] = [];\n\n // Add TRX balance\n balances.push(AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 6, value: accountData.balance }));\n\n // Add TRC20 balances\n\n for (const token of accountData.trc20) {\n const [contractAddress, balance] = Object.entries(token)[0] || [];\n\n if (!(contractAddress && balance)) continue;\n\n const tokenMetaData = await fetchTokenMetadata(contractAddress, address);\n\n if (!tokenMetaData) continue;\n\n balances.push(\n AssetValue.from({\n asset: `TRON.${tokenMetaData.symbol}-${contractAddress}`,\n fromBaseDecimal: tokenMetaData.decimals,\n value: BigInt(balance || 0),\n }),\n );\n }\n\n return balances;\n }\n return fallbackBalance;\n } catch (error) {\n warnOnce({\n condition: true,\n id: \"tron_toolbox_get_balance_failed\",\n warning: `Tron API getBalance failed: ${error instanceof Error ? error.message : error}`,\n });\n\n try {\n const balances: AssetValue[] = [];\n\n const trxBalanceInSun = await tronWeb.trx.getBalance(address);\n if (trxBalanceInSun && Number(trxBalanceInSun) > 0) {\n balances.push(AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 6, value: trxBalanceInSun }));\n }\n\n const usdtBalance = await fetchTokenBalance(address, TRON_USDT_CONTRACT);\n if (usdtBalance) {\n balances.push(\n AssetValue.from({ asset: `TRON.USDT-${TRON_USDT_CONTRACT}`, fromBaseDecimal: 6, value: usdtBalance }),\n );\n }\n\n if (balances.length === 0) {\n return fallbackBalance;\n }\n\n return balances;\n } catch (fallbackError) {\n const errorMessage = fallbackError instanceof Error ? fallbackError.message : String(fallbackError);\n console.error(`Tron balance fetch failed: ${errorMessage}`);\n return fallbackBalance;\n }\n }\n };\n\n const transfer = async ({ recipient, assetValue, memo, expiration }: TronTransferParams) => {\n if (!signer) throw new USwapError(\"toolbox_tron_no_signer\");\n\n const from = await getAddress();\n tronWeb.setAddress(from);\n const transaction = await createTransaction({ assetValue, expiration, memo, recipient, sender: from });\n\n const signedTx = await signer.signTransaction(transaction);\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n\n if (!txid) {\n throw new USwapError(\"toolbox_tron_token_transfer_failed\");\n }\n\n return txid;\n };\n\n const estimateTransactionFee = async ({\n assetValue,\n recipient,\n sender,\n }: // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO\n TronTransferParams & { sender?: string }) => {\n const isNative = assetValue.isGasAsset;\n\n try {\n const senderAddress = sender ? sender : signer ? await getAddress() : undefined;\n if (!senderAddress) {\n return isNative\n ? AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 0, value: 0.1 })\n : AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 0, value: 15 });\n }\n\n const chainParams = await getChainParameters();\n\n const recipientExists = await accountExists(recipient);\n const activationFee = recipientExists ? 0 : chainParams.createAccountFee;\n\n const resources = await getAccountResources(senderAddress);\n\n if (isNative) {\n const bandwidthNeeded = TRX_TRANSFER_BANDWIDTH;\n const availableBandwidth = resources.bandwidth.free + (resources.bandwidth.total - resources.bandwidth.used);\n\n let bandwidthFee = 0;\n if (bandwidthNeeded > availableBandwidth) {\n const bandwidthToBuy = bandwidthNeeded - availableBandwidth;\n bandwidthFee = bandwidthToBuy * chainParams.bandwidthFee;\n }\n\n const totalFeeSun = activationFee + bandwidthFee;\n\n return AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: BaseDecimal.TRON, value: totalFeeSun });\n }\n\n const bandwidthNeeded = TRC20_TRANSFER_BANDWIDTH;\n const energyNeeded = TRC20_TRANSFER_ENERGY;\n\n const availableBandwidth = resources.bandwidth.free + (resources.bandwidth.total - resources.bandwidth.used);\n const availableEnergy = resources.energy.total - resources.energy.used;\n\n let bandwidthFee = 0;\n if (bandwidthNeeded > availableBandwidth) {\n const bandwidthToBuy = bandwidthNeeded - availableBandwidth;\n bandwidthFee = bandwidthToBuy * chainParams.bandwidthFee;\n }\n\n let energyFee = 0;\n if (energyNeeded > availableEnergy) {\n const energyToBuy = energyNeeded - availableEnergy;\n energyFee = energyToBuy * chainParams.energyFee;\n }\n\n const totalFeeSun = activationFee + bandwidthFee + energyFee;\n\n return AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: BaseDecimal.TRON, value: totalFeeSun });\n } catch (error) {\n warnOnce({\n condition: true,\n id: \"tron_toolbox_fee_estimation_failed\",\n warning: `Failed to calculate exact fee, using conservative estimate: ${\n error instanceof Error ? error.message : error\n }`,\n });\n\n throw new USwapError(\"toolbox_tron_fee_estimation_failed\", { error });\n }\n };\n\n const createTransaction = async (params: TronCreateTransactionParams) => {\n const { recipient, assetValue, memo, sender, expiration } = params;\n const isNative = assetValue.isGasAsset;\n\n const addTxData = async ({\n transaction,\n memo,\n expiration,\n }: {\n transaction: TronTransaction;\n memo?: string;\n expiration?: number;\n }) => {\n const transactionWithMemo = memo\n ? await tronWeb.transactionBuilder.addUpdateData(transaction, memo, \"utf8\")\n : transaction;\n\n const transactionFinal = expiration\n ? await tronWeb.transactionBuilder.extendExpiration(transactionWithMemo, expiration)\n : transactionWithMemo;\n\n return transactionFinal;\n };\n\n if (isNative) {\n const transaction = await tronWeb.transactionBuilder.sendTrx(\n recipient,\n assetValue.getBaseValue(\"number\"),\n sender,\n );\n\n const txWithData = addTxData({ expiration, memo, transaction });\n return txWithData;\n }\n\n tronWeb.setAddress(sender);\n const contractAddress = assetValue.address;\n if (!contractAddress) {\n throw new USwapError(\"toolbox_tron_invalid_token_identifier\", { identifier: assetValue.toString() });\n }\n\n try {\n const functionSelector = \"transfer(address,uint256)\";\n const parameter = [\n { type: \"address\", value: recipient },\n { type: \"uint256\", value: assetValue.getBaseValue(\"string\") },\n ];\n\n const options = { callValue: 0, feeLimit: calculateFeeLimit() };\n\n const { transaction } = await tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n functionSelector,\n options,\n parameter,\n sender,\n );\n\n const txWithData = addTxData({ expiration, memo, transaction });\n return txWithData;\n } catch (error) {\n throw new USwapError(\"toolbox_tron_transaction_creation_failed\", {\n message: \"Failed to create TRC20 transaction.\",\n originalError: error instanceof Error ? error.message : String(error),\n });\n }\n };\n\n const signTransaction = async (transaction: TronTransaction) => {\n if (!signer) throw new USwapError(\"toolbox_tron_no_signer\");\n return await signer.signTransaction(transaction);\n };\n\n const broadcastTransaction = async (signedTx: TronSignedTransaction) => {\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n return txid;\n };\n\n const getApprovedAmount = async ({ assetAddress, spenderAddress, from }: TronApprovedParams) => {\n try {\n const contract = tronWeb.contract(trc20ABI, assetAddress);\n\n if (!contract.methods?.allowance) {\n throw new USwapError(\"toolbox_tron_invalid_token_contract\");\n }\n\n const [allowance] = await contract.methods.allowance(from, spenderAddress).call();\n\n return allowance ? (typeof allowance === \"bigint\" ? allowance : BigInt(allowance)) : 0n;\n } catch (error) {\n throw new USwapError(\"toolbox_tron_allowance_check_failed\", { error });\n }\n };\n\n const isApproved = async ({ assetAddress, spenderAddress, from, amount }: TronIsApprovedParams) => {\n const allowance = await getApprovedAmount({ assetAddress, from, spenderAddress });\n\n if (!amount) {\n return allowance > 0n;\n }\n\n const amountBigInt = BigInt(amount);\n return allowance >= amountBigInt;\n };\n\n const approve = async ({ assetAddress, spenderAddress, amount, from }: TronApproveParams) => {\n if (!signer) throw new USwapError(\"toolbox_tron_no_signer\");\n\n const fromAddress = from || (await getAddress());\n const approvalAmount = amount !== undefined ? BigInt(amount).toString() : MAX_APPROVAL;\n\n const functionSelector = \"approve(address,uint256)\";\n const parameter = [\n { type: \"address\", value: spenderAddress },\n { type: \"uint256\", value: approvalAmount },\n ];\n\n const feeLimit = calculateFeeLimit();\n const options = { callValue: 0, feeLimit };\n\n try {\n const { transaction } = await tronWeb.transactionBuilder.triggerSmartContract(\n assetAddress,\n functionSelector,\n options,\n parameter,\n fromAddress,\n );\n\n const signedTx = await signer.signTransaction(transaction);\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n\n if (!txid) {\n throw new USwapError(\"toolbox_tron_approve_failed\");\n }\n\n return txid;\n } catch (error) {\n throw new USwapError(\"toolbox_tron_approve_failed\", { error });\n }\n };\n\n return {\n approve,\n broadcastTransaction,\n createTransaction,\n estimateTransactionFee,\n getAddress,\n getApprovedAmount,\n getBalance,\n isApproved,\n signTransaction,\n transfer,\n tronWeb,\n validateAddress: await getTronAddressValidator(),\n };\n};\n",
8
8
  "export { trc20ABI } from \"./helpers/trc20.abi\";\nexport {\n createTronToolbox,\n getTronAddressValidator,\n getTronPrivateKeyFromMnemonic,\n} from \"./toolbox\";\nexport type {\n TronApprovedParams,\n TronApproveParams,\n TronContract,\n TronCreateTransactionParams,\n TronIsApprovedParams,\n TronSignedTransaction,\n TronSigner,\n TronToolboxOptions,\n TronTransaction,\n TronTransferParams,\n} from \"./types\";\n\nimport type { createTronToolbox } from \"./toolbox\";\nexport type TronWallet = Awaited<ReturnType<typeof createTronToolbox>>;\n"
9
9
  ],
10
- "mappings": "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",
11
- "debugId": "DED39FCCCC275F7F64756E2164756E21",
10
+ "mappings": "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",
11
+ "debugId": "8B1B2BC1DA3EDC0964756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -1,4 +1,4 @@
1
- var Yy=Object.create;var{getPrototypeOf:Xy,defineProperty:N,getOwnPropertyNames:Gy}=Object;var Ly=Object.prototype.hasOwnProperty;var P=(u,Q,Z)=>{Z=u!=null?Yy(Xy(u)):{};let j=Q||!u||!u.__esModule?N(Z,"default",{value:u,enumerable:!0}):Z;for(let M of Gy(u))if(!Ly.call(j,M))N(j,M,{get:()=>u[M],enumerable:!0});return j};var My=(u,Q)=>{for(var Z in Q)N(u,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:(j)=>Q[Z]=()=>j})};var T=(u,Q)=>()=>(u&&(Q=u(u=0)),Q);var x=((u)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(u,{get:(Q,Z)=>(typeof require<"u"?require:Q)[Z]}):u)(function(u){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+u+'" is not supported')});var V;var D=T(()=>{V=[{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"remaining",type:"uint256"}],stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{anonymous:!1,inputs:[{indexed:!0,name:"_from",type:"address"},{indexed:!0,name:"_to",type:"address"},{indexed:!1,name:"_value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"_owner",type:"address"},{indexed:!0,name:"_spender",type:"address"},{indexed:!1,name:"_value",type:"uint256"}],name:"Approval",type:"event"}]});import{SwapKitError as Uy}from"@uswap/helpers";async function h(u){let Q=await import("tronweb"),Z=Q.TronWeb??Q.default?.TronWeb;try{let j=await fetch(`${Iy}/v1/accounts/${u}`);if(!j.ok)throw Error(`TronGrid API error: ${j.status} ${j.statusText}`);let M=await j.json();if(!(M.success&&M.data)||M.data.length===0)throw Error("Invalid response from TronGrid API");let J;try{J=Z.address.toHex(u).toLowerCase()}catch{J=u.toLowerCase()}let F=M.data.find((m)=>{return m.address.toLowerCase()===J});if(!F)return;return{balance:F.balance,trc20:F.trc20||[]}}catch(j){throw new Uy("toolbox_tron_trongrid_api_error",{address:u,message:j instanceof Error?j.message:"Unknown error"})}}var Iy="https://api.trongrid.io";var i=()=>{};import{AssetValue as v,BaseDecimal as n,Chain as p,derivationPathToString as o,getRPCUrl as Oy,NetworkDerivationPath as d,SwapKitError as L,updateDerivationPath as s,warnOnce as E}from"@uswap/helpers";import{match as Hy,P as t}from"ts-pattern";async function S(){let u=await import("tronweb"),Q=u.TronWeb??u.default?.TronWeb;return(Z)=>{return Q.isAddress(Z)}}async function a({phrase:u,derivationPath:Q,index:Z}){let j=Q||o(s(d[p.Tron],{index:Z||0})),{HDKey:M}=await import("@scure/bip32"),{mnemonicToSeedSync:J}=await import("@scure/bip39"),F=J(u),Y=M.fromMasterSeed(F).derive(j);if(!Y.privateKey)throw new L("toolbox_tron_no_signer");return Buffer.from(Y.privateKey).toString("hex")}async function my({phrase:u,derivationPath:Q,tronWeb:Z}){let{HDKey:j}=await import("@scure/bip32"),{mnemonicToSeedSync:M}=await import("@scure/bip39"),J=M(u),m=j.fromMasterSeed(J).derive(Q);if(!m.privateKey)throw new L("toolbox_tron_no_signer");let Y=Buffer.from(m.privateKey).toString("hex");Z.setPrivateKey(Y);let C=Z?.address.fromPrivateKey(Y);return{getAddress:()=>Promise.resolve(typeof C==="string"?C:""),signTransaction:async(K)=>{return await Z.trx.sign(K,Y)}}}var py=268,ky=13000,vy=345,c="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",Fy="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",e=async(u={})=>{let Q=await import("tronweb"),Z=Q.TronWeb??Q.default?.TronWeb,j=await Oy(p.Tron),M=void 0,J=new Z({fullHost:j,headers:void 0}),F="index"in u?u.index||0:0,m=o("derivationPath"in u&&u.derivationPath?u.derivationPath:s(d[p.Tron],{index:F})),Y=await Hy(u).with({phrase:t.string},async({phrase:_})=>my({derivationPath:m,phrase:_,tronWeb:J})).with({signer:t.any},({signer:_})=>Promise.resolve(_)).otherwise(()=>Promise.resolve(void 0)),C=async()=>{if(!Y)throw new L("toolbox_tron_no_signer");return await Y.getAddress()},K=()=>{return 1e8},g=async()=>{try{let _=await J.trx.getChainParameters(),q={};for(let f of _)q[f.key]=f.value;return{bandwidthFee:q.getTransactionFee||1000,createAccountFee:q.getCreateAccountFee||1e5,energyFee:q.getEnergyFee||420}}catch{return{bandwidthFee:1000,createAccountFee:1e5,energyFee:420}}},yy=async(_)=>{try{let q=await J.trx.getAccount(_);return q&&Object.keys(q).length>0}catch{return!1}},fy=async(_)=>{try{let q=await J.trx.getAccountResources(_);return{bandwidth:{free:q.freeNetLimit-q.freeNetUsed,total:q.NetLimit||0,used:q.NetUsed||0},energy:{total:q.EnergyLimit||0,used:q.EnergyUsed||0}}}catch{return{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}},uy=async(_,q)=>{try{let f=J.contract(V,q);if(!f.methods?.balanceOf)return 0n;let[z]=await f.methods.balanceOf(_).call();return z?typeof z==="bigint"?z:BigInt(z):0n}catch(f){let z=f instanceof Error?f.message:String(f);return console.warn(`balanceOf() failed for ${q}: ${z}`),0n}},_y=async(_,q)=>{try{J.setAddress(q);let f=J.contract(V,_),[z,y]=await Promise.all([f.symbol().call().catch(()=>"UNKNOWN"),f.decimals().call().catch(()=>"18")]);return{decimals:Number(y??18),symbol:z??"UNKNOWN"}}catch(f){return E({condition:!0,id:"tron_toolbox_get_token_metadata_failed",warning:`Failed to get token metadata for ${_}: ${f instanceof Error?f.message:f}`}),null}},qy=async(_,q=!0)=>{let f=[v.from({chain:p.Tron})];try{let z=await h(_);if(z){let y=[];y.push(v.from({chain:p.Tron,fromBaseDecimal:6,value:z.balance}));for(let $ of z.trc20){let[U,I]=Object.entries($)[0]||[];if(!(U&&I))continue;let X=await _y(U,_);if(!X)continue;y.push(v.from({asset:`TRON.${X.symbol}-${U}`,fromBaseDecimal:X.decimals,value:BigInt(I||0)}))}return y}return f}catch(z){E({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${z instanceof Error?z.message:z}`});try{let y=[],$=await J.trx.getBalance(_);if($&&Number($)>0)y.push(v.from({chain:p.Tron,fromBaseDecimal:6,value:$}));let U=await uy(_,c);if(U)y.push(v.from({asset:`TRON.USDT-${c}`,fromBaseDecimal:6,value:U}));if(y.length===0)return f;return y}catch(y){let $=y instanceof Error?y.message:String(y);return console.error(`Tron balance fetch failed: ${$}`),f}}},zy=async({recipient:_,assetValue:q,memo:f,expiration:z})=>{if(!Y)throw new L("toolbox_tron_no_signer");let y=await C();J.setAddress(y);let $=await w({assetValue:q,expiration:z,memo:f,recipient:_,sender:y}),U=await Y.signTransaction($),{txid:I}=await J.trx.sendRawTransaction(U);if(!I)throw new L("toolbox_tron_token_transfer_failed");return I},Jy=async({assetValue:_,recipient:q,sender:f})=>{let z=_.isGasAsset;try{let y=f?f:Y?await C():void 0;if(!y)return z?v.from({chain:p.Tron,fromBaseDecimal:0,value:0.1}):v.from({chain:p.Tron,fromBaseDecimal:0,value:15});let $=await g(),I=await yy(q)?0:$.createAccountFee,X=await fy(y);if(z){let R=py,l=X.bandwidth.free+(X.bandwidth.total-X.bandwidth.used),A=0;if(R>l)A=(R-l)*$.bandwidthFee;let jy=I+A;return v.from({chain:p.Tron,fromBaseDecimal:n.TRON,value:jy})}let G=vy,O=ky,k=X.bandwidth.free+(X.bandwidth.total-X.bandwidth.used),H=X.energy.total-X.energy.used,B=0;if(G>k)B=(G-k)*$.bandwidthFee;let b=0;if(O>H)b=(O-H)*$.energyFee;let $y=I+B+b;return v.from({chain:p.Tron,fromBaseDecimal:n.TRON,value:$y})}catch(y){throw E({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee, using conservative estimate: ${y instanceof Error?y.message:y}`}),new L("toolbox_tron_fee_estimation_failed",{error:y})}},w=async(_)=>{let{recipient:q,assetValue:f,memo:z,sender:y,expiration:$}=_,U=f.isGasAsset,I=async({transaction:G,memo:O,expiration:k})=>{let H=O?await J.transactionBuilder.addUpdateData(G,O,"utf8"):G;return k?await J.transactionBuilder.extendExpiration(H,k):H};if(U){let G=await J.transactionBuilder.sendTrx(q,f.getBaseValue("number"),y);return I({expiration:$,memo:z,transaction:G})}J.setAddress(y);let X=f.address;if(!X)throw new L("toolbox_tron_invalid_token_identifier",{identifier:f.toString()});try{let O=[{type:"address",value:q},{type:"uint256",value:f.getBaseValue("string")}],k={callValue:0,feeLimit:K()},{transaction:H}=await J.transactionBuilder.triggerSmartContract(X,"transfer(address,uint256)",k,O,y);return I({expiration:$,memo:z,transaction:H})}catch(G){throw new L("toolbox_tron_transaction_creation_failed",{message:"Failed to create TRC20 transaction.",originalError:G instanceof Error?G.message:String(G)})}},Qy=async(_)=>{if(!Y)throw new L("toolbox_tron_no_signer");return await Y.signTransaction(_)},Zy=async(_)=>{let{txid:q}=await J.trx.sendRawTransaction(_);return q},W=async({assetAddress:_,spenderAddress:q,from:f})=>{try{let z=J.contract(V,_);if(!z.methods?.allowance)throw new L("toolbox_tron_invalid_token_contract");let[y]=await z.methods.allowance(f,q).call();return y?typeof y==="bigint"?y:BigInt(y):0n}catch(z){throw new L("toolbox_tron_allowance_check_failed",{error:z})}};return{approve:async({assetAddress:_,spenderAddress:q,amount:f,from:z})=>{if(!Y)throw new L("toolbox_tron_no_signer");let y=z||await C(),$=f!==void 0?BigInt(f).toString():Fy,U="approve(address,uint256)",I=[{type:"address",value:q},{type:"uint256",value:$}],G={callValue:0,feeLimit:K()};try{let{transaction:O}=await J.transactionBuilder.triggerSmartContract(_,U,G,I,y),k=await Y.signTransaction(O),{txid:H}=await J.trx.sendRawTransaction(k);if(!H)throw new L("toolbox_tron_approve_failed");return H}catch(O){throw new L("toolbox_tron_approve_failed",{error:O})}},broadcastTransaction:Zy,createTransaction:w,estimateTransactionFee:Jy,getAddress:C,getApprovedAmount:W,getBalance:qy,isApproved:async({assetAddress:_,spenderAddress:q,from:f,amount:z})=>{let y=await W({assetAddress:_,from:f,spenderAddress:q});if(!z)return y>0n;let $=BigInt(z);return y>=$},signTransaction:Qy,transfer:zy,tronWeb:J,validateAddress:await S()}};var r=T(()=>{D();i()});var Cy={};My(Cy,{trc20ABI:()=>V,getTronPrivateKeyFromMnemonic:()=>a,getTronAddressValidator:()=>S,createTronToolbox:()=>e});var Py=T(()=>{D();r()});Py();export{V as trc20ABI,a as getTronPrivateKeyFromMnemonic,S as getTronAddressValidator,e as createTronToolbox};
1
+ var Yy=Object.create;var{getPrototypeOf:Xy,defineProperty:N,getOwnPropertyNames:Gy}=Object;var Ly=Object.prototype.hasOwnProperty;var P=(u,Q,Z)=>{Z=u!=null?Yy(Xy(u)):{};let j=Q||!u||!u.__esModule?N(Z,"default",{value:u,enumerable:!0}):Z;for(let M of Gy(u))if(!Ly.call(j,M))N(j,M,{get:()=>u[M],enumerable:!0});return j};var My=(u,Q)=>{for(var Z in Q)N(u,Z,{get:Q[Z],enumerable:!0,configurable:!0,set:(j)=>Q[Z]=()=>j})};var T=(u,Q)=>()=>(u&&(Q=u(u=0)),Q);var x=((u)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(u,{get:(Q,Z)=>(typeof require<"u"?require:Q)[Z]}):u)(function(u){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+u+'" is not supported')});var V;var D=T(()=>{V=[{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"remaining",type:"uint256"}],stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{anonymous:!1,inputs:[{indexed:!0,name:"_from",type:"address"},{indexed:!0,name:"_to",type:"address"},{indexed:!1,name:"_value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"_owner",type:"address"},{indexed:!0,name:"_spender",type:"address"},{indexed:!1,name:"_value",type:"uint256"}],name:"Approval",type:"event"}]});import{USwapError as Ky}from"@uswap/helpers";async function h(u){let Q=await import("tronweb"),Z=Q.TronWeb??Q.default?.TronWeb;try{let j=await fetch(`${Iy}/v1/accounts/${u}`);if(!j.ok)throw Error(`TronGrid API error: ${j.status} ${j.statusText}`);let M=await j.json();if(!(M.success&&M.data)||M.data.length===0)throw Error("Invalid response from TronGrid API");let J;try{J=Z.address.toHex(u).toLowerCase()}catch{J=u.toLowerCase()}let F=M.data.find((m)=>{return m.address.toLowerCase()===J});if(!F)return;return{balance:F.balance,trc20:F.trc20||[]}}catch(j){throw new Ky("toolbox_tron_trongrid_api_error",{address:u,message:j instanceof Error?j.message:"Unknown error"})}}var Iy="https://api.trongrid.io";var i=()=>{};import{AssetValue as v,BaseDecimal as t,Chain as p,derivationPathToString as o,getRPCUrl as Oy,NetworkDerivationPath as d,USwapError as L,updateDerivationPath as s,warnOnce as E}from"@uswap/helpers";import{match as Hy,P as n}from"ts-pattern";async function S(){let u=await import("tronweb"),Q=u.TronWeb??u.default?.TronWeb;return(Z)=>{return Q.isAddress(Z)}}async function a({phrase:u,derivationPath:Q,index:Z}){let j=Q||o(s(d[p.Tron],{index:Z||0})),{HDKey:M}=await import("@scure/bip32"),{mnemonicToSeedSync:J}=await import("@scure/bip39"),F=J(u),Y=M.fromMasterSeed(F).derive(j);if(!Y.privateKey)throw new L("toolbox_tron_no_signer");return Buffer.from(Y.privateKey).toString("hex")}async function my({phrase:u,derivationPath:Q,tronWeb:Z}){let{HDKey:j}=await import("@scure/bip32"),{mnemonicToSeedSync:M}=await import("@scure/bip39"),J=M(u),m=j.fromMasterSeed(J).derive(Q);if(!m.privateKey)throw new L("toolbox_tron_no_signer");let Y=Buffer.from(m.privateKey).toString("hex");Z.setPrivateKey(Y);let C=Z?.address.fromPrivateKey(Y);return{getAddress:()=>Promise.resolve(typeof C==="string"?C:""),signTransaction:async(U)=>{return await Z.trx.sign(U,Y)}}}var py=268,ky=13000,vy=345,c="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",Fy="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",e=async(u={})=>{let Q=await import("tronweb"),Z=Q.TronWeb??Q.default?.TronWeb,j=await Oy(p.Tron),M=void 0,J=new Z({fullHost:j,headers:void 0}),F="index"in u?u.index||0:0,m=o("derivationPath"in u&&u.derivationPath?u.derivationPath:s(d[p.Tron],{index:F})),Y=await Hy(u).with({phrase:n.string},async({phrase:_})=>my({derivationPath:m,phrase:_,tronWeb:J})).with({signer:n.any},({signer:_})=>Promise.resolve(_)).otherwise(()=>Promise.resolve(void 0)),C=async()=>{if(!Y)throw new L("toolbox_tron_no_signer");return await Y.getAddress()},U=()=>{return 1e8},g=async()=>{try{let _=await J.trx.getChainParameters(),q={};for(let f of _)q[f.key]=f.value;return{bandwidthFee:q.getTransactionFee||1000,createAccountFee:q.getCreateAccountFee||1e5,energyFee:q.getEnergyFee||420}}catch{return{bandwidthFee:1000,createAccountFee:1e5,energyFee:420}}},yy=async(_)=>{try{let q=await J.trx.getAccount(_);return q&&Object.keys(q).length>0}catch{return!1}},fy=async(_)=>{try{let q=await J.trx.getAccountResources(_);return{bandwidth:{free:q.freeNetLimit-q.freeNetUsed,total:q.NetLimit||0,used:q.NetUsed||0},energy:{total:q.EnergyLimit||0,used:q.EnergyUsed||0}}}catch{return{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}},uy=async(_,q)=>{try{let f=J.contract(V,q);if(!f.methods?.balanceOf)return 0n;let[z]=await f.methods.balanceOf(_).call();return z?typeof z==="bigint"?z:BigInt(z):0n}catch(f){let z=f instanceof Error?f.message:String(f);return console.warn(`balanceOf() failed for ${q}: ${z}`),0n}},_y=async(_,q)=>{try{J.setAddress(q);let f=J.contract(V,_),[z,y]=await Promise.all([f.symbol().call().catch(()=>"UNKNOWN"),f.decimals().call().catch(()=>"18")]);return{decimals:Number(y??18),symbol:z??"UNKNOWN"}}catch(f){return E({condition:!0,id:"tron_toolbox_get_token_metadata_failed",warning:`Failed to get token metadata for ${_}: ${f instanceof Error?f.message:f}`}),null}},qy=async(_,q=!0)=>{let f=[v.from({chain:p.Tron})];try{let z=await h(_);if(z){let y=[];y.push(v.from({chain:p.Tron,fromBaseDecimal:6,value:z.balance}));for(let $ of z.trc20){let[K,I]=Object.entries($)[0]||[];if(!(K&&I))continue;let X=await _y(K,_);if(!X)continue;y.push(v.from({asset:`TRON.${X.symbol}-${K}`,fromBaseDecimal:X.decimals,value:BigInt(I||0)}))}return y}return f}catch(z){E({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${z instanceof Error?z.message:z}`});try{let y=[],$=await J.trx.getBalance(_);if($&&Number($)>0)y.push(v.from({chain:p.Tron,fromBaseDecimal:6,value:$}));let K=await uy(_,c);if(K)y.push(v.from({asset:`TRON.USDT-${c}`,fromBaseDecimal:6,value:K}));if(y.length===0)return f;return y}catch(y){let $=y instanceof Error?y.message:String(y);return console.error(`Tron balance fetch failed: ${$}`),f}}},zy=async({recipient:_,assetValue:q,memo:f,expiration:z})=>{if(!Y)throw new L("toolbox_tron_no_signer");let y=await C();J.setAddress(y);let $=await w({assetValue:q,expiration:z,memo:f,recipient:_,sender:y}),K=await Y.signTransaction($),{txid:I}=await J.trx.sendRawTransaction(K);if(!I)throw new L("toolbox_tron_token_transfer_failed");return I},Jy=async({assetValue:_,recipient:q,sender:f})=>{let z=_.isGasAsset;try{let y=f?f:Y?await C():void 0;if(!y)return z?v.from({chain:p.Tron,fromBaseDecimal:0,value:0.1}):v.from({chain:p.Tron,fromBaseDecimal:0,value:15});let $=await g(),I=await yy(q)?0:$.createAccountFee,X=await fy(y);if(z){let R=py,l=X.bandwidth.free+(X.bandwidth.total-X.bandwidth.used),A=0;if(R>l)A=(R-l)*$.bandwidthFee;let jy=I+A;return v.from({chain:p.Tron,fromBaseDecimal:t.TRON,value:jy})}let G=vy,O=ky,k=X.bandwidth.free+(X.bandwidth.total-X.bandwidth.used),H=X.energy.total-X.energy.used,B=0;if(G>k)B=(G-k)*$.bandwidthFee;let b=0;if(O>H)b=(O-H)*$.energyFee;let $y=I+B+b;return v.from({chain:p.Tron,fromBaseDecimal:t.TRON,value:$y})}catch(y){throw E({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee, using conservative estimate: ${y instanceof Error?y.message:y}`}),new L("toolbox_tron_fee_estimation_failed",{error:y})}},w=async(_)=>{let{recipient:q,assetValue:f,memo:z,sender:y,expiration:$}=_,K=f.isGasAsset,I=async({transaction:G,memo:O,expiration:k})=>{let H=O?await J.transactionBuilder.addUpdateData(G,O,"utf8"):G;return k?await J.transactionBuilder.extendExpiration(H,k):H};if(K){let G=await J.transactionBuilder.sendTrx(q,f.getBaseValue("number"),y);return I({expiration:$,memo:z,transaction:G})}J.setAddress(y);let X=f.address;if(!X)throw new L("toolbox_tron_invalid_token_identifier",{identifier:f.toString()});try{let O=[{type:"address",value:q},{type:"uint256",value:f.getBaseValue("string")}],k={callValue:0,feeLimit:U()},{transaction:H}=await J.transactionBuilder.triggerSmartContract(X,"transfer(address,uint256)",k,O,y);return I({expiration:$,memo:z,transaction:H})}catch(G){throw new L("toolbox_tron_transaction_creation_failed",{message:"Failed to create TRC20 transaction.",originalError:G instanceof Error?G.message:String(G)})}},Qy=async(_)=>{if(!Y)throw new L("toolbox_tron_no_signer");return await Y.signTransaction(_)},Zy=async(_)=>{let{txid:q}=await J.trx.sendRawTransaction(_);return q},W=async({assetAddress:_,spenderAddress:q,from:f})=>{try{let z=J.contract(V,_);if(!z.methods?.allowance)throw new L("toolbox_tron_invalid_token_contract");let[y]=await z.methods.allowance(f,q).call();return y?typeof y==="bigint"?y:BigInt(y):0n}catch(z){throw new L("toolbox_tron_allowance_check_failed",{error:z})}};return{approve:async({assetAddress:_,spenderAddress:q,amount:f,from:z})=>{if(!Y)throw new L("toolbox_tron_no_signer");let y=z||await C(),$=f!==void 0?BigInt(f).toString():Fy,K="approve(address,uint256)",I=[{type:"address",value:q},{type:"uint256",value:$}],G={callValue:0,feeLimit:U()};try{let{transaction:O}=await J.transactionBuilder.triggerSmartContract(_,K,G,I,y),k=await Y.signTransaction(O),{txid:H}=await J.trx.sendRawTransaction(k);if(!H)throw new L("toolbox_tron_approve_failed");return H}catch(O){throw new L("toolbox_tron_approve_failed",{error:O})}},broadcastTransaction:Zy,createTransaction:w,estimateTransactionFee:Jy,getAddress:C,getApprovedAmount:W,getBalance:qy,isApproved:async({assetAddress:_,spenderAddress:q,from:f,amount:z})=>{let y=await W({assetAddress:_,from:f,spenderAddress:q});if(!z)return y>0n;let $=BigInt(z);return y>=$},signTransaction:Qy,transfer:zy,tronWeb:J,validateAddress:await S()}};var r=T(()=>{D();i()});var Cy={};My(Cy,{trc20ABI:()=>V,getTronPrivateKeyFromMnemonic:()=>a,getTronAddressValidator:()=>S,createTronToolbox:()=>e});var Py=T(()=>{D();r()});Py();export{V as trc20ABI,a as getTronPrivateKeyFromMnemonic,S as getTronAddressValidator,e as createTronToolbox};
2
2
 
3
- //# debugId=41F71DD31A74FE1064756E2164756E21
3
+ //# debugId=27DB8CB71689C93C64756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
@@ -3,11 +3,11 @@
3
3
  "sources": ["../src/tron/helpers/trc20.abi.ts", "../src/tron/helpers/trongrid.ts", "../src/tron/toolbox.ts", "../src/tron/index.ts"],
4
4
  "sourcesContent": [
5
5
  "export const trc20ABI = [\n {\n constant: true,\n inputs: [{ name: \"_owner\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"balance\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"_to\", type: \"address\" },\n { name: \"_value\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ name: \"success\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"decimals\",\n outputs: [{ name: \"\", type: \"uint8\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"symbol\",\n outputs: [{ name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"name\",\n outputs: [{ name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [\n { name: \"_owner\", type: \"address\" },\n { name: \"_spender\", type: \"address\" },\n ],\n name: \"allowance\",\n outputs: [{ name: \"remaining\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"_spender\", type: \"address\" },\n { name: \"_value\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [{ name: \"success\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n constant: true,\n inputs: [],\n name: \"totalSupply\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n constant: false,\n inputs: [\n { name: \"_from\", type: \"address\" },\n { name: \"_to\", type: \"address\" },\n { name: \"_value\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [{ name: \"success\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"_from\", type: \"address\" },\n { indexed: true, name: \"_to\", type: \"address\" },\n { indexed: false, name: \"_value\", type: \"uint256\" },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: \"_owner\", type: \"address\" },\n { indexed: true, name: \"_spender\", type: \"address\" },\n { indexed: false, name: \"_value\", type: \"uint256\" },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n] as const;\n",
6
- "import { SwapKitError } from \"@uswap/helpers\";\nimport type { TronGridAccountResponse } from \"../types\";\n\nconst TRONGRID_API_BASE = \"https://api.trongrid.io\";\n\n/**\n * Fetch account information including TRC20 balances from TronGrid API\n */\nexport async function fetchAccountFromTronGrid(address: string) {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n\n try {\n const response = await fetch(`${TRONGRID_API_BASE}/v1/accounts/${address}`);\n\n if (!response.ok) {\n throw new Error(`TronGrid API error: ${response.status} ${response.statusText}`);\n }\n\n const data = (await response.json()) as TronGridAccountResponse;\n\n if (!(data.success && data.data) || data.data.length === 0) {\n throw new Error(\"Invalid response from TronGrid API\");\n }\n\n // Convert search address to hex format for comparison\n let searchAddressHex: string;\n try {\n // If address is base58, convert to hex\n searchAddressHex = TronWeb.address.toHex(address).toLowerCase();\n } catch {\n // If conversion fails, assume it's already hex\n searchAddressHex = address.toLowerCase();\n }\n\n // Find the account that matches the requested address\n const account = data.data.find((acc) => {\n return acc.address.toLowerCase() === searchAddressHex;\n });\n\n if (!account) {\n return;\n }\n\n // Return simplified object with balance and trc20 array\n return { balance: account.balance, trc20: account.trc20 || [] };\n } catch (error) {\n throw new SwapKitError(\"toolbox_tron_trongrid_api_error\", {\n address,\n message: error instanceof Error ? error.message : \"Unknown error\",\n });\n }\n}\n",
7
- "import {\n AssetValue,\n BaseDecimal,\n Chain,\n derivationPathToString,\n getRPCUrl,\n NetworkDerivationPath,\n SwapKitError,\n updateDerivationPath,\n warnOnce,\n} from \"@uswap/helpers\";\nimport type { TronWeb } from \"tronweb\";\nimport { match, P } from \"ts-pattern\";\nimport { trc20ABI } from \"./helpers/trc20.abi\";\nimport { fetchAccountFromTronGrid } from \"./helpers/trongrid\";\nimport type {\n TronApprovedParams,\n TronApproveParams,\n TronCreateTransactionParams,\n TronIsApprovedParams,\n TronSignedTransaction,\n TronSigner,\n TronToolboxOptions,\n TronTransaction,\n TronTransferParams,\n} from \"./types\";\n\n// Constants for TRON resource calculation\nconst TRX_TRANSFER_BANDWIDTH = 268; // Bandwidth consumed by a TRX transfer\nconst TRC20_TRANSFER_ENERGY = 13000; // Average energy consumed by TRC20 transfer\nconst TRC20_TRANSFER_BANDWIDTH = 345; // Bandwidth consumed by TRC20 transfer\n\n// Known TRON tokens\nconst TRON_USDT_CONTRACT = \"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\";\n\nconst MAX_APPROVAL = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\nexport async function getTronAddressValidator() {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n\n return (address: string) => {\n return TronWeb.isAddress(address);\n };\n}\n\nexport async function getTronPrivateKeyFromMnemonic({\n phrase,\n derivationPath: customPath,\n index,\n}: {\n phrase: string;\n derivationPath?: string;\n index?: number;\n}) {\n const derivationPathToUse =\n customPath ||\n derivationPathToString(updateDerivationPath(NetworkDerivationPath[Chain.Tron], { index: index || 0 }));\n\n const { HDKey } = await import(\"@scure/bip32\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n const derived = hdKey.derive(derivationPathToUse);\n\n if (!derived.privateKey) {\n throw new SwapKitError(\"toolbox_tron_no_signer\");\n }\n\n return Buffer.from(derived.privateKey).toString(\"hex\");\n}\n\nasync function createKeysForPath({\n phrase,\n derivationPath,\n tronWeb,\n}: {\n phrase: string;\n derivationPath: string;\n tronWeb: TronWeb;\n}) {\n const { HDKey } = await import(\"@scure/bip32\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n const derived = hdKey.derive(derivationPath);\n\n if (!derived.privateKey) {\n throw new SwapKitError(\"toolbox_tron_no_signer\");\n }\n\n // Convert private key to hex string for TronWeb\n const privateKeyHex = Buffer.from(derived.privateKey).toString(\"hex\");\n\n tronWeb.setPrivateKey(privateKeyHex);\n\n const address = tronWeb?.address.fromPrivateKey(privateKeyHex);\n\n return {\n getAddress: () => Promise.resolve(typeof address === \"string\" ? address : \"\"),\n signTransaction: async (transaction: TronTransaction) => {\n const signedTx = await tronWeb.trx.sign(transaction, privateKeyHex);\n return signedTx;\n },\n };\n}\n\nexport const createTronToolbox = async (\n options: TronToolboxOptions = {},\n): Promise<{\n tronWeb: TronWeb;\n getAddress: () => Promise<string>;\n validateAddress: (address: string) => boolean;\n getBalance: (address: string) => Promise<AssetValue[]>;\n transfer: (params: TronTransferParams) => Promise<string>;\n estimateTransactionFee: (params: TronTransferParams & { sender?: string }) => Promise<AssetValue>;\n createTransaction: (params: TronCreateTransactionParams) => Promise<TronTransaction>;\n signTransaction: (transaction: TronTransaction) => Promise<TronSignedTransaction>;\n broadcastTransaction: (signedTransaction: TronSignedTransaction) => Promise<string>;\n approve: (params: TronApproveParams) => Promise<string>;\n isApproved: (params: TronIsApprovedParams) => Promise<boolean>;\n getApprovedAmount: (params: TronApprovedParams) => Promise<bigint>;\n}> => {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n\n const rpcUrl = await getRPCUrl(Chain.Tron);\n // Note: TRON API key support can be added to SKConfig apiKeys when needed\n const headers = undefined; // No API key needed for basic TronGrid access\n\n const tronWeb = new TronWeb({ fullHost: rpcUrl, headers });\n\n // Handle derivation path and index\n const index = \"index\" in options ? options.index || 0 : 0;\n const derivationPath = derivationPathToString(\n \"derivationPath\" in options && options.derivationPath\n ? options.derivationPath\n : updateDerivationPath(NetworkDerivationPath[Chain.Tron], { index }),\n );\n\n // Create signer based on options using pattern matching\n const signer: TronSigner | undefined = await match(options)\n .with({ phrase: P.string }, async ({ phrase }) => createKeysForPath({ derivationPath, phrase, tronWeb }))\n .with({ signer: P.any }, ({ signer }) => Promise.resolve(signer as TronSigner))\n .otherwise(() => Promise.resolve(undefined));\n\n const getAddress = async () => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n return await signer.getAddress();\n };\n\n const calculateFeeLimit = () => {\n return 100_000_000; // 100 TRX in SUN\n };\n\n /**\n * Get current chain parameters including resource prices\n */\n const getChainParameters = async () => {\n try {\n const parameters = await tronWeb.trx.getChainParameters();\n const paramMap: Record<string, number> = {};\n\n for (const param of parameters) {\n paramMap[param.key] = param.value;\n }\n\n return {\n bandwidthFee: paramMap.getTransactionFee || 1000, // SUN per bandwidth unit\n createAccountFee: paramMap.getCreateAccountFee || 100000, // 0.1 TRX in SUN\n energyFee: paramMap.getEnergyFee || 420, // SUN per energy unit\n };\n } catch {\n // Return default values if unable to fetch\n return { bandwidthFee: 1000, createAccountFee: 100000, energyFee: 420 };\n }\n };\n\n /**\n * Check if an address exists on the blockchain\n */\n const accountExists = async (address: string) => {\n try {\n const account = await tronWeb.trx.getAccount(address);\n return account && Object.keys(account).length > 0;\n } catch {\n return false;\n }\n };\n\n /**\n * Get account resources (bandwidth and energy)\n */\n const getAccountResources = async (address: string) => {\n try {\n const resources = await tronWeb.trx.getAccountResources(address);\n\n return {\n bandwidth: {\n free: resources.freeNetLimit - resources.freeNetUsed,\n total: resources.NetLimit || 0,\n used: resources.NetUsed || 0,\n },\n energy: { total: resources.EnergyLimit || 0, used: resources.EnergyUsed || 0 },\n };\n } catch {\n // Return default structure if unable to fetch\n return {\n bandwidth: { free: 600, total: 0, used: 0 }, // 600 free bandwidth daily\n energy: { total: 0, used: 0 },\n };\n }\n };\n\n /**\n * Get token balance and info directly from contract\n */\n const fetchTokenBalance = async (address: string, contractAddress: string) => {\n try {\n const contract = tronWeb.contract(trc20ABI, contractAddress);\n\n if (!contract.methods?.balanceOf) {\n return 0n;\n }\n\n const [balance] = await contract.methods.balanceOf(address).call();\n\n return balance ? (typeof balance === \"bigint\" ? balance : BigInt(balance)) : 0n;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n console.warn(`balanceOf() failed for ${contractAddress}: ${errorMessage}`);\n return 0n;\n }\n };\n\n /**\n * Get token balance and info directly from contract\n */\n const fetchTokenMetadata = async (contractAddress: string, address: string) => {\n try {\n tronWeb.setAddress(address); // Set address for contract calls\n const contract = tronWeb.contract(trc20ABI, contractAddress);\n\n const [symbolRaw, decimalsRaw] = await Promise.all([\n contract\n .symbol()\n .call()\n .catch(() => \"UNKNOWN\"),\n contract\n .decimals()\n .call()\n .catch(() => \"18\"),\n ]);\n\n return { decimals: Number(decimalsRaw ?? 18), symbol: symbolRaw ?? \"UNKNOWN\" };\n } catch (error) {\n warnOnce({\n condition: true,\n id: \"tron_toolbox_get_token_metadata_failed\",\n warning: `Failed to get token metadata for ${contractAddress}: ${\n error instanceof Error ? error.message : error\n }`,\n });\n return null;\n }\n };\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO\n const getBalance = async (address: string, _scamFilter = true) => {\n const fallbackBalance = [AssetValue.from({ chain: Chain.Tron })];\n // Try primary source (TronGrid)\n try {\n const accountData = await fetchAccountFromTronGrid(address);\n if (accountData) {\n const balances: AssetValue[] = [];\n\n // Add TRX balance\n balances.push(AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 6, value: accountData.balance }));\n\n // Add TRC20 balances\n\n for (const token of accountData.trc20) {\n const [contractAddress, balance] = Object.entries(token)[0] || [];\n\n if (!(contractAddress && balance)) continue;\n\n const tokenMetaData = await fetchTokenMetadata(contractAddress, address);\n\n if (!tokenMetaData) continue;\n\n balances.push(\n AssetValue.from({\n asset: `TRON.${tokenMetaData.symbol}-${contractAddress}`,\n fromBaseDecimal: tokenMetaData.decimals,\n value: BigInt(balance || 0),\n }),\n );\n }\n\n return balances;\n }\n return fallbackBalance;\n } catch (error) {\n warnOnce({\n condition: true,\n id: \"tron_toolbox_get_balance_failed\",\n warning: `Tron API getBalance failed: ${error instanceof Error ? error.message : error}`,\n });\n\n try {\n const balances: AssetValue[] = [];\n\n const trxBalanceInSun = await tronWeb.trx.getBalance(address);\n if (trxBalanceInSun && Number(trxBalanceInSun) > 0) {\n balances.push(AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 6, value: trxBalanceInSun }));\n }\n\n const usdtBalance = await fetchTokenBalance(address, TRON_USDT_CONTRACT);\n if (usdtBalance) {\n balances.push(\n AssetValue.from({ asset: `TRON.USDT-${TRON_USDT_CONTRACT}`, fromBaseDecimal: 6, value: usdtBalance }),\n );\n }\n\n if (balances.length === 0) {\n return fallbackBalance;\n }\n\n return balances;\n } catch (fallbackError) {\n const errorMessage = fallbackError instanceof Error ? fallbackError.message : String(fallbackError);\n console.error(`Tron balance fetch failed: ${errorMessage}`);\n return fallbackBalance;\n }\n }\n };\n\n const transfer = async ({ recipient, assetValue, memo, expiration }: TronTransferParams) => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n\n const from = await getAddress();\n tronWeb.setAddress(from);\n const transaction = await createTransaction({ assetValue, expiration, memo, recipient, sender: from });\n\n const signedTx = await signer.signTransaction(transaction);\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n\n if (!txid) {\n throw new SwapKitError(\"toolbox_tron_token_transfer_failed\");\n }\n\n return txid;\n };\n\n const estimateTransactionFee = async ({\n assetValue,\n recipient,\n sender,\n }: // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO\n TronTransferParams & { sender?: string }) => {\n const isNative = assetValue.isGasAsset;\n\n try {\n const senderAddress = sender ? sender : signer ? await getAddress() : undefined;\n if (!senderAddress) {\n return isNative\n ? AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 0, value: 0.1 })\n : AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 0, value: 15 });\n }\n\n const chainParams = await getChainParameters();\n\n const recipientExists = await accountExists(recipient);\n const activationFee = recipientExists ? 0 : chainParams.createAccountFee;\n\n const resources = await getAccountResources(senderAddress);\n\n if (isNative) {\n const bandwidthNeeded = TRX_TRANSFER_BANDWIDTH;\n const availableBandwidth = resources.bandwidth.free + (resources.bandwidth.total - resources.bandwidth.used);\n\n let bandwidthFee = 0;\n if (bandwidthNeeded > availableBandwidth) {\n const bandwidthToBuy = bandwidthNeeded - availableBandwidth;\n bandwidthFee = bandwidthToBuy * chainParams.bandwidthFee;\n }\n\n const totalFeeSun = activationFee + bandwidthFee;\n\n return AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: BaseDecimal.TRON, value: totalFeeSun });\n }\n\n const bandwidthNeeded = TRC20_TRANSFER_BANDWIDTH;\n const energyNeeded = TRC20_TRANSFER_ENERGY;\n\n const availableBandwidth = resources.bandwidth.free + (resources.bandwidth.total - resources.bandwidth.used);\n const availableEnergy = resources.energy.total - resources.energy.used;\n\n let bandwidthFee = 0;\n if (bandwidthNeeded > availableBandwidth) {\n const bandwidthToBuy = bandwidthNeeded - availableBandwidth;\n bandwidthFee = bandwidthToBuy * chainParams.bandwidthFee;\n }\n\n let energyFee = 0;\n if (energyNeeded > availableEnergy) {\n const energyToBuy = energyNeeded - availableEnergy;\n energyFee = energyToBuy * chainParams.energyFee;\n }\n\n const totalFeeSun = activationFee + bandwidthFee + energyFee;\n\n return AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: BaseDecimal.TRON, value: totalFeeSun });\n } catch (error) {\n warnOnce({\n condition: true,\n id: \"tron_toolbox_fee_estimation_failed\",\n warning: `Failed to calculate exact fee, using conservative estimate: ${\n error instanceof Error ? error.message : error\n }`,\n });\n\n throw new SwapKitError(\"toolbox_tron_fee_estimation_failed\", { error });\n }\n };\n\n const createTransaction = async (params: TronCreateTransactionParams) => {\n const { recipient, assetValue, memo, sender, expiration } = params;\n const isNative = assetValue.isGasAsset;\n\n const addTxData = async ({\n transaction,\n memo,\n expiration,\n }: {\n transaction: TronTransaction;\n memo?: string;\n expiration?: number;\n }) => {\n const transactionWithMemo = memo\n ? await tronWeb.transactionBuilder.addUpdateData(transaction, memo, \"utf8\")\n : transaction;\n\n const transactionFinal = expiration\n ? await tronWeb.transactionBuilder.extendExpiration(transactionWithMemo, expiration)\n : transactionWithMemo;\n\n return transactionFinal;\n };\n\n if (isNative) {\n const transaction = await tronWeb.transactionBuilder.sendTrx(\n recipient,\n assetValue.getBaseValue(\"number\"),\n sender,\n );\n\n const txWithData = addTxData({ expiration, memo, transaction });\n return txWithData;\n }\n\n tronWeb.setAddress(sender);\n const contractAddress = assetValue.address;\n if (!contractAddress) {\n throw new SwapKitError(\"toolbox_tron_invalid_token_identifier\", { identifier: assetValue.toString() });\n }\n\n try {\n const functionSelector = \"transfer(address,uint256)\";\n const parameter = [\n { type: \"address\", value: recipient },\n { type: \"uint256\", value: assetValue.getBaseValue(\"string\") },\n ];\n\n const options = { callValue: 0, feeLimit: calculateFeeLimit() };\n\n const { transaction } = await tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n functionSelector,\n options,\n parameter,\n sender,\n );\n\n const txWithData = addTxData({ expiration, memo, transaction });\n return txWithData;\n } catch (error) {\n throw new SwapKitError(\"toolbox_tron_transaction_creation_failed\", {\n message: \"Failed to create TRC20 transaction.\",\n originalError: error instanceof Error ? error.message : String(error),\n });\n }\n };\n\n const signTransaction = async (transaction: TronTransaction) => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n return await signer.signTransaction(transaction);\n };\n\n const broadcastTransaction = async (signedTx: TronSignedTransaction) => {\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n return txid;\n };\n\n const getApprovedAmount = async ({ assetAddress, spenderAddress, from }: TronApprovedParams) => {\n try {\n const contract = tronWeb.contract(trc20ABI, assetAddress);\n\n if (!contract.methods?.allowance) {\n throw new SwapKitError(\"toolbox_tron_invalid_token_contract\");\n }\n\n const [allowance] = await contract.methods.allowance(from, spenderAddress).call();\n\n return allowance ? (typeof allowance === \"bigint\" ? allowance : BigInt(allowance)) : 0n;\n } catch (error) {\n throw new SwapKitError(\"toolbox_tron_allowance_check_failed\", { error });\n }\n };\n\n const isApproved = async ({ assetAddress, spenderAddress, from, amount }: TronIsApprovedParams) => {\n const allowance = await getApprovedAmount({ assetAddress, from, spenderAddress });\n\n if (!amount) {\n return allowance > 0n;\n }\n\n const amountBigInt = BigInt(amount);\n return allowance >= amountBigInt;\n };\n\n const approve = async ({ assetAddress, spenderAddress, amount, from }: TronApproveParams) => {\n if (!signer) throw new SwapKitError(\"toolbox_tron_no_signer\");\n\n const fromAddress = from || (await getAddress());\n const approvalAmount = amount !== undefined ? BigInt(amount).toString() : MAX_APPROVAL;\n\n const functionSelector = \"approve(address,uint256)\";\n const parameter = [\n { type: \"address\", value: spenderAddress },\n { type: \"uint256\", value: approvalAmount },\n ];\n\n const feeLimit = calculateFeeLimit();\n const options = { callValue: 0, feeLimit };\n\n try {\n const { transaction } = await tronWeb.transactionBuilder.triggerSmartContract(\n assetAddress,\n functionSelector,\n options,\n parameter,\n fromAddress,\n );\n\n const signedTx = await signer.signTransaction(transaction);\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n\n if (!txid) {\n throw new SwapKitError(\"toolbox_tron_approve_failed\");\n }\n\n return txid;\n } catch (error) {\n throw new SwapKitError(\"toolbox_tron_approve_failed\", { error });\n }\n };\n\n return {\n approve,\n broadcastTransaction,\n createTransaction,\n estimateTransactionFee,\n getAddress,\n getApprovedAmount,\n getBalance,\n isApproved,\n signTransaction,\n transfer,\n tronWeb,\n validateAddress: await getTronAddressValidator(),\n };\n};\n",
6
+ "/**\n * Based on code from SwapKit (https://github.com/swapkit/SwapKit),\n * licensed under the Apache License 2.0.\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { USwapError } from \"@uswap/helpers\";\nimport type { TronGridAccountResponse } from \"../types\";\n\nconst TRONGRID_API_BASE = \"https://api.trongrid.io\";\n\n/**\n * Fetch account information including TRC20 balances from TronGrid API\n */\nexport async function fetchAccountFromTronGrid(address: string) {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n\n try {\n const response = await fetch(`${TRONGRID_API_BASE}/v1/accounts/${address}`);\n\n if (!response.ok) {\n throw new Error(`TronGrid API error: ${response.status} ${response.statusText}`);\n }\n\n const data = (await response.json()) as TronGridAccountResponse;\n\n if (!(data.success && data.data) || data.data.length === 0) {\n throw new Error(\"Invalid response from TronGrid API\");\n }\n\n // Convert search address to hex format for comparison\n let searchAddressHex: string;\n try {\n // If address is base58, convert to hex\n searchAddressHex = TronWeb.address.toHex(address).toLowerCase();\n } catch {\n // If conversion fails, assume it's already hex\n searchAddressHex = address.toLowerCase();\n }\n\n // Find the account that matches the requested address\n const account = data.data.find((acc) => {\n return acc.address.toLowerCase() === searchAddressHex;\n });\n\n if (!account) {\n return;\n }\n\n // Return simplified object with balance and trc20 array\n return { balance: account.balance, trc20: account.trc20 || [] };\n } catch (error) {\n throw new USwapError(\"toolbox_tron_trongrid_api_error\", {\n address,\n message: error instanceof Error ? error.message : \"Unknown error\",\n });\n }\n}\n",
7
+ "/**\n * Based on code from SwapKit (https://github.com/swapkit/SwapKit),\n * licensed under the Apache License 2.0.\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport {\n AssetValue,\n BaseDecimal,\n Chain,\n derivationPathToString,\n getRPCUrl,\n NetworkDerivationPath,\n USwapError,\n updateDerivationPath,\n warnOnce,\n} from \"@uswap/helpers\";\nimport type { TronWeb } from \"tronweb\";\nimport { match, P } from \"ts-pattern\";\nimport { trc20ABI } from \"./helpers/trc20.abi\";\nimport { fetchAccountFromTronGrid } from \"./helpers/trongrid\";\nimport type {\n TronApprovedParams,\n TronApproveParams,\n TronCreateTransactionParams,\n TronIsApprovedParams,\n TronSignedTransaction,\n TronSigner,\n TronToolboxOptions,\n TronTransaction,\n TronTransferParams,\n} from \"./types\";\n\n// Constants for TRON resource calculation\nconst TRX_TRANSFER_BANDWIDTH = 268; // Bandwidth consumed by a TRX transfer\nconst TRC20_TRANSFER_ENERGY = 13000; // Average energy consumed by TRC20 transfer\nconst TRC20_TRANSFER_BANDWIDTH = 345; // Bandwidth consumed by TRC20 transfer\n\n// Known TRON tokens\nconst TRON_USDT_CONTRACT = \"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\";\n\nconst MAX_APPROVAL = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\n\nexport async function getTronAddressValidator() {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n\n return (address: string) => {\n return TronWeb.isAddress(address);\n };\n}\n\nexport async function getTronPrivateKeyFromMnemonic({\n phrase,\n derivationPath: customPath,\n index,\n}: {\n phrase: string;\n derivationPath?: string;\n index?: number;\n}) {\n const derivationPathToUse =\n customPath ||\n derivationPathToString(updateDerivationPath(NetworkDerivationPath[Chain.Tron], { index: index || 0 }));\n\n const { HDKey } = await import(\"@scure/bip32\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n const derived = hdKey.derive(derivationPathToUse);\n\n if (!derived.privateKey) {\n throw new USwapError(\"toolbox_tron_no_signer\");\n }\n\n return Buffer.from(derived.privateKey).toString(\"hex\");\n}\n\nasync function createKeysForPath({\n phrase,\n derivationPath,\n tronWeb,\n}: {\n phrase: string;\n derivationPath: string;\n tronWeb: TronWeb;\n}) {\n const { HDKey } = await import(\"@scure/bip32\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n const derived = hdKey.derive(derivationPath);\n\n if (!derived.privateKey) {\n throw new USwapError(\"toolbox_tron_no_signer\");\n }\n\n // Convert private key to hex string for TronWeb\n const privateKeyHex = Buffer.from(derived.privateKey).toString(\"hex\");\n\n tronWeb.setPrivateKey(privateKeyHex);\n\n const address = tronWeb?.address.fromPrivateKey(privateKeyHex);\n\n return {\n getAddress: () => Promise.resolve(typeof address === \"string\" ? address : \"\"),\n signTransaction: async (transaction: TronTransaction) => {\n const signedTx = await tronWeb.trx.sign(transaction, privateKeyHex);\n return signedTx;\n },\n };\n}\n\nexport const createTronToolbox = async (\n options: TronToolboxOptions = {},\n): Promise<{\n tronWeb: TronWeb;\n getAddress: () => Promise<string>;\n validateAddress: (address: string) => boolean;\n getBalance: (address: string) => Promise<AssetValue[]>;\n transfer: (params: TronTransferParams) => Promise<string>;\n estimateTransactionFee: (params: TronTransferParams & { sender?: string }) => Promise<AssetValue>;\n createTransaction: (params: TronCreateTransactionParams) => Promise<TronTransaction>;\n signTransaction: (transaction: TronTransaction) => Promise<TronSignedTransaction>;\n broadcastTransaction: (signedTransaction: TronSignedTransaction) => Promise<string>;\n approve: (params: TronApproveParams) => Promise<string>;\n isApproved: (params: TronIsApprovedParams) => Promise<boolean>;\n getApprovedAmount: (params: TronApprovedParams) => Promise<bigint>;\n}> => {\n const TW = await import(\"tronweb\");\n const TronWeb = TW.TronWeb ?? TW.default?.TronWeb;\n\n const rpcUrl = await getRPCUrl(Chain.Tron);\n // Note: TRON API key support can be added to SKConfig apiKeys when needed\n const headers = undefined; // No API key needed for basic TronGrid access\n\n const tronWeb = new TronWeb({ fullHost: rpcUrl, headers });\n\n // Handle derivation path and index\n const index = \"index\" in options ? options.index || 0 : 0;\n const derivationPath = derivationPathToString(\n \"derivationPath\" in options && options.derivationPath\n ? options.derivationPath\n : updateDerivationPath(NetworkDerivationPath[Chain.Tron], { index }),\n );\n\n // Create signer based on options using pattern matching\n const signer: TronSigner | undefined = await match(options)\n .with({ phrase: P.string }, async ({ phrase }) => createKeysForPath({ derivationPath, phrase, tronWeb }))\n .with({ signer: P.any }, ({ signer }) => Promise.resolve(signer as TronSigner))\n .otherwise(() => Promise.resolve(undefined));\n\n const getAddress = async () => {\n if (!signer) throw new USwapError(\"toolbox_tron_no_signer\");\n return await signer.getAddress();\n };\n\n const calculateFeeLimit = () => {\n return 100_000_000; // 100 TRX in SUN\n };\n\n /**\n * Get current chain parameters including resource prices\n */\n const getChainParameters = async () => {\n try {\n const parameters = await tronWeb.trx.getChainParameters();\n const paramMap: Record<string, number> = {};\n\n for (const param of parameters) {\n paramMap[param.key] = param.value;\n }\n\n return {\n bandwidthFee: paramMap.getTransactionFee || 1000, // SUN per bandwidth unit\n createAccountFee: paramMap.getCreateAccountFee || 100000, // 0.1 TRX in SUN\n energyFee: paramMap.getEnergyFee || 420, // SUN per energy unit\n };\n } catch {\n // Return default values if unable to fetch\n return { bandwidthFee: 1000, createAccountFee: 100000, energyFee: 420 };\n }\n };\n\n /**\n * Check if an address exists on the blockchain\n */\n const accountExists = async (address: string) => {\n try {\n const account = await tronWeb.trx.getAccount(address);\n return account && Object.keys(account).length > 0;\n } catch {\n return false;\n }\n };\n\n /**\n * Get account resources (bandwidth and energy)\n */\n const getAccountResources = async (address: string) => {\n try {\n const resources = await tronWeb.trx.getAccountResources(address);\n\n return {\n bandwidth: {\n free: resources.freeNetLimit - resources.freeNetUsed,\n total: resources.NetLimit || 0,\n used: resources.NetUsed || 0,\n },\n energy: { total: resources.EnergyLimit || 0, used: resources.EnergyUsed || 0 },\n };\n } catch {\n // Return default structure if unable to fetch\n return {\n bandwidth: { free: 600, total: 0, used: 0 }, // 600 free bandwidth daily\n energy: { total: 0, used: 0 },\n };\n }\n };\n\n /**\n * Get token balance and info directly from contract\n */\n const fetchTokenBalance = async (address: string, contractAddress: string) => {\n try {\n const contract = tronWeb.contract(trc20ABI, contractAddress);\n\n if (!contract.methods?.balanceOf) {\n return 0n;\n }\n\n const [balance] = await contract.methods.balanceOf(address).call();\n\n return balance ? (typeof balance === \"bigint\" ? balance : BigInt(balance)) : 0n;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n console.warn(`balanceOf() failed for ${contractAddress}: ${errorMessage}`);\n return 0n;\n }\n };\n\n /**\n * Get token balance and info directly from contract\n */\n const fetchTokenMetadata = async (contractAddress: string, address: string) => {\n try {\n tronWeb.setAddress(address); // Set address for contract calls\n const contract = tronWeb.contract(trc20ABI, contractAddress);\n\n const [symbolRaw, decimalsRaw] = await Promise.all([\n contract\n .symbol()\n .call()\n .catch(() => \"UNKNOWN\"),\n contract\n .decimals()\n .call()\n .catch(() => \"18\"),\n ]);\n\n return { decimals: Number(decimalsRaw ?? 18), symbol: symbolRaw ?? \"UNKNOWN\" };\n } catch (error) {\n warnOnce({\n condition: true,\n id: \"tron_toolbox_get_token_metadata_failed\",\n warning: `Failed to get token metadata for ${contractAddress}: ${\n error instanceof Error ? error.message : error\n }`,\n });\n return null;\n }\n };\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO\n const getBalance = async (address: string, _scamFilter = true) => {\n const fallbackBalance = [AssetValue.from({ chain: Chain.Tron })];\n // Try primary source (TronGrid)\n try {\n const accountData = await fetchAccountFromTronGrid(address);\n if (accountData) {\n const balances: AssetValue[] = [];\n\n // Add TRX balance\n balances.push(AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 6, value: accountData.balance }));\n\n // Add TRC20 balances\n\n for (const token of accountData.trc20) {\n const [contractAddress, balance] = Object.entries(token)[0] || [];\n\n if (!(contractAddress && balance)) continue;\n\n const tokenMetaData = await fetchTokenMetadata(contractAddress, address);\n\n if (!tokenMetaData) continue;\n\n balances.push(\n AssetValue.from({\n asset: `TRON.${tokenMetaData.symbol}-${contractAddress}`,\n fromBaseDecimal: tokenMetaData.decimals,\n value: BigInt(balance || 0),\n }),\n );\n }\n\n return balances;\n }\n return fallbackBalance;\n } catch (error) {\n warnOnce({\n condition: true,\n id: \"tron_toolbox_get_balance_failed\",\n warning: `Tron API getBalance failed: ${error instanceof Error ? error.message : error}`,\n });\n\n try {\n const balances: AssetValue[] = [];\n\n const trxBalanceInSun = await tronWeb.trx.getBalance(address);\n if (trxBalanceInSun && Number(trxBalanceInSun) > 0) {\n balances.push(AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 6, value: trxBalanceInSun }));\n }\n\n const usdtBalance = await fetchTokenBalance(address, TRON_USDT_CONTRACT);\n if (usdtBalance) {\n balances.push(\n AssetValue.from({ asset: `TRON.USDT-${TRON_USDT_CONTRACT}`, fromBaseDecimal: 6, value: usdtBalance }),\n );\n }\n\n if (balances.length === 0) {\n return fallbackBalance;\n }\n\n return balances;\n } catch (fallbackError) {\n const errorMessage = fallbackError instanceof Error ? fallbackError.message : String(fallbackError);\n console.error(`Tron balance fetch failed: ${errorMessage}`);\n return fallbackBalance;\n }\n }\n };\n\n const transfer = async ({ recipient, assetValue, memo, expiration }: TronTransferParams) => {\n if (!signer) throw new USwapError(\"toolbox_tron_no_signer\");\n\n const from = await getAddress();\n tronWeb.setAddress(from);\n const transaction = await createTransaction({ assetValue, expiration, memo, recipient, sender: from });\n\n const signedTx = await signer.signTransaction(transaction);\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n\n if (!txid) {\n throw new USwapError(\"toolbox_tron_token_transfer_failed\");\n }\n\n return txid;\n };\n\n const estimateTransactionFee = async ({\n assetValue,\n recipient,\n sender,\n }: // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO\n TronTransferParams & { sender?: string }) => {\n const isNative = assetValue.isGasAsset;\n\n try {\n const senderAddress = sender ? sender : signer ? await getAddress() : undefined;\n if (!senderAddress) {\n return isNative\n ? AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 0, value: 0.1 })\n : AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: 0, value: 15 });\n }\n\n const chainParams = await getChainParameters();\n\n const recipientExists = await accountExists(recipient);\n const activationFee = recipientExists ? 0 : chainParams.createAccountFee;\n\n const resources = await getAccountResources(senderAddress);\n\n if (isNative) {\n const bandwidthNeeded = TRX_TRANSFER_BANDWIDTH;\n const availableBandwidth = resources.bandwidth.free + (resources.bandwidth.total - resources.bandwidth.used);\n\n let bandwidthFee = 0;\n if (bandwidthNeeded > availableBandwidth) {\n const bandwidthToBuy = bandwidthNeeded - availableBandwidth;\n bandwidthFee = bandwidthToBuy * chainParams.bandwidthFee;\n }\n\n const totalFeeSun = activationFee + bandwidthFee;\n\n return AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: BaseDecimal.TRON, value: totalFeeSun });\n }\n\n const bandwidthNeeded = TRC20_TRANSFER_BANDWIDTH;\n const energyNeeded = TRC20_TRANSFER_ENERGY;\n\n const availableBandwidth = resources.bandwidth.free + (resources.bandwidth.total - resources.bandwidth.used);\n const availableEnergy = resources.energy.total - resources.energy.used;\n\n let bandwidthFee = 0;\n if (bandwidthNeeded > availableBandwidth) {\n const bandwidthToBuy = bandwidthNeeded - availableBandwidth;\n bandwidthFee = bandwidthToBuy * chainParams.bandwidthFee;\n }\n\n let energyFee = 0;\n if (energyNeeded > availableEnergy) {\n const energyToBuy = energyNeeded - availableEnergy;\n energyFee = energyToBuy * chainParams.energyFee;\n }\n\n const totalFeeSun = activationFee + bandwidthFee + energyFee;\n\n return AssetValue.from({ chain: Chain.Tron, fromBaseDecimal: BaseDecimal.TRON, value: totalFeeSun });\n } catch (error) {\n warnOnce({\n condition: true,\n id: \"tron_toolbox_fee_estimation_failed\",\n warning: `Failed to calculate exact fee, using conservative estimate: ${\n error instanceof Error ? error.message : error\n }`,\n });\n\n throw new USwapError(\"toolbox_tron_fee_estimation_failed\", { error });\n }\n };\n\n const createTransaction = async (params: TronCreateTransactionParams) => {\n const { recipient, assetValue, memo, sender, expiration } = params;\n const isNative = assetValue.isGasAsset;\n\n const addTxData = async ({\n transaction,\n memo,\n expiration,\n }: {\n transaction: TronTransaction;\n memo?: string;\n expiration?: number;\n }) => {\n const transactionWithMemo = memo\n ? await tronWeb.transactionBuilder.addUpdateData(transaction, memo, \"utf8\")\n : transaction;\n\n const transactionFinal = expiration\n ? await tronWeb.transactionBuilder.extendExpiration(transactionWithMemo, expiration)\n : transactionWithMemo;\n\n return transactionFinal;\n };\n\n if (isNative) {\n const transaction = await tronWeb.transactionBuilder.sendTrx(\n recipient,\n assetValue.getBaseValue(\"number\"),\n sender,\n );\n\n const txWithData = addTxData({ expiration, memo, transaction });\n return txWithData;\n }\n\n tronWeb.setAddress(sender);\n const contractAddress = assetValue.address;\n if (!contractAddress) {\n throw new USwapError(\"toolbox_tron_invalid_token_identifier\", { identifier: assetValue.toString() });\n }\n\n try {\n const functionSelector = \"transfer(address,uint256)\";\n const parameter = [\n { type: \"address\", value: recipient },\n { type: \"uint256\", value: assetValue.getBaseValue(\"string\") },\n ];\n\n const options = { callValue: 0, feeLimit: calculateFeeLimit() };\n\n const { transaction } = await tronWeb.transactionBuilder.triggerSmartContract(\n contractAddress,\n functionSelector,\n options,\n parameter,\n sender,\n );\n\n const txWithData = addTxData({ expiration, memo, transaction });\n return txWithData;\n } catch (error) {\n throw new USwapError(\"toolbox_tron_transaction_creation_failed\", {\n message: \"Failed to create TRC20 transaction.\",\n originalError: error instanceof Error ? error.message : String(error),\n });\n }\n };\n\n const signTransaction = async (transaction: TronTransaction) => {\n if (!signer) throw new USwapError(\"toolbox_tron_no_signer\");\n return await signer.signTransaction(transaction);\n };\n\n const broadcastTransaction = async (signedTx: TronSignedTransaction) => {\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n return txid;\n };\n\n const getApprovedAmount = async ({ assetAddress, spenderAddress, from }: TronApprovedParams) => {\n try {\n const contract = tronWeb.contract(trc20ABI, assetAddress);\n\n if (!contract.methods?.allowance) {\n throw new USwapError(\"toolbox_tron_invalid_token_contract\");\n }\n\n const [allowance] = await contract.methods.allowance(from, spenderAddress).call();\n\n return allowance ? (typeof allowance === \"bigint\" ? allowance : BigInt(allowance)) : 0n;\n } catch (error) {\n throw new USwapError(\"toolbox_tron_allowance_check_failed\", { error });\n }\n };\n\n const isApproved = async ({ assetAddress, spenderAddress, from, amount }: TronIsApprovedParams) => {\n const allowance = await getApprovedAmount({ assetAddress, from, spenderAddress });\n\n if (!amount) {\n return allowance > 0n;\n }\n\n const amountBigInt = BigInt(amount);\n return allowance >= amountBigInt;\n };\n\n const approve = async ({ assetAddress, spenderAddress, amount, from }: TronApproveParams) => {\n if (!signer) throw new USwapError(\"toolbox_tron_no_signer\");\n\n const fromAddress = from || (await getAddress());\n const approvalAmount = amount !== undefined ? BigInt(amount).toString() : MAX_APPROVAL;\n\n const functionSelector = \"approve(address,uint256)\";\n const parameter = [\n { type: \"address\", value: spenderAddress },\n { type: \"uint256\", value: approvalAmount },\n ];\n\n const feeLimit = calculateFeeLimit();\n const options = { callValue: 0, feeLimit };\n\n try {\n const { transaction } = await tronWeb.transactionBuilder.triggerSmartContract(\n assetAddress,\n functionSelector,\n options,\n parameter,\n fromAddress,\n );\n\n const signedTx = await signer.signTransaction(transaction);\n const { txid } = await tronWeb.trx.sendRawTransaction(signedTx);\n\n if (!txid) {\n throw new USwapError(\"toolbox_tron_approve_failed\");\n }\n\n return txid;\n } catch (error) {\n throw new USwapError(\"toolbox_tron_approve_failed\", { error });\n }\n };\n\n return {\n approve,\n broadcastTransaction,\n createTransaction,\n estimateTransactionFee,\n getAddress,\n getApprovedAmount,\n getBalance,\n isApproved,\n signTransaction,\n transfer,\n tronWeb,\n validateAddress: await getTronAddressValidator(),\n };\n};\n",
8
8
  "export { trc20ABI } from \"./helpers/trc20.abi\";\nexport {\n createTronToolbox,\n getTronAddressValidator,\n getTronPrivateKeyFromMnemonic,\n} from \"./toolbox\";\nexport type {\n TronApprovedParams,\n TronApproveParams,\n TronContract,\n TronCreateTransactionParams,\n TronIsApprovedParams,\n TronSignedTransaction,\n TronSigner,\n TronToolboxOptions,\n TronTransaction,\n TronTransferParams,\n} from \"./types\";\n\nimport type { createTronToolbox } from \"./toolbox\";\nexport type TronWallet = Awaited<ReturnType<typeof createTronToolbox>>;\n"
9
9
  ],
10
- "mappings": "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",
11
- "debugId": "41F71DD31A74FE1064756E2164756E21",
10
+ "mappings": "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",
11
+ "debugId": "27DB8CB71689C93C64756E2164756E21",
12
12
  "names": []
13
13
  }