@swapkit/toolboxes 4.15.11 → 4.15.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/index.cjs +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/tron/index.cjs +1 -1
- package/dist/src/tron/index.js +1 -1
- package/dist/types/tron/helpers/trongrid.d.ts +1 -0
- package/dist/types/tron/toolbox.d.ts +1 -1
- package/dist/types/utxo/helpers/coinselect.d.ts +1 -1
- package/package.json +1 -1
package/dist/src/tron/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var bn=Object.create;var{getPrototypeOf:dn,defineProperty:j,getOwnPropertyNames:on,getOwnPropertyDescriptor:yn}=Object,tn=Object.prototype.hasOwnProperty;function rn(n){return this[n]}var Vn,Hn,hi=(n,i,o)=>{var t=n!=null&&typeof n==="object";if(t){var a=i?Vn??=new WeakMap:Hn??=new WeakMap,g=a.get(n);if(g)return g}o=n!=null?bn(dn(n)):{};let m=i||!n||!n.__esModule?j(o,"default",{value:n,enumerable:!0}):o;for(let P of on(n))if(!tn.call(m,P))j(m,P,{get:rn.bind(n,P),enumerable:!0});if(t)a.set(n,m);return m},Ln=(n)=>{var i=(nn??=new WeakMap).get(n),o;if(i)return i;if(i=j({},"__esModule",{value:!0}),n&&typeof n==="object"||typeof n==="function"){for(var t of on(n))if(!tn.call(i,t))j(i,t,{get:rn.bind(n,t),enumerable:!(o=yn(n,t))||o.enumerable})}return nn.set(n,i),i},nn;var ln=(n)=>n;function In(n,i){this[n]=ln.bind(null,i)}var sn=(n,i)=>{for(var o in i)j(n,o,{get:i[o],enumerable:!0,configurable:!0,set:In.bind(i,o)})};var X=(n,i)=>()=>(n&&(i=n(n=0)),i);function N(n,i){let o=0n,t=0n,a=i;while(a<n.length&&a-i<10){let g=n[a++];if(g===void 0)break;if(o|=BigInt(g&127)<<t,t+=7n,(g&128)===0)return[o,a]}throw new C.SwapKitError("toolbox_tron_transaction_creation_failed")}function M(n){let i=[],o=n<0n?n+2n**64n:n;while(o>=128n)i.push(Number(o&0x7fn)|128),o>>=7n;return i.push(Number(o)),i}function B(n,i,o){let t=n.get(i);if(t)t.push(o);else n.set(i,[o])}function ii(n){let i=new Map,o=0;while(o<n.length){let[t,a]=N(n,o);o=a;let g=Number(t>>3n),m=Number(t&7n);if(m===A){let[P,w]=N(n,o);o=w,B(i,g,{data:new Uint8Array(M(P)),wireType:A})}else if(m===W){let[P,w]=N(n,o);o=w;let $=Number(P);if($<0||o+$>n.length)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let K=n.slice(o,o+$);o+=$,B(i,g,{data:K,wireType:W})}else if(m===an){if(o+8>n.length)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let P=n.slice(o,o+8);o+=8,B(i,g,{data:P,wireType:an})}else if(m===cn){if(o+4>n.length)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let P=n.slice(o,o+4);o+=4,B(i,g,{data:P,wireType:cn})}else throw new C.SwapKitError("toolbox_tron_transaction_creation_failed")}return i}function oi(n){let i=[];for(let[g,m]of[...n.entries()].sort(([P],[w])=>P-w))for(let{wireType:P,data:w}of m){let $=BigInt(g<<3|P);if(i.push(new Uint8Array(M($))),P===W)i.push(new Uint8Array(M(BigInt(w.length))));i.push(w)}let o=i.reduce((g,m)=>g+m.length,0),t=new Uint8Array(o),a=0;for(let g of i)t.set(g,a),a+=g.length;return t}function gn(n,i){if(!n||n.length%2!==0)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let o=Q.hexToBytes(n),t=ii(o);if(i.expiration!==void 0)t.set(pn,[{data:new Uint8Array(M(BigInt(i.expiration))),wireType:A}]);if(i.data!==void 0)t.set(En,[{data:Q.hexToBytes(i.data),wireType:W}]);if(i.fee_limit!==void 0)t.set(ni,[{data:new Uint8Array(M(BigInt(i.fee_limit))),wireType:A}]);let a=oi(t),g=Q.bytesToHex(a),m=Q.bytesToHex(fn.sha256(a));return{raw_data_hex:g,txID:m}}var fn,Q,C,A=0,an=1,W=2,cn=5,pn=8,En=10,ni=18;var mn=X(()=>{fn=require("@noble/hashes/sha2.js"),Q=require("@noble/hashes/utils.js"),C=require("@swapkit/helpers")});function q(n){if(typeof n!=="string")return!1;try{let i=S.decode(n);return i.length===21&&i[0]===_n}catch{return!1}}function Pn(n){return F.bytesToHex(S.decode(n))}function ri(n){return S.decode(n).slice(1)}function wn(n){let i=D.secp256k1.getPublicKey(F.hexToBytes(n),!1),o=Tn.keccak_256(i.slice(1)).slice(-20),t=new Uint8Array(21);return t[0]=_n,t.set(o,1),S.encode(t)}function vn({txID:n,privateKey:i}){let o=D.secp256k1.sign(F.hexToBytes(n),F.hexToBytes(i),{format:"recovered",prehash:!1}),t=o[0]??0,a=F.bytesToHex(o.slice(1,33)),g=F.bytesToHex(o.slice(33,65)),m=(t+27).toString(16).padStart(2,"0");return a+g+m}function Y({txID:n,raw_data_hex:i}){let o=F.bytesToHex(R.sha256(F.hexToBytes(i)));if(n!==o)throw new b.SwapKitError("toolbox_tron_invalid_transaction_integrity",{expected:o,txID:n})}function ai(n){return`000000000000000000000000${F.bytesToHex(ri(n))}`}function ci(n){let i=typeof n==="bigint"?n:BigInt(n);if(i<0n||i>=ti)throw new b.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:i.toString()});return i.toString(16).padStart(64,"0")}function Z(n){return n.map(({type:i,value:o})=>i==="address"?ai(o):ci(BigInt(o))).join("")}function un(n){return F.bytesToHex(new TextEncoder().encode(n))}var D,R,Tn,F,en,b,S,_n=65,ti;var d=X(()=>{D=require("@noble/curves/secp256k1.js"),R=require("@noble/hashes/sha2.js"),Tn=require("@noble/hashes/sha3.js"),F=require("@noble/hashes/utils.js"),en=require("@scure/base"),b=require("@swapkit/helpers"),S=en.createBase58check(R.sha256),ti=2n**256n});function hn(){try{return v.getRPCUrlSync(v.Chain.Tron)}catch{return xn}}function Fn(){let n=new AbortController,i=setTimeout(()=>n.abort(),Ti);return{cleanup:()=>clearTimeout(i),signal:n.signal}}async function J(n,i){let{signal:o,cleanup:t}=Fn();try{let a=await fetch(`${hn()}${n}`,{body:JSON.stringify(i),headers:{"Content-Type":"application/json"},method:"POST",signal:o});if(!a.ok)throw new v.SwapKitError("toolbox_tron_trongrid_api_error",{message:`${a.status} ${a.statusText} on ${n}`});return await a.json()}finally{t()}}async function qn(n,i){let{signal:o,cleanup:t}=Fn();try{let a=await fetch(`${i??hn()}${n}`,{headers:{"Content-Type":"application/json"},signal:o});if(!a.ok)throw new v.SwapKitError("toolbox_tron_trongrid_api_error",{message:`${a.status} ${a.statusText} on ${n}`});return await a.json()}finally{t()}}async function $n(n){if(!q(n))throw new v.SwapKitError("toolbox_tron_trongrid_api_error",{address:n,message:"Invalid address"});try{let i=await qn(`/v1/accounts/${n}`,xn);if(!(i.success&&i.data)||i.data.length===0)return;let o;try{o=Pn(n).toLowerCase()}catch{o=n.toLowerCase()}let t=i.data.find((a)=>a.address.toLowerCase()===o);if(!t)return;return{balance:t.balance,trc20:t.trc20||[]}}catch(i){if(i instanceof v.SwapKitError)throw i;throw new v.SwapKitError("toolbox_tron_trongrid_api_error",{address:n,message:i instanceof Error?i.message:"Unknown error"})}}async function zn({from:n,to:i,amount:o}){let a=await J("/wallet/createtransaction",{amount:o,owner_address:n,to_address:i,visible:!0});if(!a.txID||!a.raw_data_hex||!a.raw_data)throw new v.SwapKitError("toolbox_tron_transaction_creation_failed");let m=a.raw_data?.contract?.[0]?.parameter?.value;if(m?.to_address!==i||m?.owner_address!==n||m?.amount!==o)throw new v.SwapKitError("toolbox_tron_transaction_creation_failed");return Y(a),a}async function Cn({ownerAddress:n,contractAddress:i,functionSelector:o,parameter:t,feeLimit:a,callValue:g=0}){let m=await J("/wallet/triggersmartcontract",{call_value:g,contract_address:i,fee_limit:a,function_selector:o,owner_address:n,parameter:t,visible:!0});if(!m.result.result||!m.transaction?.txID||!m.transaction?.raw_data_hex)throw new v.SwapKitError("toolbox_tron_transaction_creation_failed");let w=m.transaction.raw_data?.contract?.[0]?.parameter?.value;if(w?.contract_address!==i||w?.owner_address!==n)throw new v.SwapKitError("toolbox_tron_transaction_creation_failed");return Y(m.transaction),m.transaction}function Qn({ownerAddress:n,contractAddress:i,functionSelector:o,parameter:t}){return J("/wallet/triggerconstantcontract",{contract_address:i,function_selector:o,owner_address:n,parameter:t,visible:!0})}async function O(n){try{let{result:i,txid:o}=await J("/wallet/broadcasttransaction",{raw_data:n.raw_data,raw_data_hex:n.raw_data_hex,signature:n.signature,txID:n.txID,visible:n.visible});if(!i||!o)throw new v.SwapKitError("toolbox_tron_token_transfer_failed");return o}catch(i){throw new v.SwapKitError("toolbox_tron_broadcast_failed",{error:i})}}async function k(){let n={};try{let{chainParameter:i}=await qn("/wallet/getchainparameters");for(let o of i)n[o.key]=o.value}catch(i){v.warnOnce({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${i instanceof Error?i.message:i}`})}return{bandwidthFee:n.getTransactionFee??fi,createAccountFee:n.getCreateAccountFee??gi,energyFee:n.getEnergyFee??mi}}async function y(n){try{let i=await J("/wallet/getaccountresource",{address:n,visible:!0});return{bandwidth:{free:(i.freeNetLimit??600)-(i.freeNetUsed??0),total:i.NetLimit??0,used:i.NetUsed??0},energy:{total:i.EnergyLimit??0,used:i.EnergyUsed??0}}}catch(i){return v.warnOnce({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${i instanceof Error?i.message:i}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function V(n){try{let i=await J("/wallet/getaccount",{address:n,visible:!0});return i&&Object.keys(i).length>0}catch{return!1}}async function H(n){try{let{energy_used:i}=await Qn({...n,ownerAddress:n.sender});return i}catch(i){return v.warnOnce({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy, using default: ${i instanceof Error?i.message:i}`}),65000}}async function Yn({assetAddress:n,owner:i,spender:o}){let t=Z([{type:"address",value:i},{type:"address",value:o}]),g=(await Qn({contractAddress:n,functionSelector:"allowance(address,address)",ownerAddress:o,parameter:t})).constant_result?.[0];if(!g)return 0n;try{return BigInt(`0x${g}`)}catch{return 0n}}var v,xn="https://api.trongrid.io",fi=1000,gi=1e5,mi=420,Ti=30000;var Zn=X(()=>{d();v=require("@swapkit/helpers")});function On({phrase:n,derivationPath:i}){let o=jn.HDKey.fromMasterSeed(Xn.mnemonicToSeedSync(n)).derive(i);if(!o.privateKey)throw new r.SwapKitError("toolbox_tron_no_signer");return Un.bytesToHex(o.privateKey)}function Gn({phrase:n,derivationPath:i,index:o}){let t=i||r.derivationPathToString(r.updateDerivationPath(r.NetworkDerivationPath[r.Chain.Tron],{index:o||0}));return On({derivationPath:t,phrase:n})}function vi({phrase:n,derivationPath:i}){let o=On({derivationPath:i,phrase:n}),t=wn(o);return{getAddress:()=>Promise.resolve(t),signTransaction:(a)=>{Y(a);let g=vn({privateKey:o,txID:a.txID});return Promise.resolve({...a,signature:[g]})}}}function Jn({transaction:n,memo:i,expiration:o,feeLimit:t}){let a={},g={};if(t!==void 0&&n.raw_data)a.fee_limit=t,g.fee_limit=t;if(i){let w=un(i);a.data=w,g.data=w}if(o){let w=n.raw_data.expiration+o*1000;a.expiration=w,g.expiration=w}if(Object.keys(a).length===0)return n;let{raw_data_hex:m,txID:P}=gn(n.raw_data_hex,a);return{...n,raw_data:{...n.raw_data,...g},raw_data_hex:m,txID:P}}function Bn(n={}){let i="index"in n?n.index||0:0,o=r.derivationPathToString("derivationPath"in n&&n.derivationPath?n.derivationPath:r.updateDerivationPath(r.NetworkDerivationPath[r.Chain.Tron],{index:i})),t,a=!1;function g(){if(a)return Promise.resolve(t);return t=U.match(n).with({phrase:U.P.string},({phrase:c})=>vi({derivationPath:o,phrase:c})).with({signer:U.P.not(U.P.nullish)},({signer:c})=>c).otherwise(()=>{return}),a=!0,Promise.resolve(t)}async function m(){let c=await g();if(!c)throw new r.SwapKitError("toolbox_tron_no_signer");return c.getAddress()}async function P(c){let f=c||_i,e=await k(),_=f*e.energyFee,T=Math.ceil(_*1.5);return Math.min(Math.max(T,1e7),150000000)}async function w({contractAddress:c,functionSelector:f,parameter:e,sender:_,memo:T,expiration:u}){let x=await H({contractAddress:c,functionSelector:f,parameter:e,sender:_}),h=await P(x),z=await Cn({contractAddress:c,feeLimit:h,functionSelector:f,ownerAddress:_,parameter:e});return Jn({expiration:u,feeLimit:h,memo:T,transaction:z})}async function $(c){if(!q(c))return[r.AssetValue.from({chain:r.Chain.Tron})];try{let f=await $n(c);if(!f)return[r.AssetValue.from({chain:r.Chain.Tron})];let e=[r.AssetValue.from({chain:r.Chain.Tron,fromBaseDecimal:6,value:String(f.balance)})],_=f.trc20?.find((T)=>(L in T));if(_){let T=_[L];e.push(r.AssetValue.from({asset:`TRON.USDT-${L}`,fromBaseDecimal:6,value:T}))}return e}catch(f){return r.warnOnce({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${f instanceof Error?f.message:f}`}),[r.AssetValue.from({chain:r.Chain.Tron})]}}async function K({recipient:c,assetValue:f,memo:e,expiration:_}){if(!q(c))throw new r.SwapKitError("toolbox_tron_token_transfer_failed",{message:"invalid address"});let T=await g();if(!T)throw new r.SwapKitError("toolbox_tron_no_signer");try{let u=await m(),x=await I({assetValue:f,expiration:_,memo:e,recipient:c,sender:u}),h=await T.signTransaction(x),z=await O(h);if(!z)throw new r.SwapKitError("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return z}catch(u){throw new r.SwapKitError("toolbox_tron_token_transfer_failed",{message:u instanceof Error?u.message:String(u)})}}function l({requiredBandwidth:c,resources:f,feePerUnit:e}){let _=Math.max(0,f.free+f.total-f.used);return c>_?(c-_)*e:0}async function Wn({recipient:c,senderAddress:f}){let[e,_,T]=await Promise.all([k(),V(c),y(f)]),u=_?0:e.createAccountFee,x=l({feePerUnit:e.bandwidthFee,requiredBandwidth:ei,resources:T.bandwidth});return r.AssetValue.from({chain:r.Chain.Tron,fromBaseDecimal:r.BaseDecimal.TRON,value:u+x})}async function Sn({assetValue:c,recipient:f,senderAddress:e}){let _=c.address;if(!_)throw new r.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:c.toString()});let[T,u,x,h]=await Promise.all([k(),V(f),y(e),H({contractAddress:_,functionSelector:"transfer(address,uint256)",parameter:Z([{type:"address",value:f},{type:"uint256",value:c.getBaseValue("string")}]),sender:e})]),z=u?0:T.createAccountFee,G=l({feePerUnit:T.bandwidthFee,requiredBandwidth:Pi,resources:x.bandwidth}),E=Math.max(0,x.energy.total-x.energy.used),Rn=h>E?(h-E)*T.energyFee:0;return r.AssetValue.from({chain:r.Chain.Tron,fromBaseDecimal:r.BaseDecimal.TRON,value:z+G+Rn})}async function kn({assetValue:c,recipient:f,sender:e}){let _=await g();try{let T=e?e:_?await m():void 0;if(!T)return c.isGasAsset?r.AssetValue.from({chain:r.Chain.Tron,value:0.1}):r.AssetValue.from({chain:r.Chain.Tron,value:15});return c.isGasAsset?Wn({recipient:f,senderAddress:T}):Sn({assetValue:c,recipient:f,senderAddress:T})}catch(T){throw r.warnOnce({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${T instanceof Error?T.message:T}`}),new r.SwapKitError("toolbox_fee_estimation_failed",{chain:r.Chain.Tron,error:T})}}async function I({recipient:c,assetValue:f,memo:e,sender:_,expiration:T}){if(!q(c)||!q(_))throw new r.SwapKitError("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(f.isGasAsset){let x=await zn({amount:f.getBaseValue("number"),from:_,to:c});return Jn({expiration:T,memo:e,transaction:x})}let u=f.address;if(!u)throw new r.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:f.toString()});return w({contractAddress:u,expiration:T,functionSelector:"transfer(address,uint256)",memo:e,parameter:Z([{type:"address",value:c},{type:"uint256",value:f.getBaseValue("string")}]),sender:_})}async function s(c){Y(c);let f=await g();if(!f)throw new r.SwapKitError("toolbox_tron_no_signer");return f.signTransaction(c)}async function Kn(c){let f=await s(c);return O(f)}function p({assetAddress:c,spenderAddress:f,from:e}){return Yn({assetAddress:c,owner:e,spender:f})}async function Nn({assetAddress:c,spenderAddress:f,from:e,amount:_}){let T=await p({assetAddress:c,from:e,spenderAddress:f});if(!_)return T>0n;return T>=BigInt(_)}async function Dn({assetAddress:c,spenderAddress:f,amount:e,from:_}){if(!q(c)||!q(f))throw new r.SwapKitError("toolbox_tron_approve_failed");let T=await g();if(!T)throw new r.SwapKitError("toolbox_tron_no_signer");let u=_||await m(),x=e!==void 0?BigInt(e).toString():wi;try{let h=await w({contractAddress:c,functionSelector:"approve(address,uint256)",parameter:Z([{type:"address",value:f},{type:"uint256",value:x}]),sender:u}),z=await T.signTransaction(h),G=await O(z);if(!G)throw new r.SwapKitError("toolbox_tron_approve_failed");return G}catch(h){if(h instanceof r.SwapKitError)throw h;throw new r.SwapKitError("toolbox_tron_approve_failed",{error:h})}}return{approve:Dn,broadcastTransaction:O,createTransaction:I,estimateTransactionFee:kn,getAddress:m,getApprovedAmount:p,getBalance:$,getRpcUrl:()=>r.getRPCUrl(r.Chain.Tron),isApproved:Nn,signAndBroadcastTransaction:Kn,signTransaction:s,transfer:K,validateAddress:q}}var Un,jn,Xn,r,U,Mn,ei=268,_i=65000,Pi=345,L="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",wi="115792089237316195423570985008687907853269984665640564039457584007913129639935";var An=X(()=>{mn();Zn();d();Un=require("@noble/hashes/utils.js"),jn=require("@scure/bip32"),Xn=require("@scure/bip39"),r=require("@swapkit/helpers"),U=require("ts-pattern"),Mn=q});var ui={};sn(ui,{validateTronAddress:()=>Mn,getTronToolbox:()=>Bn,getTronPrivateKeyFromMnemonic:()=>Gn});module.exports=Ln(ui);var xi=X(()=>{An()});xi();
|
|
1
|
+
var az=Object.create;var{getPrototypeOf:rz,defineProperty:T,getOwnPropertyNames:Zz,getOwnPropertyDescriptor:sz}=Object,$z=Object.prototype.hasOwnProperty;function Yz(z){return this[z]}var ez,zJ,RJ=(z,J,Q)=>{var Z=z!=null&&typeof z==="object";if(Z){var Y=J?ez??=new WeakMap:zJ??=new WeakMap,q=Y.get(z);if(q)return q}Q=z!=null?az(rz(z)):{};let W=J||!z||!z.__esModule?T(Q,"default",{value:z,enumerable:!0}):Q;for(let k of Zz(z))if(!$z.call(W,k))T(W,k,{get:Yz.bind(z,k),enumerable:!0});if(Z)Y.set(z,W);return W},JJ=(z)=>{var J=(Qz??=new WeakMap).get(z),Q;if(J)return J;if(J=T({},"__esModule",{value:!0}),z&&typeof z==="object"||typeof z==="function"){for(var Z of Zz(z))if(!$z.call(J,Z))T(J,Z,{get:Yz.bind(z,Z),enumerable:!(Q=sz(z,Z))||Q.enumerable})}return Qz.set(z,J),J},Qz;var QJ=(z)=>z;function ZJ(z,J){this[z]=QJ.bind(null,J)}var $J=(z,J)=>{for(var Q in J)T(z,Q,{get:J[Q],enumerable:!0,configurable:!0,set:ZJ.bind(J,Q)})};var f=(z,J)=>()=>(z&&(J=z(z=0)),J);function u(z,J){let Q=0n,Z=0n,Y=J;while(Y<z.length&&Y-J<10){let q=z[Y++];if(q===void 0)break;if(Q|=BigInt(q&127)<<Z,Z+=7n,(q&128)===0)return[Q,Y]}throw new R.SwapKitError("toolbox_tron_transaction_creation_failed")}function w(z){let J=[],Q=z<0n?z+2n**64n:z;while(Q>=128n)J.push(Number(Q&0x7fn)|128),Q>>=7n;return J.push(Number(Q)),J}function y(z,J,Q){let Z=z.get(J);if(Z)Z.push(Q);else z.set(J,[Q])}function qJ(z){let J=new Map,Q=0;while(Q<z.length){let[Z,Y]=u(z,Q);Q=Y;let q=Number(Z>>3n),W=Number(Z&7n);if(W===E){let[k,K]=u(z,Q);Q=K,y(J,q,{data:new Uint8Array(w(k)),wireType:E})}else if(W===A){let[k,K]=u(z,Q);Q=K;let D=Number(k);if(D<0||Q+D>z.length)throw new R.SwapKitError("toolbox_tron_transaction_creation_failed");let m=z.slice(Q,Q+D);Q+=D,y(J,q,{data:m,wireType:A})}else if(W===Xz){if(Q+8>z.length)throw new R.SwapKitError("toolbox_tron_transaction_creation_failed");let k=z.slice(Q,Q+8);Q+=8,y(J,q,{data:k,wireType:Xz})}else if(W===jz){if(Q+4>z.length)throw new R.SwapKitError("toolbox_tron_transaction_creation_failed");let k=z.slice(Q,Q+4);Q+=4,y(J,q,{data:k,wireType:jz})}else throw new R.SwapKitError("toolbox_tron_transaction_creation_failed")}return J}function GJ(z){let J=[];for(let[q,W]of[...z.entries()].sort(([k],[K])=>k-K))for(let{wireType:k,data:K}of W){let D=BigInt(q<<3|k);if(J.push(new Uint8Array(w(D))),k===A)J.push(new Uint8Array(w(BigInt(K.length))));J.push(K)}let Q=J.reduce((q,W)=>q+W.length,0),Z=new Uint8Array(Q),Y=0;for(let q of J)Z.set(q,Y),Y+=q.length;return Z}function Gz(z,J){if(!z||z.length%2!==0)throw new R.SwapKitError("toolbox_tron_transaction_creation_failed");let Q=S.hexToBytes(z),Z=qJ(Q);if(J.expiration!==void 0)Z.set(YJ,[{data:new Uint8Array(w(BigInt(J.expiration))),wireType:E}]);if(J.data!==void 0)Z.set(XJ,[{data:S.hexToBytes(J.data),wireType:A}]);if(J.fee_limit!==void 0)Z.set(jJ,[{data:new Uint8Array(w(BigInt(J.fee_limit))),wireType:E}]);let Y=GJ(Z),q=S.bytesToHex(Y),W=S.bytesToHex(qz.sha256(Y));return{raw_data_hex:q,txID:W}}var qz,S,R,E=0,Xz=1,A=2,jz=5,YJ=8,XJ=10,jJ=18;var Wz=f(()=>{qz=require("@noble/hashes/sha2.js"),S=require("@noble/hashes/utils.js"),R=require("@swapkit/helpers")});function B(z){if(typeof z!=="string")return!1;try{let J=h.decode(z);return J.length===21&&J[0]===Uz}catch{return!1}}function Cz(z){return N.bytesToHex(h.decode(z))}function MJ(z){return h.decode(z).slice(1)}function kz(z){let J=p.secp256k1.getPublicKey(N.hexToBytes(z),!1),Q=Mz.keccak_256(J.slice(1)).slice(-20),Z=new Uint8Array(21);return Z[0]=Uz,Z.set(Q,1),h.encode(Z)}function Kz({txID:z,privateKey:J}){let Q=p.secp256k1.sign(N.hexToBytes(z),N.hexToBytes(J),{format:"recovered",prehash:!1}),Z=Q[0]??0,Y=N.bytesToHex(Q.slice(1,33)),q=N.bytesToHex(Q.slice(33,65)),W=(Z+27).toString(16).padStart(2,"0");return Y+q+W}function v({txID:z,raw_data_hex:J}){let Q=N.bytesToHex(l.sha256(N.hexToBytes(J)));if(z!==Q)throw new c.SwapKitError("toolbox_tron_invalid_transaction_integrity",{expected:Q,txID:z})}function OJ(z){return`000000000000000000000000${N.bytesToHex(MJ(z))}`}function UJ(z){let J=typeof z==="bigint"?z:BigInt(z);if(J<0n||J>=WJ)throw new c.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:J.toString()});return J.toString(16).padStart(64,"0")}function _(z){return z.map(({type:J,value:Q})=>J==="address"?OJ(Q):UJ(BigInt(Q))).join("")}function Pz(z){return N.bytesToHex(new TextEncoder().encode(z))}var p,l,Mz,N,Oz,c,h,Uz=65,WJ;var o=f(()=>{p=require("@noble/curves/secp256k1.js"),l=require("@noble/hashes/sha2.js"),Mz=require("@noble/hashes/sha3.js"),N=require("@noble/hashes/utils.js"),Oz=require("@scure/base"),c=require("@swapkit/helpers"),h=Oz.createBase58check(l.sha256),WJ=2n**256n});function Lz(){try{return C.getRPCUrlSync(C.Chain.Tron)}catch{return Hz}}function Nz(){let z=new AbortController,J=setTimeout(()=>z.abort(),HJ);return{cleanup:()=>clearTimeout(J),signal:z.signal}}async function V(z,J){let{signal:Q,cleanup:Z}=Nz();try{let Y=await fetch(`${Lz()}${z}`,{body:JSON.stringify(J),headers:{"Content-Type":"application/json"},method:"POST",signal:Q});if(!Y.ok)throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:`${Y.status} ${Y.statusText} on ${z}`});return await Y.json()}finally{Z()}}async function Bz(z,J){let{signal:Q,cleanup:Z}=Nz();try{let Y=await fetch(`${J??Lz()}${z}`,{headers:{"Content-Type":"application/json"},signal:Q});if(!Y.ok)throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:`${Y.status} ${Y.statusText} on ${z}`});return await Y.json()}finally{Z()}}async function Dz(z){if(!B(z))throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{address:z,message:"Invalid address"});try{let J=await Bz(`/v1/accounts/${z}`,Hz);if(!(J.success&&J.data)||J.data.length===0)return;let Q;try{Q=Cz(z).toLowerCase()}catch{Q=z.toLowerCase()}let Z=J.data.find((Y)=>Y.address.toLowerCase()===Q);if(!Z)return;return{balance:Z.balance,trc20:Z.trc20||[]}}catch(J){if(J instanceof C.SwapKitError)throw J;throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{address:z,message:J instanceof Error?J.message:"Unknown error"})}}async function Fz({from:z,to:J,amount:Q}){let Y=await V("/wallet/createtransaction",{amount:Q,owner_address:z,to_address:J,visible:!0});if(!Y.txID||!Y.raw_data_hex||!Y.raw_data)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let W=Y.raw_data?.contract?.[0]?.parameter?.value;if(W?.to_address!==J||W?.owner_address!==z||W?.amount!==Q)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");return v(Y),Y}async function Rz({ownerAddress:z,contractAddress:J,functionSelector:Q,parameter:Z,feeLimit:Y,callValue:q=0}){let W=await V("/wallet/triggersmartcontract",{call_value:q,contract_address:J,fee_limit:Y,function_selector:Q,owner_address:z,parameter:Z,visible:!0});if(!W.result.result||!W.transaction?.txID||!W.transaction?.raw_data_hex)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");let K=W.transaction.raw_data?.contract?.[0]?.parameter?.value;if(K?.contract_address!==J||K?.owner_address!==z)throw new C.SwapKitError("toolbox_tron_transaction_creation_failed");return v(W.transaction),W.transaction}function Vz({ownerAddress:z,contractAddress:J,functionSelector:Q,parameter:Z}){return V("/wallet/triggerconstantcontract",{contract_address:J,function_selector:Q,owner_address:z,parameter:Z,visible:!0})}function LJ({ownerAddress:z,contractAddress:J,functionSelector:Q,parameter:Z}){return V("/wallet/estimateenergy",{contract_address:J,function_selector:Q,owner_address:z,parameter:Z,visible:!0})}async function x(z){try{let{result:J,txid:Q}=await V("/wallet/broadcasttransaction",{raw_data:z.raw_data,raw_data_hex:z.raw_data_hex,signature:z.signature,txID:z.txID,visible:z.visible});if(!J||!Q)throw new C.SwapKitError("toolbox_tron_token_transfer_failed");return Q}catch(J){throw new C.SwapKitError("toolbox_tron_broadcast_failed",{error:J})}}async function g(){let z={};try{let{chainParameter:J}=await Bz("/wallet/getchainparameters");for(let Q of J)z[Q.key]=Q.value}catch(J){C.warnOnce({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${J instanceof Error?J.message:J}`})}return{bandwidthFee:z.getTransactionFee??CJ,createAccountFee:z.getCreateNewAccountFeeInSystemContract??z.getCreateAccountFee??kJ,energyFee:z.getEnergyFee??KJ,memoFee:z.getMemoFee??PJ}}async function i(z){try{let J=await V("/wallet/getaccountresource",{address:z,visible:!0});return{bandwidth:{free:(J.freeNetLimit??600)-(J.freeNetUsed??0),total:J.NetLimit??0,used:J.NetUsed??0},energy:{total:J.EnergyLimit??0,used:J.EnergyUsed??0}}}catch(J){return C.warnOnce({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${J instanceof Error?J.message:J}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function b(z){try{let J=await V("/wallet/getaccount",{address:z,visible:!0});return J&&Object.keys(J).length>0}catch{return!1}}async function n(z){try{let J=await LJ({...z,ownerAddress:z.sender}),Q=J.energy_required??J.energyRequired;if(J.result&&!J.result.result)throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:J.result.message||"estimateenergy failed"});if(Q!==void 0){if(Number.isFinite(Q)&&Q>0)return Q;throw new C.SwapKitError("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(J){C.warnOnce({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${J instanceof Error?J.message:J}`})}try{let{energy_used:J}=await Vz({...z,ownerAddress:z.sender});return J}catch(J){return C.warnOnce({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy, using default: ${J instanceof Error?J.message:J}`}),65000}}async function Sz({assetAddress:z,owner:J,spender:Q}){let Z=_([{type:"address",value:J},{type:"address",value:Q}]),q=(await Vz({contractAddress:z,functionSelector:"allowance(address,address)",ownerAddress:Q,parameter:Z})).constant_result?.[0];if(!q)return 0n;try{return BigInt(`0x${q}`)}catch{return 0n}}var C,Hz="https://api.trongrid.io",CJ=1000,kJ=1e6,KJ=420,PJ=1e6,HJ=30000;var vz=f(()=>{o();C=require("@swapkit/helpers")});function yz({phrase:z,derivationPath:J}){let Q=xz.HDKey.fromMasterSeed(gz.mnemonicToSeedSync(z)).derive(J);if(!Q.privateKey)throw new $.SwapKitError("toolbox_tron_no_signer");return wz.bytesToHex(Q.privateKey)}function Ez({phrase:z,derivationPath:J,index:Q}){let Z=J||$.derivationPathToString($.updateDerivationPath($.NetworkDerivationPath[$.Chain.Tron],{index:Q||0}));return yz({derivationPath:Z,phrase:z})}function BJ({phrase:z,derivationPath:J}){let Q=yz({derivationPath:J,phrase:z}),Z=kz(Q);return{getAddress:()=>Promise.resolve(Z),signTransaction:(Y)=>{v(Y);let q=Kz({privateKey:Q,txID:Y.txID});return Promise.resolve({...Y,signature:[q]})}}}function fz({transaction:z,memo:J,expiration:Q,feeLimit:Z}){let Y={},q={};if(Z!==void 0&&z.raw_data)Y.fee_limit=Z,q.fee_limit=Z;if(J){let K=Pz(J);Y.data=K,q.data=K}if(Q){let K=z.raw_data.expiration+Q*1000;Y.expiration=K,q.expiration=K}if(Object.keys(Y).length===0)return z;let{raw_data_hex:W,txID:k}=Gz(z.raw_data_hex,Y);return{...z,raw_data:{...z.raw_data,...q},raw_data_hex:W,txID:k}}function Az(z={}){let J="index"in z?z.index||0:0,Q=$.derivationPathToString("derivationPath"in z&&z.derivationPath?z.derivationPath:$.updateDerivationPath($.NetworkDerivationPath[$.Chain.Tron],{index:J})),Z,Y=!1;function q(){if(Y)return Promise.resolve(Z);return Z=I.match(z).with({phrase:I.P.string},({phrase:X})=>BJ({derivationPath:Q,phrase:X})).with({signer:I.P.not(I.P.nullish)},({signer:X})=>X).otherwise(()=>{return}),Y=!0,Promise.resolve(Z)}async function W(){let X=await q();if(!X)throw new $.SwapKitError("toolbox_tron_no_signer");return X.getAddress()}async function k(X,j){let M=X||Iz,G=j??(await g()).energyFee,U=M*G,O=Math.ceil(U*1.5);return Math.min(Math.max(O,1e7),150000000)}async function K({contractAddress:X,functionSelector:j,parameter:M,sender:G,memo:U,expiration:O,extraEnergy:H=0}){let P=await n({contractAddress:X,functionSelector:j,parameter:M,sender:G}),L=await k(P+H),F=await Rz({contractAddress:X,feeLimit:L,functionSelector:j,ownerAddress:G,parameter:M});return fz({expiration:O,feeLimit:L,memo:U,transaction:F})}async function D(X){if(!B(X))return[$.AssetValue.from({chain:$.Chain.Tron})];try{let j=await Dz(X);if(!j)return[$.AssetValue.from({chain:$.Chain.Tron})];let M=[$.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:6,value:String(j.balance)})],G=j.trc20?.find((U)=>(t in U));if(G){let U=G[t];M.push($.AssetValue.from({asset:`TRON.USDT-${t}`,fromBaseDecimal:6,value:U}))}return M}catch(j){return $.warnOnce({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${j instanceof Error?j.message:j}`}),[$.AssetValue.from({chain:$.Chain.Tron})]}}async function m({recipient:X,assetValue:j,memo:M,expiration:G}){if(!B(X))throw new $.SwapKitError("toolbox_tron_token_transfer_failed",{message:"invalid address"});let U=await q();if(!U)throw new $.SwapKitError("toolbox_tron_no_signer");try{let O=await W(),H=await r({assetValue:j,expiration:G,memo:M,recipient:X,sender:O}),P=await U.signTransaction(H),L=await x(P);if(!L)throw new $.SwapKitError("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return L}catch(O){throw new $.SwapKitError("toolbox_tron_token_transfer_failed",{message:O instanceof Error?O.message:String(O)})}}function a({requiredBandwidth:X,resources:j,feePerUnit:M}){let G=Math.max(0,j.free+j.total-j.used);return X>G?(X-G)*M:0}async function mz({memo:X,recipient:j,senderAddress:M}){let[G,U,O]=await Promise.all([g(),b(j),i(M)]),H=U?0:G.createAccountFee,P=a({feePerUnit:G.bandwidthFee,requiredBandwidth:_z,resources:O.bandwidth}),L=X?G.memoFee:0;return $.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:$.BaseDecimal.TRON,value:H+P+L})}async function uz({assetValue:X,memo:j,recipient:M,senderAddress:G}){let U=X.address;if(!U)throw new $.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:X.toString()});let[O,H,P,L]=await Promise.all([g(),b(M),i(G),n({contractAddress:U,functionSelector:"transfer(address,uint256)",parameter:_([{type:"address",value:M},{type:"uint256",value:X.getBaseValue("string")}]),sender:G})]),zz=L+(H?0:d),nz=a({feePerUnit:O.bandwidthFee,requiredBandwidth:Tz,resources:P.bandwidth}),Jz=Math.max(0,P.energy.total-P.energy.used),dz=zz>Jz?(zz-Jz)*O.energyFee:0,tz=j?O.memoFee:0;return $.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:$.BaseDecimal.TRON,value:nz+dz+tz})}async function pz({assetValue:X,memo:j,recipient:M}){let[G,U]=await Promise.all([g(),b(M)]);if(X.isGasAsset){let L=U?0:G.createAccountFee,F=j?G.memoFee:0;return $.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:$.BaseDecimal.TRON,value:L+_z*G.bandwidthFee+F})}let H=await k(Iz+(U?0:d),G.energyFee),P=j?G.memoFee:0;return $.AssetValue.from({chain:$.Chain.Tron,fromBaseDecimal:$.BaseDecimal.TRON,value:H+Tz*G.bandwidthFee+P})}async function lz({assetValue:X,memo:j,recipient:M,sender:G}){let U=await q();try{let O=G?G:U?await W():void 0;if(!O)return pz({assetValue:X,memo:j,recipient:M});return X.isGasAsset?mz({memo:j,recipient:M,senderAddress:O}):uz({assetValue:X,memo:j,recipient:M,senderAddress:O})}catch(O){throw $.warnOnce({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${O instanceof Error?O.message:O}`}),new $.SwapKitError("toolbox_fee_estimation_failed",{chain:$.Chain.Tron,error:O})}}async function r({recipient:X,assetValue:j,memo:M,sender:G,expiration:U}){if(!B(X)||!B(G))throw new $.SwapKitError("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(j.isGasAsset){let P=await Fz({amount:j.getBaseValue("number"),from:G,to:X});return fz({expiration:U,memo:M,transaction:P})}let O=j.address;if(!O)throw new $.SwapKitError("toolbox_tron_invalid_token_identifier",{identifier:j.toString()});let H=await b(X);return K({contractAddress:O,expiration:U,extraEnergy:H?0:d,functionSelector:"transfer(address,uint256)",memo:M,parameter:_([{type:"address",value:X},{type:"uint256",value:j.getBaseValue("string")}]),sender:G})}async function s(X){v(X);let j=await q();if(!j)throw new $.SwapKitError("toolbox_tron_no_signer");return j.signTransaction(X)}async function cz(X){let j=await s(X);return x(j)}function e({assetAddress:X,spenderAddress:j,from:M}){return Sz({assetAddress:X,owner:M,spender:j})}async function oz({assetAddress:X,spenderAddress:j,from:M,amount:G}){let U=await e({assetAddress:X,from:M,spenderAddress:j});if(!G)return U>0n;return U>=BigInt(G)}async function iz({assetAddress:X,spenderAddress:j,amount:M,from:G}){if(!B(X)||!B(j))throw new $.SwapKitError("toolbox_tron_approve_failed");let U=await q();if(!U)throw new $.SwapKitError("toolbox_tron_no_signer");let O=G||await W(),H=M!==void 0?BigInt(M).toString():NJ;try{let P=await K({contractAddress:X,functionSelector:"approve(address,uint256)",parameter:_([{type:"address",value:j},{type:"uint256",value:H}]),sender:O}),L=await U.signTransaction(P),F=await x(L);if(!F)throw new $.SwapKitError("toolbox_tron_approve_failed");return F}catch(P){if(P instanceof $.SwapKitError)throw P;throw new $.SwapKitError("toolbox_tron_approve_failed",{error:P})}}return{approve:iz,broadcastTransaction:x,createTransaction:r,estimateTransactionFee:lz,getAddress:W,getApprovedAmount:e,getBalance:D,getRpcUrl:()=>$.getRPCUrl($.Chain.Tron),isApproved:oz,signAndBroadcastTransaction:cz,signTransaction:s,transfer:m,validateAddress:B}}var wz,xz,gz,$,I,bz,_z=268,Iz=65000,d=25000,Tz=345,t="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",NJ="115792089237316195423570985008687907853269984665640564039457584007913129639935";var hz=f(()=>{Wz();vz();o();wz=require("@noble/hashes/utils.js"),xz=require("@scure/bip32"),gz=require("@scure/bip39"),$=require("@swapkit/helpers"),I=require("ts-pattern"),bz=B});var DJ={};$J(DJ,{validateTronAddress:()=>bz,getTronToolbox:()=>Az,getTronPrivateKeyFromMnemonic:()=>Ez});module.exports=JJ(DJ);var FJ=f(()=>{hz()});FJ();
|
package/dist/src/tron/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Rn=Object.defineProperty;var bn=(n)=>n;function dn(n,i){this[n]=bn.bind(null,i)}var yn=(n,i)=>{for(var o in i)Rn(n,o,{get:i[o],enumerable:!0,configurable:!0,set:dn.bind(i,o)})};var j=(n,i)=>()=>(n&&(i=n(n=0)),i);var zi=((n)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(i,o)=>(typeof require<"u"?require:i)[o]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});import{sha256 as Vn}from"@noble/hashes/sha2.js";import{bytesToHex as E,hexToBytes as nn}from"@noble/hashes/utils.js";import{SwapKitError as Q}from"@swapkit/helpers";function N(n,i){let o=0n,t=0n,r=i;while(r<n.length&&r-i<10){let f=n[r++];if(f===void 0)break;if(o|=BigInt(f&127)<<t,t+=7n,(f&128)===0)return[o,r]}throw new Q("toolbox_tron_transaction_creation_failed")}function X(n){let i=[],o=n<0n?n+2n**64n:n;while(o>=128n)i.push(Number(o&0x7fn)|128),o>>=7n;return i.push(Number(o)),i}function G(n,i,o){let t=n.get(i);if(t)t.push(o);else n.set(i,[o])}function In(n){let i=new Map,o=0;while(o<n.length){let[t,r]=N(n,o);o=r;let f=Number(t>>3n),m=Number(t&7n);if(m===B){let[P,_]=N(n,o);o=_,G(i,f,{data:new Uint8Array(X(P)),wireType:B})}else if(m===A){let[P,_]=N(n,o);o=_;let z=Number(P);if(z<0||o+z>n.length)throw new Q("toolbox_tron_transaction_creation_failed");let K=n.slice(o,o+z);o+=z,G(i,f,{data:K,wireType:A})}else if(m===on){if(o+8>n.length)throw new Q("toolbox_tron_transaction_creation_failed");let P=n.slice(o,o+8);o+=8,G(i,f,{data:P,wireType:on})}else if(m===tn){if(o+4>n.length)throw new Q("toolbox_tron_transaction_creation_failed");let P=n.slice(o,o+4);o+=4,G(i,f,{data:P,wireType:tn})}else throw new Q("toolbox_tron_transaction_creation_failed")}return i}function sn(n){let i=[];for(let[f,m]of[...n.entries()].sort(([P],[_])=>P-_))for(let{wireType:P,data:_}of m){let z=BigInt(f<<3|P);if(i.push(new Uint8Array(X(z))),P===A)i.push(new Uint8Array(X(BigInt(_.length))));i.push(_)}let o=i.reduce((f,m)=>f+m.length,0),t=new Uint8Array(o),r=0;for(let f of i)t.set(f,r),r+=f.length;return t}function rn(n,i){if(!n||n.length%2!==0)throw new Q("toolbox_tron_transaction_creation_failed");let o=nn(n),t=In(o);if(i.expiration!==void 0)t.set(Hn,[{data:new Uint8Array(X(BigInt(i.expiration))),wireType:B}]);if(i.data!==void 0)t.set(Ln,[{data:nn(i.data),wireType:A}]);if(i.fee_limit!==void 0)t.set(ln,[{data:new Uint8Array(X(BigInt(i.fee_limit))),wireType:B}]);let r=sn(t),f=E(r),m=E(Vn(r));return{raw_data_hex:f,txID:m}}var B=0,on=1,A=2,tn=5,Hn=8,Ln=10,ln=18;var an=()=>{};import{secp256k1 as cn}from"@noble/curves/secp256k1.js";import{sha256 as fn}from"@noble/hashes/sha2.js";import{keccak_256 as pn}from"@noble/hashes/sha3.js";import{bytesToHex as Y,hexToBytes as W}from"@noble/hashes/utils.js";import{createBase58check as En}from"@scure/base";import{SwapKitError as gn}from"@swapkit/helpers";function F(n){if(typeof n!=="string")return!1;try{let i=S.decode(n);return i.length===21&&i[0]===mn}catch{return!1}}function Tn(n){return Y(S.decode(n))}function ii(n){return S.decode(n).slice(1)}function en(n){let i=cn.getPublicKey(W(n),!1),o=pn(i.slice(1)).slice(-20),t=new Uint8Array(21);return t[0]=mn,t.set(o,1),S.encode(t)}function _n({txID:n,privateKey:i}){let o=cn.sign(W(n),W(i),{format:"recovered",prehash:!1}),t=o[0]??0,r=Y(o.slice(1,33)),f=Y(o.slice(33,65)),m=(t+27).toString(16).padStart(2,"0");return r+f+m}function Z({txID:n,raw_data_hex:i}){let o=Y(fn(W(i)));if(n!==o)throw new gn("toolbox_tron_invalid_transaction_integrity",{expected:o,txID:n})}function oi(n){return`000000000000000000000000${Y(ii(n))}`}function ti(n){let i=typeof n==="bigint"?n:BigInt(n);if(i<0n||i>=ni)throw new gn("toolbox_tron_invalid_token_identifier",{identifier:i.toString()});return i.toString(16).padStart(64,"0")}function J(n){return n.map(({type:i,value:o})=>i==="address"?oi(o):ti(BigInt(o))).join("")}function Pn(n){return Y(new TextEncoder().encode(n))}var S,mn=65,ni;var D=j(()=>{S=En(fn),ni=2n**256n});import{Chain as ri,getRPCUrlSync as ai,SwapKitError as q,warnOnce as R}from"@swapkit/helpers";function vn(){try{return ai(ri.Tron)}catch{return wn}}function un(){let n=new AbortController,i=setTimeout(()=>n.abort(),mi);return{cleanup:()=>clearTimeout(i),signal:n.signal}}async function U(n,i){let{signal:o,cleanup:t}=un();try{let r=await fetch(`${vn()}${n}`,{body:JSON.stringify(i),headers:{"Content-Type":"application/json"},method:"POST",signal:o});if(!r.ok)throw new q("toolbox_tron_trongrid_api_error",{message:`${r.status} ${r.statusText} on ${n}`});return await r.json()}finally{t()}}async function xn(n,i){let{signal:o,cleanup:t}=un();try{let r=await fetch(`${i??vn()}${n}`,{headers:{"Content-Type":"application/json"},signal:o});if(!r.ok)throw new q("toolbox_tron_trongrid_api_error",{message:`${r.status} ${r.statusText} on ${n}`});return await r.json()}finally{t()}}async function hn(n){if(!F(n))throw new q("toolbox_tron_trongrid_api_error",{address:n,message:"Invalid address"});try{let i=await xn(`/v1/accounts/${n}`,wn);if(!(i.success&&i.data)||i.data.length===0)return;let o;try{o=Tn(n).toLowerCase()}catch{o=n.toLowerCase()}let t=i.data.find((r)=>r.address.toLowerCase()===o);if(!t)return;return{balance:t.balance,trc20:t.trc20||[]}}catch(i){if(i instanceof q)throw i;throw new q("toolbox_tron_trongrid_api_error",{address:n,message:i instanceof Error?i.message:"Unknown error"})}}async function Fn({from:n,to:i,amount:o}){let r=await U("/wallet/createtransaction",{amount:o,owner_address:n,to_address:i,visible:!0});if(!r.txID||!r.raw_data_hex||!r.raw_data)throw new q("toolbox_tron_transaction_creation_failed");let m=r.raw_data?.contract?.[0]?.parameter?.value;if(m?.to_address!==i||m?.owner_address!==n||m?.amount!==o)throw new q("toolbox_tron_transaction_creation_failed");return Z(r),r}async function qn({ownerAddress:n,contractAddress:i,functionSelector:o,parameter:t,feeLimit:r,callValue:f=0}){let m=await U("/wallet/triggersmartcontract",{call_value:f,contract_address:i,fee_limit:r,function_selector:o,owner_address:n,parameter:t,visible:!0});if(!m.result.result||!m.transaction?.txID||!m.transaction?.raw_data_hex)throw new q("toolbox_tron_transaction_creation_failed");let _=m.transaction.raw_data?.contract?.[0]?.parameter?.value;if(_?.contract_address!==i||_?.owner_address!==n)throw new q("toolbox_tron_transaction_creation_failed");return Z(m.transaction),m.transaction}function $n({ownerAddress:n,contractAddress:i,functionSelector:o,parameter:t}){return U("/wallet/triggerconstantcontract",{contract_address:i,function_selector:o,owner_address:n,parameter:t,visible:!0})}async function M(n){try{let{result:i,txid:o}=await U("/wallet/broadcasttransaction",{raw_data:n.raw_data,raw_data_hex:n.raw_data_hex,signature:n.signature,txID:n.txID,visible:n.visible});if(!i||!o)throw new q("toolbox_tron_token_transfer_failed");return o}catch(i){throw new q("toolbox_tron_broadcast_failed",{error:i})}}async function k(){let n={};try{let{chainParameter:i}=await xn("/wallet/getchainparameters");for(let o of i)n[o.key]=o.value}catch(i){R({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${i instanceof Error?i.message:i}`})}return{bandwidthFee:n.getTransactionFee??ci,createAccountFee:n.getCreateAccountFee??fi,energyFee:n.getEnergyFee??gi}}async function b(n){try{let i=await U("/wallet/getaccountresource",{address:n,visible:!0});return{bandwidth:{free:(i.freeNetLimit??600)-(i.freeNetUsed??0),total:i.NetLimit??0,used:i.NetUsed??0},energy:{total:i.EnergyLimit??0,used:i.EnergyUsed??0}}}catch(i){return R({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${i instanceof Error?i.message:i}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function d(n){try{let i=await U("/wallet/getaccount",{address:n,visible:!0});return i&&Object.keys(i).length>0}catch{return!1}}async function y(n){try{let{energy_used:i}=await $n({...n,ownerAddress:n.sender});return i}catch(i){return R({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy, using default: ${i instanceof Error?i.message:i}`}),65000}}async function zn({assetAddress:n,owner:i,spender:o}){let t=J([{type:"address",value:i},{type:"address",value:o}]),f=(await $n({contractAddress:n,functionSelector:"allowance(address,address)",ownerAddress:o,parameter:t})).constant_result?.[0];if(!f)return 0n;try{return BigInt(`0x${f}`)}catch{return 0n}}var wn="https://api.trongrid.io",ci=1000,fi=1e5,gi=420,mi=30000;var Cn=j(()=>{D()});import{bytesToHex as Ti}from"@noble/hashes/utils.js";import{HDKey as ei}from"@scure/bip32";import{mnemonicToSeedSync as _i}from"@scure/bip39";import{AssetValue as $,BaseDecimal as Qn,Chain as h,derivationPathToString as Jn,getRPCUrl as Pi,NetworkDerivationPath as Un,SwapKitError as v,updateDerivationPath as jn,warnOnce as Yn}from"@swapkit/helpers";import{match as wi,P as V}from"ts-pattern";function Mn({phrase:n,derivationPath:i}){let o=ei.fromMasterSeed(_i(n)).derive(i);if(!o.privateKey)throw new v("toolbox_tron_no_signer");return Ti(o.privateKey)}function On({phrase:n,derivationPath:i,index:o}){let t=i||Jn(jn(Un[h.Tron],{index:o||0}));return Mn({derivationPath:t,phrase:n})}function Fi({phrase:n,derivationPath:i}){let o=Mn({derivationPath:i,phrase:n}),t=en(o);return{getAddress:()=>Promise.resolve(t),signTransaction:(r)=>{Z(r);let f=_n({privateKey:o,txID:r.txID});return Promise.resolve({...r,signature:[f]})}}}function Zn({transaction:n,memo:i,expiration:o,feeLimit:t}){let r={},f={};if(t!==void 0&&n.raw_data)r.fee_limit=t,f.fee_limit=t;if(i){let _=Pn(i);r.data=_,f.data=_}if(o){let _=n.raw_data.expiration+o*1000;r.expiration=_,f.expiration=_}if(Object.keys(r).length===0)return n;let{raw_data_hex:m,txID:P}=rn(n.raw_data_hex,r);return{...n,raw_data:{...n.raw_data,...f},raw_data_hex:m,txID:P}}function Gn(n={}){let i="index"in n?n.index||0:0,o=Jn("derivationPath"in n&&n.derivationPath?n.derivationPath:jn(Un[h.Tron],{index:i})),t,r=!1;function f(){if(r)return Promise.resolve(t);return t=wi(n).with({phrase:V.string},({phrase:a})=>Fi({derivationPath:o,phrase:a})).with({signer:V.not(V.nullish)},({signer:a})=>a).otherwise(()=>{return}),r=!0,Promise.resolve(t)}async function m(){let a=await f();if(!a)throw new v("toolbox_tron_no_signer");return a.getAddress()}async function P(a){let c=a||ui,T=await k(),e=c*T.energyFee,g=Math.ceil(e*1.5);return Math.min(Math.max(g,1e7),150000000)}async function _({contractAddress:a,functionSelector:c,parameter:T,sender:e,memo:g,expiration:w}){let u=await y({contractAddress:a,functionSelector:c,parameter:T,sender:e}),x=await P(u),C=await qn({contractAddress:a,feeLimit:x,functionSelector:c,ownerAddress:e,parameter:T});return Zn({expiration:w,feeLimit:x,memo:g,transaction:C})}async function z(a){if(!F(a))return[$.from({chain:h.Tron})];try{let c=await hn(a);if(!c)return[$.from({chain:h.Tron})];let T=[$.from({chain:h.Tron,fromBaseDecimal:6,value:String(c.balance)})],e=c.trc20?.find((g)=>(H in g));if(e){let g=e[H];T.push($.from({asset:`TRON.USDT-${H}`,fromBaseDecimal:6,value:g}))}return T}catch(c){return Yn({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${c instanceof Error?c.message:c}`}),[$.from({chain:h.Tron})]}}async function K({recipient:a,assetValue:c,memo:T,expiration:e}){if(!F(a))throw new v("toolbox_tron_token_transfer_failed",{message:"invalid address"});let g=await f();if(!g)throw new v("toolbox_tron_no_signer");try{let w=await m(),u=await l({assetValue:c,expiration:e,memo:T,recipient:a,sender:w}),x=await g.signTransaction(u),C=await M(x);if(!C)throw new v("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return C}catch(w){throw new v("toolbox_tron_token_transfer_failed",{message:w instanceof Error?w.message:String(w)})}}function L({requiredBandwidth:a,resources:c,feePerUnit:T}){let e=Math.max(0,c.free+c.total-c.used);return a>e?(a-e)*T:0}async function An({recipient:a,senderAddress:c}){let[T,e,g]=await Promise.all([k(),d(a),b(c)]),w=e?0:T.createAccountFee,u=L({feePerUnit:T.bandwidthFee,requiredBandwidth:vi,resources:g.bandwidth});return $.from({chain:h.Tron,fromBaseDecimal:Qn.TRON,value:w+u})}async function Wn({assetValue:a,recipient:c,senderAddress:T}){let e=a.address;if(!e)throw new v("toolbox_tron_invalid_token_identifier",{identifier:a.toString()});let[g,w,u,x]=await Promise.all([k(),d(c),b(T),y({contractAddress:e,functionSelector:"transfer(address,uint256)",parameter:J([{type:"address",value:c},{type:"uint256",value:a.getBaseValue("string")}]),sender:T})]),C=w?0:g.createAccountFee,O=L({feePerUnit:g.bandwidthFee,requiredBandwidth:xi,resources:u.bandwidth}),p=Math.max(0,u.energy.total-u.energy.used),Dn=x>p?(x-p)*g.energyFee:0;return $.from({chain:h.Tron,fromBaseDecimal:Qn.TRON,value:C+O+Dn})}async function Sn({assetValue:a,recipient:c,sender:T}){let e=await f();try{let g=T?T:e?await m():void 0;if(!g)return a.isGasAsset?$.from({chain:h.Tron,value:0.1}):$.from({chain:h.Tron,value:15});return a.isGasAsset?An({recipient:c,senderAddress:g}):Wn({assetValue:a,recipient:c,senderAddress:g})}catch(g){throw Yn({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${g instanceof Error?g.message:g}`}),new v("toolbox_fee_estimation_failed",{chain:h.Tron,error:g})}}async function l({recipient:a,assetValue:c,memo:T,sender:e,expiration:g}){if(!F(a)||!F(e))throw new v("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(c.isGasAsset){let u=await Fn({amount:c.getBaseValue("number"),from:e,to:a});return Zn({expiration:g,memo:T,transaction:u})}let w=c.address;if(!w)throw new v("toolbox_tron_invalid_token_identifier",{identifier:c.toString()});return _({contractAddress:w,expiration:g,functionSelector:"transfer(address,uint256)",memo:T,parameter:J([{type:"address",value:a},{type:"uint256",value:c.getBaseValue("string")}]),sender:e})}async function I(a){Z(a);let c=await f();if(!c)throw new v("toolbox_tron_no_signer");return c.signTransaction(a)}async function kn(a){let c=await I(a);return M(c)}function s({assetAddress:a,spenderAddress:c,from:T}){return zn({assetAddress:a,owner:T,spender:c})}async function Kn({assetAddress:a,spenderAddress:c,from:T,amount:e}){let g=await s({assetAddress:a,from:T,spenderAddress:c});if(!e)return g>0n;return g>=BigInt(e)}async function Nn({assetAddress:a,spenderAddress:c,amount:T,from:e}){if(!F(a)||!F(c))throw new v("toolbox_tron_approve_failed");let g=await f();if(!g)throw new v("toolbox_tron_no_signer");let w=e||await m(),u=T!==void 0?BigInt(T).toString():hi;try{let x=await _({contractAddress:a,functionSelector:"approve(address,uint256)",parameter:J([{type:"address",value:c},{type:"uint256",value:u}]),sender:w}),C=await g.signTransaction(x),O=await M(C);if(!O)throw new v("toolbox_tron_approve_failed");return O}catch(x){if(x instanceof v)throw x;throw new v("toolbox_tron_approve_failed",{error:x})}}return{approve:Nn,broadcastTransaction:M,createTransaction:l,estimateTransactionFee:Sn,getAddress:m,getApprovedAmount:s,getBalance:z,getRpcUrl:()=>Pi(h.Tron),isApproved:Kn,signAndBroadcastTransaction:kn,signTransaction:I,transfer:K,validateAddress:F}}var Xn,vi=268,ui=65000,xi=345,H="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",hi="115792089237316195423570985008687907853269984665640564039457584007913129639935";var Bn=j(()=>{an();Cn();D();Xn=F});var qi={};yn(qi,{validateTronAddress:()=>Xn,getTronToolbox:()=>Gn,getTronPrivateKeyFromMnemonic:()=>On});var $i=j(()=>{Bn()});$i();export{Xn as validateTronAddress,Gn as getTronToolbox,On as getTronPrivateKeyFromMnemonic};
|
|
1
|
+
var tz=Object.defineProperty;var az=(z)=>z;function rz(z,J){this[z]=az.bind(null,J)}var sz=(z,J)=>{for(var Q in J)tz(z,Q,{get:J[Q],enumerable:!0,configurable:!0,set:rz.bind(J,Q)})};var T=(z,J)=>()=>(z&&(J=z(z=0)),J);var _J=((z)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(z,{get:(J,Q)=>(typeof require<"u"?require:J)[Q]}):z)(function(z){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+z+'" is not supported')});import{sha256 as ez}from"@noble/hashes/sha2.js";import{bytesToHex as Qz,hexToBytes as Zz}from"@noble/hashes/utils.js";import{SwapKitError as S}from"@swapkit/helpers";function l(z,J){let Q=0n,Z=0n,$=J;while($<z.length&&$-J<10){let j=z[$++];if(j===void 0)break;if(Q|=BigInt(j&127)<<Z,Z+=7n,(j&128)===0)return[Q,$]}throw new S("toolbox_tron_transaction_creation_failed")}function f(z){let J=[],Q=z<0n?z+2n**64n:z;while(Q>=128n)J.push(Number(Q&0x7fn)|128),Q>>=7n;return J.push(Number(Q)),J}function b(z,J,Q){let Z=z.get(J);if(Z)Z.push(Q);else z.set(J,[Q])}function ZJ(z){let J=new Map,Q=0;while(Q<z.length){let[Z,$]=l(z,Q);Q=$;let j=Number(Z>>3n),W=Number(Z&7n);if(W===y){let[k,U]=l(z,Q);Q=U,b(J,j,{data:new Uint8Array(f(k)),wireType:y})}else if(W===E){let[k,U]=l(z,Q);Q=U;let F=Number(k);if(F<0||Q+F>z.length)throw new S("toolbox_tron_transaction_creation_failed");let p=z.slice(Q,Q+F);Q+=F,b(J,j,{data:p,wireType:E})}else if(W===$z){if(Q+8>z.length)throw new S("toolbox_tron_transaction_creation_failed");let k=z.slice(Q,Q+8);Q+=8,b(J,j,{data:k,wireType:$z})}else if(W===Yz){if(Q+4>z.length)throw new S("toolbox_tron_transaction_creation_failed");let k=z.slice(Q,Q+4);Q+=4,b(J,j,{data:k,wireType:Yz})}else throw new S("toolbox_tron_transaction_creation_failed")}return J}function $J(z){let J=[];for(let[j,W]of[...z.entries()].sort(([k],[U])=>k-U))for(let{wireType:k,data:U}of W){let F=BigInt(j<<3|k);if(J.push(new Uint8Array(f(F))),k===E)J.push(new Uint8Array(f(BigInt(U.length))));J.push(U)}let Q=J.reduce((j,W)=>j+W.length,0),Z=new Uint8Array(Q),$=0;for(let j of J)Z.set(j,$),$+=j.length;return Z}function Xz(z,J){if(!z||z.length%2!==0)throw new S("toolbox_tron_transaction_creation_failed");let Q=Zz(z),Z=ZJ(Q);if(J.expiration!==void 0)Z.set(zJ,[{data:new Uint8Array(f(BigInt(J.expiration))),wireType:y}]);if(J.data!==void 0)Z.set(JJ,[{data:Zz(J.data),wireType:E}]);if(J.fee_limit!==void 0)Z.set(QJ,[{data:new Uint8Array(f(BigInt(J.fee_limit))),wireType:y}]);let $=$J(Z),j=Qz($),W=Qz(ez($));return{raw_data_hex:j,txID:W}}var y=0,$z=1,E=2,Yz=5,zJ=8,JJ=10,QJ=18;var jz=()=>{};import{secp256k1 as qz}from"@noble/curves/secp256k1.js";import{sha256 as Gz}from"@noble/hashes/sha2.js";import{keccak_256 as YJ}from"@noble/hashes/sha3.js";import{bytesToHex as v,hexToBytes as A}from"@noble/hashes/utils.js";import{createBase58check as XJ}from"@scure/base";import{SwapKitError as Wz}from"@swapkit/helpers";function B(z){if(typeof z!=="string")return!1;try{let J=h.decode(z);return J.length===21&&J[0]===Mz}catch{return!1}}function Oz(z){return v(h.decode(z))}function qJ(z){return h.decode(z).slice(1)}function Uz(z){let J=qz.getPublicKey(A(z),!1),Q=YJ(J.slice(1)).slice(-20),Z=new Uint8Array(21);return Z[0]=Mz,Z.set(Q,1),h.encode(Z)}function Cz({txID:z,privateKey:J}){let Q=qz.sign(A(z),A(J),{format:"recovered",prehash:!1}),Z=Q[0]??0,$=v(Q.slice(1,33)),j=v(Q.slice(33,65)),W=(Z+27).toString(16).padStart(2,"0");return $+j+W}function _({txID:z,raw_data_hex:J}){let Q=v(Gz(A(J)));if(z!==Q)throw new Wz("toolbox_tron_invalid_transaction_integrity",{expected:Q,txID:z})}function GJ(z){return`000000000000000000000000${v(qJ(z))}`}function WJ(z){let J=typeof z==="bigint"?z:BigInt(z);if(J<0n||J>=jJ)throw new Wz("toolbox_tron_invalid_token_identifier",{identifier:J.toString()});return J.toString(16).padStart(64,"0")}function I(z){return z.map(({type:J,value:Q})=>J==="address"?GJ(Q):WJ(BigInt(Q))).join("")}function kz(z){return v(new TextEncoder().encode(z))}var h,Mz=65,jJ;var c=T(()=>{h=XJ(Gz),jJ=2n**256n});import{Chain as MJ,getRPCUrlSync as OJ,SwapKitError as L,warnOnce as m}from"@swapkit/helpers";function Pz(){try{return OJ(MJ.Tron)}catch{return Kz}}function Hz(){let z=new AbortController,J=setTimeout(()=>z.abort(),PJ);return{cleanup:()=>clearTimeout(J),signal:z.signal}}async function V(z,J){let{signal:Q,cleanup:Z}=Hz();try{let $=await fetch(`${Pz()}${z}`,{body:JSON.stringify(J),headers:{"Content-Type":"application/json"},method:"POST",signal:Q});if(!$.ok)throw new L("toolbox_tron_trongrid_api_error",{message:`${$.status} ${$.statusText} on ${z}`});return await $.json()}finally{Z()}}async function Lz(z,J){let{signal:Q,cleanup:Z}=Hz();try{let $=await fetch(`${J??Pz()}${z}`,{headers:{"Content-Type":"application/json"},signal:Q});if(!$.ok)throw new L("toolbox_tron_trongrid_api_error",{message:`${$.status} ${$.statusText} on ${z}`});return await $.json()}finally{Z()}}async function Nz(z){if(!B(z))throw new L("toolbox_tron_trongrid_api_error",{address:z,message:"Invalid address"});try{let J=await Lz(`/v1/accounts/${z}`,Kz);if(!(J.success&&J.data)||J.data.length===0)return;let Q;try{Q=Oz(z).toLowerCase()}catch{Q=z.toLowerCase()}let Z=J.data.find(($)=>$.address.toLowerCase()===Q);if(!Z)return;return{balance:Z.balance,trc20:Z.trc20||[]}}catch(J){if(J instanceof L)throw J;throw new L("toolbox_tron_trongrid_api_error",{address:z,message:J instanceof Error?J.message:"Unknown error"})}}async function Bz({from:z,to:J,amount:Q}){let $=await V("/wallet/createtransaction",{amount:Q,owner_address:z,to_address:J,visible:!0});if(!$.txID||!$.raw_data_hex||!$.raw_data)throw new L("toolbox_tron_transaction_creation_failed");let W=$.raw_data?.contract?.[0]?.parameter?.value;if(W?.to_address!==J||W?.owner_address!==z||W?.amount!==Q)throw new L("toolbox_tron_transaction_creation_failed");return _($),$}async function Dz({ownerAddress:z,contractAddress:J,functionSelector:Q,parameter:Z,feeLimit:$,callValue:j=0}){let W=await V("/wallet/triggersmartcontract",{call_value:j,contract_address:J,fee_limit:$,function_selector:Q,owner_address:z,parameter:Z,visible:!0});if(!W.result.result||!W.transaction?.txID||!W.transaction?.raw_data_hex)throw new L("toolbox_tron_transaction_creation_failed");let U=W.transaction.raw_data?.contract?.[0]?.parameter?.value;if(U?.contract_address!==J||U?.owner_address!==z)throw new L("toolbox_tron_transaction_creation_failed");return _(W.transaction),W.transaction}function Fz({ownerAddress:z,contractAddress:J,functionSelector:Q,parameter:Z}){return V("/wallet/triggerconstantcontract",{contract_address:J,function_selector:Q,owner_address:z,parameter:Z,visible:!0})}function HJ({ownerAddress:z,contractAddress:J,functionSelector:Q,parameter:Z}){return V("/wallet/estimateenergy",{contract_address:J,function_selector:Q,owner_address:z,parameter:Z,visible:!0})}async function w(z){try{let{result:J,txid:Q}=await V("/wallet/broadcasttransaction",{raw_data:z.raw_data,raw_data_hex:z.raw_data_hex,signature:z.signature,txID:z.txID,visible:z.visible});if(!J||!Q)throw new L("toolbox_tron_token_transfer_failed");return Q}catch(J){throw new L("toolbox_tron_broadcast_failed",{error:J})}}async function x(){let z={};try{let{chainParameter:J}=await Lz("/wallet/getchainparameters");for(let Q of J)z[Q.key]=Q.value}catch(J){m({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${J instanceof Error?J.message:J}`})}return{bandwidthFee:z.getTransactionFee??UJ,createAccountFee:z.getCreateNewAccountFeeInSystemContract??z.getCreateAccountFee??CJ,energyFee:z.getEnergyFee??kJ,memoFee:z.getMemoFee??KJ}}async function o(z){try{let J=await V("/wallet/getaccountresource",{address:z,visible:!0});return{bandwidth:{free:(J.freeNetLimit??600)-(J.freeNetUsed??0),total:J.NetLimit??0,used:J.NetUsed??0},energy:{total:J.EnergyLimit??0,used:J.EnergyUsed??0}}}catch(J){return m({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${J instanceof Error?J.message:J}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function g(z){try{let J=await V("/wallet/getaccount",{address:z,visible:!0});return J&&Object.keys(J).length>0}catch{return!1}}async function i(z){try{let J=await HJ({...z,ownerAddress:z.sender}),Q=J.energy_required??J.energyRequired;if(J.result&&!J.result.result)throw new L("toolbox_tron_trongrid_api_error",{message:J.result.message||"estimateenergy failed"});if(Q!==void 0){if(Number.isFinite(Q)&&Q>0)return Q;throw new L("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(J){m({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${J instanceof Error?J.message:J}`})}try{let{energy_used:J}=await Fz({...z,ownerAddress:z.sender});return J}catch(J){return m({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy, using default: ${J instanceof Error?J.message:J}`}),65000}}async function Rz({assetAddress:z,owner:J,spender:Q}){let Z=I([{type:"address",value:J},{type:"address",value:Q}]),j=(await Fz({contractAddress:z,functionSelector:"allowance(address,address)",ownerAddress:Q,parameter:Z})).constant_result?.[0];if(!j)return 0n;try{return BigInt(`0x${j}`)}catch{return 0n}}var Kz="https://api.trongrid.io",UJ=1000,CJ=1e6,kJ=420,KJ=1e6,PJ=30000;var Vz=T(()=>{c()});import{bytesToHex as LJ}from"@noble/hashes/utils.js";import{HDKey as NJ}from"@scure/bip32";import{mnemonicToSeedSync as BJ}from"@scure/bip39";import{AssetValue as D,BaseDecimal as u,Chain as N,derivationPathToString as fz,getRPCUrl as DJ,NetworkDerivationPath as wz,SwapKitError as K,updateDerivationPath as xz,warnOnce as Sz}from"@swapkit/helpers";import{match as FJ,P as n}from"ts-pattern";function bz({phrase:z,derivationPath:J}){let Q=NJ.fromMasterSeed(BJ(z)).derive(J);if(!Q.privateKey)throw new K("toolbox_tron_no_signer");return LJ(Q.privateKey)}function yz({phrase:z,derivationPath:J,index:Q}){let Z=J||fz(xz(wz[N.Tron],{index:Q||0}));return bz({derivationPath:Z,phrase:z})}function VJ({phrase:z,derivationPath:J}){let Q=bz({derivationPath:J,phrase:z}),Z=Uz(Q);return{getAddress:()=>Promise.resolve(Z),signTransaction:($)=>{_($);let j=Cz({privateKey:Q,txID:$.txID});return Promise.resolve({...$,signature:[j]})}}}function Tz({transaction:z,memo:J,expiration:Q,feeLimit:Z}){let $={},j={};if(Z!==void 0&&z.raw_data)$.fee_limit=Z,j.fee_limit=Z;if(J){let U=kz(J);$.data=U,j.data=U}if(Q){let U=z.raw_data.expiration+Q*1000;$.expiration=U,j.expiration=U}if(Object.keys($).length===0)return z;let{raw_data_hex:W,txID:k}=Xz(z.raw_data_hex,$);return{...z,raw_data:{...z.raw_data,...j},raw_data_hex:W,txID:k}}function Ez(z={}){let J="index"in z?z.index||0:0,Q=fz("derivationPath"in z&&z.derivationPath?z.derivationPath:xz(wz[N.Tron],{index:J})),Z,$=!1;function j(){if($)return Promise.resolve(Z);return Z=FJ(z).with({phrase:n.string},({phrase:Y})=>VJ({derivationPath:Q,phrase:Y})).with({signer:n.not(n.nullish)},({signer:Y})=>Y).otherwise(()=>{return}),$=!0,Promise.resolve(Z)}async function W(){let Y=await j();if(!Y)throw new K("toolbox_tron_no_signer");return Y.getAddress()}async function k(Y,X){let G=Y||_z,q=X??(await x()).energyFee,O=G*q,M=Math.ceil(O*1.5);return Math.min(Math.max(M,1e7),150000000)}async function U({contractAddress:Y,functionSelector:X,parameter:G,sender:q,memo:O,expiration:M,extraEnergy:P=0}){let C=await i({contractAddress:Y,functionSelector:X,parameter:G,sender:q}),H=await k(C+P),R=await Dz({contractAddress:Y,feeLimit:H,functionSelector:X,ownerAddress:q,parameter:G});return Tz({expiration:M,feeLimit:H,memo:O,transaction:R})}async function F(Y){if(!B(Y))return[D.from({chain:N.Tron})];try{let X=await Nz(Y);if(!X)return[D.from({chain:N.Tron})];let G=[D.from({chain:N.Tron,fromBaseDecimal:6,value:String(X.balance)})],q=X.trc20?.find((O)=>(t in O));if(q){let O=q[t];G.push(D.from({asset:`TRON.USDT-${t}`,fromBaseDecimal:6,value:O}))}return G}catch(X){return Sz({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${X instanceof Error?X.message:X}`}),[D.from({chain:N.Tron})]}}async function p({recipient:Y,assetValue:X,memo:G,expiration:q}){if(!B(Y))throw new K("toolbox_tron_token_transfer_failed",{message:"invalid address"});let O=await j();if(!O)throw new K("toolbox_tron_no_signer");try{let M=await W(),P=await r({assetValue:X,expiration:q,memo:G,recipient:Y,sender:M}),C=await O.signTransaction(P),H=await w(C);if(!H)throw new K("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return H}catch(M){throw new K("toolbox_tron_token_transfer_failed",{message:M instanceof Error?M.message:String(M)})}}function a({requiredBandwidth:Y,resources:X,feePerUnit:G}){let q=Math.max(0,X.free+X.total-X.used);return Y>q?(Y-q)*G:0}async function hz({memo:Y,recipient:X,senderAddress:G}){let[q,O,M]=await Promise.all([x(),g(X),o(G)]),P=O?0:q.createAccountFee,C=a({feePerUnit:q.bandwidthFee,requiredBandwidth:vz,resources:M.bandwidth}),H=Y?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:u.TRON,value:P+C+H})}async function mz({assetValue:Y,memo:X,recipient:G,senderAddress:q}){let O=Y.address;if(!O)throw new K("toolbox_tron_invalid_token_identifier",{identifier:Y.toString()});let[M,P,C,H]=await Promise.all([x(),g(G),o(q),i({contractAddress:O,functionSelector:"transfer(address,uint256)",parameter:I([{type:"address",value:G},{type:"uint256",value:Y.getBaseValue("string")}]),sender:q})]),zz=H+(P?0:d),iz=a({feePerUnit:M.bandwidthFee,requiredBandwidth:Iz,resources:C.bandwidth}),Jz=Math.max(0,C.energy.total-C.energy.used),nz=zz>Jz?(zz-Jz)*M.energyFee:0,dz=X?M.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:u.TRON,value:iz+nz+dz})}async function uz({assetValue:Y,memo:X,recipient:G}){let[q,O]=await Promise.all([x(),g(G)]);if(Y.isGasAsset){let H=O?0:q.createAccountFee,R=X?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:u.TRON,value:H+vz*q.bandwidthFee+R})}let P=await k(_z+(O?0:d),q.energyFee),C=X?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:u.TRON,value:P+Iz*q.bandwidthFee+C})}async function pz({assetValue:Y,memo:X,recipient:G,sender:q}){let O=await j();try{let M=q?q:O?await W():void 0;if(!M)return uz({assetValue:Y,memo:X,recipient:G});return Y.isGasAsset?hz({memo:X,recipient:G,senderAddress:M}):mz({assetValue:Y,memo:X,recipient:G,senderAddress:M})}catch(M){throw Sz({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${M instanceof Error?M.message:M}`}),new K("toolbox_fee_estimation_failed",{chain:N.Tron,error:M})}}async function r({recipient:Y,assetValue:X,memo:G,sender:q,expiration:O}){if(!B(Y)||!B(q))throw new K("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(X.isGasAsset){let C=await Bz({amount:X.getBaseValue("number"),from:q,to:Y});return Tz({expiration:O,memo:G,transaction:C})}let M=X.address;if(!M)throw new K("toolbox_tron_invalid_token_identifier",{identifier:X.toString()});let P=await g(Y);return U({contractAddress:M,expiration:O,extraEnergy:P?0:d,functionSelector:"transfer(address,uint256)",memo:G,parameter:I([{type:"address",value:Y},{type:"uint256",value:X.getBaseValue("string")}]),sender:q})}async function s(Y){_(Y);let X=await j();if(!X)throw new K("toolbox_tron_no_signer");return X.signTransaction(Y)}async function lz(Y){let X=await s(Y);return w(X)}function e({assetAddress:Y,spenderAddress:X,from:G}){return Rz({assetAddress:Y,owner:G,spender:X})}async function cz({assetAddress:Y,spenderAddress:X,from:G,amount:q}){let O=await e({assetAddress:Y,from:G,spenderAddress:X});if(!q)return O>0n;return O>=BigInt(q)}async function oz({assetAddress:Y,spenderAddress:X,amount:G,from:q}){if(!B(Y)||!B(X))throw new K("toolbox_tron_approve_failed");let O=await j();if(!O)throw new K("toolbox_tron_no_signer");let M=q||await W(),P=G!==void 0?BigInt(G).toString():RJ;try{let C=await U({contractAddress:Y,functionSelector:"approve(address,uint256)",parameter:I([{type:"address",value:X},{type:"uint256",value:P}]),sender:M}),H=await O.signTransaction(C),R=await w(H);if(!R)throw new K("toolbox_tron_approve_failed");return R}catch(C){if(C instanceof K)throw C;throw new K("toolbox_tron_approve_failed",{error:C})}}return{approve:oz,broadcastTransaction:w,createTransaction:r,estimateTransactionFee:pz,getAddress:W,getApprovedAmount:e,getBalance:F,getRpcUrl:()=>DJ(N.Tron),isApproved:cz,signAndBroadcastTransaction:lz,signTransaction:s,transfer:p,validateAddress:B}}var gz,vz=268,_z=65000,d=25000,Iz=345,t="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",RJ="115792089237316195423570985008687907853269984665640564039457584007913129639935";var Az=T(()=>{jz();Vz();c();gz=B});var SJ={};sz(SJ,{validateTronAddress:()=>gz,getTronToolbox:()=>Ez,getTronPrivateKeyFromMnemonic:()=>yz});var vJ=T(()=>{Az()});vJ();export{gz as validateTronAddress,Ez as getTronToolbox,yz as getTronPrivateKeyFromMnemonic};
|
|
@@ -12,7 +12,7 @@ export declare function getTronToolbox(options?: TronToolboxOptions): {
|
|
|
12
12
|
approve: ({ assetAddress, spenderAddress, amount, from }: TronApproveParams) => Promise<string>;
|
|
13
13
|
broadcastTransaction: typeof broadcastTronTransaction;
|
|
14
14
|
createTransaction: ({ recipient, assetValue, memo, sender, expiration }: TronCreateTransactionParams) => Promise<TronTransaction>;
|
|
15
|
-
estimateTransactionFee: ({ assetValue, recipient, sender }: TronTransferParams & {
|
|
15
|
+
estimateTransactionFee: ({ assetValue, memo, recipient, sender, }: TronTransferParams & {
|
|
16
16
|
sender?: string;
|
|
17
17
|
}) => Promise<AssetValue>;
|
|
18
18
|
getAddress: () => Promise<string>;
|
|
@@ -7,7 +7,7 @@ type AccumulativeParams<T extends UTXOSizeInput> = {
|
|
|
7
7
|
chain: UTXOChain;
|
|
8
8
|
changeAddress?: string;
|
|
9
9
|
};
|
|
10
|
-
export declare function getDustThreshold(chain: UTXOChain):
|
|
10
|
+
export declare function getDustThreshold(chain: UTXOChain): 550 | 5500 | 100000 | 546;
|
|
11
11
|
export declare function accumulative<T extends UTXOSizeInput>({ inputs, outputs, feeRate, chain, changeAddress, }: AccumulativeParams<T>): {
|
|
12
12
|
fee: number;
|
|
13
13
|
inputs: T[];
|
package/package.json
CHANGED