@swapkit/toolboxes 4.21.0 → 4.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/chunk-6b99avsd.js +2 -0
- package/dist/{chunk-3pne8gaa.js → chunk-9psy287z.js} +1 -1
- package/dist/chunk-e02sjx7s.js +1 -0
- package/dist/{chunk-ntbvmmch.js → chunk-fjyc6m34.js} +1 -1
- package/dist/{chunk-54gntgt1.js → chunk-jdh5asaw.js} +1 -1
- package/dist/src/aptos/index.js +1 -1
- package/dist/src/cardano/index.js +1 -1
- package/dist/src/cosmos/index.js +1 -1
- package/dist/src/evm/index.cjs +1 -1
- package/dist/src/evm/index.js +1 -1
- package/dist/src/hypercore/index.cjs +1 -1
- package/dist/src/hypercore/index.js +1 -1
- package/dist/src/index.cjs +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/near/index.js +1 -1
- package/dist/src/radix/index.js +1 -1
- package/dist/src/ripple/index.js +1 -1
- package/dist/src/solana/index.js +1 -1
- package/dist/src/starknet/index.js +1 -1
- package/dist/src/stellar/index.js +1 -1
- package/dist/src/substrate/index.js +1 -1
- package/dist/src/sui/index.js +1 -1
- package/dist/src/ton/index.js +1 -1
- package/dist/src/tron/index.js +1 -1
- package/dist/src/utxo/index.js +1 -1
- package/dist/types/evm/toolbox/evm.d.ts +113 -0
- package/dist/types/evm/types.d.ts +2 -1
- package/package.json +2 -2
- package/dist/chunk-x9db9hmg.js +0 -1
- package/dist/chunk-xs0j1eze.js +0 -2
package/dist/src/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{fa as t}from"../chunk-fjyc6m34.js";import{AssetValue as R,Chain as o,CosmosChains as x,EVMChains as c,FeeOption as W,SwapKitError as k,UTXOChains as b}from"@swapkit/helpers";async function V(){let{match:s}=await import("ts-pattern"),{validateAptosAddress:r}=await import("./aptos/index.js"),{validateEVMAddress:i}=await import("./evm/index.js"),{validateCardanoAddress:e}=await import("./cardano/index.js"),{getCosmosAddressValidator:a}=await import("./cosmos/index.js"),{validateHyperCoreAddress:l}=await import("./hypercore/index.js"),{validateSolanaAddress:T}=await import("./solana/index.js"),{validateStarknetAddress:p}=await import("./starknet/index.js"),{validateSuiAddress:C}=await import("./sui/index.js"),{validateTonAddress:h}=await import("./ton/index.js"),{getUTXOAddressValidator:u}=await import("./utxo/index.js"),{validateNearAddress:d}=await import("./near/index.js"),{validateRadixAddress:f}=await import("./radix/index.js"),{validateRippleAddress:g}=await import("./ripple/index.js"),{validateTronAddress:w}=await import("./tron/index.js"),{validateStellarAddress:S}=await import("./stellar/index.js");return function({address:n,chain:P}){return s(P).with(...c,()=>i(n)).with(...b,(m)=>{return u(m)(n)}).with(...x,(m)=>{return a(m)(n)}).with(o.Aptos,()=>r(n)).with(o.Radix,()=>f(n)).with(o.Hype,()=>l(n)).with(o.Near,()=>d(n)).with(o.Ripple,()=>g(n)).with(o.Solana,()=>T(n)).with(o.Stellar,()=>S(n)).with(o.Starknet,()=>p(n)).with(o.Sui,()=>C(n)).with(o.Ton,()=>h(n)).with(o.Tron,()=>w(n)).with(o.Cardano,()=>e(n)).otherwise(()=>!1)}}function E(s){return async function(i){let{match:e}=await import("ts-pattern");return e(s).returnType().with(...c,async(a)=>{let l=await y(a),T=await l.createTransaction(i),p="feeOptionKey"in i?i.feeOptionKey:W.Fast;return l.estimateTransactionFee({...T,feeOption:p})}).with(o.Bitcoin,o.BitcoinCash,o.Dogecoin,o.Dash,o.Litecoin,o.Solana,o.Ripple,o.Tron,o.Near,o.Cardano,o.Hype,async(a)=>{return(await y(a)).estimateTransactionFee(i)}).with(o.Aptos,async()=>{let{getAptosToolbox:a}=await import("./aptos/index.js");return a().estimateTransactionFee(i)}).with(o.Starknet,async()=>{let{getStarknetToolbox:a}=await import("./starknet/index.js");return(await a()).estimateTransactionFee(i)}).with(o.Stellar,async()=>{let{getStellarToolbox:a}=await import("./stellar/index.js");return a().estimateTransactionFee()}).with(o.Sui,async()=>{let{getSuiToolbox:a}=await import("./sui/index.js");return a().estimateTransactionFee(i)}).with(o.Ton,async()=>{let{getTONToolbox:a}=await import("./ton/index.js");return a().estimateTransactionFee(i)}).with(...x,async()=>{let{estimateTransactionFee:a}=await import("./cosmos/index.js");return a(i)}).otherwise(async()=>R.from({chain:s}))}}async function y(s,r){let{match:i}=await import("ts-pattern");return i(s).returnType().with(...c,async()=>{let{getEvmToolboxAsync:e}=await import("../chunk-e02sjx7s.js");return await e(s,r)}).with(...b,async()=>{let{getUtxoToolbox:e}=await import("./utxo/index.js");return e(s,r)}).with(...x,async()=>{let{getCosmosToolbox:e}=await import("./cosmos/index.js");return e(s,r)}).with(o.Aptos,async()=>{let{getAptosToolbox:e}=await import("./aptos/index.js");return e(r)}).with(o.Hype,async()=>{let{getHyperCoreToolbox:e}=await import("./hypercore/index.js");return e(r)}).with(o.Radix,async()=>{let{getRadixToolbox:e}=await import("./radix/index.js");return e(r)}).with(o.Ripple,async()=>{let{getRippleToolbox:e}=await import("./ripple/index.js");return e(r)}).with(o.Solana,async()=>{let{getSolanaToolbox:e}=await import("./solana/index.js");return e(r)}).with(o.Stellar,async()=>{let{getStellarToolbox:e}=await import("./stellar/index.js");return e(r)}).with(o.Starknet,async()=>{let{getStarknetToolbox:e}=await import("./starknet/index.js");return e(r)}).with(o.Sui,async()=>{let{getSuiToolbox:e}=await import("./sui/index.js");return e(r)}).with(o.Tron,async()=>{let{getTronToolbox:e}=await import("./tron/index.js");return e(r)}).with(o.Near,async()=>{let{getNearToolbox:e}=await import("./near/index.js");return e(r)}).with(o.Cardano,async()=>{let{getCardanoToolbox:e}=await import("./cardano/index.js");return e(r)}).with(o.Ton,async()=>{let{getTONToolbox:e}=await import("./ton/index.js");return e(r)}).otherwise(()=>{throw new k("toolbox_not_supported",{chain:s})})}export{y as getToolbox,E as getFeeEstimator,V as getAddressValidator};
|
package/dist/src/near/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{da as ON}from"../../chunk-54gntgt1.js";import{ea as I}from"../../chunk-ntbvmmch.js";import{derivationPathToString as QN,SwapKitError as WN}from"@swapkit/helpers";function k(f){return f.length>=2&&f.length<=64&&/^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/.test(f)}async function V(f){let{KeyPair:E}=await import("@near-js/crypto"),C=f.index||0,L=f.derivationPath?QN(f.derivationPath.slice(0,3)):`m/44'/397'/${C}'`,{parseSeedPhrase:D}=await import("near-seed-phrase"),{secretKey:X}=D(f.phrase,L),A=E.fromString(X);return d(A)}async function o(f){let{KeyPair:E}=await import("@near-js/crypto"),C=E.fromString(f);return d(C)}async function d(f){let{KeyPairSigner:E}=await import("@near-js/signers");class C extends E{#N;constructor(L){super(L);this.#N=L}getAddress(){let L=this.#N.getPublicKey(),D=Buffer.from(L.data).toString("hex");return Promise.resolve(D)}}return new C(f)}async function P(f,E){let L=(await f.query({account_id:E,finality:"final",request_type:"view_access_key_list"})).keys.find((H)=>H.access_key.permission==="FullAccess");if(!L)throw new WN("toolbox_near_no_public_key_found");let{PublicKey:D}=await import("@near-js/crypto"),X=D.fromString(L.public_key);return{nonce:L.access_key.nonce||0,publicKey:X}}var q={ACCESS_KEY_ADDITION:"5",ACCESS_KEY_DELETION:"5",ACCOUNT_CREATION:"30",CONTRACT_CALL:"150",CONTRACT_DEPLOYMENT:"200",SIMPLE_TRANSFER:"1",STAKE:"10",STORAGE_DEPOSIT:"150",TOKEN_TRANSFER:"150"};function n(f){return"recipient"in f&&"amount"in f&&!("contractId"in f)}function i(f){return"contractId"in f&&"methodName"in f}function t(f){return"actions"in f}function c(f){return"newAccountId"in f}function s(f){return"contractCode"in f}function r(f){return"customEstimator"in f}function e(f){let E=0;for(let C of f)switch(C.enum){case"transfer":E+=Number(q.SIMPLE_TRANSFER);break;case"functionCall":E+=Number(q.CONTRACT_CALL);break;case"createAccount":E+=Number(q.ACCOUNT_CREATION);break;case"deployContract":E+=Number(q.CONTRACT_DEPLOYMENT);break;case"addKey":E+=Number(q.ACCESS_KEY_ADDITION);break;case"deleteKey":E+=Number(q.ACCESS_KEY_DELETION);break;case"stake":E+=Number(q.STAKE);break;default:E+=Number(q.CONTRACT_CALL)}return E.toString()}function a(f){if(f==="ft_transfer"||f==="ft_transfer_call")return q.TOKEN_TRANSFER;if(f==="storage_deposit")return q.STORAGE_DEPOSIT;return q.CONTRACT_CALL}function $N(f){return(BigInt(f)*BigInt(1000000000000)).toString()}function GN(f){return(BigInt(f)/BigInt(1000000000000)).toString()}async function NN({account:f,contractId:E,viewMethods:C,changeMethods:L}){let{Contract:D}=await import("@near-js/accounts");return new D(f,E,{changeMethods:L,useLocalViewExecution:!0,viewMethods:C})}import{AssetValue as m,Chain as G,getRPCUrl as TN,SwapKitError as U}from"@swapkit/helpers";import{match as fN,P as xN}from"ts-pattern";function jN(f){let E;async function C(){if(E)return E;return E=await fN(f).with({phrase:xN.string},async(N)=>{return await V(N)}).with({signer:xN.any},({signer:N})=>N).otherwise(()=>{return}),E}async function L(){let{JsonRpcProvider:N}=await import("@near-js/providers"),T=await TN(G.Near);return new N({url:T})}async function D(N){let{Account:T}=await import("@near-js/accounts"),x=await L(),_=await C(),O=N||await X();return new T(O,x,_)}async function X(){let N=await C();if(!N)throw new U("toolbox_near_no_signer");return await N.getAddress()}async function A(N){return(await K({changeMethods:[],contractId:N.contractId,viewMethods:["storage_balance_of"]})).storage_balance_of({account_id:N.accountId})}async function H(N){let x=[await b({args:{account_id:N.recipient},attachedDeposit:"1250000000000000000000",gas:"150000000000000",methodName:"storage_deposit"}),await b({args:{amount:N.assetValue.getBaseValue("string"),memo:N.memo||null,receiver_id:N.recipient},attachedDeposit:"1",gas:"150000000000000",methodName:"ft_transfer"})];return u({actions:x,receiverId:N.contractId})}async function _N(N){if(!await C())throw new U("toolbox_near_no_signer");let{assetValue:x,recipient:_,memo:O}=N,R=await X();if(!x.isGasAsset&&x.address){if(!await A({accountId:_,contractId:x.address}))return H({assetValue:x,contractId:x.address,memo:O,recipient:_})}let Y=await y({...N,sender:R});return h(Y)}async function y({recipient:N,assetValue:T,memo:x,attachedDeposit:_,sender:O,functionCall:R}){let Y=await L();if(!k(N))throw new U("toolbox_near_invalid_address",{recipient:N});if(!k(O))throw new U("toolbox_near_invalid_address",{sender:O});if(R)return j({...R,sender:O});if(!T.isGasAsset){let l=T.address;if(!l)throw new U("toolbox_near_missing_contract_address");return j({args:{amount:T.getBaseValue("string"),memo:x||null,receiver_id:N},attachedDeposit:_||"1",contractId:l,gas:"250000000000000",methodName:"ft_transfer",sender:O})}let{publicKey:Q,nonce:W}=await P(Y,O),Z=T.getBaseValue("bigint"),{actionCreators:$,createTransaction:J}=await import("@near-js/transactions"),{baseDecode:M}=await import("@near-js/utils"),B=[$.transfer(Z)];if(x&&_)B.push($.functionCall("memo",{memo:x},BigInt("250000000000000"),BigInt(_)));let z=await Y.block({finality:"final"}),p=M(z.header.hash);return J(O,Q,N,W+1,B,p)}function EN(N){let T=N.encode();return Buffer.from(T).toString("base64")}async function j({args:N,attachedDeposit:T,contractId:x,gas:_,methodName:O,sender:R}){let Y=await L(),{publicKey:Q,nonce:W}=await P(Y,R),{createTransaction:Z,actionCreators:$}=await import("@near-js/transactions"),{baseDecode:J}=await import("@near-js/utils"),M=await Y.block({finality:"final"}),B=J(M.header.hash),z=[$.functionCall(O,Buffer.from(JSON.stringify(N)),BigInt(_),BigInt(T))];return Z(R,Q,x,W+1,z,B)}async function b(N){let{actionCreators:T}=await import("@near-js/transactions");return T.functionCall(N.methodName,Buffer.from(JSON.stringify(N.args)),BigInt(N.gas),BigInt(N.attachedDeposit))}async function S(N){let T=await C();if(!T)throw new U("toolbox_near_no_signer");await RN(N);let[x,_]=await T.signTransaction(N);return _}async function RN(N){let T=N.publicKey;if(T.toString?.().startsWith("ed25519:")||T.toString?.().startsWith("secp256k1:"))return;let{KeyType:x,PublicKey:_}=await import("@near-js/crypto"),O=T.data||T.ed25519Key?.data,R=T.secp256k1Key?.data;if(O){N.publicKey=new _({data:Uint8Array.from(O),keyType:x.ED25519});return}if(R)N.publicKey=new _({data:Uint8Array.from(R),keyType:x.SECP256K1})}function w(N){if(typeof N==="string")return N;if(Array.isArray(N))return N.map(w).find(Boolean);if(!(N&&typeof N==="object"))return;let T=N;return T.transaction?.hash||T.transaction_outcome?.id}function v(N){return N instanceof Error?N.message:String(N)}async function g(N){let x=await(await L()).sendTransaction(N),_=w(x);if(!_)throw new U("toolbox_near_transfer_failed",{result:x});return _}async function h(N){let T=await C();if(!T)throw new U("toolbox_near_no_signer");let x;try{x=await S(N)}catch(_){let O;try{O=T.signAndSendTransaction?await T.signAndSendTransaction({actions:N.actions,receiverId:N.receiverId,signerId:N.signerId}):await T.signAndSendTransactions?.({transactions:[N]})}catch(Y){throw new U({errorKey:"toolbox_near_sign_transaction_failed",info:{directSignError:v(_),signAndSendError:v(Y)}},Y)}let R=w(O);if(R)return R;throw _}return g(x)}async function CN(N){let T=await C();if("assetValue"in N){let _=await LN();try{let O=await TN(G.Near),R=await fetch(O,{body:JSON.stringify({id:"dontcare",jsonrpc:"2.0",method:"EXPERIMENTAL_protocol_config",params:{finality:"final"}}),headers:{"Content-Type":"application/json"},method:"POST"}),{result:{runtime_config:Y}}=await R.json(),{execution:Q,send_sir:W}=Y.transaction_costs.action_receipt_creation_config,{execution:Z,send_sir:$}=Y.transaction_costs.action_creation_config.transfer_cost,J=BigInt($)+BigInt(Z),M=BigInt(W)+BigInt(Q),z=(J+M)*BigInt(_.toString());return m.from({chain:G.Near,value:z})}catch(O){console.debug("NEAR fee estimation (protocol config) failed, using fallback:",O);let R=BigInt("115123062500"),Y=BigInt("108059500000"),W=(R+Y)*BigInt(_.toString());return m.from({chain:G.Near,value:W})}}let x=T?await D():void 0;return F(N,x)}async function LN(){let N=await L();try{return await N.query({account_id:"system",args_base64:"",finality:"final",method_name:"gas_price",request_type:"call_function"})}catch{return"100000000"}}async function YN(N,T,x){if(!await C())throw new U("toolbox_near_no_signer");let O=await D(),{formatNearAmount:R}=await import("@near-js/utils"),{PublicKey:Y}=await import("@near-js/crypto"),Q=R(x)||"0";return(await O.createAccount(N,Y.fromString(T),BigInt(Q))).transaction.hash}async function IN(N){let T=await C();try{if(!T)throw new U("toolbox_near_no_signer");let{actionCreators:x}=await import("@near-js/transactions"),{contractId:_,methodName:O,args:R,deposit:Y}=N,Q=await D(),W=await F({args:R||{},contractId:_,methodName:O}),Z=x.functionCall(O,R||{},W.getBaseValue("bigint"),BigInt(Y||"1"));return(await Q.signAndSendTransaction({actions:[Z],receiverId:_})).transaction_outcome.id}catch(x){throw new U("toolbox_near_transfer_failed",{error:x})}}async function K(N){let T=await D();return NN({account:T,changeMethods:N.changeMethods,contractId:N.contractId,viewMethods:N.viewMethods})}async function u(N){if(!await C())throw new U("toolbox_near_no_signer");if(N.actions.length===0)throw new U("toolbox_near_empty_batch");return(await(await D()).signAndSendTransaction({actions:N.actions,receiverId:N.receiverId})).transaction.hash}async function F(N,T){let x=await fN(N).when(n,()=>q.SIMPLE_TRANSFER).when(i,(O)=>a(O.methodName)).when(t,(O)=>e(O.actions)).when(c,()=>q.ACCOUNT_CREATION).when(s,()=>q.CONTRACT_DEPLOYMENT).when(r,(O)=>{if(!T)throw new U("toolbox_near_no_account");return O.customEstimator(T)}).otherwise(()=>{throw new U("toolbox_near_invalid_gas_params")}),_=BigInt(x)*BigInt(1000000000000);return m.from({chain:G.Near,value:_})}function UN(N,T){return console.warn("NEAR toolbox: estimateGas is deprecated, use estimateGasLimit instead"),F(N,T)}async function qN(){let N=await L();try{return(await N.gasPrice(null)).gas_price||"100000000"}catch{return"100000000"}}async function DN(){let N=await C();return N?(await N.getPublicKey()).toString():""}return{broadcastTransaction:g,callFunction:IN,createAction:b,createContract:K,createContractFunctionCall:j,createSubAccount:YN,createTransaction:y,estimateGas:UN,estimateGasLimit:F,estimateTransactionFee:CN,executeBatchTransaction:u,getAddress:X,getBalance:ON(G.Near),getGasPrice:qN,getNearProvider:L,getPublicKey:DN,getSignerFromPhrase:V,getSignerFromPrivateKey:o,serializeTransaction:EN,signAndBroadcastTransaction:h,signTransaction:S,transfer:_N,validateAddress:k}}export{k as validateNearAddress,$N as tgasToGas,n as isSimpleTransfer,r as isCustomEstimator,s as isContractDeployment,i as isContractCall,t as isBatchTransaction,c as isAccountCreation,jN as getNearToolbox,o as getNearSignerFromPrivateKey,V as getNearSignerFromPhrase,P as getFullAccessPublicKey,a as getContractMethodGas,GN as gasToTGas,e as estimateBatchGas,NN as createNearContract,q as GAS_COSTS};
|
|
1
|
+
import{ea as ON}from"../../chunk-jdh5asaw.js";import{fa as I}from"../../chunk-fjyc6m34.js";import{derivationPathToString as QN,SwapKitError as WN}from"@swapkit/helpers";function k(f){return f.length>=2&&f.length<=64&&/^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/.test(f)}async function V(f){let{KeyPair:E}=await import("@near-js/crypto"),C=f.index||0,L=f.derivationPath?QN(f.derivationPath.slice(0,3)):`m/44'/397'/${C}'`,{parseSeedPhrase:D}=await import("near-seed-phrase"),{secretKey:X}=D(f.phrase,L),A=E.fromString(X);return d(A)}async function o(f){let{KeyPair:E}=await import("@near-js/crypto"),C=E.fromString(f);return d(C)}async function d(f){let{KeyPairSigner:E}=await import("@near-js/signers");class C extends E{#N;constructor(L){super(L);this.#N=L}getAddress(){let L=this.#N.getPublicKey(),D=Buffer.from(L.data).toString("hex");return Promise.resolve(D)}}return new C(f)}async function P(f,E){let L=(await f.query({account_id:E,finality:"final",request_type:"view_access_key_list"})).keys.find((H)=>H.access_key.permission==="FullAccess");if(!L)throw new WN("toolbox_near_no_public_key_found");let{PublicKey:D}=await import("@near-js/crypto"),X=D.fromString(L.public_key);return{nonce:L.access_key.nonce||0,publicKey:X}}var q={ACCESS_KEY_ADDITION:"5",ACCESS_KEY_DELETION:"5",ACCOUNT_CREATION:"30",CONTRACT_CALL:"150",CONTRACT_DEPLOYMENT:"200",SIMPLE_TRANSFER:"1",STAKE:"10",STORAGE_DEPOSIT:"150",TOKEN_TRANSFER:"150"};function n(f){return"recipient"in f&&"amount"in f&&!("contractId"in f)}function i(f){return"contractId"in f&&"methodName"in f}function t(f){return"actions"in f}function c(f){return"newAccountId"in f}function s(f){return"contractCode"in f}function r(f){return"customEstimator"in f}function e(f){let E=0;for(let C of f)switch(C.enum){case"transfer":E+=Number(q.SIMPLE_TRANSFER);break;case"functionCall":E+=Number(q.CONTRACT_CALL);break;case"createAccount":E+=Number(q.ACCOUNT_CREATION);break;case"deployContract":E+=Number(q.CONTRACT_DEPLOYMENT);break;case"addKey":E+=Number(q.ACCESS_KEY_ADDITION);break;case"deleteKey":E+=Number(q.ACCESS_KEY_DELETION);break;case"stake":E+=Number(q.STAKE);break;default:E+=Number(q.CONTRACT_CALL)}return E.toString()}function a(f){if(f==="ft_transfer"||f==="ft_transfer_call")return q.TOKEN_TRANSFER;if(f==="storage_deposit")return q.STORAGE_DEPOSIT;return q.CONTRACT_CALL}function $N(f){return(BigInt(f)*BigInt(1000000000000)).toString()}function GN(f){return(BigInt(f)/BigInt(1000000000000)).toString()}async function NN({account:f,contractId:E,viewMethods:C,changeMethods:L}){let{Contract:D}=await import("@near-js/accounts");return new D(f,E,{changeMethods:L,useLocalViewExecution:!0,viewMethods:C})}import{AssetValue as m,Chain as G,getRPCUrl as TN,SwapKitError as U}from"@swapkit/helpers";import{match as fN,P as xN}from"ts-pattern";function jN(f){let E;async function C(){if(E)return E;return E=await fN(f).with({phrase:xN.string},async(N)=>{return await V(N)}).with({signer:xN.any},({signer:N})=>N).otherwise(()=>{return}),E}async function L(){let{JsonRpcProvider:N}=await import("@near-js/providers"),T=await TN(G.Near);return new N({url:T})}async function D(N){let{Account:T}=await import("@near-js/accounts"),x=await L(),_=await C(),O=N||await X();return new T(O,x,_)}async function X(){let N=await C();if(!N)throw new U("toolbox_near_no_signer");return await N.getAddress()}async function A(N){return(await K({changeMethods:[],contractId:N.contractId,viewMethods:["storage_balance_of"]})).storage_balance_of({account_id:N.accountId})}async function H(N){let x=[await b({args:{account_id:N.recipient},attachedDeposit:"1250000000000000000000",gas:"150000000000000",methodName:"storage_deposit"}),await b({args:{amount:N.assetValue.getBaseValue("string"),memo:N.memo||null,receiver_id:N.recipient},attachedDeposit:"1",gas:"150000000000000",methodName:"ft_transfer"})];return u({actions:x,receiverId:N.contractId})}async function _N(N){if(!await C())throw new U("toolbox_near_no_signer");let{assetValue:x,recipient:_,memo:O}=N,R=await X();if(!x.isGasAsset&&x.address){if(!await A({accountId:_,contractId:x.address}))return H({assetValue:x,contractId:x.address,memo:O,recipient:_})}let Y=await y({...N,sender:R});return h(Y)}async function y({recipient:N,assetValue:T,memo:x,attachedDeposit:_,sender:O,functionCall:R}){let Y=await L();if(!k(N))throw new U("toolbox_near_invalid_address",{recipient:N});if(!k(O))throw new U("toolbox_near_invalid_address",{sender:O});if(R)return j({...R,sender:O});if(!T.isGasAsset){let l=T.address;if(!l)throw new U("toolbox_near_missing_contract_address");return j({args:{amount:T.getBaseValue("string"),memo:x||null,receiver_id:N},attachedDeposit:_||"1",contractId:l,gas:"250000000000000",methodName:"ft_transfer",sender:O})}let{publicKey:Q,nonce:W}=await P(Y,O),Z=T.getBaseValue("bigint"),{actionCreators:$,createTransaction:J}=await import("@near-js/transactions"),{baseDecode:M}=await import("@near-js/utils"),B=[$.transfer(Z)];if(x&&_)B.push($.functionCall("memo",{memo:x},BigInt("250000000000000"),BigInt(_)));let z=await Y.block({finality:"final"}),p=M(z.header.hash);return J(O,Q,N,W+1,B,p)}function EN(N){let T=N.encode();return Buffer.from(T).toString("base64")}async function j({args:N,attachedDeposit:T,contractId:x,gas:_,methodName:O,sender:R}){let Y=await L(),{publicKey:Q,nonce:W}=await P(Y,R),{createTransaction:Z,actionCreators:$}=await import("@near-js/transactions"),{baseDecode:J}=await import("@near-js/utils"),M=await Y.block({finality:"final"}),B=J(M.header.hash),z=[$.functionCall(O,Buffer.from(JSON.stringify(N)),BigInt(_),BigInt(T))];return Z(R,Q,x,W+1,z,B)}async function b(N){let{actionCreators:T}=await import("@near-js/transactions");return T.functionCall(N.methodName,Buffer.from(JSON.stringify(N.args)),BigInt(N.gas),BigInt(N.attachedDeposit))}async function S(N){let T=await C();if(!T)throw new U("toolbox_near_no_signer");await RN(N);let[x,_]=await T.signTransaction(N);return _}async function RN(N){let T=N.publicKey;if(T.toString?.().startsWith("ed25519:")||T.toString?.().startsWith("secp256k1:"))return;let{KeyType:x,PublicKey:_}=await import("@near-js/crypto"),O=T.data||T.ed25519Key?.data,R=T.secp256k1Key?.data;if(O){N.publicKey=new _({data:Uint8Array.from(O),keyType:x.ED25519});return}if(R)N.publicKey=new _({data:Uint8Array.from(R),keyType:x.SECP256K1})}function w(N){if(typeof N==="string")return N;if(Array.isArray(N))return N.map(w).find(Boolean);if(!(N&&typeof N==="object"))return;let T=N;return T.transaction?.hash||T.transaction_outcome?.id}function v(N){return N instanceof Error?N.message:String(N)}async function g(N){let x=await(await L()).sendTransaction(N),_=w(x);if(!_)throw new U("toolbox_near_transfer_failed",{result:x});return _}async function h(N){let T=await C();if(!T)throw new U("toolbox_near_no_signer");let x;try{x=await S(N)}catch(_){let O;try{O=T.signAndSendTransaction?await T.signAndSendTransaction({actions:N.actions,receiverId:N.receiverId,signerId:N.signerId}):await T.signAndSendTransactions?.({transactions:[N]})}catch(Y){throw new U({errorKey:"toolbox_near_sign_transaction_failed",info:{directSignError:v(_),signAndSendError:v(Y)}},Y)}let R=w(O);if(R)return R;throw _}return g(x)}async function CN(N){let T=await C();if("assetValue"in N){let _=await LN();try{let O=await TN(G.Near),R=await fetch(O,{body:JSON.stringify({id:"dontcare",jsonrpc:"2.0",method:"EXPERIMENTAL_protocol_config",params:{finality:"final"}}),headers:{"Content-Type":"application/json"},method:"POST"}),{result:{runtime_config:Y}}=await R.json(),{execution:Q,send_sir:W}=Y.transaction_costs.action_receipt_creation_config,{execution:Z,send_sir:$}=Y.transaction_costs.action_creation_config.transfer_cost,J=BigInt($)+BigInt(Z),M=BigInt(W)+BigInt(Q),z=(J+M)*BigInt(_.toString());return m.from({chain:G.Near,value:z})}catch(O){console.debug("NEAR fee estimation (protocol config) failed, using fallback:",O);let R=BigInt("115123062500"),Y=BigInt("108059500000"),W=(R+Y)*BigInt(_.toString());return m.from({chain:G.Near,value:W})}}let x=T?await D():void 0;return F(N,x)}async function LN(){let N=await L();try{return await N.query({account_id:"system",args_base64:"",finality:"final",method_name:"gas_price",request_type:"call_function"})}catch{return"100000000"}}async function YN(N,T,x){if(!await C())throw new U("toolbox_near_no_signer");let O=await D(),{formatNearAmount:R}=await import("@near-js/utils"),{PublicKey:Y}=await import("@near-js/crypto"),Q=R(x)||"0";return(await O.createAccount(N,Y.fromString(T),BigInt(Q))).transaction.hash}async function IN(N){let T=await C();try{if(!T)throw new U("toolbox_near_no_signer");let{actionCreators:x}=await import("@near-js/transactions"),{contractId:_,methodName:O,args:R,deposit:Y}=N,Q=await D(),W=await F({args:R||{},contractId:_,methodName:O}),Z=x.functionCall(O,R||{},W.getBaseValue("bigint"),BigInt(Y||"1"));return(await Q.signAndSendTransaction({actions:[Z],receiverId:_})).transaction_outcome.id}catch(x){throw new U("toolbox_near_transfer_failed",{error:x})}}async function K(N){let T=await D();return NN({account:T,changeMethods:N.changeMethods,contractId:N.contractId,viewMethods:N.viewMethods})}async function u(N){if(!await C())throw new U("toolbox_near_no_signer");if(N.actions.length===0)throw new U("toolbox_near_empty_batch");return(await(await D()).signAndSendTransaction({actions:N.actions,receiverId:N.receiverId})).transaction.hash}async function F(N,T){let x=await fN(N).when(n,()=>q.SIMPLE_TRANSFER).when(i,(O)=>a(O.methodName)).when(t,(O)=>e(O.actions)).when(c,()=>q.ACCOUNT_CREATION).when(s,()=>q.CONTRACT_DEPLOYMENT).when(r,(O)=>{if(!T)throw new U("toolbox_near_no_account");return O.customEstimator(T)}).otherwise(()=>{throw new U("toolbox_near_invalid_gas_params")}),_=BigInt(x)*BigInt(1000000000000);return m.from({chain:G.Near,value:_})}function UN(N,T){return console.warn("NEAR toolbox: estimateGas is deprecated, use estimateGasLimit instead"),F(N,T)}async function qN(){let N=await L();try{return(await N.gasPrice(null)).gas_price||"100000000"}catch{return"100000000"}}async function DN(){let N=await C();return N?(await N.getPublicKey()).toString():""}return{broadcastTransaction:g,callFunction:IN,createAction:b,createContract:K,createContractFunctionCall:j,createSubAccount:YN,createTransaction:y,estimateGas:UN,estimateGasLimit:F,estimateTransactionFee:CN,executeBatchTransaction:u,getAddress:X,getBalance:ON(G.Near),getGasPrice:qN,getNearProvider:L,getPublicKey:DN,getSignerFromPhrase:V,getSignerFromPrivateKey:o,serializeTransaction:EN,signAndBroadcastTransaction:h,signTransaction:S,transfer:_N,validateAddress:k}}export{k as validateNearAddress,$N as tgasToGas,n as isSimpleTransfer,r as isCustomEstimator,s as isContractDeployment,i as isContractCall,t as isBatchTransaction,c as isAccountCreation,jN as getNearToolbox,o as getNearSignerFromPrivateKey,V as getNearSignerFromPhrase,P as getFullAccessPublicKey,a as getContractMethodGas,GN as gasToTGas,e as estimateBatchGas,NN as createNearContract,q as GAS_COSTS};
|
package/dist/src/radix/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{fa as Y}from"../../chunk-fjyc6m34.js";import{AssetValue as Z,Chain as X,SKConfig as $,SwapKitError as q}from"@swapkit/helpers";function G(H){return H.startsWith("account_rdx1")&&H.length===66}async function v({address:H,networkApi:L}){let J=!0,U,M=[],j=await I(L);while(J){let O={address:H,at_ledger_state:{state_version:j},cursor:U,limit_per_page:100},K=await L.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:O});if(M=M.concat(K.items),K.next_cursor)U=K.next_cursor;else J=!1}return M}async function x({resources:H,networkApi:L}){let J=[],U=50,M=[];for(let j=0;j<H.length;j+=50)M.push(H.slice(j,j+50));for(let j of M){let O=j.map((z)=>z.resource_address),K=await L.state.getEntityDetailsVaultAggregated(O),V=new Map;for(let z of K)if(z.details!==void 0){let Q=z.metadata?.items.find((_)=>_.key==="symbol"),W=Q?.value.typed.type==="String"?Q.value.typed.value:"?";if(z.details.type==="FungibleResource")V.set(z.address,{decimals:z.details.divisibility,symbol:W})}for(let z of j)if(z.aggregation_level==="Global"){let Q=V.get(z.resource_address)||{decimals:0,symbol:"?"},W=Z.from({asset:Q.symbol!==X.Radix?`${X.Radix}.${Q.symbol}-${z.resource_address}`:"XRD.XRD",value:z.amount});J.push(W)}}return J}async function I(H){return(await H.status.getCurrent()).ledger_state.state_version}function T({dappConfig:H}={}){let L=H||$.get("integrations").radix,J;async function U(){if(J)return J;let{GatewayApiClient:j}=await import("@radixdlt/babylon-gateway-api-sdk"),{RadixDappToolkit:O}=await import("@radixdlt/radix-dapp-toolkit"),K=O({...L,networkId:L.network?.networkId||1});return J=j.initialize(K.gatewayApi.clientConfig),J}async function M(j){let O=await U(),K=await v({address:j,networkApi:O}),V=await x({networkApi:O,resources:K});if(!V.some((Q)=>Q.isGasAsset))return[Z.from({chain:X.Radix}),...V];return V}return{getAddress:()=>"",getBalance:M,getNetworkApi:U,signAndBroadcast:()=>{throw new q("toolbox_radix_method_not_supported",{method:"signAndBroadcast"})},validateAddress:G}}export{G as validateRadixAddress,T as getRadixToolbox};
|
package/dist/src/ripple/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{fa as P}from"../../chunk-fjyc6m34.js";import{AssetValue as _,Chain as D,getChainConfig as E,getRPCUrl as i,SwapKitError as $}from"@swapkit/helpers";import{isValidClassicAddress as t,isValidXAddress as a}from"ripple-address-codec";import{match as V,P as o}from"ts-pattern";import{SwapKitError as d}from"@swapkit/helpers";function H(f){return/^[0-9A-Fa-f]{40}$/.test(f)}function Q(f){if(H(f))return f.toUpperCase();if(f.length<=3){let z=Buffer.from(f.padEnd(3,"\x00")).toString("hex");return`00${"0".repeat(22)}${z}${"0".repeat(10)}`.toUpperCase()}let m=Buffer.from(f).toString("hex").toUpperCase();if(m.length>40)throw new d({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:f,reason:"Currency exceeds maximum length (20 bytes)"}});return m.padEnd(40,"0")}function mf(f){if(!H(f))return f;if(f.toUpperCase().startsWith("00")){let m=f.slice(24,30);try{let z=Buffer.from(m,"hex").toString("ascii").replace(/\0/g,"");if(/^[A-Za-z0-9?!@#$%^&*<>(){}[\]|]+$/.test(z)&&z.length>0)return z}catch{}return f.toUpperCase()}try{let m=f.replace(/0+$/,""),z=m.length%2===0?m:`${m}0`,M=Buffer.from(z,"hex").toString("utf8");if(/^[\x20-\x7E]+$/.test(M))return M}catch{}return f.toUpperCase()}function Y(f){if(H(f))return f.toUpperCase();if(f.length<=3)return f;return Q(f)}import{RequestClient as l,warnOnce as n}from"@swapkit/helpers";var w=[{currency:"USD",decimals:15,domain:"circle.com",issuer:"rcEGREd8NmkKRE8GE424sksyt1tJVFZwu",name:"Circle USDC",verified:!0},{currency:"RLUSD",decimals:15,domain:"ripple.com",issuer:"rMxCKbEDwqr76QuheSUMdEGf4B9xJ8m5De",name:"Ripple USD",verified:!0},{currency:"USD",decimals:15,domain:"bitstamp.net",issuer:"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",name:"Bitstamp USD",verified:!0},{currency:"BTC",decimals:15,domain:"bitstamp.net",issuer:"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",name:"Bitstamp BTC",verified:!0},{currency:"EUR",decimals:15,domain:"bitstamp.net",issuer:"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B",name:"Bitstamp EUR",verified:!0},{currency:"USD",decimals:15,domain:"gatehub.net",issuer:"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",name:"GateHub USD",verified:!0},{currency:"EUR",decimals:15,domain:"gatehub.net",issuer:"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",name:"GateHub EUR",verified:!0},{currency:"BTC",decimals:15,domain:"gatehub.net",issuer:"rchGBxcD1A1C2tdxF6papQYZ8kjRKMYcL",name:"GateHub BTC",verified:!0},{currency:"ETH",decimals:15,domain:"gatehub.net",issuer:"rcA8X3TVMST1n3CJeAdGk1RdRCHii7N2h",name:"GateHub ETH",verified:!0},{currency:"SOLO",decimals:15,domain:"sologenic.com",issuer:"rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz",name:"Sologenic",verified:!0}];async function Gf(f,m){let z=Y(f),M=w.find((j)=>Y(j.currency)===z&&j.issuer===m);if(M)return M;try{let j=await l.get(`https://api.xrplmeta.org/token/${f}:${m}`);if(j)return{currency:f,decimals:15,description:j.desc,domain:j.domain,icon:j.icon,issuer:m,name:j.name,verified:j.self_assessment?.is_regulated||j.self_assessment?.is_licensed}}catch(j){n({condition:!0,id:`xrpl_token_lookup_${f}_${m}`,warning:`Failed to fetch XRPL token info for ${f}:${m}: ${j}`})}return{currency:f,decimals:15,issuer:m,verified:!1}}function kf(f){return w.filter((m)=>m.issuer===f)}function zf(f,m){let z=Y(f);return w.some((M)=>Y(M.currency)===z&&M.issuer===m)}var C={ACCOUNT_NOT_FOUND:19},O={tecFROZEN:"tecFROZEN",tecNO_AUTH:"tecNO_AUTH",tecNO_DST:"tecNO_DST",tecNO_LINE:"tecNO_LINE",tecPATH_DRY:"tecPATH_DRY",tecUNFUNDED_OFFER:"tecUNFUNDED_OFFER"};function s(f){let m=f.match(/^XRP\.([A-Fa-f0-9]{40}|[\x20-\x7E]{1,20})-([a-zA-Z0-9]{25,34})$/);if(!m?.[1]||!m?.[2])return null;if(!I(m[2]))return null;return{currency:m[1],issuer:m[2]}}function r(f,m){return`${D.Ripple}.${f}-${m}`}async function e(f){if(f.isGasAsset){let{xrpToDrops:z}=await import("xrpl");return z(f.getValue("string"))}let m=s(f.toString());if(!m)throw new $({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:f.toString()}});return{currency:m.currency,issuer:m.issuer,value:f.getValue("string")}}function S(f){let m,z=()=>{return m??=import("xrpl").then(({Wallet:M})=>M.fromMnemonic(f)),m};return{getAddress:async()=>(await z()).address,signTransaction:async(M)=>(await z()).sign(M)}}function I(f){return t(f)||a(f)}function Wf(f={}){let m;async function z(){if(m)return m;return m=await V(f).with({phrase:o.string},({phrase:U})=>S(U)).with({signer:o.any},({signer:U})=>U).otherwise(()=>{return}),m}let M;async function j(){let U=await i(D.Ripple);if(!U)throw new $({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:D.Ripple}});let{Client:b}=await import("xrpl"),G=new b(U);return await G.connect(),G}async function Z(){if(M){let U=await M.catch(()=>null);if(U?.isConnected())return U}return M=j(),M}let X=async()=>{let U=await z();if(!U)throw new $({errorKey:"toolbox_ripple_signer_not_found"});return U.getAddress()},T=async(U)=>{let b=U||await X(),{baseDecimal:G}=E(D.Ripple),k=await Z();try{let[v,q]=await Promise.all([k.request({account:b,command:"account_info"}),k.request({account:b,command:"account_lines"})]),B=v.result.account_data.Balance,J=[_.from({chain:D.Ripple,fromBaseDecimal:G,value:B})];for(let W of q.result.lines){let A=r(W.currency,W.account);if(Number.parseFloat(W.balance)!==0)J.push(_.from({asset:A,asyncTokenLookup:!1,value:W.balance}))}return J}catch(v){if(v.data?.error_code===C.ACCOUNT_NOT_FOUND)return[_.from({chain:D.Ripple,value:0})];throw new $({errorKey:"toolbox_ripple_get_balance_error",info:{address:b,error:v}})}},u=async()=>{let{baseDecimal:U}=E(D.Ripple),k=(await(await Z()).request({command:"fee"})).result.drops.open_ledger_fee;return _.from({chain:D.Ripple,fromBaseDecimal:U,value:k})};async function K(U){let b=U||await X(),G=await Z();try{return(await G.request({account:b,command:"account_lines"})).result.lines.map((v)=>({account:v.account,authorized:v.authorized??!1,balance:v.balance,currency:v.currency,freeze:v.freeze??!1,freezePeer:v.freeze_peer??!1,limit:v.limit,limitPeer:v.limit_peer,noRipple:v.no_ripple??!1,noRipplePeer:v.no_ripple_peer??!1,peerAuthorized:v.peer_authorized??!1,qualityIn:v.quality_in??0,qualityOut:v.quality_out??0}))}catch(k){if(k.data?.error_code===C.ACCOUNT_NOT_FOUND)return[];throw new $({errorKey:"toolbox_ripple_get_trust_lines_error",info:{address:b,error:k}})}}async function p({address:U,currency:b,issuer:G}){let k=await K(U),v=Q(b);return k.some((q)=>{return Q(q.currency)===v&&q.account===G})}async function R({currency:U,issuer:b,limit:G,sender:k}){let v=k||await X();if(!I(b))throw new $({errorKey:"core_transaction_invalid_recipient_address",info:{address:b}});let q=Number.parseFloat(G);if(Number.isNaN(q)||q<0)throw new $({errorKey:"toolbox_ripple_invalid_trust_line_limit",info:{limit:G}});let B=await Z(),J={Account:v,LimitAmount:{currency:U,issuer:b,value:G},TransactionType:"TrustSet"};return B.autofill(J)}async function y({assetValue:U,recipient:b,memo:G,sender:k,destinationTag:v,extendBySeconds:q=150}){if(!I(b))throw new $({errorKey:"core_transaction_invalid_recipient_address"});let B=k||await X();if(U.chain!==D.Ripple)throw new $({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:U.toString()}});let J=await e(U),W={Account:B,Amount:J,Destination:b,TransactionType:"Payment",...v!==void 0&&{DestinationTag:v}};if(G)W.Memos=[{Memo:{MemoData:Buffer.from(G).toString("hex")}}];let L=await(await Z()).autofill(W);if(L.LastLedgerSequence&&q>0)L.LastLedgerSequence+=Math.ceil(q/4);return L}async function N(U){let b=await z();if(!b)throw new $({errorKey:"toolbox_ripple_signer_not_found"});return b.signTransaction(U)}async function F(U){let G=await(await Z()).submitAndWait(U),{result:k}=G;if(k.validated)return k.hash;let v=k.meta?.TransactionResult,q=V(v).with(O.tecNO_LINE,()=>"No trust line exists for this token").with(O.tecPATH_DRY,()=>"Payment path could not deliver funds").with(O.tecFROZEN,()=>"Token is frozen").otherwise(()=>{return});throw new $({errorKey:"toolbox_ripple_broadcast_error",info:{chain:D.Ripple,...q?{reason:q}:{txResult:v}}})}let g=async(U)=>{try{let b=await N(U);return F(b.tx_blob)}catch(b){if(b instanceof $)throw b;throw new $({errorKey:"toolbox_ripple_broadcast_error",info:{chain:D.Ripple,error:b}})}};async function h(U){let b=await z();if(!b)throw new $({errorKey:"toolbox_ripple_signer_not_found"});let G=await b.getAddress(),k=await y({...U,sender:G}),v=await N(k);return F(v.tx_blob)}async function x(U){let b=await z();if(!b)throw new $({errorKey:"toolbox_ripple_signer_not_found"});let G=await b.getAddress(),k=await R({...U,sender:G}),v=await N(k);return F(v.tx_blob)}function c(){let U=M;if(M=null,U)U.then((b)=>{if(b?.isConnected())return b.disconnect();return}).catch((b)=>{console.warn("XRPL Cleanup failed silently:",b)})}return{broadcastTransaction:F,createSigner:S,createTransaction:y,disconnect:c,estimateTransactionFee:u,getAddress:X,getBalance:T,getTrustLines:K,hasTrustLine:p,setTrustLine:R,setTrustLineAndBroadcast:x,signAndBroadcastTransaction:g,signTransaction:N,transfer:h,validateAddress:I}}export{I as validateRippleAddress,s as parseXrplTokenIdentifier,Y as normalizeCurrency,zf as isKnownToken,H as isHexCurrency,mf as hexToCurrency,Gf as getXrplTokenInfo,Wf as getRippleToolbox,kf as getKnownTokensByIssuer,r as formatXrplTokenIdentifier,Q as currencyToHex,O as XRPL_TOKEN_ERROR_CODES,w as XRPL_KNOWN_TOKENS};
|
package/dist/src/solana/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ea as M}from"../../chunk-jdh5asaw.js";import{fa as w}from"../../chunk-fjyc6m34.js";import{PublicKey as q}from"@solana/web3.js";import{AssetValue as N,Chain as W,DerivationPath as V,derivationPathToString as K,getChainConfig as E,getRPCUrl as v,NetworkDerivationPath as D,SwapKitError as F,updateDerivationPath as h}from"@swapkit/helpers";import{match as k,P as Z}from"ts-pattern";async function m(T){let l=N.from({address:T,chain:W.Solana});if(l.symbol!=="UNKNOWN")return{decimals:l.decimal||0,id:T,logoURI:l.getIconUrl(),name:l.symbol,symbol:l.ticker};let f=`https://lite-api.jup.ag/tokens/v2/search?query=${encodeURIComponent(T)}`;try{let x=await fetch(f);if(!x.ok)return null;let G=await x.json();if(!Array.isArray(G)||G.length===0)return null;return G.find((p)=>p.id===T)||null}catch{return null}}async function A(T){let l=await j(),{PublicKey:f}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:x}=await import("@solana/spl-token"),G=new f(T),{baseDecimal:O}=E(W.Solana),p=await l.getBalance(G),b=[N.from({chain:W.Solana,fromBaseDecimal:O,value:p||0})],y=await l.getParsedTokenAccountsByOwner(G,{programId:x});for(let{account:R}of y.value){let P=R.data.parsed.info,J=P.mint,B=P.tokenAmount.amount;if(Number(B)===0)continue;let z=await m(J),S=z?.symbol||"UNKNOWN",L=z?.decimals||P.tokenAmount.decimals;b.push(N.from({asset:`${W.Solana}.${S}-${J}`,fromBaseDecimal:L,value:B}))}return b}function H(T){try{let l=new q(T);return q.isOnCurve(l.toBytes())}catch{return!1}}function t(T){let l=T&&"index"in T?T.index||0:0,f=K(T&&"derivationPath"in T&&T.derivationPath?T.derivationPath:h(D[W.Solana],{index:l})),x;async function G(){if(x)return x;return x=await k(T).with({phrase:Z.string},({phrase:p})=>$({derivationPath:f,phrase:p})).with({signer:Z.any},({signer:p})=>p).otherwise(()=>{return}),x}async function O(){let p=await G();return p?.publicKey?I(p.publicKey):""}return{broadcastTransaction:Q(j),createKeysForPath:$,createTransaction:X(j),createTransactionFromInstructions:d,estimateTransactionFee:u(j),getAddress:O,getAddressFromPubKey:I,getBalance:M(W.Solana),getBalanceFromRPC:A,getConnection:j,getPubkeyFromAddress:(p)=>new q(p),signAndBroadcastTransaction:async(p)=>{let b=await _(j,G)(p);return Q(j)(b)},signTransaction:_(j,G),transfer:o(j,G),validateAddress:H}}function u(T){return async({recipient:l,assetValue:f,memo:x,isProgramDerivedAddress:G,sender:O})=>{let p=await T(),y=(await X(T)({assetValue:f,isProgramDerivedAddress:G,memo:x,recipient:l,sender:O})).compileMessage(),R=await p.getFeeForMessage(y);if(R.value===null)throw new F("toolbox_fee_estimation_failed","Could not estimate Solana fee.");let{baseDecimal:P}=E(W.Solana);return N.from({chain:W.Solana,fromBaseDecimal:P,value:R.value})}}async function j(){let{Connection:T}=await import("@solana/web3.js"),l=await v(W.Solana);return new T(l,{commitment:"confirmed",fetchMiddleware:(f,x,G)=>{let O={};for(let[p,b]of Object.entries(x?.headers??{})){let y=p.toLowerCase();if(y!=="pragma"&&y!=="solana-client")O[p]=b}G(f,{...x,headers:O})}})}function C(T){return async({assetValue:l,recipient:f,sender:x,isProgramDerivedAddress:G})=>{let O=await T(),p=new q(x);if(l.isGasAsset){let{Transaction:b,SystemProgram:y}=await import("@solana/web3.js");return new b().add(y.transfer({fromPubkey:p,lamports:l.getBaseValue("number"),toPubkey:new q(f)}))}if(l.address)return a({amount:l.getBaseValue("number"),connection:O,decimals:l.decimal,from:p,isProgramDerivedAddress:G,recipient:f,tokenAddress:l.address});return}}async function a({tokenAddress:T,recipient:l,from:f,connection:x,amount:G,decimals:O,isProgramDerivedAddress:p}){let{getAssociatedTokenAddress:b,getAccount:y,createAssociatedTokenAccountInstruction:R,createTransferCheckedInstruction:P}=await import("@solana/spl-token"),{Transaction:J}=await import("@solana/web3.js"),B=new J,z=new q(T),S=await b(z,f),L=new q(l),U=await b(z,L,p),Y=!1;try{await y(x,U),Y=!0}catch{}if(!Y)B.add(R(f,U,L,z));return B.add(P(S,z,U,f,G,O)),B}function X(T){return async({recipient:l,assetValue:f,memo:x,isProgramDerivedAddress:G,sender:O})=>{let{createMemoInstruction:p}=await import("@solana/spl-memo"),b=new q(O);if(!(G||H(l)))throw new F("core_transaction_invalid_recipient_address");let y=await T(),R=await C(T)({assetValue:f,isProgramDerivedAddress:G,recipient:l,sender:O});if(!R)throw new F("core_transaction_invalid_sender_address");if(x)R.add(p(x));let P=await y.getLatestBlockhash();return R.recentBlockhash=P.blockhash,R.feePayer=b,R}}async function d({instructions:T}){let{Transaction:l}=await import("@solana/web3.js"),f=new l().add(...T);if(!f)throw new F("core_transaction_invalid_sender_address");return f}function o(T,l){return async({recipient:f,assetValue:x,memo:G,isProgramDerivedAddress:O})=>{let p=await l();if(!p)throw new F("core_transaction_invalid_sender_address");let b=p.publicKey?.toString()??(await p.connect()).publicKey.toString(),y=await X(T)({assetValue:x,isProgramDerivedAddress:O,memo:G,recipient:f,sender:b});if("signTransaction"in p){let R=await p.signTransaction(y);return Q(T)(R)}return y.sign(p),Q(T)(y)}}function Q(T){return async(l)=>{return(await T()).sendRawTransaction(l.serialize())}}function _(T,l){return async(f)=>{let x=await l();if(!x)throw new F("toolbox_solana_no_signer");let{VersionedTransaction:G}=await import("@solana/web3.js");if(!(f instanceof G)){let p=await(await T()).getLatestBlockhash();f.recentBlockhash=p.blockhash,f.feePayer=x.publicKey||void 0}if("connect"in x)return await x.signTransaction(f);return f.sign([x]),f}}async function $({phrase:T,derivationPath:l=V.SOL}){let{HDKey:f}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:x}=await import("@scure/bip39"),{Keypair:G}=await import("@solana/web3.js"),O=x(T),p=f.fromMasterSeed(O);return G.fromSeed(p.derive(l,!0).privateKey)}function I(T){return T.toString()}export{H as validateSolanaAddress,t as getSolanaToolbox,m as fetchTokenMetaData,$ as createKeysForPath};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ea as h}from"../../chunk-jdh5asaw.js";import{fa as M}from"../../chunk-fjyc6m34.js";import{AssetValue as R,Chain as _,DerivationPath as u,derivationPathToString as n,getChainConfig as c,getRPCUrl as b,NetworkDerivationPath as i,SwapKitError as X,updateDerivationPath as s}from"@swapkit/helpers";import{match as m,P as U}from"ts-pattern";var K="0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",g="0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",C="0x01a736d6ed154502257f02b1ccdf4d9d1089f80811cd6acad48e6b6a9d1f2003";function v(W){if(!W)return!1;return/^0x[0-9a-fA-F]{1,64}$/.test(W)}async function S({phrase:W,derivationPath:Y=u.STRK}){let{HDKey:k}=await import("@scure/bip32"),{mnemonicToSeedSync:x}=await import("@scure/bip39"),{ec:Z,hash:F,encode:$,CallData:j}=await import("starknet"),O=x(W),V=k.fromMasterSeed(O).derive(Y);if(!V.privateKey)throw new X("toolbox_starknet_no_signer");let B=$.addHexPrefix(Buffer.from(V.privateKey).toString("hex")),w=Z.starkCurve.grindKey(B),E=$.addHexPrefix(w),H=Z.starkCurve.getStarkKey(E),y=j.compile([H,0]);return{address:F.calculateContractAddressFromHash(H,C,y,0),privateKey:E,publicKey:H}}async function p({phrase:W,derivationPath:Y=u.STRK}){let{Account:k,RpcProvider:x}=await import("starknet"),{privateKey:Z,address:F}=await S({derivationPath:Y,phrase:W}),$=await b(_.Starknet),j=new x({nodeUrl:$});return new k({address:F,provider:j,signer:Z})}function t(W){let Y=_.Starknet,k=W&&"index"in W?W.index||0:0,x=n(W&&"derivationPath"in W&&W.derivationPath?W.derivationPath:s(i[Y],{index:k})),Z,F,$;async function j(){if(F)return F;let{RpcProvider:q}=await import("starknet"),z=await b(Y);return F=new q({nodeUrl:z}),F}async function O(q){let z=await j(),G=q||await w();if(!G)return!1;try{return await z.getClassHashAt(G),!0}catch(I){if(I instanceof Error&&I.message.includes("Contract not found"))return!1;let J=I;if(J?.code===20||J?.code===19)return!1;throw I}}async function T(){let{CallData:q,hash:z}=await import("starknet"),G=await j(),I=await B();if(!I)throw new X("toolbox_starknet_no_signer");if(!$)throw new X({errorKey:"toolbox_starknet_account_not_deployed",info:{message:"Cannot deploy account: public key not available. Use phrase-based wallet initialization."}});if(await O())return I.address;let f=q.compile([$,0]);if(z.calculateContractAddressFromHash($,C,f,0).toLowerCase()!==I.address.toLowerCase())throw new X({errorKey:"toolbox_starknet_account_not_deployed",info:{message:"Address mismatch during deployment verification"}});let L={addressSalt:$,classHash:C,constructorCalldata:f},{transaction_hash:N}=await I.deployAccount(L);return await G.waitForTransaction(N),N}async function V(){if(!await O()){if(!$)throw new X({errorKey:"toolbox_starknet_account_not_deployed",info:{message:"Starknet account is not deployed and cannot be auto-deployed without public key. Use phrase-based wallet initialization."}});await T()}}async function B(){if(Z)return Z;return Z=await m(W).with({phrase:U.string},async({phrase:q})=>{let{Account:z,RpcProvider:G}=await import("starknet"),{privateKey:I,address:J,publicKey:f}=await S({derivationPath:x,phrase:q});$=f;let Q=await b(_.Starknet),L=new G({nodeUrl:Q});return new z({address:J,provider:L,signer:I})}).with({address:U.string,privateKey:U.string},async({privateKey:q,address:z})=>{let{Account:G}=await import("starknet"),I=await j();return new G({address:z,provider:I,signer:q})}).with({signer:U.instanceOf(Object)},({signer:q})=>q).otherwise(()=>{return}),Z}async function w(){return(await B())?.address??""}async function E(q){let z=await j(),{uint256:G,CallData:I}=await import("starknet"),J=[],f=[K,g];for(let Q of f)try{let[L="0",N="0"]=await z.callContract({calldata:I.compile({account:q}),contractAddress:Q,entrypoint:"balanceOf"}),D=G.uint256ToBN({high:L,low:N});m(Q).with(K,()=>{J.push(R.from({chain:Y,value:D}))}).with(g,()=>{if(D>0n)J.push(R.from({asset:`${Y}.ETH-${Q}`,value:D}))}).otherwise(()=>{})}catch{}return J}async function H({recipient:q,assetValue:z}){let{CallData:G,uint256:I}=await import("starknet");if(!v(q))throw new X("core_transaction_invalid_recipient_address",{address:q});let J=z.isGasAsset?K:z.address;if(!J)throw new X("toolbox_starknet_invalid_address",{address:J,assetValue:z});let f=I.bnToUint256(z.getBaseValue("bigint"));return[{calldata:G.compile([q,f]),contractAddress:J,entrypoint:"transfer"}]}async function y({recipient:q,assetValue:z,sender:G}){let{baseDecimal:I}=c(_.Starknet),J=await B(),f=await m({sender:G,signer:J}).with({sender:U.string},async({sender:Q})=>{let{Account:L}=await import("starknet"),N=await j();return new L({address:Q,provider:N,signer:"0x0"})}).with({signer:U.nonNullable},({signer:Q})=>Q).otherwise((Q)=>{throw new X({errorKey:"toolbox_starknet_fee_estimation_failed",info:{message:"Estimating fee needs a valid sender address or signer",params:Q}})});try{let Q=await H({assetValue:z,recipient:q}),L=await f.estimateInvokeFee(Q);if(L?.overall_fee)return R.from({chain:Y,fromBaseDecimal:I,value:L.overall_fee})}catch(Q){throw new X("toolbox_starknet_fee_estimation_failed",Q)}return R.from({chain:Y,value:"0.00001"})}async function A({recipient:q,assetValue:z,memo:G}){let I=await B();if(!I)throw new X("toolbox_starknet_no_signer");await V();let J=await H({assetValue:z,memo:G,recipient:q});return(await I.execute(J)).transaction_hash}async function l(q){let z=await B();if(!z)throw new X("toolbox_starknet_no_signer");let G=await z.signMessage(q);return Array.isArray(G)?G:[G.r.toString(),G.s.toString()]}async function P(q){let z=await B();if(!z)throw new X("toolbox_starknet_no_signer");return await V(),(await z.execute(q)).transaction_hash}function d(q){return P(q)}function o(q,z=!0){try{return h(Y)(q,z)}catch{return E(q)}}return{broadcastTransaction:P,createKeysForPath:p,createTransaction:H,deployAccount:T,estimateTransactionFee:y,getAddress:w,getBalance:o,getProvider:j,isAccountDeployed:O,signAndBroadcastTransaction:d,signMessage:l,transfer:A,validateAddress:v}}export{v as validateStarknetAddress,p as starknetCreateKeysForPath,t as getStarknetToolbox,S as deriveStarknetKeys};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{fa as L}from"../../chunk-fjyc6m34.js";import{AssetValue as U,Chain as Z,derivationPathToString as n,getChainConfig as g,getRPCUrl as h,NetworkDerivationPath as t,SKConfig as r,SwapKitError as f}from"@swapkit/helpers";import{match as a,P as s}from"ts-pattern";var e=/^G[A-Z2-7]{55}$/,PP=/^[A-Za-z0-9]{1,12}$/,jP=2,qP=600000,k;async function GP(j){if(k&&Date.now()-k.timestamp<qP)return k.value;let M=(await j.ledgers().order("desc").limit(1).call()).records[0]?.base_reserve_in_stroops;if(M===void 0)throw new f({errorKey:"toolbox_stellar_balance_error",info:{reason:"base_reserve_unavailable"}});return k={timestamp:Date.now(),value:M},M}function m(j){return U.from({chain:Z.Stellar,value:j}).getBaseValue("bigint")}function JP({balance:j,baseReserveInStroops:X,numSponsored:M,numSponsoring:z,sellingLiabilities:H,subentryCount:x}){let w=m(j),y=m(H),E=jP+x+z-M,N=BigInt(E)*BigInt(X),B=w-N-y;return B>0n?B:0n}function S(j){if(!j||typeof j!=="string"||!j.startsWith("G")||j.length!==56)return!1;return e.test(j)}function p(j){if(typeof j!=="object"||j===null)return;let X="response"in j?j.response:void 0;return typeof X?.status==="number"?X.status:void 0}function QP(j){return p(j)===504}function XP(j){return j.hash?.().toString("hex")}function YP(j){return[...new Set([j,...r.get("rpcUrls")[Z.Stellar]])].filter(Boolean)}async function u(j){if(!S(j))return!1;try{let{StrKey:X}=await import("@stellar/stellar-sdk");return X.isValidEd25519PublicKey(j)}catch{return!1}}async function b(j){let{address:X,ticker:M}=j,z=X?await u(X):!1;if(j.chain!==Z.Stellar||j.isGasAsset||!PP.test(M)||!X||!z)throw new f({errorKey:"helpers_invalid_asset_identifier",info:{identifier:j.toString()}});return{assetCode:M,issuer:X}}function ZP(j={}){let X,M=j.derivationPath||t[Z.Stellar],z=n(M.slice(0,3));async function H({phrase:P,path:q}){let{HDKey:J}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:G}=await import("@scure/bip39"),{Keypair:Y}=await import("@stellar/stellar-sdk"),Q=G(P),$=J.fromMasterSeed(Q).derive(q,!0);return Y.fromRawEd25519Seed(Buffer.from($.privateKey))}async function x(){if(X)return X;let P=a(j).with({phrase:s.string},({phrase:q})=>q).otherwise(()=>{return});if(!P)throw new f("toolbox_stellar_no_signer");return X=await H({path:z,phrase:P}),X}async function w(P){let{Horizon:q}=await import("@stellar/stellar-sdk"),J=P||await h(Z.Stellar);return new q.Server(J)}async function y(P,q){for(let J of q)try{return(await(await w(J)).transactions().transaction(P).call()).hash||P}catch{}return}async function E(P,q){let J=await h(Z.Stellar),G=YP(J),Y=XP(P),Q;for(let W of G)try{let $=await w(W),{hash:F}=await $.submitTransaction(P);return F}catch($){if(Q=$,!QP($))break;let F=Y?await y(Y,G):void 0;if(F)return F}throw new f(q,Q)}async function N(){try{return(await x()).publicKey()}catch{return""}}async function B(P){let q=P||await N();if(!q)throw new f("toolbox_stellar_account_not_found");let J=await w(),[G,Y]=await Promise.allSettled([J.loadAccount(q),GP(J)]);if(G.status==="rejected"){let Q=G.reason;if(p(Q)===404)return[U.from({chain:Z.Stellar,value:0})];throw Q}if(Y.status==="rejected")throw Y.reason;return G.value.balances.map((Q)=>{if(Q.asset_type==="native"){let F=JP({balance:Q.balance,baseReserveInStroops:Y.value,numSponsored:G.value.num_sponsored,numSponsoring:G.value.num_sponsoring,sellingLiabilities:Q.selling_liabilities,subentryCount:G.value.subentry_count}),{baseDecimal:_}=g(Z.Stellar);return U.from({chain:Z.Stellar,fromBaseDecimal:_,value:F})}let W="asset_code"in Q?Q.asset_code:"",$="asset_issuer"in Q?Q.asset_issuer:"";return U.from({asset:`${Z.Stellar}.${W}-${$}`,asyncTokenLookup:!1,value:Q.balance})})}async function R({recipient:P,assetValue:q,memo:J,sender:G}){if(J){if(new TextEncoder().encode(J).length>28)throw new f("helpers_invalid_memo_type")}if(!await u(P))throw new f("core_transaction_invalid_recipient_address");let Q=G||await N();if(!Q)throw new f("toolbox_stellar_no_signer");let{Asset:W,Memo:$,Networks:F,Operation:_,TransactionBuilder:I}=await import("@stellar/stellar-sdk"),O=await w(),C=await O.fetchBaseFee(),K=await O.loadAccount(Q),D=new I(K,{fee:String(C),networkPassphrase:F.PUBLIC});if(q.isGasAsset)try{await O.loadAccount(P),D.addOperation(_.payment({amount:q.getValue("string"),asset:W.native(),destination:P}))}catch{D.addOperation(_.createAccount({destination:P,startingBalance:q.getValue("string")}))}else{let{assetCode:v,issuer:i}=await b(q);D.addOperation(_.payment({amount:q.getValue("string"),asset:new W(v,i),destination:P}))}if(J)D.addMemo($.text(J));return D.setTimeout(30).build()}async function A({assetValue:P,limit:q,sender:J}){let G=J||await N();if(!G)throw new f("toolbox_stellar_no_signer");let{Asset:Y,Networks:Q,Operation:W,TransactionBuilder:$}=await import("@stellar/stellar-sdk"),{assetCode:F,issuer:_}=await b(P),I=await w(),[O,C]=await Promise.all([I.fetchBaseFee(),I.loadAccount(G)]),K=new Y(F,_),D=q!==void 0?W.changeTrust({asset:K,limit:q}):W.changeTrust({asset:K});return new $(C,{fee:String(O),networkPassphrase:Q.PUBLIC}).addOperation(D).setTimeout(30).build()}async function T(P){let{TransactionBuilder:q,Networks:J}=await import("@stellar/stellar-sdk"),G=await x(),Y=q.fromXDR(P.toXDR(),J.PUBLIC);return Y.sign(G),Y}function V(P){return E(P,"toolbox_stellar_broadcast_error")}async function l({recipient:P,assetValue:q,memo:J}){let G=await x(),Y=G.publicKey(),Q=await R({assetValue:q,memo:J,recipient:P,sender:Y});return Q.sign(G),E(Q,"toolbox_stellar_transaction_failed")}async function d({assetValue:P,limit:q}){let J=await x(),G=await A({assetValue:P,limit:q,sender:J.publicKey()});return G.sign(J),E(G,"toolbox_stellar_transaction_failed")}async function c(P){let q=await T(P);return V(q)}async function o(){let{baseDecimal:P}=g(Z.Stellar);try{let G=(await(await w()).feeStats()).fee_charged.p50;return U.from({chain:Z.Stellar,fromBaseDecimal:P,value:G})}catch{return U.from({chain:Z.Stellar,fromBaseDecimal:P,value:"100"})}}return{broadcastTransaction:V,createTransaction:R,createTrustline:d,createTrustlineTransaction:A,estimateTransactionFee:o,getAddress:N,getBalance:B,signAndBroadcastTransaction:c,signTransaction:T,transfer:l,validateAddress:S}}export{S as validateStellarAddress,ZP as getStellarToolbox};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{fa as C}from"../../chunk-fjyc6m34.js";import{hexToU8a as x,isHex as K,u8aToHex as S}from"@polkadot/util";import{decodeAddress as X,encodeAddress as Y}from"@polkadot/util-crypto";import{AssetValue as p,Chain as z,getRPCUrl as k,SubstrateChains as h,SwapKitError as L,SwapKitNumber as n}from"@swapkit/helpers";import{match as F,P as J}from"ts-pattern";import{AssetValue as U,Chain as P,SwapKitNumber as W}from"@swapkit/helpers";async function b(o,I,m){let v=[I.set(0)];if(!m)return v;try{let j=await o.query.system?.account?.(m);if(!j)return v;let{data:{free:t}}=j,y=W.fromBigInt(BigInt(t.toString()),I.decimal).getValue("string");return[I.set(y)]}catch(j){let t=j instanceof Error?j.message:String(j);return console.error(`Error fetching substrate balance: ${t}`),v}}async function u(o,I,m){let v=[I.set(0)];if(!m)return v;try{let j=await o.query.flip?.account?.(m);if(!j)return v;let t=j.balance||j.data?.balance;if(!t||t.isEmpty)return v;let y=W.fromBigInt(BigInt(t.toString()),I.decimal).getValue("string");return[I.set(y)]}catch(j){let t=j instanceof Error?j.message:String(j);return console.error(`Error fetching chainflip balance: ${t}`),v}}function q(o,I){return function(v){let j=U.from({chain:o});switch(o){case P.Chainflip:return u(I,j,v);default:return b(I,j,v)}}}var V={decimals:[10],displayName:"Polkadot Relay Chain",network:"polkadot",prefix:0,standardAccount:"*25519",symbols:["DOT"],website:"https://polkadot.network"},B={decimals:[18],displayName:"Chainflip",network:"chainflip",prefix:2112,standardAccount:"*25519",symbols:["FLIP"],website:"https://chainflip.io/"},w={decimals:[],displayName:"Substrate",network:"substrate",prefix:42,standardAccount:"*25519",symbols:[],website:"https://substrate.io/"},G={DOT:V,FLIP:B,GENERIC:w};function yo(o,I){return F(o).with(...h,(m)=>s({chain:m,...I})).exhaustive()}function O(o){return"address"in o}async function Q(o,I){let{Keyring:m}=await import("@polkadot/keyring"),{cryptoWaitReady:v}=await import("@polkadot/util-crypto");return await v(),new m({ss58Format:I,type:"sr25519"}).addFromUri(o)}var H=(o,I)=>o.rpc.system.accountNextIndex(I),T=(o,{recipient:I,assetValue:m})=>o.tx.balances?.transferAllowDeath?.(I,m.getBaseValue("number")),l=async(o,I,{recipient:m,assetValue:v,sender:j})=>{let t=T(o,{assetValue:v,recipient:m});if(!t)throw new L("toolbox_substrate_transfer_error");let y=O(I),R=y?I.address:j;if(!R)throw new L("core_transaction_invalid_sender_address");let N=await H(o,R);return(await t.signAndSend(y?I:R,{nonce:N,signer:y?void 0:I})).toString()},A=async(o,I,m,{recipient:v,assetValue:j,sender:t})=>{let y=T(o,{assetValue:j,recipient:v}),R=O(I)?I.address:t;if(!R)return Promise.resolve(m.set(0));let N=await y?.paymentInfo(R,{nonce:await H(o,R)})||{partialFee:0};return m.set(n.fromBigInt(BigInt(N.partialFee.toString()),m.decimal).getValue("string"))},c=async(o,I)=>{if(I)return o.send(I);return(await o.send()).toString()},i=async(o,I)=>{return await I.signAsync(o)},g=(o,I,m)=>{if(m)return I.signAndSend(o,m);return I.signAndSend(o).toString()},d=async({signer:o,address:I,tx:m,callback:v,api:j})=>{let t=await H(j,I);if(v)m.signAndSend(I,{nonce:t,signer:o},v);return m.signAndSend(I,{nonce:t,signer:o}).toString()};function e(o,I){let m=X(o);return Y(m,I)}function Z(o,I){return K(o)?x(o):X(o,void 0,I)}function _(o,I="ss58",m){if(I==="hex")return S(o);return Y(o,m)}function r({chain:o,prefix:I}){let m=I||F(o).with(z.Polkadot,()=>G.DOT.prefix).with(z.Chainflip,()=>G.FLIP.prefix).otherwise(()=>G.GENERIC.prefix);return function(j){try{let t=Z(j,m);return _(t,"ss58",m),!0}catch{return!1}}}function s({chain:o,generic:I=!1,...m}){let v=p.from({chain:o}),j;async function t(){let{ApiPromise:D,WsProvider:f}=await import("@polkadot/api"),M=await k(o),E=new f(M);return D.create({noInitWarn:!0,provider:E})}async function y(){if(j)return j;return j=await F(m).with({phrase:J.string},({phrase:D})=>Q(D,G[o].prefix)).with({signer:J.any},({signer:D})=>D).otherwise(()=>{return}),j}let R=I?G.GENERIC:G[o];async function N(D){let f=await y(),M=D||f;if(!M)throw new L("core_wallet_not_keypair_wallet");return O(M)?M.address:void 0}return{broadcast:c,convertAddress:e,createKeyring:(D)=>Q(D,R.prefix),createTransaction:async(D)=>{let f=await t();return T(f,D)},decodeAddress:Z,encodeAddress:_,estimateTransactionFee:async(D)=>{let f=await y();if(!f)throw new L("core_wallet_not_keypair_wallet");let M=await t();return A(M,f,v,D)},gasAsset:v,getAddress:N,getApi:t,getBalance:async(D)=>{let f=await t(),M=q(o,f),E=D||await N();return M(E)},network:R,sign:async(D)=>{let f=await y();if(!f)throw new L("core_wallet_not_keypair_wallet");if(O(f))return i(f,D);throw new L("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},signAndBroadcast:async({tx:D,callback:f,address:M})=>{let E=await y();if(!E)throw new L("core_wallet_not_keypair_wallet");if(O(E))return g(E,D,f);let $=await t();if(M)return d({address:M,api:$,callback:f,signer:E,tx:D});throw new L("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},transfer:async(D)=>{let f=await y();if(!f)throw new L("core_wallet_not_keypair_wallet");let M=await t();return l(M,f,D)},validateAddress:r({chain:o,prefix:R.prefix})}}export{O as isKeyringPair,yo as getSubstrateToolbox,r as getSubstrateAddressValidator,s as createSubstrateToolbox,Q as createKeyring,G as SubstrateNetwork};
|
package/dist/src/sui/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{fa as A}from"../../chunk-fjyc6m34.js";import{isValidSuiAddress as u}from"@mysten/sui/utils";import{AssetValue as P,Chain as _,getChainConfig as x,getRPCUrlSync as d,SwapKitError as N}from"@swapkit/helpers";import{match as l,P as m}from"ts-pattern";var I="0x2::sui::SUI",o=50000000;async function f($,k,G,q,Q=[],D){let Y=await $.getCoins({coinType:G,cursor:D,owner:k}),j=[...Q,...Y.data],K=j.reduce((v,H)=>v+BigInt(H.balance),0n);return Y.hasNextPage&&K<q?f($,k,G,q,j,Y.nextCursor):j}function y({coinObjectId:$,digest:k,version:G}){return{digest:k,objectId:$,version:G}}function c($,k,G){let q=k.reduce((v,H)=>v+BigInt(H.balance),0n);if(q<G)throw new N("toolbox_sui_insufficient_balance",{available:q.toString(),required:G.toString()});let{selectedCoins:Q}=k.reduce((v,H)=>{if(v.total>=G)return v;return{selectedCoins:[...v.selectedCoins,H],total:v.total+BigInt(H.balance)}},{selectedCoins:[],total:0n}),D=Q[0],Y=$.objectRef(y(D)),j=Q.slice(1).map((v)=>$.objectRef(y(v)));if(j.length>0)$.mergeCoins(Y,j);let[K]=$.splitCoins(Y,[G]);return K}function V($,k){let G=$.reduce((q,Q)=>q+BigInt(Q.balance),0n);if(G<k)throw new N("toolbox_sui_insufficient_balance",{available:G.toString(),required:k.toString()})}function r($){try{return u($)}catch{return!1}}function S($){return"signWithIntent"in $}function s({provider:$,...k}={}){let G;async function q(){if(G)return G;return G=await l(k).with({phrase:m.string},async({phrase:W})=>{let{Ed25519Keypair:z}=await import("@mysten/sui/keypairs/ed25519");return z.deriveKeypair(W)}).with({signer:m.any},({signer:W})=>W).otherwise(()=>{return}),G}async function Q(W=$){let{SuiJsonRpcClient:z}=await import("@mysten/sui/jsonRpc");return new z({network:"mainnet",url:W||d(_.Sui)})}async function D(W){return BigInt(await W.getReferenceGasPrice())}async function Y(){return(await q())?.toSuiAddress()||""}function j(W){try{let z=P.from({address:W,chain:_.Sui});return{asset:z.toString(),decimals:z.decimal}}catch{}return null}async function K(W){let z=W||await Y();if(!z)throw new N("toolbox_sui_address_required");let{baseDecimal:L,chain:X}=x(_.Sui);try{let Z=await(await Q()).getAllBalances({owner:z}),b=Z.find(({coinType:M})=>M===I)?.totalBalance||"0",J=[P.from({chain:X,fromBaseDecimal:L,value:b})];for(let{coinType:M,totalBalance:O}of Z){if(M===I||Number(O)<=0)continue;let F=j(M);if(F)J.push(P.from({asset:F.asset,fromBaseDecimal:F.decimals,value:O}))}return J}catch{return[P.from({chain:X})]}}async function v(W){let z=P.from({chain:_.Sui,value:"0.01"});if(!W)return z;try{let L=await Q(),{txBytes:X}=await H(W),{effects:{status:R,gasUsed:Z}}=await L.dryRunTransactionBlock({transactionBlock:X});if(R.status!=="success")return z;let{baseDecimal:b}=x(_.Sui),J=BigInt(Z.computationCost)+BigInt(Z.storageCost)-BigInt(Z.storageRebate);return P.from({chain:_.Sui,fromBaseDecimal:b,value:J.toString()})}catch{return z}}async function H({recipient:W,assetValue:z,gasBudget:L,sender:X}){let{Transaction:R}=await import("@mysten/sui/transactions"),Z=X||await Y(),b=L||o;if(!Z)throw new N("toolbox_sui_no_sender");try{let J=await Q(),M=new R;if(M.setSender(Z),z.isGasAsset||z.symbol==="SUI"){let F=z.getBaseValue("bigint"),[U,w]=await Promise.all([D(J),f(J,Z,I,F+BigInt(b))]);V(w,F+BigInt(b)),M.setGasPrice(U),M.setGasPayment(w.map(y));let[E]=M.splitCoins(M.gas,[z.getBaseValue("string")]);M.transferObjects([E],W)}else{let F=z.address;if(!F)throw new N("toolbox_sui_missing_coin_type");let U=z.getBaseValue("bigint"),[w,E,h]=await Promise.all([D(J),f(J,Z,I,BigInt(b)),f(J,Z,F,U)]);if(!h.length)throw new N("toolbox_sui_no_coins_found",{coinType:F});V(E,BigInt(b)),M.setGasPrice(w),M.setGasPayment(E.map(y));let g=c(M,h,U);M.transferObjects([g],W)}M.setGasBudget(b);let O=await M.build({client:J});return{tx:M,txBytes:O}}catch(J){if(J instanceof N)throw J;throw new N("toolbox_sui_transaction_creation_error",{error:J})}}async function p(W){let z=await q();if(!z)throw new N("toolbox_sui_no_signer");if(W instanceof Uint8Array)return z.signTransaction(W);let{txBytes:L}="tx"in W?W:await H(W);return z.signTransaction(L)}async function T({assetValue:W,gasBudget:z,recipient:L}){let X=await q();if(!X)throw new N("toolbox_sui_no_signer");let R=X.toSuiAddress()||await Y();if(!R)throw new N("toolbox_sui_no_sender");let{txBytes:Z}=await H({assetValue:W,gasBudget:z,recipient:L,sender:R}),b=await Q();if(!S(X)){let M=await X.signTransaction(Z),{digest:O}=await b.executeTransactionBlock({signature:M.signature,transactionBlock:M.bytes});return O}let{digest:J}=await b.signAndExecuteTransaction({signer:X,transaction:Z});return J}async function B(W){let z=await Q(),{digest:L}=await z.executeTransactionBlock({signature:W.signature,transactionBlock:W.bytes});return L}async function C(W){let z=await q();if(!z)throw new N("toolbox_sui_no_signer");let L=await Q(),X;if(typeof W==="string")X=Uint8Array.from(Buffer.from(W,"base64"));else if(W instanceof Uint8Array)X=W;else X=await W.build({client:L});if(!S(z)){let Z=await z.signTransaction(X),{digest:b}=await L.executeTransactionBlock({signature:Z.signature,transactionBlock:Z.bytes});return b}let{digest:R}=await L.signAndExecuteTransaction({signer:z,transaction:X});return R}return{broadcastTransaction:B,createTransaction:H,estimateTransactionFee:v,getAddress:Y,getBalance:K,signAndBroadcastTransaction:C,signTransaction:p,transfer:T,validateAddress:r}}export{r as validateSuiAddress,s as getSuiToolbox};
|
package/dist/src/ton/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ea as p}from"../../chunk-jdh5asaw.js";import{fa as U}from"../../chunk-fjyc6m34.js";import{AssetValue as n,Chain as K,getChainConfig as a,SKConfig as s,SwapKitError as I,SwapKitNumber as t}from"@swapkit/helpers";import{Address as k,beginCell as h,Cell as S,external as e,internal as QQ,loadStateInit as XQ,SendMode as N,storeMessage as YQ,toNano as m}from"@ton/core";import{match as u,P as y}from"ts-pattern";var ZQ=260734629,$Q=m("0.01"),zQ=m("0.05"),w=N.PAY_GAS_SEPARATELY+N.IGNORE_ERRORS,GQ=N.CARRY_ALL_REMAINING_BALANCE+N.IGNORE_ERRORS,HQ=60000,j,A=0;async function kQ(){let H=Date.now();if(j&&H-A<HQ)return j;let{getHttpEndpoint:L}=await import("@orbs-network/ton-access");return j=await L(),A=H,j}async function qQ(){let[H]=s.get("rpcUrls")[K.Ton]??[];if(H)return H;return await kQ()}function JQ(H={}){let L,D,F;async function R(){if(!L){let{TonClient:Q}=await import("@ton/ton"),X=H.provider??await qQ();L=new Q({endpoint:X})}return L}async function W(){return(await O()).address.toString()}async function P(){if(F)return F;return F=await u(H).with({phrase:y.string},async({phrase:Q})=>{let{mnemonicToWalletKey:X}=await import("@ton/crypto");return X(Q.split(" "))}).with({signer:y.any},({signer:Q})=>Q).otherwise(()=>{return}),F}async function O(Q){if(!D||Q){let X=await P(),Y=await R(),$=Q||X;if(!$)throw new I("core_wallet_connection_not_found");let{WalletContractV4:Z}=await import("@ton/ton"),z=Z.create({publicKey:$.publicKey,workchain:0});D=Y.open(z)}return D}let g=p(K.Ton);async function c({assetValue:Q,recipient:X,memo:Y,sender:$,sweep:Z}){if(Q.isGasAsset){let r=Y?C(Y).toBoc().toString("base64"):void 0;return[{address:X,amount:Q.getBaseValue("string"),payload:r}]}if(Z)throw new I({errorKey:"core_swap_invalid_params",info:{asset:Q.toString(),reason:"TON sweep is only supported for the native gas asset"}});let z=Q.address;if(!z)throw new I({errorKey:"core_swap_contract_not_found",info:{asset:Q.toString()}});let G=$??await W(),v=await f({jettonMasterAddress:z,ownerAddress:G}),q=k.parse(X),J=k.parse(G),B=Q.getBaseValue("bigint"),x=Y?C(Y):void 0,_=o({destinationAddress:q,forwardPayload:x,jettonAmount:B,responseAddress:J});return[{address:v.toString(),amount:zQ.toString(),payload:_.toBoc().toString("base64")}]}async function V({sender:Q,sweep:X,...Y}){return{messages:await c({...Y,sender:Q,sweep:X}),sendMode:X?GQ:w}}function i(Q){if(!Array.isArray(Q))return Q;let[X]=Q;return{messages:Q.map(({sendMode:$,...Z})=>Z),sendMode:X?.sendMode??w}}function M(Q){return Q.map((X)=>{let Y=X.payload?S.fromBase64(X.payload):void 0,$=X.stateInit?XQ(S.fromBase64(X.stateInit).asSlice()):void 0,Z=k.parse(X.address),z=k.isFriendly(X.address)?k.parseFriendly(X.address).isBounceable:!0;return QQ({body:Y,bounce:z,init:$,to:Z,value:BigInt(X.amount)})})}async function b(Q){let X=await P(),Y=await O();if(!Y||!X)throw new I("core_wallet_connection_not_found");let $=await R(),{state:Z}=await $.getContractState(Y.address),z=Z==="active",G=z?await Y.getSeqno():0,{messages:v,sendMode:q}=i(Q),J=Y.createTransfer({messages:M(v),secretKey:X.secretKey,sendMode:q,seqno:G}),B=e({body:J,init:z?void 0:Y.init,to:Y.address});return h().store(YQ(B)).endCell()}async function E(Q){return await(await R()).sendFile(Q.toBoc()),Q.hash().toString("hex")}async function T(Q){let X=await b(Q);return E(X)}async function l({assetValue:Q,recipient:X,memo:Y,sweep:$}){let Z=await V({assetValue:Q,memo:Y,recipient:X,sweep:$});return T(Z)}async function d({sender:Q,...X}){let{baseDecimal:Y}=a(K.Ton),$=await u(Q).with(y.string,(G)=>{return k.parseFriendly(G).address}).otherwise(async()=>{return(await O()).address});if(!$)throw new I("toolbox_fee_estimation_failed",{chain:K.Ton});let Z=n.from({chain:K.Ton,value:"0.01"}),z=await R();try{let G=await V({sender:Q,...X}),v=await P(),q=await O();if(!q||!v)return Z;let J=await q.getSeqno(),B=q.createTransfer({messages:M(G.messages),secretKey:v.secretKey,sendMode:G.sendMode,seqno:J}),{source_fees:x}=await z.estimateExternalMessageFee($,{body:B,ignoreSignature:!0,initCode:null,initData:null}),_=x.in_fwd_fee+x.storage_fee+x.gas_fee+x.fwd_fee;return Z.set(t.fromBigInt(BigInt(_),Y))}catch{return Z}}async function f({jettonMasterAddress:Q,ownerAddress:X}){try{let Y=await R(),$=k.parse(Q),Z=k.parse(X),{JettonMaster:z}=await import("@ton/ton");return await Y.open(z.create($)).getWalletAddress(Z)}catch{throw new I({errorKey:"core_swap_contract_not_found",info:{jettonMasterAddress:Q,ownerAddress:X}})}}function o({jettonAmount:Q,destinationAddress:X,responseAddress:Y,forwardAmount:$=$Q,forwardPayload:Z}){let z=h().storeUint(ZQ,32).storeUint(0,64).storeCoins(Q).storeAddress(X).storeAddress(Y).storeBit(0).storeCoins($);if(Z)z.storeBit(1).storeRef(Z);else z.storeBit(0);return z.endCell()}function C(Q){return h().storeUint(0,32).storeStringTail(Q).endCell()}return{broadcastTransaction:E,createTransaction:V,estimateTransactionFee:d,getAddress:W,getBalance:g,getJettonWalletAddress:f,sign:b,signAndBroadcastTransaction:T,transfer:l,validateAddress:vQ}}function vQ(H){try{return k.parse(H),!0}catch{return!1}}export{vQ as validateTonAddress,JQ as getTONToolbox};
|
package/dist/src/tron/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../../chunk-ntbvmmch.js";import{bytesToHex as qJ}from"@noble/hashes/utils.js";import{HDKey as GJ}from"@scure/bip32";import{mnemonicToSeedSync as MJ}from"@scure/bip39";import{AssetValue as D,BaseDecimal as m,Chain as N,derivationPathToString as Tz,getRPCUrl as WJ,NetworkDerivationPath as Iz,SwapKitError as H,updateDerivationPath as vz,warnOnce as Fz}from"@swapkit/helpers";import{match as OJ,P as o}from"ts-pattern";import{sha256 as pz}from"@noble/hashes/sha2.js";import{bytesToHex as zz,hexToBytes as Jz}from"@noble/hashes/utils.js";import{SwapKitError as S}from"@swapkit/helpers";var g=0,Qz=1,A=2,Zz=5,lz=8,cz=10,oz=18;function p(J,z){let Q=0n,Z=0n,$=z;while($<J.length&&$-z<10){let j=J[$++];if(j===void 0)break;if(Q|=BigInt(j&127)<<Z,Z+=7n,(j&128)===0)return[Q,$]}throw new S("toolbox_tron_transaction_creation_failed")}function v(J){let z=[],Q=J<0n?J+2n**64n:J;while(Q>=128n)z.push(Number(Q&0x7fn)|128),Q>>=7n;return z.push(Number(Q)),z}function b(J,z,Q){let Z=J.get(z);if(Z)Z.push(Q);else J.set(z,[Q])}function iz(J){let z=new Map,Q=0;while(Q<J.length){let[Z,$]=p(J,Q);Q=$;let j=Number(Z>>3n),M=Number(Z&7n);if(M===g){let[k,U]=p(J,Q);Q=U,b(z,j,{data:new Uint8Array(v(k)),wireType:g})}else if(M===A){let[k,U]=p(J,Q);Q=U;let F=Number(k);if(F<0||Q+F>J.length)throw new S("toolbox_tron_transaction_creation_failed");let u=J.slice(Q,Q+F);Q+=F,b(z,j,{data:u,wireType:A})}else if(M===Qz){if(Q+8>J.length)throw new S("toolbox_tron_transaction_creation_failed");let k=J.slice(Q,Q+8);Q+=8,b(z,j,{data:k,wireType:Qz})}else if(M===Zz){if(Q+4>J.length)throw new S("toolbox_tron_transaction_creation_failed");let k=J.slice(Q,Q+4);Q+=4,b(z,j,{data:k,wireType:Zz})}else throw new S("toolbox_tron_transaction_creation_failed")}return z}function nz(J){let z=[];for(let[j,M]of[...J.entries()].sort(([k],[U])=>k-U))for(let{wireType:k,data:U}of M){let F=BigInt(j<<3|k);if(z.push(new Uint8Array(v(F))),k===A)z.push(new Uint8Array(v(BigInt(U.length))));z.push(U)}let Q=z.reduce((j,M)=>j+M.length,0),Z=new Uint8Array(Q),$=0;for(let j of z)Z.set(j,$),$+=j.length;return Z}function $z(J,z){if(!J||J.length%2!==0)throw new S("toolbox_tron_transaction_creation_failed");let Q=Jz(J),Z=iz(Q);if(z.expiration!==void 0)Z.set(lz,[{data:new Uint8Array(v(BigInt(z.expiration))),wireType:g}]);if(z.data!==void 0)Z.set(cz,[{data:Jz(z.data),wireType:A}]);if(z.fee_limit!==void 0)Z.set(oz,[{data:new Uint8Array(v(BigInt(z.fee_limit))),wireType:g}]);let $=nz(Z),j=zz($),M=zz(pz($));return{raw_data_hex:j,txID:M}}import{Chain as zJ,getRPCUrlSync as JJ,SwapKitError as K,warnOnce as E}from"@swapkit/helpers";import{secp256k1 as Yz}from"@noble/curves/secp256k1.js";import{sha256 as Xz}from"@noble/hashes/sha2.js";import{keccak_256 as dz}from"@noble/hashes/sha3.js";import{bytesToHex as _,hexToBytes as y}from"@noble/hashes/utils.js";import{createBase58check as tz}from"@scure/base";import{SwapKitError as jz}from"@swapkit/helpers";var h=tz(Xz),qz=65,az=2n**256n;function B(J){if(typeof J!=="string")return!1;try{let z=h.decode(J);return z.length===21&&z[0]===qz}catch{return!1}}function Gz(J){return _(h.decode(J))}function sz(J){return h.decode(J).slice(1)}function Mz(J){let z=Yz.getPublicKey(y(J),!1),Q=dz(z.slice(1)).slice(-20),Z=new Uint8Array(21);return Z[0]=qz,Z.set(Q,1),h.encode(Z)}function Wz({txID:J,privateKey:z}){let Q=Yz.sign(y(J),y(z),{format:"recovered",prehash:!1}),Z=Q[0]??0,$=_(Q.slice(1,33)),j=_(Q.slice(33,65)),M=(Z+27).toString(16).padStart(2,"0");return $+j+M}function T({txID:J,raw_data_hex:z}){let Q=_(Xz(y(z)));if(J!==Q)throw new jz("toolbox_tron_invalid_transaction_integrity",{expected:Q,txID:J})}function rz(J){return`000000000000000000000000${_(sz(J))}`}function ez(J){let z=typeof J==="bigint"?J:BigInt(J);if(z<0n||z>=az)throw new jz("toolbox_tron_invalid_token_identifier",{identifier:z.toString()});return z.toString(16).padStart(64,"0")}function I(J){return J.map(({type:z,value:Q})=>z==="address"?rz(Q):ez(BigInt(Q))).join("")}function Oz(J){return _(new TextEncoder().encode(J))}var Cz="https://api.trongrid.io",QJ=1000,ZJ=1e6,$J=420,YJ=1e6,XJ=30000;function kz(){try{return JJ(zJ.Tron)}catch{return Cz}}function Hz(){let J=new AbortController,z=setTimeout(()=>J.abort(),XJ);return{cleanup:()=>clearTimeout(z),signal:J.signal}}async function V(J,z){let{signal:Q,cleanup:Z}=Hz();try{let $=await fetch(`${kz()}${J}`,{body:JSON.stringify(z),headers:{"Content-Type":"application/json"},method:"POST",signal:Q});if(!$.ok)throw new K("toolbox_tron_trongrid_api_error",{message:`${$.status} ${$.statusText} on ${J}`});return await $.json()}finally{Z()}}async function Kz(J,z){let{signal:Q,cleanup:Z}=Hz();try{let $=await fetch(`${z??kz()}${J}`,{headers:{"Content-Type":"application/json"},signal:Q});if(!$.ok)throw new K("toolbox_tron_trongrid_api_error",{message:`${$.status} ${$.statusText} on ${J}`});return await $.json()}finally{Z()}}async function Pz(J){if(!B(J))throw new K("toolbox_tron_trongrid_api_error",{address:J,message:"Invalid address"});try{let z=await Kz(`/v1/accounts/${J}`,Cz);if(!(z.success&&z.data)||z.data.length===0)return;let Q;try{Q=Gz(J).toLowerCase()}catch{Q=J.toLowerCase()}let Z=z.data.find(($)=>$.address.toLowerCase()===Q);if(!Z)return;return{balance:Z.balance,trc20:Z.trc20||[]}}catch(z){if(z instanceof K)throw z;throw new K("toolbox_tron_trongrid_api_error",{address:J,message:z instanceof Error?z.message:"Unknown error"})}}async function Lz({from:J,to:z,amount:Q}){let $=await V("/wallet/createtransaction",{amount:Q,owner_address:J,to_address:z,visible:!0});if(!$.txID||!$.raw_data_hex||!$.raw_data)throw new K("toolbox_tron_transaction_creation_failed");let M=$.raw_data?.contract?.[0]?.parameter?.value;if(M?.to_address!==z||M?.owner_address!==J||M?.amount!==Q)throw new K("toolbox_tron_transaction_creation_failed");return T($),$}async function Nz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z,feeLimit:$,callValue:j=0}){let M=await V("/wallet/triggersmartcontract",{call_value:j,contract_address:z,fee_limit:$,function_selector:Q,owner_address:J,parameter:Z,visible:!0});if(!M.result.result||!M.transaction?.txID||!M.transaction?.raw_data_hex)throw new K("toolbox_tron_transaction_creation_failed");let U=M.transaction.raw_data?.contract?.[0]?.parameter?.value;if(U?.contract_address!==z||U?.owner_address!==J)throw new K("toolbox_tron_transaction_creation_failed");return T(M.transaction),M.transaction}function Bz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z}){return V("/wallet/triggerconstantcontract",{contract_address:z,function_selector:Q,owner_address:J,parameter:Z,visible:!0})}function jJ({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z}){return V("/wallet/estimateenergy",{contract_address:z,function_selector:Q,owner_address:J,parameter:Z,visible:!0})}function Uz(J){let z=typeof J==="number"?J:typeof J==="string"?Number(J):Number.NaN;return Number.isFinite(z)&&z>0?z:void 0}async function f(J){try{let{result:z,txid:Q}=await V("/wallet/broadcasttransaction",{raw_data:J.raw_data,raw_data_hex:J.raw_data_hex,signature:J.signature,txID:J.txID,visible:J.visible});if(!z||!Q)throw new K("toolbox_tron_token_transfer_failed");return Q}catch(z){throw new K("toolbox_tron_broadcast_failed",{error:z})}}async function w(){let J={};try{let{chainParameter:z}=await Kz("/wallet/getchainparameters");for(let Q of z)J[Q.key]=Q.value}catch(z){E({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${z instanceof Error?z.message:z}`})}return{bandwidthFee:J.getTransactionFee??QJ,createAccountFee:J.getCreateNewAccountFeeInSystemContract??J.getCreateAccountFee??ZJ,energyFee:J.getEnergyFee??$J,memoFee:J.getMemoFee??YJ}}async function l(J){try{let z=await V("/wallet/getaccountresource",{address:J,visible:!0});return{bandwidth:{free:(z.freeNetLimit??600)-(z.freeNetUsed??0),total:z.NetLimit??0,used:z.NetUsed??0},energy:{total:z.EnergyLimit??0,used:z.EnergyUsed??0}}}catch(z){return E({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${z instanceof Error?z.message:z}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function x(J){try{let z=await V("/wallet/getaccount",{address:J,visible:!0});return z&&Object.keys(z).length>0}catch{return!1}}async function c(J){try{let z=await jJ({...J,ownerAddress:J.sender}),Q=z.energy_required??z.energyRequired;if(z.result&&!z.result.result)throw new K("toolbox_tron_trongrid_api_error",{message:z.result.message||"estimateenergy failed"});if(Q!==void 0){let Z=Uz(Q);if(Z!==void 0)return Z;throw new K("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(z){E({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${z instanceof Error?z.message:z}`})}try{let{energy_used:z}=await Bz({...J,ownerAddress:J.sender}),Q=Uz(z);if(Q!==void 0)return Q;throw new K("toolbox_tron_trongrid_api_error",{message:"Invalid triggerconstantcontract energy response"})}catch(z){throw E({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy: ${z instanceof Error?z.message:z}`}),new K("toolbox_tron_trongrid_api_error",{message:`Unable to estimate contract energy: ${z instanceof Error?z.message:z}`})}}async function Dz({assetAddress:J,owner:z,spender:Q}){let Z=I([{type:"address",value:z},{type:"address",value:Q}]),j=(await Bz({contractAddress:J,functionSelector:"allowance(address,address)",ownerAddress:Q,parameter:Z})).constant_result?.[0];if(!j)return 0n;try{return BigInt(`0x${j}`)}catch{return 0n}}var UJ=B,Rz=268,Vz=65000,i=25000,Sz=345,n="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",CJ="115792089237316195423570985008687907853269984665640564039457584007913129639935";function fz({phrase:J,derivationPath:z}){let Q=GJ.fromMasterSeed(MJ(J)).derive(z);if(!Q.privateKey)throw new H("toolbox_tron_no_signer");return qJ(Q.privateKey)}function kJ(J,z){return{...J,value:String(z)}}function HJ(J,z){if(!z)return J;return{...J,data:z.startsWith("0x")?z:`0x${z}`}}function KJ({phrase:J,derivationPath:z,index:Q}){let Z=z||Tz(vz(Iz[N.Tron],{index:Q||0}));return fz({derivationPath:Z,phrase:J})}function PJ({phrase:J,derivationPath:z}){let Q=fz({derivationPath:z,phrase:J}),Z=Mz(Q);return{getAddress:()=>Promise.resolve(Z),signTransaction:($)=>{T($);let j=Wz({privateKey:Q,txID:$.txID});return Promise.resolve({...$,signature:[j]})}}}function _z({transaction:J,memo:z,expiration:Q,feeLimit:Z}){let $={},j={};if(Z!==void 0&&J.raw_data)$.fee_limit=Z,j.fee_limit=Z;if(z){let U=z.startsWith("0x")?z.replace(/^0x/,""):Oz(z);$.data=U,j.data=U}if(Q){let U=J.raw_data.expiration+Q*1000;$.expiration=U,j.expiration=U}if(Object.keys($).length===0)return J;let{raw_data_hex:M,txID:k}=$z(J.raw_data_hex,$);return{...J,raw_data:{...J.raw_data,...j},raw_data_hex:M,txID:k}}function LJ(J={}){let z="index"in J?J.index||0:0,Q=Tz("derivationPath"in J&&J.derivationPath?J.derivationPath:vz(Iz[N.Tron],{index:z})),Z,$=!1;function j(){if($)return Promise.resolve(Z);return Z=OJ(J).with({phrase:o.string},({phrase:Y})=>PJ({derivationPath:Q,phrase:Y})).with({signer:o.not(o.nullish)},({signer:Y})=>Y).otherwise(()=>{return}),$=!0,Promise.resolve(Z)}async function M(){let Y=await j();if(!Y)throw new H("toolbox_tron_no_signer");return Y.getAddress()}async function k(Y,X){let G=Y||Vz,q=X??(await w()).energyFee,O=G*q,W=Math.ceil(O*1.5);return Math.min(Math.max(W,1e7),150000000)}async function U({contractAddress:Y,functionSelector:X,parameter:G,sender:q,memo:O,expiration:W,extraEnergy:P=0}){let C=await c({contractAddress:Y,functionSelector:X,parameter:G,sender:q}),L=await k(C+P),R=await Nz({contractAddress:Y,feeLimit:L,functionSelector:X,ownerAddress:q,parameter:G});return _z({expiration:W,feeLimit:L,memo:O,transaction:R})}async function F(Y){if(!B(Y))return[D.from({chain:N.Tron})];try{let X=await Pz(Y);if(!X)return[D.from({chain:N.Tron})];let G=[D.from({chain:N.Tron,fromBaseDecimal:6,value:String(X.balance)})],q=X.trc20?.find((O)=>(n in O));if(q){let O=q[n];G.push(D.from({asset:`TRON.USDT-${n}`,fromBaseDecimal:6,value:O}))}return G}catch(X){return Fz({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${X instanceof Error?X.message:X}`}),[D.from({chain:N.Tron})]}}async function u({recipient:Y,assetValue:X,memo:G,expiration:q}){if(!B(Y))throw new H("toolbox_tron_token_transfer_failed",{message:"invalid address"});let O=await j();if(!O)throw new H("toolbox_tron_no_signer");try{let W=await M(),P=await t({assetValue:X,expiration:q,memo:G,recipient:Y,sender:W}),C=await O.signTransaction(P),L=await f(C);if(!L)throw new H("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return L}catch(W){throw new H("toolbox_tron_token_transfer_failed",{message:W instanceof Error?W.message:String(W)})}}function d({requiredBandwidth:Y,resources:X,feePerUnit:G}){let q=Math.max(0,X.free+X.total-X.used);return Y>q?(Y-q)*G:0}async function wz({memo:Y,recipient:X,senderAddress:G}){let[q,O,W]=await Promise.all([w(),x(X),l(G)]),P=O?0:q.createAccountFee,C=d({feePerUnit:q.bandwidthFee,requiredBandwidth:Rz,resources:W.bandwidth}),L=Y?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:P+C+L})}async function xz({assetValue:Y,memo:X,recipient:G,senderAddress:q}){let O=Y.address;if(!O)throw new H("toolbox_tron_invalid_token_identifier",{identifier:Y.toString()});let[W,P,C,L]=await Promise.all([w(),x(G),l(q),c({contractAddress:O,functionSelector:"transfer(address,uint256)",parameter:I([{type:"address",value:G},{type:"uint256",value:Y.getBaseValue("string")}]),sender:q})]),r=L+(P?0:i),Ez=d({feePerUnit:W.bandwidthFee,requiredBandwidth:Sz,resources:C.bandwidth}),e=Math.max(0,C.energy.total-C.energy.used),mz=r>e?(r-e)*W.energyFee:0,uz=X?W.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:Ez+mz+uz})}async function bz({assetValue:Y,memo:X,recipient:G}){let[q,O]=await Promise.all([w(),x(G)]);if(Y.isGasAsset){let L=O?0:q.createAccountFee,R=X?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:L+Rz*q.bandwidthFee+R})}let P=await k(Vz+(O?0:i),q.energyFee),C=X?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:P+Sz*q.bandwidthFee+C})}async function gz({assetValue:Y,memo:X,recipient:G,sender:q}){let O=await j();try{let W=q?q:O?await M():void 0;if(!W)return bz({assetValue:Y,memo:X,recipient:G});return Y.isGasAsset?wz({memo:X,recipient:G,senderAddress:W}):xz({assetValue:Y,memo:X,recipient:G,senderAddress:W})}catch(W){throw Fz({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${W instanceof Error?W.message:W}`}),new H("toolbox_fee_estimation_failed",{chain:N.Tron,error:W})}}async function t({recipient:Y,assetValue:X,memo:G,sender:q,expiration:O}){if(!B(Y)||!B(q))throw new H("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(X.isGasAsset){let C=await Lz({amount:X.getBaseValue("number"),from:q,to:Y});return _z({expiration:O,memo:G,transaction:C})}let W=X.address;if(!W)throw new H("toolbox_tron_invalid_token_identifier",{identifier:X.toString()});let P=await x(Y);return U({contractAddress:W,expiration:O,extraEnergy:P?0:i,functionSelector:"transfer(address,uint256)",memo:G,parameter:I([{type:"address",value:Y},{type:"uint256",value:X.getBaseValue("string")}]),sender:q})}async function a(Y){T(Y);let X=await j();if(!X)throw new H("toolbox_tron_no_signer");return X.signTransaction(Y)}async function Az(Y){let X=await a(Y);return f(X)}function s({assetAddress:Y,spenderAddress:X,from:G}){return Dz({assetAddress:Y,owner:G,spender:X})}async function yz({assetAddress:Y,spenderAddress:X,from:G,amount:q}){let O=await s({assetAddress:Y,from:G,spenderAddress:X});if(!q)return O>0n;return O>=BigInt(q)}async function hz({assetAddress:Y,spenderAddress:X,amount:G,from:q}){if(!B(Y)||!B(X))throw new H("toolbox_tron_approve_failed");let O=await j();if(!O)throw new H("toolbox_tron_no_signer");let W=q||await M(),P=G!==void 0?BigInt(G).toString():CJ;try{let C=await U({contractAddress:Y,functionSelector:"approve(address,uint256)",parameter:I([{type:"address",value:X},{type:"uint256",value:P}]),sender:W}),L=await O.signTransaction(C),R=await f(L);if(!R)throw new H("toolbox_tron_approve_failed");return R}catch(C){if(C instanceof H)throw C;throw new H("toolbox_tron_approve_failed",{error:C})}}return{approve:hz,broadcastTransaction:f,createTransaction:t,estimateTransactionFee:gz,getAddress:M,getApprovedAmount:s,getBalance:F,getRpcUrl:()=>WJ(N.Tron),isApproved:yz,signAndBroadcastTransaction:Az,signTransaction:a,transfer:u,validateAddress:B}}export{kJ as withTronTransactionValue,HJ as withTronTransactionData,UJ as validateTronAddress,LJ as getTronToolbox,KJ as getTronPrivateKeyFromMnemonic};
|
|
1
|
+
import"../../chunk-fjyc6m34.js";import{bytesToHex as qJ}from"@noble/hashes/utils.js";import{HDKey as GJ}from"@scure/bip32";import{mnemonicToSeedSync as MJ}from"@scure/bip39";import{AssetValue as D,BaseDecimal as m,Chain as N,derivationPathToString as Tz,getRPCUrl as WJ,NetworkDerivationPath as Iz,SwapKitError as H,updateDerivationPath as vz,warnOnce as Fz}from"@swapkit/helpers";import{match as OJ,P as o}from"ts-pattern";import{sha256 as pz}from"@noble/hashes/sha2.js";import{bytesToHex as zz,hexToBytes as Jz}from"@noble/hashes/utils.js";import{SwapKitError as S}from"@swapkit/helpers";var g=0,Qz=1,A=2,Zz=5,lz=8,cz=10,oz=18;function p(J,z){let Q=0n,Z=0n,$=z;while($<J.length&&$-z<10){let j=J[$++];if(j===void 0)break;if(Q|=BigInt(j&127)<<Z,Z+=7n,(j&128)===0)return[Q,$]}throw new S("toolbox_tron_transaction_creation_failed")}function v(J){let z=[],Q=J<0n?J+2n**64n:J;while(Q>=128n)z.push(Number(Q&0x7fn)|128),Q>>=7n;return z.push(Number(Q)),z}function b(J,z,Q){let Z=J.get(z);if(Z)Z.push(Q);else J.set(z,[Q])}function iz(J){let z=new Map,Q=0;while(Q<J.length){let[Z,$]=p(J,Q);Q=$;let j=Number(Z>>3n),M=Number(Z&7n);if(M===g){let[k,U]=p(J,Q);Q=U,b(z,j,{data:new Uint8Array(v(k)),wireType:g})}else if(M===A){let[k,U]=p(J,Q);Q=U;let F=Number(k);if(F<0||Q+F>J.length)throw new S("toolbox_tron_transaction_creation_failed");let u=J.slice(Q,Q+F);Q+=F,b(z,j,{data:u,wireType:A})}else if(M===Qz){if(Q+8>J.length)throw new S("toolbox_tron_transaction_creation_failed");let k=J.slice(Q,Q+8);Q+=8,b(z,j,{data:k,wireType:Qz})}else if(M===Zz){if(Q+4>J.length)throw new S("toolbox_tron_transaction_creation_failed");let k=J.slice(Q,Q+4);Q+=4,b(z,j,{data:k,wireType:Zz})}else throw new S("toolbox_tron_transaction_creation_failed")}return z}function nz(J){let z=[];for(let[j,M]of[...J.entries()].sort(([k],[U])=>k-U))for(let{wireType:k,data:U}of M){let F=BigInt(j<<3|k);if(z.push(new Uint8Array(v(F))),k===A)z.push(new Uint8Array(v(BigInt(U.length))));z.push(U)}let Q=z.reduce((j,M)=>j+M.length,0),Z=new Uint8Array(Q),$=0;for(let j of z)Z.set(j,$),$+=j.length;return Z}function $z(J,z){if(!J||J.length%2!==0)throw new S("toolbox_tron_transaction_creation_failed");let Q=Jz(J),Z=iz(Q);if(z.expiration!==void 0)Z.set(lz,[{data:new Uint8Array(v(BigInt(z.expiration))),wireType:g}]);if(z.data!==void 0)Z.set(cz,[{data:Jz(z.data),wireType:A}]);if(z.fee_limit!==void 0)Z.set(oz,[{data:new Uint8Array(v(BigInt(z.fee_limit))),wireType:g}]);let $=nz(Z),j=zz($),M=zz(pz($));return{raw_data_hex:j,txID:M}}import{Chain as zJ,getRPCUrlSync as JJ,SwapKitError as K,warnOnce as E}from"@swapkit/helpers";import{secp256k1 as Yz}from"@noble/curves/secp256k1.js";import{sha256 as Xz}from"@noble/hashes/sha2.js";import{keccak_256 as dz}from"@noble/hashes/sha3.js";import{bytesToHex as _,hexToBytes as y}from"@noble/hashes/utils.js";import{createBase58check as tz}from"@scure/base";import{SwapKitError as jz}from"@swapkit/helpers";var h=tz(Xz),qz=65,az=2n**256n;function B(J){if(typeof J!=="string")return!1;try{let z=h.decode(J);return z.length===21&&z[0]===qz}catch{return!1}}function Gz(J){return _(h.decode(J))}function sz(J){return h.decode(J).slice(1)}function Mz(J){let z=Yz.getPublicKey(y(J),!1),Q=dz(z.slice(1)).slice(-20),Z=new Uint8Array(21);return Z[0]=qz,Z.set(Q,1),h.encode(Z)}function Wz({txID:J,privateKey:z}){let Q=Yz.sign(y(J),y(z),{format:"recovered",prehash:!1}),Z=Q[0]??0,$=_(Q.slice(1,33)),j=_(Q.slice(33,65)),M=(Z+27).toString(16).padStart(2,"0");return $+j+M}function T({txID:J,raw_data_hex:z}){let Q=_(Xz(y(z)));if(J!==Q)throw new jz("toolbox_tron_invalid_transaction_integrity",{expected:Q,txID:J})}function rz(J){return`000000000000000000000000${_(sz(J))}`}function ez(J){let z=typeof J==="bigint"?J:BigInt(J);if(z<0n||z>=az)throw new jz("toolbox_tron_invalid_token_identifier",{identifier:z.toString()});return z.toString(16).padStart(64,"0")}function I(J){return J.map(({type:z,value:Q})=>z==="address"?rz(Q):ez(BigInt(Q))).join("")}function Oz(J){return _(new TextEncoder().encode(J))}var Cz="https://api.trongrid.io",QJ=1000,ZJ=1e6,$J=420,YJ=1e6,XJ=30000;function kz(){try{return JJ(zJ.Tron)}catch{return Cz}}function Hz(){let J=new AbortController,z=setTimeout(()=>J.abort(),XJ);return{cleanup:()=>clearTimeout(z),signal:J.signal}}async function V(J,z){let{signal:Q,cleanup:Z}=Hz();try{let $=await fetch(`${kz()}${J}`,{body:JSON.stringify(z),headers:{"Content-Type":"application/json"},method:"POST",signal:Q});if(!$.ok)throw new K("toolbox_tron_trongrid_api_error",{message:`${$.status} ${$.statusText} on ${J}`});return await $.json()}finally{Z()}}async function Kz(J,z){let{signal:Q,cleanup:Z}=Hz();try{let $=await fetch(`${z??kz()}${J}`,{headers:{"Content-Type":"application/json"},signal:Q});if(!$.ok)throw new K("toolbox_tron_trongrid_api_error",{message:`${$.status} ${$.statusText} on ${J}`});return await $.json()}finally{Z()}}async function Pz(J){if(!B(J))throw new K("toolbox_tron_trongrid_api_error",{address:J,message:"Invalid address"});try{let z=await Kz(`/v1/accounts/${J}`,Cz);if(!(z.success&&z.data)||z.data.length===0)return;let Q;try{Q=Gz(J).toLowerCase()}catch{Q=J.toLowerCase()}let Z=z.data.find(($)=>$.address.toLowerCase()===Q);if(!Z)return;return{balance:Z.balance,trc20:Z.trc20||[]}}catch(z){if(z instanceof K)throw z;throw new K("toolbox_tron_trongrid_api_error",{address:J,message:z instanceof Error?z.message:"Unknown error"})}}async function Lz({from:J,to:z,amount:Q}){let $=await V("/wallet/createtransaction",{amount:Q,owner_address:J,to_address:z,visible:!0});if(!$.txID||!$.raw_data_hex||!$.raw_data)throw new K("toolbox_tron_transaction_creation_failed");let M=$.raw_data?.contract?.[0]?.parameter?.value;if(M?.to_address!==z||M?.owner_address!==J||M?.amount!==Q)throw new K("toolbox_tron_transaction_creation_failed");return T($),$}async function Nz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z,feeLimit:$,callValue:j=0}){let M=await V("/wallet/triggersmartcontract",{call_value:j,contract_address:z,fee_limit:$,function_selector:Q,owner_address:J,parameter:Z,visible:!0});if(!M.result.result||!M.transaction?.txID||!M.transaction?.raw_data_hex)throw new K("toolbox_tron_transaction_creation_failed");let U=M.transaction.raw_data?.contract?.[0]?.parameter?.value;if(U?.contract_address!==z||U?.owner_address!==J)throw new K("toolbox_tron_transaction_creation_failed");return T(M.transaction),M.transaction}function Bz({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z}){return V("/wallet/triggerconstantcontract",{contract_address:z,function_selector:Q,owner_address:J,parameter:Z,visible:!0})}function jJ({ownerAddress:J,contractAddress:z,functionSelector:Q,parameter:Z}){return V("/wallet/estimateenergy",{contract_address:z,function_selector:Q,owner_address:J,parameter:Z,visible:!0})}function Uz(J){let z=typeof J==="number"?J:typeof J==="string"?Number(J):Number.NaN;return Number.isFinite(z)&&z>0?z:void 0}async function f(J){try{let{result:z,txid:Q}=await V("/wallet/broadcasttransaction",{raw_data:J.raw_data,raw_data_hex:J.raw_data_hex,signature:J.signature,txID:J.txID,visible:J.visible});if(!z||!Q)throw new K("toolbox_tron_token_transfer_failed");return Q}catch(z){throw new K("toolbox_tron_broadcast_failed",{error:z})}}async function w(){let J={};try{let{chainParameter:z}=await Kz("/wallet/getchainparameters");for(let Q of z)J[Q.key]=Q.value}catch(z){E({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${z instanceof Error?z.message:z}`})}return{bandwidthFee:J.getTransactionFee??QJ,createAccountFee:J.getCreateNewAccountFeeInSystemContract??J.getCreateAccountFee??ZJ,energyFee:J.getEnergyFee??$J,memoFee:J.getMemoFee??YJ}}async function l(J){try{let z=await V("/wallet/getaccountresource",{address:J,visible:!0});return{bandwidth:{free:(z.freeNetLimit??600)-(z.freeNetUsed??0),total:z.NetLimit??0,used:z.NetUsed??0},energy:{total:z.EnergyLimit??0,used:z.EnergyUsed??0}}}catch(z){return E({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, using defaults: ${z instanceof Error?z.message:z}`}),{bandwidth:{free:600,total:0,used:0},energy:{total:0,used:0}}}}async function x(J){try{let z=await V("/wallet/getaccount",{address:J,visible:!0});return z&&Object.keys(z).length>0}catch{return!1}}async function c(J){try{let z=await jJ({...J,ownerAddress:J.sender}),Q=z.energy_required??z.energyRequired;if(z.result&&!z.result.result)throw new K("toolbox_tron_trongrid_api_error",{message:z.result.message||"estimateenergy failed"});if(Q!==void 0){let Z=Uz(Q);if(Z!==void 0)return Z;throw new K("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(z){E({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${z instanceof Error?z.message:z}`})}try{let{energy_used:z}=await Bz({...J,ownerAddress:J.sender}),Q=Uz(z);if(Q!==void 0)return Q;throw new K("toolbox_tron_trongrid_api_error",{message:"Invalid triggerconstantcontract energy response"})}catch(z){throw E({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy: ${z instanceof Error?z.message:z}`}),new K("toolbox_tron_trongrid_api_error",{message:`Unable to estimate contract energy: ${z instanceof Error?z.message:z}`})}}async function Dz({assetAddress:J,owner:z,spender:Q}){let Z=I([{type:"address",value:z},{type:"address",value:Q}]),j=(await Bz({contractAddress:J,functionSelector:"allowance(address,address)",ownerAddress:Q,parameter:Z})).constant_result?.[0];if(!j)return 0n;try{return BigInt(`0x${j}`)}catch{return 0n}}var UJ=B,Rz=268,Vz=65000,i=25000,Sz=345,n="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",CJ="115792089237316195423570985008687907853269984665640564039457584007913129639935";function fz({phrase:J,derivationPath:z}){let Q=GJ.fromMasterSeed(MJ(J)).derive(z);if(!Q.privateKey)throw new H("toolbox_tron_no_signer");return qJ(Q.privateKey)}function kJ(J,z){return{...J,value:String(z)}}function HJ(J,z){if(!z)return J;return{...J,data:z.startsWith("0x")?z:`0x${z}`}}function KJ({phrase:J,derivationPath:z,index:Q}){let Z=z||Tz(vz(Iz[N.Tron],{index:Q||0}));return fz({derivationPath:Z,phrase:J})}function PJ({phrase:J,derivationPath:z}){let Q=fz({derivationPath:z,phrase:J}),Z=Mz(Q);return{getAddress:()=>Promise.resolve(Z),signTransaction:($)=>{T($);let j=Wz({privateKey:Q,txID:$.txID});return Promise.resolve({...$,signature:[j]})}}}function _z({transaction:J,memo:z,expiration:Q,feeLimit:Z}){let $={},j={};if(Z!==void 0&&J.raw_data)$.fee_limit=Z,j.fee_limit=Z;if(z){let U=z.startsWith("0x")?z.replace(/^0x/,""):Oz(z);$.data=U,j.data=U}if(Q){let U=J.raw_data.expiration+Q*1000;$.expiration=U,j.expiration=U}if(Object.keys($).length===0)return J;let{raw_data_hex:M,txID:k}=$z(J.raw_data_hex,$);return{...J,raw_data:{...J.raw_data,...j},raw_data_hex:M,txID:k}}function LJ(J={}){let z="index"in J?J.index||0:0,Q=Tz("derivationPath"in J&&J.derivationPath?J.derivationPath:vz(Iz[N.Tron],{index:z})),Z,$=!1;function j(){if($)return Promise.resolve(Z);return Z=OJ(J).with({phrase:o.string},({phrase:Y})=>PJ({derivationPath:Q,phrase:Y})).with({signer:o.not(o.nullish)},({signer:Y})=>Y).otherwise(()=>{return}),$=!0,Promise.resolve(Z)}async function M(){let Y=await j();if(!Y)throw new H("toolbox_tron_no_signer");return Y.getAddress()}async function k(Y,X){let G=Y||Vz,q=X??(await w()).energyFee,O=G*q,W=Math.ceil(O*1.5);return Math.min(Math.max(W,1e7),150000000)}async function U({contractAddress:Y,functionSelector:X,parameter:G,sender:q,memo:O,expiration:W,extraEnergy:P=0}){let C=await c({contractAddress:Y,functionSelector:X,parameter:G,sender:q}),L=await k(C+P),R=await Nz({contractAddress:Y,feeLimit:L,functionSelector:X,ownerAddress:q,parameter:G});return _z({expiration:W,feeLimit:L,memo:O,transaction:R})}async function F(Y){if(!B(Y))return[D.from({chain:N.Tron})];try{let X=await Pz(Y);if(!X)return[D.from({chain:N.Tron})];let G=[D.from({chain:N.Tron,fromBaseDecimal:6,value:String(X.balance)})],q=X.trc20?.find((O)=>(n in O));if(q){let O=q[n];G.push(D.from({asset:`TRON.USDT-${n}`,fromBaseDecimal:6,value:O}))}return G}catch(X){return Fz({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${X instanceof Error?X.message:X}`}),[D.from({chain:N.Tron})]}}async function u({recipient:Y,assetValue:X,memo:G,expiration:q}){if(!B(Y))throw new H("toolbox_tron_token_transfer_failed",{message:"invalid address"});let O=await j();if(!O)throw new H("toolbox_tron_no_signer");try{let W=await M(),P=await t({assetValue:X,expiration:q,memo:G,recipient:Y,sender:W}),C=await O.signTransaction(P),L=await f(C);if(!L)throw new H("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return L}catch(W){throw new H("toolbox_tron_token_transfer_failed",{message:W instanceof Error?W.message:String(W)})}}function d({requiredBandwidth:Y,resources:X,feePerUnit:G}){let q=Math.max(0,X.free+X.total-X.used);return Y>q?(Y-q)*G:0}async function wz({memo:Y,recipient:X,senderAddress:G}){let[q,O,W]=await Promise.all([w(),x(X),l(G)]),P=O?0:q.createAccountFee,C=d({feePerUnit:q.bandwidthFee,requiredBandwidth:Rz,resources:W.bandwidth}),L=Y?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:P+C+L})}async function xz({assetValue:Y,memo:X,recipient:G,senderAddress:q}){let O=Y.address;if(!O)throw new H("toolbox_tron_invalid_token_identifier",{identifier:Y.toString()});let[W,P,C,L]=await Promise.all([w(),x(G),l(q),c({contractAddress:O,functionSelector:"transfer(address,uint256)",parameter:I([{type:"address",value:G},{type:"uint256",value:Y.getBaseValue("string")}]),sender:q})]),r=L+(P?0:i),Ez=d({feePerUnit:W.bandwidthFee,requiredBandwidth:Sz,resources:C.bandwidth}),e=Math.max(0,C.energy.total-C.energy.used),mz=r>e?(r-e)*W.energyFee:0,uz=X?W.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:Ez+mz+uz})}async function bz({assetValue:Y,memo:X,recipient:G}){let[q,O]=await Promise.all([w(),x(G)]);if(Y.isGasAsset){let L=O?0:q.createAccountFee,R=X?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:L+Rz*q.bandwidthFee+R})}let P=await k(Vz+(O?0:i),q.energyFee),C=X?q.memoFee:0;return D.from({chain:N.Tron,fromBaseDecimal:m.TRON,value:P+Sz*q.bandwidthFee+C})}async function gz({assetValue:Y,memo:X,recipient:G,sender:q}){let O=await j();try{let W=q?q:O?await M():void 0;if(!W)return bz({assetValue:Y,memo:X,recipient:G});return Y.isGasAsset?wz({memo:X,recipient:G,senderAddress:W}):xz({assetValue:Y,memo:X,recipient:G,senderAddress:W})}catch(W){throw Fz({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${W instanceof Error?W.message:W}`}),new H("toolbox_fee_estimation_failed",{chain:N.Tron,error:W})}}async function t({recipient:Y,assetValue:X,memo:G,sender:q,expiration:O}){if(!B(Y)||!B(q))throw new H("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(X.isGasAsset){let C=await Lz({amount:X.getBaseValue("number"),from:q,to:Y});return _z({expiration:O,memo:G,transaction:C})}let W=X.address;if(!W)throw new H("toolbox_tron_invalid_token_identifier",{identifier:X.toString()});let P=await x(Y);return U({contractAddress:W,expiration:O,extraEnergy:P?0:i,functionSelector:"transfer(address,uint256)",memo:G,parameter:I([{type:"address",value:Y},{type:"uint256",value:X.getBaseValue("string")}]),sender:q})}async function a(Y){T(Y);let X=await j();if(!X)throw new H("toolbox_tron_no_signer");return X.signTransaction(Y)}async function Az(Y){let X=await a(Y);return f(X)}function s({assetAddress:Y,spenderAddress:X,from:G}){return Dz({assetAddress:Y,owner:G,spender:X})}async function yz({assetAddress:Y,spenderAddress:X,from:G,amount:q}){let O=await s({assetAddress:Y,from:G,spenderAddress:X});if(!q)return O>0n;return O>=BigInt(q)}async function hz({assetAddress:Y,spenderAddress:X,amount:G,from:q}){if(!B(Y)||!B(X))throw new H("toolbox_tron_approve_failed");let O=await j();if(!O)throw new H("toolbox_tron_no_signer");let W=q||await M(),P=G!==void 0?BigInt(G).toString():CJ;try{let C=await U({contractAddress:Y,functionSelector:"approve(address,uint256)",parameter:I([{type:"address",value:X},{type:"uint256",value:P}]),sender:W}),L=await O.signTransaction(C),R=await f(L);if(!R)throw new H("toolbox_tron_approve_failed");return R}catch(C){if(C instanceof H)throw C;throw new H("toolbox_tron_approve_failed",{error:C})}}return{approve:hz,broadcastTransaction:f,createTransaction:t,estimateTransactionFee:gz,getAddress:M,getApprovedAmount:s,getBalance:F,getRpcUrl:()=>WJ(N.Tron),isApproved:yz,signAndBroadcastTransaction:Az,signTransaction:a,transfer:u,validateAddress:B}}export{kJ as withTronTransactionValue,HJ as withTronTransactionData,UJ as validateTronAddress,LJ as getTronToolbox,KJ as getTronPrivateKeyFromMnemonic};
|