@swapkit/toolboxes 6.4.0 → 6.5.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 +23 -0
- package/dist/chunk-2q4pxsyg.js +2 -0
- package/dist/chunk-bmj5dnhd.js +1 -0
- package/dist/{chunk-exyqap7m.js → chunk-pz8xe0qj.js} +1 -1
- package/dist/{chunk-xdkdc1f0.js → chunk-qk8kg62t.js} +1 -1
- package/dist/src/aleo/index.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.js +1 -1
- package/dist/src/hypercore/index.js +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/lightspark/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 +2 -1
- package/dist/types/evm/helpers.d.ts +4 -0
- package/dist/types/evm/toolbox/baseEVMToolbox.d.ts +1 -1
- package/dist/types/evm/toolbox/evm.d.ts +24 -24
- package/dist/types/evm/toolbox/op.d.ts +2 -2
- package/dist/types/evm/types.d.ts +2 -2
- package/dist/types/hypercore/payin.d.ts +0 -1
- package/dist/types/sui/__tests__/grpcClientMock.d.ts +37 -0
- package/dist/types/utxo/__tests__/fixtures/utxo.d.ts +1 -0
- package/dist/types/utxo/helpers/index.d.ts +1 -0
- package/dist/types/utxo/helpers/messageSigning.d.ts +7 -0
- package/dist/types/utxo/toolbox/bitcoinCash.d.ts +1 -0
- package/dist/types/utxo/toolbox/utxo.d.ts +1 -0
- package/dist/types/utxo/toolbox/zcash.d.ts +1 -0
- package/package.json +2 -4
- package/dist/chunk-ncc6qmj6.js +0 -1
- package/dist/chunk-ygq25ce3.js +0 -2
package/dist/src/near/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ia as wt}from"../../chunk-xdkdc1f0.js";import{ja as l}from"../../chunk-exyqap7m.js";import{Chain as Rt,derivationPathToString as Kt,SwapKitError as rt}from"@swapkit/helpers";function R(e){return e.length>=2&&e.length<=64&&/^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/.test(e)}async function M(e){if(e.derivationPath&&(e.derivationPath[3]||e.derivationPath[4]))throw new rt("toolbox_derivation_slot_unsupported",{chain:Rt.Near,derivationPath:e.derivationPath});let{KeyPair:s}=await import("@near-js/crypto"),c=e.derivationPath?Kt(e.derivationPath.slice(0,3)):`m/44'/397'/${e.index??0}'`,{parseSeedPhrase:g}=await import("near-seed-phrase"),{secretKey:_}=g(e.phrase,c),y=s.fromString(_);return at(y)}async function et(e){let{KeyPair:s}=await import("@near-js/crypto"),c=s.fromString(e);return at(c)}async function at(e){let{KeyPairSigner:s}=await import("@near-js/signers");class c extends s{#t;constructor(g){super(g);this.#t=g}getAddress(){let g=this.#t.getPublicKey(),_=Buffer.from(g.data).toString("hex");return Promise.resolve(_)}}return new c(e)}async function j(e,s){let g=(await e.query({account_id:s,finality:"final",request_type:"view_access_key_list"})).keys.find((K)=>K.access_key.permission==="FullAccess");if(!g)throw new rt("toolbox_near_no_public_key_found");let{PublicKey:_}=await import("@near-js/crypto"),y=_.fromString(g.public_key);return{nonce:g.access_key.nonce||0,publicKey:y}}var p={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 ot(e){return"recipient"in e&&"amount"in e&&!("contractId"in e)}function it(e){return"contractId"in e&&"methodName"in e}function st(e){return"actions"in e}function ct(e){return"newAccountId"in e}function gt(e){return"contractCode"in e}function mt(e){return"customEstimator"in e}function ut(e){let s=0;for(let c of e)switch(c.enum){case"transfer":s+=Number(p.SIMPLE_TRANSFER);break;case"functionCall":s+=Number(p.CONTRACT_CALL);break;case"createAccount":s+=Number(p.ACCOUNT_CREATION);break;case"deployContract":s+=Number(p.CONTRACT_DEPLOYMENT);break;case"addKey":s+=Number(p.ACCESS_KEY_ADDITION);break;case"deleteKey":s+=Number(p.ACCESS_KEY_DELETION);break;case"stake":s+=Number(p.STAKE);break;default:s+=Number(p.CONTRACT_CALL)}return s.toString()}function dt(e){if(e==="ft_transfer"||e==="ft_transfer_call")return p.TOKEN_TRANSFER;if(e==="storage_deposit")return p.STORAGE_DEPOSIT;return p.CONTRACT_CALL}function jt(e){return(BigInt(e)*BigInt(1000000000000)).toString()}function Ut(e){return(BigInt(e)/BigInt(1000000000000)).toString()}async function lt({account:e,contractId:s,viewMethods:c,changeMethods:g}){let{Contract:_}=await import("@near-js/accounts");return new _(e,s,{changeMethods:g,useLocalViewExecution:!0,viewMethods:c})}import{AssetValue as ft,Chain as x,getRPCUrl as kt,SwapKitError as u}from"@swapkit/helpers";import{match as pt,P as _t}from"ts-pattern";var Pt=1250000000000000000000n,yt=150000000000000n,Gt=150000000000000n,Ft=250000000000000n,Dt=250000000000000n,Ot=500n,U=10000n;function Qt(e){let s;async function c(){if(s)return s;return s=await pt(e).with({phrase:_t.string},async(t)=>await M(t)).with({signer:_t.any},({signer:t})=>t).otherwise(()=>{return}),s}async function g(){let{JsonRpcProvider:t}=await import("@near-js/providers"),n=await kt(x.Near);return new t({url:n})}async function _(t){let{Account:n}=await import("@near-js/accounts"),r=await g(),a=await c(),o=t||await y();return new n(o,r,a)}async function y(){let t=await c();if(!t)throw new u("toolbox_near_no_signer");return await t.getAddress()}async function V(t,n){return(n||await g()).callFunction(t.contractId,"storage_balance_of",{account_id:t.accountId},{finality:"final"})}async function K(t,n){try{let r=await n.callFunction(t,"storage_balance_bounds",{},{finality:"final"});return r?.min?BigInt(r.min):Pt}catch{return Pt}}function k(t){return(t*(U+Ot)+U-1n)/U}function J(t,n){return BigInt(t)*BigInt(n.runtime_config.storage_amount_per_byte)}function z(t,n){if(t<=0n)throw new u({errorKey:"toolbox_sweep_amount_too_low",info:n});return t}async function G(t){return await(t||await g()).experimental_protocolConfig({finality:"final"})}async function Tt(t,n,r){let o=await(r||await g()).callFunction(t,"ft_balance_of",{account_id:n},{finality:"final"});return BigInt(o||"0")}async function ht(t){if(!await c())throw new u("toolbox_near_no_signer");let{assetValue:r,recipient:a,memo:o,sweep:i}=t,m=await y(),d=await Y({assetValue:r,memo:o,recipient:a,sender:m,sweep:i});return X(d)}async function St({assetValue:t,attachedDeposit:n,memo:r,provider:a,recipient:o,sender:i,sweep:m}){let d=t.address;if(!d)throw new u("toolbox_near_missing_contract_address");let f=await V({accountId:o,contractId:d},a),P=f?0n:await K(d,a),w=f?Ft:Gt,T=BigInt(n||"1"),N=t.getBaseValue("bigint");if(m){let[S,A,b,I]=await Promise.all([Tt(d,i,a),a.viewAccount(i,{finality:"final"}),G(a),O(a)]);N=z(S,{asset:t.toString(),balance:S.toString()});let E=J(A.storage_usage,b),C=A.amount-E,B=P,nt=(w+(f?0n:yt))*k(I)+B+T;if(C<nt)throw new u("toolbox_sweep_amount_too_low",{asset:t.toString(),availableNear:C.toString(),reason:"Insufficient NEAR to cover token transfer gas and storage deposit",requiredNear:nt.toString()})}let h=[];if(!f)h.push(await v({args:{account_id:o},attachedDeposit:P.toString(),gas:yt.toString(),methodName:"storage_deposit"}));return h.push(await v({args:{amount:N.toString(),memo:r||null,receiver_id:o},attachedDeposit:T.toString(),gas:w.toString(),methodName:"ft_transfer"})),W({actions:h,receiverId:d,sender:i})}async function Nt({assetValue:t,attachedDeposit:n,memo:r,provider:a,recipient:o,sender:i,sweep:m}){let d=t.getBaseValue("bigint");if(m){let[b,I]=await Promise.all([a.viewAccount(i,{finality:"final"}),G(a)]),E=await Z({assetValue:t,memo:r,recipient:o,sweep:m},I),C=J(b.storage_usage,I),B=0n;if(r&&n){let tt=await O(a);B=Dt*k(tt)+BigInt(n)}d=z(b.amount-E.getBaseValue("bigint")-C-B,{asset:t.toString(),balance:b.amount.toString(),fee:E.getBaseValue("bigint").toString(),storageStakeReserve:C.toString()})}let[{publicKey:f,nonce:P},w,{actionCreators:T,createTransaction:N},{baseDecode:h}]=await Promise.all([j(a,i),a.block({finality:"final"}),import("@near-js/transactions"),import("@near-js/utils")]),S=[T.transfer(d)];if(r&&n)S.push(T.functionCall("memo",{memo:r},BigInt("250000000000000"),BigInt(n)));let A=h(w.header.hash);return N(i,f,o,P+1,S,A)}async function Y({recipient:t,assetValue:n,memo:r,attachedDeposit:a,sender:o,functionCall:i,sweep:m}){if(!R(t))throw new u("toolbox_near_invalid_address",{recipient:t});if(!R(o))throw new u("toolbox_near_invalid_address",{sender:o});if(i)return H({...i,sender:o});if(m&&!await c())throw new u("toolbox_near_no_signer");let d=await g(),f={assetValue:n,attachedDeposit:a,memo:r,provider:d,recipient:t,sender:o,sweep:m};return n.isGasAsset?Nt(f):St(f)}function At(t){let n=t.encode();return Buffer.from(n).toString("base64")}async function H({args:t,attachedDeposit:n,contractId:r,gas:a,methodName:o,sender:i}){let m=await v({args:t,attachedDeposit:n,gas:a,methodName:o});return W({actions:[m],receiverId:r,sender:i})}async function W({actions:t,receiverId:n,sender:r}){let a=await g(),[{publicKey:o,nonce:i},m,{createTransaction:d},{baseDecode:f}]=await Promise.all([j(a,r),a.block({finality:"final"}),import("@near-js/transactions"),import("@near-js/utils")]),P=f(m.header.hash);return d(r,o,n,i+1,t,P)}async function v(t){let{actionCreators:n}=await import("@near-js/transactions");return n.functionCall(t.methodName,Buffer.from(JSON.stringify(t.args)),BigInt(t.gas),BigInt(t.attachedDeposit))}async function q(t){let n=await c();if(!n)throw new u("toolbox_near_no_signer");await bt(t);let[r,a]=await n.signTransaction(t);return a}async function bt(t){let n=t.publicKey;if(n.toString?.().startsWith("ed25519:")||n.toString?.().startsWith("secp256k1:"))return;let{KeyType:r,PublicKey:a}=await import("@near-js/crypto"),o=n.data||n.ed25519Key?.data,i=n.secp256k1Key?.data;if(o){t.publicKey=new a({data:Uint8Array.from(o),keyType:r.ED25519});return}if(i)t.publicKey=new a({data:Uint8Array.from(i),keyType:r.SECP256K1})}function F(t){if(typeof t==="string")return t;if(Array.isArray(t))return t.map(F).find(Boolean);if(!(t&&typeof t==="object"))return;let n=t;return n.transaction?.hash||n.transaction_outcome?.id}function D(t){return t instanceof Error?t.message:String(t)}async function Q(t){let r=await(await g()).sendTransaction(t),a=F(r);if(!a)throw new u("toolbox_near_transfer_failed",{result:r});return a}async function X(t){let n=await c();if(!n)throw new u("toolbox_near_no_signer");let r;try{r=await q(t)}catch(a){let o;try{o=n.signAndSendTransaction?await n.signAndSendTransaction({actions:t.actions,receiverId:t.receiverId,signerId:t.signerId}):await n.signAndSendTransactions?.({transactions:[t]})}catch(m){throw new u({errorKey:"toolbox_near_sign_transaction_failed",info:{directSignError:D(a),signAndSendError:D(m)}},m)}let i=F(o);if(i)return i;throw a}return Q(r)}async function Z(t,n){let r=await c();if("assetValue"in t){if(t.sweep&&!r)throw new u("toolbox_near_no_signer");try{let[o,i]=await Promise.all([O(),n?Promise.resolve(n):G()]),{runtime_config:m}=i,{execution:d,send_sir:f}=m.transaction_costs.action_receipt_creation_config,{execution:P,send_sir:w}=m.transaction_costs.action_creation_config.transfer_cost,T=BigInt(w)+BigInt(P),N=BigInt(f)+BigInt(d),h=T+N,S=t.sweep?k(o):o,A=h*S;return ft.from({chain:x.Near,value:A})}catch(o){throw new u({errorKey:"toolbox_fee_estimation_failed",info:{chain:x.Near,message:D(o)}},o)}}let a=r?await _():void 0;return L(t,a)}async function O(t){let r=await(t||await g()).gasPrice(null);return BigInt(r.gas_price)}async function Ct(t,n,r){if(!await c())throw new u("toolbox_near_no_signer");let o=await _(),{formatNearAmount:i}=await import("@near-js/utils"),{PublicKey:m}=await import("@near-js/crypto"),d=i(r)||"0";return(await o.createAccount(t,m.fromString(n),BigInt(d))).transaction.hash}async function xt(t){let n=await c();try{if(!n)throw new u("toolbox_near_no_signer");let{actionCreators:r}=await import("@near-js/transactions"),{contractId:a,methodName:o,args:i,deposit:m}=t,d=await _(),f=await L({args:i||{},contractId:a,methodName:o}),P=r.functionCall(o,i||{},f.getBaseValue("bigint"),BigInt(m||"1"));return(await d.signAndSendTransaction({actions:[P],receiverId:a})).transaction_outcome.id}catch(r){throw new u("toolbox_near_transfer_failed",{error:r})}}async function vt(t){let n=await _();return lt({account:n,changeMethods:t.changeMethods,contractId:t.contractId,viewMethods:t.viewMethods})}async function It(t){if(!await c())throw new u("toolbox_near_no_signer");if(t.actions.length===0)throw new u("toolbox_near_empty_batch");return(await(await _()).signAndSendTransaction({actions:t.actions,receiverId:t.receiverId})).transaction.hash}async function L(t,n){let r=await pt(t).when(ot,()=>p.SIMPLE_TRANSFER).when(it,(o)=>dt(o.methodName)).when(st,(o)=>ut(o.actions)).when(ct,()=>p.ACCOUNT_CREATION).when(gt,()=>p.CONTRACT_DEPLOYMENT).when(mt,(o)=>{if(!n)throw new u("toolbox_near_no_account");return o.customEstimator(n)}).otherwise(()=>{throw new u("toolbox_near_invalid_gas_params")}),a=BigInt(r)*BigInt(1000000000000);return ft.from({chain:x.Near,value:a})}async function Et(){let t=await g();try{return(await t.gasPrice(null)).gas_price||"100000000"}catch{return"100000000"}}async function Bt(){let t=await c();return t?(await t.getPublicKey()).toString():""}return{broadcastTransaction:Q,callFunction:xt,createAction:v,createContract:vt,createContractFunctionCall:H,createSubAccount:Ct,createTransaction:Y,estimateGasLimit:L,estimateTransactionFee:Z,executeBatchTransaction:It,getAddress:y,getBalance:wt(x.Near),getGasPrice:Et,getNearProvider:g,getPublicKey:Bt,getSignerFromPhrase:M,getSignerFromPrivateKey:et,serializeTransaction:At,signAndBroadcastTransaction:X,signTransaction:q,transfer:ht,validateAddress:R}}export{p as GAS_COSTS,lt as createNearContract,ut as estimateBatchGas,Ut as gasToTGas,dt as getContractMethodGas,j as getFullAccessPublicKey,M as getNearSignerFromPhrase,et as getNearSignerFromPrivateKey,Qt as getNearToolbox,ct as isAccountCreation,st as isBatchTransaction,it as isContractCall,gt as isContractDeployment,mt as isCustomEstimator,ot as isSimpleTransfer,jt as tgasToGas,R as validateNearAddress};
|
|
1
|
+
import{ja as wt}from"../../chunk-qk8kg62t.js";import{ka as l}from"../../chunk-pz8xe0qj.js";import{Chain as Rt,derivationPathToString as Kt,SwapKitError as rt}from"@swapkit/helpers";function R(e){return e.length>=2&&e.length<=64&&/^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/.test(e)}async function M(e){if(e.derivationPath&&(e.derivationPath[3]||e.derivationPath[4]))throw new rt("toolbox_derivation_slot_unsupported",{chain:Rt.Near,derivationPath:e.derivationPath});let{KeyPair:s}=await import("@near-js/crypto"),c=e.derivationPath?Kt(e.derivationPath.slice(0,3)):`m/44'/397'/${e.index??0}'`,{parseSeedPhrase:g}=await import("near-seed-phrase"),{secretKey:_}=g(e.phrase,c),y=s.fromString(_);return at(y)}async function et(e){let{KeyPair:s}=await import("@near-js/crypto"),c=s.fromString(e);return at(c)}async function at(e){let{KeyPairSigner:s}=await import("@near-js/signers");class c extends s{#t;constructor(g){super(g);this.#t=g}getAddress(){let g=this.#t.getPublicKey(),_=Buffer.from(g.data).toString("hex");return Promise.resolve(_)}}return new c(e)}async function j(e,s){let g=(await e.query({account_id:s,finality:"final",request_type:"view_access_key_list"})).keys.find((K)=>K.access_key.permission==="FullAccess");if(!g)throw new rt("toolbox_near_no_public_key_found");let{PublicKey:_}=await import("@near-js/crypto"),y=_.fromString(g.public_key);return{nonce:g.access_key.nonce||0,publicKey:y}}var p={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 ot(e){return"recipient"in e&&"amount"in e&&!("contractId"in e)}function it(e){return"contractId"in e&&"methodName"in e}function st(e){return"actions"in e}function ct(e){return"newAccountId"in e}function gt(e){return"contractCode"in e}function mt(e){return"customEstimator"in e}function ut(e){let s=0;for(let c of e)switch(c.enum){case"transfer":s+=Number(p.SIMPLE_TRANSFER);break;case"functionCall":s+=Number(p.CONTRACT_CALL);break;case"createAccount":s+=Number(p.ACCOUNT_CREATION);break;case"deployContract":s+=Number(p.CONTRACT_DEPLOYMENT);break;case"addKey":s+=Number(p.ACCESS_KEY_ADDITION);break;case"deleteKey":s+=Number(p.ACCESS_KEY_DELETION);break;case"stake":s+=Number(p.STAKE);break;default:s+=Number(p.CONTRACT_CALL)}return s.toString()}function dt(e){if(e==="ft_transfer"||e==="ft_transfer_call")return p.TOKEN_TRANSFER;if(e==="storage_deposit")return p.STORAGE_DEPOSIT;return p.CONTRACT_CALL}function jt(e){return(BigInt(e)*BigInt(1000000000000)).toString()}function Ut(e){return(BigInt(e)/BigInt(1000000000000)).toString()}async function lt({account:e,contractId:s,viewMethods:c,changeMethods:g}){let{Contract:_}=await import("@near-js/accounts");return new _(e,s,{changeMethods:g,useLocalViewExecution:!0,viewMethods:c})}import{AssetValue as ft,Chain as x,getRPCUrl as kt,SwapKitError as u}from"@swapkit/helpers";import{match as pt,P as _t}from"ts-pattern";var Pt=1250000000000000000000n,yt=150000000000000n,Gt=150000000000000n,Ft=250000000000000n,Dt=250000000000000n,Ot=500n,U=10000n;function Qt(e){let s;async function c(){if(s)return s;return s=await pt(e).with({phrase:_t.string},async(t)=>await M(t)).with({signer:_t.any},({signer:t})=>t).otherwise(()=>{return}),s}async function g(){let{JsonRpcProvider:t}=await import("@near-js/providers"),n=await kt(x.Near);return new t({url:n})}async function _(t){let{Account:n}=await import("@near-js/accounts"),r=await g(),a=await c(),o=t||await y();return new n(o,r,a)}async function y(){let t=await c();if(!t)throw new u("toolbox_near_no_signer");return await t.getAddress()}async function V(t,n){return(n||await g()).callFunction(t.contractId,"storage_balance_of",{account_id:t.accountId},{finality:"final"})}async function K(t,n){try{let r=await n.callFunction(t,"storage_balance_bounds",{},{finality:"final"});return r?.min?BigInt(r.min):Pt}catch{return Pt}}function k(t){return(t*(U+Ot)+U-1n)/U}function J(t,n){return BigInt(t)*BigInt(n.runtime_config.storage_amount_per_byte)}function z(t,n){if(t<=0n)throw new u({errorKey:"toolbox_sweep_amount_too_low",info:n});return t}async function G(t){return await(t||await g()).experimental_protocolConfig({finality:"final"})}async function Tt(t,n,r){let o=await(r||await g()).callFunction(t,"ft_balance_of",{account_id:n},{finality:"final"});return BigInt(o||"0")}async function ht(t){if(!await c())throw new u("toolbox_near_no_signer");let{assetValue:r,recipient:a,memo:o,sweep:i}=t,m=await y(),d=await Y({assetValue:r,memo:o,recipient:a,sender:m,sweep:i});return X(d)}async function St({assetValue:t,attachedDeposit:n,memo:r,provider:a,recipient:o,sender:i,sweep:m}){let d=t.address;if(!d)throw new u("toolbox_near_missing_contract_address");let f=await V({accountId:o,contractId:d},a),P=f?0n:await K(d,a),w=f?Ft:Gt,T=BigInt(n||"1"),N=t.getBaseValue("bigint");if(m){let[S,A,b,I]=await Promise.all([Tt(d,i,a),a.viewAccount(i,{finality:"final"}),G(a),O(a)]);N=z(S,{asset:t.toString(),balance:S.toString()});let E=J(A.storage_usage,b),C=A.amount-E,B=P,nt=(w+(f?0n:yt))*k(I)+B+T;if(C<nt)throw new u("toolbox_sweep_amount_too_low",{asset:t.toString(),availableNear:C.toString(),reason:"Insufficient NEAR to cover token transfer gas and storage deposit",requiredNear:nt.toString()})}let h=[];if(!f)h.push(await v({args:{account_id:o},attachedDeposit:P.toString(),gas:yt.toString(),methodName:"storage_deposit"}));return h.push(await v({args:{amount:N.toString(),memo:r||null,receiver_id:o},attachedDeposit:T.toString(),gas:w.toString(),methodName:"ft_transfer"})),W({actions:h,receiverId:d,sender:i})}async function Nt({assetValue:t,attachedDeposit:n,memo:r,provider:a,recipient:o,sender:i,sweep:m}){let d=t.getBaseValue("bigint");if(m){let[b,I]=await Promise.all([a.viewAccount(i,{finality:"final"}),G(a)]),E=await Z({assetValue:t,memo:r,recipient:o,sweep:m},I),C=J(b.storage_usage,I),B=0n;if(r&&n){let tt=await O(a);B=Dt*k(tt)+BigInt(n)}d=z(b.amount-E.getBaseValue("bigint")-C-B,{asset:t.toString(),balance:b.amount.toString(),fee:E.getBaseValue("bigint").toString(),storageStakeReserve:C.toString()})}let[{publicKey:f,nonce:P},w,{actionCreators:T,createTransaction:N},{baseDecode:h}]=await Promise.all([j(a,i),a.block({finality:"final"}),import("@near-js/transactions"),import("@near-js/utils")]),S=[T.transfer(d)];if(r&&n)S.push(T.functionCall("memo",{memo:r},BigInt("250000000000000"),BigInt(n)));let A=h(w.header.hash);return N(i,f,o,P+1,S,A)}async function Y({recipient:t,assetValue:n,memo:r,attachedDeposit:a,sender:o,functionCall:i,sweep:m}){if(!R(t))throw new u("toolbox_near_invalid_address",{recipient:t});if(!R(o))throw new u("toolbox_near_invalid_address",{sender:o});if(i)return H({...i,sender:o});if(m&&!await c())throw new u("toolbox_near_no_signer");let d=await g(),f={assetValue:n,attachedDeposit:a,memo:r,provider:d,recipient:t,sender:o,sweep:m};return n.isGasAsset?Nt(f):St(f)}function At(t){let n=t.encode();return Buffer.from(n).toString("base64")}async function H({args:t,attachedDeposit:n,contractId:r,gas:a,methodName:o,sender:i}){let m=await v({args:t,attachedDeposit:n,gas:a,methodName:o});return W({actions:[m],receiverId:r,sender:i})}async function W({actions:t,receiverId:n,sender:r}){let a=await g(),[{publicKey:o,nonce:i},m,{createTransaction:d},{baseDecode:f}]=await Promise.all([j(a,r),a.block({finality:"final"}),import("@near-js/transactions"),import("@near-js/utils")]),P=f(m.header.hash);return d(r,o,n,i+1,t,P)}async function v(t){let{actionCreators:n}=await import("@near-js/transactions");return n.functionCall(t.methodName,Buffer.from(JSON.stringify(t.args)),BigInt(t.gas),BigInt(t.attachedDeposit))}async function q(t){let n=await c();if(!n)throw new u("toolbox_near_no_signer");await bt(t);let[r,a]=await n.signTransaction(t);return a}async function bt(t){let n=t.publicKey;if(n.toString?.().startsWith("ed25519:")||n.toString?.().startsWith("secp256k1:"))return;let{KeyType:r,PublicKey:a}=await import("@near-js/crypto"),o=n.data||n.ed25519Key?.data,i=n.secp256k1Key?.data;if(o){t.publicKey=new a({data:Uint8Array.from(o),keyType:r.ED25519});return}if(i)t.publicKey=new a({data:Uint8Array.from(i),keyType:r.SECP256K1})}function F(t){if(typeof t==="string")return t;if(Array.isArray(t))return t.map(F).find(Boolean);if(!(t&&typeof t==="object"))return;let n=t;return n.transaction?.hash||n.transaction_outcome?.id}function D(t){return t instanceof Error?t.message:String(t)}async function Q(t){let r=await(await g()).sendTransaction(t),a=F(r);if(!a)throw new u("toolbox_near_transfer_failed",{result:r});return a}async function X(t){let n=await c();if(!n)throw new u("toolbox_near_no_signer");let r;try{r=await q(t)}catch(a){let o;try{o=n.signAndSendTransaction?await n.signAndSendTransaction({actions:t.actions,receiverId:t.receiverId,signerId:t.signerId}):await n.signAndSendTransactions?.({transactions:[t]})}catch(m){throw new u({errorKey:"toolbox_near_sign_transaction_failed",info:{directSignError:D(a),signAndSendError:D(m)}},m)}let i=F(o);if(i)return i;throw a}return Q(r)}async function Z(t,n){let r=await c();if("assetValue"in t){if(t.sweep&&!r)throw new u("toolbox_near_no_signer");try{let[o,i]=await Promise.all([O(),n?Promise.resolve(n):G()]),{runtime_config:m}=i,{execution:d,send_sir:f}=m.transaction_costs.action_receipt_creation_config,{execution:P,send_sir:w}=m.transaction_costs.action_creation_config.transfer_cost,T=BigInt(w)+BigInt(P),N=BigInt(f)+BigInt(d),h=T+N,S=t.sweep?k(o):o,A=h*S;return ft.from({chain:x.Near,value:A})}catch(o){throw new u({errorKey:"toolbox_fee_estimation_failed",info:{chain:x.Near,message:D(o)}},o)}}let a=r?await _():void 0;return L(t,a)}async function O(t){let r=await(t||await g()).gasPrice(null);return BigInt(r.gas_price)}async function Ct(t,n,r){if(!await c())throw new u("toolbox_near_no_signer");let o=await _(),{formatNearAmount:i}=await import("@near-js/utils"),{PublicKey:m}=await import("@near-js/crypto"),d=i(r)||"0";return(await o.createAccount(t,m.fromString(n),BigInt(d))).transaction.hash}async function xt(t){let n=await c();try{if(!n)throw new u("toolbox_near_no_signer");let{actionCreators:r}=await import("@near-js/transactions"),{contractId:a,methodName:o,args:i,deposit:m}=t,d=await _(),f=await L({args:i||{},contractId:a,methodName:o}),P=r.functionCall(o,i||{},f.getBaseValue("bigint"),BigInt(m||"1"));return(await d.signAndSendTransaction({actions:[P],receiverId:a})).transaction_outcome.id}catch(r){throw new u("toolbox_near_transfer_failed",{error:r})}}async function vt(t){let n=await _();return lt({account:n,changeMethods:t.changeMethods,contractId:t.contractId,viewMethods:t.viewMethods})}async function It(t){if(!await c())throw new u("toolbox_near_no_signer");if(t.actions.length===0)throw new u("toolbox_near_empty_batch");return(await(await _()).signAndSendTransaction({actions:t.actions,receiverId:t.receiverId})).transaction.hash}async function L(t,n){let r=await pt(t).when(ot,()=>p.SIMPLE_TRANSFER).when(it,(o)=>dt(o.methodName)).when(st,(o)=>ut(o.actions)).when(ct,()=>p.ACCOUNT_CREATION).when(gt,()=>p.CONTRACT_DEPLOYMENT).when(mt,(o)=>{if(!n)throw new u("toolbox_near_no_account");return o.customEstimator(n)}).otherwise(()=>{throw new u("toolbox_near_invalid_gas_params")}),a=BigInt(r)*BigInt(1000000000000);return ft.from({chain:x.Near,value:a})}async function Et(){let t=await g();try{return(await t.gasPrice(null)).gas_price||"100000000"}catch{return"100000000"}}async function Bt(){let t=await c();return t?(await t.getPublicKey()).toString():""}return{broadcastTransaction:Q,callFunction:xt,createAction:v,createContract:vt,createContractFunctionCall:H,createSubAccount:Ct,createTransaction:Y,estimateGasLimit:L,estimateTransactionFee:Z,executeBatchTransaction:It,getAddress:y,getBalance:wt(x.Near),getGasPrice:Et,getNearProvider:g,getPublicKey:Bt,getSignerFromPhrase:M,getSignerFromPrivateKey:et,serializeTransaction:At,signAndBroadcastTransaction:X,signTransaction:q,transfer:ht,validateAddress:R}}export{p as GAS_COSTS,lt as createNearContract,ut as estimateBatchGas,Ut as gasToTGas,dt as getContractMethodGas,j as getFullAccessPublicKey,M as getNearSignerFromPhrase,et as getNearSignerFromPrivateKey,Qt as getNearToolbox,ct as isAccountCreation,st as isBatchTransaction,it as isContractCall,gt as isContractDeployment,mt as isCustomEstimator,ot as isSimpleTransfer,jt as tgasToGas,R as validateNearAddress};
|
package/dist/src/radix/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ka as p}from"../../chunk-pz8xe0qj.js";import{AssetValue as y,Chain as g,SKConfig as f,SwapKitError as b}from"@swapkit/helpers";function R(s){return s.startsWith("account_rdx1")&&s.length===66}async function w({address:s,networkApi:i}){let a=!0,c,o=[],e=await A(i);while(a){let r={address:s,at_ledger_state:{state_version:e},cursor:c,limit_per_page:100},n=await i.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:r});if(o=o.concat(n.items),n.next_cursor)c=n.next_cursor;else a=!1}return o}async function x({resources:s,networkApi:i}){let a=[],c=50,o=[];for(let e=0;e<s.length;e+=50)o.push(s.slice(e,e+50));for(let e of o){let r=e.map((t)=>t.resource_address),n=await i.state.getEntityDetailsVaultAggregated(r),u=new Map;for(let t of n)if(t.details!==void 0){let l=t.metadata?.items.find((m)=>m.key==="symbol"),d=l?.value.typed.type==="String"?l.value.typed.value:"?";if(t.details.type==="FungibleResource")u.set(t.address,{decimals:t.details.divisibility,symbol:d})}for(let t of e)if(t.aggregation_level==="Global"){let l=u.get(t.resource_address)||{decimals:0,symbol:"?"},d=y.from({asset:l.symbol!==g.Radix?`${g.Radix}.${l.symbol}-${t.resource_address}`:"XRD.XRD",value:t.amount});a.push(d)}}return a}async function A(s){return(await s.status.getCurrent()).ledger_state.state_version}function _({dappConfig:s}={}){let i=s||f.get("integrations").radix,a;async function c(){if(a)return a;let{GatewayApiClient:e}=await import("@radixdlt/babylon-gateway-api-sdk"),{RadixDappToolkit:r}=await import("@radixdlt/radix-dapp-toolkit"),n=r({...i,networkId:i.network?.networkId||1});return a=e.initialize(n.gatewayApi.clientConfig),a}async function o(e){let r=await c(),n=await w({address:e,networkApi:r}),u=await x({networkApi:r,resources:n});if(!u.some((l)=>l.isGasAsset))return[y.from({chain:g.Radix}),...u];return u}return{getAddress:()=>"",getBalance:o,getNetworkApi:c,signAndBroadcast:()=>{throw new b("toolbox_radix_method_not_supported",{method:"signAndBroadcast"})},validateAddress:R}}export{_ as getRadixToolbox,R as validateRadixAddress};
|
package/dist/src/ripple/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ja as U}from"../../chunk-exyqap7m.js";import{AssetValue as T,Chain as g,derivationPathToString as oe,getChainConfig as E,getRPCUrl as se,resolveDerivationPath as ae,SwapKitError as l}from"@swapkit/helpers";import{isValidClassicAddress as ce,isValidXAddress as L}from"ripple-address-codec";import{match as z,P as F}from"ts-pattern";import{SwapKitError as te}from"@swapkit/helpers";function D(e){return/^[0-9A-Fa-f]{40}$/.test(e)}function b(e){if(D(e))return e.toUpperCase();if(e.length<=3){let a=Buffer.from(e.padEnd(3,"\x00")).toString("hex");return`00${"0".repeat(22)}${a}${"0".repeat(10)}`.toUpperCase()}let r=Buffer.from(e).toString("hex").toUpperCase();if(r.length>40)throw new te({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:e,reason:"Currency exceeds maximum length (20 bytes)"}});return r.padEnd(40,"0")}function me(e){if(!D(e))return e;if(e.toUpperCase().startsWith("00")){let r=e.slice(24,30);try{let a=Buffer.from(r,"hex").toString("ascii").replace(/\0/g,"");if(/^[A-Za-z0-9?!@#$%^&*<>(){}[\]|]+$/.test(a)&&a.length>0)return a}catch{}return e.toUpperCase()}try{let r=e.replace(/0+$/,""),a=r.length%2===0?r:`${r}0`,u=Buffer.from(a,"hex").toString("utf8");if(/^[\x20-\x7E]+$/.test(u))return u}catch{}return e.toUpperCase()}function R(e){if(D(e))return e.toUpperCase();if(e.length<=3)return e;return b(e)}import{RequestClient as re,warnOnce as ie}from"@swapkit/helpers";var N=[{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 be(e,r){let a=R(e),u=N.find((p)=>R(p.currency)===a&&p.issuer===r);if(u)return u;try{let p=await re.get(`https://api.xrplmeta.org/token/${e}:${r}`);if(p)return{currency:e,decimals:15,description:p.desc,domain:p.domain,icon:p.icon,issuer:r,name:p.name,verified:p.self_assessment?.is_regulated||p.self_assessment?.is_licensed}}catch(p){ie({condition:!0,id:`xrpl_token_lookup_${e}_${r}`,warning:`Failed to fetch XRPL token info for ${e}:${r}: ${p}`})}return{currency:e,decimals:15,issuer:r,verified:!1}}function ye(e){return N.filter((r)=>r.issuer===e)}function he(e,r){let a=R(e);return N.some((u)=>R(u.currency)===a&&u.issuer===r)}var ue={ACCOUNT_NOT_FOUND:19};function q(e){if(typeof e!=="object"||e===null||!("data"in e))return!1;let{data:r}=e;return typeof r==="object"&&r!==null&&"error_code"in r&&r.error_code===ue.ACCOUNT_NOT_FOUND}var k={tecFROZEN:"tecFROZEN",tecNO_AUTH:"tecNO_AUTH",tecNO_DST:"tecNO_DST",tecNO_LINE:"tecNO_LINE",tecPATH_DRY:"tecPATH_DRY",tecUNFUNDED_OFFER:"tecUNFUNDED_OFFER"};function W(e){let r=e.match(/^XRP\.([A-Fa-f0-9]{40}|[\x20-\x7E]{1,20})-([a-zA-Z0-9]{25,34})$/);if(!r?.[1]||!r?.[2])return null;if(!S(r[2]))return null;return{currency:r[1],issuer:r[2]}}function le(e,r){return`${g.Ripple}.${e}-${r}`}async function H(e){if(e.isGasAsset){let{xrpToDrops:a}=await import("xrpl");return a(e.getValue("string"))}let r=W(e.toString());if(!r)throw new l({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:e.toString()}});return{currency:r.currency,issuer:r.issuer,value:e.getValue("string")}}function pe({fee:e,lastLedgerSequence:r,sequence:a,transaction:u}){return a!==void 0&&e!==void 0&&r!==void 0&&!L(u.Account)&&!L(u.Destination)}function X(e,r){let a,u=()=>(a??=import("xrpl").then(({Wallet:p})=>p.fromMnemonic(e,r?{derivationPath:r}:void 0)),a);return{getAddress:async()=>(await u()).address,signTransaction:async(p)=>(await u()).sign(p)}}function S(e){return ce(e)||L(e)}function Ce(e={}){let r;async function a(){if(r)return r;return r=await z(e).with({phrase:F.string},({phrase:n,derivationPath:t,index:i=0})=>X(n,oe(ae({chain:g.Ripple,derivationPath:t,index:i})))).with({signer:F.any},({signer:n})=>n).otherwise(()=>{return}),r}let u;async function p(){let n=await se(g.Ripple);if(!n)throw new l({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:g.Ripple}});let{Client:t}=await import("xrpl"),i=new t(n);return await i.connect(),i}async function w(){if(u){let n=await u.catch(()=>null);if(n?.isConnected())return n}return u=p(),u}async function G(n){let t=await n.request({command:"server_state"}),i=t.result.state.validated_ledger??t.result.state.closed_ledger;if(!i||!Number.isSafeInteger(i.reserve_base)||i.reserve_base<0||!Number.isSafeInteger(i.reserve_inc)||i.reserve_inc<0)throw new l({errorKey:"toolbox_ripple_get_balance_error",info:{reason:"XRPL reserve data is unavailable or invalid"}});return{baseReserveDrops:BigInt(i.reserve_base),ownerReserveDrops:BigInt(i.reserve_inc)}}let y=async()=>{let n=await a();if(!n)throw new l({errorKey:"toolbox_ripple_signer_not_found"});return n.getAddress()},M=async(n)=>{let t=n||await y(),{baseDecimal:i}=E(g.Ripple),s=await w();try{let[o,c]=await Promise.all([s.request({account:t,command:"account_info"}),s.request({account:t,command:"account_lines"})]),d=o.result.account_data.Balance,f=[T.from({chain:g.Ripple,fromBaseDecimal:i,value:d})];for(let m of c.result.lines){let _=le(m.currency,m.account);if(Number.parseFloat(m.balance)!==0)f.push(T.from({asset:_,asyncTokenLookup:!1,value:m.balance}))}return f}catch(o){if(q(o))return[T.from({chain:g.Ripple,value:0})];throw new l({errorKey:"toolbox_ripple_get_balance_error",info:{address:t,error:o}})}},B=async()=>{let{baseDecimal:n}=E(g.Ripple),s=(await(await w()).request({command:"fee"})).result.drops.open_ledger_fee;return T.from({chain:g.Ripple,fromBaseDecimal:n,value:s})};async function O(n){let t=n||await y(),i=await w();try{return(await i.request({account:t,command:"account_lines"})).result.lines.map((o)=>({account:o.account,authorized:o.authorized??!1,balance:o.balance,currency:o.currency,freeze:o.freeze??!1,freezePeer:o.freeze_peer??!1,limit:o.limit,limitPeer:o.limit_peer,noRipple:o.no_ripple??!1,noRipplePeer:o.no_ripple_peer??!1,peerAuthorized:o.peer_authorized??!1,qualityIn:o.quality_in??0,qualityOut:o.quality_out??0}))}catch(s){if(q(s))return[];throw new l({errorKey:"toolbox_ripple_get_trust_lines_error",info:{address:t,error:s}})}}async function Z({address:n,currency:t,issuer:i}){let s=await O(n),o=b(t);return s.some((c)=>b(c.currency)===o&&c.account===i)}async function K({currency:n,issuer:t,limit:i,sender:s}){let o=s||await y();if(!S(t))throw new l({errorKey:"core_transaction_invalid_recipient_address",info:{address:t}});let c=Number.parseFloat(i);if(Number.isNaN(c)||c<0)throw new l({errorKey:"toolbox_ripple_invalid_trust_line_limit",info:{limit:i}});let d=await w(),f={Account:o,LimitAmount:{currency:n,issuer:t,value:i},TransactionType:"TrustSet"};return d.autofill(f)}async function V(n,t){let[i,s,o]=await Promise.all([n.request({account:t,command:"account_info"}),G(n),B()]),{Balance:c,OwnerCount:d}=i.result.account_data,f=o.getBaseValue("bigint"),m=BigInt(c)-s.baseReserveDrops-BigInt(d)*s.ownerReserveDrops-f;if(m<=0n)throw new l({errorKey:"toolbox_sweep_amount_too_low",info:{asset:g.Ripple,balance:c,baseReserve:s.baseReserveDrops.toString(),fee:f.toString(),ownerCount:d,ownerReserve:s.ownerReserveDrops.toString()}});let{baseDecimal:_}=E(g.Ripple),h=T.from({chain:g.Ripple,fromBaseDecimal:_,value:m.toString()});return{amount:await H(h),fee:f.toString()}}async function j(n,t){let i=W(n.toString());if(!i)throw new l({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:n.toString()}});let s=await w(),o="0",c;while(!0){let d=await s.request({account:t,command:"account_lines",peer:i.issuer,...c!==void 0&&{marker:c}}),f=d.result.lines.find((_)=>_.account===i.issuer&&b(_.currency)===b(i.currency));if(f){o=f.balance;break}let m=d.result.marker;if(m===void 0||m===null)break;c=m}if(!Number.isFinite(Number(o))||Number(o)<=0)throw new l({errorKey:"toolbox_sweep_amount_too_low",info:{asset:n.toString(),balance:o}});return{currency:i.currency,issuer:i.issuer,value:o}}async function I({assetValue:n,recipient:t,memo:i,sender:s,sweep:o,destinationTag:c,extendBySeconds:d=150,sequence:f,fee:m,lastLedgerSequence:_}){if(!S(t))throw new l({errorKey:"core_transaction_invalid_recipient_address"});let h=s||await y();if(n.chain!==g.Ripple)throw new l({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:n.toString()}});let A=o&&n.isGasAsset?await V(await w(),h):void 0,ne=A?A.amount:o?await j(n,h):await H(n),C={Account:h,Amount:ne,Destination:t,TransactionType:"Payment",...A&&{Fee:A.fee},...c!==void 0&&{DestinationTag:c},...f!==void 0&&{Sequence:f},...m!==void 0&&{Fee:m},..._!==void 0&&{LastLedgerSequence:_}};if(i)C.Memos=[{Memo:{MemoData:Buffer.from(i).toString("hex")}}];if(pe({fee:m,lastLedgerSequence:_,sequence:f,transaction:C}))return C;let P=await(await w()).autofill(C);if(_===void 0&&P.LastLedgerSequence&&d>0)P.LastLedgerSequence+=Math.ceil(d/4);return P}async function x(n){let t=await a();if(!t)throw new l({errorKey:"toolbox_ripple_signer_not_found"});return t.signTransaction(n)}async function v(n){let i=await(await w()).submitAndWait(n),{result:s}=i;if(s.validated)return s.hash;let o=s.meta?.TransactionResult,c=z(o).with(k.tecNO_LINE,()=>"No trust line exists for this token").with(k.tecPATH_DRY,()=>"Payment path could not deliver funds").with(k.tecFROZEN,()=>"Token is frozen").otherwise(()=>{return});throw new l({errorKey:"toolbox_ripple_broadcast_error",info:{chain:g.Ripple,...c?{reason:c}:{txResult:o}}})}let Y=async(n)=>{try{let t=await x(n);return v(t.tx_blob)}catch(t){if(t instanceof l)throw t;throw new l({errorKey:"toolbox_ripple_broadcast_error",info:{chain:g.Ripple,error:t}})}};async function J({assetValue:n,memo:t,recipient:i,sweep:s}){let o=await a();if(!o)throw new l({errorKey:"toolbox_ripple_signer_not_found"});let c=await o.getAddress(),d=await I({assetValue:n,memo:t,recipient:i,sender:c,sweep:s}),f=await x(d);return v(f.tx_blob)}async function Q(n){let t=await a();if(!t)throw new l({errorKey:"toolbox_ripple_signer_not_found"});let i=await t.getAddress(),s=await K({...n,sender:i}),o=await x(s);return v(o.tx_blob)}function ee(){let n=u;if(u=null,n)n.then((t)=>{if(t?.isConnected())return t.disconnect();return}).catch((t)=>{console.warn("XRPL Cleanup failed silently:",t)})}return{broadcastTransaction:v,createSigner:X,createTransaction:I,disconnect:ee,estimateTransactionFee:B,getAddress:y,getBalance:M,getTrustLines:O,hasTrustLine:Z,setTrustLine:K,setTrustLineAndBroadcast:Q,signAndBroadcastTransaction:Y,signTransaction:x,transfer:J,validateAddress:S}}export{N as XRPL_KNOWN_TOKENS,k as XRPL_TOKEN_ERROR_CODES,b as currencyToHex,le as formatXrplTokenIdentifier,ye as getKnownTokensByIssuer,Ce as getRippleToolbox,be as getXrplTokenInfo,me as hexToCurrency,D as isHexCurrency,he as isKnownToken,R as normalizeCurrency,W as parseXrplTokenIdentifier,S as validateRippleAddress};
|
|
1
|
+
import{ka as U}from"../../chunk-pz8xe0qj.js";import{AssetValue as T,Chain as g,derivationPathToString as oe,getChainConfig as E,getRPCUrl as se,resolveDerivationPath as ae,SwapKitError as l}from"@swapkit/helpers";import{isValidClassicAddress as ce,isValidXAddress as L}from"ripple-address-codec";import{match as z,P as F}from"ts-pattern";import{SwapKitError as te}from"@swapkit/helpers";function D(e){return/^[0-9A-Fa-f]{40}$/.test(e)}function b(e){if(D(e))return e.toUpperCase();if(e.length<=3){let a=Buffer.from(e.padEnd(3,"\x00")).toString("hex");return`00${"0".repeat(22)}${a}${"0".repeat(10)}`.toUpperCase()}let r=Buffer.from(e).toString("hex").toUpperCase();if(r.length>40)throw new te({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:e,reason:"Currency exceeds maximum length (20 bytes)"}});return r.padEnd(40,"0")}function me(e){if(!D(e))return e;if(e.toUpperCase().startsWith("00")){let r=e.slice(24,30);try{let a=Buffer.from(r,"hex").toString("ascii").replace(/\0/g,"");if(/^[A-Za-z0-9?!@#$%^&*<>(){}[\]|]+$/.test(a)&&a.length>0)return a}catch{}return e.toUpperCase()}try{let r=e.replace(/0+$/,""),a=r.length%2===0?r:`${r}0`,u=Buffer.from(a,"hex").toString("utf8");if(/^[\x20-\x7E]+$/.test(u))return u}catch{}return e.toUpperCase()}function R(e){if(D(e))return e.toUpperCase();if(e.length<=3)return e;return b(e)}import{RequestClient as re,warnOnce as ie}from"@swapkit/helpers";var N=[{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 be(e,r){let a=R(e),u=N.find((p)=>R(p.currency)===a&&p.issuer===r);if(u)return u;try{let p=await re.get(`https://api.xrplmeta.org/token/${e}:${r}`);if(p)return{currency:e,decimals:15,description:p.desc,domain:p.domain,icon:p.icon,issuer:r,name:p.name,verified:p.self_assessment?.is_regulated||p.self_assessment?.is_licensed}}catch(p){ie({condition:!0,id:`xrpl_token_lookup_${e}_${r}`,warning:`Failed to fetch XRPL token info for ${e}:${r}: ${p}`})}return{currency:e,decimals:15,issuer:r,verified:!1}}function ye(e){return N.filter((r)=>r.issuer===e)}function he(e,r){let a=R(e);return N.some((u)=>R(u.currency)===a&&u.issuer===r)}var ue={ACCOUNT_NOT_FOUND:19};function q(e){if(typeof e!=="object"||e===null||!("data"in e))return!1;let{data:r}=e;return typeof r==="object"&&r!==null&&"error_code"in r&&r.error_code===ue.ACCOUNT_NOT_FOUND}var k={tecFROZEN:"tecFROZEN",tecNO_AUTH:"tecNO_AUTH",tecNO_DST:"tecNO_DST",tecNO_LINE:"tecNO_LINE",tecPATH_DRY:"tecPATH_DRY",tecUNFUNDED_OFFER:"tecUNFUNDED_OFFER"};function W(e){let r=e.match(/^XRP\.([A-Fa-f0-9]{40}|[\x20-\x7E]{1,20})-([a-zA-Z0-9]{25,34})$/);if(!r?.[1]||!r?.[2])return null;if(!S(r[2]))return null;return{currency:r[1],issuer:r[2]}}function le(e,r){return`${g.Ripple}.${e}-${r}`}async function H(e){if(e.isGasAsset){let{xrpToDrops:a}=await import("xrpl");return a(e.getValue("string"))}let r=W(e.toString());if(!r)throw new l({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:e.toString()}});return{currency:r.currency,issuer:r.issuer,value:e.getValue("string")}}function pe({fee:e,lastLedgerSequence:r,sequence:a,transaction:u}){return a!==void 0&&e!==void 0&&r!==void 0&&!L(u.Account)&&!L(u.Destination)}function X(e,r){let a,u=()=>(a??=import("xrpl").then(({Wallet:p})=>p.fromMnemonic(e,r?{derivationPath:r}:void 0)),a);return{getAddress:async()=>(await u()).address,signTransaction:async(p)=>(await u()).sign(p)}}function S(e){return ce(e)||L(e)}function Ce(e={}){let r;async function a(){if(r)return r;return r=await z(e).with({phrase:F.string},({phrase:n,derivationPath:t,index:i=0})=>X(n,oe(ae({chain:g.Ripple,derivationPath:t,index:i})))).with({signer:F.any},({signer:n})=>n).otherwise(()=>{return}),r}let u;async function p(){let n=await se(g.Ripple);if(!n)throw new l({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:g.Ripple}});let{Client:t}=await import("xrpl"),i=new t(n);return await i.connect(),i}async function w(){if(u){let n=await u.catch(()=>null);if(n?.isConnected())return n}return u=p(),u}async function G(n){let t=await n.request({command:"server_state"}),i=t.result.state.validated_ledger??t.result.state.closed_ledger;if(!i||!Number.isSafeInteger(i.reserve_base)||i.reserve_base<0||!Number.isSafeInteger(i.reserve_inc)||i.reserve_inc<0)throw new l({errorKey:"toolbox_ripple_get_balance_error",info:{reason:"XRPL reserve data is unavailable or invalid"}});return{baseReserveDrops:BigInt(i.reserve_base),ownerReserveDrops:BigInt(i.reserve_inc)}}let y=async()=>{let n=await a();if(!n)throw new l({errorKey:"toolbox_ripple_signer_not_found"});return n.getAddress()},M=async(n)=>{let t=n||await y(),{baseDecimal:i}=E(g.Ripple),s=await w();try{let[o,c]=await Promise.all([s.request({account:t,command:"account_info"}),s.request({account:t,command:"account_lines"})]),d=o.result.account_data.Balance,f=[T.from({chain:g.Ripple,fromBaseDecimal:i,value:d})];for(let m of c.result.lines){let _=le(m.currency,m.account);if(Number.parseFloat(m.balance)!==0)f.push(T.from({asset:_,asyncTokenLookup:!1,value:m.balance}))}return f}catch(o){if(q(o))return[T.from({chain:g.Ripple,value:0})];throw new l({errorKey:"toolbox_ripple_get_balance_error",info:{address:t,error:o}})}},B=async()=>{let{baseDecimal:n}=E(g.Ripple),s=(await(await w()).request({command:"fee"})).result.drops.open_ledger_fee;return T.from({chain:g.Ripple,fromBaseDecimal:n,value:s})};async function O(n){let t=n||await y(),i=await w();try{return(await i.request({account:t,command:"account_lines"})).result.lines.map((o)=>({account:o.account,authorized:o.authorized??!1,balance:o.balance,currency:o.currency,freeze:o.freeze??!1,freezePeer:o.freeze_peer??!1,limit:o.limit,limitPeer:o.limit_peer,noRipple:o.no_ripple??!1,noRipplePeer:o.no_ripple_peer??!1,peerAuthorized:o.peer_authorized??!1,qualityIn:o.quality_in??0,qualityOut:o.quality_out??0}))}catch(s){if(q(s))return[];throw new l({errorKey:"toolbox_ripple_get_trust_lines_error",info:{address:t,error:s}})}}async function Z({address:n,currency:t,issuer:i}){let s=await O(n),o=b(t);return s.some((c)=>b(c.currency)===o&&c.account===i)}async function K({currency:n,issuer:t,limit:i,sender:s}){let o=s||await y();if(!S(t))throw new l({errorKey:"core_transaction_invalid_recipient_address",info:{address:t}});let c=Number.parseFloat(i);if(Number.isNaN(c)||c<0)throw new l({errorKey:"toolbox_ripple_invalid_trust_line_limit",info:{limit:i}});let d=await w(),f={Account:o,LimitAmount:{currency:n,issuer:t,value:i},TransactionType:"TrustSet"};return d.autofill(f)}async function V(n,t){let[i,s,o]=await Promise.all([n.request({account:t,command:"account_info"}),G(n),B()]),{Balance:c,OwnerCount:d}=i.result.account_data,f=o.getBaseValue("bigint"),m=BigInt(c)-s.baseReserveDrops-BigInt(d)*s.ownerReserveDrops-f;if(m<=0n)throw new l({errorKey:"toolbox_sweep_amount_too_low",info:{asset:g.Ripple,balance:c,baseReserve:s.baseReserveDrops.toString(),fee:f.toString(),ownerCount:d,ownerReserve:s.ownerReserveDrops.toString()}});let{baseDecimal:_}=E(g.Ripple),h=T.from({chain:g.Ripple,fromBaseDecimal:_,value:m.toString()});return{amount:await H(h),fee:f.toString()}}async function j(n,t){let i=W(n.toString());if(!i)throw new l({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:n.toString()}});let s=await w(),o="0",c;while(!0){let d=await s.request({account:t,command:"account_lines",peer:i.issuer,...c!==void 0&&{marker:c}}),f=d.result.lines.find((_)=>_.account===i.issuer&&b(_.currency)===b(i.currency));if(f){o=f.balance;break}let m=d.result.marker;if(m===void 0||m===null)break;c=m}if(!Number.isFinite(Number(o))||Number(o)<=0)throw new l({errorKey:"toolbox_sweep_amount_too_low",info:{asset:n.toString(),balance:o}});return{currency:i.currency,issuer:i.issuer,value:o}}async function I({assetValue:n,recipient:t,memo:i,sender:s,sweep:o,destinationTag:c,extendBySeconds:d=150,sequence:f,fee:m,lastLedgerSequence:_}){if(!S(t))throw new l({errorKey:"core_transaction_invalid_recipient_address"});let h=s||await y();if(n.chain!==g.Ripple)throw new l({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:n.toString()}});let A=o&&n.isGasAsset?await V(await w(),h):void 0,ne=A?A.amount:o?await j(n,h):await H(n),C={Account:h,Amount:ne,Destination:t,TransactionType:"Payment",...A&&{Fee:A.fee},...c!==void 0&&{DestinationTag:c},...f!==void 0&&{Sequence:f},...m!==void 0&&{Fee:m},..._!==void 0&&{LastLedgerSequence:_}};if(i)C.Memos=[{Memo:{MemoData:Buffer.from(i).toString("hex")}}];if(pe({fee:m,lastLedgerSequence:_,sequence:f,transaction:C}))return C;let P=await(await w()).autofill(C);if(_===void 0&&P.LastLedgerSequence&&d>0)P.LastLedgerSequence+=Math.ceil(d/4);return P}async function x(n){let t=await a();if(!t)throw new l({errorKey:"toolbox_ripple_signer_not_found"});return t.signTransaction(n)}async function v(n){let i=await(await w()).submitAndWait(n),{result:s}=i;if(s.validated)return s.hash;let o=s.meta?.TransactionResult,c=z(o).with(k.tecNO_LINE,()=>"No trust line exists for this token").with(k.tecPATH_DRY,()=>"Payment path could not deliver funds").with(k.tecFROZEN,()=>"Token is frozen").otherwise(()=>{return});throw new l({errorKey:"toolbox_ripple_broadcast_error",info:{chain:g.Ripple,...c?{reason:c}:{txResult:o}}})}let Y=async(n)=>{try{let t=await x(n);return v(t.tx_blob)}catch(t){if(t instanceof l)throw t;throw new l({errorKey:"toolbox_ripple_broadcast_error",info:{chain:g.Ripple,error:t}})}};async function J({assetValue:n,memo:t,recipient:i,sweep:s}){let o=await a();if(!o)throw new l({errorKey:"toolbox_ripple_signer_not_found"});let c=await o.getAddress(),d=await I({assetValue:n,memo:t,recipient:i,sender:c,sweep:s}),f=await x(d);return v(f.tx_blob)}async function Q(n){let t=await a();if(!t)throw new l({errorKey:"toolbox_ripple_signer_not_found"});let i=await t.getAddress(),s=await K({...n,sender:i}),o=await x(s);return v(o.tx_blob)}function ee(){let n=u;if(u=null,n)n.then((t)=>{if(t?.isConnected())return t.disconnect();return}).catch((t)=>{console.warn("XRPL Cleanup failed silently:",t)})}return{broadcastTransaction:v,createSigner:X,createTransaction:I,disconnect:ee,estimateTransactionFee:B,getAddress:y,getBalance:M,getTrustLines:O,hasTrustLine:Z,setTrustLine:K,setTrustLineAndBroadcast:Q,signAndBroadcastTransaction:Y,signTransaction:x,transfer:J,validateAddress:S}}export{N as XRPL_KNOWN_TOKENS,k as XRPL_TOKEN_ERROR_CODES,b as currencyToHex,le as formatXrplTokenIdentifier,ye as getKnownTokensByIssuer,Ce as getRippleToolbox,be as getXrplTokenInfo,me as hexToCurrency,D as isHexCurrency,he as isKnownToken,R as normalizeCurrency,W as parseXrplTokenIdentifier,S as validateRippleAddress};
|
package/dist/src/solana/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ja as D}from"../../chunk-qk8kg62t.js";import{ka as d}from"../../chunk-pz8xe0qj.js";import{PublicKey as P}from"@solana/web3.js";import{AssetValue as A,Chain as p,DerivationPath as F,derivationPathToString as G,getChainConfig as O,getRPCUrl as N,NetworkDerivationPath as L,SwapKitError as T,updateDerivationPath as E}from"@swapkit/helpers";import{match as U,P as B}from"ts-pattern";async function j(n){let e=A.from({address:n,chain:p.Solana});if(e.symbol!=="UNKNOWN")return{decimals:e.decimal||0,id:n,logoURI:e.getIconUrl(),name:e.symbol,symbol:e.ticker};let t=`https://lite-api.jup.ag/tokens/v2/search?query=${encodeURIComponent(n)}`;try{let o=await fetch(t);if(!o.ok)return null;let r=await o.json();if(!Array.isArray(r)||r.length===0)return null;return r.find((a)=>a.id===n)||null}catch{return null}}async function V(n){let e=await w(),{PublicKey:t}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:o}=await import("@solana/spl-token"),r=new t(n),{baseDecimal:i}=O(p.Solana),a=await e.getBalance(r),c=[A.from({chain:p.Solana,fromBaseDecimal:i,value:a||0})],s=await e.getParsedTokenAccountsByOwner(r,{programId:o});for(let{account:m}of s.value){let l=m.data.parsed.info,f=l.mint,y=l.tokenAmount.amount;if(Number(y)===0)continue;let u=await j(f),g=u?.symbol||"UNKNOWN",h=u?.decimals||l.tokenAmount.decimals;c.push(A.from({asset:`${p.Solana}.${g}-${f}`,fromBaseDecimal:h,value:y}))}return c}function M(n){try{let e=new P(n);return P.isOnCurve(e.toBytes())}catch{return!1}}function en(n){let e=n&&"index"in n?n.index||0:0,t=G(n&&"derivationPath"in n&&n.derivationPath?n.derivationPath:E(L[p.Solana],{index:e})),o;async function r(){if(o)return o;return o=await U(n).with({phrase:B.string},({phrase:a})=>I({derivationPath:t,phrase:a})).with({signer:B.any},({signer:a})=>a).otherwise(()=>{return}),o}async function i(){let a=await r();return a?.publicKey?R(a.publicKey):""}return{broadcastTransaction:_(w),createKeysForPath:I,createTransaction:K(w),createTransactionFromInstructions:Z,estimateTransactionFee:q(w),getAddress:i,getAddressFromPubKey:R,getBalance:D(p.Solana),getBalanceFromRPC:V,getConnection:w,getPubkeyFromAddress:(a)=>new P(a),signAndBroadcastTransaction:async(a)=>{let c=await x(w,r)(a);return _(w)(c)},signTransaction:x(w,r),transfer:J(w,r),validateAddress:M}}function q(n){return async({recipient:e,assetValue:t,memo:o,isProgramDerivedAddress:r,sender:i})=>{let a=await n(),c=await K(n)({assetValue:t,isProgramDerivedAddress:r,memo:o,recipient:e,sender:i}),s=await C(a,c),{baseDecimal:m}=O(p.Solana);return A.from({chain:p.Solana,fromBaseDecimal:m,value:s})}}async function C(n,e){let t=await n.getFeeForMessage(e.compileMessage());if(t.value===null)throw new T("toolbox_fee_estimation_failed","Could not estimate Solana fee.");return t.value}async function w(){let{Connection:n}=await import("@solana/web3.js"),e=await N(p.Solana);return new n(e,{commitment:"confirmed",fetchMiddleware:(t,o,r)=>{let i={};for(let[a,c]of Object.entries(o?.headers??{})){let s=a.toLowerCase();if(s!=="pragma"&&s!=="solana-client")i[a]=c}r(t,{...o,headers:i})}})}function W(n){return async({assetValue:e,recipient:t,sender:o,isProgramDerivedAddress:r,sweep:i})=>{let a=new P(o);if(e.isGasAsset){let{Transaction:c,SystemProgram:s}=await import("@solana/web3.js");return new c().add(s.transfer({fromPubkey:a,lamports:i?0:e.getBaseValue("number"),toPubkey:new P(t)}))}if(e.address){let c=await n();return H({amount:i?0:e.getBaseValue("number"),connection:c,decimals:e.decimal,from:a,isProgramDerivedAddress:r,recipient:t,sweep:i,tokenAddress:e.address})}return}}async function H({tokenAddress:n,recipient:e,from:t,connection:o,amount:r,decimals:i,isProgramDerivedAddress:a,sweep:c}){let{getAssociatedTokenAddress:s,getAccount:m,createAssociatedTokenAccountIdempotentInstruction:l,createTransferCheckedInstruction:f}=await import("@solana/spl-token"),{Transaction:y}=await import("@solana/web3.js"),u=new y,g=new P(n),h=await s(g,t),S=new P(e),b=await s(g,S,a),k=!1;try{await m(o,b),k=!0}catch{}if(!k)u.add(l(t,b,S,g));let v=c?BigInt((await o.getTokenAccountBalance(h)).value.amount):r;if(c&&v<=0n)throw new T({errorKey:"toolbox_sweep_amount_too_low",info:{asset:n,balance:v.toString()}});return u.add(f(h,g,b,t,v,i)),u}async function z(n,e,t){let{ACCOUNT_SIZE:o,ASSOCIATED_TOKEN_PROGRAM_ID:r}=await import("@solana/spl-token");if(!e.instructions.some(({programId:f})=>f.equals(r)))return;let[a,c,s,m]=await Promise.all([n.getBalance(t),C(n,e),n.getMinimumBalanceForRentExemption(o),n.getMinimumBalanceForRentExemption(0)]),l=c+s+m;if(a<l)throw new T({errorKey:"toolbox_solana_insufficient_balance",info:{balance:a,fee:c,rentReserve:m,required:l,tokenAccountRent:s}})}function K(n){return async({checkPayerBalance:e=!1,recipient:t,assetValue:o,memo:r,isProgramDerivedAddress:i,sender:a,recentBlockhash:c,sweep:s})=>{let{createMemoInstruction:m}=await import("@solana/spl-memo"),l=new P(a);if(!(i||M(t)))throw new T("core_transaction_invalid_recipient_address");let f,y=()=>f??=n(),u=await W(y)({assetValue:o,isProgramDerivedAddress:i,recipient:t,sender:a,sweep:s});if(!u)throw new T("core_transaction_invalid_sender_address");if(r)u.add(m(r));if(u.recentBlockhash=c??(await(await y()).getLatestBlockhash()).blockhash,u.feePayer=l,e&&!o.isGasAsset)await z(await y(),u,l);if(s&&o.isGasAsset){let g=await y(),[h,S,b]=await Promise.all([g.getBalance(l),C(g,u),g.getMinimumBalanceForRentExemption(0)]),k=h-S-b;if(k<=0)throw new T({errorKey:"toolbox_sweep_amount_too_low",info:{balance:h,fee:S,rentReserve:b}});let{SystemProgram:v}=await import("@solana/web3.js");u.instructions[0]=v.transfer({fromPubkey:l,lamports:k,toPubkey:new P(t)})}return u}}async function Z({instructions:n}){let{Transaction:e}=await import("@solana/web3.js"),t=new e().add(...n);if(!t)throw new T("core_transaction_invalid_sender_address");return t}function J(n,e){return async({recipient:t,assetValue:o,checkPayerBalance:r,memo:i,isProgramDerivedAddress:a,sweep:c})=>{let s=await e();if(!s)throw new T("core_transaction_invalid_sender_address");let m=s.publicKey?.toString()??(await s.connect()).publicKey.toString(),l=await K(n)({assetValue:o,checkPayerBalance:r,isProgramDerivedAddress:a,memo:i,recipient:t,sender:m,sweep:c});if("signTransaction"in s){let f=await s.signTransaction(l);return _(n)(f)}return l.sign(s),_(n)(l)}}function _(n){return async(e)=>(await n()).sendRawTransaction(e.serialize())}function x(n,e){return async(t)=>{let o=await e();if(!o)throw new T("toolbox_solana_no_signer");let{VersionedTransaction:r}=await import("@solana/web3.js");if(!(t instanceof r)){let a=await(await n()).getLatestBlockhash();t.recentBlockhash=a.blockhash,t.feePayer=o.publicKey||void 0}if("connect"in o)return await o.signTransaction(t);return t.sign([o]),t}}async function I({phrase:n,derivationPath:e=F.SOL}){let{HDKey:t}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:o}=await import("@scure/bip39"),{Keypair:r}=await import("@solana/web3.js"),i=o(n),a=t.fromMasterSeed(i);return r.fromSeed(a.derive(e,!0).privateKey)}function R(n){return n.toString()}export{I as createKeysForPath,j as fetchTokenMetaData,en as getSolanaToolbox,M as validateSolanaAddress};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ja as z}from"../../chunk-qk8kg62t.js";import{ka as f}from"../../chunk-pz8xe0qj.js";import{AssetValue as x,Chain as H,DerivationPath as I,derivationPathToString as et,getChainConfig as N,getRPCUrl as W,NetworkDerivationPath as at,SwapKitError as i,updateDerivationPath as nt}from"@swapkit/helpers";import{match as M,P}from"ts-pattern";var D="0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",j="0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",U="0x01a736d6ed154502257f02b1ccdf4d9d1089f80811cd6acad48e6b6a9d1f2003";function K(o){if(!o)return!1;return/^0x[0-9a-fA-F]{1,64}$/.test(o)}async function E({phrase:o,derivationPath:c=I.STRK}){let{HDKey:_}=await import("@scure/bip32"),{mnemonicToSeedSync:v}=await import("@scure/bip39"),{ec:u,hash:p,encode:d,CallData:k}=await import("starknet"),w=v(o),S=_.fromMasterSeed(w).derive(c);if(!S.privateKey)throw new i("toolbox_starknet_no_signer");let C=d.addHexPrefix(Buffer.from(S.privateKey).toString("hex")),y=u.starkCurve.grindKey(C),g=d.addHexPrefix(y),m=u.starkCurve.getStarkKey(g),F=k.compile([m,0]);return{address:p.calculateContractAddressFromHash(m,U,F,0),privateKey:g,publicKey:m}}async function Z({phrase:o,derivationPath:c=I.STRK}){let{Account:_,RpcProvider:v}=await import("starknet"),{privateKey:u,address:p}=await E({derivationPath:c,phrase:o}),d=await W(H.Starknet),k=new v({nodeUrl:d});return new _({address:p,provider:k,signer:u})}function rt(o){let c=H.Starknet,_=o&&"index"in o?o.index||0:0,v=et(o&&"derivationPath"in o&&o.derivationPath?o.derivationPath:nt(at[c],{index:_})),u,p,d,k=Boolean(o&&"walletDeploysAccount"in o&&o.walletDeploysAccount);async function w(){if(p)return p;let{RpcProvider:e}=await import("starknet"),t=await W(c);return p=new e({nodeUrl:t}),p}async function A(e){let t=await w(),a=e||await g();if(!a)return!1;try{return await t.getClassHashAt(a),!0}catch(n){if(n instanceof Error&&n.message.includes("Contract not found"))return!1;let r=n;if(r?.code===20||r?.code===19)return!1;throw n}}async function S(){let{CallData:e,hash:t}=await import("starknet"),a=await w(),n=await y();if(!n)throw new i("toolbox_starknet_no_signer");if(!d)throw new i({errorKey:"toolbox_starknet_account_not_deployed",info:{message:"Cannot deploy account: public key not available. Use phrase-based wallet initialization."}});if(await A())return n.address;let s=e.compile([d,0]);if(t.calculateContractAddressFromHash(d,U,s,0).toLowerCase()!==n.address.toLowerCase())throw new i({errorKey:"toolbox_starknet_account_not_deployed",info:{message:"Address mismatch during deployment verification"}});let h={addressSalt:d,classHash:U,constructorCalldata:s},{transaction_hash:T}=await n.deployAccount(h);return await a.waitForTransaction(T),T}async function C(){if(k)return;if(!await A()){if(!d)throw new i({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 S()}}async function y(){if(u)return u;return u=await M(o).with({phrase:P.string},async({phrase:e})=>{let{Account:t}=await import("starknet"),{privateKey:a,address:n,publicKey:r}=await E({derivationPath:v,phrase:e});d=r;let s=await w();return new t({address:n,provider:s,signer:a})}).with({address:P.string,privateKey:P.string},async({privateKey:e,address:t})=>{let{Account:a}=await import("starknet"),n=await w();return new a({address:t,provider:n,signer:e})}).with({signer:P.instanceOf(Object)},({signer:e})=>e).otherwise(()=>{return}),u}async function g(){return(await y())?.address??""}async function m(e,t){let a=await w(),{uint256:n,CallData:r}=await import("starknet"),[s="0",l="0"]=await a.callContract({calldata:r.compile({account:e}),contractAddress:t,entrypoint:"balanceOf"});return n.uint256ToBN({high:l,low:s})}async function F(e){let{baseDecimal:t}=N(c),a=[],n=[D,j];for(let r of n)try{let s=await m(e,r);M(r).with(D,()=>{a.push(x.from({chain:c,fromBaseDecimal:t,value:s}))}).with(j,()=>{if(s>0n)a.push(x.from({asset:`${c}.ETH-${r}`,fromBaseDecimal:t,value:s}))}).otherwise(()=>{})}catch{}return a}async function R(e){let t=e||await g();if(t){let{Account:a}=await import("starknet"),n=await w();return new a({address:t,provider:n,signer:"0x0"})}throw new i({errorKey:"toolbox_starknet_fee_estimation_failed",info:{message:"Estimating fee needs a valid sender address or signer"}})}async function q(e,t){try{let a=await R(t),{overall_fee:n}=await a.estimateInvokeFee(e,{skipValidate:!0});if(n<=0n)throw new i({errorKey:"toolbox_starknet_fee_estimation_failed",info:{message:"Sweep fee estimation returned a non-positive fee",sender:t}});return n}catch(a){throw new i({errorKey:"toolbox_starknet_fee_estimation_failed",info:{message:"Unable to estimate the sweep fee. Verify RPC availability and that the sender account is deployed.",sender:t}},a)}}async function O(e,t){let a=await L(e),n=t.isGasAsset?a.find(({isGasAsset:r})=>r):a.find(({address:r})=>r?.toLowerCase()===t.address?.toLowerCase());if(n)return n.getBaseValue("bigint");if(t.isGasAsset)return m(e,D);if(t.address)return m(e,t.address);return 0n}async function B({recipient:e,assetValue:t,sender:a,sweep:n}){let{CallData:r,uint256:s}=await import("starknet");if(!K(e))throw new i("core_transaction_invalid_recipient_address",{address:e});let l=t.isGasAsset?D:t.address;if(!l)throw new i("toolbox_starknet_invalid_address",{address:l,assetValue:t});let h=t.getBaseValue("bigint");if(n){let b=a??await g();if(!K(b))throw new i("core_transaction_invalid_sender_address",{address:b});if(t.isGasAsset){let V=[{calldata:r.compile([e,s.bnToUint256(1n)]),contractAddress:l,entrypoint:"transfer"}],tt=await q(V,b);h=await O(b,t)-tt}else h=await O(b,t);if(h<=0n)throw new i({errorKey:"toolbox_sweep_amount_too_low",info:{amount:h.toString(),asset:t.toString()}})}let T=s.bnToUint256(h);return[{calldata:r.compile([e,T]),contractAddress:l,entrypoint:"transfer"}]}async function J({recipient:e,assetValue:t,sender:a}){let{baseDecimal:n}=N(H.Starknet);try{let r=await B({assetValue:t,recipient:e}),l=await(await R(a)).estimateInvokeFee(r,{skipValidate:!0});if(l?.overall_fee)return x.from({chain:c,fromBaseDecimal:n,value:l.overall_fee})}catch(r){throw new i("toolbox_starknet_fee_estimation_failed",r)}return x.from({chain:c,value:"0.00001"})}async function Q({recipient:e,assetValue:t,memo:a,sweep:n}){let r=await y();if(!r)throw new i("toolbox_starknet_no_signer");await C();let s=await B({assetValue:t,memo:a,recipient:e,sender:r.address,sweep:n});return(await r.execute(s)).transaction_hash}async function X(e){let t=await y();if(!t)throw new i("toolbox_starknet_no_signer");let a=await t.signMessage(e);return Array.isArray(a)?a:[a.r.toString(),a.s.toString()]}async function G(e){let t=await y();if(!t)throw new i("toolbox_starknet_no_signer");return await C(),(await t.execute(e)).transaction_hash}function Y(e){return G(e)}async function L(e,t=!0){try{return await z(c)(e,t)}catch{return F(e)}}return{broadcastTransaction:G,createKeysForPath:Z,createTransaction:B,deployAccount:S,estimateTransactionFee:J,getAddress:g,getBalance:L,getProvider:w,isAccountDeployed:A,signAndBroadcastTransaction:Y,signMessage:X,transfer:Q,validateAddress:K}}export{E as deriveStarknetKeys,rt as getStarknetToolbox,Z as starknetCreateKeysForPath,K as validateStarknetAddress};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ka as p}from"../../chunk-pz8xe0qj.js";import{AssetValue as h,Chain as c,derivationPathToString as ne,getChainConfig as L,getRPCUrl as F,SKConfig as re,SwapKitError as d}from"@swapkit/helpers";import{match as se,P as H}from"ts-pattern";var ae=/^G[A-Z2-7]{55}$/,oe=/^[A-Za-z0-9]{1,12}$/,W=2,ie=600000,k;async function j(e){if(k&&Date.now()-k.timestamp<ie)return k.value;let l=(await e.ledgers().order("desc").limit(1).call()).records[0]?.base_reserve_in_stroops;if(l===void 0)throw new d({errorKey:"toolbox_stellar_balance_error",info:{reason:"base_reserve_unavailable"}});return k={timestamp:Date.now(),value:l},l}function U(e){return h.from({chain:c.Stellar,value:e}).getBaseValue("bigint")}function le(e){let{baseDecimal:r}=L(c.Stellar);return h.from({chain:c.Stellar,fromBaseDecimal:r,value:e}).getValue("string")}function Z({balance:e,baseReserveInStroops:r,numSponsored:l,numSponsoring:w,sellingLiabilities:S,subentryCount:f}){let _=U(e),b=U(S),v=W+f+w-l,E=BigInt(v)*BigInt(r),R=_-E-b;return R>0n?R:0n}function ce({account:e,assetValue:r,baseReserveInStroops:l,fee:w}){let S=e.balances.find((b)=>b.asset_type==="native"),_=(S?Z({balance:S.balance,baseReserveInStroops:l,numSponsored:e.num_sponsored,numSponsoring:e.num_sponsoring,sellingLiabilities:S.selling_liabilities,subentryCount:e.subentry_count}):0n)-BigInt(w);if(_<=0n)throw new d({errorKey:"toolbox_sweep_amount_too_low",info:{asset:r.toString(),reason:"spendable balance does not cover the transaction fee"}});return _}function ue({baseReserveInStroops:e,sweepAmountInStroops:r}){if(r===void 0||e===void 0)return;let l=BigInt(W)*BigInt(e);if(r<l)throw new d({errorKey:"toolbox_sweep_amount_too_low",info:{amountInStroops:r,minimumStartingBalanceInStroops:l,reason:"starting balance is below the Stellar account minimum"}})}function de({account:e,assetCode:r,assetValue:l,issuer:w,sweep:S}){if(!S)return l.getValue("string");let f=e.balances.find((_)=>("asset_code"in _)&&_.asset_code===r&&_.asset_issuer===w)?.balance??"0";if(U(f)<=0n)throw new d({errorKey:"toolbox_sweep_amount_too_low",info:{asset:l.toString(),balance:f,reason:"trust-line balance is not positive"}});return f}function fe(e){if(!e)return;if(new TextEncoder().encode(e).length>28)throw new d("helpers_invalid_memo_type")}function z(e){if(!e||typeof e!=="string"||!e.startsWith("G")||e.length!==56)return!1;return ae.test(e)}function O(e){if(typeof e!=="object"||e===null)return;let r="response"in e?e.response:void 0;return typeof r?.status==="number"?r.status:void 0}function me(e){return O(e)===504}function ge(e){return e.hash?.().toString("hex")}function Se(e){return[...new Set([e,...re.get("rpcUrls")[c.Stellar]])].filter(Boolean)}async function q(e){if(!z(e))return!1;try{let{StrKey:r}=await import("@stellar/stellar-sdk");return r.isValidEd25519PublicKey(e)}catch{return!1}}async function V(e){let{address:r,ticker:l}=e,w=r?await q(r):!1;if(e.chain!==c.Stellar||e.isGasAsset||!oe.test(l)||!r||!w)throw new d({errorKey:"helpers_invalid_asset_identifier",info:{identifier:e.toString()}});return{assetCode:l,issuer:r}}function we(e={}){let r;async function l(t){if(e.derivationPath&&(e.derivationPath[3]||e.derivationPath[4]))throw new d("toolbox_derivation_slot_unsupported",{chain:c.Stellar,derivationPath:e.derivationPath});let n=e.index??0;if(!e.derivationPath&&(!Number.isInteger(n)||n<0))throw new d("toolbox_derivation_slot_unsupported",{chain:c.Stellar,index:n});let o=e.derivationPath?ne(e.derivationPath.slice(0,3)):`m/44'/148'/${n}'`,{HDKey:s}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:a}=await import("@scure/bip39"),{Keypair:i}=await import("@stellar/stellar-sdk"),m=s.fromMasterSeed(a(t)).derive(o,!0),u=i.fromRawEd25519Seed(Buffer.from(m.privateKey));return{getAddress:()=>u.publicKey(),signTransaction:(g)=>(g.sign(u),g)}}async function w(){if(r)return r;return r=await se(e).with({phrase:H.string.minLength(1)},({phrase:t})=>l(t)).with({signer:H.not(H.nullish)},({signer:t})=>t).otherwise(()=>{return}),r}async function S(){let t=await w();if(!t)throw new d("toolbox_stellar_no_signer");return t}async function f(t){let{Horizon:n}=await import("@stellar/stellar-sdk"),o=t||await F(c.Stellar);return new n.Server(o)}async function _(t,n){for(let o of n)try{return(await(await f(o)).transactions().transaction(t).call()).hash||t}catch{}return}async function b(t,n){let o=await F(c.Stellar),s=Se(o),a=ge(t),i;for(let m of s)try{let u=await f(m),{hash:g}=await u.submitTransaction(t);return g}catch(u){if(i=u,!me(u))break;let g=a?await _(a,s):void 0;if(g)return g}throw new d(n,i)}async function v(){let t=await w();return t?t.getAddress():""}async function E(t){let n=t||await v();if(!n)throw new d("toolbox_stellar_account_not_found");let o=await f(),[s,a]=await Promise.allSettled([o.loadAccount(n),j(o)]);if(s.status==="rejected"){let i=s.reason;if(O(i)===404)return[h.from({chain:c.Stellar,value:0})];throw i}if(a.status==="rejected")throw a.reason;return s.value.balances.map((i)=>{if(i.asset_type==="native"){let g=Z({balance:i.balance,baseReserveInStroops:a.value,numSponsored:s.value.num_sponsored,numSponsoring:s.value.num_sponsoring,sellingLiabilities:i.selling_liabilities,subentryCount:s.value.subentry_count}),{baseDecimal:B}=L(c.Stellar);return h.from({chain:c.Stellar,fromBaseDecimal:B,value:g})}let m="asset_code"in i?i.asset_code:"",u="asset_issuer"in i?i.asset_issuer:"";return h.from({asset:`${c.Stellar}.${m}-${u}`,asyncTokenLookup:!1,value:i.balance})})}async function R({address:t,assetValue:n}){if(n.chain!==c.Stellar)throw new d({errorKey:"toolbox_stellar_trustline_asset_invalid",info:{asset:n.toString()}});if(n.isGasAsset)return!0;if(!n.address)throw new d({errorKey:"toolbox_stellar_trustline_asset_invalid",info:{asset:n.toString(),reason:"missing issuer"}});let o=await f(),s;try{s=await o.loadAccount(t)}catch(a){if(O(a)===404)return!1;throw a}return s.balances.some((a)=>("asset_code"in a)&&a.asset_code===n.ticker&&a.asset_issuer===n.address)}async function M({recipient:t,assetValue:n,memo:o,sender:s,sweep:a}){if(fe(o),!await q(t))throw new d("core_transaction_invalid_recipient_address");let m=s||await v();if(!m)throw new d("toolbox_stellar_no_signer");let{Asset:u,Memo:g,Networks:B,Operation:y,TransactionBuilder:D}=await import("@stellar/stellar-sdk"),T=await f(),[P,x,K]=await Promise.all([T.fetchBaseFee(),T.loadAccount(m),a&&n.isGasAsset?j(T):Promise.resolve(void 0)]),C=new D(x,{fee:String(P),networkPassphrase:B.PUBLIC});if(n.isGasAsset){let A=a&&K!==void 0?ce({account:x,assetValue:n,baseReserveInStroops:K,fee:P}):void 0,I=A===void 0?n.getValue("string"):le(A);try{await T.loadAccount(t),C.addOperation(y.payment({amount:I,asset:u.native(),destination:t}))}catch{ue({baseReserveInStroops:K,sweepAmountInStroops:A}),C.addOperation(y.createAccount({destination:t,startingBalance:I}))}}else{let{assetCode:A,issuer:I}=await V(n),te=de({account:x,assetCode:A,assetValue:n,issuer:I,sweep:a});C.addOperation(y.payment({amount:te,asset:new u(A,I),destination:t}))}if(o)C.addMemo(g.text(o));return C.setTimeout(30).build()}async function N({assetValue:t,limit:n,sender:o}){let s=o||await v();if(!s)throw new d("toolbox_stellar_no_signer");let{Asset:a,Networks:i,Operation:m,TransactionBuilder:u}=await import("@stellar/stellar-sdk"),{assetCode:g,issuer:B}=await V(t),y=await f(),[D,T]=await Promise.all([y.fetchBaseFee(),y.loadAccount(s)]),P=new a(g,B),x=n!==void 0?m.changeTrust({asset:P,limit:n}):m.changeTrust({asset:P});return new u(T,{fee:String(D),networkPassphrase:i.PUBLIC}).addOperation(x).setTimeout(30).build()}async function X(t){let n=await S(),{TransactionBuilder:o,Networks:s}=await import("@stellar/stellar-sdk");return n.signTransaction(o.fromXDR(t.toXDR(),s.PUBLIC))}function G(t){return b(t,"toolbox_stellar_broadcast_error")}async function J({recipient:t,assetValue:n,memo:o,sweep:s}){let a=await S(),i=await a.getAddress(),m=await M({assetValue:n,memo:o,recipient:t,sender:i,sweep:s}),u=await a.signTransaction(m);return b(u,"toolbox_stellar_transaction_failed")}async function Q({assetValue:t,limit:n}){let o=await S(),s=await N({assetValue:t,limit:n,sender:await o.getAddress()}),a=await o.signTransaction(s);return b(a,"toolbox_stellar_transaction_failed")}async function Y(t){let n=await X(t);return G(n)}async function ee(){let{baseDecimal:t}=L(c.Stellar);try{let s=(await(await f()).feeStats()).fee_charged.p50;return h.from({chain:c.Stellar,fromBaseDecimal:t,value:s})}catch{return h.from({chain:c.Stellar,fromBaseDecimal:t,value:"100"})}}return{broadcastTransaction:G,createTransaction:M,createTrustline:Q,createTrustlineTransaction:N,estimateTransactionFee:ee,getAddress:v,getBalance:E,hasTrustline:R,signAndBroadcastTransaction:Y,signTransaction:X,transfer:J,validateAddress:z}}export{we as getStellarToolbox,z as validateStellarAddress};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ka as b}from"../../chunk-pz8xe0qj.js";import{hexToU8a as M,isHex as _,u8aToHex as G}from"@polkadot/util";import{decodeAddress as T,encodeAddress as v}from"@polkadot/util-crypto";import{AssetValue as F,Chain as y,getRPCUrl as U,SubstrateChains as W,SwapKitError as d,SwapKitNumber as H}from"@swapkit/helpers";import{match as w,P as A}from"ts-pattern";import{AssetValue as K,Chain as B,SwapKitNumber as x}from"@swapkit/helpers";async function N(e,t,n){let a=[t.set(0)];if(!n)return a;try{let r=await e.query.system?.account?.(n);if(!r)return a;let{data:{free:i}}=r,c=x.fromBigInt(BigInt(i.toString()),t.decimal).getValue("string");return[t.set(c)]}catch(r){let i=r instanceof Error?r.message:String(r);return console.error(`Error fetching substrate balance: ${i}`),a}}async function j(e,t,n){let a=[t.set(0)];if(!n)return a;try{let r=await e.query.flip?.account?.(n);if(!r)return a;let i=r.balance||r.data?.balance;if(!i||i.isEmpty)return a;let c=x.fromBigInt(BigInt(i.toString()),t.decimal).getValue("string");return[t.set(c)]}catch(r){let i=r instanceof Error?r.message:String(r);return console.error(`Error fetching chainflip balance: ${i}`),a}}function I(e,t){return function(a){let r=K.from({chain:e});switch(e){case B.Chainflip:return j(t,r,a);default:return N(t,r,a)}}}var R={decimals:[10],displayName:"Polkadot Relay Chain",network:"polkadot",prefix:0,standardAccount:"*25519",symbols:["DOT"],website:"https://polkadot.network"},D={decimals:[18],displayName:"Chainflip",network:"chainflip",prefix:2112,standardAccount:"*25519",symbols:["FLIP"],website:"https://chainflip.io/"},V={decimals:[],displayName:"Substrate",network:"substrate",prefix:42,standardAccount:"*25519",symbols:[],website:"https://substrate.io/"},p={DOT:R,FLIP:D,GENERIC:V};function de(e,t){return w(e).with(...W,(n)=>ee({chain:n,...t})).exhaustive()}function f(e){return"address"in e}async function k(e,t){let{Keyring:n}=await import("@polkadot/keyring"),{cryptoWaitReady:a}=await import("@polkadot/util-crypto");return await a(),new n({ss58Format:t,type:"sr25519"}).addFromUri(e)}var S=(e,t)=>e.rpc.system.accountNextIndex(t),h=(e,{recipient:t,assetValue:n,sweep:a})=>{let r=a?e.tx.balances?.transferAll?.(t,!0):e.tx.balances?.transferAllowDeath?.(t,n.getBaseValue("number"));if(a&&!r)throw new d("toolbox_substrate_transfer_error");return r},m=(e,t)=>{if(e===y.Chainflip&&t)throw new d("toolbox_substrate_not_supported")},L=async(e,t,n)=>{let a=h(e,n);if(!a)throw new d("toolbox_substrate_transfer_error");let r=f(t),i=r?t.address:n.sender;if(!i)throw new d("core_transaction_invalid_sender_address");let c=await S(e,i);return(await a.signAndSend(r?t:i,{nonce:c,signer:r?void 0:t})).toString()},q=async(e,t,n,a)=>{let r=h(e,a),i=f(t)?t.address:a.sender;if(!i)return Promise.resolve(n.set(0));let c=await r?.paymentInfo(i,{nonce:await S(e,i)})||{partialFee:0};return n.set(H.fromBigInt(BigInt(c.partialFee.toString()),n.decimal).getValue("string"))},O=async(e,t)=>{if(t)return e.send(t);return(await e.send()).toString()},z=async(e,t)=>await t.signAsync(e),J=(e,t,n)=>{if(n)return t.signAndSend(e,n);return t.signAndSend(e).toString()},Q=async({signer:e,address:t,tx:n,callback:a,api:r})=>{let i=await S(r,t);if(a)n.signAndSend(t,{nonce:i,signer:e},a);return n.signAndSend(t,{nonce:i,signer:e}).toString()};function X(e,t){let n=T(e);return v(n,t)}function C(e,t){return _(e)?M(e):T(e,void 0,t)}function Y(e,t="ss58",n){if(t==="hex")return G(e);return v(e,n)}function Z({chain:e,prefix:t}){let n=t||w(e).with(y.Polkadot,()=>p.DOT.prefix).with(y.Chainflip,()=>p.FLIP.prefix).otherwise(()=>p.GENERIC.prefix);return function(r){if(typeof r!=="string"||_(r))return!1;try{return C(r,n).length===32}catch{return!1}}}function ee({chain:e,generic:t=!1,...n}){let a=F.from({chain:e}),r;async function i(){let{ApiPromise:s,WsProvider:o}=await import("@polkadot/api"),u=await U(e),l=new o(u);return s.create({noInitWarn:!0,provider:l})}async function c(){if(r)return r;return r=await w(n).with({phrase:A.string},({phrase:s})=>k(s,p[e].prefix)).with({signer:A.any},({signer:s})=>s).otherwise(()=>{return}),r}let g=t?p.GENERIC:p[e];async function P(s){let o=await c(),u=s||o;if(!u)throw new d("core_wallet_not_keypair_wallet");return f(u)?u.address:void 0}return{broadcast:O,convertAddress:X,createKeyring:(s)=>k(s,g.prefix),createTransaction:async(s)=>{m(e,s.sweep);let o=await i();return h(o,s)},decodeAddress:C,encodeAddress:Y,estimateTransactionFee:async(s)=>{m(e,s.sweep);let o=await c();if(!o)throw new d("core_wallet_not_keypair_wallet");let u=await i();return q(u,o,a,s)},gasAsset:a,getAddress:P,getApi:i,getBalance:async(s)=>{let o=await i(),u=I(e,o),l=s||await P();return u(l)},network:g,sign:async(s)=>{let o=await c();if(!o)throw new d("core_wallet_not_keypair_wallet");if(f(o))return z(o,s);throw new d("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},signAndBroadcast:async({tx:s,callback:o,address:u})=>{let l=await c();if(!l)throw new d("core_wallet_not_keypair_wallet");if(f(l))return J(l,s,o);let E=await i();if(u)return Q({address:u,api:E,callback:o,signer:l,tx:s});throw new d("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},transfer:async(s)=>{m(e,s.sweep);let o=await c();if(!o)throw new d("core_wallet_not_keypair_wallet");let u=await i();return L(u,o,s)},validateAddress:Z({chain:e,prefix:g.prefix})}}export{p as SubstrateNetwork,k as createKeyring,ee as createSubstrateToolbox,Z as getSubstrateAddressValidator,de as getSubstrateToolbox,f as isKeyringPair};
|
package/dist/src/sui/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ka as G}from"../../chunk-pz8xe0qj.js";import{fromBase64 as W,isValidSuiAddress as z,normalizeStructTag as F}from"@mysten/sui/utils";import{AssetValue as A,Chain as C,derivationPathToString as H,getChainConfig as j,getRPCUrlSync as Q,resolveDerivationPath as X,SwapKitError as f}from"@swapkit/helpers";import{match as Z,P as K}from"ts-pattern";var k="0x2::sui::SUI",J=F(k),D=256,nn=50000000;async function*q({fetchPage:n}){let t;do{let e=await n(t);yield e.items,t=e.hasNextPage?e.cursor:null}while(t)}async function tn(n){let t=[];for await(let e of n)t.push(...e);return t}async function O({coinType:n,owner:t,suiClient:e,targetBalance:o}){let r=[],s=0n,d=q({fetchPage:async(c)=>{let m=await e.listCoins({coinType:n,cursor:c,owner:t});return{...m,items:m.objects}}});for await(let c of d)if(r.push(...c),s+=c.reduce((m,p)=>m+BigInt(p.balance),0n),o!==void 0&&s>=o)break;return r}function en({owner:n,suiClient:t}){return tn(q({fetchPage:async(e)=>{let o=await t.listBalances({cursor:e,owner:n});return{...o,items:o.balances}}}))}async function L(n){let{referenceGasPrice:t}=await n.getReferenceGasPrice();return BigInt(t)}function x({objectId:n,digest:t,version:e}){return{digest:t,objectId:n,version:e}}function R(n){return n.$kind==="Transaction"?n.Transaction:n.FailedTransaction}async function U({signedTransaction:{bytes:n,signature:t},suiClient:e}){let o=await e.executeTransaction({signatures:[t],transaction:W(n)});return R(o).digest}function an(n,t,e,o=!1){let r=t.reduce((l,w)=>l+BigInt(w.balance),0n);if(r<e)throw new f("toolbox_sui_insufficient_balance",{available:r.toString(),required:e.toString()});let{selectedCoins:s}=t.reduce((l,w)=>{if(l.total>=e)return l;return{selectedCoins:[...l.selectedCoins,w],total:l.total+BigInt(w.balance)}},{selectedCoins:[],total:0n}),d=s[0],c=n.objectRef(x(d)),m=s.slice(1).map((l)=>n.objectRef(x(l)));if(m.length>0)n.mergeCoins(c,m);if(o)return c;let[p]=n.splitCoins(c,[e]);return p}function M(n,t){let e=n.reduce((o,r)=>o+BigInt(r.balance),0n);if(e<=0n)throw new f({errorKey:"toolbox_sweep_amount_too_low",info:{asset:t,available:e.toString()}});return e}function V(n){if(n.length>D)throw new f({errorKey:"toolbox_sui_transaction_creation_error",info:{coinCount:n.length,maxGasPaymentCoins:D,reason:`SUI transactions support at most ${D} gas payment coins`}})}function rn(n,t,e,o,r,s){let d=e.getBaseValue("bigint");if(s)M(t,e.toString()),V(t);else Y(t,d+BigInt(o));if(n.setGasPayment(t.map(x)),s)n.transferObjects([n.gas],r);else{let[c]=n.splitCoins(n.gas,[e.getBaseValue("string")]);n.transferObjects([c],r)}}function Y(n,t){let e=n.reduce((o,r)=>o+BigInt(r.balance),0n);if(e<t)throw new f("toolbox_sui_insufficient_balance",{available:e.toString(),required:t.toString()})}async function on({assetValue:n,gasBudget:t,recipient:e,sender:o,suiClient:r,sweep:s,tx:d}){let c=n.getBaseValue("bigint"),[m,p]=await Promise.all([L(r),O({coinType:k,owner:o,suiClient:r,targetBalance:s?void 0:c+BigInt(t)})]);if(d.setGasPrice(m),rn(d,p,n,t,e,s),s){let l=p.reduce((w,P)=>w+BigInt(P.balance),0n);return l<BigInt(t)?l:t}return t}async function sn({assetValue:n,gasBudget:t,recipient:e,sender:o,suiClient:r,sweep:s,tx:d}){let c=n.address;if(!c)throw new f("toolbox_sui_missing_coin_type");let m=n.getBaseValue("bigint"),[p,l,w]=await Promise.all([L(r),O({coinType:k,owner:o,suiClient:r,targetBalance:BigInt(t)}),O({coinType:c,owner:o,suiClient:r,targetBalance:s?void 0:m})]);if(!w.length&&!s)throw new f("toolbox_sui_no_coins_found",{coinType:c});let P=s?M(w,n.toString()):m;if(Y(l,BigInt(t)),s)V(l);d.setGasPrice(p),d.setGasPayment(l.map(x));let I=an(d,w,P,s);d.transferObjects([I],e)}function cn(n){try{return z(n)}catch{return!1}}function fn({provider:n,...t}={}){let e;async function o(){if(e)return e;return e=await Z(t).with({phrase:K.string},async({phrase:i,derivationPath:a,index:y=0})=>{let{Ed25519Keypair:T}=await import("@mysten/sui/keypairs/ed25519"),g=X({chain:C.Sui,derivationPath:a,index:y});if(g.length!==5||g[3]!==0||g[4]!==0)throw new f("toolbox_derivation_slot_unsupported",{chain:C.Sui,derivationPath:g});let h=H(g,{allHardened:!0});return T.deriveKeypair(i,h)}).with({signer:K.any},({signer:i})=>i).otherwise(()=>{return}),e}async function r(i=n){let{SuiGrpcClient:a}=await import("@mysten/sui/grpc");return new a({baseUrl:i||Q(C.Sui),network:"mainnet"})}async function s(){return(await o())?.toSuiAddress()||""}function d(i){try{let a=A.from({address:i,chain:C.Sui});return{asset:a.toString(),decimals:a.decimal}}catch{}return null}async function c(i){let a=i||await s();if(!a)throw new f("toolbox_sui_address_required");let{baseDecimal:y,chain:T}=j(C.Sui),g;try{g=await en({owner:a,suiClient:await r()})}catch(u){throw new f("toolbox_sui_balance_error",{address:a,error:u})}let h=({coinType:u})=>F(u)===J,_=g.find(h)?.balance||"0",S=[A.from({chain:T,fromBaseDecimal:y,value:_})];for(let u of g){if(h(u)||BigInt(u.balance)<=0n)continue;let b=d(u.coinType);if(b)S.push(A.from({asset:b.asset,fromBaseDecimal:b.decimals,value:u.balance}))}return S}async function m(i){let a=A.from({chain:C.Sui,value:"0.01"});if(!i)return a;try{let y=await r(),{txBytes:T}=await p(i),g=await y.simulateTransaction({include:{effects:!0},transaction:T}),{effects:h,status:_}=R(g);if(!_.success)return a;let{gasUsed:S}=h,{baseDecimal:u}=j(C.Sui),b=BigInt(S.computationCost)+BigInt(S.storageCost)-BigInt(S.storageRebate);return A.from({chain:C.Sui,fromBaseDecimal:u,value:b.toString()})}catch{return a}}async function p({recipient:i,assetValue:a,gasBudget:y,sender:T,sweep:g}){let{Transaction:h}=await import("@mysten/sui/transactions"),_=T||await s(),S=y||nn;if(!_)throw new f("toolbox_sui_no_sender");try{let u=await r(),b=new h;b.setSender(_);let E={assetValue:a,gasBudget:S,recipient:i,sender:_,suiClient:u,sweep:g,tx:b},v;if(a.isGasAsset||a.symbol==="SUI"){let B=await on(E);if(BigInt(B)<BigInt(S))v=BigInt(B);b.setGasBudget(B)}else await sn(E),b.setGasBudget(S);let N=await b.build({client:u});if(v!==void 0){let{status:B}=R(await u.simulateTransaction({transaction:N}));if(!B.success)throw new f({errorKey:"toolbox_sweep_amount_too_low",info:{asset:a.toString(),budget:v.toString(),error:B.error.message}})}return{tx:b,txBytes:N}}catch(u){if(u instanceof f)throw u;throw new f("toolbox_sui_transaction_creation_error",{error:u})}}async function l(i){let a=await o();if(!a)throw new f("toolbox_sui_no_signer");if(i instanceof Uint8Array)return a.signTransaction(i);let{txBytes:y}="tx"in i?i:await p(i);return a.signTransaction(y)}async function w({assetValue:i,gasBudget:a,recipient:y,sweep:T}){let g=await o();if(!g)throw new f("toolbox_sui_no_signer");let h=g.toSuiAddress()||await s();if(!h)throw new f("toolbox_sui_no_sender");let{txBytes:_}=await p({assetValue:i,gasBudget:a,recipient:y,sender:h,sweep:T}),S=await r();return U({signedTransaction:await g.signTransaction(_),suiClient:S})}async function P(i){return U({signedTransaction:i,suiClient:await r()})}async function I(i){let a=await o();if(!a)throw new f("toolbox_sui_no_signer");let y=await r(),T;if(typeof i==="string")T=Uint8Array.from(Buffer.from(i,"base64"));else if(i instanceof Uint8Array)T=i;else T=await i.build({client:y});return U({signedTransaction:await a.signTransaction(T),suiClient:y})}return{broadcastTransaction:P,createTransaction:p,estimateTransactionFee:m,getAddress:s,getBalance:c,signAndBroadcastTransaction:I,signTransaction:l,transfer:w,validateAddress:cn}}export{fn as getSuiToolbox,cn as validateSuiAddress};
|
package/dist/src/ton/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ja as U}from"../../chunk-qk8kg62t.js";import{ka as h}from"../../chunk-pz8xe0qj.js";import{AssetValue as at,Chain as T,getChainConfig as q,getRPCUrl as it,NetworkDerivationPath as ct,RequestClient as dt,SwapKitError as g,SwapKitNumber as lt}from"@swapkit/helpers";import{Address as f,beginCell as x,Cell as j,external as ut,internal as ft,loadStateInit as pt,SendMode as N,storeMessage as Tt,toNano as k}from"@ton/core";import{match as F,P as E}from"ts-pattern";var wt=260734629,gt=k("0.01"),yt=k("0.05"),G=N.PAY_GAS_SEPARATELY+N.IGNORE_ERRORS,mt=N.CARRY_ALL_REMAINING_BALANCE+N.IGNORE_ERRORS,_t=1100,At=[1000,2000,4000],L=new Map,J=(r)=>new Promise((a)=>setTimeout(a,r));function bt(r){let a=L.get(r)??{nextStartAt:0,tail:Promise.resolve()};return L.set(r,a),a.tail=a.tail.then(async()=>{let d=a.nextStartAt-performance.now();if(d>0)await J(d);a.nextStartAt=performance.now()+_t}),a.tail}function Y(r){return r?.cause?.status}function ht(r){let a=Y(r);return a===429||a!==void 0&&a>=502}function v(r,a){let d=Y(r);return d!==void 0||r instanceof TypeError||r instanceof Error&&r.name==="AbortError"?new g({errorKey:"helpers_chain_rpc_connection_failed",info:{chain:T.Ton,status:d,...a}}):new g({errorKey:"core_swap_contract_not_found",info:a})}async function Q({attempt:r=0,body:a,headers:d,url:p}){if(q(T.Ton).rpcUrls.some((l)=>l===p))await bt(p);try{return await dt.post(p,{body:a,headers:d,retry:{maxRetries:0}})}catch(l){let m=At[r];if(m===void 0||!ht(l))throw l;return await J(m),Q({attempt:r+1,body:a,headers:d,url:p})}}var St=async(r)=>{let a=await Q({body:r.data,headers:r.headers.toJSON(),url:r.url??""});return{config:r,data:a,headers:{},status:200,statusText:"OK"}};function Mt(r={}){let a,d,p,C=new Map;async function l(){if(!a){let{TonClient:t}=await import("@ton/ton"),e=r.provider??await it(T.Ton,{allowRateLimited:!0});a=new t({endpoint:e,httpAdapter:St})}return a}async function m(){return(await S()).address.toString()}async function O(){if(p)return p;return p=await F(r).with({phrase:E.string},async({phrase:t,derivationPath:e,index:n=0})=>{let o=ct[T.Ton],s=e?.some((c,u)=>c!==o[u]);if(n||s)throw new g("toolbox_derivation_slot_unsupported",{chain:T.Ton,derivationPath:e,index:n});let{mnemonicToWalletKey:i}=await import("@ton/crypto");return i(t.split(" "))}).with({signer:E.any},({signer:t})=>t).otherwise(()=>{return}),p}async function S(t){if(!d||t){let e=await O(),n=await l(),o=t||e;if(!o)throw new g("core_wallet_connection_not_found");let{WalletContractV4:s}=await import("@ton/ton"),i=s.create({publicKey:o.publicKey,workchain:0});d=n.open(i)}return d}let V=U(T.Ton);async function z({assetValue:t,recipient:e,memo:n,sender:o,sweep:s,jettonWalletAddress:i}){if(t.isGasAsset){if(s){let st=o||await m(),K=await(await l()).getBalance(f.parse(st));if(K<=0n)throw new g("toolbox_sweep_amount_too_low",{asset:t.toString(),balance:K.toString()})}let rt=n?D(n).toBoc().toString("base64"):void 0;return[{address:e,amount:t.getBaseValue("string"),payload:rt}]}let c=t.address;if(!c)throw new g({errorKey:"core_swap_contract_not_found",info:{asset:t.toString()}});let u=o??await m(),w=i?f.parse(i):await I({jettonMasterAddress:c,ownerAddress:u}),y=w.toString(),A=f.parse(e),_=f.parse(u),b=s?await tt(w):t.getBaseValue("bigint");if(s&&b<=0n)throw new g("toolbox_sweep_amount_too_low",{asset:t.toString(),balance:b.toString()});let nt=n?D(n):void 0,ot=et({destinationAddress:A,forwardPayload:nt,jettonAmount:b,responseAddress:_});return[{address:y,amount:yt.toString(),payload:ot.toBoc().toString("base64")}]}async function R({sender:t,sweep:e,...n}){let o=e&&n.assetValue.isGasAsset?mt:G;return{messages:await z({...n,sender:t,sweep:e}),sendMode:o}}function H(t){if(!Array.isArray(t))return t;let[e]=t;return{messages:t.map(({sendMode:o,...s})=>s),sendMode:e?.sendMode??G}}function M(t){return t.map((e)=>{let n=e.payload?j.fromBase64(e.payload):void 0,o=e.stateInit?pt(j.fromBase64(e.stateInit).asSlice()):void 0,s=f.parse(e.address),i=f.isFriendly(e.address)?f.parseFriendly(e.address).isBounceable:!0;return ft({body:n,bounce:i,init:o,to:s,value:BigInt(e.amount)})})}async function P(t){let e=await O(),n=await S();if(!n||!e)throw new g("core_wallet_connection_not_found");let o=await l(),{state:s}=await o.getContractState(n.address),i=s==="active",c=i?await n.getSeqno():0,{messages:u,sendMode:w}=H(t),y=n.createTransfer({messages:M(u),secretKey:e.secretKey,sendMode:w,seqno:c}),A=ut({body:y,init:i?void 0:n.init,to:n.address});return x().store(Tt(A)).endCell()}async function B(t){return await(await l()).sendFile(t.toBoc()),t.hash().toString("hex")}async function W(t){let e=await P(t);return B(e)}async function X({assetValue:t,recipient:e,memo:n,sweep:o}){let s=await R({assetValue:t,memo:n,recipient:e,sweep:o});return W(s)}async function Z({sender:t,...e}){let{baseDecimal:n}=q(T.Ton),o=await F(t).with(E.string,(c)=>f.parseFriendly(c).address).otherwise(async()=>(await S()).address);if(!o)throw new g("toolbox_fee_estimation_failed",{chain:T.Ton});let s=at.from({chain:T.Ton,value:"0.01"}),i=await l();try{let c=await R({sender:t,...e}),u=await O(),w=await S();if(!w||!u)return s;let y=await w.getSeqno(),A=w.createTransfer({messages:M(c.messages),secretKey:u.secretKey,sendMode:c.sendMode,seqno:y}),{source_fees:_}=await i.estimateExternalMessageFee(o,{body:A,ignoreSignature:!0,initCode:null,initData:null}),b=_.in_fwd_fee+_.storage_fee+_.gas_fee+_.fwd_fee;return s.set(lt.fromBigInt(BigInt(b),n))}catch{return s}}async function I({jettonMasterAddress:t,ownerAddress:e}){let n=await l();try{let o=f.parse(t),s=f.parse(e),i=`${o.toRawString()}:${s.toRawString()}`,c=C.get(i);if(c)return c;let{JettonMaster:u}=await import("@ton/ton"),y=await n.open(u.create(o)).getWalletAddress(s);return C.set(i,y),y}catch(o){throw v(o,{jettonMasterAddress:t,ownerAddress:e})}}async function tt(t){let e=await l();try{let{JettonWallet:n}=await import("@ton/ton");return await e.open(n.create(t)).getBalance()}catch(n){throw v(n,{jettonWalletAddress:t.toString()})}}function et({jettonAmount:t,destinationAddress:e,responseAddress:n,forwardAmount:o=gt,forwardPayload:s}){let i=x().storeUint(wt,32).storeUint(0,64).storeCoins(t).storeAddress(e).storeAddress(n).storeBit(0).storeCoins(o);if(s)i.storeBit(1).storeRef(s);else i.storeBit(0);return i.endCell()}function D(t){return x().storeUint(0,32).storeStringTail(t).endCell()}return{broadcastTransaction:B,createTransaction:R,estimateTransactionFee:Z,getAddress:m,getBalance:V,getJettonWalletAddress:I,sign:P,signAndBroadcastTransaction:W,transfer:X,validateAddress:Nt}}function Nt(r){try{return f.parse(r),!0}catch{return!1}}export{Mt as getTONToolbox,Nt as validateTonAddress};
|
package/dist/src/tron/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../../chunk-exyqap7m.js";import{hexToBytes as un}from"@noble/hashes/utils.js";import{Chain as fn,getRPCUrlSync as ln,SwapKitError as y,warnOnce as K}from"@swapkit/helpers";import{secp256k1 as _t}from"@noble/curves/secp256k1.js";import{sha256 as Tt}from"@noble/hashes/sha2.js";import{keccak_256 as nn}from"@noble/hashes/sha3.js";import{bytesToHex as S,hexToBytes as M}from"@noble/hashes/utils.js";import{createBase58check as en}from"@scure/base";import{SwapKitError as mt}from"@swapkit/helpers";var L=en(Tt),wt=65,rn=2n**256n;function b(n){if(typeof n!=="string")return!1;try{let t=L.decode(n);return t.length===21&&t[0]===wt}catch{return!1}}function z(n){return S(L.decode(n))}function on(n){return L.decode(n).slice(1)}function pt(n){let t=_t.getPublicKey(M(n),!1),e=nn(t.slice(1)).slice(-20),r=new Uint8Array(21);return r[0]=wt,r.set(e,1),L.encode(r)}function yt({txID:n,privateKey:t}){let e=_t.sign(M(n),M(t),{format:"recovered",prehash:!1}),r=e[0]??0,i=S(e.slice(1,33)),o=S(e.slice(33,65)),c=(r+27).toString(16).padStart(2,"0");return i+o+c}function N({txID:n,raw_data_hex:t}){let e=S(Tt(M(t)));if(n!==e)throw new mt("toolbox_tron_invalid_transaction_integrity",{expected:e,txID:n})}function an(n){return`000000000000000000000000${S(on(n))}`}function sn(n){let t=typeof n==="bigint"?n:BigInt(n);if(t<0n||t>=rn)throw new mt("toolbox_tron_invalid_token_identifier",{identifier:t.toString()});return t.toString(16).padStart(64,"0")}function R(n){return n.map(({type:t,value:e})=>t==="address"?an(e):sn(BigInt(e))).join("")}function cn(n){return S(new TextEncoder().encode(n))}var dn=/^0x(?:[0-9a-fA-F]{2})+$/;function J(n){return dn.test(n)?n.slice(2):cn(n)}var bt="https://api.trongrid.io",gn=1000,_n=1e5,Tn=1e6,mn=420,wn=1e6,pn=30000,yn=2147483647;function xt(){try{return ln(fn.Tron)}catch{return bt}}function At(n){let t=n!==void 0&&Number.isFinite(n)&&n>0?Math.min(n,yn):pn,e=new AbortController,r=setTimeout(()=>e.abort(),t);return{cleanup:()=>clearTimeout(r),signal:e.signal}}function tt(n){if(!n||typeof n!=="object")return;let{Error:t}=n;return typeof t==="string"&&t.length>0?t:void 0}function hn(n){if(!n)return;if(n.length%2!==0||!/^[0-9a-f]+$/i.test(n))return n;try{let t=new TextDecoder().decode(un(n));return/^[ -~]+$/.test(t)?t:n}catch{return n}}function Et(n,t){if(typeof n!=="string")return!1;if(n===t)return!0;try{return n.toLowerCase()===z(t).toLowerCase()}catch{return!1}}function Z(n){let t=typeof n==="number"?n:typeof n==="string"&&n.trim()!==""?Number(n):Number.NaN;return Number.isSafeInteger(t)&&t>=0?t:void 0}function C(n){let t=Z(n);return t!==void 0&&t>0?t:void 0}function Q(n,t){let e=Z(n),r=Z(t);if(n!==void 0&&e===void 0||t!==void 0&&r===void 0)return 0;return Math.max(0,(e??0)-(r??0))}async function v(n,t,e){let{signal:r,cleanup:i}=At(e);try{let o=await fetch(`${xt()}${n}`,{body:JSON.stringify(t),headers:{"Content-Type":"application/json"},method:"POST",signal:r});if(!o.ok)throw new y("toolbox_tron_trongrid_api_error",{message:`${o.status} ${o.statusText} on ${n}`});return await o.json()}finally{i()}}async function vt(n,t,e){let{signal:r,cleanup:i}=At(e);try{let o=await fetch(`${t??xt()}${n}`,{headers:{"Content-Type":"application/json"},signal:r});if(!o.ok)throw new y("toolbox_tron_trongrid_api_error",{message:`${o.status} ${o.statusText} on ${n}`});return await o.json()}finally{i()}}async function O(n){if(!b(n))throw new y("toolbox_tron_trongrid_api_error",{address:n,message:"Invalid address"});try{let t=await vt(`/v1/accounts/${n}`,bt);if(!(t.success&&t.data)||t.data.length===0)return;let e=t.data.find((r)=>Et(r.address,n));if(!e)return;return{balance:e.balance,trc20:e.trc20||[]}}catch(t){if(t instanceof y)throw t;throw new y("toolbox_tron_trongrid_api_error",{message:t instanceof Error?t.message:"Unknown error"})}}var bn="/wallet/createtransaction";async function Ft({from:n,to:t,amount:e}){let i=await v(bn,{amount:e,owner_address:n,to_address:t,visible:!0});if(!i.txID||!i.raw_data_hex||!i.raw_data)throw new y({errorKey:"toolbox_tron_transaction_creation_failed",info:{error:tt(i)??"Node returned no transaction"}});let c=i.raw_data?.contract?.[0]?.parameter?.value;if(c?.to_address!==t||c?.owner_address!==n||c?.amount!==e)throw new y({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"Node returned a transaction that does not match the requested transfer"}});return N(i),i}var xn="/wallet/triggersmartcontract";async function St({ownerAddress:n,contractAddress:t,functionSelector:e,parameter:r,feeLimit:i,callValue:o=0}){let c=await v(xn,{call_value:o,contract_address:t,fee_limit:i,function_selector:e,owner_address:n,parameter:r,visible:!0});if(!c.result?.result||!c.transaction?.txID||!c.transaction?.raw_data_hex)throw new y({errorKey:"toolbox_tron_transaction_creation_failed",info:{code:c.result?.code,error:tt(c)??"Node returned no transaction",message:hn(c.result?.message)}});let T=c.transaction.raw_data?.contract?.[0]?.parameter?.value;if(T?.contract_address!==t||T?.owner_address!==n)throw new y({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"Node returned a transaction that does not match the requested contract call"}});return N(c.transaction),c.transaction}function Nt({ownerAddress:n,contractAddress:t,functionSelector:e,parameter:r}){return v("/wallet/triggerconstantcontract",{contract_address:t,function_selector:e,owner_address:n,parameter:r,visible:!0})}function An({ownerAddress:n,contractAddress:t,functionSelector:e,parameter:r}){return v("/wallet/estimateenergy",{contract_address:t,function_selector:e,owner_address:n,parameter:r,visible:!0})}function ht(n){let t=typeof n==="number"?n:typeof n==="string"?Number(n):Number.NaN;return Number.isFinite(t)&&t>0?t:void 0}async function k(n){try{let{result:t,txid:e}=await v("/wallet/broadcasttransaction",{raw_data:n.raw_data,raw_data_hex:n.raw_data_hex,signature:n.signature,txID:n.txID,visible:n.visible});if(!t||!e)throw new y("toolbox_tron_token_transfer_failed");return e}catch(t){throw new y("toolbox_tron_broadcast_failed",{error:t})}}async function I({timeoutMs:n}={}){let t={};try{let{chainParameter:e}=await vt("/wallet/getchainparameters",void 0,n);for(let r of e)if(r&&typeof r.key==="string")t[r.key]=r.value}catch(e){K({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${e instanceof Error?e.message:e}`})}return{bandwidthFee:C(t.getTransactionFee)??gn,createAccountBandwidthFee:C(t.getCreateAccountFee)??_n,createAccountFee:C(t.getCreateNewAccountFeeInSystemContract)??Tn,energyFee:C(t.getEnergyFee)??mn,memoFee:C(t.getMemoFee)??wn}}async function nt(n){try{let t=await v("/wallet/getaccountresource",{address:n,visible:!0});return{bandwidth:{free:Q(t.freeNetLimit,t.freeNetUsed),staked:Q(t.NetLimit,t.NetUsed)},energy:Q(t.EnergyLimit,t.EnergyUsed)}}catch(t){return K({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, assuming none available: ${t instanceof Error?t.message:t}`}),{bandwidth:{free:0,staked:0},energy:0}}}async function G(n,t={}){return await W(n,t)==="exists"}async function W(n,{timeoutMs:t}={}){if(!b(n))return"missing";try{let e=await v("/wallet/getaccount",{address:n,visible:!0},t);if(!e||typeof e!=="object"||Array.isArray(e)||tt(e))return"unknown";if(Et(e.address,n))return"exists";return Object.keys(e).length===0?"missing":"unknown"}catch{return"unknown"}}async function et(n){try{let t=await An({...n,ownerAddress:n.sender}),e=t.energy_required??t.energyRequired;if(t.result&&!t.result.result)throw new y("toolbox_tron_trongrid_api_error",{message:t.result.message||"estimateenergy failed"});if(e!==void 0){let r=ht(e);if(r!==void 0)return r;throw new y("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(t){K({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${t instanceof Error?t.message:t}`})}try{let{energy_used:t}=await Nt({...n,ownerAddress:n.sender}),e=ht(t);if(e!==void 0)return e;throw new y("toolbox_tron_trongrid_api_error",{message:"Invalid triggerconstantcontract energy response"})}catch(t){throw K({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy: ${t instanceof Error?t.message:t}`}),new y("toolbox_tron_trongrid_api_error",{message:`Unable to estimate contract energy: ${t instanceof Error?t.message:t}`})}}async function Rt({assetAddress:n,owner:t,spender:e}){let r=R([{type:"address",value:t},{type:"address",value:e}]),o=(await Nt({contractAddress:n,functionSelector:"allowance(address,address)",ownerAddress:e,parameter:r})).constant_result?.[0];if(!o)return 0n;try{return BigInt(`0x${o}`)}catch{return 0n}}import{bytesToHex as In}from"@noble/hashes/utils.js";import{HDKey as Pn}from"@scure/bip32";import{mnemonicToSeedSync as Bn}from"@scure/bip39";import{AssetValue as B,Chain as x,derivationPathToString as Mt,getChainConfig as Cn,getRPCUrl as kn,NetworkDerivationPath as Lt,SwapKitError as _,updateDerivationPath as Kt,warnOnce as j}from"@swapkit/helpers";import{match as Dn,P as ot}from"ts-pattern";import{sha256 as En}from"@noble/hashes/sha2.js";import{bytesToHex as It,hexToBytes as Pt}from"@noble/hashes/utils.js";import{SwapKitError as P}from"@swapkit/helpers";var V=0,Bt=1,q=2,Ct=5,vn=8,Fn=10,Sn=18;function rt(n,t){let e=0n,r=0n,i=t;while(i<n.length&&i-t<10){let o=n[i++];if(o===void 0)break;if(e|=BigInt(o&127)<<r,r+=7n,(o&128)===0)return[e,i]}throw new P({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"Malformed varint in transaction raw_data"}})}function D(n){let t=[],e=n<0n?n+2n**64n:n;while(e>=128n)t.push(Number(e&0x7fn)|128),e>>=7n;return t.push(Number(e)),t}function H(n,t,e){let r=n.get(t);if(r)r.push(e);else n.set(t,[e])}function Nn(n){let t=new Map,e=0;while(e<n.length){let[r,i]=rt(n,e);e=i;let o=Number(r>>3n),c=Number(r&7n);if(c===V){let[m,T]=rt(n,e);e=T,H(t,o,{data:new Uint8Array(D(m)),wireType:V})}else if(c===q){let[m,T]=rt(n,e);e=T;let A=Number(m);if(A<0||e+A>n.length)throw new P({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"Length-delimited proto field overruns transaction raw_data"}});let U=n.slice(e,e+A);e+=A,H(t,o,{data:U,wireType:q})}else if(c===Bt){if(e+8>n.length)throw new P({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"64-bit proto field overruns transaction raw_data"}});let m=n.slice(e,e+8);e+=8,H(t,o,{data:m,wireType:Bt})}else if(c===Ct){if(e+4>n.length)throw new P({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"32-bit proto field overruns transaction raw_data"}});let m=n.slice(e,e+4);e+=4,H(t,o,{data:m,wireType:Ct})}else throw new P({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"Unsupported proto wire type in transaction raw_data"}})}return t}function Rn(n){let t=[];for(let[o,c]of[...n.entries()].sort(([m],[T])=>m-T))for(let{wireType:m,data:T}of c){let A=BigInt(o<<3|m);if(t.push(new Uint8Array(D(A))),m===q)t.push(new Uint8Array(D(BigInt(T.length))));t.push(T)}let e=t.reduce((o,c)=>o+c.length,0),r=new Uint8Array(e),i=0;for(let o of t)r.set(o,i),i+=o.length;return r}function kt(n,t){if(!n||n.length%2!==0)throw new P({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"Transaction raw_data_hex is empty or not byte-aligned"}});let e=Pt(n),r=Nn(e);if(t.expiration!==void 0)r.set(vn,[{data:new Uint8Array(D(BigInt(t.expiration))),wireType:V}]);if(t.data!==void 0)r.set(Fn,[{data:Pt(t.data),wireType:q}]);if(t.fee_limit!==void 0)r.set(Sn,[{data:new Uint8Array(D(BigInt(t.fee_limit))),wireType:V}]);let i=Rn(r),o=It(i),c=It(En(i));return{raw_data_hex:o,txID:c}}var Un=b,Mn=Cn(x.Tron).baseDecimal,Ln=64,Kn=67,On=139,Ot=211;function Dt(n){let t=1,e=n>>7n;while(e>0n)t+=1,e>>=7n;return t}var $t=65000,it=25000,at="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",$n="115792089237316195423570985008687907853269984665640564039457584007913129639935",st=2500,X=(n)=>B.from({chain:x.Tron,fromBaseDecimal:Mn,value:n}),ct=(n,t)=>t?n.memoFee:0;function dt(n,t){let e=n;if(t){let r=J(t).length/2;e+=1+Dt(BigInt(r))+r}return e+1+Dt(BigInt(e))+Kn+Ln}function Gt({bandwidthFee:n,pools:t,requiredBytes:e}){return t.staked>=e||t.free>=e?0:e*n}function Wt({bandwidth:n={free:0,staked:0},chainParams:t,memo:e,recipientStatus:r}){let i=ct(t,e),o=t.createAccountFee+t.createAccountBandwidthFee,c=Gt({bandwidthFee:t.bandwidthFee,pools:n,requiredBytes:dt(On,e)});if(r==="exists")return c+i;if(r==="missing")return o+i;return Math.max(o,c)+i}async function Ht(n,t){let e=n||$t,r=t??(await I()).energyFee,i=e*r,o=Math.ceil(i*1.5);return Math.min(Math.max(o,1e7),150000000)}async function Vt({assetValue:n,memo:t,recipient:e,timeoutMs:r}){let[i,o]=await Promise.all([I({timeoutMs:r}),W(e,{timeoutMs:r})]);if(j({condition:n.chain!==x.Tron,id:"tron_conservative_fee_foreign_asset",warning:"Non-Tron asset passed to the Tron fee estimate; reserving the TRC-20 fee"}),n.chain===x.Tron&&n.isGasAsset)return X(Wt({chainParams:i,memo:t,recipientStatus:o}));let m=await Ht($t+(o==="exists"?0:it),i.energyFee),T=ct(i,t);return X(m+dt(Ot,t)*i.bandwidthFee+T)}async function Gn({assetValue:n,recipient:t,memo:e,timeoutMs:r=st}){return j({condition:!b(t),id:"tron_sweep_deduction_invalid_recipient",warning:"Invalid Tron sweep recipient; assuming the account needs activation"}),await Vt({assetValue:n,memo:e==null?void 0:String(e),recipient:t,timeoutMs:Number.isFinite(r)&&r>0?r:st})}function qt({phrase:n,derivationPath:t}){let e=Pn.fromMasterSeed(Bn(n)).derive(t);if(!e.privateKey)throw new _("toolbox_tron_no_signer");return In(e.privateKey)}function Wn(n,t){return{...n,value:String(t)}}function Hn(n,t){if(!t)return n;return{...n,data:t.startsWith("0x")?t:`0x${t}`}}function Vn({phrase:n,derivationPath:t,index:e}){let r=t||Mt(Kt(Lt[x.Tron],{index:e||0}));return qt({derivationPath:r,phrase:n})}function qn({phrase:n,derivationPath:t}){let e=qt({derivationPath:t,phrase:n}),r=pt(e);return{getAddress:()=>Promise.resolve(r),signTransaction:(i)=>{N(i);let o=yt({privateKey:e,txID:i.txID});return Promise.resolve({...i,signature:[o]})}}}function Ut({transaction:n,memo:t,expiration:e,feeLimit:r}){let i={},o={};if(r!==void 0&&n.raw_data)i.fee_limit=r,o.fee_limit=r;if(t){let T=J(t);i.data=T,o.data=T}if(e){let T=n.raw_data.expiration+e*1000;i.expiration=T,o.expiration=T}if(Object.keys(i).length===0)return n;let{raw_data_hex:c,txID:m}=kt(n.raw_data_hex,i);return{...n,raw_data:{...n.raw_data,...o},raw_data_hex:c,txID:m}}function jn(n={}){let t="index"in n?n.index||0:0,e=Mt("derivationPath"in n&&n.derivationPath?n.derivationPath:Kt(Lt[x.Tron],{index:t})),r,i=!1;function o(){if(i)return Promise.resolve(r);return r=Dn(n).with({phrase:ot.string},({phrase:a})=>qn({derivationPath:e,phrase:a})).with({signer:ot.not(ot.nullish)},({signer:a})=>a).otherwise(()=>{return}),i=!0,Promise.resolve(r)}async function c(){let a=await o();if(!a)throw new _("toolbox_tron_no_signer");return a.getAddress()}async function m({contractAddress:a,functionSelector:s,parameter:d,sender:u,memo:f,expiration:l,extraEnergy:g=0}){let w=await et({contractAddress:a,functionSelector:s,parameter:d,sender:u}),p=await Ht(w+g),h=await St({contractAddress:a,feeLimit:p,functionSelector:s,ownerAddress:u,parameter:d});return Ut({expiration:l,feeLimit:p,memo:f,transaction:h})}async function T(a){if(!b(a))return[B.from({chain:x.Tron})];try{let s=await O(a);if(!s)return[B.from({chain:x.Tron})];let d=[B.from({chain:x.Tron,fromBaseDecimal:6,value:String(s.balance)})],u=s.trc20?.find((f)=>(at in f));if(u){let f=u[at];d.push(B.from({asset:`TRON.USDT-${at}`,fromBaseDecimal:6,value:f}))}return d}catch(s){return j({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${s instanceof Error?s.message:s}`}),[B.from({chain:x.Tron})]}}async function A({recipient:a,assetValue:s,memo:d,expiration:u,sweep:f}){if(!b(a))throw new _("toolbox_tron_token_transfer_failed",{message:"invalid address"});let l=await o();if(!l)throw new _("toolbox_tron_no_signer");try{let g=await c(),w=await ft({assetValue:s,expiration:u,memo:d,recipient:a,sender:g,sweep:f}),p=await l.signTransaction(w),h=await k(p);if(!h)throw new _("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return h}catch(g){if(g instanceof _&&g.errorKey==="toolbox_sweep_amount_too_low")throw g;throw new _("toolbox_tron_token_transfer_failed",{message:g instanceof Error?g.message:String(g)})}}async function U({memo:a,recipient:s,senderAddress:d}){let[u,f,l]=await Promise.all([I(),W(s),nt(d)]);return X(Wt({bandwidth:l.bandwidth,chainParams:u,memo:a,recipientStatus:f}))}async function ut({assetValue:a,amountInBaseUnits:s=a.getBaseValue("string"),memo:d,recipient:u,senderAddress:f}){let l=a.address;if(!l)throw new _("toolbox_tron_invalid_token_identifier",{identifier:a.toString()});let[g,w,p,h]=await Promise.all([I(),G(u),nt(f),et({contractAddress:l,functionSelector:"transfer(address,uint256)",parameter:R([{type:"address",value:u},{type:"uint256",value:s}]),sender:f})]),F=h+(w?0:it),Y=Gt({bandwidthFee:g.bandwidthFee,pools:p.bandwidth,requiredBytes:dt(Ot,d)}),Zt=Math.max(0,F-p.energy)*g.energyFee,tn=ct(g,d);return X(Y+Zt+tn)}async function jt({assetValue:a,memo:s,recipient:d,sender:u}){let f=await o();try{let l=u?u:f?await c():void 0;if(!l)return Vt({assetValue:a,memo:s,recipient:d});return a.isGasAsset?U({memo:s,recipient:d,senderAddress:l}):ut({assetValue:a,memo:s,recipient:d,senderAddress:l})}catch(l){throw j({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${l instanceof Error?l.message:l}`}),new _("toolbox_fee_estimation_failed",{chain:x.Tron,error:l})}}async function Xt({assetValue:a,memo:s,recipient:d,sender:u,sweep:f}){if(!f)return a.getBaseValue("bigint");let[l,g]=await Promise.all([O(u),U({memo:s,recipient:d,senderAddress:u})]),w=BigInt(l?.balance??0)-g.getBaseValue("bigint");if(w<=0n)throw new _({errorKey:"toolbox_sweep_amount_too_low",info:{amount:w.toString(),asset:a.toString()}});return w}async function Yt({assetValue:a,memo:s,recipient:d,sender:u,sweep:f}){if(!f)return a.getBaseValue("string");let l=a.address;if(!l)throw new _("toolbox_tron_invalid_token_identifier",{identifier:a.toString()});let g=await O(u),p=g?.trc20.find((Y)=>(l in Y))?.[l]??"0";if(BigInt(p)<=0n)throw new _({errorKey:"toolbox_sweep_amount_too_low",info:{asset:a.toString(),balance:p}});let h=await ut({amountInBaseUnits:p,assetValue:a,memo:s,recipient:d,senderAddress:u}),E=BigInt(g?.balance??0),F=h.getBaseValue("bigint");if(E<F)throw new _({errorKey:"toolbox_sweep_amount_too_low",info:{asset:a.toString(),nativeBalance:E.toString(),requiredNativeFee:F.toString()}});return p}async function ft({recipient:a,assetValue:s,memo:d,sender:u,expiration:f,sweep:l,recipientExists:g}){if(!b(a)||!b(u))throw new _("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(s.isGasAsset){let E=await Xt({assetValue:s,expiration:f,memo:d,recipient:a,sender:u,sweep:l});if(E>BigInt(Number.MAX_SAFE_INTEGER))throw new _({errorKey:"toolbox_tron_transaction_creation_failed",info:{amount:E.toString(),reason:`Native transfer amount exceeds the safe integer limit of ${Number.MAX_SAFE_INTEGER} SUN`}});let F=await Ft({amount:Number(E),from:u,to:a});return Ut({expiration:f,memo:d,transaction:F})}let w=s.address;if(!w)throw new _("toolbox_tron_invalid_token_identifier",{identifier:s.toString()});let p=await Yt({assetValue:s,expiration:f,memo:d,recipient:a,sender:u,sweep:l}),h=g??await G(a);return m({contractAddress:w,expiration:f,extraEnergy:h?0:it,functionSelector:"transfer(address,uint256)",memo:d,parameter:R([{type:"address",value:a},{type:"uint256",value:p}]),sender:u})}async function lt(a){N(a);let s=await o();if(!s)throw new _("toolbox_tron_no_signer");return s.signTransaction(a)}async function zt(a){let s=await lt(a);return k(s)}function gt({assetAddress:a,spenderAddress:s,from:d}){return Rt({assetAddress:a,owner:d,spender:s})}async function Jt({assetAddress:a,spenderAddress:s,from:d,amount:u}){let f=await gt({assetAddress:a,from:d,spenderAddress:s});if(!u)return f>0n;return f>=BigInt(u)}async function Qt({assetAddress:a,spenderAddress:s,amount:d,from:u}){if(!b(a)||!b(s))throw new _("toolbox_tron_approve_failed");let f=await o();if(!f)throw new _("toolbox_tron_no_signer");let l=u||await c(),g=d!==void 0?BigInt(d).toString():$n;try{let w=await m({contractAddress:a,functionSelector:"approve(address,uint256)",parameter:R([{type:"address",value:s},{type:"uint256",value:g}]),sender:l}),p=await f.signTransaction(w),h=await k(p);if(!h)throw new _("toolbox_tron_approve_failed");return h}catch(w){if(w instanceof _)throw w;throw new _("toolbox_tron_approve_failed",{error:w})}}return{approve:Qt,broadcastTransaction:k,createTransaction:ft,estimateTransactionFee:jt,getAddress:c,getApprovedAmount:gt,getBalance:T,getRpcUrl:()=>kn(x.Tron),isApproved:Jt,signAndBroadcastTransaction:zt,signTransaction:lt,transfer:A,validateAddress:b}}export{st as TRON_SWEEP_ESTIMATE_TIMEOUT_MS,G as checkTronAccountExists,Gn as estimateTronSweepDeduction,I as getTronChainParameters,Vn as getTronPrivateKeyFromMnemonic,jn as getTronToolbox,z as tronAddressToHex,Un as validateTronAddress,Hn as withTronTransactionData,Wn as withTronTransactionValue};
|
|
1
|
+
import"../../chunk-pz8xe0qj.js";import{hexToBytes as un}from"@noble/hashes/utils.js";import{Chain as fn,getRPCUrlSync as ln,SwapKitError as y,warnOnce as K}from"@swapkit/helpers";import{secp256k1 as _t}from"@noble/curves/secp256k1.js";import{sha256 as Tt}from"@noble/hashes/sha2.js";import{keccak_256 as nn}from"@noble/hashes/sha3.js";import{bytesToHex as S,hexToBytes as M}from"@noble/hashes/utils.js";import{createBase58check as en}from"@scure/base";import{SwapKitError as mt}from"@swapkit/helpers";var L=en(Tt),wt=65,rn=2n**256n;function b(n){if(typeof n!=="string")return!1;try{let t=L.decode(n);return t.length===21&&t[0]===wt}catch{return!1}}function z(n){return S(L.decode(n))}function on(n){return L.decode(n).slice(1)}function pt(n){let t=_t.getPublicKey(M(n),!1),e=nn(t.slice(1)).slice(-20),r=new Uint8Array(21);return r[0]=wt,r.set(e,1),L.encode(r)}function yt({txID:n,privateKey:t}){let e=_t.sign(M(n),M(t),{format:"recovered",prehash:!1}),r=e[0]??0,i=S(e.slice(1,33)),o=S(e.slice(33,65)),c=(r+27).toString(16).padStart(2,"0");return i+o+c}function N({txID:n,raw_data_hex:t}){let e=S(Tt(M(t)));if(n!==e)throw new mt("toolbox_tron_invalid_transaction_integrity",{expected:e,txID:n})}function an(n){return`000000000000000000000000${S(on(n))}`}function sn(n){let t=typeof n==="bigint"?n:BigInt(n);if(t<0n||t>=rn)throw new mt("toolbox_tron_invalid_token_identifier",{identifier:t.toString()});return t.toString(16).padStart(64,"0")}function R(n){return n.map(({type:t,value:e})=>t==="address"?an(e):sn(BigInt(e))).join("")}function cn(n){return S(new TextEncoder().encode(n))}var dn=/^0x(?:[0-9a-fA-F]{2})+$/;function J(n){return dn.test(n)?n.slice(2):cn(n)}var bt="https://api.trongrid.io",gn=1000,_n=1e5,Tn=1e6,mn=420,wn=1e6,pn=30000,yn=2147483647;function xt(){try{return ln(fn.Tron)}catch{return bt}}function At(n){let t=n!==void 0&&Number.isFinite(n)&&n>0?Math.min(n,yn):pn,e=new AbortController,r=setTimeout(()=>e.abort(),t);return{cleanup:()=>clearTimeout(r),signal:e.signal}}function tt(n){if(!n||typeof n!=="object")return;let{Error:t}=n;return typeof t==="string"&&t.length>0?t:void 0}function hn(n){if(!n)return;if(n.length%2!==0||!/^[0-9a-f]+$/i.test(n))return n;try{let t=new TextDecoder().decode(un(n));return/^[ -~]+$/.test(t)?t:n}catch{return n}}function Et(n,t){if(typeof n!=="string")return!1;if(n===t)return!0;try{return n.toLowerCase()===z(t).toLowerCase()}catch{return!1}}function Z(n){let t=typeof n==="number"?n:typeof n==="string"&&n.trim()!==""?Number(n):Number.NaN;return Number.isSafeInteger(t)&&t>=0?t:void 0}function C(n){let t=Z(n);return t!==void 0&&t>0?t:void 0}function Q(n,t){let e=Z(n),r=Z(t);if(n!==void 0&&e===void 0||t!==void 0&&r===void 0)return 0;return Math.max(0,(e??0)-(r??0))}async function v(n,t,e){let{signal:r,cleanup:i}=At(e);try{let o=await fetch(`${xt()}${n}`,{body:JSON.stringify(t),headers:{"Content-Type":"application/json"},method:"POST",signal:r});if(!o.ok)throw new y("toolbox_tron_trongrid_api_error",{message:`${o.status} ${o.statusText} on ${n}`});return await o.json()}finally{i()}}async function vt(n,t,e){let{signal:r,cleanup:i}=At(e);try{let o=await fetch(`${t??xt()}${n}`,{headers:{"Content-Type":"application/json"},signal:r});if(!o.ok)throw new y("toolbox_tron_trongrid_api_error",{message:`${o.status} ${o.statusText} on ${n}`});return await o.json()}finally{i()}}async function O(n){if(!b(n))throw new y("toolbox_tron_trongrid_api_error",{address:n,message:"Invalid address"});try{let t=await vt(`/v1/accounts/${n}`,bt);if(!(t.success&&t.data)||t.data.length===0)return;let e=t.data.find((r)=>Et(r.address,n));if(!e)return;return{balance:e.balance,trc20:e.trc20||[]}}catch(t){if(t instanceof y)throw t;throw new y("toolbox_tron_trongrid_api_error",{message:t instanceof Error?t.message:"Unknown error"})}}var bn="/wallet/createtransaction";async function Ft({from:n,to:t,amount:e}){let i=await v(bn,{amount:e,owner_address:n,to_address:t,visible:!0});if(!i.txID||!i.raw_data_hex||!i.raw_data)throw new y({errorKey:"toolbox_tron_transaction_creation_failed",info:{error:tt(i)??"Node returned no transaction"}});let c=i.raw_data?.contract?.[0]?.parameter?.value;if(c?.to_address!==t||c?.owner_address!==n||c?.amount!==e)throw new y({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"Node returned a transaction that does not match the requested transfer"}});return N(i),i}var xn="/wallet/triggersmartcontract";async function St({ownerAddress:n,contractAddress:t,functionSelector:e,parameter:r,feeLimit:i,callValue:o=0}){let c=await v(xn,{call_value:o,contract_address:t,fee_limit:i,function_selector:e,owner_address:n,parameter:r,visible:!0});if(!c.result?.result||!c.transaction?.txID||!c.transaction?.raw_data_hex)throw new y({errorKey:"toolbox_tron_transaction_creation_failed",info:{code:c.result?.code,error:tt(c)??"Node returned no transaction",message:hn(c.result?.message)}});let T=c.transaction.raw_data?.contract?.[0]?.parameter?.value;if(T?.contract_address!==t||T?.owner_address!==n)throw new y({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"Node returned a transaction that does not match the requested contract call"}});return N(c.transaction),c.transaction}function Nt({ownerAddress:n,contractAddress:t,functionSelector:e,parameter:r}){return v("/wallet/triggerconstantcontract",{contract_address:t,function_selector:e,owner_address:n,parameter:r,visible:!0})}function An({ownerAddress:n,contractAddress:t,functionSelector:e,parameter:r}){return v("/wallet/estimateenergy",{contract_address:t,function_selector:e,owner_address:n,parameter:r,visible:!0})}function ht(n){let t=typeof n==="number"?n:typeof n==="string"?Number(n):Number.NaN;return Number.isFinite(t)&&t>0?t:void 0}async function k(n){try{let{result:t,txid:e}=await v("/wallet/broadcasttransaction",{raw_data:n.raw_data,raw_data_hex:n.raw_data_hex,signature:n.signature,txID:n.txID,visible:n.visible});if(!t||!e)throw new y("toolbox_tron_token_transfer_failed");return e}catch(t){throw new y("toolbox_tron_broadcast_failed",{error:t})}}async function I({timeoutMs:n}={}){let t={};try{let{chainParameter:e}=await vt("/wallet/getchainparameters",void 0,n);for(let r of e)if(r&&typeof r.key==="string")t[r.key]=r.value}catch(e){K({condition:!0,id:"tron_chain_params_failed",warning:`Failed to fetch chain params, using defaults: ${e instanceof Error?e.message:e}`})}return{bandwidthFee:C(t.getTransactionFee)??gn,createAccountBandwidthFee:C(t.getCreateAccountFee)??_n,createAccountFee:C(t.getCreateNewAccountFeeInSystemContract)??Tn,energyFee:C(t.getEnergyFee)??mn,memoFee:C(t.getMemoFee)??wn}}async function nt(n){try{let t=await v("/wallet/getaccountresource",{address:n,visible:!0});return{bandwidth:{free:Q(t.freeNetLimit,t.freeNetUsed),staked:Q(t.NetLimit,t.NetUsed)},energy:Q(t.EnergyLimit,t.EnergyUsed)}}catch(t){return K({condition:!0,id:"tron_account_resources_failed",warning:`Failed to fetch account resources, assuming none available: ${t instanceof Error?t.message:t}`}),{bandwidth:{free:0,staked:0},energy:0}}}async function G(n,t={}){return await W(n,t)==="exists"}async function W(n,{timeoutMs:t}={}){if(!b(n))return"missing";try{let e=await v("/wallet/getaccount",{address:n,visible:!0},t);if(!e||typeof e!=="object"||Array.isArray(e)||tt(e))return"unknown";if(Et(e.address,n))return"exists";return Object.keys(e).length===0?"missing":"unknown"}catch{return"unknown"}}async function et(n){try{let t=await An({...n,ownerAddress:n.sender}),e=t.energy_required??t.energyRequired;if(t.result&&!t.result.result)throw new y("toolbox_tron_trongrid_api_error",{message:t.result.message||"estimateenergy failed"});if(e!==void 0){let r=ht(e);if(r!==void 0)return r;throw new y("toolbox_tron_trongrid_api_error",{message:"Invalid estimateenergy response"})}}catch(t){K({condition:!0,id:"tron_energy_estimation_failed",warning:`Failed to estimate energy with estimateenergy, falling back to triggerconstantcontract: ${t instanceof Error?t.message:t}`})}try{let{energy_used:t}=await Nt({...n,ownerAddress:n.sender}),e=ht(t);if(e!==void 0)return e;throw new y("toolbox_tron_trongrid_api_error",{message:"Invalid triggerconstantcontract energy response"})}catch(t){throw K({condition:!0,id:"tron_energy_estimation_fallback_failed",warning:`Failed to estimate energy: ${t instanceof Error?t.message:t}`}),new y("toolbox_tron_trongrid_api_error",{message:`Unable to estimate contract energy: ${t instanceof Error?t.message:t}`})}}async function Rt({assetAddress:n,owner:t,spender:e}){let r=R([{type:"address",value:t},{type:"address",value:e}]),o=(await Nt({contractAddress:n,functionSelector:"allowance(address,address)",ownerAddress:e,parameter:r})).constant_result?.[0];if(!o)return 0n;try{return BigInt(`0x${o}`)}catch{return 0n}}import{bytesToHex as In}from"@noble/hashes/utils.js";import{HDKey as Pn}from"@scure/bip32";import{mnemonicToSeedSync as Bn}from"@scure/bip39";import{AssetValue as B,Chain as x,derivationPathToString as Mt,getChainConfig as Cn,getRPCUrl as kn,NetworkDerivationPath as Lt,SwapKitError as _,updateDerivationPath as Kt,warnOnce as j}from"@swapkit/helpers";import{match as Dn,P as ot}from"ts-pattern";import{sha256 as En}from"@noble/hashes/sha2.js";import{bytesToHex as It,hexToBytes as Pt}from"@noble/hashes/utils.js";import{SwapKitError as P}from"@swapkit/helpers";var V=0,Bt=1,q=2,Ct=5,vn=8,Fn=10,Sn=18;function rt(n,t){let e=0n,r=0n,i=t;while(i<n.length&&i-t<10){let o=n[i++];if(o===void 0)break;if(e|=BigInt(o&127)<<r,r+=7n,(o&128)===0)return[e,i]}throw new P({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"Malformed varint in transaction raw_data"}})}function D(n){let t=[],e=n<0n?n+2n**64n:n;while(e>=128n)t.push(Number(e&0x7fn)|128),e>>=7n;return t.push(Number(e)),t}function H(n,t,e){let r=n.get(t);if(r)r.push(e);else n.set(t,[e])}function Nn(n){let t=new Map,e=0;while(e<n.length){let[r,i]=rt(n,e);e=i;let o=Number(r>>3n),c=Number(r&7n);if(c===V){let[m,T]=rt(n,e);e=T,H(t,o,{data:new Uint8Array(D(m)),wireType:V})}else if(c===q){let[m,T]=rt(n,e);e=T;let A=Number(m);if(A<0||e+A>n.length)throw new P({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"Length-delimited proto field overruns transaction raw_data"}});let U=n.slice(e,e+A);e+=A,H(t,o,{data:U,wireType:q})}else if(c===Bt){if(e+8>n.length)throw new P({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"64-bit proto field overruns transaction raw_data"}});let m=n.slice(e,e+8);e+=8,H(t,o,{data:m,wireType:Bt})}else if(c===Ct){if(e+4>n.length)throw new P({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"32-bit proto field overruns transaction raw_data"}});let m=n.slice(e,e+4);e+=4,H(t,o,{data:m,wireType:Ct})}else throw new P({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"Unsupported proto wire type in transaction raw_data"}})}return t}function Rn(n){let t=[];for(let[o,c]of[...n.entries()].sort(([m],[T])=>m-T))for(let{wireType:m,data:T}of c){let A=BigInt(o<<3|m);if(t.push(new Uint8Array(D(A))),m===q)t.push(new Uint8Array(D(BigInt(T.length))));t.push(T)}let e=t.reduce((o,c)=>o+c.length,0),r=new Uint8Array(e),i=0;for(let o of t)r.set(o,i),i+=o.length;return r}function kt(n,t){if(!n||n.length%2!==0)throw new P({errorKey:"toolbox_tron_transaction_creation_failed",info:{reason:"Transaction raw_data_hex is empty or not byte-aligned"}});let e=Pt(n),r=Nn(e);if(t.expiration!==void 0)r.set(vn,[{data:new Uint8Array(D(BigInt(t.expiration))),wireType:V}]);if(t.data!==void 0)r.set(Fn,[{data:Pt(t.data),wireType:q}]);if(t.fee_limit!==void 0)r.set(Sn,[{data:new Uint8Array(D(BigInt(t.fee_limit))),wireType:V}]);let i=Rn(r),o=It(i),c=It(En(i));return{raw_data_hex:o,txID:c}}var Un=b,Mn=Cn(x.Tron).baseDecimal,Ln=64,Kn=67,On=139,Ot=211;function Dt(n){let t=1,e=n>>7n;while(e>0n)t+=1,e>>=7n;return t}var $t=65000,it=25000,at="TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",$n="115792089237316195423570985008687907853269984665640564039457584007913129639935",st=2500,X=(n)=>B.from({chain:x.Tron,fromBaseDecimal:Mn,value:n}),ct=(n,t)=>t?n.memoFee:0;function dt(n,t){let e=n;if(t){let r=J(t).length/2;e+=1+Dt(BigInt(r))+r}return e+1+Dt(BigInt(e))+Kn+Ln}function Gt({bandwidthFee:n,pools:t,requiredBytes:e}){return t.staked>=e||t.free>=e?0:e*n}function Wt({bandwidth:n={free:0,staked:0},chainParams:t,memo:e,recipientStatus:r}){let i=ct(t,e),o=t.createAccountFee+t.createAccountBandwidthFee,c=Gt({bandwidthFee:t.bandwidthFee,pools:n,requiredBytes:dt(On,e)});if(r==="exists")return c+i;if(r==="missing")return o+i;return Math.max(o,c)+i}async function Ht(n,t){let e=n||$t,r=t??(await I()).energyFee,i=e*r,o=Math.ceil(i*1.5);return Math.min(Math.max(o,1e7),150000000)}async function Vt({assetValue:n,memo:t,recipient:e,timeoutMs:r}){let[i,o]=await Promise.all([I({timeoutMs:r}),W(e,{timeoutMs:r})]);if(j({condition:n.chain!==x.Tron,id:"tron_conservative_fee_foreign_asset",warning:"Non-Tron asset passed to the Tron fee estimate; reserving the TRC-20 fee"}),n.chain===x.Tron&&n.isGasAsset)return X(Wt({chainParams:i,memo:t,recipientStatus:o}));let m=await Ht($t+(o==="exists"?0:it),i.energyFee),T=ct(i,t);return X(m+dt(Ot,t)*i.bandwidthFee+T)}async function Gn({assetValue:n,recipient:t,memo:e,timeoutMs:r=st}){return j({condition:!b(t),id:"tron_sweep_deduction_invalid_recipient",warning:"Invalid Tron sweep recipient; assuming the account needs activation"}),await Vt({assetValue:n,memo:e==null?void 0:String(e),recipient:t,timeoutMs:Number.isFinite(r)&&r>0?r:st})}function qt({phrase:n,derivationPath:t}){let e=Pn.fromMasterSeed(Bn(n)).derive(t);if(!e.privateKey)throw new _("toolbox_tron_no_signer");return In(e.privateKey)}function Wn(n,t){return{...n,value:String(t)}}function Hn(n,t){if(!t)return n;return{...n,data:t.startsWith("0x")?t:`0x${t}`}}function Vn({phrase:n,derivationPath:t,index:e}){let r=t||Mt(Kt(Lt[x.Tron],{index:e||0}));return qt({derivationPath:r,phrase:n})}function qn({phrase:n,derivationPath:t}){let e=qt({derivationPath:t,phrase:n}),r=pt(e);return{getAddress:()=>Promise.resolve(r),signTransaction:(i)=>{N(i);let o=yt({privateKey:e,txID:i.txID});return Promise.resolve({...i,signature:[o]})}}}function Ut({transaction:n,memo:t,expiration:e,feeLimit:r}){let i={},o={};if(r!==void 0&&n.raw_data)i.fee_limit=r,o.fee_limit=r;if(t){let T=J(t);i.data=T,o.data=T}if(e){let T=n.raw_data.expiration+e*1000;i.expiration=T,o.expiration=T}if(Object.keys(i).length===0)return n;let{raw_data_hex:c,txID:m}=kt(n.raw_data_hex,i);return{...n,raw_data:{...n.raw_data,...o},raw_data_hex:c,txID:m}}function jn(n={}){let t="index"in n?n.index||0:0,e=Mt("derivationPath"in n&&n.derivationPath?n.derivationPath:Kt(Lt[x.Tron],{index:t})),r,i=!1;function o(){if(i)return Promise.resolve(r);return r=Dn(n).with({phrase:ot.string},({phrase:a})=>qn({derivationPath:e,phrase:a})).with({signer:ot.not(ot.nullish)},({signer:a})=>a).otherwise(()=>{return}),i=!0,Promise.resolve(r)}async function c(){let a=await o();if(!a)throw new _("toolbox_tron_no_signer");return a.getAddress()}async function m({contractAddress:a,functionSelector:s,parameter:d,sender:u,memo:f,expiration:l,extraEnergy:g=0}){let w=await et({contractAddress:a,functionSelector:s,parameter:d,sender:u}),p=await Ht(w+g),h=await St({contractAddress:a,feeLimit:p,functionSelector:s,ownerAddress:u,parameter:d});return Ut({expiration:l,feeLimit:p,memo:f,transaction:h})}async function T(a){if(!b(a))return[B.from({chain:x.Tron})];try{let s=await O(a);if(!s)return[B.from({chain:x.Tron})];let d=[B.from({chain:x.Tron,fromBaseDecimal:6,value:String(s.balance)})],u=s.trc20?.find((f)=>(at in f));if(u){let f=u[at];d.push(B.from({asset:`TRON.USDT-${at}`,fromBaseDecimal:6,value:f}))}return d}catch(s){return j({condition:!0,id:"tron_toolbox_get_balance_failed",warning:`Tron API getBalance failed: ${s instanceof Error?s.message:s}`}),[B.from({chain:x.Tron})]}}async function A({recipient:a,assetValue:s,memo:d,expiration:u,sweep:f}){if(!b(a))throw new _("toolbox_tron_token_transfer_failed",{message:"invalid address"});let l=await o();if(!l)throw new _("toolbox_tron_no_signer");try{let g=await c(),w=await ft({assetValue:s,expiration:u,memo:d,recipient:a,sender:g,sweep:f}),p=await l.signTransaction(w),h=await k(p);if(!h)throw new _("toolbox_tron_token_transfer_failed",{message:"broadcast failed"});return h}catch(g){if(g instanceof _&&g.errorKey==="toolbox_sweep_amount_too_low")throw g;throw new _("toolbox_tron_token_transfer_failed",{message:g instanceof Error?g.message:String(g)})}}async function U({memo:a,recipient:s,senderAddress:d}){let[u,f,l]=await Promise.all([I(),W(s),nt(d)]);return X(Wt({bandwidth:l.bandwidth,chainParams:u,memo:a,recipientStatus:f}))}async function ut({assetValue:a,amountInBaseUnits:s=a.getBaseValue("string"),memo:d,recipient:u,senderAddress:f}){let l=a.address;if(!l)throw new _("toolbox_tron_invalid_token_identifier",{identifier:a.toString()});let[g,w,p,h]=await Promise.all([I(),G(u),nt(f),et({contractAddress:l,functionSelector:"transfer(address,uint256)",parameter:R([{type:"address",value:u},{type:"uint256",value:s}]),sender:f})]),F=h+(w?0:it),Y=Gt({bandwidthFee:g.bandwidthFee,pools:p.bandwidth,requiredBytes:dt(Ot,d)}),Zt=Math.max(0,F-p.energy)*g.energyFee,tn=ct(g,d);return X(Y+Zt+tn)}async function jt({assetValue:a,memo:s,recipient:d,sender:u}){let f=await o();try{let l=u?u:f?await c():void 0;if(!l)return Vt({assetValue:a,memo:s,recipient:d});return a.isGasAsset?U({memo:s,recipient:d,senderAddress:l}):ut({assetValue:a,memo:s,recipient:d,senderAddress:l})}catch(l){throw j({condition:!0,id:"tron_toolbox_fee_estimation_failed",warning:`Failed to calculate exact fee: ${l instanceof Error?l.message:l}`}),new _("toolbox_fee_estimation_failed",{chain:x.Tron,error:l})}}async function Xt({assetValue:a,memo:s,recipient:d,sender:u,sweep:f}){if(!f)return a.getBaseValue("bigint");let[l,g]=await Promise.all([O(u),U({memo:s,recipient:d,senderAddress:u})]),w=BigInt(l?.balance??0)-g.getBaseValue("bigint");if(w<=0n)throw new _({errorKey:"toolbox_sweep_amount_too_low",info:{amount:w.toString(),asset:a.toString()}});return w}async function Yt({assetValue:a,memo:s,recipient:d,sender:u,sweep:f}){if(!f)return a.getBaseValue("string");let l=a.address;if(!l)throw new _("toolbox_tron_invalid_token_identifier",{identifier:a.toString()});let g=await O(u),p=g?.trc20.find((Y)=>(l in Y))?.[l]??"0";if(BigInt(p)<=0n)throw new _({errorKey:"toolbox_sweep_amount_too_low",info:{asset:a.toString(),balance:p}});let h=await ut({amountInBaseUnits:p,assetValue:a,memo:s,recipient:d,senderAddress:u}),E=BigInt(g?.balance??0),F=h.getBaseValue("bigint");if(E<F)throw new _({errorKey:"toolbox_sweep_amount_too_low",info:{asset:a.toString(),nativeBalance:E.toString(),requiredNativeFee:F.toString()}});return p}async function ft({recipient:a,assetValue:s,memo:d,sender:u,expiration:f,sweep:l,recipientExists:g}){if(!b(a)||!b(u))throw new _("toolbox_tron_transaction_creation_failed",{message:"invalid address"});if(s.isGasAsset){let E=await Xt({assetValue:s,expiration:f,memo:d,recipient:a,sender:u,sweep:l});if(E>BigInt(Number.MAX_SAFE_INTEGER))throw new _({errorKey:"toolbox_tron_transaction_creation_failed",info:{amount:E.toString(),reason:`Native transfer amount exceeds the safe integer limit of ${Number.MAX_SAFE_INTEGER} SUN`}});let F=await Ft({amount:Number(E),from:u,to:a});return Ut({expiration:f,memo:d,transaction:F})}let w=s.address;if(!w)throw new _("toolbox_tron_invalid_token_identifier",{identifier:s.toString()});let p=await Yt({assetValue:s,expiration:f,memo:d,recipient:a,sender:u,sweep:l}),h=g??await G(a);return m({contractAddress:w,expiration:f,extraEnergy:h?0:it,functionSelector:"transfer(address,uint256)",memo:d,parameter:R([{type:"address",value:a},{type:"uint256",value:p}]),sender:u})}async function lt(a){N(a);let s=await o();if(!s)throw new _("toolbox_tron_no_signer");return s.signTransaction(a)}async function zt(a){let s=await lt(a);return k(s)}function gt({assetAddress:a,spenderAddress:s,from:d}){return Rt({assetAddress:a,owner:d,spender:s})}async function Jt({assetAddress:a,spenderAddress:s,from:d,amount:u}){let f=await gt({assetAddress:a,from:d,spenderAddress:s});if(!u)return f>0n;return f>=BigInt(u)}async function Qt({assetAddress:a,spenderAddress:s,amount:d,from:u}){if(!b(a)||!b(s))throw new _("toolbox_tron_approve_failed");let f=await o();if(!f)throw new _("toolbox_tron_no_signer");let l=u||await c(),g=d!==void 0?BigInt(d).toString():$n;try{let w=await m({contractAddress:a,functionSelector:"approve(address,uint256)",parameter:R([{type:"address",value:s},{type:"uint256",value:g}]),sender:l}),p=await f.signTransaction(w),h=await k(p);if(!h)throw new _("toolbox_tron_approve_failed");return h}catch(w){if(w instanceof _)throw w;throw new _("toolbox_tron_approve_failed",{error:w})}}return{approve:Qt,broadcastTransaction:k,createTransaction:ft,estimateTransactionFee:jt,getAddress:c,getApprovedAmount:gt,getBalance:T,getRpcUrl:()=>kn(x.Tron),isApproved:Jt,signAndBroadcastTransaction:zt,signTransaction:lt,transfer:A,validateAddress:b}}export{st as TRON_SWEEP_ESTIMATE_TIMEOUT_MS,G as checkTronAccountExists,Gn as estimateTronSweepDeduction,I as getTronChainParameters,Vn as getTronPrivateKeyFromMnemonic,jn as getTronToolbox,z as tronAddressToHex,Un as validateTronAddress,Hn as withTronTransactionData,Wn as withTronTransactionValue};
|