@galacticcouncil/xc-sdk 1.2.0-pr328-030630f → 1.2.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.
@@ -1,4 +1,3 @@
1
- export * from './WormholeGovernor';
2
1
  export * from './WormholeScan';
3
2
  export * from './WormholeTransfer';
4
3
  export * from './types';
package/build/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var En=Object.create;var kt=Object.defineProperty;var In=Object.getOwnPropertyDescriptor;var Fn=Object.getOwnPropertyNames;var Dn=Object.getPrototypeOf,Rn=Object.prototype.hasOwnProperty;var kn=(u,t)=>{for(var e in t)kt(u,e,{get:t[e],enumerable:!0})},Be=(u,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Fn(t))!Rn.call(u,n)&&n!==e&&kt(u,n,{get:()=>t[n],enumerable:!(s=In(t,n))||s.enumerable});return u};var _n=(u,t,e)=>(e=u!=null?En(Dn(u)):{},Be(t||!u||!u.__esModule?kt(e,"default",{value:u,enumerable:!0}):e,u)),Vn=u=>Be(kt({},"__esModule",{value:!0}),u);var Gn={};kn(Gn,{DISPATCH_ADDRESS:()=>le,EvmClaim:()=>ft,EvmPlatform:()=>ht,EvmSigner:()=>me,FeeSwap:()=>ut,PlatformAdapter:()=>K,SolanaClaim:()=>At,SolanaLilJit:()=>Q,SolanaPlatform:()=>Ct,SolanaSigner:()=>pe,SubstrateClaim:()=>wt,SubstrateExec:()=>xt,SubstratePlatform:()=>Pt,SubstrateService:()=>E,SubstrateSigner:()=>Ae,SuiClaim:()=>ve,SuiPlatform:()=>Tt,SuiSigner:()=>xe,TransferBuilder:()=>wn,Wallet:()=>ae,WhStatus:()=>Pe,WormholeGovernor:()=>Se,WormholeRateLimitValidation:()=>oe,WormholeScan:()=>Ft,WormholeTransfer:()=>Te,chunkBySize:()=>de,deserializeV0:()=>Nn,ixToHuman:()=>W,serializeV0:()=>nt});module.exports=Vn(Gn);var lt=require("@galacticcouncil/common"),mt=require("@galacticcouncil/xc-core"),re=require("rxjs");var ot=require("@galacticcouncil/xc-core");var _t=require("@galacticcouncil/xc-core"),Ee=require("viem"),ce=require("@wormhole-foundation/sdk-base"),ft=class{#t;constructor(t){this.#t=t}redeem(t,e){let s=_t.Wormhole.fromChain(this.#t),n=ce.encoding.b64.decode(e),a=ce.encoding.hex.encode(n),r=_t.Abi.TokenBridge,o=(0,Ee.encodeFunctionData)({abi:r,functionName:"completeTransfer",args:["0x"+a]});return{abi:JSON.stringify(r),data:o,from:t,to:s.getTokenBridge()}}};var k=require("@galacticcouncil/xc-core"),M=require("rxjs");var tt=class{client;config;constructor(t,e){this.validateClient(t),this.validateConfig(e),this.client=t,this.config=e}validateClient(t){if(!t)throw new Error("No EVM client found")}validateConfig(t){if(!t.address)throw new Error("Contract address is required")}};var Ie=require("@galacticcouncil/xc-core");var Vt=class extends tt{erc20;constructor(t,e){super(t,e),this.erc20=new Ie.Erc20Client(t,e.address)}async getBalance(){let{args:t}=this.config,[e]=t;return this.erc20.balanceOf(e)}async getDecimals(){return this.erc20.decimals()}};var Ot=class extends tt{async getBalance(){let t=this.client.getProvider(),{address:e}=this.config;return t.getBalance({address:e})}async getDecimals(){return this.client.chain.nativeCurrency.decimals}};var Mt=class{static get(t,e){switch(e.module){case"Erc20":return new Vt(t,e);case"Native":return new Ot(t,e);default:throw new Error("Module "+e.module+" is not supported")}}};var Nt=require("viem"),Wt=class{client;config;constructor(t,e){this.validateClient(t),this.client=t,this.config=e}validateClient(t){if(!t)throw new Error("No EVM client found")}get abi(){return this.config.abi}get asset(){let t=this.config.args,[e]=t;return e}get calldata(){return this.config.encodeFunctionData()}async estimateGas(t){let{address:e,args:s,value:n,func:a}=this.config;return await this.client.getProvider().estimateContractGas({address:e,abi:this.abi,functionName:a,args:s,value:n,account:t})}async estimateFee(t,e){if(e===0n)return 0n;try{let s=await this.estimateGas(t),n=await this.getGasPrice();return s*n}catch(s){return s instanceof Nt.ContractFunctionExecutionError?console.log(`Can't estimate fees!
2
- `,s.message):console.log(s),0n}}async getGasPrice(){return this.client.getProvider().getGasPrice()}async getNonce(t){return this.client.getProvider().getTransactionCount({address:t})}async simulateCall(t){let{address:e,args:s,value:n,func:a}=this.config,r=this.client.getProvider(),o=await this.getNonce(t);try{let{results:c}=await r.simulateCalls({account:t,calls:[{to:e,abi:this.abi,functionName:a,args:s,value:n}],stateOverrides:[{address:t,nonce:o}]}),[i]=c;return i}catch(c){return console.log(`Can't simulate call!
3
- `,c.details),{error:c}}}decodeEvents(t){let e=[];return t&&t.forEach(s=>{try{let{eventName:n,args:a}=(0,Nt.decodeEventLog)({abi:this.abi,data:s.data,topics:s.topics});e.push({eventName:n,args:a})}catch{}}),e}};var pt=class{static get(t,e){return new Wt(t,e)}};var Fe=require("@galacticcouncil/xc-core"),De=require("viem");function ue(u){return u.module==="Snowbridge"&&u.func==="v2_sendMessage"}function Re(u){if(!ue(u))return;let t=u.args[1];if(!t||t.length===0)return;let[e,s]=(0,De.decodeAbiParameters)([{type:"uint8"},{type:"address"},{type:"uint128"}],t[0]);return s}function ke(u){let t=u.module==="Snowbridge"&&u.func==="v2_sendMessage"&&Array.isArray(u.args[1])&&u.args[1].length===0;return u.module==="TokenBridge"&&["wrapAndTransferETHWithPayload","wrapAndTransferETH"].includes(u.func)||t}function _e(u){return Object.entries(Fe.Precompile).map(([e,s])=>s).includes(u.address)}var ht=class{#t;constructor(t){this.#t=t.evmClient}async buildCall(t,e,s,n){let a=pt.get(this.#t,n),{abi:r,asset:o,calldata:c}=a,i={abi:JSON.stringify(r),data:c,from:t,to:n.address,type:k.CallType.Evm,value:n.value,dryRun:async()=>{let{error:f,logs:p}=await a.simulateCall(t),h=a.decodeEvents(p);return{call:n.module+"."+n.func,error:f?.shortMessage,events:h}}};if(_e(n)||ke(n))return i;let l=ue(n)?Re(n):o,m=new k.Erc20Client(this.#t,l),d=await m.allowance(t,n.address);if(d>=e)return i;let g=m.approve(n.address,e);return{abi:JSON.stringify(k.Abi.Erc20),allowance:d,data:g,from:t,to:l,type:k.CallType.Evm,dryRun:()=>{}}}async estimateFee(t,e,s,n){let r=await pt.get(this.#t,n).estimateFee(t,e);return s.copyWith({amount:r})}async getBalance(t,e){let s=Mt.get(this.#t,e),[n,a]=await Promise.all([s.getBalance(),s.getDecimals()]);return k.AssetAmount.fromAsset(t,{amount:n,decimals:a})}async subscribeBalance(t,e){let s=new M.Subject,n=s.pipe((0,M.shareReplay)(1)),a=this.#t.getProvider(),r=async()=>{let c=async()=>{let l=await this.getBalance(t,e);s.next(l)};await c();let i=a.watchBlocks({onBlock:()=>c()});return()=>i()},o;return r().then(c=>o=c),n.pipe((0,M.finalize)(()=>o?.()),(0,M.distinctUntilChanged)((c,i)=>c.amount===i.amount))}};var Ve=require("@galacticcouncil/xc-core"),Oe=require("@galacticcouncil/common"),Me=require("polkadot-api"),le="0x0000000000000000000000000000000000000401",{H160:On}=Oe.h160,me=class{#t;#e;#n;constructor(t,e){this.#t=t,this.#e=t.evmClient,this.#n=e}async signAndSend(t,e){let s=On.fromAny(t.from),n=this.#e.getProvider(),a=!1;if(this.#t instanceof Ve.EvmParachain)try{let o=this.#t.client,c=Me.Binary.fromHex(t.data);await o.getUnsafeApi().txFromCallData(c),a=!0}catch{}let r;if(a){let[o,c]=await Promise.all([n.estimateGas({account:s,data:t.data,to:le}),n.getGasPrice()]),i=c+c/100n*10n;r=await this.#n.sendTransaction({account:s,chain:this.#e.chain,data:t.data,maxPriorityFeePerGas:i,maxFeePerGas:i,gas:o*11n/10n,to:le})}else{let{data:o,to:c,value:i}=t;r=await this.#n.sendTransaction({account:s,chain:this.#e.chain,data:o,to:c,value:i})}e.onTransactionSend(r),n.waitForTransactionReceipt({hash:r}).then(o=>e.onTransactionReceipt(o)).catch(o=>e.onError(o))}};var qt=require("@galacticcouncil/xc-core"),je=require("@solana/web3.js"),qe=require("buffer"),N=require("rxjs");var et=class{connection;config;constructor(t,e){this.validateConnection(t),this.validateConfig(e),this.connection=t,this.config=e}validateConnection(t){if(!t)throw new Error("No connection found")}validateConfig(t){if(!t.address)throw new Error("Solana address is required")}};var We=require("@wormhole-foundation/sdk-solana");var Mn=9,Lt=class extends et{async getBalance(){let{address:t}=this.config,e=new We.SolanaAddress(t).unwrap(),s=await this.connection.getBalance(e);return BigInt(s)}async getDecimals(){return Mn}};var Ut=require("@wormhole-foundation/sdk-solana");var zt=class extends et{constructor(t,e){super(t,e),this.validateToken(e)}async getBalance(){let{address:t,token:e}=this.config,s=new Ut.SolanaAddress(t).unwrap(),n=new Ut.SolanaAddress(e).unwrap();return(await this.connection.getParsedTokenAccountsByOwner(s,{mint:n})).value.reduce((r,{account:o})=>{let c=o.data.parsed.info.tokenAmount;return r+=BigInt(c.amount),r},0n)}async getDecimals(){let{token:t}=this.config,e=new Ut.SolanaAddress(t).unwrap();return(await this.connection.getTokenSupply(e)).value.decimals}validateToken(t){if(!t.token)throw new Error("Token address is required")}};var Kt=class{static get(t,e){switch(e.module){case"Native":return new Lt(t,e);case"Token":return new zt(t,e);default:throw new Error("Module "+e.module+" is not supported")}}};var R=require("@solana/web3.js"),Ne=.5,Le=2,Ue=1,ze=1e6,Wn=25e4,jt=class{connection;config;constructor(t,e){this.validateConnection(t),this.connection=t,this.config=e}validateConnection(t){if(!t)throw new Error("No connection found")}async getPriorityMessage(t){let{instructions:e}=this.config,s=await this.getV0Message(t,e),n=await this.createPriorityFeeInstructions(s);return this.getV0Message(t,[...e,...n])}async estimateFee(t,e){if(e===0n)return 0n;let{instructions:s}=this.config,n=await this.getV0Message(t,s),a=await this.determineComputeBudget(n);return BigInt(a)}async getV0Message(t,e){let s=new R.PublicKey(t),{blockhash:n}=await this.connection.getLatestBlockhash("finalized");return new R.TransactionMessage({payerKey:s,recentBlockhash:n,instructions:e}).compileToV0Message()}async createPriorityFeeInstructions(t,e=Ne,s=Le,n=Ue,a=ze){let[r,o]=await Promise.all([this.determineComputeBudget(t),this.determinePriorityFee(t,e,s,n,a)]);return[R.ComputeBudgetProgram.setComputeUnitLimit({units:r}),R.ComputeBudgetProgram.setComputeUnitPrice({microLamports:o})]}async simulateTransaction(t,e){let s=new R.VersionedTransaction(e);return(await this.connection.simulateTransaction(s,{accounts:{encoding:"base64",addresses:[t]}})).value}async determineComputeBudget(t){let e=new R.VersionedTransaction(t),s=await this.connection.simulateTransaction(e),{err:n,unitsConsumed:a}=s.value;return a&&!n?Math.round(a*1.2):Wn}async determinePriorityFee(t,e=Ne,s=Le,n=Ue,a=ze){let r=n,o=await this.getTxAccounts(t),c=await this.connection.getRecentPrioritizationFees({lockedWritableAccounts:o});if(c){let i=c.map(m=>m.prioritizationFee).filter(m=>m>0).sort((m,d)=>m-d),l=Math.ceil(i.length*e);if(i.length>l){let d=i[l]*s;r=Math.max(r,d)}}return Math.min(Math.max(r,n),a)}async getTxAccounts(t){let e=(await Promise.all(t.addressTableLookups.map(n=>this.connection.getAddressLookupTable(n.accountKey)))).map(n=>n.value).filter(n=>n!==null),s=t.getAccountKeys({addressLookupTableAccounts:e??void 0});return t.compiledInstructions.flatMap(n=>n.accountKeyIndexes).map(n=>t.isAccountWritable(n)?s.get(n):null).filter(n=>n!==null)}};var yt=class{static get(t,e){return new jt(t,e)}};var Ke=require("@solana/web3.js");function W(u){return u.map(t=>({program:t.programId.toBase58(),data:t.data.toString("hex"),keys:t.keys.map(e=>e.pubkey.toBase58())}))}function de(u,t=1e3){let e=[],s=[],n=0;for(let a of u){let r=a.data?.length??0;s.length&&n+r>t&&(e.push(s),s=[],n=0),s.push(a),n+=r}return s.length&&e.push(s),e}function nt(u){let t=u.serialize();return Buffer.from(t).toString("hex")}function Nn(u){let t=Buffer.from(u,"hex"),e=Uint8Array.from(t);return Ke.MessageV0.deserialize(e)}var Ct=class{#t;constructor(t){this.#t=t.connection}async buildCall(t,e,s,n){let a=yt.get(this.#t,n),r=await a.getPriorityMessage(t),o=r.serialize(),c=qe.Buffer.from(o).toString("hex");return{from:t,data:c,ix:W(n.instructions),signers:n.signers,type:qt.CallType.Solana,dryRun:async()=>{let{err:i,logs:l}=await a.simulateTransaction(t,r);return{call:n.module+"."+n.func,error:i,events:l}}}}async estimateFee(t,e,s,n){let a=yt.get(this.#t,n),r=await a.estimateFee(t,e),o=await a.getPriorityMessage(t),{accounts:c}=await a.simulateTransaction(t,o),l=(c&&c[0])?.lamports;if(l){let m=n.module==="TokenBridge"&&n.func==="TransferNativeWithPayload";return s.copyWith({amount:s.amount-BigInt(l)-(m?e:0n)+n.rentReserve})}return s.copyWith({amount:r+n.rentReserve})}async getBalance(t,e){let s=Kt.get(this.#t,e),[n,a]=await Promise.all([s.getBalance(),s.getDecimals()]);return qt.AssetAmount.fromAsset(t,{amount:n,decimals:a})}async subscribeBalance(t,e){let s=new N.Subject,n=s.pipe((0,N.shareReplay)(1)),a=async()=>{let o=async()=>{let l=await this.getBalance(t,e);s.next(l)};await o();let c=new je.PublicKey(e.address),i=this.#t.onAccountChange(c,()=>o());return()=>{this.#t.removeAccountChangeListener(i)}},r;return a().then(o=>r=o),n.pipe((0,N.finalize)(()=>r?.()),(0,N.distinctUntilChanged)((o,c)=>o.amount===c.amount))}};var X=require("@galacticcouncil/xc-core"),P=require("@solana/web3.js"),C=require("@solana/spl-token"),He=require("@wormhole-foundation/sdk-solana"),ge=require("@wormhole-foundation/sdk-solana-core"),$e=require("@wormhole-foundation/sdk-base"),fe=require("@wormhole-foundation/sdk-definitions"),bt=require("@wormhole-foundation/sdk-solana-tokenbridge");var Q=class{#t;constructor(t){this.#t=t.connection}async sendBundle(t){let{result:e}=await this.#t._rpcRequest("sendBundle",[t]);return e}async simulateBundle(t){return(await this.#t._rpcRequest("simulateBundle",[[t]])).result}async getInflightBundleStatuses(t){let{result:e}=await this.#t._rpcRequest("getInflightBundleStatuses",[t]);return e}async getRegion(){let{result:t}=await this.#t._rpcRequest("getRegions",[]);return t}async getTipAccount(){let{result:t}=await this.#t._rpcRequest("getTipAccounts",[]);return t}};var At=class{#t;#e;#n;constructor(t){this.#t=t,this.#e=t.connection,this.#n=new Q(t)}async redeem(t,e,s){let n=X.Wormhole.fromChain(this.#t),a=$e.encoding.b64.decode(e),r=(0,fe.deserialize)("TokenBridge:Transfer",a),o=(0,fe.deserialize)("Uint8Array",a),c=this.derivePostedVaaKey(n.getCoreBridge(),Buffer.from(r.hash)),i=new P.PublicKey(t),l=s?new P.PublicKey(s):i,m=i.equals(l),d=[];if(!await this.#e.getAccountInfo(c)){let y=P.Keypair.generate(),F=await ge.utils.createVerifySignaturesInstructions(this.#t.connection,n.getCoreBridge(),i,o,y.publicKey),_=de(F,1e3);for(let D=0;D<_.length;D++){let w=_[D],V=await this.getV0Message(i,w),O=nt(V);d.push({from:t,data:O,ix:W(w),signers:[y],type:X.CallType.Solana})}let H=ge.utils.createPostVaaInstruction(this.#e,n.getCoreBridge(),i,o,y.publicKey),dt=await this.getV0Message(i,[H]),b=nt(dt);d.push({from:t,data:b,ix:W([H]),type:X.CallType.Solana})}let f=r.payload.token.chain==="Solana",p=new P.PublicKey(r.payload.token.address.toUint8Array()),h=f&&p.equals(C.NATIVE_MINT),B=await this.#n.getTipAccount(),A=P.SystemProgram.transfer({fromPubkey:i,toPubkey:new P.PublicKey(B[0]),lamports:1e3});if(h&&m){let y=await this.redeemAndUnwrap(n,i,r,A);d.push(y)}else{let y=await this.redeemToken(n,i,l,p,f,r,A);d.push(y)}return d}async redeemToken(t,e,s,n,a,r,o){let i=(a?bt.createCompleteTransferNativeInstruction:bt.createCompleteTransferWrappedInstruction)(this.#e,t.getTokenBridge(),t.getCoreBridge(),e,r),l=(0,C.getAssociatedTokenAddressSync)(n,s),m=(0,C.createAssociatedTokenAccountIdempotentInstruction)(e,l,s,n),d=await this.getV0Message(e,[m,i,o]),g=nt(d);return{from:e.toBase58(),data:g,ix:W([m,i]),type:X.CallType.Solana}}async redeemAndUnwrap(t,e,s,n){let a=new P.PublicKey(s.payload.to.address.toUint8Array()),r=await(0,C.getMint)(this.#e,C.NATIVE_MINT),o=s.payload.token.amount*BigInt(Math.pow(10,r.decimals-8)),c=await(0,C.getMinimumBalanceForRentExemptAccount)(this.#e),i=P.Keypair.generate(),l=(0,C.createAssociatedTokenAccountIdempotentInstruction)(e,a,e,C.NATIVE_MINT),m=(0,bt.createCompleteTransferNativeInstruction)(this.#e,t.getTokenBridge(),t.getCoreBridge(),e,s),d=P.SystemProgram.createAccount({fromPubkey:e,newAccountPubkey:i.publicKey,lamports:c,space:C.ACCOUNT_SIZE,programId:C.TOKEN_PROGRAM_ID}),g=(0,C.createInitializeAccountInstruction)(i.publicKey,C.NATIVE_MINT,e),f=(0,C.createTransferInstruction)(a,i.publicKey,e,o),p=(0,C.createCloseAccountInstruction)(i.publicKey,e,e),h=[l,m,d,g,f,p,n],B=await this.getV0Message(e,h),A=nt(B);return{from:e.toBase58(),data:A,ix:W(h),signers:[i],type:X.CallType.Solana}}derivePostedVaaKey(t,e){return He.utils.deriveAddress([Buffer.from("PostedVAA"),e],t)}async getV0Message(t,e){let{blockhash:s}=await this.#e.getLatestBlockhash("finalized");return new P.TransactionMessage({payerKey:t,recentBlockhash:s,instructions:e}).compileToV0Message()}};var J=require("@solana/web3.js"),Ht=require("buffer");var pe=class{#t;#e;#n;constructor(t,e){this.#t=t,this.#e=e,this.#n=new Q(t)}async signAndSend(t,e){let{data:s,signers:n}=t,a=this.toVersioned(s,n);try{if(this.#e instanceof J.Keypair){a.sign([this.#e]);let i=await this.#t.connection.sendTransaction(a);e.onTransactionSend(i);let l=await this.#t.connection.getSignatureStatus(i);e.onStatus?.(l);return}let r=this.#e;await r.connect(),n&&a.sign(n);let{signature:o}=await r.signAndSendTransaction(a);e.onTransactionSend(o);let c=await this.#t.connection.getSignatureStatus(o);e.onStatus?.(c)}catch(r){e.onError(r)}}async signAndSendAll(t,e){let s=t.map(n=>{let{data:a,signers:r}=n;return this.toVersioned(a,r)});try{let n;if(this.#e instanceof J.Keypair)s.forEach(c=>c.sign([this.#e])),n=s.map(c=>Ht.Buffer.from(c.serialize()).toString("base64"));else{let c=this.#e;await c.connect(),n=(await c.signAllTransactions(s)).map(l=>Ht.Buffer.from(l.serialize()).toString("base64"))}let a=await this.#n.simulateBundle(n);if(a.value.summary!=="succeeded")throw new Error("Bundle simulation failed! "+JSON.stringify(a,null,2));let r=await this.#n.sendBundle(n);e.onTransactionSend(r);let o=await this.#n.getInflightBundleStatuses([r]);e.onBundleStatus?.(o.value)}catch(n){e.onError(n)}}toVersioned(t,e){let s=Ht.Buffer.from(t,"hex"),n=Uint8Array.from(s),a=J.MessageV0.deserialize(n),r=new J.VersionedTransaction(a);return e&&r.sign(e),r}};var L=require("@galacticcouncil/xc-core"),he=require("@wormhole-foundation/sdk-base"),Ge=require("viem"),$t=require("polkadot-api"),wt=class{#t;constructor(t){this.#t=t,L.Wormhole.fromChain(this.#t)}redeemMrl(t,e){let s=he.encoding.b64.decode(e),n=he.encoding.hex.encode(s),a=L.Abi.Gmp,r=(0,Ge.encodeFunctionData)({abi:a,functionName:"wormholeTransferERC20",args:["0x"+n]});return{abi:JSON.stringify(a),data:r,from:t,to:L.Precompile.Bridge}}async redeemMrlViaXcm(t,e){let n=this.#t.client.getUnsafeApi(),a=this.redeemMrl(t,e),o=await n.tx.EthereumXcm.transact({xcm_transaction:{type:"V2",value:{gas_limit:[5000000n,0n,0n,0n],fee_payment:{type:"Auto",value:void 0},action:{type:"Call",value:$t.Binary.fromHex(a.to)},value:[0n,0n,0n,0n],input:$t.Binary.fromHex(a.data),access_list:void 0}}}).getEncodedData();return{data:$t.Binary.toHex(o),from:t,type:L.CallType.Substrate,dryRun:async()=>{},txOptions:void 0}}};var Qt=require("@galacticcouncil/xc-core"),vt=require("polkadot-api");var Qe=require("@galacticcouncil/common");async function ye(u,t,e){let s=await e.getDecimals(),n=e.chain.getAssetDecimals(t)??s,a=e.chain.usesChainDecimals?s:n;return{amount:Qe.big.convertDecimals(u,a,n),decimals:n}}var Xe=require("@galacticcouncil/common"),Je=u=>{let t=[];for(let e of u)if(["PolkadotXcm"].includes(e.type)&&e.value.type==="FeesPaid"){let n=e.value.value.fees;for(let a of n)if(a.fun.type==="Fungible"){let r=BigInt(a.fun.value);t.push(r)}}return t.reduce((e,s)=>e+s,0n)},st=u=>{let t=u.value.error;return t.type==="Module"?Xe.enums.enumPath(t.value):JSON.stringify(t.value)};var Gt=require("@galacticcouncil/common");function Ln(u){return{parents:0,interior:{type:"X1",value:u.startsWith("0x")?Gt.xcm.toAccountKey20(u):Gt.xcm.toAccountId32(u)}}}function Ye(u){return{type:"V4",value:{parents:1,interior:{type:"X1",value:{type:"Parachain",value:u.parachainId}}}}}var Un=(u,t)=>({id:Gt.xcm.transform(u),fun:{type:"Fungible",value:t}}),Ze=(u,t,e,s,n,a)=>{console.log(a);let r=Ln(u),o=Un(t,e.amount);return{type:"V4",value:[{type:"WithdrawAsset",value:[o]},{type:"BuyExecution",value:{fees:o,weight_limit:{type:"Unlimited"}}},{type:"Transact",value:{origin_kind:{type:"SovereignAccount"},require_weight_at_most:{ref_time:s,proof_size:n},call:a}},{type:"RefundSurplus",value:void 0},{type:"DepositAsset",value:{assets:{type:"Wild",value:{type:"AllCounted",value:1}},beneficiary:r}}]}};var xt=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}async remoteExec(t,e,s,n,a={}){let r=this.#t.api,o=await this.#t.getAsset(),c=this.#e.api,i=this.#e.chain,l=await i.getCurrency(),m=l.asset,d=l.decimals,g=i.getAssetXcmLocation(m),f=vt.Binary.fromHex(s.data),h=await(await c.txFromCallData(f)).getPaymentInfo(e),B=BigInt(h.partial_fee)*120n/100n,A=Qt.AssetAmount.fromAsset(m,{amount:B,decimals:d}),y=h.weight.ref_time,F=h.weight.proof_size,_=Ye(i),H=Ze(e,g,A,y,F,f),dt=r.tx.PolkadotXcm.send({dest:_,message:H}),b=[];try{let x=await this.#t.chain.dex.getCalldata(t,a.srcFeeAsset||o,m,A,10),Rt=vt.Binary.fromHex(x),gt=await r.txFromCallData(Rt);b.push(gt)}catch{}let D=await n(A),w=vt.Binary.fromHex(D.data),V=await r.txFromCallData(w);b.push(V),b.push(dt);let O=b.map(x=>x.decodedCall),Dt=r.tx.Utility.batch_all({calls:O}),ie=await Dt.getEncodedData();return{from:t,data:vt.Binary.toHex(ie),type:Qt.CallType.Substrate,dryRun:this.#t.isDryRunSupported()?async()=>{try{let x=await this.#t.dryRun(t,Dt);return{call:"polkadotXcm.send",error:x.execution_result&&x.execution_result.success?void 0:st(x.execution_result),events:x.emitted_events||[],xcm:x.forwarded_xcms||[]}}catch(x){return{call:"polkadotXcm.send",error:x instanceof Error?x.message:"unknown"}}}:()=>{}}}};var Y=require("@galacticcouncil/xc-core"),en=require("polkadot-api"),I=require("rxjs");var U=require("@galacticcouncil/xc-core"),Xt=require("@galacticcouncil/common"),Jt=require("@polkadot-api/substrate-bindings"),St=require("@polkadot-api/utils"),Ce=require("polkadot-api");var{Ss58Addr:tn}=U.addr,E=class u{chain;_currency;constructor(t){this.chain=t}static async create(t){return new u(t)}get client(){return this.chain.client}get api(){return this.client.getUnsafeApi()}async getCurrency(){return this._currency||(this._currency=this.chain.getCurrency()),this._currency}async getAsset(){return(await this.getCurrency()).asset}async getDecimals(){return(await this.getCurrency()).decimals}async getExistentialDeposit(){let t;try{let n=await this.api.constants.Balances.ExistentialDeposit();t=typeof n=="bigint"?n:BigInt(String(n))}catch{t=0n}let{asset:e,decimals:s}=await this.getCurrency();return U.AssetAmount.fromAsset(e,{amount:t,decimals:s})}isDryRunSupported(){return this.api.apis?.DryRunApi!==void 0}async buildMessageId(t,e,s,n){let a=await this.client._request("system_accountNextIndex",[t]),r=Jt.u32.enc(a),o=l=>new TextEncoder().encode(l),c=new Uint8Array([...o(this.chain.parachainId.toString()),...(0,St.fromHex)(t.startsWith("0x")?t.slice(2):t),...r,...(0,St.fromHex)(s.startsWith("0x")?s.slice(2):s),...o(n),...o(e.toString())]),i=(0,Jt.Blake2256)(c);return(0,St.toHex)(i)}async dryRun(t,e){let s=(0,Ce.Enum)("Signed",t),n=(0,Ce.Enum)("system",s),a=await this.api.apis.DryRunApi.dry_run_call(n,e.decodedCall,4);if(!a.success)throw new Error("DryRun call failed");let r=a.value;if("type"in r&&"value"in r)throw new Error("DryRun call error: "+Xt.enums.enumPath(r.value));return r}async estimateNetworkFee(t,e){let s=e.getTx(this.client);try{let n=await s.getPaymentInfo(t);return BigInt(n.partial_fee)}catch{console.warn("Can't estimate network fee.")}return 0n}async estimateDeliveryFee(t,e){if(this.chain.usesDeliveryFee){let s=await this.estimateDeliveryFeeWith(t,e);try{let n=e.getTx(this.client),a=await this.dryRun(s,n);if(a.execution_result?.success)return Je(a.emitted_events||[]);{let r=st(a.execution_result);console.warn(`Can't estimate delivery fee. Reason:
4
- ${r}`)}}catch{}}return 0n}async estimateDeliveryFeeWith(t,e){if(["PolkadotXcm"].includes(e.module)){let n=e.getTx(this.client).decodedCall.value.value,a="dest"in n?n.dest:void 0;if(!a)return t;let r=U.multiloc.findNestedKey(a,"interior"),o=U.multiloc.findParachain(a);if(U.multiloc.findGlobalConsensus(a))return t;if(o){let i=Xt.acc.getSovereignAccounts(o);return this.chain.parachainId===0?tn.encodePubKey(i.relay):tn.encodePubKey(i.generic)}if(r&&r.interior==="Here")return this.chain.treasury||t}return t}};var Pt=class{#t;constructor(t){this.#t=E.create(t)}async useSignerFee(t){let e=await this.#t,s=await e.getAsset();return e.chain.usesSignerFee&&!s.isEqual(t)}async buildCall(t,e,s,n){let a=await this.#t,o=await this.useSignerFee(s)?{asset:new Y.Asset(s)}:void 0,c=n.getTx(a.client),i=n.module+"."+n.func,l=await c.getEncodedData();return{from:t,data:en.Binary.toHex(l),type:Y.CallType.Substrate,txOptions:o,dryRun:a.isDryRunSupported()?async()=>{try{let m=n.getTx(a.client),d=await a.dryRun(t,m),g=d.execution_result&&d.execution_result.success?void 0:st(d.execution_result);return{call:i,error:g,events:d.emitted_events||[],xcm:d.forwarded_xcms||[]}}catch(m){return{call:i,error:m instanceof Error?m.message:"unknown"}}}:()=>{}}}async estimateFee(t,e,s,n){let a=await this.#t,r=await a.estimateNetworkFee(t,n),o=await a.estimateDeliveryFee(t,n),c=await this.exchangeFee(r+o,s),i=await ye(c,s,a);return s.copyWith(i)}async getBalance(t,e){let s=await this.subscribeBalance(t,e);return(0,I.firstValueFrom)(s)}async subscribeBalance(t,e){let s=await this.#t,{module:n,func:a,args:r,transform:o}=e;return s.client.getUnsafeApi().query[n][a].watchValue(...r,{at:"best"}).pipe((0,I.map)(({value:l})=>l)).pipe((0,I.concatMap)(l=>o(l)),(0,I.distinctUntilChanged)((l,m)=>l===m),(0,I.concatMap)(async l=>{let m=await ye(l,t,s);return Y.AssetAmount.fromAsset(t,m)}),(0,I.catchError)(l=>(console.error("subscribe fails for:",t),(0,I.throwError)(()=>l))))}async exchangeFee(t,e){let s=await this.#t,n=await s.getAsset(),a=await s.getDecimals();if(n.isEqual(e))return t;try{let r=s.chain.dex,o=Y.AssetAmount.fromAsset(n,{amount:t,decimals:a});return(await r.getQuote(e,n,o,!0)).amount}catch{}return t}};var be=require("@galacticcouncil/xc-core"),at=require("polkadot-api"),Ae=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}signAndSend(t,e){let n=this.#t.client.getUnsafeApi(),a=at.Binary.fromHex(t.data),r={};t.txOptions?.asset&&(r={asset:this.getFeeAsset(t.txOptions.asset)}),n.txFromCallData(a).then(o=>{o.signSubmitAndWatch(this.#e,r).subscribe({next:c=>{c.type==="broadcasted"&&e.onTransactionSend(c.txHash),c.type==="finalized"&&e.onFinalized(c)},error:c=>{e.onError(c)}})})}getFeeAsset(t){let e=this.#t.getAssetXcmLocation(t);if(e){let s=be.multiloc.findPalletInstance(e),n=be.multiloc.findGeneralIndex(e);return{parents:0,interior:(0,at.Enum)("X2",[(0,at.Enum)("PalletInstance",Number(s)),(0,at.Enum)("GeneralIndex",BigInt(n))])}}throw new Error("Asset location not found")}};var Zt=require("@galacticcouncil/xc-core"),sn=require("@mysten/sui/transactions"),an=require("@mysten/sui/utils"),rn=require("@mysten/bcs"),rt=require("@wormhole-foundation/sdk-connect"),on=require("@wormhole-foundation/sdk-definitions"),we=require("@wormhole-foundation/sdk-sui"),cn=require("@wormhole-foundation/sdk-sui-tokenbridge");var nn=require("@mysten/bcs");function Yt(u,t={}){let e=u.inputs??[],s=u.commands??[],n=t.numbers??"string",a=t.decode32As??"address",r=l=>n==="bigint"?l:n==="number"?Number(l):l.toString(),o=l=>{let m=(0,nn.fromBase64)(l),d=g=>{let f=0n;for(let p=0;p<g;p++)f|=BigInt(m[p])<<8n*BigInt(p);return f};return m.length===1?{type:"pure",valueType:"u8",value:Number(m[0])}:m.length===2?{type:"pure",valueType:"u16",value:r(d(2))}:m.length===4?{type:"pure",valueType:"u32",value:Number(d(4))}:m.length===8?{type:"pure",valueType:"u64",value:r(d(8))}:m.length===32&&a==="address"?{type:"pure",valueType:"address",value:"0x"+[...m].map(f=>f.toString(16).padStart(2,"0")).join("")}:{type:"pure",valueType:"vector<u8>",value:Array.from(m)}},c=l=>{let m=e[l];if(!m)return{Input:l};if(m.Pure?.bytes)return o(m.Pure.bytes);let d=m.Object?.SharedObject;if(d)return{type:"object",objectType:"sharedObject",objectId:d.objectId,initialSharedVersion:String(d.initialSharedVersion),mutable:!!d.mutable};let g=m.Object?.ImmOrOwnedObject;return g?{type:"object",objectType:"immOrOwnedObject",objectId:g.objectId,version:String(g.version),digest:g.digest??void 0}:{Input:l}},i=l=>l?.GasCoin?"GasCoin":Array.isArray(l?.NestedResult)?l:typeof l?.Input=="number"?c(l.Input):l;return s.map(l=>{if(l.MoveCall){let m=l.MoveCall;return{MoveCall:{...m,arguments:(m.arguments??[]).map(i)}}}if(l.SplitCoins){let m=l.SplitCoins,d=m.coin?.GasCoin?"GasCoin":i(m.coin),g=(m.amounts??[]).map(i);return{SplitCoins:[d,g]}}if(l.MergeCoins){let m=l.MergeCoins;return{MergeCoins:{...m,destination:i(m.destination),sources:(m.sources??[]).map(i)}}}if(l.TransferObjects){let m=l.TransferObjects;return{TransferObjects:{...m,objects:(m.objects??[]).map(i),address:i(m.address)}}}return l})}var ve=class{#t;constructor(t){this.#t=t}async redeem(t,e){let s=Zt.Wormhole.fromChain(this.#t),n=this.#t.client,a=rt.encoding.b64.decode(e),r=(0,on.deserialize)("TokenBridge:Transfer",a),o=s.getCoreBridge(),c=s.getTokenBridge(),i=await(0,cn.getTokenCoinType)(n,c,r.payload.token.address.toUint8Array(),(0,rt.toChainId)(r.payload.token.chain));if(!i)throw new Error("Unable to fetch token coinType");let[l,m]=await Promise.all([(0,we.getPackageId)(n,o),(0,we.getPackageId)(n,c)]),d=new sn.Transaction;d.setSender(t);let[g]=d.moveCall({target:`${l}::vaa::parse_and_verify`,arguments:[d.object(o),d.pure.vector("u8",(0,rt.serialize)(r)),d.object(an.SUI_CLOCK_OBJECT_ID)]}),[f]=d.moveCall({target:`${m}::vaa::verify_only_once`,arguments:[d.object(c),g]}),[p]=d.moveCall({target:`${m}::complete_transfer::authorize_transfer`,arguments:[d.object(c),f],typeArguments:[i]}),[h]=d.moveCall({target:`${m}::complete_transfer::redeem_relayer_payout`,arguments:[p],typeArguments:[i]});d.moveCall({target:`${m}::coin_utils::return_nonzero`,arguments:[h],typeArguments:[i]});let B=await d.build({client:n}),A=await d.toJSON(),y=Yt(JSON.parse(A));return{from:t,commands:y,data:(0,rn.toBase64)(B),type:Zt.CallType.Sui}}};var se=require("@galacticcouncil/xc-core"),ln=require("@mysten/bcs"),z=require("rxjs");var te=class{client;config;constructor(t,e){this.validateClient(t),this.validateConfig(e),this.client=t,this.config=e}validateClient(t){if(!t)throw new Error("No client found")}validateConfig(t){if(!t.address)throw new Error("Sui address is required")}};var un=require("@mysten/sui/utils");var zn=9,ee=class extends te{async getBalance(){let{address:t}=this.config,e=await this.client.getBalance({owner:t,coinType:un.SUI_TYPE_ARG});return BigInt(e.totalBalance)}async getDecimals(){return zn}};var ne=class{static get(t,e){switch(e.module){case"Native":return new ee(t,e);default:throw new Error("Module "+e.module+" is not supported")}}};var Tt=class{#t;constructor(t){this.#t=t.client}async buildCall(t,e,s,n){let{transaction:a}=n;a.setSender(t);let r=await a.build({client:this.#t}),o=await a.toJSON(),c=Yt(JSON.parse(o));return{from:t,commands:c,data:(0,ln.toBase64)(r),type:se.CallType.Sui,dryRun:async()=>{let i=await this.#t.dryRunTransactionBlock({transactionBlock:r});return{call:n.module+"."+n.func,error:i.executionErrorSource}}}}async estimateFee(t,e,s,n){let{transaction:a}=n;a.setSender(t);let r=await a.build({client:this.#t}),c=(await this.#t.dryRunTransactionBlock({transactionBlock:r})).effects.gasUsed,i=BigInt(c.computationCost),l=BigInt(c.storageCost),m=i+l;return s.copyWith({amount:m})}async getBalance(t,e){let s=ne.get(this.#t,e),[n,a]=await Promise.all([s.getBalance(),s.getDecimals()]);return se.AssetAmount.fromAsset(t,{amount:n,decimals:a})}async subscribeBalance(t,e){let s=new z.Subject,n=s.pipe((0,z.shareReplay)(1)),a=async()=>{await(async()=>{let i=await this.getBalance(t,e);s.next(i)})();let c=setInterval(()=>{},3e3);return()=>clearInterval(c)},r;return a().then(o=>r=o),n.pipe((0,z.finalize)(()=>r?.()),(0,z.distinctUntilChanged)((o,c)=>o.amount===c.amount))}};var mn=require("@mysten/sui/keypairs/ed25519"),dn=require("@mysten/sui/transactions"),xe=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}async signAndSend(t,e){let{from:s,data:n}=t,a=this.#t.client;try{if(this.#e instanceof mn.Ed25519Keypair){let c=dn.Transaction.from(n),i=await a.signAndExecuteTransaction({signer:this.#e,transaction:c,options:{showEffects:!0,showEvents:!0,showObjectChanges:!0,showBalanceChanges:!0}});e.onTransactionSend(i.digest);return}let r=await this.#e.signTransaction({transaction:n,address:s,networkID:"sui:mainnet"}),o=await a.executeTransactionBlock({transactionBlock:r.transaction,signature:r.signature,options:{showEffects:!0,showEvents:!0,showObjectChanges:!0,showBalanceChanges:!0}});e.onTransactionSend(o.digest)}catch(r){e.onError(r)}}};var K=class{platform={};constructor(t){switch(t.getType()){case ot.ChainType.EvmChain:this.registerEvm(t);break;case ot.ChainType.EvmParachain:this.registerEvm(t),this.registerSubstrate(t);break;case ot.ChainType.Parachain:this.registerSubstrate(t);break;case ot.ChainType.SolanaChain:this.registerSolana(t);break;case ot.ChainType.SuiChain:this.registerSui(t);break;default:throw new Error("Unsupported platform: "+t.getType())}}registerEvm(t){let e=t;this.platform.Evm=new ht(e)}registerSolana(t){let e=t;this.platform.Solana=new Ct(e)}registerSui(t){let e=t;this.platform.Sui=new Tt(e)}registerSubstrate(t){let e=t;this.platform.Substrate=new Pt(e)}async buildCall(t,e,s,n){return this.platform[n.type].buildCall(t,e,s,n)}async estimateFee(t,e,s,n){return this.platform[n.type].estimateFee(t,e,s,n)}async getBalance(t,e){return this.platform[e.type].getBalance(t,e)}async subscribeBalance(t,e){return this.platform[e.type].subscribeBalance(t,e)}};var q=require("@galacticcouncil/xc-core"),Bt=require("@galacticcouncil/common");var gn=require("@galacticcouncil/common"),it=_n(require("big.js"),1);function fn(u,t,e,s){let n=u.toBig().minus(e.toBig()).minus(u.isSame(t)?t.toBig():new it.default(0));return s&&(n=n.minus(u.isSame(s)?s.toBig():new it.default(0))),u.copyWith({amount:n.lt(0)?0n:BigInt(n.toFixed())})}function pn(u,t,e,s){let a=u.copyWith({amount:0n}).toBig().plus(u.isSame(t)?t.toBig():new it.default(0)).plus(u.toBig().lt(e.toBig())?e.toBig():new it.default(0));return s&&(a=a.plus(u.isSame(s)&&u.toBig().lt(s.toBig())?s.toBig():new it.default(0))),u.copyWith({amount:BigInt(a.toFixed())})}async function j(u,t){return t.isEvmParachain()?t.getDerivatedAddress(u):u}function hn(u,t){return t?gn.big.toBigInt(t,u):0n}var Z=require("@galacticcouncil/xc-core"),yn=require("@galacticcouncil/common");var{EvmAddr:Kn}=Z.addr,ct=class{adapter;config;constructor(t,e){this.adapter=t,this.config=e}async getEd(){let{chain:t}=this.config;if(t instanceof Z.Parachain)return(await E.create(t)).getExistentialDeposit()}async getBalance(t){let{chain:e,route:s}=this.config,{source:n}=s,a=n.asset,r=e.getBalanceAssetId(a),o=Kn.isValid(r.toString())?await j(t,e):t,c=s.source.balance.build({address:o,asset:a,chain:e});return this.adapter.getBalance(a,c)}async getMin(){let{chain:t,route:e}=this.config,{source:s}=e,n=s.asset,a=s.min;if(t instanceof Z.Parachain&&a){let r=t.getMinAssetId(n),o=a.build({asset:r});return this.adapter.getBalance(n,o)}return this.getAssetMin()}async getAssetMin(){let{chain:t,route:e}=this.config,{source:s}=e,n=s.asset,a=t.getAssetMin(n),r=await this.getDecimals(n),o=0n;return a&&(o=yn.big.toBigInt(a,r)),Z.AssetAmount.fromAsset(n,{amount:o,decimals:r})}async getDecimals(t){let{chain:e}=this.config,s=e.getAssetDecimals(t);return s||(await e.getCurrency()).decimals}};var{EvmAddr:Cn}=q.addr,Et=class extends ct{constructor(t,e){super(t,e)}async getCall(t){let{amount:e,sender:s,source:n}=t,a=await this.getTransfer(t);return this.adapter.buildCall(s,e,n.feeBalance,a)}async getDestinationFee(t){let{chain:e,route:s}=this.config,{source:n,destination:a,transact:r}=s,o=a.fee.amount,c=n.destinationFee.asset||a.fee.asset,i=await this.getDecimals(c);if(Number.isFinite(o))return{fee:q.AssetAmount.fromAsset(c,{amount:Bt.big.toBigInt(o,i),decimals:i}),feeBreakdown:{}};let l=o,{amount:m,breakdown:d}=await l.build({feeAsset:c,transferAsset:n.asset,source:r?r.chain:e,destination:a.chain,amount:t});return{fee:q.AssetAmount.fromAsset(c,{amount:m,decimals:i}),feeBreakdown:d}}async getDestinationFeeBalance(t){let{chain:e,route:s}=this.config,{source:n,destination:a}=s,r=n.asset,o=n.destinationFee.asset||a.fee.asset;if(r.isEqual(o))return this.getBalance(t);let c=e.getBalanceAssetId(o),i=Cn.isValid(c.toString())?await j(t,e):t,l=n.destinationFee.balance.build({address:i,asset:o,chain:e});return this.adapter.getBalance(o,l)}async getFee(t){let{chain:e,route:s}=this.config,{amount:n,sender:a,source:r}=t,o=await this.getTransfer(t),c=s.contract?await j(a,e):a,i=await this.adapter.estimateFee(c,n,r.feeBalance,o),{fee:l}=s.source,m=l?hn(i.decimals,l.extra):0n,d=i.amount+m;return i.copyWith({amount:d})}async getFeeBalance(t){let{chain:e,route:s}=this.config,{source:n}=s;if(!n.fee)return this.getBalance(t);let a=await this.getFeeAsset(t),r=e.getBalanceAssetId(a),o=Cn.isValid(r.toString())?await j(t,e):t,c=n.fee.balance.build({address:o,asset:a,chain:e});return this.adapter.getBalance(a,c)}async getFeeAsset(t){let{chain:e,route:s}=this.config,{source:n}=s,a=n.fee,r=n.asset;if(!a)return r;let o=a.asset;return e instanceof q.Parachain&&"build"in o?await o.build({chain:e,address:t}):o}async getTransfer(t){let{chain:e,route:s}=this.config,{contract:n,extrinsic:a,program:r,move:o}=s;if(a){let{address:i,amount:l,asset:m,sender:d}=t,f=await(await E.create(e)).buildMessageId(d,l,m.originSymbol,i);return a.build({...t,messageId:f})}let c=n||r||o;if(c)return c.build({...t});throw new Error("AssetRoute transfer config is invalid! Specify contract, extrinsic, move or program instructions.")}async getTransact(t){let{route:e}=this.config,{transact:s}=e;if(s){let n=Object.assign({transact:{chain:s.chain}}),a={...t,...n};return{...await this.getTransactData(s,a),chain:s.chain}}}async getTransactData(t,e){let{chain:s,extrinsic:n}=t,a=await n.build(e),r=await E.create(s),o=a.getTx(r.client),c=e.source.chain,i=e.sender,l=Bt.acc.getMultilocationDerivatedAccount(c.parachainId,i,s.parachainId===0?0:1,s.usesH160Acc),m=await o.getPaymentInfo(l),d=await o.getEncodedData(),[g,f]=await Promise.all([this.getTransactFee(t),this.getTransactFeeBalance(t,e)]);return{call:d,chain:s,fee:g,feeBalance:f,weight:{refTime:m.weight.ref_time,proofSize:m.weight.proof_size}}}async getTransactFee(t){let{fee:e}=t,s=await this.getDecimals(e.asset),n=Bt.big.toBigInt(e.amount,s);return q.AssetAmount.fromAsset(e.asset,{amount:n,decimals:s})}async getTransactFeeBalance(t,e){let{chain:s}=this.config,{fee:n}=t,a=n.balance.build({address:e.sender,asset:n.asset,chain:s});return this.adapter.getBalance(n.asset,a)}};var It=class extends ct{constructor(t,e){super(t,e)}};var bn=require("@galacticcouncil/xc-core"),ut=class{ctx;constructor(t){this.ctx=t}get asset(){let{source:t}=this.ctx;return t.balance}get dex(){let{source:t}=this.ctx;return t.chain.dex}get destFee(){let{source:t,transact:e}=this.ctx;return e?e.fee:t.destinationFee}get destFeeBalance(){let{source:t,transact:e}=this.ctx;return e?e.feeBalance:t.destinationFeeBalance}get feeBalance(){let{source:t}=this.ctx;return t.feeBalance}async getSwap(t){let{asset:e,decimals:s}=await this.dex.chain.getCurrency(),{amount:n}=await this.dex.getQuote(e,t,t);return{aIn:t,aOut:bn.AssetAmount.fromAsset(e,{amount:n,decimals:s}),enabled:!0}}isSwapSupported(t){try{this.dex}catch{return!1}return!!(t&&t.swap)}async getDestinationSwap(t){let{amount:e,route:s}=await this.dex.getQuote(t,this.destFee,this.destFee),n=this.destFeeBalance.amount<this.destFee.amount,a=this.feeBalance.amount-t.amount>e*2n;return{aIn:t.copyWith({amount:e}),aOut:this.destFee,enabled:n&&a,route:s}}isDestinationSwapSupported(t){try{this.dex}catch{return!1}let e=!t.isSame(this.destFee),s=this.asset.isSame(this.destFee);return e&&!s}};var{EvmAddr:jn}=mt.addr,ae=class{config;validations;constructor({configService:t,transferValidations:e}){this.config=t,this.validations=e||[]}async transfer(t,e,s,n,a){let r=(0,mt.ConfigBuilder)(this.config).assets().asset(t).source(s).destination(a).build();return this.getTransferData(r,e,n)}async remoteXcm(t,e,s,n,a={}){let r=this.config.getChain(e),o=this.config.getChain(s);if(!(r.isSubstrate()&&o.isSubstrate()))throw Error("RemoteXcm is supported only between parachains");let[i,l]=await Promise.all([E.create(r),E.create(o)]),m=new xt(i,l),d=lt.acc.getMultilocationDerivatedAccount(r.parachainId,t,1,o.usesH160Acc),g=await l.getAsset(),f=await this.transfer(g,t,e,d,s);return m.remoteExec(t,d,n,p=>{let h=p.toDecimal();return f.buildCall(h)},a)}async getTransferData(t,e,s){let n=t.origin,a=t.reverse,r=new K(n.chain),o=new K(a.chain),c=new Et(r,n),i=new It(o,a),l=new mt.TransferValidator(...this.validations),[m,d,g,f,p,h,B]=await Promise.all([c.getBalance(e),c.getFeeBalance(e),c.getDestinationFee(),c.getDestinationFeeBalance(e),c.getMin(),i.getBalance(s),i.getMin()]),{source:A,destination:y}=n.route,F=g.fee.copyWith(y.fee.asset),_=g.feeBreakdown,dt=A.asset.isEqual(F)&&F.amount>10n?F.amount+1n:10n,b={address:s,amount:dt,asset:A.asset,destination:{balance:h,chain:a.chain,fee:F,feeBreakdown:_},sender:e,source:{balance:m,chain:n.chain,fee:d.copyWith({amount:0n}),feeBalance:d,destinationFee:g.fee,destinationFeeBalance:f}};b.transact=await c.getTransact(b);let D=new ut(b),w=await c.getFee(b),V;D.isSwapSupported(A.fee)&&(V=await D.getSwap(w),b.source.feeSwap=V);let O;D.isDestinationSwapSupported(w)&&(O=await D.getDestinationSwap(w),b.source.destinationFeeSwap=O),(V||O)&&(w=await c.getFee(b),w=w.padByPct(5n));let Dt=await i.getEd(),ie=pn(h,F,B,Dt),x=await c.getEd(),Rt=fn(m,w,p,x);b.amount=0n,b.source.fee=w;let gt={source:{balance:m,destinationFee:g.fee,destinationFeeBalance:f,destinationFeeSwap:O,fee:w,feeBalance:d,feeSwap:V,max:Rt,min:m.copyWith({amount:ie.amount})},destination:{balance:h,fee:F},async buildCall($){let S=Object.assign({},b);return S.amount=lt.big.toBigInt($,m.decimals),S.transact=await c.getTransact(S),c.getCall(S)},async estimateFee($){let S=Object.assign({},b);return S.amount=lt.big.toBigInt($,m.decimals),S.transact=await c.getTransact(S),c.getFee(S)},async estimateDestinationFee($){let S=lt.big.toBigInt($,m.decimals),{fee:G,feeBreakdown:Bn}=await c.getDestinationFee(S);return b.destination.fee=G,b.destination.feeBreakdown=Bn,b.source.destinationFee=G,gt.destination.fee=G,gt.source.destinationFee=G,G},async validate($){let S=Object.assign({},b),G=$||w.amount;return S.source.fee=w.copyWith({amount:G}),l.validate(S)}};return gt}async subscribeBalance(t,e,s){let n=this.config.getChainRoutes(e),a=new K(n.chain),r=n.getUniqueRoutes().map(async({source:i})=>{let{asset:l,balance:m}=i,d=n.chain.getBalanceAssetId(l),g=jn.isValid(d.toString())?await j(t,n.chain):t,f=m.build({address:g,asset:l,chain:n.chain});return a.subscribeBalance(l,f)}),o=await Promise.all(r);return(0,re.combineLatest)(o).pipe((0,re.debounceTime)(500)).subscribe(s)}};var An=require("@galacticcouncil/xc-core");function wn(u){let t=(0,An.ConfigBuilder)(u.config).assets();return{assets:t,withAsset(e){let s=t.asset(e);return{sources:s,withSource(n){let a=s.source(n);return{destinations:a,withDestination(r){let{routes:o,destinationAssets:c,isAssetSelect:i,isTagSelect:l,build:m}=a.destination(r);return{routes:o,destinationAssets:c,isAssetSelect:i,isTagSelect:l,build({srcAddress:d,dstAddress:g,dstAsset:f,tag:p}){let h=m(f,p);return u.getTransferData(h,d,g)}}}}}}}}}var T=require("@galacticcouncil/xc-core"),oe=class extends T.TransferValidation{governor;config;constructor(t,e,s=()=>!0,n=()=>!0){super(s,n),this.governor=t,this.config=e}tokenOrigins(t){let e=[];for(let s of this.config.chains.values()){if(!T.Wormhole.isKnown(s)||!s.getAsset(t.key))continue;let n=T.Wormhole.fromChain(s);try{e.push({wormholeChainId:n.getWormholeId(),originAddress:n.normalizeAddress(String(s.getAssetId(t)))})}catch{}}return e}async validate(t){let{amount:e,asset:s,source:n,transact:a}=t,r=T.Wormhole.isKnown(n.chain)?n.chain:a&&T.Wormhole.isKnown(a.chain)?a.chain:void 0;if(!r)return;let c=T.Wormhole.fromChain(r).getWormholeId(),i;try{i=await this.governor.getWormholeRateLimit(c)}catch{throw new T.TransferValidationError("Wormhole_Governor_Unreachable",{chain:r.name,error:"wormhole.governorUnreachable"})}if(!i.configured)return;if(i.availableNotional<=0)throw new T.TransferValidationError("Wormhole_RateLimit_Lockdown",{chain:r.name,enqueuedCount:i.enqueuedCount,error:"wormhole.rateLimitLockdown"});let l;try{l=await this.governor.toNotionalUsd(this.tokenOrigins(s),e,n.balance.decimals)}catch{throw new T.TransferValidationError("Wormhole_Governor_Unreachable",{chain:r.name,error:"wormhole.governorUnreachable"})}if(l!==null){if(l>i.maxTransactionSize)throw new T.TransferValidationError("Wormhole_BigTransaction",{asset:s.originSymbol,chain:r.name,notional:l,maxTransactionSize:i.maxTransactionSize,error:"wormhole.bigTransaction"});if(l>i.availableNotional)throw new T.TransferValidationError("Wormhole_RateLimit_Exceeded",{asset:s.originSymbol,chain:r.name,notional:l,headroom:i.availableNotional,limit:i.notionalLimit,error:"wormhole.rateLimitExceeded"})}}};var qn="https://api.wormholescan.io",Se=class{_baseUrl;_prices;constructor(t){this._baseUrl=t||qn}async fetchData(t){let e=await fetch([this._baseUrl,t].join(""));if(!e.ok)throw new Error(`Wormhole Governor request failed: ${e.status} ${t}`);return(await e.json()).data}async getRateLimits(){return this.fetchData("/api/v1/governor/limit")}async getConfig(){return this.fetchData("/api/v1/governor/config")}async getEnqueuedVaas(){return this.fetchData("/api/v1/governor/enqueued_vaas")}priceKey(t,e){return`${t}:${e.toLowerCase()}`}async getTokenPrices(){return this._prices||(this._prices=this.getConfig().then(t=>{let e=new Map,s=t[0]?.tokens??[];for(let n of s)e.set(this.priceKey(n.originChainId,n.originAddress),n.price);return e}).catch(t=>{throw this._prices=void 0,t})),this._prices}async getWormholeRateLimit(t){let[e,s]=await Promise.all([this.getRateLimits(),this.getEnqueuedVaas()]),n=e.find(r=>r.chainId===t),a=s.find(r=>r.chainId===t)?.enqueuedVaas?.length??0;return n?{configured:!0,notionalLimit:n.notionalLimit,availableNotional:n.availableNotional,maxTransactionSize:n.maxTransactionSize,enqueued:a>0,enqueuedCount:a}:{configured:!1,notionalLimit:0,availableNotional:0,maxTransactionSize:0,enqueued:a>0,enqueuedCount:a}}async toNotionalUsd(t,e,s){let n=await this.getTokenPrices();for(let{wormholeChainId:a,originAddress:r}of t){let o=n.get(this.priceKey(a,r));if(o!==void 0)return Number(e)/10**s*o}return null}};var vn=require("@galacticcouncil/xc-core"),Hn="https://api.wormholescan.io",Ft=class{_baseUrl;constructor(t){this._baseUrl=t||Hn}buildApi(t,e){return[this._baseUrl,t,"?"].join("")+new URLSearchParams(e).toString()}async getVaaBytes(t){let e=this.buildApi("/v1/signed_vaa/"+t,{});return await(await fetch(e)).json()}async getVaa(t){let e=this.buildApi("/api/v1/vaas/"+t,{});return(await(await fetch(e)).json()).data}async getVaaByTxHash(t){let e=this.buildApi("/api/v1/vaas/",{txHash:t}),n=await(await fetch(e)).json();if(n.data.length>0)return n.data[0];throw Error("Can't find VAA for given txHash: "+t)}async getOperations(t){let e=this.buildApi("/api/v1/operations/",t);return(await(await fetch(e)).json()).operations}async getOperation(t){let e=this.buildApi("/api/v1/operations/"+t,{});return await(await fetch(e)).json()}isMrlTransfer(t){let{payloadType:e,toAddress:s,toChain:n}=t,a="0x"+s.substring(26);return e===3&&n===16&&a===vn.Precompile.Bridge}};var xn=require("@galacticcouncil/common"),v=require("@galacticcouncil/xc-core"),Sn=require("@wormhole-foundation/sdk-base"),Pn=require("@wormhole-foundation/sdk-connect"),Tn=require("@wormhole-foundation/sdk-definitions");var Pe=(s=>(s[s.WaitingForVaa=0]="WaitingForVaa",s[s.VaaEmitted=1]="VaaEmitted",s[s.Completed=2]="Completed",s))(Pe||{});var $n=300*1e3,Te=class{parachainId;config;whScan;constructor(t,e){this.config=t,this.parachainId=e,this.whScan=new Ft}get chains(){let t=this.config.chains.values();return Array.from(t)}get filters(){let t=new Date,e=new Date;e.setDate(t.getDate()-6);let s=t.toISOString();return{page:"0",pageSize:"50",includeEndDate:"true",from:e.toISOString(),to:s}}async getWithdraws(t){let e=xn.acc.getMultilocationDerivatedAccount(this.parachainId,t,1,!0),n=(await this.whScan.getOperations({...this.filters,address:e})).map(async a=>{let{content:r}=a,{payload:o,standarizedProperties:c}=r,i=this.getStatus(a),l=this.chains.find(p=>p instanceof v.Parachain&&p.parachainId===this.parachainId),{toAddress:m,tokenAddress:d}=c,g=this.chains.find(p=>v.Wormhole.isKnown(p)&&v.Wormhole.fromChain(p).getWormholeId()===o.tokenChain),f;if(i===1&&a.vaa){let{timestamp:p}=this.getVaaHeader(a.vaa.raw),h=a.vaa.raw;if(this.isStuck(p))switch(g.getType()){case v.ChainType.EvmChain:let B=new ft(g);f=async y=>B.redeem(y,h);break;case v.ChainType.SolanaChain:let A=new At(g);f=async y=>A.redeem(y,h);break}}return{asset:d,assetSymbol:a.data.symbol,amount:a.data.tokenAmount,from:t,fromChain:l,to:m,toChain:g,status:i,redeem:f,operation:a}});return Promise.all(n)}async getDeposits(t,e="hydration"){let s=await this.whScan.getOperations({...this.filters,address:v.Precompile.Bridge,pageSize:"100"}),n=this.config.chains.get(e);if(!n)return[];let a=n,o=(await v.mrl.createPayload(a,t)).toHex(),c=s.filter(i=>{let{content:l}=i,{payload:m}=l;return m.payloadType===3&&m.toChain===16&&"0x"+m.payload===o}).map(async i=>{let{content:l,sourceChain:m}=i,{payload:d,standarizedProperties:g}=l,f=this.getStatus(i),{tokenAddress:p}=g,h=this.chains.find(y=>v.Wormhole.isKnown(y)&&v.Wormhole.fromChain(y).getWormholeId()===d.tokenChain),B=this.chains.find(y=>v.Wormhole.isKnown(y)&&v.Wormhole.fromChain(y).getWormholeId()===d.toChain),A;if(f===1&&i.vaa){let{timestamp:y}=this.getVaaHeader(i.vaa.raw),F=i.vaa.raw;if(this.isStuck(y)){let _=new wt(B);A=async H=>_.redeemMrlViaXcm(H,F)}}return{asset:p,assetSymbol:i.data.symbol,amount:i.data.tokenAmount,from:m.from,fromChain:h,to:t,toChain:n,status:f,redeem:A,operation:i}});return Promise.all(c)}isStuck(t){return Date.now()>=t*1e3+$n}getVaaHeader(t){let e=Sn.encoding.b64.decode(t),s=(0,Tn.deserialize)("Uint8Array",e);return{timestamp:s.timestamp,emitterChain:s.emitterChain,emitterAddress:s.emitterAddress.toString(),sequence:s.sequence,payload:s.payload,hash:s.hash,id:(0,Pn.keccak256)(s.hash)}}getStatus(t){return t.vaa?t.targetChain&&t.targetChain.status==="completed"?2:1:0}};0&&(module.exports={DISPATCH_ADDRESS,EvmClaim,EvmPlatform,EvmSigner,FeeSwap,PlatformAdapter,SolanaClaim,SolanaLilJit,SolanaPlatform,SolanaSigner,SubstrateClaim,SubstrateExec,SubstratePlatform,SubstrateService,SubstrateSigner,SuiClaim,SuiPlatform,SuiSigner,TransferBuilder,Wallet,WhStatus,WormholeGovernor,WormholeRateLimitValidation,WormholeScan,WormholeTransfer,chunkBySize,deserializeV0,ixToHuman,serializeV0});
1
+ "use strict";var Pn=Object.create;var Rt=Object.defineProperty;var Tn=Object.getOwnPropertyDescriptor;var Bn=Object.getOwnPropertyNames;var En=Object.getPrototypeOf,In=Object.prototype.hasOwnProperty;var Fn=(u,t)=>{for(var e in t)Rt(u,e,{get:t[e],enumerable:!0})},Se=(u,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Bn(t))!In.call(u,n)&&n!==e&&Rt(u,n,{get:()=>t[n],enumerable:!(s=Tn(t,n))||s.enumerable});return u};var Dn=(u,t,e)=>(e=u!=null?Pn(En(u)):{},Se(t||!u||!u.__esModule?Rt(e,"default",{value:u,enumerable:!0}):e,u)),Rn=u=>Se(Rt({},"__esModule",{value:!0}),u);var Ln={};Fn(Ln,{DISPATCH_ADDRESS:()=>oe,EvmClaim:()=>gt,EvmPlatform:()=>ft,EvmSigner:()=>ce,FeeSwap:()=>ct,PlatformAdapter:()=>K,SolanaClaim:()=>At,SolanaLilJit:()=>q,SolanaPlatform:()=>yt,SolanaSigner:()=>de,SubstrateClaim:()=>bt,SubstrateExec:()=>vt,SubstratePlatform:()=>St,SubstrateService:()=>B,SubstrateSigner:()=>Ce,SuiClaim:()=>be,SuiPlatform:()=>Pt,SuiSigner:()=>we,TransferBuilder:()=>Cn,Wallet:()=>ne,WhStatus:()=>ve,WormholeScan:()=>It,WormholeTransfer:()=>xe,chunkBySize:()=>ue,deserializeV0:()=>_n,ixToHuman:()=>M,serializeV0:()=>et});module.exports=Rn(Ln);var ut=require("@galacticcouncil/common"),lt=require("@galacticcouncil/xc-core"),se=require("rxjs");var rt=require("@galacticcouncil/xc-core");var kt=require("@galacticcouncil/xc-core"),Pe=require("viem"),re=require("@wormhole-foundation/sdk-base"),gt=class{#t;constructor(t){this.#t=t}redeem(t,e){let s=kt.Wormhole.fromChain(this.#t),n=re.encoding.b64.decode(e),a=re.encoding.hex.encode(n),r=kt.Abi.TokenBridge,i=(0,Pe.encodeFunctionData)({abi:r,functionName:"completeTransfer",args:["0x"+a]});return{abi:JSON.stringify(r),data:i,from:t,to:s.getTokenBridge()}}};var R=require("@galacticcouncil/xc-core"),_=require("rxjs");var Z=class{client;config;constructor(t,e){this.validateClient(t),this.validateConfig(e),this.client=t,this.config=e}validateClient(t){if(!t)throw new Error("No EVM client found")}validateConfig(t){if(!t.address)throw new Error("Contract address is required")}};var Te=require("@galacticcouncil/xc-core");var Vt=class extends Z{erc20;constructor(t,e){super(t,e),this.erc20=new Te.Erc20Client(t,e.address)}async getBalance(){let{args:t}=this.config,[e]=t;return this.erc20.balanceOf(e)}async getDecimals(){return this.erc20.decimals()}};var Ot=class extends Z{async getBalance(){let t=this.client.getProvider(),{address:e}=this.config;return t.getBalance({address:e})}async getDecimals(){return this.client.chain.nativeCurrency.decimals}};var _t=class{static get(t,e){switch(e.module){case"Erc20":return new Vt(t,e);case"Native":return new Ot(t,e);default:throw new Error("Module "+e.module+" is not supported")}}};var Nt=require("viem"),Mt=class{client;config;constructor(t,e){this.validateClient(t),this.client=t,this.config=e}validateClient(t){if(!t)throw new Error("No EVM client found")}get abi(){return this.config.abi}get asset(){let t=this.config.args,[e]=t;return e}get calldata(){return this.config.encodeFunctionData()}async estimateGas(t){let{address:e,args:s,value:n,func:a}=this.config;return await this.client.getProvider().estimateContractGas({address:e,abi:this.abi,functionName:a,args:s,value:n,account:t})}async estimateFee(t,e){if(e===0n)return 0n;try{let s=await this.estimateGas(t),n=await this.getGasPrice();return s*n}catch(s){return s instanceof Nt.ContractFunctionExecutionError?console.log(`Can't estimate fees!
2
+ `,s.message):console.log(s),0n}}async getGasPrice(){return this.client.getProvider().getGasPrice()}async getNonce(t){return this.client.getProvider().getTransactionCount({address:t})}async simulateCall(t){let{address:e,args:s,value:n,func:a}=this.config,r=this.client.getProvider(),i=await this.getNonce(t);try{let{results:o}=await r.simulateCalls({account:t,calls:[{to:e,abi:this.abi,functionName:a,args:s,value:n}],stateOverrides:[{address:t,nonce:i}]}),[c]=o;return c}catch(o){return console.log(`Can't simulate call!
3
+ `,o.details),{error:o}}}decodeEvents(t){let e=[];return t&&t.forEach(s=>{try{let{eventName:n,args:a}=(0,Nt.decodeEventLog)({abi:this.abi,data:s.data,topics:s.topics});e.push({eventName:n,args:a})}catch{}}),e}};var pt=class{static get(t,e){return new Mt(t,e)}};var Be=require("@galacticcouncil/xc-core"),Ee=require("viem");function ie(u){return u.module==="Snowbridge"&&u.func==="v2_sendMessage"}function Ie(u){if(!ie(u))return;let t=u.args[1];if(!t||t.length===0)return;let[e,s]=(0,Ee.decodeAbiParameters)([{type:"uint8"},{type:"address"},{type:"uint128"}],t[0]);return s}function Fe(u){let t=u.module==="Snowbridge"&&u.func==="v2_sendMessage"&&Array.isArray(u.args[1])&&u.args[1].length===0,e=u.module==="Snowbridge"&&u.func==="sendToken"&&u.args[0]==="0x0000000000000000000000000000000000000000";return u.module==="TokenBridge"&&["wrapAndTransferETHWithPayload","wrapAndTransferETH"].includes(u.func)||t||e}function De(u){return Object.entries(Be.Precompile).map(([e,s])=>s).includes(u.address)}var ft=class{#t;constructor(t){this.#t=t.evmClient}async buildCall(t,e,s,n){let a=pt.get(this.#t,n),{abi:r,asset:i,calldata:o}=a,c={abi:JSON.stringify(r),data:o,from:t,to:n.address,type:R.CallType.Evm,value:n.value,dryRun:async()=>{let{error:p,logs:f}=await a.simulateCall(t),h=a.decodeEvents(f);return{call:n.module+"."+n.func,error:p?.shortMessage,events:h}}};if(De(n)||Fe(n))return c;let l=ie(n)?Ie(n):i,m=new R.Erc20Client(this.#t,l),d=await m.allowance(t,n.address);if(d>=e)return c;let g=m.approve(n.address,e);return{abi:JSON.stringify(R.Abi.Erc20),allowance:d,data:g,from:t,to:l,type:R.CallType.Evm,dryRun:()=>{}}}async estimateFee(t,e,s,n){let r=await pt.get(this.#t,n).estimateFee(t,e);return s.copyWith({amount:r})}async getBalance(t,e){let s=_t.get(this.#t,e),[n,a]=await Promise.all([s.getBalance(),s.getDecimals()]);return R.AssetAmount.fromAsset(t,{amount:n,decimals:a})}async subscribeBalance(t,e){let s=new _.Subject,n=s.pipe((0,_.shareReplay)(1)),a=this.#t.getProvider(),r=async()=>{let o=async()=>{let l=await this.getBalance(t,e);s.next(l)};await o();let c=a.watchBlocks({onBlock:()=>o()});return()=>c()},i;return r().then(o=>i=o),n.pipe((0,_.finalize)(()=>i?.()),(0,_.distinctUntilChanged)((o,c)=>o.amount===c.amount))}};var Re=require("@galacticcouncil/xc-core"),ke=require("@galacticcouncil/common"),Ve=require("polkadot-api"),oe="0x0000000000000000000000000000000000000401",{H160:kn}=ke.h160,ce=class{#t;#e;#n;constructor(t,e){this.#t=t,this.#e=t.evmClient,this.#n=e}async signAndSend(t,e){let s=kn.fromAny(t.from),n=this.#e.getProvider(),a=!1;if(this.#t instanceof Re.EvmParachain)try{let i=this.#t.client,o=Ve.Binary.fromHex(t.data);await i.getUnsafeApi().txFromCallData(o),a=!0}catch{}let r;if(a){let[i,o]=await Promise.all([n.estimateGas({account:s,data:t.data,to:oe}),n.getGasPrice()]),c=o+o/100n*10n;r=await this.#n.sendTransaction({account:s,chain:this.#e.chain,data:t.data,maxPriorityFeePerGas:c,maxFeePerGas:c,gas:i*11n/10n,to:oe})}else{let{data:i,to:o,value:c}=t,[l,m]=await Promise.all([n.estimateGas({account:s,data:i,to:o,value:c}),n.getGasPrice()]),d=m+m*5n/100n,g=l+l*30n/100n;r=await this.#n.sendTransaction({account:s,chain:this.#e.chain,data:i,to:o,value:c,gas:g,maxFeePerGas:d,maxPriorityFeePerGas:d})}e.onTransactionSend(r),n.waitForTransactionReceipt({hash:r}).then(i=>e.onTransactionReceipt(i)).catch(i=>e.onError(i))}};var Lt=require("@galacticcouncil/xc-core"),je=require("@solana/web3.js"),Ke=require("buffer"),N=require("rxjs");var tt=class{connection;config;constructor(t,e){this.validateConnection(t),this.validateConfig(e),this.connection=t,this.config=e}validateConnection(t){if(!t)throw new Error("No connection found")}validateConfig(t){if(!t.address)throw new Error("Solana address is required")}};var Oe=require("@wormhole-foundation/sdk-solana");var Vn=9,Wt=class extends tt{async getBalance(){let{address:t}=this.config,e=new Oe.SolanaAddress(t).unwrap(),s=await this.connection.getBalance(e);return BigInt(s)}async getDecimals(){return Vn}};var Ut=require("@wormhole-foundation/sdk-solana");var jt=class extends tt{constructor(t,e){super(t,e),this.validateToken(e)}async getBalance(){let{address:t,token:e}=this.config,s=new Ut.SolanaAddress(t).unwrap(),n=new Ut.SolanaAddress(e).unwrap();return(await this.connection.getParsedTokenAccountsByOwner(s,{mint:n})).value.reduce((r,{account:i})=>{let o=i.data.parsed.info.tokenAmount;return r+=BigInt(o.amount),r},0n)}async getDecimals(){let{token:t}=this.config,e=new Ut.SolanaAddress(t).unwrap();return(await this.connection.getTokenSupply(e)).value.decimals}validateToken(t){if(!t.token)throw new Error("Token address is required")}};var Kt=class{static get(t,e){switch(e.module){case"Native":return new Wt(t,e);case"Token":return new jt(t,e);default:throw new Error("Module "+e.module+" is not supported")}}};var D=require("@solana/web3.js"),_e=.5,Me=2,Ne=1,We=1e6,On=25e4,zt=class{connection;config;constructor(t,e){this.validateConnection(t),this.connection=t,this.config=e}validateConnection(t){if(!t)throw new Error("No connection found")}async getPriorityMessage(t){let{instructions:e}=this.config,s=await this.getV0Message(t,e),n=await this.createPriorityFeeInstructions(s);return this.getV0Message(t,[...e,...n])}async estimateFee(t,e){if(e===0n)return 0n;let{instructions:s}=this.config,n=await this.getV0Message(t,s),a=await this.determineComputeBudget(n);return BigInt(a)}async getV0Message(t,e){let s=new D.PublicKey(t),{blockhash:n}=await this.connection.getLatestBlockhash("finalized");return new D.TransactionMessage({payerKey:s,recentBlockhash:n,instructions:e}).compileToV0Message()}async createPriorityFeeInstructions(t,e=_e,s=Me,n=Ne,a=We){let[r,i]=await Promise.all([this.determineComputeBudget(t),this.determinePriorityFee(t,e,s,n,a)]);return[D.ComputeBudgetProgram.setComputeUnitLimit({units:r}),D.ComputeBudgetProgram.setComputeUnitPrice({microLamports:i})]}async simulateTransaction(t,e){let s=new D.VersionedTransaction(e);return(await this.connection.simulateTransaction(s,{accounts:{encoding:"base64",addresses:[t]}})).value}async determineComputeBudget(t){let e=new D.VersionedTransaction(t),s=await this.connection.simulateTransaction(e),{err:n,unitsConsumed:a}=s.value;return a&&!n?Math.round(a*1.2):On}async determinePriorityFee(t,e=_e,s=Me,n=Ne,a=We){let r=n,i=await this.getTxAccounts(t),o=await this.connection.getRecentPrioritizationFees({lockedWritableAccounts:i});if(o){let c=o.map(m=>m.prioritizationFee).filter(m=>m>0).sort((m,d)=>m-d),l=Math.ceil(c.length*e);if(c.length>l){let d=c[l]*s;r=Math.max(r,d)}}return Math.min(Math.max(r,n),a)}async getTxAccounts(t){let e=(await Promise.all(t.addressTableLookups.map(n=>this.connection.getAddressLookupTable(n.accountKey)))).map(n=>n.value).filter(n=>n!==null),s=t.getAccountKeys({addressLookupTableAccounts:e??void 0});return t.compiledInstructions.flatMap(n=>n.accountKeyIndexes).map(n=>t.isAccountWritable(n)?s.get(n):null).filter(n=>n!==null)}};var ht=class{static get(t,e){return new zt(t,e)}};var Ue=require("@solana/web3.js");function M(u){return u.map(t=>({program:t.programId.toBase58(),data:t.data.toString("hex"),keys:t.keys.map(e=>e.pubkey.toBase58())}))}function ue(u,t=1e3){let e=[],s=[],n=0;for(let a of u){let r=a.data?.length??0;s.length&&n+r>t&&(e.push(s),s=[],n=0),s.push(a),n+=r}return s.length&&e.push(s),e}function et(u){let t=u.serialize();return Buffer.from(t).toString("hex")}function _n(u){let t=Buffer.from(u,"hex"),e=Uint8Array.from(t);return Ue.MessageV0.deserialize(e)}var yt=class{#t;constructor(t){this.#t=t.connection}async buildCall(t,e,s,n){let a=ht.get(this.#t,n),r=await a.getPriorityMessage(t),i=r.serialize(),o=Ke.Buffer.from(i).toString("hex");return{from:t,data:o,ix:M(n.instructions),signers:n.signers,type:Lt.CallType.Solana,dryRun:async()=>{let{err:c,logs:l}=await a.simulateTransaction(t,r);return{call:n.module+"."+n.func,error:c,events:l}}}}async estimateFee(t,e,s,n){let a=ht.get(this.#t,n),r=await a.estimateFee(t,e),i=await a.getPriorityMessage(t),{accounts:o}=await a.simulateTransaction(t,i),l=(o&&o[0])?.lamports;if(l){let m=n.module==="TokenBridge"&&n.func==="TransferNativeWithPayload";return s.copyWith({amount:s.amount-BigInt(l)-(m?e:0n)+n.rentReserve})}return s.copyWith({amount:r+n.rentReserve})}async getBalance(t,e){let s=Kt.get(this.#t,e),[n,a]=await Promise.all([s.getBalance(),s.getDecimals()]);return Lt.AssetAmount.fromAsset(t,{amount:n,decimals:a})}async subscribeBalance(t,e){let s=new N.Subject,n=s.pipe((0,N.shareReplay)(1)),a=async()=>{let i=async()=>{let l=await this.getBalance(t,e);s.next(l)};await i();let o=new je.PublicKey(e.address),c=this.#t.onAccountChange(o,()=>i());return()=>{this.#t.removeAccountChangeListener(c)}},r;return a().then(i=>r=i),n.pipe((0,N.finalize)(()=>r?.()),(0,N.distinctUntilChanged)((i,o)=>i.amount===o.amount))}};var G=require("@galacticcouncil/xc-core"),P=require("@solana/web3.js"),C=require("@solana/spl-token"),ze=require("@wormhole-foundation/sdk-solana"),le=require("@wormhole-foundation/sdk-solana-core"),Le=require("@wormhole-foundation/sdk-base"),me=require("@wormhole-foundation/sdk-definitions"),Ct=require("@wormhole-foundation/sdk-solana-tokenbridge");var q=class{#t;constructor(t){this.#t=t.connection}async sendBundle(t){let{result:e}=await this.#t._rpcRequest("sendBundle",[t]);return e}async simulateBundle(t){return(await this.#t._rpcRequest("simulateBundle",[[t]])).result}async getInflightBundleStatuses(t){let{result:e}=await this.#t._rpcRequest("getInflightBundleStatuses",[t]);return e}async getRegion(){let{result:t}=await this.#t._rpcRequest("getRegions",[]);return t}async getTipAccount(){let{result:t}=await this.#t._rpcRequest("getTipAccounts",[]);return t}};var At=class{#t;#e;#n;constructor(t){this.#t=t,this.#e=t.connection,this.#n=new q(t)}async redeem(t,e,s){let n=G.Wormhole.fromChain(this.#t),a=Le.encoding.b64.decode(e),r=(0,me.deserialize)("TokenBridge:Transfer",a),i=(0,me.deserialize)("Uint8Array",a),o=this.derivePostedVaaKey(n.getCoreBridge(),Buffer.from(r.hash)),c=new P.PublicKey(t),l=s?new P.PublicKey(s):c,m=c.equals(l),d=[];if(!await this.#e.getAccountInfo(o)){let y=P.Keypair.generate(),I=await le.utils.createVerifySignaturesInstructions(this.#t.connection,n.getCoreBridge(),c,i,y.publicKey),k=ue(I,1e3);for(let F=0;F<k.length;F++){let w=k[F],V=await this.getV0Message(c,w),O=et(V);d.push({from:t,data:O,ix:M(w),signers:[y],type:G.CallType.Solana})}let H=le.utils.createPostVaaInstruction(this.#e,n.getCoreBridge(),c,i,y.publicKey),mt=await this.getV0Message(c,[H]),A=et(mt);d.push({from:t,data:A,ix:M([H]),type:G.CallType.Solana})}let p=r.payload.token.chain==="Solana",f=new P.PublicKey(r.payload.token.address.toUint8Array()),h=p&&f.equals(C.NATIVE_MINT),T=await this.#n.getTipAccount(),b=P.SystemProgram.transfer({fromPubkey:c,toPubkey:new P.PublicKey(T[0]),lamports:1e3});if(h&&m){let y=await this.redeemAndUnwrap(n,c,r,b);d.push(y)}else{let y=await this.redeemToken(n,c,l,f,p,r,b);d.push(y)}return d}async redeemToken(t,e,s,n,a,r,i){let c=(a?Ct.createCompleteTransferNativeInstruction:Ct.createCompleteTransferWrappedInstruction)(this.#e,t.getTokenBridge(),t.getCoreBridge(),e,r),l=(0,C.getAssociatedTokenAddressSync)(n,s),m=(0,C.createAssociatedTokenAccountIdempotentInstruction)(e,l,s,n),d=await this.getV0Message(e,[m,c,i]),g=et(d);return{from:e.toBase58(),data:g,ix:M([m,c]),type:G.CallType.Solana}}async redeemAndUnwrap(t,e,s,n){let a=new P.PublicKey(s.payload.to.address.toUint8Array()),r=await(0,C.getMint)(this.#e,C.NATIVE_MINT),i=s.payload.token.amount*BigInt(Math.pow(10,r.decimals-8)),o=await(0,C.getMinimumBalanceForRentExemptAccount)(this.#e),c=P.Keypair.generate(),l=(0,C.createAssociatedTokenAccountIdempotentInstruction)(e,a,e,C.NATIVE_MINT),m=(0,Ct.createCompleteTransferNativeInstruction)(this.#e,t.getTokenBridge(),t.getCoreBridge(),e,s),d=P.SystemProgram.createAccount({fromPubkey:e,newAccountPubkey:c.publicKey,lamports:o,space:C.ACCOUNT_SIZE,programId:C.TOKEN_PROGRAM_ID}),g=(0,C.createInitializeAccountInstruction)(c.publicKey,C.NATIVE_MINT,e),p=(0,C.createTransferInstruction)(a,c.publicKey,e,i),f=(0,C.createCloseAccountInstruction)(c.publicKey,e,e),h=[l,m,d,g,p,f,n],T=await this.getV0Message(e,h),b=et(T);return{from:e.toBase58(),data:b,ix:M(h),signers:[c],type:G.CallType.Solana}}derivePostedVaaKey(t,e){return ze.utils.deriveAddress([Buffer.from("PostedVAA"),e],t)}async getV0Message(t,e){let{blockhash:s}=await this.#e.getLatestBlockhash("finalized");return new P.TransactionMessage({payerKey:t,recentBlockhash:s,instructions:e}).compileToV0Message()}};var X=require("@solana/web3.js"),Ht=require("buffer");var de=class{#t;#e;#n;constructor(t,e){this.#t=t,this.#e=e,this.#n=new q(t)}async signAndSend(t,e){let{data:s,signers:n}=t,a=this.toVersioned(s,n);try{if(this.#e instanceof X.Keypair){a.sign([this.#e]);let c=await this.#t.connection.sendTransaction(a);e.onTransactionSend(c);let l=await this.#t.connection.getSignatureStatus(c);e.onStatus?.(l);return}let r=this.#e;await r.connect(),n&&a.sign(n);let{signature:i}=await r.signAndSendTransaction(a);e.onTransactionSend(i);let o=await this.#t.connection.getSignatureStatus(i);e.onStatus?.(o)}catch(r){e.onError(r)}}async signAndSendAll(t,e){let s=t.map(n=>{let{data:a,signers:r}=n;return this.toVersioned(a,r)});try{let n;if(this.#e instanceof X.Keypair)s.forEach(o=>o.sign([this.#e])),n=s.map(o=>Ht.Buffer.from(o.serialize()).toString("base64"));else{let o=this.#e;await o.connect(),n=(await o.signAllTransactions(s)).map(l=>Ht.Buffer.from(l.serialize()).toString("base64"))}let a=await this.#n.simulateBundle(n);if(a.value.summary!=="succeeded")throw new Error("Bundle simulation failed! "+JSON.stringify(a,null,2));let r=await this.#n.sendBundle(n);e.onTransactionSend(r);let i=await this.#n.getInflightBundleStatuses([r]);e.onBundleStatus?.(i.value)}catch(n){e.onError(n)}}toVersioned(t,e){let s=Ht.Buffer.from(t,"hex"),n=Uint8Array.from(s),a=X.MessageV0.deserialize(n),r=new X.VersionedTransaction(a);return e&&r.sign(e),r}};var W=require("@galacticcouncil/xc-core"),ge=require("@wormhole-foundation/sdk-base"),He=require("viem"),pe=require("polkadot-api"),bt=class{#t;constructor(t){this.#t=t,W.Wormhole.fromChain(this.#t)}redeemMrl(t,e){let s=ge.encoding.b64.decode(e),n=ge.encoding.hex.encode(s),a=W.Abi.Gmp,r=(0,He.encodeFunctionData)({abi:a,functionName:"wormholeTransferERC20",args:["0x"+n]});return{abi:JSON.stringify(a),data:r,from:t,to:W.Precompile.Bridge}}async redeemMrlViaXcm(t,e){let n=this.#t.client.getUnsafeApi(),a=this.redeemMrl(t,e),i=await n.tx.EthereumXcm.transact({xcm_transaction:{type:"V2",value:{gas_limit:[5000000n,0n,0n,0n],action:{type:"Call",value:a.to},value:[0n,0n,0n,0n],input:pe.Binary.fromHex(a.data),access_list:void 0}}}).getEncodedData();return{data:pe.Binary.toHex(i),from:t,type:W.CallType.Substrate,dryRun:async()=>{},txOptions:void 0}}};var Qt=require("@galacticcouncil/xc-core"),wt=require("polkadot-api");var $e=require("@galacticcouncil/common");async function fe(u,t,e){let s=await e.getDecimals(),n=e.chain.getAssetDecimals(t)??s,a=e.chain.usesChainDecimals?s:n;return{amount:$e.big.convertDecimals(u,a,n),decimals:n}}var Qe=require("@galacticcouncil/common"),qe=u=>{let t=[];for(let e of u)if(["PolkadotXcm"].includes(e.type)&&e.value.type==="FeesPaid"){let n=e.value.value.fees;for(let a of n)if(a.fun.type==="Fungible"){let r=BigInt(a.fun.value);t.push(r)}}return t.reduce((e,s)=>e+s,0n)},nt=u=>{let t=u.value.error;return t.type==="Module"?Qe.enums.enumPath(t.value):JSON.stringify(t.value)};var $t=require("@galacticcouncil/common");function Mn(u){return{parents:0,interior:{type:"X1",value:u.startsWith("0x")?$t.xcm.toAccountKey20(u):$t.xcm.toAccountId32(u)}}}function Ge(u){return{type:"V4",value:{parents:1,interior:{type:"X1",value:{type:"Parachain",value:u.parachainId}}}}}var Nn=(u,t)=>({id:$t.xcm.transform(u),fun:{type:"Fungible",value:t}}),Xe=(u,t,e,s,n,a)=>{console.log(a);let r=Mn(u),i=Nn(t,e.amount);return{type:"V4",value:[{type:"WithdrawAsset",value:[i]},{type:"BuyExecution",value:{fees:i,weight_limit:{type:"Unlimited"}}},{type:"Transact",value:{origin_kind:{type:"SovereignAccount"},require_weight_at_most:{ref_time:s,proof_size:n},call:a}},{type:"RefundSurplus",value:void 0},{type:"DepositAsset",value:{assets:{type:"Wild",value:{type:"AllCounted",value:1}},beneficiary:r}}]}};var vt=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}async remoteExec(t,e,s,n,a={}){let r=this.#t.api,i=await this.#t.getAsset(),o=this.#e.api,c=this.#e.chain,l=await c.getCurrency(),m=l.asset,d=l.decimals,g=c.getAssetXcmLocation(m),p=wt.Binary.fromHex(s.data),h=await(await o.txFromCallData(p)).getPaymentInfo(e),T=BigInt(h.partial_fee)*120n/100n,b=Qt.AssetAmount.fromAsset(m,{amount:T,decimals:d}),y=h.weight.ref_time,I=h.weight.proof_size,k=Ge(c),H=Xe(e,g,b,y,I,p),mt=r.tx.PolkadotXcm.send({dest:k,message:H}),A=[];try{let x=await this.#t.chain.dex.getCalldata(t,a.srcFeeAsset||i,m,b,10),Dt=wt.Binary.fromHex(x),dt=await r.txFromCallData(Dt);A.push(dt)}catch{}let F=await n(b),w=wt.Binary.fromHex(F.data),V=await r.txFromCallData(w);A.push(V),A.push(mt);let O=A.map(x=>x.decodedCall),Ft=r.tx.Utility.batch_all({calls:O}),ae=await Ft.getEncodedData();return{from:t,data:wt.Binary.toHex(ae),type:Qt.CallType.Substrate,dryRun:this.#t.isDryRunSupported()?async()=>{try{let x=await this.#t.dryRun(t,Ft);return{call:"polkadotXcm.send",error:x.execution_result&&x.execution_result.success?void 0:nt(x.execution_result),events:x.emitted_events||[],xcm:x.forwarded_xcms||[]}}catch(x){return{call:"polkadotXcm.send",error:x instanceof Error?x.message:"unknown"}}}:()=>{}}}};var J=require("@galacticcouncil/xc-core"),Ye=require("polkadot-api"),E=require("rxjs");var U=require("@galacticcouncil/xc-core"),qt=require("@galacticcouncil/common"),Gt=require("@polkadot-api/substrate-bindings"),xt=require("@polkadot-api/utils"),he=require("polkadot-api");var{Ss58Addr:Je}=U.addr,B=class u{chain;_currency;constructor(t){this.chain=t}static async create(t){return new u(t)}get client(){return this.chain.client}get api(){return this.client.getUnsafeApi()}async getCurrency(){return this._currency||(this._currency=this.chain.getCurrency()),this._currency}async getAsset(){return(await this.getCurrency()).asset}async getDecimals(){return(await this.getCurrency()).decimals}async getExistentialDeposit(){let t;try{let n=await this.api.constants.Balances.ExistentialDeposit();t=typeof n=="bigint"?n:BigInt(String(n))}catch{t=0n}let{asset:e,decimals:s}=await this.getCurrency();return U.AssetAmount.fromAsset(e,{amount:t,decimals:s})}isDryRunSupported(){return this.api.apis?.DryRunApi!==void 0}async buildMessageId(t,e,s,n){let a=await this.client._request("system_accountNextIndex",[t]),r=Gt.u32.enc(a),i=l=>new TextEncoder().encode(l),o=new Uint8Array([...i(this.chain.parachainId.toString()),...(0,xt.fromHex)(t.startsWith("0x")?t.slice(2):t),...r,...(0,xt.fromHex)(s.startsWith("0x")?s.slice(2):s),...i(n),...i(e.toString())]),c=(0,Gt.Blake2256)(o);return(0,xt.toHex)(c)}async dryRun(t,e){let s=(0,he.Enum)("Signed",t),n=(0,he.Enum)("system",s),a=await this.api.apis.DryRunApi.dry_run_call(n,e.decodedCall,4);if(!a.success)throw new Error("DryRun call failed");let r=a.value;if("type"in r&&"value"in r)throw new Error("DryRun call error: "+qt.enums.enumPath(r.value));return r}async estimateNetworkFee(t,e){let s=e.getTx(this.client);try{let n=await s.getPaymentInfo(t);return BigInt(n.partial_fee)}catch{console.warn("Can't estimate network fee.")}return 0n}async estimateDeliveryFee(t,e){if(this.chain.usesDeliveryFee){let s=await this.estimateDeliveryFeeWith(t,e);try{let n=e.getTx(this.client),a=await this.dryRun(s,n);if(a.execution_result?.success)return qe(a.emitted_events||[]);{let r=nt(a.execution_result);console.warn(`Can't estimate delivery fee. Reason:
4
+ ${r}`)}}catch{}}return 0n}async estimateDeliveryFeeWith(t,e){if(["PolkadotXcm"].includes(e.module)){let n=e.getTx(this.client).decodedCall.value.value,a="dest"in n?n.dest:void 0;if(!a)return t;let r=U.multiloc.findNestedKey(a,"interior"),i=U.multiloc.findParachain(a);if(U.multiloc.findGlobalConsensus(a))return t;if(i){let c=qt.acc.getSovereignAccounts(i);return this.chain.parachainId===0?Je.encodePubKey(c.relay):Je.encodePubKey(c.generic)}if(r&&r.interior==="Here")return this.chain.treasury||t}return t}};var St=class{#t;constructor(t){this.#t=B.create(t)}async useSignerFee(t){let e=await this.#t,s=await e.getAsset();return e.chain.usesSignerFee&&!s.isEqual(t)}async buildCall(t,e,s,n){let a=await this.#t,i=await this.useSignerFee(s)?{asset:new J.Asset(s)}:void 0,o=n.getTx(a.client),c=n.module+"."+n.func,l=await o.getEncodedData();return{from:t,data:Ye.Binary.toHex(l),type:J.CallType.Substrate,txOptions:i,dryRun:a.isDryRunSupported()?async()=>{try{let m=n.getTx(a.client),d=await a.dryRun(t,m),g=d.execution_result&&d.execution_result.success?void 0:nt(d.execution_result);return{call:c,error:g,events:d.emitted_events||[],xcm:d.forwarded_xcms||[]}}catch(m){return{call:c,error:m instanceof Error?m.message:"unknown"}}}:()=>{}}}async estimateFee(t,e,s,n){let a=await this.#t,r=await a.estimateNetworkFee(t,n),i=await a.estimateDeliveryFee(t,n),o=await this.exchangeFee(r+i,s),c=await fe(o,s,a);return s.copyWith(c)}async getBalance(t,e){let s=await this.subscribeBalance(t,e);return(0,E.firstValueFrom)(s)}async subscribeBalance(t,e){let s=await this.#t,{module:n,func:a,args:r,transform:i}=e;return s.client.getUnsafeApi().query[n][a].watchValue(...r,{at:"best"}).pipe((0,E.map)(({value:l})=>l)).pipe((0,E.concatMap)(l=>i(l)),(0,E.distinctUntilChanged)((l,m)=>l===m),(0,E.concatMap)(async l=>{let m=await fe(l,t,s);return J.AssetAmount.fromAsset(t,m)}),(0,E.catchError)(l=>(console.error("subscribe fails for:",t),(0,E.throwError)(()=>l))))}async exchangeFee(t,e){let s=await this.#t,n=await s.getAsset(),a=await s.getDecimals();if(n.isEqual(e))return t;try{let r=s.chain.dex,i=J.AssetAmount.fromAsset(n,{amount:t,decimals:a});return(await r.getQuote(e,n,i,!0)).amount}catch{}return t}};var ye=require("@galacticcouncil/xc-core"),st=require("polkadot-api"),Ce=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}signAndSend(t,e){let n=this.#t.client.getUnsafeApi(),a=st.Binary.fromHex(t.data),r={};t.txOptions?.asset&&(r={asset:this.getFeeAsset(t.txOptions.asset)}),n.txFromCallData(a).then(i=>{i.signSubmitAndWatch(this.#e,r).subscribe({next:o=>{o.type==="broadcasted"&&e.onTransactionSend(o.txHash),o.type==="finalized"&&e.onFinalized(o)},error:o=>{e.onError(o)}})})}getFeeAsset(t){let e=this.#t.getAssetXcmLocation(t);if(e){let s=ye.multiloc.findPalletInstance(e),n=ye.multiloc.findGeneralIndex(e);return{parents:0,interior:(0,st.Enum)("X2",[(0,st.Enum)("PalletInstance",Number(s)),(0,st.Enum)("GeneralIndex",BigInt(n))])}}throw new Error("Asset location not found")}};var Jt=require("@galacticcouncil/xc-core"),tn=require("@mysten/sui/transactions"),en=require("@mysten/sui/utils"),nn=require("@mysten/bcs"),at=require("@wormhole-foundation/sdk-connect"),sn=require("@wormhole-foundation/sdk-definitions"),Ae=require("@wormhole-foundation/sdk-sui"),an=require("@wormhole-foundation/sdk-sui-tokenbridge");var Ze=require("@mysten/bcs");function Xt(u,t={}){let e=u.inputs??[],s=u.commands??[],n=t.numbers??"string",a=t.decode32As??"address",r=l=>n==="bigint"?l:n==="number"?Number(l):l.toString(),i=l=>{let m=(0,Ze.fromBase64)(l),d=g=>{let p=0n;for(let f=0;f<g;f++)p|=BigInt(m[f])<<8n*BigInt(f);return p};return m.length===1?{type:"pure",valueType:"u8",value:Number(m[0])}:m.length===2?{type:"pure",valueType:"u16",value:r(d(2))}:m.length===4?{type:"pure",valueType:"u32",value:Number(d(4))}:m.length===8?{type:"pure",valueType:"u64",value:r(d(8))}:m.length===32&&a==="address"?{type:"pure",valueType:"address",value:"0x"+[...m].map(p=>p.toString(16).padStart(2,"0")).join("")}:{type:"pure",valueType:"vector<u8>",value:Array.from(m)}},o=l=>{let m=e[l];if(!m)return{Input:l};if(m.Pure?.bytes)return i(m.Pure.bytes);let d=m.Object?.SharedObject;if(d)return{type:"object",objectType:"sharedObject",objectId:d.objectId,initialSharedVersion:String(d.initialSharedVersion),mutable:!!d.mutable};let g=m.Object?.ImmOrOwnedObject;return g?{type:"object",objectType:"immOrOwnedObject",objectId:g.objectId,version:String(g.version),digest:g.digest??void 0}:{Input:l}},c=l=>l?.GasCoin?"GasCoin":Array.isArray(l?.NestedResult)?l:typeof l?.Input=="number"?o(l.Input):l;return s.map(l=>{if(l.MoveCall){let m=l.MoveCall;return{MoveCall:{...m,arguments:(m.arguments??[]).map(c)}}}if(l.SplitCoins){let m=l.SplitCoins,d=m.coin?.GasCoin?"GasCoin":c(m.coin),g=(m.amounts??[]).map(c);return{SplitCoins:[d,g]}}if(l.MergeCoins){let m=l.MergeCoins;return{MergeCoins:{...m,destination:c(m.destination),sources:(m.sources??[]).map(c)}}}if(l.TransferObjects){let m=l.TransferObjects;return{TransferObjects:{...m,objects:(m.objects??[]).map(c),address:c(m.address)}}}return l})}var be=class{#t;constructor(t){this.#t=t}async redeem(t,e){let s=Jt.Wormhole.fromChain(this.#t),n=this.#t.client,a=at.encoding.b64.decode(e),r=(0,sn.deserialize)("TokenBridge:Transfer",a),i=s.getCoreBridge(),o=s.getTokenBridge(),c=await(0,an.getTokenCoinType)(n,o,r.payload.token.address.toUint8Array(),(0,at.toChainId)(r.payload.token.chain));if(!c)throw new Error("Unable to fetch token coinType");let[l,m]=await Promise.all([(0,Ae.getPackageId)(n,i),(0,Ae.getPackageId)(n,o)]),d=new tn.Transaction;d.setSender(t);let[g]=d.moveCall({target:`${l}::vaa::parse_and_verify`,arguments:[d.object(i),d.pure.vector("u8",(0,at.serialize)(r)),d.object(en.SUI_CLOCK_OBJECT_ID)]}),[p]=d.moveCall({target:`${m}::vaa::verify_only_once`,arguments:[d.object(o),g]}),[f]=d.moveCall({target:`${m}::complete_transfer::authorize_transfer`,arguments:[d.object(o),p],typeArguments:[c]}),[h]=d.moveCall({target:`${m}::complete_transfer::redeem_relayer_payout`,arguments:[f],typeArguments:[c]});d.moveCall({target:`${m}::coin_utils::return_nonzero`,arguments:[h],typeArguments:[c]});let T=await d.build({client:n}),b=await d.toJSON(),y=Xt(JSON.parse(b));return{from:t,commands:y,data:(0,nn.toBase64)(T),type:Jt.CallType.Sui}}};var ee=require("@galacticcouncil/xc-core"),on=require("@mysten/bcs"),j=require("rxjs");var Yt=class{client;config;constructor(t,e){this.validateClient(t),this.validateConfig(e),this.client=t,this.config=e}validateClient(t){if(!t)throw new Error("No client found")}validateConfig(t){if(!t.address)throw new Error("Sui address is required")}};var rn=require("@mysten/sui/utils");var Wn=9,Zt=class extends Yt{async getBalance(){let{address:t}=this.config,e=await this.client.getBalance({owner:t,coinType:rn.SUI_TYPE_ARG});return BigInt(e.totalBalance)}async getDecimals(){return Wn}};var te=class{static get(t,e){switch(e.module){case"Native":return new Zt(t,e);default:throw new Error("Module "+e.module+" is not supported")}}};var Pt=class{#t;constructor(t){this.#t=t.client}async buildCall(t,e,s,n){let{transaction:a}=n;a.setSender(t);let r=await a.build({client:this.#t}),i=await a.toJSON(),o=Xt(JSON.parse(i));return{from:t,commands:o,data:(0,on.toBase64)(r),type:ee.CallType.Sui,dryRun:async()=>{let c=await this.#t.dryRunTransactionBlock({transactionBlock:r});return{call:n.module+"."+n.func,error:c.executionErrorSource}}}}async estimateFee(t,e,s,n){let{transaction:a}=n;a.setSender(t);let r=await a.build({client:this.#t}),o=(await this.#t.dryRunTransactionBlock({transactionBlock:r})).effects.gasUsed,c=BigInt(o.computationCost),l=BigInt(o.storageCost),m=c+l;return s.copyWith({amount:m})}async getBalance(t,e){let s=te.get(this.#t,e),[n,a]=await Promise.all([s.getBalance(),s.getDecimals()]);return ee.AssetAmount.fromAsset(t,{amount:n,decimals:a})}async subscribeBalance(t,e){let s=new j.Subject,n=s.pipe((0,j.shareReplay)(1)),a=async()=>{await(async()=>{let c=await this.getBalance(t,e);s.next(c)})();let o=setInterval(()=>{},3e3);return()=>clearInterval(o)},r;return a().then(i=>r=i),n.pipe((0,j.finalize)(()=>r?.()),(0,j.distinctUntilChanged)((i,o)=>i.amount===o.amount))}};var cn=require("@mysten/sui/keypairs/ed25519"),un=require("@mysten/sui/transactions"),we=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}async signAndSend(t,e){let{from:s,data:n}=t,a=this.#t.client;try{if(this.#e instanceof cn.Ed25519Keypair){let o=un.Transaction.from(n),c=await a.signAndExecuteTransaction({signer:this.#e,transaction:o,options:{showEffects:!0,showEvents:!0,showObjectChanges:!0,showBalanceChanges:!0}});e.onTransactionSend(c.digest);return}let r=await this.#e.signTransaction({transaction:n,address:s,networkID:"sui:mainnet"}),i=await a.executeTransactionBlock({transactionBlock:r.transaction,signature:r.signature,options:{showEffects:!0,showEvents:!0,showObjectChanges:!0,showBalanceChanges:!0}});e.onTransactionSend(i.digest)}catch(r){e.onError(r)}}};var K=class{platform={};constructor(t){switch(t.getType()){case rt.ChainType.EvmChain:this.registerEvm(t);break;case rt.ChainType.EvmParachain:this.registerEvm(t),this.registerSubstrate(t);break;case rt.ChainType.Parachain:this.registerSubstrate(t);break;case rt.ChainType.SolanaChain:this.registerSolana(t);break;case rt.ChainType.SuiChain:this.registerSui(t);break;default:throw new Error("Unsupported platform: "+t.getType())}}registerEvm(t){let e=t;this.platform.Evm=new ft(e)}registerSolana(t){let e=t;this.platform.Solana=new yt(e)}registerSui(t){let e=t;this.platform.Sui=new Pt(e)}registerSubstrate(t){let e=t;this.platform.Substrate=new St(e)}async buildCall(t,e,s,n){return this.platform[n.type].buildCall(t,e,s,n)}async estimateFee(t,e,s,n){return this.platform[n.type].estimateFee(t,e,s,n)}async getBalance(t,e){return this.platform[e.type].getBalance(t,e)}async subscribeBalance(t,e){return this.platform[e.type].subscribeBalance(t,e)}};var L=require("@galacticcouncil/xc-core"),Tt=require("@galacticcouncil/common");var ln=require("@galacticcouncil/common"),it=Dn(require("big.js"),1);function mn(u,t,e,s){let n=u.toBig().minus(e.toBig()).minus(u.isSame(t)?t.toBig():new it.default(0));return s&&(n=n.minus(u.isSame(s)?s.toBig():new it.default(0))),u.copyWith({amount:n.lt(0)?0n:BigInt(n.toFixed())})}function dn(u,t,e,s){let a=u.copyWith({amount:0n}).toBig().plus(u.isSame(t)?t.toBig():new it.default(0)).plus(u.toBig().lt(e.toBig())?e.toBig():new it.default(0));return s&&(a=a.plus(u.isSame(s)&&u.toBig().lt(s.toBig())?s.toBig():new it.default(0))),u.copyWith({amount:BigInt(a.toFixed())})}async function z(u,t){return t.isEvmParachain()?t.getDerivatedAddress(u):u}function gn(u,t){return t?ln.big.toBigInt(t,u):0n}var Y=require("@galacticcouncil/xc-core"),pn=require("@galacticcouncil/common");var{EvmAddr:Un}=Y.addr,ot=class{adapter;config;constructor(t,e){this.adapter=t,this.config=e}async getEd(){let{chain:t}=this.config;if(t instanceof Y.Parachain)return(await B.create(t)).getExistentialDeposit()}async getBalance(t){let{chain:e,route:s}=this.config,{source:n}=s,a=n.asset,r=e.getBalanceAssetId(a),i=Un.isValid(r.toString())?await z(t,e):t,o=s.source.balance.build({address:i,asset:a,chain:e});return this.adapter.getBalance(a,o)}async getMin(){let{chain:t,route:e}=this.config,{source:s}=e,n=s.asset,a=s.min;if(t instanceof Y.Parachain&&a){let r=t.getMinAssetId(n),i=a.build({asset:r});return this.adapter.getBalance(n,i)}return this.getAssetMin()}async getAssetMin(){let{chain:t,route:e}=this.config,{source:s}=e,n=s.asset,a=t.getAssetMin(n),r=await this.getDecimals(n),i=0n;return a&&(i=pn.big.toBigInt(a,r)),Y.AssetAmount.fromAsset(n,{amount:i,decimals:r})}async getDecimals(t){let{chain:e}=this.config,s=e.getAssetDecimals(t);return s||(await e.getCurrency()).decimals}};var{EvmAddr:fn}=L.addr,Bt=class extends ot{constructor(t,e){super(t,e)}async getCall(t){let{amount:e,sender:s,source:n}=t,a=await this.getTransfer(t);return this.adapter.buildCall(s,e,n.feeBalance,a)}async getDestinationFee(t){let{chain:e,route:s}=this.config,{source:n,destination:a,transact:r}=s,i=a.fee.amount,o=n.destinationFee.asset||a.fee.asset,c=await this.getDecimals(o);if(Number.isFinite(i))return{fee:L.AssetAmount.fromAsset(o,{amount:Tt.big.toBigInt(i,c),decimals:c}),feeBreakdown:{}};let l=i,{amount:m,breakdown:d}=await l.build({feeAsset:o,transferAsset:n.asset,source:r?r.chain:e,destination:a.chain,amount:t});return{fee:L.AssetAmount.fromAsset(o,{amount:m,decimals:c}),feeBreakdown:d}}async getDestinationFeeBalance(t){let{chain:e,route:s}=this.config,{source:n,destination:a}=s,r=n.asset,i=n.destinationFee.asset||a.fee.asset;if(r.isEqual(i))return this.getBalance(t);let o=e.getBalanceAssetId(i),c=fn.isValid(o.toString())?await z(t,e):t,l=n.destinationFee.balance.build({address:c,asset:i,chain:e});return this.adapter.getBalance(i,l)}async getFee(t){let{chain:e,route:s}=this.config,{amount:n,sender:a,source:r}=t,i=await this.getTransfer(t),o=s.contract?await z(a,e):a,c=await this.adapter.estimateFee(o,n,r.feeBalance,i),{fee:l}=s.source,m=l?gn(c.decimals,l.extra):0n,d=c.amount+m;return c.copyWith({amount:d})}async getFeeBalance(t){let{chain:e,route:s}=this.config,{source:n}=s;if(!n.fee)return this.getBalance(t);let a=await this.getFeeAsset(t),r=e.getBalanceAssetId(a),i=fn.isValid(r.toString())?await z(t,e):t,o=n.fee.balance.build({address:i,asset:a,chain:e});return this.adapter.getBalance(a,o)}async getFeeAsset(t){let{chain:e,route:s}=this.config,{source:n}=s,a=n.fee,r=n.asset;if(!a)return r;let i=a.asset;return e instanceof L.Parachain&&"build"in i?await i.build({chain:e,address:t}):i}async getTransfer(t){let{chain:e,route:s}=this.config,{contract:n,extrinsic:a,program:r,move:i}=s;if(a){let{address:c,amount:l,asset:m,sender:d}=t,p=await(await B.create(e)).buildMessageId(d,l,m.originSymbol,c);return a.build({...t,messageId:p})}let o=n||r||i;if(o)return o.build({...t});throw new Error("AssetRoute transfer config is invalid! Specify contract, extrinsic, move or program instructions.")}async getTransact(t){let{route:e}=this.config,{transact:s}=e;if(s){let n=Object.assign({transact:{chain:s.chain}}),a={...t,...n};return{...await this.getTransactData(s,a),chain:s.chain}}}async getTransactData(t,e){let{chain:s,extrinsic:n}=t,a=await n.build(e),r=await B.create(s),i=a.getTx(r.client),o=e.source.chain,c=e.sender,l=Tt.acc.getMultilocationDerivatedAccount(o.parachainId,c,s.parachainId===0?0:1,s.usesH160Acc),m=await i.getPaymentInfo(l),d=await i.getEncodedData(),[g,p]=await Promise.all([this.getTransactFee(t),this.getTransactFeeBalance(t,e)]);return{call:d,chain:s,fee:g,feeBalance:p,weight:{refTime:m.weight.ref_time,proofSize:m.weight.proof_size}}}async getTransactFee(t){let{fee:e}=t,s=await this.getDecimals(e.asset),n=Tt.big.toBigInt(e.amount,s);return L.AssetAmount.fromAsset(e.asset,{amount:n,decimals:s})}async getTransactFeeBalance(t,e){let{chain:s}=this.config,{fee:n}=t,a=n.balance.build({address:e.sender,asset:n.asset,chain:s});return this.adapter.getBalance(n.asset,a)}};var Et=class extends ot{constructor(t,e){super(t,e)}};var hn=require("@galacticcouncil/xc-core"),ct=class{ctx;constructor(t){this.ctx=t}get asset(){let{source:t}=this.ctx;return t.balance}get dex(){let{source:t}=this.ctx;return t.chain.dex}get destFee(){let{source:t,transact:e}=this.ctx;return e?e.fee:t.destinationFee}get destFeeBalance(){let{source:t,transact:e}=this.ctx;return e?e.feeBalance:t.destinationFeeBalance}get feeBalance(){let{source:t}=this.ctx;return t.feeBalance}async getSwap(t){let{asset:e,decimals:s}=await this.dex.chain.getCurrency(),{amount:n}=await this.dex.getQuote(e,t,t);return{aIn:t,aOut:hn.AssetAmount.fromAsset(e,{amount:n,decimals:s}),enabled:!0}}isSwapSupported(t){try{this.dex}catch{return!1}return!!(t&&t.swap)}async getDestinationSwap(t){let{amount:e,route:s}=await this.dex.getQuote(t,this.destFee,this.destFee),n=this.destFeeBalance.amount<this.destFee.amount,a=this.feeBalance.amount-t.amount>e*2n;return{aIn:t.copyWith({amount:e}),aOut:this.destFee,enabled:n&&a,route:s}}isDestinationSwapSupported(t){try{this.dex}catch{return!1}let e=!t.isSame(this.destFee),s=this.asset.isSame(this.destFee);return e&&!s}};var{EvmAddr:jn}=lt.addr,ne=class{config;validations;constructor({configService:t,transferValidations:e}){this.config=t,this.validations=e||[]}async transfer(t,e,s,n,a){let r=(0,lt.ConfigBuilder)(this.config).assets().asset(t).source(s).destination(a).build();return this.getTransferData(r,e,n)}async remoteXcm(t,e,s,n,a={}){let r=this.config.getChain(e),i=this.config.getChain(s);if(!(r.isSubstrate()&&i.isSubstrate()))throw Error("RemoteXcm is supported only between parachains");let[c,l]=await Promise.all([B.create(r),B.create(i)]),m=new vt(c,l),d=ut.acc.getMultilocationDerivatedAccount(r.parachainId,t,1,i.usesH160Acc),g=await l.getAsset(),p=await this.transfer(g,t,e,d,s);return m.remoteExec(t,d,n,f=>{let h=f.toDecimal();return p.buildCall(h)},a)}async getTransferData(t,e,s){let n=t.origin,a=t.reverse,r=new K(n.chain),i=new K(a.chain),o=new Bt(r,n),c=new Et(i,a),l=new lt.TransferValidator(...this.validations),[m,d,g,p,f,h,T]=await Promise.all([o.getBalance(e),o.getFeeBalance(e),o.getDestinationFee(),o.getDestinationFeeBalance(e),o.getMin(),c.getBalance(s),c.getMin()]),{source:b,destination:y}=n.route,I=g.fee.copyWith(y.fee.asset),k=g.feeBreakdown,mt=b.asset.isEqual(I)&&I.amount>10n?I.amount+1n:10n,A={address:s,amount:mt,asset:b.asset,destination:{balance:h,chain:a.chain,fee:I,feeBreakdown:k},sender:e,source:{balance:m,chain:n.chain,fee:d.copyWith({amount:0n}),feeBalance:d,destinationFee:g.fee,destinationFeeBalance:p}};A.transact=await o.getTransact(A);let F=new ct(A),w=await o.getFee(A),V;F.isSwapSupported(b.fee)&&(V=await F.getSwap(w),A.source.feeSwap=V);let O;F.isDestinationSwapSupported(w)&&(O=await F.getDestinationSwap(w),A.source.destinationFeeSwap=O),(V||O)&&(w=await o.getFee(A),w=w.padByPct(5n));let Ft=await c.getEd(),ae=dn(h,I,T,Ft),x=await o.getEd(),Dt=mn(m,w,f,x);A.amount=0n,A.source.fee=w;let dt={source:{balance:m,destinationFee:g.fee,destinationFeeBalance:p,destinationFeeSwap:O,fee:w,feeBalance:d,feeSwap:V,max:Dt,min:m.copyWith({amount:ae.amount})},destination:{balance:h,fee:I},async buildCall($){let S=Object.assign({},A);return S.amount=ut.big.toBigInt($,m.decimals),S.transact=await o.getTransact(S),o.getCall(S)},async estimateFee($){let S=Object.assign({},A);return S.amount=ut.big.toBigInt($,m.decimals),S.transact=await o.getTransact(S),o.getFee(S)},async estimateDestinationFee($){let S=ut.big.toBigInt($,m.decimals),{fee:Q,feeBreakdown:Sn}=await o.getDestinationFee(S);return A.destination.fee=Q,A.destination.feeBreakdown=Sn,A.source.destinationFee=Q,dt.destination.fee=Q,dt.source.destinationFee=Q,Q},async validate($){let S=Object.assign({},A),Q=$||w.amount;return S.source.fee=w.copyWith({amount:Q}),l.validate(S)}};return dt}async subscribeBalance(t,e,s){let n=this.config.getChainRoutes(e),a=new K(n.chain),r=n.getUniqueRoutes().map(async({source:c})=>{let{asset:l,balance:m}=c,d=n.chain.getBalanceAssetId(l),g=jn.isValid(d.toString())?await z(t,n.chain):t,p=m.build({address:g,asset:l,chain:n.chain});return a.subscribeBalance(l,p)}),i=await Promise.all(r);return(0,se.combineLatest)(i).pipe((0,se.debounceTime)(500)).subscribe(s)}};var yn=require("@galacticcouncil/xc-core");function Cn(u){let t=(0,yn.ConfigBuilder)(u.config).assets();return{assets:t,withAsset(e){let s=t.asset(e);return{sources:s,withSource(n){let a=s.source(n);return{destinations:a,withDestination(r){let{routes:i,destinationAssets:o,isAssetSelect:c,isTagSelect:l,build:m}=a.destination(r);return{routes:i,destinationAssets:o,isAssetSelect:c,isTagSelect:l,build({srcAddress:d,dstAddress:g,dstAsset:p,tag:f}){let h=m(p,f);return u.getTransferData(h,d,g)}}}}}}}}}var An=require("@galacticcouncil/xc-core"),Kn="https://api.wormholescan.io",It=class{_baseUrl;constructor(t){this._baseUrl=t||Kn}buildApi(t,e){return[this._baseUrl,t,"?"].join("")+new URLSearchParams(e).toString()}async getVaaBytes(t){let e=this.buildApi("/v1/signed_vaa/"+t,{});return await(await fetch(e)).json()}async getVaa(t){let e=this.buildApi("/api/v1/vaas/"+t,{});return(await(await fetch(e)).json()).data}async getVaaByTxHash(t){let e=this.buildApi("/api/v1/vaas/",{txHash:t}),n=await(await fetch(e)).json();if(n.data.length>0)return n.data[0];throw Error("Can't find VAA for given txHash: "+t)}async getOperations(t){let e=this.buildApi("/api/v1/operations/",t);return(await(await fetch(e)).json()).operations}async getOperation(t){let e=this.buildApi("/api/v1/operations/"+t,{});return await(await fetch(e)).json()}isMrlTransfer(t){let{payloadType:e,toAddress:s,toChain:n}=t,a="0x"+s.substring(26);return e===3&&n===16&&a===An.Precompile.Bridge}};var bn=require("@galacticcouncil/common"),v=require("@galacticcouncil/xc-core"),wn=require("@wormhole-foundation/sdk-base"),vn=require("@wormhole-foundation/sdk-connect"),xn=require("@wormhole-foundation/sdk-definitions");var ve=(s=>(s[s.WaitingForVaa=0]="WaitingForVaa",s[s.VaaEmitted=1]="VaaEmitted",s[s.Completed=2]="Completed",s))(ve||{});var zn=300*1e3,xe=class{parachainId;config;whScan;constructor(t,e){this.config=t,this.parachainId=e,this.whScan=new It}get chains(){let t=this.config.chains.values();return Array.from(t)}get filters(){let t=new Date,e=new Date;e.setDate(t.getDate()-6);let s=t.toISOString();return{page:"0",pageSize:"50",includeEndDate:"true",from:e.toISOString(),to:s}}async getWithdraws(t){let e=bn.acc.getMultilocationDerivatedAccount(this.parachainId,t,1,!0),n=(await this.whScan.getOperations({...this.filters,address:e})).map(async a=>{let{content:r}=a,{payload:i,standarizedProperties:o}=r,c=this.getStatus(a),l=this.chains.find(f=>f instanceof v.Parachain&&f.parachainId===this.parachainId),{toAddress:m,tokenAddress:d}=o,g=this.chains.find(f=>v.Wormhole.isKnown(f)&&v.Wormhole.fromChain(f).getWormholeId()===i.tokenChain),p;if(c===1&&a.vaa){let{timestamp:f}=this.getVaaHeader(a.vaa.raw),h=a.vaa.raw;if(this.isStuck(f))switch(g.getType()){case v.ChainType.EvmChain:let T=new gt(g);p=async y=>T.redeem(y,h);break;case v.ChainType.SolanaChain:let b=new At(g);p=async y=>b.redeem(y,h);break}}return{asset:d,assetSymbol:a.data.symbol,amount:a.data.tokenAmount,from:t,fromChain:l,to:m,toChain:g,status:c,redeem:p,operation:a}});return Promise.all(n)}async getDeposits(t,e="hydration"){let s=await this.whScan.getOperations({...this.filters,address:v.Precompile.Bridge,pageSize:"100"}),n=this.config.chains.get(e);if(!n)return[];let a=n,i=(await v.mrl.createPayload(a,t)).toHex(),o=s.filter(c=>{let{content:l}=c,{payload:m}=l;return m.payloadType===3&&m.toChain===16&&"0x"+m.payload===i}).map(async c=>{let{content:l,sourceChain:m}=c,{payload:d,standarizedProperties:g}=l,p=this.getStatus(c),{tokenAddress:f}=g,h=this.chains.find(y=>v.Wormhole.isKnown(y)&&v.Wormhole.fromChain(y).getWormholeId()===d.tokenChain),T=this.chains.find(y=>v.Wormhole.isKnown(y)&&v.Wormhole.fromChain(y).getWormholeId()===d.toChain),b;if(p===1&&c.vaa){let{timestamp:y}=this.getVaaHeader(c.vaa.raw),I=c.vaa.raw;if(this.isStuck(y)){let k=new bt(T);b=async H=>k.redeemMrlViaXcm(H,I)}}return{asset:f,assetSymbol:c.data.symbol,amount:c.data.tokenAmount,from:m.from,fromChain:h,to:t,toChain:n,status:p,redeem:b,operation:c}});return Promise.all(o)}isStuck(t){return Date.now()>=t*1e3+zn}getVaaHeader(t){let e=wn.encoding.b64.decode(t),s=(0,xn.deserialize)("Uint8Array",e);return{timestamp:s.timestamp,emitterChain:s.emitterChain,emitterAddress:s.emitterAddress.toString(),sequence:s.sequence,payload:s.payload,hash:s.hash,id:(0,vn.keccak256)(s.hash)}}getStatus(t){return t.vaa?t.targetChain&&t.targetChain.status==="completed"?2:1:0}};0&&(module.exports={DISPATCH_ADDRESS,EvmClaim,EvmPlatform,EvmSigner,FeeSwap,PlatformAdapter,SolanaClaim,SolanaLilJit,SolanaPlatform,SolanaSigner,SubstrateClaim,SubstrateExec,SubstratePlatform,SubstrateService,SubstrateSigner,SuiClaim,SuiPlatform,SuiSigner,TransferBuilder,Wallet,WhStatus,WormholeScan,WormholeTransfer,chunkBySize,deserializeV0,ixToHuman,serializeV0});
package/build/index.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  export { Wallet } from './Wallet';
2
2
  export { TransferBuilder } from './Wallet.utils';
3
3
  export { FeeSwap } from './FeeSwap';
4
- export { WormholeRateLimitValidation } from './transfer/WormholeRateLimitValidation';
5
4
  export * from './clients';
6
5
  export * from './platforms';
7
6
  export * from './types';
package/build/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{acc as Rs,big as Mt}from"@galacticcouncil/common";import{addr as ks,ConfigBuilder as _s,TransferValidator as Vs}from"@galacticcouncil/xc-core";import{combineLatest as Os,debounceTime as Ms}from"rxjs";import{ChainType as G}from"@galacticcouncil/xc-core";import{Abi as ke,Wormhole as _e}from"@galacticcouncil/xc-core";import{encodeFunctionData as Ve}from"viem";import{encoding as Lt}from"@wormhole-foundation/sdk-base";var st=class{#t;constructor(t){this.#t=t}redeem(t,e){let s=_e.fromChain(this.#t),n=Lt.b64.decode(e),a=Lt.hex.encode(n),r=ke.TokenBridge,o=Ve({abi:r,functionName:"completeTransfer",args:["0x"+a]});return{abi:JSON.stringify(r),data:o,from:t,to:s.getTokenBridge()}}};import{Abi as Ue,AssetAmount as ze,CallType as jt,Erc20Client as Ke}from"@galacticcouncil/xc-core";import{distinctUntilChanged as je,finalize as qe,shareReplay as He,Subject as $e}from"rxjs";var O=class{client;config;constructor(t,e){this.validateClient(t),this.validateConfig(e),this.client=t,this.config=e}validateClient(t){if(!t)throw new Error("No EVM client found")}validateConfig(t){if(!t.address)throw new Error("Contract address is required")}};import{Erc20Client as Oe}from"@galacticcouncil/xc-core";var at=class extends O{erc20;constructor(t,e){super(t,e),this.erc20=new Oe(t,e.address)}async getBalance(){let{args:t}=this.config,[e]=t;return this.erc20.balanceOf(e)}async getDecimals(){return this.erc20.decimals()}};var rt=class extends O{async getBalance(){let t=this.client.getProvider(),{address:e}=this.config;return t.getBalance({address:e})}async getDecimals(){return this.client.chain.nativeCurrency.decimals}};var ot=class{static get(t,e){switch(e.module){case"Erc20":return new at(t,e);case"Native":return new rt(t,e);default:throw new Error("Module "+e.module+" is not supported")}}};import{ContractFunctionExecutionError as Me,decodeEventLog as We}from"viem";var it=class{client;config;constructor(t,e){this.validateClient(t),this.client=t,this.config=e}validateClient(t){if(!t)throw new Error("No EVM client found")}get abi(){return this.config.abi}get asset(){let t=this.config.args,[e]=t;return e}get calldata(){return this.config.encodeFunctionData()}async estimateGas(t){let{address:e,args:s,value:n,func:a}=this.config;return await this.client.getProvider().estimateContractGas({address:e,abi:this.abi,functionName:a,args:s,value:n,account:t})}async estimateFee(t,e){if(e===0n)return 0n;try{let s=await this.estimateGas(t),n=await this.getGasPrice();return s*n}catch(s){return s instanceof Me?console.log(`Can't estimate fees!
2
- `,s.message):console.log(s),0n}}async getGasPrice(){return this.client.getProvider().getGasPrice()}async getNonce(t){return this.client.getProvider().getTransactionCount({address:t})}async simulateCall(t){let{address:e,args:s,value:n,func:a}=this.config,r=this.client.getProvider(),o=await this.getNonce(t);try{let{results:c}=await r.simulateCalls({account:t,calls:[{to:e,abi:this.abi,functionName:a,args:s,value:n}],stateOverrides:[{address:t,nonce:o}]}),[i]=c;return i}catch(c){return console.log(`Can't simulate call!
3
- `,c.details),{error:c}}}decodeEvents(t){let e=[];return t&&t.forEach(s=>{try{let{eventName:n,args:a}=We({abi:this.abi,data:s.data,topics:s.topics});e.push({eventName:n,args:a})}catch{}}),e}};var j=class{static get(t,e){return new it(t,e)}};import{Precompile as Ne}from"@galacticcouncil/xc-core";import{decodeAbiParameters as Le}from"viem";function Et(l){return l.module==="Snowbridge"&&l.func==="v2_sendMessage"}function Ut(l){if(!Et(l))return;let t=l.args[1];if(!t||t.length===0)return;let[e,s]=Le([{type:"uint8"},{type:"address"},{type:"uint128"}],t[0]);return s}function zt(l){let t=l.module==="Snowbridge"&&l.func==="v2_sendMessage"&&Array.isArray(l.args[1])&&l.args[1].length===0;return l.module==="TokenBridge"&&["wrapAndTransferETHWithPayload","wrapAndTransferETH"].includes(l.func)||t}function Kt(l){return Object.entries(Ne).map(([e,s])=>s).includes(l.address)}var ct=class{#t;constructor(t){this.#t=t.evmClient}async buildCall(t,e,s,n){let a=j.get(this.#t,n),{abi:r,asset:o,calldata:c}=a,i={abi:JSON.stringify(r),data:c,from:t,to:n.address,type:jt.Evm,value:n.value,dryRun:async()=>{let{error:f,logs:p}=await a.simulateCall(t),h=a.decodeEvents(p);return{call:n.module+"."+n.func,error:f?.shortMessage,events:h}}};if(Kt(n)||zt(n))return i;let u=Et(n)?Ut(n):o,m=new Ke(this.#t,u),d=await m.allowance(t,n.address);if(d>=e)return i;let g=m.approve(n.address,e);return{abi:JSON.stringify(Ue.Erc20),allowance:d,data:g,from:t,to:u,type:jt.Evm,dryRun:()=>{}}}async estimateFee(t,e,s,n){let r=await j.get(this.#t,n).estimateFee(t,e);return s.copyWith({amount:r})}async getBalance(t,e){let s=ot.get(this.#t,e),[n,a]=await Promise.all([s.getBalance(),s.getDecimals()]);return ze.fromAsset(t,{amount:n,decimals:a})}async subscribeBalance(t,e){let s=new $e,n=s.pipe(He(1)),a=this.#t.getProvider(),r=async()=>{let c=async()=>{let u=await this.getBalance(t,e);s.next(u)};await c();let i=a.watchBlocks({onBlock:()=>c()});return()=>i()},o;return r().then(c=>o=c),n.pipe(qe(()=>o?.()),je((c,i)=>c.amount===i.amount))}};import{EvmParachain as Ge}from"@galacticcouncil/xc-core";import{h160 as Qe}from"@galacticcouncil/common";import{Binary as Xe}from"polkadot-api";var qt="0x0000000000000000000000000000000000000401",{H160:Je}=Qe,Ht=class{#t;#e;#n;constructor(t,e){this.#t=t,this.#e=t.evmClient,this.#n=e}async signAndSend(t,e){let s=Je.fromAny(t.from),n=this.#e.getProvider(),a=!1;if(this.#t instanceof Ge)try{let o=this.#t.client,c=Xe.fromHex(t.data);await o.getUnsafeApi().txFromCallData(c),a=!0}catch{}let r;if(a){let[o,c]=await Promise.all([n.estimateGas({account:s,data:t.data,to:qt}),n.getGasPrice()]),i=c+c/100n*10n;r=await this.#n.sendTransaction({account:s,chain:this.#e.chain,data:t.data,maxPriorityFeePerGas:i,maxFeePerGas:i,gas:o*11n/10n,to:qt})}else{let{data:o,to:c,value:i}=t;r=await this.#n.sendTransaction({account:s,chain:this.#e.chain,data:o,to:c,value:i})}e.onTransactionSend(r),n.waitForTransactionReceipt({hash:r}).then(o=>e.onTransactionReceipt(o)).catch(o=>e.onError(o))}};import{AssetAmount as an,CallType as rn}from"@galacticcouncil/xc-core";import{PublicKey as on}from"@solana/web3.js";import{Buffer as cn}from"buffer";import{distinctUntilChanged as un,finalize as ln,shareReplay as mn,Subject as dn}from"rxjs";var M=class{connection;config;constructor(t,e){this.validateConnection(t),this.validateConfig(e),this.connection=t,this.config=e}validateConnection(t){if(!t)throw new Error("No connection found")}validateConfig(t){if(!t.address)throw new Error("Solana address is required")}};import{SolanaAddress as Ye}from"@wormhole-foundation/sdk-solana";var Ze=9,ut=class extends M{async getBalance(){let{address:t}=this.config,e=new Ye(t).unwrap(),s=await this.connection.getBalance(e);return BigInt(s)}async getDecimals(){return Ze}};import{SolanaAddress as It}from"@wormhole-foundation/sdk-solana";var lt=class extends M{constructor(t,e){super(t,e),this.validateToken(e)}async getBalance(){let{address:t,token:e}=this.config,s=new It(t).unwrap(),n=new It(e).unwrap();return(await this.connection.getParsedTokenAccountsByOwner(s,{mint:n})).value.reduce((r,{account:o})=>{let c=o.data.parsed.info.tokenAmount;return r+=BigInt(c.amount),r},0n)}async getDecimals(){let{token:t}=this.config,e=new It(t).unwrap();return(await this.connection.getTokenSupply(e)).value.decimals}validateToken(t){if(!t.token)throw new Error("Token address is required")}};var mt=class{static get(t,e){switch(e.module){case"Native":return new ut(t,e);case"Token":return new lt(t,e);default:throw new Error("Module "+e.module+" is not supported")}}};import{ComputeBudgetProgram as $t,PublicKey as tn,TransactionMessage as en,VersionedTransaction as Gt}from"@solana/web3.js";var Qt=.5,Xt=2,Jt=1,Yt=1e6,nn=25e4,dt=class{connection;config;constructor(t,e){this.validateConnection(t),this.connection=t,this.config=e}validateConnection(t){if(!t)throw new Error("No connection found")}async getPriorityMessage(t){let{instructions:e}=this.config,s=await this.getV0Message(t,e),n=await this.createPriorityFeeInstructions(s);return this.getV0Message(t,[...e,...n])}async estimateFee(t,e){if(e===0n)return 0n;let{instructions:s}=this.config,n=await this.getV0Message(t,s),a=await this.determineComputeBudget(n);return BigInt(a)}async getV0Message(t,e){let s=new tn(t),{blockhash:n}=await this.connection.getLatestBlockhash("finalized");return new en({payerKey:s,recentBlockhash:n,instructions:e}).compileToV0Message()}async createPriorityFeeInstructions(t,e=Qt,s=Xt,n=Jt,a=Yt){let[r,o]=await Promise.all([this.determineComputeBudget(t),this.determinePriorityFee(t,e,s,n,a)]);return[$t.setComputeUnitLimit({units:r}),$t.setComputeUnitPrice({microLamports:o})]}async simulateTransaction(t,e){let s=new Gt(e);return(await this.connection.simulateTransaction(s,{accounts:{encoding:"base64",addresses:[t]}})).value}async determineComputeBudget(t){let e=new Gt(t),s=await this.connection.simulateTransaction(e),{err:n,unitsConsumed:a}=s.value;return a&&!n?Math.round(a*1.2):nn}async determinePriorityFee(t,e=Qt,s=Xt,n=Jt,a=Yt){let r=n,o=await this.getTxAccounts(t),c=await this.connection.getRecentPrioritizationFees({lockedWritableAccounts:o});if(c){let i=c.map(m=>m.prioritizationFee).filter(m=>m>0).sort((m,d)=>m-d),u=Math.ceil(i.length*e);if(i.length>u){let d=i[u]*s;r=Math.max(r,d)}}return Math.min(Math.max(r,n),a)}async getTxAccounts(t){let e=(await Promise.all(t.addressTableLookups.map(n=>this.connection.getAddressLookupTable(n.accountKey)))).map(n=>n.value).filter(n=>n!==null),s=t.getAccountKeys({addressLookupTableAccounts:e??void 0});return t.compiledInstructions.flatMap(n=>n.accountKeyIndexes).map(n=>t.isAccountWritable(n)?s.get(n):null).filter(n=>n!==null)}};var q=class{static get(t,e){return new dt(t,e)}};import{MessageV0 as sn}from"@solana/web3.js";function _(l){return l.map(t=>({program:t.programId.toBase58(),data:t.data.toString("hex"),keys:t.keys.map(e=>e.pubkey.toBase58())}))}function Zt(l,t=1e3){let e=[],s=[],n=0;for(let a of l){let r=a.data?.length??0;s.length&&n+r>t&&(e.push(s),s=[],n=0),s.push(a),n+=r}return s.length&&e.push(s),e}function H(l){let t=l.serialize();return Buffer.from(t).toString("hex")}function Br(l){let t=Buffer.from(l,"hex"),e=Uint8Array.from(t);return sn.deserialize(e)}var gt=class{#t;constructor(t){this.#t=t.connection}async buildCall(t,e,s,n){let a=q.get(this.#t,n),r=await a.getPriorityMessage(t),o=r.serialize(),c=cn.from(o).toString("hex");return{from:t,data:c,ix:_(n.instructions),signers:n.signers,type:rn.Solana,dryRun:async()=>{let{err:i,logs:u}=await a.simulateTransaction(t,r);return{call:n.module+"."+n.func,error:i,events:u}}}}async estimateFee(t,e,s,n){let a=q.get(this.#t,n),r=await a.estimateFee(t,e),o=await a.getPriorityMessage(t),{accounts:c}=await a.simulateTransaction(t,o),u=(c&&c[0])?.lamports;if(u){let m=n.module==="TokenBridge"&&n.func==="TransferNativeWithPayload";return s.copyWith({amount:s.amount-BigInt(u)-(m?e:0n)+n.rentReserve})}return s.copyWith({amount:r+n.rentReserve})}async getBalance(t,e){let s=mt.get(this.#t,e),[n,a]=await Promise.all([s.getBalance(),s.getDecimals()]);return an.fromAsset(t,{amount:n,decimals:a})}async subscribeBalance(t,e){let s=new dn,n=s.pipe(mn(1)),a=async()=>{let o=async()=>{let u=await this.getBalance(t,e);s.next(u)};await o();let c=new on(e.address),i=this.#t.onAccountChange(c,()=>o());return()=>{this.#t.removeAccountChangeListener(i)}},r;return a().then(o=>r=o),n.pipe(ln(()=>r?.()),un((o,c)=>o.amount===c.amount))}};import{CallType as ft,Wormhole as gn}from"@galacticcouncil/xc-core";import{Keypair as te,PublicKey as $,SystemProgram as ee,TransactionMessage as fn}from"@solana/web3.js";import{ACCOUNT_SIZE as pn,NATIVE_MINT as pt,TOKEN_PROGRAM_ID as hn,createAssociatedTokenAccountIdempotentInstruction as ne,createCloseAccountInstruction as yn,createInitializeAccountInstruction as Cn,createTransferInstruction as bn,getAssociatedTokenAddressSync as An,getMinimumBalanceForRentExemptAccount as wn,getMint as vn}from"@solana/spl-token";import{utils as xn}from"@wormhole-foundation/sdk-solana";import{utils as se}from"@wormhole-foundation/sdk-solana-core";import{encoding as Sn}from"@wormhole-foundation/sdk-base";import{deserialize as ae}from"@wormhole-foundation/sdk-definitions";import{createCompleteTransferNativeInstruction as re,createCompleteTransferWrappedInstruction as Pn}from"@wormhole-foundation/sdk-solana-tokenbridge";var W=class{#t;constructor(t){this.#t=t.connection}async sendBundle(t){let{result:e}=await this.#t._rpcRequest("sendBundle",[t]);return e}async simulateBundle(t){return(await this.#t._rpcRequest("simulateBundle",[[t]])).result}async getInflightBundleStatuses(t){let{result:e}=await this.#t._rpcRequest("getInflightBundleStatuses",[t]);return e}async getRegion(){let{result:t}=await this.#t._rpcRequest("getRegions",[]);return t}async getTipAccount(){let{result:t}=await this.#t._rpcRequest("getTipAccounts",[]);return t}};var ht=class{#t;#e;#n;constructor(t){this.#t=t,this.#e=t.connection,this.#n=new W(t)}async redeem(t,e,s){let n=gn.fromChain(this.#t),a=Sn.b64.decode(e),r=ae("TokenBridge:Transfer",a),o=ae("Uint8Array",a),c=this.derivePostedVaaKey(n.getCoreBridge(),Buffer.from(r.hash)),i=new $(t),u=s?new $(s):i,m=i.equals(u),d=[];if(!await this.#e.getAccountInfo(c)){let y=te.generate(),S=await se.createVerifySignaturesInstructions(this.#t.connection,n.getCoreBridge(),i,o,y.publicKey),B=Zt(S,1e3);for(let T=0;T<B.length;T++){let A=B[T],E=await this.getV0Message(i,A),I=H(E);d.push({from:t,data:I,ix:_(A),signers:[y],type:ft.Solana})}let D=se.createPostVaaInstruction(this.#e,n.getCoreBridge(),i,o,y.publicKey),z=await this.getV0Message(i,[D]),C=H(z);d.push({from:t,data:C,ix:_([D]),type:ft.Solana})}let f=r.payload.token.chain==="Solana",p=new $(r.payload.token.address.toUint8Array()),h=f&&p.equals(pt),x=await this.#n.getTipAccount(),b=ee.transfer({fromPubkey:i,toPubkey:new $(x[0]),lamports:1e3});if(h&&m){let y=await this.redeemAndUnwrap(n,i,r,b);d.push(y)}else{let y=await this.redeemToken(n,i,u,p,f,r,b);d.push(y)}return d}async redeemToken(t,e,s,n,a,r,o){let i=(a?re:Pn)(this.#e,t.getTokenBridge(),t.getCoreBridge(),e,r),u=An(n,s),m=ne(e,u,s,n),d=await this.getV0Message(e,[m,i,o]),g=H(d);return{from:e.toBase58(),data:g,ix:_([m,i]),type:ft.Solana}}async redeemAndUnwrap(t,e,s,n){let a=new $(s.payload.to.address.toUint8Array()),r=await vn(this.#e,pt),o=s.payload.token.amount*BigInt(Math.pow(10,r.decimals-8)),c=await wn(this.#e),i=te.generate(),u=ne(e,a,e,pt),m=re(this.#e,t.getTokenBridge(),t.getCoreBridge(),e,s),d=ee.createAccount({fromPubkey:e,newAccountPubkey:i.publicKey,lamports:c,space:pn,programId:hn}),g=Cn(i.publicKey,pt,e),f=bn(a,i.publicKey,e,o),p=yn(i.publicKey,e,e),h=[u,m,d,g,f,p,n],x=await this.getV0Message(e,h),b=H(x);return{from:e.toBase58(),data:b,ix:_(h),signers:[i],type:ft.Solana}}derivePostedVaaKey(t,e){return xn.deriveAddress([Buffer.from("PostedVAA"),e],t)}async getV0Message(t,e){let{blockhash:s}=await this.#e.getLatestBlockhash("finalized");return new fn({payerKey:t,recentBlockhash:s,instructions:e}).compileToV0Message()}};import{Keypair as oe,MessageV0 as Tn,VersionedTransaction as Bn}from"@solana/web3.js";import{Buffer as Ft}from"buffer";var ie=class{#t;#e;#n;constructor(t,e){this.#t=t,this.#e=e,this.#n=new W(t)}async signAndSend(t,e){let{data:s,signers:n}=t,a=this.toVersioned(s,n);try{if(this.#e instanceof oe){a.sign([this.#e]);let i=await this.#t.connection.sendTransaction(a);e.onTransactionSend(i);let u=await this.#t.connection.getSignatureStatus(i);e.onStatus?.(u);return}let r=this.#e;await r.connect(),n&&a.sign(n);let{signature:o}=await r.signAndSendTransaction(a);e.onTransactionSend(o);let c=await this.#t.connection.getSignatureStatus(o);e.onStatus?.(c)}catch(r){e.onError(r)}}async signAndSendAll(t,e){let s=t.map(n=>{let{data:a,signers:r}=n;return this.toVersioned(a,r)});try{let n;if(this.#e instanceof oe)s.forEach(c=>c.sign([this.#e])),n=s.map(c=>Ft.from(c.serialize()).toString("base64"));else{let c=this.#e;await c.connect(),n=(await c.signAllTransactions(s)).map(u=>Ft.from(u.serialize()).toString("base64"))}let a=await this.#n.simulateBundle(n);if(a.value.summary!=="succeeded")throw new Error("Bundle simulation failed! "+JSON.stringify(a,null,2));let r=await this.#n.sendBundle(n);e.onTransactionSend(r);let o=await this.#n.getInflightBundleStatuses([r]);e.onBundleStatus?.(o.value)}catch(n){e.onError(n)}}toVersioned(t,e){let s=Ft.from(t,"hex"),n=Uint8Array.from(s),a=Tn.deserialize(n),r=new Bn(a);return e&&r.sign(e),r}};import{Abi as En,CallType as In,Precompile as Fn,Wormhole as Dn}from"@galacticcouncil/xc-core";import{encoding as ce}from"@wormhole-foundation/sdk-base";import{encodeFunctionData as Rn}from"viem";import{Binary as Dt}from"polkadot-api";var yt=class{#t;constructor(t){this.#t=t,Dn.fromChain(this.#t)}redeemMrl(t,e){let s=ce.b64.decode(e),n=ce.hex.encode(s),a=En.Gmp,r=Rn({abi:a,functionName:"wormholeTransferERC20",args:["0x"+n]});return{abi:JSON.stringify(a),data:r,from:t,to:Fn.Bridge}}async redeemMrlViaXcm(t,e){let n=this.#t.client.getUnsafeApi(),a=this.redeemMrl(t,e),o=await n.tx.EthereumXcm.transact({xcm_transaction:{type:"V2",value:{gas_limit:[5000000n,0n,0n,0n],fee_payment:{type:"Auto",value:void 0},action:{type:"Call",value:Dt.fromHex(a.to)},value:[0n,0n,0n,0n],input:Dt.fromHex(a.data),access_list:void 0}}}).getEncodedData();return{data:Dt.toHex(o),from:t,type:In.Substrate,dryRun:async()=>{},txOptions:void 0}}};import{AssetAmount as Mn,CallType as Wn}from"@galacticcouncil/xc-core";import{Binary as Ct}from"polkadot-api";import{big as kn}from"@galacticcouncil/common";async function Rt(l,t,e){let s=await e.getDecimals(),n=e.chain.getAssetDecimals(t)??s,a=e.chain.usesChainDecimals?s:n;return{amount:kn.convertDecimals(l,a,n),decimals:n}}import{enums as _n}from"@galacticcouncil/common";var ue=l=>{let t=[];for(let e of l)if(["PolkadotXcm"].includes(e.type)&&e.value.type==="FeesPaid"){let n=e.value.value.fees;for(let a of n)if(a.fun.type==="Fungible"){let r=BigInt(a.fun.value);t.push(r)}}return t.reduce((e,s)=>e+s,0n)},N=l=>{let t=l.value.error;return t.type==="Module"?_n.enumPath(t.value):JSON.stringify(t.value)};import{xcm as kt}from"@galacticcouncil/common";function Vn(l){return{parents:0,interior:{type:"X1",value:l.startsWith("0x")?kt.toAccountKey20(l):kt.toAccountId32(l)}}}function le(l){return{type:"V4",value:{parents:1,interior:{type:"X1",value:{type:"Parachain",value:l.parachainId}}}}}var On=(l,t)=>({id:kt.transform(l),fun:{type:"Fungible",value:t}}),me=(l,t,e,s,n,a)=>{console.log(a);let r=Vn(l),o=On(t,e.amount);return{type:"V4",value:[{type:"WithdrawAsset",value:[o]},{type:"BuyExecution",value:{fees:o,weight_limit:{type:"Unlimited"}}},{type:"Transact",value:{origin_kind:{type:"SovereignAccount"},require_weight_at_most:{ref_time:s,proof_size:n},call:a}},{type:"RefundSurplus",value:void 0},{type:"DepositAsset",value:{assets:{type:"Wild",value:{type:"AllCounted",value:1}},beneficiary:r}}]}};var bt=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}async remoteExec(t,e,s,n,a={}){let r=this.#t.api,o=await this.#t.getAsset(),c=this.#e.api,i=this.#e.chain,u=await i.getCurrency(),m=u.asset,d=u.decimals,g=i.getAssetXcmLocation(m),f=Ct.fromHex(s.data),h=await(await c.txFromCallData(f)).getPaymentInfo(e),x=BigInt(h.partial_fee)*120n/100n,b=Mn.fromAsset(m,{amount:x,decimals:d}),y=h.weight.ref_time,S=h.weight.proof_size,B=le(i),D=me(e,g,b,y,S,f),z=r.tx.PolkadotXcm.send({dest:B,message:D}),C=[];try{let w=await this.#t.chain.dex.getCalldata(t,a.srcFeeAsset||o,m,b,10),nt=Ct.fromHex(w),K=await r.txFromCallData(nt);C.push(K)}catch{}let T=await n(b),A=Ct.fromHex(T.data),E=await r.txFromCallData(A);C.push(E),C.push(z);let I=C.map(w=>w.decodedCall),et=r.tx.Utility.batch_all({calls:I}),Bt=await et.getEncodedData();return{from:t,data:Ct.toHex(Bt),type:Wn.Substrate,dryRun:this.#t.isDryRunSupported()?async()=>{try{let w=await this.#t.dryRun(t,et);return{call:"polkadotXcm.send",error:w.execution_result&&w.execution_result.success?void 0:N(w.execution_result),events:w.emitted_events||[],xcm:w.forwarded_xcms||[]}}catch(w){return{call:"polkadotXcm.send",error:w instanceof Error?w.message:"unknown"}}}:()=>{}}}};import{Asset as Hn,AssetAmount as pe,CallType as $n}from"@galacticcouncil/xc-core";import{Binary as Gn}from"polkadot-api";import{concatMap as he,catchError as Qn,distinctUntilChanged as Xn,firstValueFrom as Jn,map as Yn,throwError as Zn}from"rxjs";import{addr as Nn,multiloc as _t,AssetAmount as Ln}from"@galacticcouncil/xc-core";import{acc as Un,enums as zn}from"@galacticcouncil/common";import{Blake2256 as Kn,u32 as jn}from"@polkadot-api/substrate-bindings";import{toHex as qn,fromHex as de}from"@polkadot-api/utils";import{Enum as ge}from"polkadot-api";var{Ss58Addr:fe}=Nn,P=class l{chain;_currency;constructor(t){this.chain=t}static async create(t){return new l(t)}get client(){return this.chain.client}get api(){return this.client.getUnsafeApi()}async getCurrency(){return this._currency||(this._currency=this.chain.getCurrency()),this._currency}async getAsset(){return(await this.getCurrency()).asset}async getDecimals(){return(await this.getCurrency()).decimals}async getExistentialDeposit(){let t;try{let n=await this.api.constants.Balances.ExistentialDeposit();t=typeof n=="bigint"?n:BigInt(String(n))}catch{t=0n}let{asset:e,decimals:s}=await this.getCurrency();return Ln.fromAsset(e,{amount:t,decimals:s})}isDryRunSupported(){return this.api.apis?.DryRunApi!==void 0}async buildMessageId(t,e,s,n){let a=await this.client._request("system_accountNextIndex",[t]),r=jn.enc(a),o=u=>new TextEncoder().encode(u),c=new Uint8Array([...o(this.chain.parachainId.toString()),...de(t.startsWith("0x")?t.slice(2):t),...r,...de(s.startsWith("0x")?s.slice(2):s),...o(n),...o(e.toString())]),i=Kn(c);return qn(i)}async dryRun(t,e){let s=ge("Signed",t),n=ge("system",s),a=await this.api.apis.DryRunApi.dry_run_call(n,e.decodedCall,4);if(!a.success)throw new Error("DryRun call failed");let r=a.value;if("type"in r&&"value"in r)throw new Error("DryRun call error: "+zn.enumPath(r.value));return r}async estimateNetworkFee(t,e){let s=e.getTx(this.client);try{let n=await s.getPaymentInfo(t);return BigInt(n.partial_fee)}catch{console.warn("Can't estimate network fee.")}return 0n}async estimateDeliveryFee(t,e){if(this.chain.usesDeliveryFee){let s=await this.estimateDeliveryFeeWith(t,e);try{let n=e.getTx(this.client),a=await this.dryRun(s,n);if(a.execution_result?.success)return ue(a.emitted_events||[]);{let r=N(a.execution_result);console.warn(`Can't estimate delivery fee. Reason:
4
- ${r}`)}}catch{}}return 0n}async estimateDeliveryFeeWith(t,e){if(["PolkadotXcm"].includes(e.module)){let n=e.getTx(this.client).decodedCall.value.value,a="dest"in n?n.dest:void 0;if(!a)return t;let r=_t.findNestedKey(a,"interior"),o=_t.findParachain(a);if(_t.findGlobalConsensus(a))return t;if(o){let i=Un.getSovereignAccounts(o);return this.chain.parachainId===0?fe.encodePubKey(i.relay):fe.encodePubKey(i.generic)}if(r&&r.interior==="Here")return this.chain.treasury||t}return t}};var At=class{#t;constructor(t){this.#t=P.create(t)}async useSignerFee(t){let e=await this.#t,s=await e.getAsset();return e.chain.usesSignerFee&&!s.isEqual(t)}async buildCall(t,e,s,n){let a=await this.#t,o=await this.useSignerFee(s)?{asset:new Hn(s)}:void 0,c=n.getTx(a.client),i=n.module+"."+n.func,u=await c.getEncodedData();return{from:t,data:Gn.toHex(u),type:$n.Substrate,txOptions:o,dryRun:a.isDryRunSupported()?async()=>{try{let m=n.getTx(a.client),d=await a.dryRun(t,m),g=d.execution_result&&d.execution_result.success?void 0:N(d.execution_result);return{call:i,error:g,events:d.emitted_events||[],xcm:d.forwarded_xcms||[]}}catch(m){return{call:i,error:m instanceof Error?m.message:"unknown"}}}:()=>{}}}async estimateFee(t,e,s,n){let a=await this.#t,r=await a.estimateNetworkFee(t,n),o=await a.estimateDeliveryFee(t,n),c=await this.exchangeFee(r+o,s),i=await Rt(c,s,a);return s.copyWith(i)}async getBalance(t,e){let s=await this.subscribeBalance(t,e);return Jn(s)}async subscribeBalance(t,e){let s=await this.#t,{module:n,func:a,args:r,transform:o}=e;return s.client.getUnsafeApi().query[n][a].watchValue(...r,{at:"best"}).pipe(Yn(({value:u})=>u)).pipe(he(u=>o(u)),Xn((u,m)=>u===m),he(async u=>{let m=await Rt(u,t,s);return pe.fromAsset(t,m)}),Qn(u=>(console.error("subscribe fails for:",t),Zn(()=>u))))}async exchangeFee(t,e){let s=await this.#t,n=await s.getAsset(),a=await s.getDecimals();if(n.isEqual(e))return t;try{let r=s.chain.dex,o=pe.fromAsset(n,{amount:t,decimals:a});return(await r.getQuote(e,n,o,!0)).amount}catch{}return t}};import{multiloc as ye}from"@galacticcouncil/xc-core";import{Binary as ts,Enum as Vt}from"polkadot-api";var Ce=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}signAndSend(t,e){let n=this.#t.client.getUnsafeApi(),a=ts.fromHex(t.data),r={};t.txOptions?.asset&&(r={asset:this.getFeeAsset(t.txOptions.asset)}),n.txFromCallData(a).then(o=>{o.signSubmitAndWatch(this.#e,r).subscribe({next:c=>{c.type==="broadcasted"&&e.onTransactionSend(c.txHash),c.type==="finalized"&&e.onFinalized(c)},error:c=>{e.onError(c)}})})}getFeeAsset(t){let e=this.#t.getAssetXcmLocation(t);if(e){let s=ye.findPalletInstance(e),n=ye.findGeneralIndex(e);return{parents:0,interior:Vt("X2",[Vt("PalletInstance",Number(s)),Vt("GeneralIndex",BigInt(n))])}}throw new Error("Asset location not found")}};import{CallType as ns,Wormhole as ss}from"@galacticcouncil/xc-core";import{Transaction as as}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as rs}from"@mysten/sui/utils";import{toBase64 as os}from"@mysten/bcs";import{encoding as is,serialize as cs,toChainId as us}from"@wormhole-foundation/sdk-connect";import{deserialize as ls}from"@wormhole-foundation/sdk-definitions";import{getPackageId as be}from"@wormhole-foundation/sdk-sui";import{getTokenCoinType as ms}from"@wormhole-foundation/sdk-sui-tokenbridge";import{fromBase64 as es}from"@mysten/bcs";function wt(l,t={}){let e=l.inputs??[],s=l.commands??[],n=t.numbers??"string",a=t.decode32As??"address",r=u=>n==="bigint"?u:n==="number"?Number(u):u.toString(),o=u=>{let m=es(u),d=g=>{let f=0n;for(let p=0;p<g;p++)f|=BigInt(m[p])<<8n*BigInt(p);return f};return m.length===1?{type:"pure",valueType:"u8",value:Number(m[0])}:m.length===2?{type:"pure",valueType:"u16",value:r(d(2))}:m.length===4?{type:"pure",valueType:"u32",value:Number(d(4))}:m.length===8?{type:"pure",valueType:"u64",value:r(d(8))}:m.length===32&&a==="address"?{type:"pure",valueType:"address",value:"0x"+[...m].map(f=>f.toString(16).padStart(2,"0")).join("")}:{type:"pure",valueType:"vector<u8>",value:Array.from(m)}},c=u=>{let m=e[u];if(!m)return{Input:u};if(m.Pure?.bytes)return o(m.Pure.bytes);let d=m.Object?.SharedObject;if(d)return{type:"object",objectType:"sharedObject",objectId:d.objectId,initialSharedVersion:String(d.initialSharedVersion),mutable:!!d.mutable};let g=m.Object?.ImmOrOwnedObject;return g?{type:"object",objectType:"immOrOwnedObject",objectId:g.objectId,version:String(g.version),digest:g.digest??void 0}:{Input:u}},i=u=>u?.GasCoin?"GasCoin":Array.isArray(u?.NestedResult)?u:typeof u?.Input=="number"?c(u.Input):u;return s.map(u=>{if(u.MoveCall){let m=u.MoveCall;return{MoveCall:{...m,arguments:(m.arguments??[]).map(i)}}}if(u.SplitCoins){let m=u.SplitCoins,d=m.coin?.GasCoin?"GasCoin":i(m.coin),g=(m.amounts??[]).map(i);return{SplitCoins:[d,g]}}if(u.MergeCoins){let m=u.MergeCoins;return{MergeCoins:{...m,destination:i(m.destination),sources:(m.sources??[]).map(i)}}}if(u.TransferObjects){let m=u.TransferObjects;return{TransferObjects:{...m,objects:(m.objects??[]).map(i),address:i(m.address)}}}return u})}var Ae=class{#t;constructor(t){this.#t=t}async redeem(t,e){let s=ss.fromChain(this.#t),n=this.#t.client,a=is.b64.decode(e),r=ls("TokenBridge:Transfer",a),o=s.getCoreBridge(),c=s.getTokenBridge(),i=await ms(n,c,r.payload.token.address.toUint8Array(),us(r.payload.token.chain));if(!i)throw new Error("Unable to fetch token coinType");let[u,m]=await Promise.all([be(n,o),be(n,c)]),d=new as;d.setSender(t);let[g]=d.moveCall({target:`${u}::vaa::parse_and_verify`,arguments:[d.object(o),d.pure.vector("u8",cs(r)),d.object(rs)]}),[f]=d.moveCall({target:`${m}::vaa::verify_only_once`,arguments:[d.object(c),g]}),[p]=d.moveCall({target:`${m}::complete_transfer::authorize_transfer`,arguments:[d.object(c),f],typeArguments:[i]}),[h]=d.moveCall({target:`${m}::complete_transfer::redeem_relayer_payout`,arguments:[p],typeArguments:[i]});d.moveCall({target:`${m}::coin_utils::return_nonzero`,arguments:[h],typeArguments:[i]});let x=await d.build({client:n}),b=await d.toJSON(),y=wt(JSON.parse(b));return{from:t,commands:y,data:os(x),type:ns.Sui}}};import{AssetAmount as fs,CallType as ps}from"@galacticcouncil/xc-core";import{toBase64 as hs}from"@mysten/bcs";import{distinctUntilChanged as ys,finalize as Cs,shareReplay as bs,Subject as As}from"rxjs";var vt=class{client;config;constructor(t,e){this.validateClient(t),this.validateConfig(e),this.client=t,this.config=e}validateClient(t){if(!t)throw new Error("No client found")}validateConfig(t){if(!t.address)throw new Error("Sui address is required")}};import{SUI_TYPE_ARG as ds}from"@mysten/sui/utils";var gs=9,xt=class extends vt{async getBalance(){let{address:t}=this.config,e=await this.client.getBalance({owner:t,coinType:ds});return BigInt(e.totalBalance)}async getDecimals(){return gs}};var St=class{static get(t,e){switch(e.module){case"Native":return new xt(t,e);default:throw new Error("Module "+e.module+" is not supported")}}};var Pt=class{#t;constructor(t){this.#t=t.client}async buildCall(t,e,s,n){let{transaction:a}=n;a.setSender(t);let r=await a.build({client:this.#t}),o=await a.toJSON(),c=wt(JSON.parse(o));return{from:t,commands:c,data:hs(r),type:ps.Sui,dryRun:async()=>{let i=await this.#t.dryRunTransactionBlock({transactionBlock:r});return{call:n.module+"."+n.func,error:i.executionErrorSource}}}}async estimateFee(t,e,s,n){let{transaction:a}=n;a.setSender(t);let r=await a.build({client:this.#t}),c=(await this.#t.dryRunTransactionBlock({transactionBlock:r})).effects.gasUsed,i=BigInt(c.computationCost),u=BigInt(c.storageCost),m=i+u;return s.copyWith({amount:m})}async getBalance(t,e){let s=St.get(this.#t,e),[n,a]=await Promise.all([s.getBalance(),s.getDecimals()]);return fs.fromAsset(t,{amount:n,decimals:a})}async subscribeBalance(t,e){let s=new As,n=s.pipe(bs(1)),a=async()=>{await(async()=>{let i=await this.getBalance(t,e);s.next(i)})();let c=setInterval(()=>{},3e3);return()=>clearInterval(c)},r;return a().then(o=>r=o),n.pipe(Cs(()=>r?.()),ys((o,c)=>o.amount===c.amount))}};import{Ed25519Keypair as ws}from"@mysten/sui/keypairs/ed25519";import{Transaction as vs}from"@mysten/sui/transactions";var we=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}async signAndSend(t,e){let{from:s,data:n}=t,a=this.#t.client;try{if(this.#e instanceof ws){let c=vs.from(n),i=await a.signAndExecuteTransaction({signer:this.#e,transaction:c,options:{showEffects:!0,showEvents:!0,showObjectChanges:!0,showBalanceChanges:!0}});e.onTransactionSend(i.digest);return}let r=await this.#e.signTransaction({transaction:n,address:s,networkID:"sui:mainnet"}),o=await a.executeTransactionBlock({transactionBlock:r.transaction,signature:r.signature,options:{showEffects:!0,showEvents:!0,showObjectChanges:!0,showBalanceChanges:!0}});e.onTransactionSend(o.digest)}catch(r){e.onError(r)}}};var V=class{platform={};constructor(t){switch(t.getType()){case G.EvmChain:this.registerEvm(t);break;case G.EvmParachain:this.registerEvm(t),this.registerSubstrate(t);break;case G.Parachain:this.registerSubstrate(t);break;case G.SolanaChain:this.registerSolana(t);break;case G.SuiChain:this.registerSui(t);break;default:throw new Error("Unsupported platform: "+t.getType())}}registerEvm(t){let e=t;this.platform.Evm=new ct(e)}registerSolana(t){let e=t;this.platform.Solana=new gt(e)}registerSui(t){let e=t;this.platform.Sui=new Pt(e)}registerSubstrate(t){let e=t;this.platform.Substrate=new At(e)}async buildCall(t,e,s,n){return this.platform[n.type].buildCall(t,e,s,n)}async estimateFee(t,e,s,n){return this.platform[n.type].estimateFee(t,e,s,n)}async getBalance(t,e){return this.platform[e.type].getBalance(t,e)}async subscribeBalance(t,e){return this.platform[e.type].subscribeBalance(t,e)}};import{addr as Es,AssetAmount as Ot,Parachain as Is}from"@galacticcouncil/xc-core";import{acc as Fs,big as Te}from"@galacticcouncil/common";import{big as xs}from"@galacticcouncil/common";import Q from"big.js";function ve(l,t,e,s){let n=l.toBig().minus(e.toBig()).minus(l.isSame(t)?t.toBig():new Q(0));return s&&(n=n.minus(l.isSame(s)?s.toBig():new Q(0))),l.copyWith({amount:n.lt(0)?0n:BigInt(n.toFixed())})}function xe(l,t,e,s){let a=l.copyWith({amount:0n}).toBig().plus(l.isSame(t)?t.toBig():new Q(0)).plus(l.toBig().lt(e.toBig())?e.toBig():new Q(0));return s&&(a=a.plus(l.isSame(s)&&l.toBig().lt(s.toBig())?s.toBig():new Q(0))),l.copyWith({amount:BigInt(a.toFixed())})}async function F(l,t){return t.isEvmParachain()?t.getDerivatedAddress(l):l}function Se(l,t){return t?xs.toBigInt(t,l):0n}import{addr as Ss,AssetAmount as Ps,Parachain as Pe}from"@galacticcouncil/xc-core";import{big as Ts}from"@galacticcouncil/common";var{EvmAddr:Bs}=Ss,L=class{adapter;config;constructor(t,e){this.adapter=t,this.config=e}async getEd(){let{chain:t}=this.config;if(t instanceof Pe)return(await P.create(t)).getExistentialDeposit()}async getBalance(t){let{chain:e,route:s}=this.config,{source:n}=s,a=n.asset,r=e.getBalanceAssetId(a),o=Bs.isValid(r.toString())?await F(t,e):t,c=s.source.balance.build({address:o,asset:a,chain:e});return this.adapter.getBalance(a,c)}async getMin(){let{chain:t,route:e}=this.config,{source:s}=e,n=s.asset,a=s.min;if(t instanceof Pe&&a){let r=t.getMinAssetId(n),o=a.build({asset:r});return this.adapter.getBalance(n,o)}return this.getAssetMin()}async getAssetMin(){let{chain:t,route:e}=this.config,{source:s}=e,n=s.asset,a=t.getAssetMin(n),r=await this.getDecimals(n),o=0n;return a&&(o=Ts.toBigInt(a,r)),Ps.fromAsset(n,{amount:o,decimals:r})}async getDecimals(t){let{chain:e}=this.config,s=e.getAssetDecimals(t);return s||(await e.getCurrency()).decimals}};var{EvmAddr:Be}=Es,X=class extends L{constructor(t,e){super(t,e)}async getCall(t){let{amount:e,sender:s,source:n}=t,a=await this.getTransfer(t);return this.adapter.buildCall(s,e,n.feeBalance,a)}async getDestinationFee(t){let{chain:e,route:s}=this.config,{source:n,destination:a,transact:r}=s,o=a.fee.amount,c=n.destinationFee.asset||a.fee.asset,i=await this.getDecimals(c);if(Number.isFinite(o))return{fee:Ot.fromAsset(c,{amount:Te.toBigInt(o,i),decimals:i}),feeBreakdown:{}};let u=o,{amount:m,breakdown:d}=await u.build({feeAsset:c,transferAsset:n.asset,source:r?r.chain:e,destination:a.chain,amount:t});return{fee:Ot.fromAsset(c,{amount:m,decimals:i}),feeBreakdown:d}}async getDestinationFeeBalance(t){let{chain:e,route:s}=this.config,{source:n,destination:a}=s,r=n.asset,o=n.destinationFee.asset||a.fee.asset;if(r.isEqual(o))return this.getBalance(t);let c=e.getBalanceAssetId(o),i=Be.isValid(c.toString())?await F(t,e):t,u=n.destinationFee.balance.build({address:i,asset:o,chain:e});return this.adapter.getBalance(o,u)}async getFee(t){let{chain:e,route:s}=this.config,{amount:n,sender:a,source:r}=t,o=await this.getTransfer(t),c=s.contract?await F(a,e):a,i=await this.adapter.estimateFee(c,n,r.feeBalance,o),{fee:u}=s.source,m=u?Se(i.decimals,u.extra):0n,d=i.amount+m;return i.copyWith({amount:d})}async getFeeBalance(t){let{chain:e,route:s}=this.config,{source:n}=s;if(!n.fee)return this.getBalance(t);let a=await this.getFeeAsset(t),r=e.getBalanceAssetId(a),o=Be.isValid(r.toString())?await F(t,e):t,c=n.fee.balance.build({address:o,asset:a,chain:e});return this.adapter.getBalance(a,c)}async getFeeAsset(t){let{chain:e,route:s}=this.config,{source:n}=s,a=n.fee,r=n.asset;if(!a)return r;let o=a.asset;return e instanceof Is&&"build"in o?await o.build({chain:e,address:t}):o}async getTransfer(t){let{chain:e,route:s}=this.config,{contract:n,extrinsic:a,program:r,move:o}=s;if(a){let{address:i,amount:u,asset:m,sender:d}=t,f=await(await P.create(e)).buildMessageId(d,u,m.originSymbol,i);return a.build({...t,messageId:f})}let c=n||r||o;if(c)return c.build({...t});throw new Error("AssetRoute transfer config is invalid! Specify contract, extrinsic, move or program instructions.")}async getTransact(t){let{route:e}=this.config,{transact:s}=e;if(s){let n=Object.assign({transact:{chain:s.chain}}),a={...t,...n};return{...await this.getTransactData(s,a),chain:s.chain}}}async getTransactData(t,e){let{chain:s,extrinsic:n}=t,a=await n.build(e),r=await P.create(s),o=a.getTx(r.client),c=e.source.chain,i=e.sender,u=Fs.getMultilocationDerivatedAccount(c.parachainId,i,s.parachainId===0?0:1,s.usesH160Acc),m=await o.getPaymentInfo(u),d=await o.getEncodedData(),[g,f]=await Promise.all([this.getTransactFee(t),this.getTransactFeeBalance(t,e)]);return{call:d,chain:s,fee:g,feeBalance:f,weight:{refTime:m.weight.ref_time,proofSize:m.weight.proof_size}}}async getTransactFee(t){let{fee:e}=t,s=await this.getDecimals(e.asset),n=Te.toBigInt(e.amount,s);return Ot.fromAsset(e.asset,{amount:n,decimals:s})}async getTransactFeeBalance(t,e){let{chain:s}=this.config,{fee:n}=t,a=n.balance.build({address:e.sender,asset:n.asset,chain:s});return this.adapter.getBalance(n.asset,a)}};var J=class extends L{constructor(t,e){super(t,e)}};import{AssetAmount as Ds}from"@galacticcouncil/xc-core";var Y=class{ctx;constructor(t){this.ctx=t}get asset(){let{source:t}=this.ctx;return t.balance}get dex(){let{source:t}=this.ctx;return t.chain.dex}get destFee(){let{source:t,transact:e}=this.ctx;return e?e.fee:t.destinationFee}get destFeeBalance(){let{source:t,transact:e}=this.ctx;return e?e.feeBalance:t.destinationFeeBalance}get feeBalance(){let{source:t}=this.ctx;return t.feeBalance}async getSwap(t){let{asset:e,decimals:s}=await this.dex.chain.getCurrency(),{amount:n}=await this.dex.getQuote(e,t,t);return{aIn:t,aOut:Ds.fromAsset(e,{amount:n,decimals:s}),enabled:!0}}isSwapSupported(t){try{this.dex}catch{return!1}return!!(t&&t.swap)}async getDestinationSwap(t){let{amount:e,route:s}=await this.dex.getQuote(t,this.destFee,this.destFee),n=this.destFeeBalance.amount<this.destFee.amount,a=this.feeBalance.amount-t.amount>e*2n;return{aIn:t.copyWith({amount:e}),aOut:this.destFee,enabled:n&&a,route:s}}isDestinationSwapSupported(t){try{this.dex}catch{return!1}let e=!t.isSame(this.destFee),s=this.asset.isSame(this.destFee);return e&&!s}};var{EvmAddr:Ws}=ks,Wt=class{config;validations;constructor({configService:t,transferValidations:e}){this.config=t,this.validations=e||[]}async transfer(t,e,s,n,a){let r=_s(this.config).assets().asset(t).source(s).destination(a).build();return this.getTransferData(r,e,n)}async remoteXcm(t,e,s,n,a={}){let r=this.config.getChain(e),o=this.config.getChain(s);if(!(r.isSubstrate()&&o.isSubstrate()))throw Error("RemoteXcm is supported only between parachains");let[i,u]=await Promise.all([P.create(r),P.create(o)]),m=new bt(i,u),d=Rs.getMultilocationDerivatedAccount(r.parachainId,t,1,o.usesH160Acc),g=await u.getAsset(),f=await this.transfer(g,t,e,d,s);return m.remoteExec(t,d,n,p=>{let h=p.toDecimal();return f.buildCall(h)},a)}async getTransferData(t,e,s){let n=t.origin,a=t.reverse,r=new V(n.chain),o=new V(a.chain),c=new X(r,n),i=new J(o,a),u=new Vs(...this.validations),[m,d,g,f,p,h,x]=await Promise.all([c.getBalance(e),c.getFeeBalance(e),c.getDestinationFee(),c.getDestinationFeeBalance(e),c.getMin(),i.getBalance(s),i.getMin()]),{source:b,destination:y}=n.route,S=g.fee.copyWith(y.fee.asset),B=g.feeBreakdown,z=b.asset.isEqual(S)&&S.amount>10n?S.amount+1n:10n,C={address:s,amount:z,asset:b.asset,destination:{balance:h,chain:a.chain,fee:S,feeBreakdown:B},sender:e,source:{balance:m,chain:n.chain,fee:d.copyWith({amount:0n}),feeBalance:d,destinationFee:g.fee,destinationFeeBalance:f}};C.transact=await c.getTransact(C);let T=new Y(C),A=await c.getFee(C),E;T.isSwapSupported(b.fee)&&(E=await T.getSwap(A),C.source.feeSwap=E);let I;T.isDestinationSwapSupported(A)&&(I=await T.getDestinationSwap(A),C.source.destinationFeeSwap=I),(E||I)&&(A=await c.getFee(C),A=A.padByPct(5n));let et=await i.getEd(),Bt=xe(h,S,x,et),w=await c.getEd(),nt=ve(m,A,p,w);C.amount=0n,C.source.fee=A;let K={source:{balance:m,destinationFee:g.fee,destinationFeeBalance:f,destinationFeeSwap:I,fee:A,feeBalance:d,feeSwap:E,max:nt,min:m.copyWith({amount:Bt.amount})},destination:{balance:h,fee:S},async buildCall(R){let v=Object.assign({},C);return v.amount=Mt.toBigInt(R,m.decimals),v.transact=await c.getTransact(v),c.getCall(v)},async estimateFee(R){let v=Object.assign({},C);return v.amount=Mt.toBigInt(R,m.decimals),v.transact=await c.getTransact(v),c.getFee(v)},async estimateDestinationFee(R){let v=Mt.toBigInt(R,m.decimals),{fee:k,feeBreakdown:Re}=await c.getDestinationFee(v);return C.destination.fee=k,C.destination.feeBreakdown=Re,C.source.destinationFee=k,K.destination.fee=k,K.source.destinationFee=k,k},async validate(R){let v=Object.assign({},C),k=R||A.amount;return v.source.fee=A.copyWith({amount:k}),u.validate(v)}};return K}async subscribeBalance(t,e,s){let n=this.config.getChainRoutes(e),a=new V(n.chain),r=n.getUniqueRoutes().map(async({source:i})=>{let{asset:u,balance:m}=i,d=n.chain.getBalanceAssetId(u),g=Ws.isValid(d.toString())?await F(t,n.chain):t,f=m.build({address:g,asset:u,chain:n.chain});return a.subscribeBalance(u,f)}),o=await Promise.all(r);return Os(o).pipe(Ms(500)).subscribe(s)}};import{ConfigBuilder as Ns}from"@galacticcouncil/xc-core";function Ls(l){let t=Ns(l.config).assets();return{assets:t,withAsset(e){let s=t.asset(e);return{sources:s,withSource(n){let a=s.source(n);return{destinations:a,withDestination(r){let{routes:o,destinationAssets:c,isAssetSelect:i,isTagSelect:u,build:m}=a.destination(r);return{routes:o,destinationAssets:c,isAssetSelect:i,isTagSelect:u,build({srcAddress:d,dstAddress:g,dstAsset:f,tag:p}){let h=m(f,p);return l.getTransferData(h,d,g)}}}}}}}}}import{TransferValidation as Us,TransferValidationError as Z,Wormhole as tt}from"@galacticcouncil/xc-core";var Nt=class extends Us{governor;config;constructor(t,e,s=()=>!0,n=()=>!0){super(s,n),this.governor=t,this.config=e}tokenOrigins(t){let e=[];for(let s of this.config.chains.values()){if(!tt.isKnown(s)||!s.getAsset(t.key))continue;let n=tt.fromChain(s);try{e.push({wormholeChainId:n.getWormholeId(),originAddress:n.normalizeAddress(String(s.getAssetId(t)))})}catch{}}return e}async validate(t){let{amount:e,asset:s,source:n,transact:a}=t,r=tt.isKnown(n.chain)?n.chain:a&&tt.isKnown(a.chain)?a.chain:void 0;if(!r)return;let c=tt.fromChain(r).getWormholeId(),i;try{i=await this.governor.getWormholeRateLimit(c)}catch{throw new Z("Wormhole_Governor_Unreachable",{chain:r.name,error:"wormhole.governorUnreachable"})}if(!i.configured)return;if(i.availableNotional<=0)throw new Z("Wormhole_RateLimit_Lockdown",{chain:r.name,enqueuedCount:i.enqueuedCount,error:"wormhole.rateLimitLockdown"});let u;try{u=await this.governor.toNotionalUsd(this.tokenOrigins(s),e,n.balance.decimals)}catch{throw new Z("Wormhole_Governor_Unreachable",{chain:r.name,error:"wormhole.governorUnreachable"})}if(u!==null){if(u>i.maxTransactionSize)throw new Z("Wormhole_BigTransaction",{asset:s.originSymbol,chain:r.name,notional:u,maxTransactionSize:i.maxTransactionSize,error:"wormhole.bigTransaction"});if(u>i.availableNotional)throw new Z("Wormhole_RateLimit_Exceeded",{asset:s.originSymbol,chain:r.name,notional:u,headroom:i.availableNotional,limit:i.notionalLimit,error:"wormhole.rateLimitExceeded"})}}};var zs="https://api.wormholescan.io",Ee=class{_baseUrl;_prices;constructor(t){this._baseUrl=t||zs}async fetchData(t){let e=await fetch([this._baseUrl,t].join(""));if(!e.ok)throw new Error(`Wormhole Governor request failed: ${e.status} ${t}`);return(await e.json()).data}async getRateLimits(){return this.fetchData("/api/v1/governor/limit")}async getConfig(){return this.fetchData("/api/v1/governor/config")}async getEnqueuedVaas(){return this.fetchData("/api/v1/governor/enqueued_vaas")}priceKey(t,e){return`${t}:${e.toLowerCase()}`}async getTokenPrices(){return this._prices||(this._prices=this.getConfig().then(t=>{let e=new Map,s=t[0]?.tokens??[];for(let n of s)e.set(this.priceKey(n.originChainId,n.originAddress),n.price);return e}).catch(t=>{throw this._prices=void 0,t})),this._prices}async getWormholeRateLimit(t){let[e,s]=await Promise.all([this.getRateLimits(),this.getEnqueuedVaas()]),n=e.find(r=>r.chainId===t),a=s.find(r=>r.chainId===t)?.enqueuedVaas?.length??0;return n?{configured:!0,notionalLimit:n.notionalLimit,availableNotional:n.availableNotional,maxTransactionSize:n.maxTransactionSize,enqueued:a>0,enqueuedCount:a}:{configured:!1,notionalLimit:0,availableNotional:0,maxTransactionSize:0,enqueued:a>0,enqueuedCount:a}}async toNotionalUsd(t,e,s){let n=await this.getTokenPrices();for(let{wormholeChainId:a,originAddress:r}of t){let o=n.get(this.priceKey(a,r));if(o!==void 0)return Number(e)/10**s*o}return null}};import{Precompile as Ks}from"@galacticcouncil/xc-core";var js="https://api.wormholescan.io",Tt=class{_baseUrl;constructor(t){this._baseUrl=t||js}buildApi(t,e){return[this._baseUrl,t,"?"].join("")+new URLSearchParams(e).toString()}async getVaaBytes(t){let e=this.buildApi("/v1/signed_vaa/"+t,{});return await(await fetch(e)).json()}async getVaa(t){let e=this.buildApi("/api/v1/vaas/"+t,{});return(await(await fetch(e)).json()).data}async getVaaByTxHash(t){let e=this.buildApi("/api/v1/vaas/",{txHash:t}),n=await(await fetch(e)).json();if(n.data.length>0)return n.data[0];throw Error("Can't find VAA for given txHash: "+t)}async getOperations(t){let e=this.buildApi("/api/v1/operations/",t);return(await(await fetch(e)).json()).operations}async getOperation(t){let e=this.buildApi("/api/v1/operations/"+t,{});return await(await fetch(e)).json()}isMrlTransfer(t){let{payloadType:e,toAddress:s,toChain:n}=t,a="0x"+s.substring(26);return e===3&&n===16&&a===Ks.Bridge}};import{acc as qs}from"@galacticcouncil/common";import{mrl as Hs,ChainType as Fe,Parachain as $s,Precompile as Gs,Wormhole as U}from"@galacticcouncil/xc-core";import{encoding as Qs}from"@wormhole-foundation/sdk-base";import{keccak256 as Xs}from"@wormhole-foundation/sdk-connect";import{deserialize as Js}from"@wormhole-foundation/sdk-definitions";var Ie=(s=>(s[s.WaitingForVaa=0]="WaitingForVaa",s[s.VaaEmitted=1]="VaaEmitted",s[s.Completed=2]="Completed",s))(Ie||{});var Ys=300*1e3,De=class{parachainId;config;whScan;constructor(t,e){this.config=t,this.parachainId=e,this.whScan=new Tt}get chains(){let t=this.config.chains.values();return Array.from(t)}get filters(){let t=new Date,e=new Date;e.setDate(t.getDate()-6);let s=t.toISOString();return{page:"0",pageSize:"50",includeEndDate:"true",from:e.toISOString(),to:s}}async getWithdraws(t){let e=qs.getMultilocationDerivatedAccount(this.parachainId,t,1,!0),n=(await this.whScan.getOperations({...this.filters,address:e})).map(async a=>{let{content:r}=a,{payload:o,standarizedProperties:c}=r,i=this.getStatus(a),u=this.chains.find(p=>p instanceof $s&&p.parachainId===this.parachainId),{toAddress:m,tokenAddress:d}=c,g=this.chains.find(p=>U.isKnown(p)&&U.fromChain(p).getWormholeId()===o.tokenChain),f;if(i===1&&a.vaa){let{timestamp:p}=this.getVaaHeader(a.vaa.raw),h=a.vaa.raw;if(this.isStuck(p))switch(g.getType()){case Fe.EvmChain:let x=new st(g);f=async y=>x.redeem(y,h);break;case Fe.SolanaChain:let b=new ht(g);f=async y=>b.redeem(y,h);break}}return{asset:d,assetSymbol:a.data.symbol,amount:a.data.tokenAmount,from:t,fromChain:u,to:m,toChain:g,status:i,redeem:f,operation:a}});return Promise.all(n)}async getDeposits(t,e="hydration"){let s=await this.whScan.getOperations({...this.filters,address:Gs.Bridge,pageSize:"100"}),n=this.config.chains.get(e);if(!n)return[];let a=n,o=(await Hs.createPayload(a,t)).toHex(),c=s.filter(i=>{let{content:u}=i,{payload:m}=u;return m.payloadType===3&&m.toChain===16&&"0x"+m.payload===o}).map(async i=>{let{content:u,sourceChain:m}=i,{payload:d,standarizedProperties:g}=u,f=this.getStatus(i),{tokenAddress:p}=g,h=this.chains.find(y=>U.isKnown(y)&&U.fromChain(y).getWormholeId()===d.tokenChain),x=this.chains.find(y=>U.isKnown(y)&&U.fromChain(y).getWormholeId()===d.toChain),b;if(f===1&&i.vaa){let{timestamp:y}=this.getVaaHeader(i.vaa.raw),S=i.vaa.raw;if(this.isStuck(y)){let B=new yt(x);b=async D=>B.redeemMrlViaXcm(D,S)}}return{asset:p,assetSymbol:i.data.symbol,amount:i.data.tokenAmount,from:m.from,fromChain:h,to:t,toChain:n,status:f,redeem:b,operation:i}});return Promise.all(c)}isStuck(t){return Date.now()>=t*1e3+Ys}getVaaHeader(t){let e=Qs.b64.decode(t),s=Js("Uint8Array",e);return{timestamp:s.timestamp,emitterChain:s.emitterChain,emitterAddress:s.emitterAddress.toString(),sequence:s.sequence,payload:s.payload,hash:s.hash,id:Xs(s.hash)}}getStatus(t){return t.vaa?t.targetChain&&t.targetChain.status==="completed"?2:1:0}};export{qt as DISPATCH_ADDRESS,st as EvmClaim,ct as EvmPlatform,Ht as EvmSigner,Y as FeeSwap,V as PlatformAdapter,ht as SolanaClaim,W as SolanaLilJit,gt as SolanaPlatform,ie as SolanaSigner,yt as SubstrateClaim,bt as SubstrateExec,At as SubstratePlatform,P as SubstrateService,Ce as SubstrateSigner,Ae as SuiClaim,Pt as SuiPlatform,we as SuiSigner,Ls as TransferBuilder,Wt as Wallet,Ie as WhStatus,Ee as WormholeGovernor,Nt as WormholeRateLimitValidation,Tt as WormholeScan,De as WormholeTransfer,Zt as chunkBySize,Br as deserializeV0,_ as ixToHuman,H as serializeV0};
1
+ import{acc as Es,big as Vt}from"@galacticcouncil/common";import{addr as Is,ConfigBuilder as Fs,TransferValidator as Ds}from"@galacticcouncil/xc-core";import{combineLatest as Rs,debounceTime as ks}from"rxjs";import{ChainType as q}from"@galacticcouncil/xc-core";import{Abi as Ie,Wormhole as Fe}from"@galacticcouncil/xc-core";import{encodeFunctionData as De}from"viem";import{encoding as _t}from"@wormhole-foundation/sdk-base";var et=class{#t;constructor(t){this.#t=t}redeem(t,e){let s=Fe.fromChain(this.#t),n=_t.b64.decode(e),a=_t.hex.encode(n),r=Ie.TokenBridge,i=De({abi:r,functionName:"completeTransfer",args:["0x"+a]});return{abi:JSON.stringify(r),data:i,from:t,to:s.getTokenBridge()}}};import{Abi as Me,AssetAmount as Ne,CallType as Ut,Erc20Client as We}from"@galacticcouncil/xc-core";import{distinctUntilChanged as Ue,finalize as je,shareReplay as Ke,Subject as ze}from"rxjs";var _=class{client;config;constructor(t,e){this.validateClient(t),this.validateConfig(e),this.client=t,this.config=e}validateClient(t){if(!t)throw new Error("No EVM client found")}validateConfig(t){if(!t.address)throw new Error("Contract address is required")}};import{Erc20Client as Re}from"@galacticcouncil/xc-core";var nt=class extends _{erc20;constructor(t,e){super(t,e),this.erc20=new Re(t,e.address)}async getBalance(){let{args:t}=this.config,[e]=t;return this.erc20.balanceOf(e)}async getDecimals(){return this.erc20.decimals()}};var st=class extends _{async getBalance(){let t=this.client.getProvider(),{address:e}=this.config;return t.getBalance({address:e})}async getDecimals(){return this.client.chain.nativeCurrency.decimals}};var at=class{static get(t,e){switch(e.module){case"Erc20":return new nt(t,e);case"Native":return new st(t,e);default:throw new Error("Module "+e.module+" is not supported")}}};import{ContractFunctionExecutionError as ke,decodeEventLog as Ve}from"viem";var rt=class{client;config;constructor(t,e){this.validateClient(t),this.client=t,this.config=e}validateClient(t){if(!t)throw new Error("No EVM client found")}get abi(){return this.config.abi}get asset(){let t=this.config.args,[e]=t;return e}get calldata(){return this.config.encodeFunctionData()}async estimateGas(t){let{address:e,args:s,value:n,func:a}=this.config;return await this.client.getProvider().estimateContractGas({address:e,abi:this.abi,functionName:a,args:s,value:n,account:t})}async estimateFee(t,e){if(e===0n)return 0n;try{let s=await this.estimateGas(t),n=await this.getGasPrice();return s*n}catch(s){return s instanceof ke?console.log(`Can't estimate fees!
2
+ `,s.message):console.log(s),0n}}async getGasPrice(){return this.client.getProvider().getGasPrice()}async getNonce(t){return this.client.getProvider().getTransactionCount({address:t})}async simulateCall(t){let{address:e,args:s,value:n,func:a}=this.config,r=this.client.getProvider(),i=await this.getNonce(t);try{let{results:o}=await r.simulateCalls({account:t,calls:[{to:e,abi:this.abi,functionName:a,args:s,value:n}],stateOverrides:[{address:t,nonce:i}]}),[c]=o;return c}catch(o){return console.log(`Can't simulate call!
3
+ `,o.details),{error:o}}}decodeEvents(t){let e=[];return t&&t.forEach(s=>{try{let{eventName:n,args:a}=Ve({abi:this.abi,data:s.data,topics:s.topics});e.push({eventName:n,args:a})}catch{}}),e}};var L=class{static get(t,e){return new rt(t,e)}};import{Precompile as Oe}from"@galacticcouncil/xc-core";import{decodeAbiParameters as _e}from"viem";function Tt(l){return l.module==="Snowbridge"&&l.func==="v2_sendMessage"}function Mt(l){if(!Tt(l))return;let t=l.args[1];if(!t||t.length===0)return;let[e,s]=_e([{type:"uint8"},{type:"address"},{type:"uint128"}],t[0]);return s}function Nt(l){let t=l.module==="Snowbridge"&&l.func==="v2_sendMessage"&&Array.isArray(l.args[1])&&l.args[1].length===0,e=l.module==="Snowbridge"&&l.func==="sendToken"&&l.args[0]==="0x0000000000000000000000000000000000000000";return l.module==="TokenBridge"&&["wrapAndTransferETHWithPayload","wrapAndTransferETH"].includes(l.func)||t||e}function Wt(l){return Object.entries(Oe).map(([e,s])=>s).includes(l.address)}var it=class{#t;constructor(t){this.#t=t.evmClient}async buildCall(t,e,s,n){let a=L.get(this.#t,n),{abi:r,asset:i,calldata:o}=a,c={abi:JSON.stringify(r),data:o,from:t,to:n.address,type:Ut.Evm,value:n.value,dryRun:async()=>{let{error:p,logs:f}=await a.simulateCall(t),h=a.decodeEvents(f);return{call:n.module+"."+n.func,error:p?.shortMessage,events:h}}};if(Wt(n)||Nt(n))return c;let u=Tt(n)?Mt(n):i,m=new We(this.#t,u),d=await m.allowance(t,n.address);if(d>=e)return c;let g=m.approve(n.address,e);return{abi:JSON.stringify(Me.Erc20),allowance:d,data:g,from:t,to:u,type:Ut.Evm,dryRun:()=>{}}}async estimateFee(t,e,s,n){let r=await L.get(this.#t,n).estimateFee(t,e);return s.copyWith({amount:r})}async getBalance(t,e){let s=at.get(this.#t,e),[n,a]=await Promise.all([s.getBalance(),s.getDecimals()]);return Ne.fromAsset(t,{amount:n,decimals:a})}async subscribeBalance(t,e){let s=new ze,n=s.pipe(Ke(1)),a=this.#t.getProvider(),r=async()=>{let o=async()=>{let u=await this.getBalance(t,e);s.next(u)};await o();let c=a.watchBlocks({onBlock:()=>o()});return()=>c()},i;return r().then(o=>i=o),n.pipe(je(()=>i?.()),Ue((o,c)=>o.amount===c.amount))}};import{EvmParachain as Le}from"@galacticcouncil/xc-core";import{h160 as He}from"@galacticcouncil/common";import{Binary as $e}from"polkadot-api";var jt="0x0000000000000000000000000000000000000401",{H160:Qe}=He,Kt=class{#t;#e;#n;constructor(t,e){this.#t=t,this.#e=t.evmClient,this.#n=e}async signAndSend(t,e){let s=Qe.fromAny(t.from),n=this.#e.getProvider(),a=!1;if(this.#t instanceof Le)try{let i=this.#t.client,o=$e.fromHex(t.data);await i.getUnsafeApi().txFromCallData(o),a=!0}catch{}let r;if(a){let[i,o]=await Promise.all([n.estimateGas({account:s,data:t.data,to:jt}),n.getGasPrice()]),c=o+o/100n*10n;r=await this.#n.sendTransaction({account:s,chain:this.#e.chain,data:t.data,maxPriorityFeePerGas:c,maxFeePerGas:c,gas:i*11n/10n,to:jt})}else{let{data:i,to:o,value:c}=t,[u,m]=await Promise.all([n.estimateGas({account:s,data:i,to:o,value:c}),n.getGasPrice()]),d=m+m*5n/100n,g=u+u*30n/100n;r=await this.#n.sendTransaction({account:s,chain:this.#e.chain,data:i,to:o,value:c,gas:g,maxFeePerGas:d,maxPriorityFeePerGas:d})}e.onTransactionSend(r),n.waitForTransactionReceipt({hash:r}).then(i=>e.onTransactionReceipt(i)).catch(i=>e.onError(i))}};import{AssetAmount as tn,CallType as en}from"@galacticcouncil/xc-core";import{PublicKey as nn}from"@solana/web3.js";import{Buffer as sn}from"buffer";import{distinctUntilChanged as an,finalize as rn,shareReplay as on,Subject as cn}from"rxjs";var M=class{connection;config;constructor(t,e){this.validateConnection(t),this.validateConfig(e),this.connection=t,this.config=e}validateConnection(t){if(!t)throw new Error("No connection found")}validateConfig(t){if(!t.address)throw new Error("Solana address is required")}};import{SolanaAddress as qe}from"@wormhole-foundation/sdk-solana";var Ge=9,ot=class extends M{async getBalance(){let{address:t}=this.config,e=new qe(t).unwrap(),s=await this.connection.getBalance(e);return BigInt(s)}async getDecimals(){return Ge}};import{SolanaAddress as Bt}from"@wormhole-foundation/sdk-solana";var ct=class extends M{constructor(t,e){super(t,e),this.validateToken(e)}async getBalance(){let{address:t,token:e}=this.config,s=new Bt(t).unwrap(),n=new Bt(e).unwrap();return(await this.connection.getParsedTokenAccountsByOwner(s,{mint:n})).value.reduce((r,{account:i})=>{let o=i.data.parsed.info.tokenAmount;return r+=BigInt(o.amount),r},0n)}async getDecimals(){let{token:t}=this.config,e=new Bt(t).unwrap();return(await this.connection.getTokenSupply(e)).value.decimals}validateToken(t){if(!t.token)throw new Error("Token address is required")}};var ut=class{static get(t,e){switch(e.module){case"Native":return new ot(t,e);case"Token":return new ct(t,e);default:throw new Error("Module "+e.module+" is not supported")}}};import{ComputeBudgetProgram as zt,PublicKey as Xe,TransactionMessage as Je,VersionedTransaction as Lt}from"@solana/web3.js";var Ht=.5,$t=2,Qt=1,qt=1e6,Ye=25e4,lt=class{connection;config;constructor(t,e){this.validateConnection(t),this.connection=t,this.config=e}validateConnection(t){if(!t)throw new Error("No connection found")}async getPriorityMessage(t){let{instructions:e}=this.config,s=await this.getV0Message(t,e),n=await this.createPriorityFeeInstructions(s);return this.getV0Message(t,[...e,...n])}async estimateFee(t,e){if(e===0n)return 0n;let{instructions:s}=this.config,n=await this.getV0Message(t,s),a=await this.determineComputeBudget(n);return BigInt(a)}async getV0Message(t,e){let s=new Xe(t),{blockhash:n}=await this.connection.getLatestBlockhash("finalized");return new Je({payerKey:s,recentBlockhash:n,instructions:e}).compileToV0Message()}async createPriorityFeeInstructions(t,e=Ht,s=$t,n=Qt,a=qt){let[r,i]=await Promise.all([this.determineComputeBudget(t),this.determinePriorityFee(t,e,s,n,a)]);return[zt.setComputeUnitLimit({units:r}),zt.setComputeUnitPrice({microLamports:i})]}async simulateTransaction(t,e){let s=new Lt(e);return(await this.connection.simulateTransaction(s,{accounts:{encoding:"base64",addresses:[t]}})).value}async determineComputeBudget(t){let e=new Lt(t),s=await this.connection.simulateTransaction(e),{err:n,unitsConsumed:a}=s.value;return a&&!n?Math.round(a*1.2):Ye}async determinePriorityFee(t,e=Ht,s=$t,n=Qt,a=qt){let r=n,i=await this.getTxAccounts(t),o=await this.connection.getRecentPrioritizationFees({lockedWritableAccounts:i});if(o){let c=o.map(m=>m.prioritizationFee).filter(m=>m>0).sort((m,d)=>m-d),u=Math.ceil(c.length*e);if(c.length>u){let d=c[u]*s;r=Math.max(r,d)}}return Math.min(Math.max(r,n),a)}async getTxAccounts(t){let e=(await Promise.all(t.addressTableLookups.map(n=>this.connection.getAddressLookupTable(n.accountKey)))).map(n=>n.value).filter(n=>n!==null),s=t.getAccountKeys({addressLookupTableAccounts:e??void 0});return t.compiledInstructions.flatMap(n=>n.accountKeyIndexes).map(n=>t.isAccountWritable(n)?s.get(n):null).filter(n=>n!==null)}};var H=class{static get(t,e){return new lt(t,e)}};import{MessageV0 as Ze}from"@solana/web3.js";function V(l){return l.map(t=>({program:t.programId.toBase58(),data:t.data.toString("hex"),keys:t.keys.map(e=>e.pubkey.toBase58())}))}function Gt(l,t=1e3){let e=[],s=[],n=0;for(let a of l){let r=a.data?.length??0;s.length&&n+r>t&&(e.push(s),s=[],n=0),s.push(a),n+=r}return s.length&&e.push(s),e}function $(l){let t=l.serialize();return Buffer.from(t).toString("hex")}function wr(l){let t=Buffer.from(l,"hex"),e=Uint8Array.from(t);return Ze.deserialize(e)}var mt=class{#t;constructor(t){this.#t=t.connection}async buildCall(t,e,s,n){let a=H.get(this.#t,n),r=await a.getPriorityMessage(t),i=r.serialize(),o=sn.from(i).toString("hex");return{from:t,data:o,ix:V(n.instructions),signers:n.signers,type:en.Solana,dryRun:async()=>{let{err:c,logs:u}=await a.simulateTransaction(t,r);return{call:n.module+"."+n.func,error:c,events:u}}}}async estimateFee(t,e,s,n){let a=H.get(this.#t,n),r=await a.estimateFee(t,e),i=await a.getPriorityMessage(t),{accounts:o}=await a.simulateTransaction(t,i),u=(o&&o[0])?.lamports;if(u){let m=n.module==="TokenBridge"&&n.func==="TransferNativeWithPayload";return s.copyWith({amount:s.amount-BigInt(u)-(m?e:0n)+n.rentReserve})}return s.copyWith({amount:r+n.rentReserve})}async getBalance(t,e){let s=ut.get(this.#t,e),[n,a]=await Promise.all([s.getBalance(),s.getDecimals()]);return tn.fromAsset(t,{amount:n,decimals:a})}async subscribeBalance(t,e){let s=new cn,n=s.pipe(on(1)),a=async()=>{let i=async()=>{let u=await this.getBalance(t,e);s.next(u)};await i();let o=new nn(e.address),c=this.#t.onAccountChange(o,()=>i());return()=>{this.#t.removeAccountChangeListener(c)}},r;return a().then(i=>r=i),n.pipe(rn(()=>r?.()),an((i,o)=>i.amount===o.amount))}};import{CallType as dt,Wormhole as un}from"@galacticcouncil/xc-core";import{Keypair as Xt,PublicKey as Q,SystemProgram as Jt,TransactionMessage as ln}from"@solana/web3.js";import{ACCOUNT_SIZE as mn,NATIVE_MINT as gt,TOKEN_PROGRAM_ID as dn,createAssociatedTokenAccountIdempotentInstruction as Yt,createCloseAccountInstruction as gn,createInitializeAccountInstruction as pn,createTransferInstruction as fn,getAssociatedTokenAddressSync as hn,getMinimumBalanceForRentExemptAccount as yn,getMint as Cn}from"@solana/spl-token";import{utils as An}from"@wormhole-foundation/sdk-solana";import{utils as Zt}from"@wormhole-foundation/sdk-solana-core";import{encoding as bn}from"@wormhole-foundation/sdk-base";import{deserialize as te}from"@wormhole-foundation/sdk-definitions";import{createCompleteTransferNativeInstruction as ee,createCompleteTransferWrappedInstruction as wn}from"@wormhole-foundation/sdk-solana-tokenbridge";var N=class{#t;constructor(t){this.#t=t.connection}async sendBundle(t){let{result:e}=await this.#t._rpcRequest("sendBundle",[t]);return e}async simulateBundle(t){return(await this.#t._rpcRequest("simulateBundle",[[t]])).result}async getInflightBundleStatuses(t){let{result:e}=await this.#t._rpcRequest("getInflightBundleStatuses",[t]);return e}async getRegion(){let{result:t}=await this.#t._rpcRequest("getRegions",[]);return t}async getTipAccount(){let{result:t}=await this.#t._rpcRequest("getTipAccounts",[]);return t}};var pt=class{#t;#e;#n;constructor(t){this.#t=t,this.#e=t.connection,this.#n=new N(t)}async redeem(t,e,s){let n=un.fromChain(this.#t),a=bn.b64.decode(e),r=te("TokenBridge:Transfer",a),i=te("Uint8Array",a),o=this.derivePostedVaaKey(n.getCoreBridge(),Buffer.from(r.hash)),c=new Q(t),u=s?new Q(s):c,m=c.equals(u),d=[];if(!await this.#e.getAccountInfo(o)){let y=Xt.generate(),S=await Zt.createVerifySignaturesInstructions(this.#t.connection,n.getCoreBridge(),c,i,y.publicKey),B=Gt(S,1e3);for(let T=0;T<B.length;T++){let b=B[T],E=await this.getV0Message(c,b),I=$(E);d.push({from:t,data:I,ix:V(b),signers:[y],type:dt.Solana})}let D=Zt.createPostVaaInstruction(this.#e,n.getCoreBridge(),c,i,y.publicKey),K=await this.getV0Message(c,[D]),C=$(K);d.push({from:t,data:C,ix:V([D]),type:dt.Solana})}let p=r.payload.token.chain==="Solana",f=new Q(r.payload.token.address.toUint8Array()),h=p&&f.equals(gt),x=await this.#n.getTipAccount(),A=Jt.transfer({fromPubkey:c,toPubkey:new Q(x[0]),lamports:1e3});if(h&&m){let y=await this.redeemAndUnwrap(n,c,r,A);d.push(y)}else{let y=await this.redeemToken(n,c,u,f,p,r,A);d.push(y)}return d}async redeemToken(t,e,s,n,a,r,i){let c=(a?ee:wn)(this.#e,t.getTokenBridge(),t.getCoreBridge(),e,r),u=hn(n,s),m=Yt(e,u,s,n),d=await this.getV0Message(e,[m,c,i]),g=$(d);return{from:e.toBase58(),data:g,ix:V([m,c]),type:dt.Solana}}async redeemAndUnwrap(t,e,s,n){let a=new Q(s.payload.to.address.toUint8Array()),r=await Cn(this.#e,gt),i=s.payload.token.amount*BigInt(Math.pow(10,r.decimals-8)),o=await yn(this.#e),c=Xt.generate(),u=Yt(e,a,e,gt),m=ee(this.#e,t.getTokenBridge(),t.getCoreBridge(),e,s),d=Jt.createAccount({fromPubkey:e,newAccountPubkey:c.publicKey,lamports:o,space:mn,programId:dn}),g=pn(c.publicKey,gt,e),p=fn(a,c.publicKey,e,i),f=gn(c.publicKey,e,e),h=[u,m,d,g,p,f,n],x=await this.getV0Message(e,h),A=$(x);return{from:e.toBase58(),data:A,ix:V(h),signers:[c],type:dt.Solana}}derivePostedVaaKey(t,e){return An.deriveAddress([Buffer.from("PostedVAA"),e],t)}async getV0Message(t,e){let{blockhash:s}=await this.#e.getLatestBlockhash("finalized");return new ln({payerKey:t,recentBlockhash:s,instructions:e}).compileToV0Message()}};import{Keypair as ne,MessageV0 as vn,VersionedTransaction as xn}from"@solana/web3.js";import{Buffer as Et}from"buffer";var se=class{#t;#e;#n;constructor(t,e){this.#t=t,this.#e=e,this.#n=new N(t)}async signAndSend(t,e){let{data:s,signers:n}=t,a=this.toVersioned(s,n);try{if(this.#e instanceof ne){a.sign([this.#e]);let c=await this.#t.connection.sendTransaction(a);e.onTransactionSend(c);let u=await this.#t.connection.getSignatureStatus(c);e.onStatus?.(u);return}let r=this.#e;await r.connect(),n&&a.sign(n);let{signature:i}=await r.signAndSendTransaction(a);e.onTransactionSend(i);let o=await this.#t.connection.getSignatureStatus(i);e.onStatus?.(o)}catch(r){e.onError(r)}}async signAndSendAll(t,e){let s=t.map(n=>{let{data:a,signers:r}=n;return this.toVersioned(a,r)});try{let n;if(this.#e instanceof ne)s.forEach(o=>o.sign([this.#e])),n=s.map(o=>Et.from(o.serialize()).toString("base64"));else{let o=this.#e;await o.connect(),n=(await o.signAllTransactions(s)).map(u=>Et.from(u.serialize()).toString("base64"))}let a=await this.#n.simulateBundle(n);if(a.value.summary!=="succeeded")throw new Error("Bundle simulation failed! "+JSON.stringify(a,null,2));let r=await this.#n.sendBundle(n);e.onTransactionSend(r);let i=await this.#n.getInflightBundleStatuses([r]);e.onBundleStatus?.(i.value)}catch(n){e.onError(n)}}toVersioned(t,e){let s=Et.from(t,"hex"),n=Uint8Array.from(s),a=vn.deserialize(n),r=new xn(a);return e&&r.sign(e),r}};import{Abi as Sn,CallType as Pn,Precompile as Tn,Wormhole as Bn}from"@galacticcouncil/xc-core";import{encoding as ae}from"@wormhole-foundation/sdk-base";import{encodeFunctionData as En}from"viem";import{Binary as re}from"polkadot-api";var ft=class{#t;constructor(t){this.#t=t,Bn.fromChain(this.#t)}redeemMrl(t,e){let s=ae.b64.decode(e),n=ae.hex.encode(s),a=Sn.Gmp,r=En({abi:a,functionName:"wormholeTransferERC20",args:["0x"+n]});return{abi:JSON.stringify(a),data:r,from:t,to:Tn.Bridge}}async redeemMrlViaXcm(t,e){let n=this.#t.client.getUnsafeApi(),a=this.redeemMrl(t,e),i=await n.tx.EthereumXcm.transact({xcm_transaction:{type:"V2",value:{gas_limit:[5000000n,0n,0n,0n],action:{type:"Call",value:a.to},value:[0n,0n,0n,0n],input:re.fromHex(a.data),access_list:void 0}}}).getEncodedData();return{data:re.toHex(i),from:t,type:Pn.Substrate,dryRun:async()=>{},txOptions:void 0}}};import{AssetAmount as kn,CallType as Vn}from"@galacticcouncil/xc-core";import{Binary as ht}from"polkadot-api";import{big as In}from"@galacticcouncil/common";async function It(l,t,e){let s=await e.getDecimals(),n=e.chain.getAssetDecimals(t)??s,a=e.chain.usesChainDecimals?s:n;return{amount:In.convertDecimals(l,a,n),decimals:n}}import{enums as Fn}from"@galacticcouncil/common";var ie=l=>{let t=[];for(let e of l)if(["PolkadotXcm"].includes(e.type)&&e.value.type==="FeesPaid"){let n=e.value.value.fees;for(let a of n)if(a.fun.type==="Fungible"){let r=BigInt(a.fun.value);t.push(r)}}return t.reduce((e,s)=>e+s,0n)},W=l=>{let t=l.value.error;return t.type==="Module"?Fn.enumPath(t.value):JSON.stringify(t.value)};import{xcm as Ft}from"@galacticcouncil/common";function Dn(l){return{parents:0,interior:{type:"X1",value:l.startsWith("0x")?Ft.toAccountKey20(l):Ft.toAccountId32(l)}}}function oe(l){return{type:"V4",value:{parents:1,interior:{type:"X1",value:{type:"Parachain",value:l.parachainId}}}}}var Rn=(l,t)=>({id:Ft.transform(l),fun:{type:"Fungible",value:t}}),ce=(l,t,e,s,n,a)=>{console.log(a);let r=Dn(l),i=Rn(t,e.amount);return{type:"V4",value:[{type:"WithdrawAsset",value:[i]},{type:"BuyExecution",value:{fees:i,weight_limit:{type:"Unlimited"}}},{type:"Transact",value:{origin_kind:{type:"SovereignAccount"},require_weight_at_most:{ref_time:s,proof_size:n},call:a}},{type:"RefundSurplus",value:void 0},{type:"DepositAsset",value:{assets:{type:"Wild",value:{type:"AllCounted",value:1}},beneficiary:r}}]}};var yt=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}async remoteExec(t,e,s,n,a={}){let r=this.#t.api,i=await this.#t.getAsset(),o=this.#e.api,c=this.#e.chain,u=await c.getCurrency(),m=u.asset,d=u.decimals,g=c.getAssetXcmLocation(m),p=ht.fromHex(s.data),h=await(await o.txFromCallData(p)).getPaymentInfo(e),x=BigInt(h.partial_fee)*120n/100n,A=kn.fromAsset(m,{amount:x,decimals:d}),y=h.weight.ref_time,S=h.weight.proof_size,B=oe(c),D=ce(e,g,A,y,S,p),K=r.tx.PolkadotXcm.send({dest:B,message:D}),C=[];try{let w=await this.#t.chain.dex.getCalldata(t,a.srcFeeAsset||i,m,A,10),tt=ht.fromHex(w),z=await r.txFromCallData(tt);C.push(z)}catch{}let T=await n(A),b=ht.fromHex(T.data),E=await r.txFromCallData(b);C.push(E),C.push(K);let I=C.map(w=>w.decodedCall),Z=r.tx.Utility.batch_all({calls:I}),Pt=await Z.getEncodedData();return{from:t,data:ht.toHex(Pt),type:Vn.Substrate,dryRun:this.#t.isDryRunSupported()?async()=>{try{let w=await this.#t.dryRun(t,Z);return{call:"polkadotXcm.send",error:w.execution_result&&w.execution_result.success?void 0:W(w.execution_result),events:w.emitted_events||[],xcm:w.forwarded_xcms||[]}}catch(w){return{call:"polkadotXcm.send",error:w instanceof Error?w.message:"unknown"}}}:()=>{}}}};import{Asset as Kn,AssetAmount as de,CallType as zn}from"@galacticcouncil/xc-core";import{Binary as Ln}from"polkadot-api";import{concatMap as ge,catchError as Hn,distinctUntilChanged as $n,firstValueFrom as Qn,map as qn,throwError as Gn}from"rxjs";import{addr as On,multiloc as Dt,AssetAmount as _n}from"@galacticcouncil/xc-core";import{acc as Mn,enums as Nn}from"@galacticcouncil/common";import{Blake2256 as Wn,u32 as Un}from"@polkadot-api/substrate-bindings";import{toHex as jn,fromHex as ue}from"@polkadot-api/utils";import{Enum as le}from"polkadot-api";var{Ss58Addr:me}=On,P=class l{chain;_currency;constructor(t){this.chain=t}static async create(t){return new l(t)}get client(){return this.chain.client}get api(){return this.client.getUnsafeApi()}async getCurrency(){return this._currency||(this._currency=this.chain.getCurrency()),this._currency}async getAsset(){return(await this.getCurrency()).asset}async getDecimals(){return(await this.getCurrency()).decimals}async getExistentialDeposit(){let t;try{let n=await this.api.constants.Balances.ExistentialDeposit();t=typeof n=="bigint"?n:BigInt(String(n))}catch{t=0n}let{asset:e,decimals:s}=await this.getCurrency();return _n.fromAsset(e,{amount:t,decimals:s})}isDryRunSupported(){return this.api.apis?.DryRunApi!==void 0}async buildMessageId(t,e,s,n){let a=await this.client._request("system_accountNextIndex",[t]),r=Un.enc(a),i=u=>new TextEncoder().encode(u),o=new Uint8Array([...i(this.chain.parachainId.toString()),...ue(t.startsWith("0x")?t.slice(2):t),...r,...ue(s.startsWith("0x")?s.slice(2):s),...i(n),...i(e.toString())]),c=Wn(o);return jn(c)}async dryRun(t,e){let s=le("Signed",t),n=le("system",s),a=await this.api.apis.DryRunApi.dry_run_call(n,e.decodedCall,4);if(!a.success)throw new Error("DryRun call failed");let r=a.value;if("type"in r&&"value"in r)throw new Error("DryRun call error: "+Nn.enumPath(r.value));return r}async estimateNetworkFee(t,e){let s=e.getTx(this.client);try{let n=await s.getPaymentInfo(t);return BigInt(n.partial_fee)}catch{console.warn("Can't estimate network fee.")}return 0n}async estimateDeliveryFee(t,e){if(this.chain.usesDeliveryFee){let s=await this.estimateDeliveryFeeWith(t,e);try{let n=e.getTx(this.client),a=await this.dryRun(s,n);if(a.execution_result?.success)return ie(a.emitted_events||[]);{let r=W(a.execution_result);console.warn(`Can't estimate delivery fee. Reason:
4
+ ${r}`)}}catch{}}return 0n}async estimateDeliveryFeeWith(t,e){if(["PolkadotXcm"].includes(e.module)){let n=e.getTx(this.client).decodedCall.value.value,a="dest"in n?n.dest:void 0;if(!a)return t;let r=Dt.findNestedKey(a,"interior"),i=Dt.findParachain(a);if(Dt.findGlobalConsensus(a))return t;if(i){let c=Mn.getSovereignAccounts(i);return this.chain.parachainId===0?me.encodePubKey(c.relay):me.encodePubKey(c.generic)}if(r&&r.interior==="Here")return this.chain.treasury||t}return t}};var Ct=class{#t;constructor(t){this.#t=P.create(t)}async useSignerFee(t){let e=await this.#t,s=await e.getAsset();return e.chain.usesSignerFee&&!s.isEqual(t)}async buildCall(t,e,s,n){let a=await this.#t,i=await this.useSignerFee(s)?{asset:new Kn(s)}:void 0,o=n.getTx(a.client),c=n.module+"."+n.func,u=await o.getEncodedData();return{from:t,data:Ln.toHex(u),type:zn.Substrate,txOptions:i,dryRun:a.isDryRunSupported()?async()=>{try{let m=n.getTx(a.client),d=await a.dryRun(t,m),g=d.execution_result&&d.execution_result.success?void 0:W(d.execution_result);return{call:c,error:g,events:d.emitted_events||[],xcm:d.forwarded_xcms||[]}}catch(m){return{call:c,error:m instanceof Error?m.message:"unknown"}}}:()=>{}}}async estimateFee(t,e,s,n){let a=await this.#t,r=await a.estimateNetworkFee(t,n),i=await a.estimateDeliveryFee(t,n),o=await this.exchangeFee(r+i,s),c=await It(o,s,a);return s.copyWith(c)}async getBalance(t,e){let s=await this.subscribeBalance(t,e);return Qn(s)}async subscribeBalance(t,e){let s=await this.#t,{module:n,func:a,args:r,transform:i}=e;return s.client.getUnsafeApi().query[n][a].watchValue(...r,{at:"best"}).pipe(qn(({value:u})=>u)).pipe(ge(u=>i(u)),$n((u,m)=>u===m),ge(async u=>{let m=await It(u,t,s);return de.fromAsset(t,m)}),Hn(u=>(console.error("subscribe fails for:",t),Gn(()=>u))))}async exchangeFee(t,e){let s=await this.#t,n=await s.getAsset(),a=await s.getDecimals();if(n.isEqual(e))return t;try{let r=s.chain.dex,i=de.fromAsset(n,{amount:t,decimals:a});return(await r.getQuote(e,n,i,!0)).amount}catch{}return t}};import{multiloc as pe}from"@galacticcouncil/xc-core";import{Binary as Xn,Enum as Rt}from"polkadot-api";var fe=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}signAndSend(t,e){let n=this.#t.client.getUnsafeApi(),a=Xn.fromHex(t.data),r={};t.txOptions?.asset&&(r={asset:this.getFeeAsset(t.txOptions.asset)}),n.txFromCallData(a).then(i=>{i.signSubmitAndWatch(this.#e,r).subscribe({next:o=>{o.type==="broadcasted"&&e.onTransactionSend(o.txHash),o.type==="finalized"&&e.onFinalized(o)},error:o=>{e.onError(o)}})})}getFeeAsset(t){let e=this.#t.getAssetXcmLocation(t);if(e){let s=pe.findPalletInstance(e),n=pe.findGeneralIndex(e);return{parents:0,interior:Rt("X2",[Rt("PalletInstance",Number(s)),Rt("GeneralIndex",BigInt(n))])}}throw new Error("Asset location not found")}};import{CallType as Yn,Wormhole as Zn}from"@galacticcouncil/xc-core";import{Transaction as ts}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as es}from"@mysten/sui/utils";import{toBase64 as ns}from"@mysten/bcs";import{encoding as ss,serialize as as,toChainId as rs}from"@wormhole-foundation/sdk-connect";import{deserialize as is}from"@wormhole-foundation/sdk-definitions";import{getPackageId as he}from"@wormhole-foundation/sdk-sui";import{getTokenCoinType as os}from"@wormhole-foundation/sdk-sui-tokenbridge";import{fromBase64 as Jn}from"@mysten/bcs";function At(l,t={}){let e=l.inputs??[],s=l.commands??[],n=t.numbers??"string",a=t.decode32As??"address",r=u=>n==="bigint"?u:n==="number"?Number(u):u.toString(),i=u=>{let m=Jn(u),d=g=>{let p=0n;for(let f=0;f<g;f++)p|=BigInt(m[f])<<8n*BigInt(f);return p};return m.length===1?{type:"pure",valueType:"u8",value:Number(m[0])}:m.length===2?{type:"pure",valueType:"u16",value:r(d(2))}:m.length===4?{type:"pure",valueType:"u32",value:Number(d(4))}:m.length===8?{type:"pure",valueType:"u64",value:r(d(8))}:m.length===32&&a==="address"?{type:"pure",valueType:"address",value:"0x"+[...m].map(p=>p.toString(16).padStart(2,"0")).join("")}:{type:"pure",valueType:"vector<u8>",value:Array.from(m)}},o=u=>{let m=e[u];if(!m)return{Input:u};if(m.Pure?.bytes)return i(m.Pure.bytes);let d=m.Object?.SharedObject;if(d)return{type:"object",objectType:"sharedObject",objectId:d.objectId,initialSharedVersion:String(d.initialSharedVersion),mutable:!!d.mutable};let g=m.Object?.ImmOrOwnedObject;return g?{type:"object",objectType:"immOrOwnedObject",objectId:g.objectId,version:String(g.version),digest:g.digest??void 0}:{Input:u}},c=u=>u?.GasCoin?"GasCoin":Array.isArray(u?.NestedResult)?u:typeof u?.Input=="number"?o(u.Input):u;return s.map(u=>{if(u.MoveCall){let m=u.MoveCall;return{MoveCall:{...m,arguments:(m.arguments??[]).map(c)}}}if(u.SplitCoins){let m=u.SplitCoins,d=m.coin?.GasCoin?"GasCoin":c(m.coin),g=(m.amounts??[]).map(c);return{SplitCoins:[d,g]}}if(u.MergeCoins){let m=u.MergeCoins;return{MergeCoins:{...m,destination:c(m.destination),sources:(m.sources??[]).map(c)}}}if(u.TransferObjects){let m=u.TransferObjects;return{TransferObjects:{...m,objects:(m.objects??[]).map(c),address:c(m.address)}}}return u})}var ye=class{#t;constructor(t){this.#t=t}async redeem(t,e){let s=Zn.fromChain(this.#t),n=this.#t.client,a=ss.b64.decode(e),r=is("TokenBridge:Transfer",a),i=s.getCoreBridge(),o=s.getTokenBridge(),c=await os(n,o,r.payload.token.address.toUint8Array(),rs(r.payload.token.chain));if(!c)throw new Error("Unable to fetch token coinType");let[u,m]=await Promise.all([he(n,i),he(n,o)]),d=new ts;d.setSender(t);let[g]=d.moveCall({target:`${u}::vaa::parse_and_verify`,arguments:[d.object(i),d.pure.vector("u8",as(r)),d.object(es)]}),[p]=d.moveCall({target:`${m}::vaa::verify_only_once`,arguments:[d.object(o),g]}),[f]=d.moveCall({target:`${m}::complete_transfer::authorize_transfer`,arguments:[d.object(o),p],typeArguments:[c]}),[h]=d.moveCall({target:`${m}::complete_transfer::redeem_relayer_payout`,arguments:[f],typeArguments:[c]});d.moveCall({target:`${m}::coin_utils::return_nonzero`,arguments:[h],typeArguments:[c]});let x=await d.build({client:n}),A=await d.toJSON(),y=At(JSON.parse(A));return{from:t,commands:y,data:ns(x),type:Yn.Sui}}};import{AssetAmount as ls,CallType as ms}from"@galacticcouncil/xc-core";import{toBase64 as ds}from"@mysten/bcs";import{distinctUntilChanged as gs,finalize as ps,shareReplay as fs,Subject as hs}from"rxjs";var bt=class{client;config;constructor(t,e){this.validateClient(t),this.validateConfig(e),this.client=t,this.config=e}validateClient(t){if(!t)throw new Error("No client found")}validateConfig(t){if(!t.address)throw new Error("Sui address is required")}};import{SUI_TYPE_ARG as cs}from"@mysten/sui/utils";var us=9,wt=class extends bt{async getBalance(){let{address:t}=this.config,e=await this.client.getBalance({owner:t,coinType:cs});return BigInt(e.totalBalance)}async getDecimals(){return us}};var vt=class{static get(t,e){switch(e.module){case"Native":return new wt(t,e);default:throw new Error("Module "+e.module+" is not supported")}}};var xt=class{#t;constructor(t){this.#t=t.client}async buildCall(t,e,s,n){let{transaction:a}=n;a.setSender(t);let r=await a.build({client:this.#t}),i=await a.toJSON(),o=At(JSON.parse(i));return{from:t,commands:o,data:ds(r),type:ms.Sui,dryRun:async()=>{let c=await this.#t.dryRunTransactionBlock({transactionBlock:r});return{call:n.module+"."+n.func,error:c.executionErrorSource}}}}async estimateFee(t,e,s,n){let{transaction:a}=n;a.setSender(t);let r=await a.build({client:this.#t}),o=(await this.#t.dryRunTransactionBlock({transactionBlock:r})).effects.gasUsed,c=BigInt(o.computationCost),u=BigInt(o.storageCost),m=c+u;return s.copyWith({amount:m})}async getBalance(t,e){let s=vt.get(this.#t,e),[n,a]=await Promise.all([s.getBalance(),s.getDecimals()]);return ls.fromAsset(t,{amount:n,decimals:a})}async subscribeBalance(t,e){let s=new hs,n=s.pipe(fs(1)),a=async()=>{await(async()=>{let c=await this.getBalance(t,e);s.next(c)})();let o=setInterval(()=>{},3e3);return()=>clearInterval(o)},r;return a().then(i=>r=i),n.pipe(ps(()=>r?.()),gs((i,o)=>i.amount===o.amount))}};import{Ed25519Keypair as ys}from"@mysten/sui/keypairs/ed25519";import{Transaction as Cs}from"@mysten/sui/transactions";var Ce=class{#t;#e;constructor(t,e){this.#t=t,this.#e=e}async signAndSend(t,e){let{from:s,data:n}=t,a=this.#t.client;try{if(this.#e instanceof ys){let o=Cs.from(n),c=await a.signAndExecuteTransaction({signer:this.#e,transaction:o,options:{showEffects:!0,showEvents:!0,showObjectChanges:!0,showBalanceChanges:!0}});e.onTransactionSend(c.digest);return}let r=await this.#e.signTransaction({transaction:n,address:s,networkID:"sui:mainnet"}),i=await a.executeTransactionBlock({transactionBlock:r.transaction,signature:r.signature,options:{showEffects:!0,showEvents:!0,showObjectChanges:!0,showBalanceChanges:!0}});e.onTransactionSend(i.digest)}catch(r){e.onError(r)}}};var O=class{platform={};constructor(t){switch(t.getType()){case q.EvmChain:this.registerEvm(t);break;case q.EvmParachain:this.registerEvm(t),this.registerSubstrate(t);break;case q.Parachain:this.registerSubstrate(t);break;case q.SolanaChain:this.registerSolana(t);break;case q.SuiChain:this.registerSui(t);break;default:throw new Error("Unsupported platform: "+t.getType())}}registerEvm(t){let e=t;this.platform.Evm=new it(e)}registerSolana(t){let e=t;this.platform.Solana=new mt(e)}registerSui(t){let e=t;this.platform.Sui=new xt(e)}registerSubstrate(t){let e=t;this.platform.Substrate=new Ct(e)}async buildCall(t,e,s,n){return this.platform[n.type].buildCall(t,e,s,n)}async estimateFee(t,e,s,n){return this.platform[n.type].estimateFee(t,e,s,n)}async getBalance(t,e){return this.platform[e.type].getBalance(t,e)}async subscribeBalance(t,e){return this.platform[e.type].subscribeBalance(t,e)}};import{addr as Ss,AssetAmount as kt,Parachain as Ps}from"@galacticcouncil/xc-core";import{acc as Ts,big as xe}from"@galacticcouncil/common";import{big as As}from"@galacticcouncil/common";import G from"big.js";function Ae(l,t,e,s){let n=l.toBig().minus(e.toBig()).minus(l.isSame(t)?t.toBig():new G(0));return s&&(n=n.minus(l.isSame(s)?s.toBig():new G(0))),l.copyWith({amount:n.lt(0)?0n:BigInt(n.toFixed())})}function be(l,t,e,s){let a=l.copyWith({amount:0n}).toBig().plus(l.isSame(t)?t.toBig():new G(0)).plus(l.toBig().lt(e.toBig())?e.toBig():new G(0));return s&&(a=a.plus(l.isSame(s)&&l.toBig().lt(s.toBig())?s.toBig():new G(0))),l.copyWith({amount:BigInt(a.toFixed())})}async function F(l,t){return t.isEvmParachain()?t.getDerivatedAddress(l):l}function we(l,t){return t?As.toBigInt(t,l):0n}import{addr as bs,AssetAmount as ws,Parachain as ve}from"@galacticcouncil/xc-core";import{big as vs}from"@galacticcouncil/common";var{EvmAddr:xs}=bs,U=class{adapter;config;constructor(t,e){this.adapter=t,this.config=e}async getEd(){let{chain:t}=this.config;if(t instanceof ve)return(await P.create(t)).getExistentialDeposit()}async getBalance(t){let{chain:e,route:s}=this.config,{source:n}=s,a=n.asset,r=e.getBalanceAssetId(a),i=xs.isValid(r.toString())?await F(t,e):t,o=s.source.balance.build({address:i,asset:a,chain:e});return this.adapter.getBalance(a,o)}async getMin(){let{chain:t,route:e}=this.config,{source:s}=e,n=s.asset,a=s.min;if(t instanceof ve&&a){let r=t.getMinAssetId(n),i=a.build({asset:r});return this.adapter.getBalance(n,i)}return this.getAssetMin()}async getAssetMin(){let{chain:t,route:e}=this.config,{source:s}=e,n=s.asset,a=t.getAssetMin(n),r=await this.getDecimals(n),i=0n;return a&&(i=vs.toBigInt(a,r)),ws.fromAsset(n,{amount:i,decimals:r})}async getDecimals(t){let{chain:e}=this.config,s=e.getAssetDecimals(t);return s||(await e.getCurrency()).decimals}};var{EvmAddr:Se}=Ss,X=class extends U{constructor(t,e){super(t,e)}async getCall(t){let{amount:e,sender:s,source:n}=t,a=await this.getTransfer(t);return this.adapter.buildCall(s,e,n.feeBalance,a)}async getDestinationFee(t){let{chain:e,route:s}=this.config,{source:n,destination:a,transact:r}=s,i=a.fee.amount,o=n.destinationFee.asset||a.fee.asset,c=await this.getDecimals(o);if(Number.isFinite(i))return{fee:kt.fromAsset(o,{amount:xe.toBigInt(i,c),decimals:c}),feeBreakdown:{}};let u=i,{amount:m,breakdown:d}=await u.build({feeAsset:o,transferAsset:n.asset,source:r?r.chain:e,destination:a.chain,amount:t});return{fee:kt.fromAsset(o,{amount:m,decimals:c}),feeBreakdown:d}}async getDestinationFeeBalance(t){let{chain:e,route:s}=this.config,{source:n,destination:a}=s,r=n.asset,i=n.destinationFee.asset||a.fee.asset;if(r.isEqual(i))return this.getBalance(t);let o=e.getBalanceAssetId(i),c=Se.isValid(o.toString())?await F(t,e):t,u=n.destinationFee.balance.build({address:c,asset:i,chain:e});return this.adapter.getBalance(i,u)}async getFee(t){let{chain:e,route:s}=this.config,{amount:n,sender:a,source:r}=t,i=await this.getTransfer(t),o=s.contract?await F(a,e):a,c=await this.adapter.estimateFee(o,n,r.feeBalance,i),{fee:u}=s.source,m=u?we(c.decimals,u.extra):0n,d=c.amount+m;return c.copyWith({amount:d})}async getFeeBalance(t){let{chain:e,route:s}=this.config,{source:n}=s;if(!n.fee)return this.getBalance(t);let a=await this.getFeeAsset(t),r=e.getBalanceAssetId(a),i=Se.isValid(r.toString())?await F(t,e):t,o=n.fee.balance.build({address:i,asset:a,chain:e});return this.adapter.getBalance(a,o)}async getFeeAsset(t){let{chain:e,route:s}=this.config,{source:n}=s,a=n.fee,r=n.asset;if(!a)return r;let i=a.asset;return e instanceof Ps&&"build"in i?await i.build({chain:e,address:t}):i}async getTransfer(t){let{chain:e,route:s}=this.config,{contract:n,extrinsic:a,program:r,move:i}=s;if(a){let{address:c,amount:u,asset:m,sender:d}=t,p=await(await P.create(e)).buildMessageId(d,u,m.originSymbol,c);return a.build({...t,messageId:p})}let o=n||r||i;if(o)return o.build({...t});throw new Error("AssetRoute transfer config is invalid! Specify contract, extrinsic, move or program instructions.")}async getTransact(t){let{route:e}=this.config,{transact:s}=e;if(s){let n=Object.assign({transact:{chain:s.chain}}),a={...t,...n};return{...await this.getTransactData(s,a),chain:s.chain}}}async getTransactData(t,e){let{chain:s,extrinsic:n}=t,a=await n.build(e),r=await P.create(s),i=a.getTx(r.client),o=e.source.chain,c=e.sender,u=Ts.getMultilocationDerivatedAccount(o.parachainId,c,s.parachainId===0?0:1,s.usesH160Acc),m=await i.getPaymentInfo(u),d=await i.getEncodedData(),[g,p]=await Promise.all([this.getTransactFee(t),this.getTransactFeeBalance(t,e)]);return{call:d,chain:s,fee:g,feeBalance:p,weight:{refTime:m.weight.ref_time,proofSize:m.weight.proof_size}}}async getTransactFee(t){let{fee:e}=t,s=await this.getDecimals(e.asset),n=xe.toBigInt(e.amount,s);return kt.fromAsset(e.asset,{amount:n,decimals:s})}async getTransactFeeBalance(t,e){let{chain:s}=this.config,{fee:n}=t,a=n.balance.build({address:e.sender,asset:n.asset,chain:s});return this.adapter.getBalance(n.asset,a)}};var J=class extends U{constructor(t,e){super(t,e)}};import{AssetAmount as Bs}from"@galacticcouncil/xc-core";var Y=class{ctx;constructor(t){this.ctx=t}get asset(){let{source:t}=this.ctx;return t.balance}get dex(){let{source:t}=this.ctx;return t.chain.dex}get destFee(){let{source:t,transact:e}=this.ctx;return e?e.fee:t.destinationFee}get destFeeBalance(){let{source:t,transact:e}=this.ctx;return e?e.feeBalance:t.destinationFeeBalance}get feeBalance(){let{source:t}=this.ctx;return t.feeBalance}async getSwap(t){let{asset:e,decimals:s}=await this.dex.chain.getCurrency(),{amount:n}=await this.dex.getQuote(e,t,t);return{aIn:t,aOut:Bs.fromAsset(e,{amount:n,decimals:s}),enabled:!0}}isSwapSupported(t){try{this.dex}catch{return!1}return!!(t&&t.swap)}async getDestinationSwap(t){let{amount:e,route:s}=await this.dex.getQuote(t,this.destFee,this.destFee),n=this.destFeeBalance.amount<this.destFee.amount,a=this.feeBalance.amount-t.amount>e*2n;return{aIn:t.copyWith({amount:e}),aOut:this.destFee,enabled:n&&a,route:s}}isDestinationSwapSupported(t){try{this.dex}catch{return!1}let e=!t.isSame(this.destFee),s=this.asset.isSame(this.destFee);return e&&!s}};var{EvmAddr:Vs}=Is,Ot=class{config;validations;constructor({configService:t,transferValidations:e}){this.config=t,this.validations=e||[]}async transfer(t,e,s,n,a){let r=Fs(this.config).assets().asset(t).source(s).destination(a).build();return this.getTransferData(r,e,n)}async remoteXcm(t,e,s,n,a={}){let r=this.config.getChain(e),i=this.config.getChain(s);if(!(r.isSubstrate()&&i.isSubstrate()))throw Error("RemoteXcm is supported only between parachains");let[c,u]=await Promise.all([P.create(r),P.create(i)]),m=new yt(c,u),d=Es.getMultilocationDerivatedAccount(r.parachainId,t,1,i.usesH160Acc),g=await u.getAsset(),p=await this.transfer(g,t,e,d,s);return m.remoteExec(t,d,n,f=>{let h=f.toDecimal();return p.buildCall(h)},a)}async getTransferData(t,e,s){let n=t.origin,a=t.reverse,r=new O(n.chain),i=new O(a.chain),o=new X(r,n),c=new J(i,a),u=new Ds(...this.validations),[m,d,g,p,f,h,x]=await Promise.all([o.getBalance(e),o.getFeeBalance(e),o.getDestinationFee(),o.getDestinationFeeBalance(e),o.getMin(),c.getBalance(s),c.getMin()]),{source:A,destination:y}=n.route,S=g.fee.copyWith(y.fee.asset),B=g.feeBreakdown,K=A.asset.isEqual(S)&&S.amount>10n?S.amount+1n:10n,C={address:s,amount:K,asset:A.asset,destination:{balance:h,chain:a.chain,fee:S,feeBreakdown:B},sender:e,source:{balance:m,chain:n.chain,fee:d.copyWith({amount:0n}),feeBalance:d,destinationFee:g.fee,destinationFeeBalance:p}};C.transact=await o.getTransact(C);let T=new Y(C),b=await o.getFee(C),E;T.isSwapSupported(A.fee)&&(E=await T.getSwap(b),C.source.feeSwap=E);let I;T.isDestinationSwapSupported(b)&&(I=await T.getDestinationSwap(b),C.source.destinationFeeSwap=I),(E||I)&&(b=await o.getFee(C),b=b.padByPct(5n));let Z=await c.getEd(),Pt=be(h,S,x,Z),w=await o.getEd(),tt=Ae(m,b,f,w);C.amount=0n,C.source.fee=b;let z={source:{balance:m,destinationFee:g.fee,destinationFeeBalance:p,destinationFeeSwap:I,fee:b,feeBalance:d,feeSwap:E,max:tt,min:m.copyWith({amount:Pt.amount})},destination:{balance:h,fee:S},async buildCall(R){let v=Object.assign({},C);return v.amount=Vt.toBigInt(R,m.decimals),v.transact=await o.getTransact(v),o.getCall(v)},async estimateFee(R){let v=Object.assign({},C);return v.amount=Vt.toBigInt(R,m.decimals),v.transact=await o.getTransact(v),o.getFee(v)},async estimateDestinationFee(R){let v=Vt.toBigInt(R,m.decimals),{fee:k,feeBreakdown:Ee}=await o.getDestinationFee(v);return C.destination.fee=k,C.destination.feeBreakdown=Ee,C.source.destinationFee=k,z.destination.fee=k,z.source.destinationFee=k,k},async validate(R){let v=Object.assign({},C),k=R||b.amount;return v.source.fee=b.copyWith({amount:k}),u.validate(v)}};return z}async subscribeBalance(t,e,s){let n=this.config.getChainRoutes(e),a=new O(n.chain),r=n.getUniqueRoutes().map(async({source:c})=>{let{asset:u,balance:m}=c,d=n.chain.getBalanceAssetId(u),g=Vs.isValid(d.toString())?await F(t,n.chain):t,p=m.build({address:g,asset:u,chain:n.chain});return a.subscribeBalance(u,p)}),i=await Promise.all(r);return Rs(i).pipe(ks(500)).subscribe(s)}};import{ConfigBuilder as Os}from"@galacticcouncil/xc-core";function _s(l){let t=Os(l.config).assets();return{assets:t,withAsset(e){let s=t.asset(e);return{sources:s,withSource(n){let a=s.source(n);return{destinations:a,withDestination(r){let{routes:i,destinationAssets:o,isAssetSelect:c,isTagSelect:u,build:m}=a.destination(r);return{routes:i,destinationAssets:o,isAssetSelect:c,isTagSelect:u,build({srcAddress:d,dstAddress:g,dstAsset:p,tag:f}){let h=m(p,f);return l.getTransferData(h,d,g)}}}}}}}}}import{Precompile as Ms}from"@galacticcouncil/xc-core";var Ns="https://api.wormholescan.io",St=class{_baseUrl;constructor(t){this._baseUrl=t||Ns}buildApi(t,e){return[this._baseUrl,t,"?"].join("")+new URLSearchParams(e).toString()}async getVaaBytes(t){let e=this.buildApi("/v1/signed_vaa/"+t,{});return await(await fetch(e)).json()}async getVaa(t){let e=this.buildApi("/api/v1/vaas/"+t,{});return(await(await fetch(e)).json()).data}async getVaaByTxHash(t){let e=this.buildApi("/api/v1/vaas/",{txHash:t}),n=await(await fetch(e)).json();if(n.data.length>0)return n.data[0];throw Error("Can't find VAA for given txHash: "+t)}async getOperations(t){let e=this.buildApi("/api/v1/operations/",t);return(await(await fetch(e)).json()).operations}async getOperation(t){let e=this.buildApi("/api/v1/operations/"+t,{});return await(await fetch(e)).json()}isMrlTransfer(t){let{payloadType:e,toAddress:s,toChain:n}=t,a="0x"+s.substring(26);return e===3&&n===16&&a===Ms.Bridge}};import{acc as Ws}from"@galacticcouncil/common";import{mrl as Us,ChainType as Te,Parachain as js,Precompile as Ks,Wormhole as j}from"@galacticcouncil/xc-core";import{encoding as zs}from"@wormhole-foundation/sdk-base";import{keccak256 as Ls}from"@wormhole-foundation/sdk-connect";import{deserialize as Hs}from"@wormhole-foundation/sdk-definitions";var Pe=(s=>(s[s.WaitingForVaa=0]="WaitingForVaa",s[s.VaaEmitted=1]="VaaEmitted",s[s.Completed=2]="Completed",s))(Pe||{});var $s=300*1e3,Be=class{parachainId;config;whScan;constructor(t,e){this.config=t,this.parachainId=e,this.whScan=new St}get chains(){let t=this.config.chains.values();return Array.from(t)}get filters(){let t=new Date,e=new Date;e.setDate(t.getDate()-6);let s=t.toISOString();return{page:"0",pageSize:"50",includeEndDate:"true",from:e.toISOString(),to:s}}async getWithdraws(t){let e=Ws.getMultilocationDerivatedAccount(this.parachainId,t,1,!0),n=(await this.whScan.getOperations({...this.filters,address:e})).map(async a=>{let{content:r}=a,{payload:i,standarizedProperties:o}=r,c=this.getStatus(a),u=this.chains.find(f=>f instanceof js&&f.parachainId===this.parachainId),{toAddress:m,tokenAddress:d}=o,g=this.chains.find(f=>j.isKnown(f)&&j.fromChain(f).getWormholeId()===i.tokenChain),p;if(c===1&&a.vaa){let{timestamp:f}=this.getVaaHeader(a.vaa.raw),h=a.vaa.raw;if(this.isStuck(f))switch(g.getType()){case Te.EvmChain:let x=new et(g);p=async y=>x.redeem(y,h);break;case Te.SolanaChain:let A=new pt(g);p=async y=>A.redeem(y,h);break}}return{asset:d,assetSymbol:a.data.symbol,amount:a.data.tokenAmount,from:t,fromChain:u,to:m,toChain:g,status:c,redeem:p,operation:a}});return Promise.all(n)}async getDeposits(t,e="hydration"){let s=await this.whScan.getOperations({...this.filters,address:Ks.Bridge,pageSize:"100"}),n=this.config.chains.get(e);if(!n)return[];let a=n,i=(await Us.createPayload(a,t)).toHex(),o=s.filter(c=>{let{content:u}=c,{payload:m}=u;return m.payloadType===3&&m.toChain===16&&"0x"+m.payload===i}).map(async c=>{let{content:u,sourceChain:m}=c,{payload:d,standarizedProperties:g}=u,p=this.getStatus(c),{tokenAddress:f}=g,h=this.chains.find(y=>j.isKnown(y)&&j.fromChain(y).getWormholeId()===d.tokenChain),x=this.chains.find(y=>j.isKnown(y)&&j.fromChain(y).getWormholeId()===d.toChain),A;if(p===1&&c.vaa){let{timestamp:y}=this.getVaaHeader(c.vaa.raw),S=c.vaa.raw;if(this.isStuck(y)){let B=new ft(x);A=async D=>B.redeemMrlViaXcm(D,S)}}return{asset:f,assetSymbol:c.data.symbol,amount:c.data.tokenAmount,from:m.from,fromChain:h,to:t,toChain:n,status:p,redeem:A,operation:c}});return Promise.all(o)}isStuck(t){return Date.now()>=t*1e3+$s}getVaaHeader(t){let e=zs.b64.decode(t),s=Hs("Uint8Array",e);return{timestamp:s.timestamp,emitterChain:s.emitterChain,emitterAddress:s.emitterAddress.toString(),sequence:s.sequence,payload:s.payload,hash:s.hash,id:Ls(s.hash)}}getStatus(t){return t.vaa?t.targetChain&&t.targetChain.status==="completed"?2:1:0}};export{jt as DISPATCH_ADDRESS,et as EvmClaim,it as EvmPlatform,Kt as EvmSigner,Y as FeeSwap,O as PlatformAdapter,pt as SolanaClaim,N as SolanaLilJit,mt as SolanaPlatform,se as SolanaSigner,ft as SubstrateClaim,yt as SubstrateExec,Ct as SubstratePlatform,P as SubstrateService,fe as SubstrateSigner,ye as SuiClaim,xt as SuiPlatform,Ce as SuiSigner,_s as TransferBuilder,Ot as Wallet,Pe as WhStatus,St as WormholeScan,Be as WormholeTransfer,Gt as chunkBySize,wr as deserializeV0,V as ixToHuman,$ as serializeV0};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@galacticcouncil/xc-sdk",
3
- "version": "1.2.0-pr328-030630f",
3
+ "version": "1.2.0",
4
4
  "description": "Cross-chain sdk",
5
5
  "author": "GalacticCouncil",
6
6
  "type": "module",
@@ -33,6 +33,6 @@
33
33
  "link": "npm ln"
34
34
  },
35
35
  "dependencies": {
36
- "@galacticcouncil/xc-core": "^1.1.0"
36
+ "@galacticcouncil/xc-core": "^1.2.0"
37
37
  }
38
38
  }
@@ -1,51 +0,0 @@
1
- export interface GovernorChainLimit {
2
- chainId: number;
3
- availableNotional: number;
4
- notionalLimit: number;
5
- maxTransactionSize: number;
6
- }
7
- export interface GovernorTokenPrice {
8
- originChainId: number;
9
- originAddress: string;
10
- price: number;
11
- }
12
- export interface GovernorEnqueuedVaa {
13
- sequence: number;
14
- emitterAddress: string;
15
- notionalValue: number;
16
- txHash: string;
17
- }
18
- export interface WormholeRateLimit {
19
- configured: boolean;
20
- notionalLimit: number;
21
- availableNotional: number;
22
- maxTransactionSize: number;
23
- enqueued: boolean;
24
- enqueuedCount: number;
25
- }
26
- export declare class WormholeGovernor {
27
- private _baseUrl;
28
- private _prices?;
29
- constructor(baseUrl?: string);
30
- private fetchData;
31
- getRateLimits(): Promise<GovernorChainLimit[]>;
32
- getConfig(): Promise<{
33
- tokens: GovernorTokenPrice[];
34
- }[]>;
35
- getEnqueuedVaas(): Promise<{
36
- chainId: number;
37
- enqueuedVaas: GovernorEnqueuedVaa[];
38
- }[]>;
39
- private priceKey;
40
- getTokenPrices(): Promise<Map<string, number>>;
41
- getWormholeRateLimit(wormholeChainId: number): Promise<WormholeRateLimit>;
42
- /**
43
- * USD notional as priced by the Governor.
44
- *
45
- * @returns USD notional value, or null when none of the origins is governed
46
- */
47
- toNotionalUsd(origins: {
48
- wormholeChainId: number;
49
- originAddress: string;
50
- }[], amount: bigint, decimals: number): Promise<number | null>;
51
- }
@@ -1,9 +0,0 @@
1
- import { ConfigService, TransferCtx, TransferValidation, TransferValidationConstraint } from '@galacticcouncil/xc-core';
2
- import { WormholeGovernor } from '../clients';
3
- export declare class WormholeRateLimitValidation extends TransferValidation {
4
- private governor;
5
- private config;
6
- constructor(governor: WormholeGovernor, config: ConfigService, sourceConstraint?: TransferValidationConstraint, destinationConstraint?: TransferValidationConstraint);
7
- private tokenOrigins;
8
- validate(ctx: TransferCtx): Promise<void>;
9
- }