@galacticcouncil/xc-sdk 1.2.2 → 1.4.0-pr344-9e041f4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/build/Wallet.d.ts +17 -1
  2. package/build/index.cjs +4 -4
  3. package/build/index.mjs +4 -4
  4. package/build/platforms/adapter.d.ts +2 -5
  5. package/build/platforms/evm/EvmPlatform.d.ts +2 -5
  6. package/build/platforms/solana/SolanaPlatform.d.ts +2 -5
  7. package/build/platforms/substrate/SubstratePlatform.d.ts +2 -5
  8. package/build/platforms/substrate/SubstrateService.d.ts +1 -2
  9. package/build/platforms/sui/SuiPlatform.d.ts +2 -5
  10. package/build/platforms/types.d.ts +2 -5
  11. package/build/transfer/DataDestinationProcessor.d.ts +10 -0
  12. package/build/transfer/DataOriginProcessor.d.ts +7 -0
  13. package/build/transfer/DataProcessor.d.ts +11 -4
  14. package/build/transfer/index.d.ts +1 -1
  15. package/build/transfer/utils.d.ts +10 -1
  16. package/build/types.d.ts +3 -0
  17. package/package.json +2 -2
  18. package/build/index.mjs.map +0 -7
  19. package/build/platforms/evm/balance/Erc20.d.ts +0 -8
  20. package/build/platforms/evm/balance/EvmBalance.d.ts +0 -10
  21. package/build/platforms/evm/balance/EvmBalanceFactory.d.ts +0 -5
  22. package/build/platforms/evm/balance/Native.d.ts +0 -5
  23. package/build/platforms/evm/balance/index.d.ts +0 -2
  24. package/build/platforms/solana/balance/Native.d.ts +0 -5
  25. package/build/platforms/solana/balance/SolanaBalance.d.ts +0 -11
  26. package/build/platforms/solana/balance/SolanaBalanceFactory.d.ts +0 -6
  27. package/build/platforms/solana/balance/Token.d.ts +0 -9
  28. package/build/platforms/solana/balance/index.d.ts +0 -2
  29. package/build/platforms/sui/balance/Native.d.ts +0 -5
  30. package/build/platforms/sui/balance/SuiBalance.d.ts +0 -11
  31. package/build/platforms/sui/balance/SuiBalanceFactory.d.ts +0 -6
  32. package/build/platforms/sui/balance/index.d.ts +0 -2
  33. package/build/transfer/DataReverseProcessor.d.ts +0 -6
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/Wallet.ts", "../src/platforms/adapter.ts", "../src/platforms/evm/EvmClaim.ts", "../src/platforms/evm/EvmPlatform.ts", "../src/platforms/evm/balance/EvmBalance.ts", "../src/platforms/evm/balance/Erc20.ts", "../src/platforms/evm/balance/Native.ts", "../src/platforms/evm/balance/EvmBalanceFactory.ts", "../src/platforms/evm/transfer/EvmTransfer.ts", "../src/platforms/evm/transfer/EvmTransferFactory.ts", "../src/platforms/evm/transfer/utils.ts", "../src/platforms/evm/EvmSigner.ts", "../src/platforms/solana/SolanaPlatform.ts", "../src/platforms/solana/balance/SolanaBalance.ts", "../src/platforms/solana/balance/Native.ts", "../src/platforms/solana/balance/Token.ts", "../src/platforms/solana/balance/SolanaBalanceFactory.ts", "../src/platforms/solana/transfer/SolanaTransfer.ts", "../src/platforms/solana/transfer/SolanaTransferFactory.ts", "../src/platforms/solana/utils.ts", "../src/platforms/solana/SolanaClaim.ts", "../src/platforms/solana/SolanaLilJit.ts", "../src/platforms/solana/SolanaSigner.ts", "../src/platforms/substrate/SubstrateClaim.ts", "../src/platforms/substrate/SubstrateExec.ts", "../src/platforms/substrate/utils/amount.ts", "../src/platforms/substrate/utils/dryRun.ts", "../src/platforms/substrate/utils/xcm.ts", "../src/platforms/substrate/SubstratePlatform.ts", "../src/platforms/substrate/SubstrateService.ts", "../src/platforms/substrate/SubstrateSigner.ts", "../src/platforms/sui/SuiClaim.ts", "../src/platforms/sui/utils.ts", "../src/platforms/sui/SuiPlatform.ts", "../src/platforms/sui/balance/SuiBalance.ts", "../src/platforms/sui/balance/Native.ts", "../src/platforms/sui/balance/SuiBalanceFactory.ts", "../src/platforms/sui/SuiSigner.ts", "../src/transfer/DataOriginProcessor.ts", "../src/transfer/utils.ts", "../src/transfer/DataProcessor.ts", "../src/transfer/DataReverseProcessor.ts", "../src/FeeSwap.ts", "../src/Wallet.utils.ts", "../src/clients/WormholeScan.ts", "../src/clients/WormholeTransfer.ts", "../src/clients/types.ts"],
4
- "sourcesContent": ["import { acc, big } from '@galacticcouncil/common';\n\nimport {\n addr,\n Asset,\n AnyChain,\n AnyParachain,\n AssetAmount,\n ConfigBuilder,\n ConfigService,\n TransferConfigs,\n TransferCtx,\n TransferValidator,\n TransferValidation,\n TransferValidationReport,\n} from '@galacticcouncil/xc-core';\n\nimport { combineLatest, debounceTime, Subscription } from 'rxjs';\n\nimport {\n Call,\n PlatformAdapter,\n SubstrateCall,\n SubstrateExec,\n SubstrateService,\n} from './platforms';\nimport {\n calculateMax,\n calculateMin,\n formatEvmAddress,\n DataOriginProcessor,\n DataReverseProcessor,\n} from './transfer';\nimport { Transfer } from './types';\n\nimport { FeeSwap } from './FeeSwap';\n\nconst { EvmAddr } = addr;\n\nexport interface WalletOptions {\n configService: ConfigService;\n transferValidations?: TransferValidation[];\n}\n\nexport class Wallet {\n readonly config: ConfigService;\n readonly validations: TransferValidation[];\n\n constructor({ configService, transferValidations }: WalletOptions) {\n this.config = configService;\n this.validations = transferValidations || [];\n }\n\n async transfer(\n asset: string | Asset,\n srcAddress: string,\n srcChain: string | AnyChain,\n dstAddress: string,\n dstChain: string | AnyChain\n ): Promise<Transfer> {\n const transfer = ConfigBuilder(this.config)\n .assets()\n .asset(asset)\n .source(srcChain)\n .destination(dstChain)\n .build();\n return this.getTransferData(transfer, srcAddress, dstAddress);\n }\n\n async remoteXcm(\n srcAddress: string,\n srcChain: string | AnyParachain,\n dstChain: string | AnyParachain,\n dstCall: SubstrateCall,\n opts: {\n srcFeeAsset?: Asset;\n } = {}\n ): Promise<SubstrateCall> {\n const src = this.config.getChain(srcChain) as AnyParachain;\n const dst = this.config.getChain(dstChain) as AnyParachain;\n\n const isSubstrateExec = src.isSubstrate() && dst.isSubstrate();\n if (!isSubstrateExec)\n throw Error('RemoteXcm is supported only between parachains');\n\n const [srcSub, dstSub] = await Promise.all([\n SubstrateService.create(src),\n SubstrateService.create(dst),\n ]);\n\n const exec = new SubstrateExec(srcSub, dstSub);\n\n const dstAddress = acc.getMultilocationDerivatedAccount(\n src.parachainId,\n srcAddress,\n 1,\n dst.usesH160Acc\n );\n\n const dstAsset = await dstSub.getAsset();\n const transfer = await this.transfer(\n dstAsset,\n srcAddress,\n srcChain,\n dstAddress,\n dstChain\n );\n\n return exec.remoteExec(\n srcAddress,\n dstAddress,\n dstCall,\n (fees) => {\n const feesFmt = fees.toDecimal();\n return transfer.buildCall(feesFmt);\n },\n opts\n );\n }\n\n async getTransferData(\n configs: TransferConfigs,\n srcAddress: string,\n dstAddress: string\n ): Promise<Transfer> {\n const srcConf = configs.origin;\n const dstConf = configs.reverse;\n\n const srcAdapter = new PlatformAdapter(srcConf.chain);\n const dstAdapter = new PlatformAdapter(dstConf.chain);\n\n const src = new DataOriginProcessor(srcAdapter, srcConf);\n const dst = new DataReverseProcessor(dstAdapter, dstConf);\n const validator = new TransferValidator(...this.validations);\n\n const [\n srcBalance,\n srcFeeBalance,\n srcDestinationFee,\n srcDestinationFeeBalance,\n srcMin,\n dstBalance,\n dstMin,\n ] = await Promise.all([\n src.getBalance(srcAddress),\n src.getFeeBalance(srcAddress),\n src.getDestinationFee(),\n src.getDestinationFeeBalance(srcAddress),\n src.getMin(),\n dst.getBalance(dstAddress),\n dst.getMin(),\n ]);\n\n const { source, destination } = srcConf.route;\n\n // Normalize destination fee asset\n const dstFee = srcDestinationFee.fee.copyWith(destination.fee.asset);\n const dstFeeBreakdown = srcDestinationFee.feeBreakdown;\n\n const sameAssetDestFee = source.asset.isEqual(dstFee);\n const initAmount =\n sameAssetDestFee && dstFee.amount > 10n ? dstFee.amount + 1n : 10n;\n\n const ctx: TransferCtx = {\n address: dstAddress,\n amount: initAmount,\n asset: source.asset,\n destination: {\n balance: dstBalance,\n chain: dstConf.chain,\n fee: dstFee,\n feeBreakdown: dstFeeBreakdown,\n },\n sender: srcAddress,\n source: {\n balance: srcBalance,\n chain: srcConf.chain,\n fee: srcFeeBalance.copyWith({ amount: 0n }),\n feeBalance: srcFeeBalance,\n destinationFee: srcDestinationFee.fee,\n destinationFeeBalance: srcDestinationFeeBalance,\n },\n };\n\n ctx.transact = await src.getTransact(ctx);\n\n const swap = new FeeSwap(ctx);\n\n let srcFee = await src.getFee(ctx);\n let srcFeeSwap;\n if (swap.isSwapSupported(source.fee)) {\n srcFeeSwap = await swap.getSwap(srcFee);\n ctx.source.feeSwap = srcFeeSwap;\n }\n\n let srcDestinationFeeSwap;\n if (swap.isDestinationSwapSupported(srcFee)) {\n srcDestinationFeeSwap = await swap.getDestinationSwap(srcFee);\n ctx.source.destinationFeeSwap = srcDestinationFeeSwap;\n }\n\n if (srcFeeSwap || srcDestinationFeeSwap) {\n // Re-estimate fee if fee swap & add 5% margin\n srcFee = await src.getFee(ctx);\n srcFee = srcFee.padByPct(5n);\n }\n\n const dstEd = await dst.getEd();\n const min = calculateMin(dstBalance, dstFee, dstMin, dstEd);\n\n const srcEd = await src.getEd();\n const max = calculateMax(srcBalance, srcFee, srcMin, srcEd);\n\n ctx.amount = 0n;\n ctx.source.fee = srcFee;\n\n const transfer = {\n source: {\n balance: srcBalance,\n destinationFee: srcDestinationFee.fee,\n destinationFeeBalance: srcDestinationFeeBalance,\n destinationFeeSwap: srcDestinationFeeSwap,\n fee: srcFee,\n feeBalance: srcFeeBalance,\n feeSwap: srcFeeSwap,\n max,\n min: srcBalance.copyWith({ amount: min.amount }),\n },\n destination: {\n balance: dstBalance,\n fee: dstFee,\n },\n async buildCall(amount): Promise<Call> {\n const copyCtx = Object.assign({}, ctx);\n copyCtx.amount = big.toBigInt(amount, srcBalance.decimals);\n copyCtx.transact = await src.getTransact(copyCtx);\n return src.getCall(copyCtx);\n },\n async estimateFee(amount): Promise<AssetAmount> {\n const copyCtx = Object.assign({}, ctx);\n copyCtx.amount = big.toBigInt(amount, srcBalance.decimals);\n copyCtx.transact = await src.getTransact(copyCtx);\n return src.getFee(copyCtx);\n },\n async estimateDestinationFee(amount): Promise<AssetAmount> {\n const target = big.toBigInt(amount, srcBalance.decimals);\n const { fee, feeBreakdown } = await src.getDestinationFee(target);\n ctx.destination.fee = fee;\n ctx.destination.feeBreakdown = feeBreakdown;\n ctx.source.destinationFee = fee;\n transfer.destination.fee = fee;\n transfer.source.destinationFee = fee;\n return fee;\n },\n async validate(fee): Promise<TransferValidationReport[]> {\n const copyCtx = Object.assign({}, ctx);\n const srcFeeAmount = fee || srcFee.amount;\n copyCtx.source.fee = srcFee.copyWith({ amount: srcFeeAmount });\n return validator.validate(copyCtx);\n },\n } as Transfer;\n\n return transfer;\n }\n\n async subscribeBalance(\n address: string,\n chain: string | AnyChain,\n observer: (balances: AssetAmount[]) => void\n ): Promise<Subscription> {\n const chainRoutes = this.config.getChainRoutes(chain);\n const adapter = new PlatformAdapter(chainRoutes.chain);\n const observables = chainRoutes\n .getUniqueRoutes()\n .map(async ({ source }) => {\n const { asset, balance } = source;\n const assetId = chainRoutes.chain.getBalanceAssetId(asset);\n const account = EvmAddr.isValid(assetId.toString())\n ? await formatEvmAddress(address, chainRoutes.chain)\n : address;\n const balanceConfig = balance.build({\n address: account,\n asset: asset,\n chain: chainRoutes.chain,\n });\n return adapter.subscribeBalance(asset, balanceConfig);\n });\n\n const ob = await Promise.all(observables);\n const observable = combineLatest(ob);\n return observable.pipe(debounceTime(500)).subscribe(observer);\n }\n}\n", "import {\n AnyChain,\n AnyEvmChain,\n Asset,\n AssetAmount,\n BaseConfig,\n ChainType,\n Parachain,\n SolanaChain,\n SuiChain,\n} from '@galacticcouncil/xc-core';\n\nimport { Observable } from 'rxjs';\n\nimport { EvmPlatform } from './evm';\nimport { SolanaPlatform } from './solana';\nimport { SubstratePlatform } from './substrate';\nimport { SuiPlatform } from './sui';\nimport { Call, Platform } from './types';\n\nexport class PlatformAdapter {\n readonly platform: Record<string, Platform<BaseConfig, BaseConfig>> = {};\n\n constructor(chain: AnyChain) {\n switch (chain.getType()) {\n case ChainType.EvmChain:\n this.registerEvm(chain);\n break;\n case ChainType.EvmParachain:\n this.registerEvm(chain);\n this.registerSubstrate(chain);\n break;\n case ChainType.Parachain:\n this.registerSubstrate(chain);\n break;\n case ChainType.SolanaChain:\n this.registerSolana(chain);\n break;\n case ChainType.SuiChain:\n this.registerSui(chain);\n break;\n default:\n throw new Error('Unsupported platform: ' + chain.getType());\n }\n }\n\n private registerEvm(chain: AnyChain) {\n const evmChain = chain as AnyEvmChain;\n this.platform.Evm = new EvmPlatform(evmChain);\n }\n\n private registerSolana(chain: AnyChain) {\n const solanaChain = chain as SolanaChain;\n this.platform.Solana = new SolanaPlatform(solanaChain);\n }\n\n private registerSui(chain: AnyChain) {\n const suiChain = chain as SuiChain;\n this.platform.Sui = new SuiPlatform(suiChain);\n }\n\n private registerSubstrate(chain: AnyChain) {\n const parachain = chain as Parachain;\n this.platform.Substrate = new SubstratePlatform(parachain);\n }\n\n async buildCall(\n account: string,\n amount: bigint,\n feeBalance: AssetAmount,\n config: BaseConfig\n ): Promise<Call> {\n return this.platform[config.type].buildCall(\n account,\n amount,\n feeBalance,\n config\n );\n }\n\n async estimateFee(\n account: string,\n amount: bigint,\n feeBalance: AssetAmount,\n config: BaseConfig\n ): Promise<AssetAmount> {\n return this.platform[config.type].estimateFee(\n account,\n amount,\n feeBalance,\n config\n );\n }\n\n async getBalance(asset: Asset, config: BaseConfig): Promise<AssetAmount> {\n return this.platform[config.type].getBalance(asset, config);\n }\n\n async subscribeBalance(\n asset: Asset,\n config: BaseConfig\n ): Promise<Observable<AssetAmount>> {\n return this.platform[config.type].subscribeBalance(asset, config);\n }\n}\n", "import { Abi, EvmChain, Wormhole as Wh } from '@galacticcouncil/xc-core';\n\nimport { encodeFunctionData } from 'viem';\n\nimport { encoding } from '@wormhole-foundation/sdk-base';\n\nimport { EvmCall } from './types';\n\nexport class EvmClaim {\n readonly #chain: EvmChain;\n\n constructor(chain: EvmChain) {\n this.#chain = chain;\n }\n\n redeem(from: string, vaaRaw: string): EvmCall {\n const ctxWh = Wh.fromChain(this.#chain);\n\n const vaaBytes = encoding.b64.decode(vaaRaw);\n const vaaHex = encoding.hex.encode(vaaBytes);\n\n const abi = Abi.TokenBridge;\n const data = encodeFunctionData({\n abi: abi,\n functionName: 'completeTransfer',\n args: ['0x' + vaaHex],\n });\n\n return {\n abi: JSON.stringify(abi),\n data: data,\n from: from,\n to: ctxWh.getTokenBridge(),\n } as EvmCall;\n }\n}\n", "import {\n Abi,\n AnyEvmChain,\n Asset,\n AssetAmount,\n CallType,\n ContractConfig,\n Erc20Client,\n EvmClient,\n} from '@galacticcouncil/xc-core';\n\nimport {\n distinctUntilChanged,\n finalize,\n shareReplay,\n Observable,\n Subject,\n} from 'rxjs';\n\nimport { EvmBalanceFactory } from './balance';\nimport { EvmTransferFactory } from './transfer';\nimport {\n isNativeEthBridge,\n isPrecompile,\n isSnowbridgeV2,\n getSnowbridgeV2TokenAddress,\n} from './transfer/utils';\nimport { EvmCall, EvmDryRunResult } from './types';\n\nimport { Platform } from '../types';\n\nexport class EvmPlatform implements Platform<ContractConfig, ContractConfig> {\n readonly #client: EvmClient;\n\n constructor(chain: AnyEvmChain) {\n this.#client = chain.evmClient;\n }\n\n async buildCall(\n account: string,\n amount: bigint,\n _feeBalance: AssetAmount,\n config: ContractConfig\n ): Promise<EvmCall> {\n const contract = EvmTransferFactory.get(this.#client, config);\n const { abi, asset, calldata } = contract;\n const transferCall = {\n abi: JSON.stringify(abi),\n data: calldata as `0x${string}`,\n from: account as `0x${string}`,\n to: config.address as `0x${string}`,\n type: CallType.Evm,\n value: config.value,\n dryRun: async () => {\n const { error, logs } = await contract.simulateCall(account);\n const decodedEvents = contract.decodeEvents(logs);\n return {\n call: config.module + '.' + config.func,\n error: error?.shortMessage,\n events: decodedEvents,\n } as EvmDryRunResult;\n },\n } as EvmCall;\n\n if (isPrecompile(config) || isNativeEthBridge(config)) {\n return transferCall;\n }\n\n const tokenAddress = isSnowbridgeV2(config)\n ? getSnowbridgeV2TokenAddress(config)!\n : asset;\n\n const erc20 = new Erc20Client(this.#client, tokenAddress);\n const allowance = await erc20.allowance(account, config.address);\n if (allowance >= amount) {\n return transferCall;\n }\n\n const approve = erc20.approve(config.address, amount);\n return {\n abi: JSON.stringify(Abi.Erc20),\n allowance: allowance,\n data: approve as `0x${string}`,\n from: account as `0x${string}`,\n to: tokenAddress as `0x${string}`,\n type: CallType.Evm,\n dryRun: () => {},\n } as EvmCall;\n }\n\n async estimateFee(\n account: string,\n amount: bigint,\n feeBalance: AssetAmount,\n config: ContractConfig\n ): Promise<AssetAmount> {\n const contract = EvmTransferFactory.get(this.#client, config);\n const fee = await contract.estimateFee(account, amount);\n return feeBalance.copyWith({\n amount: fee,\n });\n }\n\n async getBalance(asset: Asset, config: ContractConfig): Promise<AssetAmount> {\n const contract = EvmBalanceFactory.get(this.#client, config);\n const [balance, decimals] = await Promise.all([\n contract.getBalance(),\n contract.getDecimals(),\n ]);\n return AssetAmount.fromAsset(asset, {\n amount: balance,\n decimals: decimals,\n });\n }\n\n async subscribeBalance(\n asset: Asset,\n config: ContractConfig\n ): Promise<Observable<AssetAmount>> {\n const subject = new Subject<AssetAmount>();\n const observable = subject.pipe(shareReplay(1));\n const provider = this.#client.getProvider();\n\n const run = async () => {\n const updateBalance = async () => {\n const balance = await this.getBalance(asset, config);\n subject.next(balance);\n };\n await updateBalance();\n const unsub = provider.watchBlocks({\n onBlock: () => updateBalance(),\n });\n return () => unsub();\n };\n\n let disconnect: () => void;\n run().then((unsub) => (disconnect = unsub));\n\n return observable.pipe(\n finalize(() => disconnect?.()),\n distinctUntilChanged((prev, curr) => prev.amount === curr.amount)\n ) as Observable<AssetAmount>;\n }\n}\n", "import { ContractConfig, EvmClient } from '@galacticcouncil/xc-core';\n\nexport abstract class EvmBalance {\n readonly client: EvmClient;\n readonly config: ContractConfig;\n\n constructor(client: EvmClient, config: ContractConfig) {\n this.validateClient(client);\n this.validateConfig(config);\n this.client = client;\n this.config = config;\n }\n\n private validateClient(client: EvmClient) {\n if (!client) {\n throw new Error(`No EVM client found`);\n }\n }\n\n private validateConfig(config: ContractConfig) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n }\n\n abstract getBalance(): Promise<bigint>;\n abstract getDecimals(): Promise<number>;\n}\n", "import {\n ContractConfig,\n Erc20Client,\n EvmClient,\n} from '@galacticcouncil/xc-core';\n\nimport { EvmBalance } from './EvmBalance';\n\nexport class Erc20 extends EvmBalance {\n readonly erc20: Erc20Client;\n\n constructor(client: EvmClient, config: ContractConfig) {\n super(client, config);\n this.erc20 = new Erc20Client(client, config.address);\n }\n\n async getBalance(): Promise<bigint> {\n const { args } = this.config;\n const [account] = args;\n return this.erc20.balanceOf(account);\n }\n\n async getDecimals(): Promise<number> {\n return this.erc20.decimals();\n }\n}\n", "import { EvmBalance } from './EvmBalance';\n\nexport class Native extends EvmBalance {\n async getBalance(): Promise<bigint> {\n const provider = this.client.getProvider();\n const { address } = this.config;\n\n return provider.getBalance({\n address: address as `0x${string}`,\n });\n }\n\n async getDecimals(): Promise<number> {\n return this.client.chain.nativeCurrency.decimals;\n }\n}\n", "import { ContractConfig, EvmClient } from '@galacticcouncil/xc-core';\n\nimport { Erc20 } from './Erc20';\nimport { Native } from './Native';\nimport { EvmBalance } from './EvmBalance';\n\nexport class EvmBalanceFactory {\n static get(client: EvmClient, config: ContractConfig): EvmBalance {\n switch (config.module) {\n case 'Erc20':\n return new Erc20(client, config);\n case 'Native':\n return new Native(client, config);\n default: {\n throw new Error('Module ' + config.module + ' is not supported');\n }\n }\n }\n}\n", "import { ContractConfig, EvmClient } from '@galacticcouncil/xc-core';\nimport {\n Abi,\n BaseError,\n ContractFunctionExecutionError,\n Log,\n decodeEventLog,\n} from 'viem';\n\nimport { EvmEventLog } from '../types';\n\ntype SimulateCallResult = {\n error: BaseError | undefined;\n logs: Log[] | undefined;\n};\n\nexport class EvmTransfer {\n protected readonly client: EvmClient;\n protected readonly config: ContractConfig;\n\n constructor(client: EvmClient, config: ContractConfig) {\n this.validateClient(client);\n this.client = client;\n this.config = config;\n }\n\n private validateClient(client: EvmClient) {\n if (!client) {\n throw new Error(`No EVM client found`);\n }\n }\n\n get abi(): Abi {\n return this.config.abi;\n }\n\n get asset(): string {\n const args = this.config.args;\n const [asset] = args;\n return asset;\n }\n\n get calldata(): string {\n return this.config.encodeFunctionData();\n }\n\n async estimateGas(account: string): Promise<bigint> {\n const { address, args, value, func } = this.config;\n const provider = this.client.getProvider();\n return await provider.estimateContractGas({\n address: address as `0x${string}`,\n abi: this.abi,\n functionName: func,\n args: args,\n value: value,\n account: account as `0x${string}`,\n });\n }\n\n async estimateFee(account: string, balance: bigint): Promise<bigint> {\n if (balance === 0n) {\n return 0n;\n }\n\n try {\n const estimatedGas = await this.estimateGas(account);\n const gasPrice = await this.getGasPrice();\n return estimatedGas * gasPrice;\n } catch (e) {\n if (e instanceof ContractFunctionExecutionError) {\n const err = e as ContractFunctionExecutionError;\n console.log(\"Can't estimate fees!\\n\", err.message);\n } else {\n console.log(e);\n }\n return 0n;\n }\n }\n\n async getGasPrice(): Promise<bigint> {\n return this.client.getProvider().getGasPrice();\n }\n\n async getNonce(account: string): Promise<number> {\n return this.client.getProvider().getTransactionCount({\n address: account as `0x${string}`,\n });\n }\n\n async simulateCall(account: string): Promise<SimulateCallResult> {\n const { address, args, value, func } = this.config;\n const provider = this.client.getProvider();\n const nonce = await this.getNonce(account);\n try {\n const { results } = await provider.simulateCalls({\n account: account as `0x${string}`,\n calls: [\n {\n to: address as `0x${string}`,\n abi: this.abi,\n functionName: func,\n args: args,\n value: value,\n },\n ],\n stateOverrides: [\n {\n address: account as `0x${string}`,\n nonce: nonce,\n },\n ],\n });\n const [result] = results;\n return result as SimulateCallResult;\n } catch (error) {\n const err = error as BaseError;\n console.log(\"Can't simulate call!\\n\", err.details);\n return {\n error: error,\n } as SimulateCallResult;\n }\n }\n\n decodeEvents(logs: Log[] | undefined): EvmEventLog[] {\n const decodedLogs: EvmEventLog[] = [];\n if (logs) {\n logs.forEach((l) => {\n try {\n const { eventName, args } = decodeEventLog({\n abi: this.abi,\n data: l.data,\n topics: l.topics,\n });\n decodedLogs.push({\n eventName: eventName,\n args: args,\n } as unknown as EvmEventLog);\n } catch (e) {}\n });\n }\n return decodedLogs;\n }\n}\n", "import { ContractConfig, EvmClient } from '@galacticcouncil/xc-core';\n\nimport { EvmTransfer } from './EvmTransfer';\n\nexport class EvmTransferFactory {\n static get(client: EvmClient, config: ContractConfig): EvmTransfer {\n return new EvmTransfer(client, config);\n }\n}\n", "import { ContractConfig, Precompile } from '@galacticcouncil/xc-core';\nimport { decodeAbiParameters } from 'viem';\n\nexport function isSnowbridgeV2(config: ContractConfig): boolean {\n return config.module === 'Snowbridge' && config.func === 'v2_sendMessage';\n}\n\n/**\n * Extract the ERC20 token address from Snowbridge V2 assets arg.\n */\nexport function getSnowbridgeV2TokenAddress(\n config: ContractConfig\n): string | undefined {\n if (!isSnowbridgeV2(config)) return undefined;\n const assets = config.args[1] as string[];\n if (!assets || assets.length === 0) return undefined;\n const [_kind, tokenAddress] = decodeAbiParameters(\n [{ type: 'uint8' }, { type: 'address' }, { type: 'uint128' }],\n assets[0] as `0x${string}`\n );\n return tokenAddress as string;\n}\n\nexport function isNativeEthBridge(config: ContractConfig): boolean {\n const isSnowbridgeNative =\n config.module === 'Snowbridge' &&\n config.func === 'v2_sendMessage' &&\n Array.isArray(config.args[1]) &&\n config.args[1].length === 0;\n\n // Snowbridge V1 (legacy) native ETH: sendToken with the zero token address.\n const isSnowbridgeV1Native =\n config.module === 'Snowbridge' &&\n config.func === 'sendToken' &&\n config.args[0] === '0x0000000000000000000000000000000000000000';\n\n const isWormholeNative =\n config.module === 'TokenBridge' &&\n ['wrapAndTransferETHWithPayload', 'wrapAndTransferETH'].includes(\n config.func\n );\n\n return isWormholeNative || isSnowbridgeNative || isSnowbridgeV1Native;\n}\n\nexport function isPrecompile(config: ContractConfig): boolean {\n const precompiles = Object.entries(Precompile).map(([_, v]) => v);\n return precompiles.includes(config.address);\n}\n", "import { AnyEvmChain, EvmClient, EvmParachain } from '@galacticcouncil/xc-core';\nimport { h160 } from '@galacticcouncil/common';\n\nimport { Binary } from 'polkadot-api';\nimport { WalletClient } from 'viem';\n\nimport { EvmCall, EvmTxObserver } from './types';\n\nimport { Call } from '../types';\n\nexport const DISPATCH_ADDRESS = '0x0000000000000000000000000000000000000401';\n\nconst { H160 } = h160;\n\nexport class EvmSigner {\n readonly #chain: AnyEvmChain;\n readonly #client: EvmClient;\n readonly #signer: WalletClient;\n\n constructor(chain: AnyEvmChain, signer: WalletClient) {\n this.#chain = chain;\n this.#client = chain.evmClient;\n this.#signer = signer;\n }\n\n async signAndSend(call: Call, observer: EvmTxObserver) {\n const account = H160.fromAny(call.from);\n const provider = this.#client.getProvider();\n\n let isDispatch = false;\n if (this.#chain instanceof EvmParachain) {\n try {\n const dotClient = this.#chain.client;\n const callData = Binary.fromHex(call.data);\n const api = dotClient.getUnsafeApi();\n await api.txFromCallData(callData);\n isDispatch = true;\n } catch (_) {}\n }\n\n let txHash: `0x${string}`;\n\n if (isDispatch) {\n const [gas, gasPrice] = await Promise.all([\n provider.estimateGas({\n account: account as `0x${string}`,\n data: call.data as `0x${string}`,\n to: DISPATCH_ADDRESS as `0x${string}`,\n }),\n provider.getGasPrice(),\n ]);\n\n const gasPriceExtra = gasPrice + (gasPrice / 100n) * 10n;\n\n txHash = await this.#signer.sendTransaction({\n account: account as `0x${string}`,\n chain: this.#client.chain,\n data: call.data as `0x${string}`,\n maxPriorityFeePerGas: gasPriceExtra,\n maxFeePerGas: gasPriceExtra,\n gas: (gas * 11n) / 10n,\n to: DISPATCH_ADDRESS as `0x${string}`,\n });\n } else {\n const { data, to, value } = call as EvmCall;\n\n const [gas, gasPrice] = await Promise.all([\n provider.estimateGas({\n account: account as `0x${string}`,\n data: data as `0x${string}`,\n to: to as `0x${string}`,\n value: value,\n }),\n provider.getGasPrice(),\n ]);\n\n // Fee math mirrors hydration-ui's EthereumSigner: gas price + 5% surplus,\n // gas limit + 30% surplus, with maxFeePerGas == maxPriorityFeePerGas so\n // the wallet uses the chain's (low, flat) price instead of its own\n // base-fee oracle.\n const gasPriceSurplus = gasPrice + (gasPrice * 5n) / 100n;\n const gasLimit = gas + (gas * 30n) / 100n;\n\n txHash = await this.#signer.sendTransaction({\n account: account as `0x${string}`,\n chain: this.#client.chain,\n data: data as `0x${string}`,\n to: to as `0x${string}`,\n value: value,\n gas: gasLimit,\n maxFeePerGas: gasPriceSurplus,\n maxPriorityFeePerGas: gasPriceSurplus,\n });\n }\n\n observer.onTransactionSend(txHash);\n provider\n .waitForTransactionReceipt({ hash: txHash })\n .then((receipt) => observer.onTransactionReceipt(receipt))\n .catch((error) => observer.onError(error));\n }\n}\n", "import {\n Asset,\n AssetAmount,\n CallType,\n ProgramConfig,\n SolanaChain,\n SolanaQueryConfig,\n} from '@galacticcouncil/xc-core';\n\nimport { Connection, PublicKey } from '@solana/web3.js';\n\nimport { Buffer } from 'buffer';\nimport {\n distinctUntilChanged,\n finalize,\n shareReplay,\n Observable,\n Subject,\n} from 'rxjs';\n\nimport { SolanaBalanceFactory } from './balance';\nimport { SolanaTransferFactory } from './transfer';\nimport { SolanaCall, SolanaDryRunResult } from './types';\nimport { ixToHuman } from './utils';\n\nimport { Platform } from '../types';\n\nexport class SolanaPlatform implements Platform<\n ProgramConfig,\n SolanaQueryConfig\n> {\n readonly #connection: Connection;\n\n constructor(chain: SolanaChain) {\n this.#connection = chain.connection;\n }\n\n async buildCall(\n account: string,\n _amount: bigint,\n _feeBalance: AssetAmount,\n config: ProgramConfig\n ): Promise<SolanaCall> {\n const transfer = SolanaTransferFactory.get(this.#connection, config);\n const mssgV0 = await transfer.getPriorityMessage(account);\n\n const mssgArray = mssgV0.serialize();\n const mssgHex = Buffer.from(mssgArray).toString('hex');\n return {\n from: account,\n data: mssgHex,\n ix: ixToHuman(config.instructions),\n signers: config.signers,\n type: CallType.Solana,\n dryRun: async () => {\n const { err, logs } = await transfer.simulateTransaction(\n account,\n mssgV0\n );\n\n return {\n call: config.module + '.' + config.func,\n error: err,\n events: logs,\n } as SolanaDryRunResult;\n },\n } as SolanaCall;\n }\n\n async estimateFee(\n account: string,\n amount: bigint,\n feeBalance: AssetAmount,\n config: ProgramConfig\n ): Promise<AssetAmount> {\n const transfer = SolanaTransferFactory.get(this.#connection, config);\n const fee = await transfer.estimateFee(account, amount);\n const mssgV0 = await transfer.getPriorityMessage(account);\n const { accounts } = await transfer.simulateTransaction(account, mssgV0);\n\n const sender = accounts && accounts[0];\n const senderFinalBalance = sender?.lamports;\n\n if (senderFinalBalance) {\n const isSolTransfer =\n config.module === 'TokenBridge' &&\n config.func === 'TransferNativeWithPayload';\n\n return feeBalance.copyWith({\n amount:\n feeBalance.amount -\n BigInt(senderFinalBalance) -\n (isSolTransfer ? amount : 0n) +\n config.rentReserve,\n });\n }\n\n return feeBalance.copyWith({\n amount: fee + config.rentReserve,\n });\n }\n\n async getBalance(\n asset: Asset,\n config: SolanaQueryConfig\n ): Promise<AssetAmount> {\n const query = SolanaBalanceFactory.get(this.#connection, config);\n const [balance, decimals] = await Promise.all([\n query.getBalance(),\n query.getDecimals(),\n ]);\n return AssetAmount.fromAsset(asset, {\n amount: balance,\n decimals: decimals,\n });\n }\n\n async subscribeBalance(\n asset: Asset,\n config: SolanaQueryConfig\n ): Promise<Observable<AssetAmount>> {\n const subject = new Subject<AssetAmount>();\n const observable = subject.pipe(shareReplay(1));\n\n const run = async () => {\n const updateBalance = async () => {\n const balance = await this.getBalance(asset, config);\n subject.next(balance);\n };\n await updateBalance();\n const sender = new PublicKey(config.address);\n const id = this.#connection.onAccountChange(sender, () =>\n updateBalance()\n );\n return () => {\n this.#connection.removeAccountChangeListener(id);\n };\n };\n\n let disconnect: () => void;\n run().then((unsub) => (disconnect = unsub));\n\n return observable.pipe(\n finalize(() => disconnect?.()),\n distinctUntilChanged((prev, curr) => prev.amount === curr.amount)\n ) as Observable<AssetAmount>;\n }\n}\n", "import { SolanaQueryConfig } from '@galacticcouncil/xc-core';\n\nimport { Connection } from '@solana/web3.js';\n\nexport abstract class SolanaBalance {\n readonly connection: Connection;\n readonly config: SolanaQueryConfig;\n\n constructor(connection: Connection, config: SolanaQueryConfig) {\n this.validateConnection(connection);\n this.validateConfig(config);\n this.connection = connection;\n this.config = config;\n }\n\n private validateConnection(connection: Connection) {\n if (!connection) {\n throw new Error(`No connection found`);\n }\n }\n\n private validateConfig(config: SolanaQueryConfig) {\n if (!config.address) {\n throw new Error('Solana address is required');\n }\n }\n\n abstract getBalance(): Promise<bigint>;\n abstract getDecimals(): Promise<number>;\n}\n", "import { SolanaAddress } from '@wormhole-foundation/sdk-solana';\n\nimport { SolanaBalance } from './SolanaBalance';\n\nconst NATIVE_DECIMALS = 9;\n\nexport class Native extends SolanaBalance {\n async getBalance(): Promise<bigint> {\n const { address } = this.config;\n\n const senderAddress = new SolanaAddress(address).unwrap();\n const balance = await this.connection.getBalance(senderAddress);\n return BigInt(balance);\n }\n\n async getDecimals(): Promise<number> {\n return NATIVE_DECIMALS;\n }\n}\n", "import { SolanaQueryConfig } from '@galacticcouncil/xc-core';\n\nimport { SolanaAddress } from '@wormhole-foundation/sdk-solana';\nimport { Connection } from '@solana/web3.js';\n\nimport { SolanaBalance } from './SolanaBalance';\n\nexport class Token extends SolanaBalance {\n constructor(connection: Connection, config: SolanaQueryConfig) {\n super(connection, config);\n this.validateToken(config);\n }\n\n async getBalance(): Promise<bigint> {\n const { address, token } = this.config;\n\n const senderAddress = new SolanaAddress(address).unwrap();\n const mintAddress = new SolanaAddress(token!).unwrap();\n\n const accounts = await this.connection.getParsedTokenAccountsByOwner(\n senderAddress,\n { mint: mintAddress }\n );\n\n return accounts.value.reduce((sum: bigint, { account }) => {\n const t = account.data.parsed.info.tokenAmount;\n sum += BigInt(t.amount);\n return sum;\n }, 0n);\n }\n\n async getDecimals(): Promise<number> {\n const { token } = this.config;\n\n const mintAddress = new SolanaAddress(token!).unwrap();\n\n const supply = await this.connection.getTokenSupply(mintAddress);\n return supply.value.decimals;\n }\n\n private validateToken(config: SolanaQueryConfig) {\n if (!config.token) {\n throw new Error('Token address is required');\n }\n }\n}\n", "import { SolanaQueryConfig } from '@galacticcouncil/xc-core';\n\nimport { Connection } from '@solana/web3.js';\n\nimport { Native } from './Native';\nimport { Token } from './Token';\nimport { SolanaBalance } from './SolanaBalance';\n\nexport class SolanaBalanceFactory {\n static get(connection: Connection, config: SolanaQueryConfig): SolanaBalance {\n switch (config.module) {\n case 'Native':\n return new Native(connection, config);\n case 'Token':\n return new Token(connection, config);\n default: {\n throw new Error('Module ' + config.module + ' is not supported');\n }\n }\n }\n}\n", "import { ProgramConfig } from '@galacticcouncil/xc-core';\n\nimport {\n AddressLookupTableAccount,\n Connection,\n ComputeBudgetProgram,\n MessageV0,\n PublicKey,\n SimulatedTransactionResponse,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\n\nconst DEFAULT_PRIORITY_FEE_PERCENTILE = 0.5;\nconst DEFAULT_PERCENTILE_MULTIPLE = 2;\nconst DEFAULT_MIN_PRIORITY_FEE = 1;\nconst DEFAULT_MAX_PRIORITY_FEE = 1e6;\n\nconst DEFAULT_COMPUTE_BUDGET = 250_000;\n\nexport class SolanaTransfer {\n readonly connection: Connection;\n readonly config: ProgramConfig;\n\n constructor(connection: Connection, config: ProgramConfig) {\n this.validateConnection(connection);\n this.connection = connection;\n this.config = config;\n }\n\n private validateConnection(connection: Connection) {\n if (!connection) {\n throw new Error(`No connection found`);\n }\n }\n\n async getPriorityMessage(account: string): Promise<MessageV0> {\n const { instructions } = this.config;\n const message = await this.getV0Message(account, instructions);\n const priorityFeeIx = await this.createPriorityFeeInstructions(message);\n return this.getV0Message(account, [...instructions, ...priorityFeeIx]);\n }\n\n async estimateFee(account: string, balance: bigint): Promise<bigint> {\n if (balance === 0n) {\n return 0n;\n }\n\n const { instructions } = this.config;\n const message = await this.getV0Message(account, instructions);\n const budget = await this.determineComputeBudget(message);\n return BigInt(budget);\n }\n\n private async getV0Message(\n account: string,\n instructions: TransactionInstruction[]\n ): Promise<MessageV0> {\n const payerKey = new PublicKey(account);\n const { blockhash } = await this.connection.getLatestBlockhash('finalized');\n return new TransactionMessage({\n payerKey: payerKey,\n recentBlockhash: blockhash,\n instructions: instructions,\n }).compileToV0Message();\n }\n\n private async createPriorityFeeInstructions(\n message: MessageV0,\n feePercentile: number = DEFAULT_PRIORITY_FEE_PERCENTILE,\n multiple: number = DEFAULT_PERCENTILE_MULTIPLE,\n minPriorityFee: number = DEFAULT_MIN_PRIORITY_FEE,\n maxPriorityFee: number = DEFAULT_MAX_PRIORITY_FEE\n ): Promise<TransactionInstruction[]> {\n const [computeBudget, priorityFee] = await Promise.all([\n this.determineComputeBudget(message),\n this.determinePriorityFee(\n message,\n feePercentile,\n multiple,\n minPriorityFee,\n maxPriorityFee\n ),\n ]);\n\n return [\n ComputeBudgetProgram.setComputeUnitLimit({\n units: computeBudget,\n }),\n ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: priorityFee,\n }),\n ];\n }\n\n async simulateTransaction(\n account: string,\n message: MessageV0\n ): Promise<SimulatedTransactionResponse> {\n const transaction = new VersionedTransaction(message);\n const simulateResponse = await this.connection.simulateTransaction(\n transaction,\n {\n accounts: {\n encoding: 'base64',\n addresses: [account],\n },\n }\n );\n return simulateResponse.value;\n }\n\n /**\n * Determine compute budget from simulated transaction\n *\n * @param transaction - versioned transaction\n * @returns Compute budget to 120% of the units used in the\n * simulated transaction or default\n */\n async determineComputeBudget(message: MessageV0): Promise<number> {\n const transaction = new VersionedTransaction(message);\n const simulateResponse =\n await this.connection.simulateTransaction(transaction);\n\n const { err, unitsConsumed } = simulateResponse.value;\n if (unitsConsumed && !err) {\n return Math.round(unitsConsumed * 1.2);\n }\n\n return DEFAULT_COMPUTE_BUDGET;\n }\n\n /**\n * Determine the priority fee to use for a transaction\n *\n * @param transaction - the transaction to determine the priority fee for\n * @param percentile - the percentile of recent fees to use\n * @param multiple - the multiple to apply to the percentile fee\n * @param minPriorityFee - the minimum priority fee to use\n * @param maxPriorityFee - the maximum priority fee to use\n * @returns the priority fee to use according to the recent transactions and the given parameters\n */\n async determinePriorityFee(\n message: MessageV0,\n percentile: number = DEFAULT_PRIORITY_FEE_PERCENTILE,\n multiple: number = DEFAULT_PERCENTILE_MULTIPLE,\n minPriorityFee: number = DEFAULT_MIN_PRIORITY_FEE,\n maxPriorityFee: number = DEFAULT_MAX_PRIORITY_FEE\n ): Promise<number> {\n // Start with min fee\n let fee = minPriorityFee;\n\n // Figure out tx accounts that needs write lock\n const lockedWritableAccounts = await this.getTxAccounts(message);\n const recentFeesResponse =\n await this.connection.getRecentPrioritizationFees({\n lockedWritableAccounts,\n });\n\n if (recentFeesResponse) {\n // Sort fees to find the percentile\n const recentFees = recentFeesResponse\n .map((dp) => dp.prioritizationFee)\n .filter((f) => f > 0)\n .sort((a, b) => a - b);\n\n // Find the element in the distribution that matches the percentile\n const idx = Math.ceil(recentFees.length * percentile);\n\n if (recentFees.length > idx) {\n const percentileFee = recentFees[idx];\n const percentileFeeJuiced = percentileFee * multiple;\n fee = Math.max(fee, percentileFeeJuiced);\n }\n }\n\n return Math.min(Math.max(fee, minPriorityFee), maxPriorityFee);\n }\n\n private async getTxAccounts(message: MessageV0): Promise<PublicKey[]> {\n const luts = (\n await Promise.all(\n message.addressTableLookups.map((acc) =>\n this.connection.getAddressLookupTable(acc.accountKey)\n )\n )\n )\n .map((lut) => lut.value)\n .filter((val) => val !== null) as AddressLookupTableAccount[];\n\n const keys = message.getAccountKeys({\n addressLookupTableAccounts: luts ?? undefined,\n });\n\n return message.compiledInstructions\n .flatMap((ix) => ix.accountKeyIndexes)\n .map((k) => (message.isAccountWritable(k) ? keys.get(k) : null))\n .filter((k) => k !== null) as PublicKey[];\n }\n}\n", "import { ProgramConfig } from '@galacticcouncil/xc-core';\n\nimport { Connection } from '@solana/web3.js';\n\nimport { SolanaTransfer } from './SolanaTransfer';\n\nexport class SolanaTransferFactory {\n static get(connection: Connection, config: ProgramConfig): SolanaTransfer {\n return new SolanaTransfer(connection, config);\n }\n}\n", "import { MessageV0, TransactionInstruction } from '@solana/web3.js';\n\nimport { HumanizedIx } from './types';\n\nexport function ixToHuman(\n instructions: TransactionInstruction[]\n): HumanizedIx[] {\n return instructions.map((ix) => {\n return {\n program: ix.programId.toBase58(),\n data: ix.data.toString('hex'),\n keys: ix.keys.map((k) => k.pubkey.toBase58()),\n };\n });\n}\n\nexport function chunk<T>(items: T[], size: number): T[][] {\n const out: T[][] = [];\n for (let i = 0; i < items.length; i += size) {\n out.push(items.slice(i, i + size));\n }\n return out;\n}\n\nexport function serializeV0(mssgV0: MessageV0): string {\n const mssgArray = mssgV0.serialize();\n return Buffer.from(mssgArray).toString('hex');\n}\n\nexport function deserializeV0(mssgV0: string): MessageV0 {\n const mssgBuffer = Buffer.from(mssgV0, 'hex');\n const mssgArray = Uint8Array.from(mssgBuffer);\n return MessageV0.deserialize(mssgArray);\n}\n", "import {\n CallType,\n SolanaChain,\n Wormhole as Wh,\n} from '@galacticcouncil/xc-core';\n\nimport {\n Connection,\n Keypair,\n MessageV0,\n PublicKey,\n PublicKeyInitData,\n SystemProgram,\n TransactionInstruction,\n TransactionMessage,\n} from '@solana/web3.js';\n\nimport {\n ACCOUNT_SIZE,\n NATIVE_MINT,\n TOKEN_PROGRAM_ID,\n createAssociatedTokenAccountIdempotentInstruction,\n createCloseAccountInstruction,\n createInitializeAccountInstruction,\n createTransferInstruction,\n getAssociatedTokenAddressSync,\n getMinimumBalanceForRentExemptAccount,\n getMint,\n} from '@solana/spl-token';\n\nimport { utils as tutils } from '@wormhole-foundation/sdk-solana';\nimport { utils as cutils } from '@wormhole-foundation/sdk-solana-core';\n\nimport { encoding } from '@wormhole-foundation/sdk-base';\nimport { deserialize, VAA } from '@wormhole-foundation/sdk-definitions';\n\nimport {\n createCompleteTransferNativeInstruction,\n createCompleteTransferWrappedInstruction,\n} from '@wormhole-foundation/sdk-solana-tokenbridge';\n\nimport { SolanaCall } from './types';\nimport { chunk, ixToHuman, serializeV0 } from './utils';\n\nimport { SolanaLilJit } from './SolanaLilJit';\n\nexport class SolanaClaim {\n readonly #chain: SolanaChain;\n readonly #connection: Connection;\n readonly #lilJit: SolanaLilJit;\n\n constructor(chain: SolanaChain) {\n this.#chain = chain;\n this.#connection = chain.connection;\n this.#lilJit = new SolanaLilJit(chain);\n }\n\n async redeem(\n from: string,\n vaaRaw: string,\n recipient?: string\n ): Promise<SolanaCall[]> {\n const ctx = Wh.fromChain(this.#chain);\n\n const vaaBytes = encoding.b64.decode(vaaRaw);\n // We don't check for TokenBridge:TransferWithPayload because claim (complete_wrapped_with_payload)\n // must be called via CPI from the redeemer program only if using TokenRelayer\n const vaa = deserialize('TokenBridge:Transfer', vaaBytes);\n const vaaU8a = deserialize('Uint8Array', vaaBytes);\n const postedVaaAddress = this.derivePostedVaaKey(\n ctx.getCoreBridge(),\n Buffer.from(vaa.hash)\n );\n\n const payer = new PublicKey(from);\n const payee = recipient ? new PublicKey(recipient) : payer;\n const isSelfRedeem = payer.equals(payee);\n\n const calls: SolanaCall[] = [];\n\n const posted = await this.#connection.getAccountInfo(postedVaaAddress);\n if (!posted) {\n const signatureSet = Keypair.generate();\n const verifyIxs = await cutils.createVerifySignaturesInstructions(\n this.#chain.connection,\n ctx.getCoreBridge(),\n payer,\n vaaU8a,\n signatureSet.publicKey\n );\n\n // Each secp256k1 + verify_signatures pair goes in its own transaction.\n // Batching multiple pairs overruns Solana's max transaction size.\n const chunks = chunk(verifyIxs, 2);\n for (let i = 0; i < chunks.length; i++) {\n const sigIx = chunks[i];\n const sigV0 = await this.getV0Message(payer, sigIx);\n const sigTx = serializeV0(sigV0);\n calls.push({\n from: from,\n data: sigTx,\n ix: ixToHuman(sigIx),\n signers: [signatureSet],\n type: CallType.Solana,\n } as SolanaCall);\n }\n\n const postVaaIx = cutils.createPostVaaInstruction(\n this.#connection,\n ctx.getCoreBridge(),\n payer,\n vaaU8a,\n signatureSet.publicKey\n );\n const postVaaV0 = await this.getV0Message(payer, [postVaaIx]);\n const postVaaTx = serializeV0(postVaaV0);\n calls.push({\n from: from,\n data: postVaaTx,\n ix: ixToHuman([postVaaIx]),\n type: CallType.Solana,\n } as SolanaCall);\n }\n\n const isNative = vaa.payload.token.chain === 'Solana';\n const mint = new PublicKey(vaa.payload.token.address.toUint8Array());\n const isNativeSol = isNative && mint.equals(NATIVE_MINT);\n\n const tipAccounts = await this.#lilJit.getTipAccount();\n const tipIx = SystemProgram.transfer({\n fromPubkey: payer,\n toPubkey: new PublicKey(tipAccounts[0]),\n lamports: 1000,\n });\n\n if (isNativeSol && isSelfRedeem) {\n const completeCall = await this.redeemAndUnwrap(ctx, payer, vaa, tipIx);\n calls.push(completeCall);\n } else {\n const completeCall = await this.redeemToken(\n ctx,\n payer,\n payee,\n mint,\n isNative,\n vaa,\n tipIx\n );\n calls.push(completeCall);\n }\n\n return calls;\n }\n\n private async redeemToken(\n ctx: Wh,\n payer: PublicKey,\n payee: PublicKey,\n mint: PublicKey,\n isNative: boolean,\n vaa: VAA<'TokenBridge:Transfer'>,\n tipIx: TransactionInstruction\n ): Promise<SolanaCall> {\n const createCompleteTransferInstruction = isNative\n ? createCompleteTransferNativeInstruction\n : createCompleteTransferWrappedInstruction;\n const completeIx = createCompleteTransferInstruction(\n this.#connection,\n ctx.getTokenBridge(),\n ctx.getCoreBridge(),\n payer,\n vaa\n );\n\n const ata = getAssociatedTokenAddressSync(mint, payee);\n const createAtaIx = createAssociatedTokenAccountIdempotentInstruction(\n payer,\n ata,\n payee,\n mint\n );\n\n const completeV0 = await this.getV0Message(payer, [\n createAtaIx,\n completeIx,\n tipIx,\n ]);\n const completeTx = serializeV0(completeV0);\n return {\n from: payer.toBase58(),\n data: completeTx,\n ix: ixToHuman([createAtaIx, completeIx]),\n type: CallType.Solana,\n } as SolanaCall;\n }\n\n private async redeemAndUnwrap(\n ctx: Wh,\n payer: PublicKey,\n vaa: VAA<'TokenBridge:Transfer'>,\n tipIx: TransactionInstruction\n ): Promise<SolanaCall> {\n const ata = new PublicKey(vaa.payload.to.address.toUint8Array());\n const mintInfo = await getMint(this.#connection, NATIVE_MINT);\n const targetAmount =\n vaa.payload.token.amount * BigInt(Math.pow(10, mintInfo.decimals - 8));\n const rentBalance = await getMinimumBalanceForRentExemptAccount(\n this.#connection\n );\n\n const ancillaryKeypair = Keypair.generate();\n\n const createAtaIx = createAssociatedTokenAccountIdempotentInstruction(\n payer,\n ata,\n payer,\n NATIVE_MINT\n );\n\n const completeIx = createCompleteTransferNativeInstruction(\n this.#connection,\n ctx.getTokenBridge(),\n ctx.getCoreBridge(),\n payer,\n vaa\n );\n\n const createAncillaryIx = SystemProgram.createAccount({\n fromPubkey: payer,\n newAccountPubkey: ancillaryKeypair.publicKey,\n lamports: rentBalance,\n space: ACCOUNT_SIZE,\n programId: TOKEN_PROGRAM_ID,\n });\n\n const initAncillaryIx = createInitializeAccountInstruction(\n ancillaryKeypair.publicKey,\n NATIVE_MINT,\n payer\n );\n\n const transferIx = createTransferInstruction(\n ata,\n ancillaryKeypair.publicKey,\n payer,\n targetAmount\n );\n\n const closeIx = createCloseAccountInstruction(\n ancillaryKeypair.publicKey,\n payer,\n payer\n );\n\n const ixs = [\n createAtaIx,\n completeIx,\n createAncillaryIx,\n initAncillaryIx,\n transferIx,\n closeIx,\n tipIx,\n ];\n\n const completeV0 = await this.getV0Message(payer, ixs);\n const completeTx = serializeV0(completeV0);\n return {\n from: payer.toBase58(),\n data: completeTx,\n ix: ixToHuman(ixs),\n signers: [ancillaryKeypair],\n type: CallType.Solana,\n } as SolanaCall;\n }\n\n private derivePostedVaaKey(\n wormholeProgramId: PublicKeyInitData,\n hash: Buffer\n ): PublicKey {\n return tutils.deriveAddress(\n [Buffer.from('PostedVAA'), hash],\n wormholeProgramId\n );\n }\n\n private async getV0Message(\n payer: PublicKey,\n ixs: TransactionInstruction[]\n ): Promise<MessageV0> {\n const { blockhash } =\n await this.#connection.getLatestBlockhash('finalized');\n return new TransactionMessage({\n payerKey: payer,\n recentBlockhash: blockhash,\n instructions: ixs,\n }).compileToV0Message();\n }\n}\n", "import { SolanaChain } from '@galacticcouncil/xc-core';\n\nimport { Connection } from '@solana/web3.js';\n\ntype JitoBundleSimulationResponse = {\n context: {\n apiVersion: string;\n slot: number;\n };\n value: {\n summary:\n | 'succeeded'\n | {\n failed: {\n error: {\n TransactionFailure: [number[], string];\n };\n tx_signature: string;\n };\n };\n transactionResults: Array<{\n err: null | unknown;\n logs: string[];\n postExecutionAccounts: null | unknown;\n preExecutionAccounts: null | unknown;\n returnData: null | unknown;\n unitsConsumed: number;\n }>;\n };\n};\n\ntype JitoBundleStatus = {\n context: {\n apiVersion: string;\n slot: number;\n };\n value: Array<{\n bundle_id: string;\n landed_slot: number;\n status: string;\n }>;\n};\n\nexport class SolanaLilJit {\n readonly #connection: Connection;\n\n constructor(chain: SolanaChain) {\n this.#connection = chain.connection;\n }\n\n /**\n * Returns bundle id\n *\n * @see https://explorer.jito.wtf/bundle/${bundle_id}\n *\n * @param encoded base 64 encoded tx\n * @returns bundle id\n */\n async sendBundle(encoded: string[]): Promise<string> {\n const { result } = await (this.#connection as any)._rpcRequest(\n 'sendBundle',\n [encoded]\n );\n return result;\n }\n\n async simulateBundle(\n encoded: string[]\n ): Promise<JitoBundleSimulationResponse> {\n const res = await (this.#connection as any)._rpcRequest('simulateBundle', [\n [encoded],\n ]);\n return res.result;\n }\n\n async getInflightBundleStatuses(\n bundleIds: string[]\n ): Promise<JitoBundleStatus> {\n const { result } = await (this.#connection as any)._rpcRequest(\n 'getInflightBundleStatuses',\n [bundleIds]\n );\n return result;\n }\n\n async getRegion(): Promise<string[]> {\n const { result } = await (this.#connection as any)._rpcRequest(\n 'getRegions',\n []\n );\n return result;\n }\n\n async getTipAccount(): Promise<string[]> {\n const { result } = await (this.#connection as any)._rpcRequest(\n 'getTipAccounts',\n []\n );\n return result;\n }\n}\n", "import { SolanaChain } from '@galacticcouncil/xc-core';\n\nimport { Keypair, MessageV0, VersionedTransaction } from '@solana/web3.js';\n\nimport { Buffer } from 'buffer';\n\nimport { SolanaLilJit } from './SolanaLilJit';\nimport { SolanaCall, SolanaWallet, SolanaTxObserver } from './types';\n\nimport { Call } from '../types';\n\nexport class SolanaSigner {\n readonly #chain: SolanaChain;\n readonly #wallet: SolanaWallet | Keypair;\n readonly #lilJit: SolanaLilJit;\n\n constructor(chain: SolanaChain, wallet: SolanaWallet | Keypair) {\n this.#chain = chain;\n this.#wallet = wallet;\n this.#lilJit = new SolanaLilJit(chain);\n }\n\n async signAndSend(call: Call, observer: SolanaTxObserver) {\n const { data, signers } = call as SolanaCall;\n const versioned = this.toVersioned(data, signers);\n\n try {\n if (this.#wallet instanceof Keypair) {\n versioned.sign([this.#wallet]);\n const signature =\n await this.#chain.connection.sendTransaction(versioned);\n observer.onTransactionSend(signature);\n const status =\n await this.#chain.connection.getSignatureStatus(signature);\n observer.onStatus?.(status);\n return;\n }\n\n const wallet = this.#wallet;\n await wallet.connect();\n if (signers) {\n versioned.sign(signers);\n }\n const { signature } = await wallet.signAndSendTransaction(versioned);\n observer.onTransactionSend(signature);\n const status = await this.#chain.connection.getSignatureStatus(signature);\n observer.onStatus?.(status);\n } catch (err) {\n observer.onError(err);\n }\n }\n\n async signAndSendAll(calls: Call[], observer: SolanaTxObserver) {\n const versioned = calls.map((c) => {\n const { data, signers } = c as SolanaCall;\n return this.toVersioned(data, signers);\n });\n\n try {\n let encoded: string[];\n\n if (this.#wallet instanceof Keypair) {\n versioned.forEach((tx) => tx.sign([this.#wallet as Keypair]));\n encoded = versioned.map((tx) =>\n Buffer.from(tx.serialize()).toString('base64')\n );\n } else {\n const wallet = this.#wallet;\n await wallet.connect();\n const signed = await wallet.signAllTransactions(versioned);\n encoded = signed.map((s) =>\n Buffer.from(s.serialize()).toString('base64')\n );\n }\n\n const simulation = await this.#lilJit.simulateBundle(encoded);\n if (simulation.value.summary !== 'succeeded') {\n throw new Error(\n 'Bundle simulation failed! ' + JSON.stringify(simulation, null, 2)\n );\n }\n\n const bundleId = await this.#lilJit.sendBundle(encoded);\n observer.onTransactionSend(bundleId);\n\n const status = await this.#lilJit.getInflightBundleStatuses([bundleId]);\n observer.onBundleStatus?.(status.value);\n } catch (err) {\n observer.onError(err);\n }\n }\n\n private toVersioned(data: string, signers?: Keypair[]): VersionedTransaction {\n const mssgBuffer = Buffer.from(data, 'hex');\n const mssgArray = Uint8Array.from(mssgBuffer);\n const mssgV0 = MessageV0.deserialize(mssgArray);\n const versioned = new VersionedTransaction(mssgV0);\n if (signers) {\n versioned.sign(signers);\n }\n return versioned;\n }\n}\n", "import {\n Abi,\n CallType,\n EvmParachain,\n Precompile,\n Wormhole as Wh,\n} from '@galacticcouncil/xc-core';\n\nimport { encoding } from '@wormhole-foundation/sdk-base';\n\nimport { encodeFunctionData } from 'viem';\n\nimport { Binary } from 'polkadot-api';\n\nimport { SubstrateCall } from './types';\nimport { EvmCall } from '../evm';\n\nexport class SubstrateClaim {\n readonly #chain: EvmParachain;\n\n constructor(chain: EvmParachain) {\n this.#chain = chain;\n Wh.fromChain(this.#chain);\n }\n\n redeemMrl(from: string, vaaBytes: string): EvmCall {\n const vaaArray = encoding.b64.decode(vaaBytes);\n const vaaHex = encoding.hex.encode(vaaArray);\n\n const abi = Abi.Gmp;\n const data = encodeFunctionData({\n abi: abi,\n functionName: 'wormholeTransferERC20',\n args: ['0x' + vaaHex],\n });\n return {\n abi: JSON.stringify(abi),\n data: data,\n from: from,\n to: Precompile.Bridge,\n } as EvmCall;\n }\n\n async redeemMrlViaXcm(\n from: string,\n vaaBytes: string\n ): Promise<SubstrateCall> {\n const client = this.#chain.client;\n const api = client.getUnsafeApi();\n const claim = this.redeemMrl(from, vaaBytes);\n const tx = (api.tx as any).EthereumXcm.transact({\n xcm_transaction: {\n type: 'V2',\n value: {\n gas_limit: [5_000_000n, 0n, 0n, 0n],\n action: {\n type: 'Call',\n value: claim.to,\n },\n value: [0n, 0n, 0n, 0n],\n input: Binary.fromHex(claim.data),\n access_list: undefined,\n },\n },\n });\n\n const encoded = await tx.getEncodedData();\n return {\n data: Binary.toHex(encoded),\n from: from,\n type: CallType.Substrate,\n dryRun: async () => undefined,\n txOptions: undefined,\n } as SubstrateCall;\n }\n}\n", "import { Asset, AssetAmount, CallType } from '@galacticcouncil/xc-core';\n\nimport { Binary } from 'polkadot-api';\n\nimport { SubstrateService } from './SubstrateService';\n\nimport { SubstrateCall, SubstrateDryRunResult } from './types';\nimport { buildXcmDest, buildXcmMessage, getErrorFromDryRun } from './utils';\n\nimport { Call } from '../types';\n\nexport class SubstrateExec {\n readonly #src: SubstrateService;\n readonly #dst: SubstrateService;\n\n constructor(src: SubstrateService, dst: SubstrateService) {\n this.#src = src;\n this.#dst = dst;\n }\n\n async remoteExec(\n srcAccount: string,\n dstAccount: string,\n dstCall: SubstrateCall,\n transfer: (fees: AssetAmount) => Promise<Call>,\n opts: {\n srcFeeAsset?: Asset;\n } = {}\n ): Promise<SubstrateCall> {\n const srcApi = this.#src.api;\n const srcAsset = await this.#src.getAsset();\n\n const dstApi = this.#dst.api;\n const dstChain = this.#dst.chain;\n\n const dstCuurrency = await dstChain.getCurrency();\n const dstAsset = dstCuurrency.asset;\n const dstDecimals = dstCuurrency.decimals;\n\n const dstFeeLocation = dstChain.getAssetXcmLocation(dstAsset);\n const dstCallBinary = Binary.fromHex(dstCall.data);\n\n const dstExtrinsic = await dstApi.txFromCallData(dstCallBinary);\n const dstPaymentInfo = await dstExtrinsic.getPaymentInfo(dstAccount);\n\n const dstFeeAmount = (BigInt(dstPaymentInfo.partial_fee) * 120n) / 100n;\n\n const dstFee = AssetAmount.fromAsset(dstAsset, {\n amount: dstFeeAmount,\n decimals: dstDecimals,\n });\n\n const dstRefTime = dstPaymentInfo.weight.ref_time;\n const dstProofSize = dstPaymentInfo.weight.proof_size;\n\n const transactXcmDest = buildXcmDest(dstChain);\n const transactXcmMessage = buildXcmMessage(\n dstAccount,\n dstFeeLocation,\n dstFee,\n dstRefTime,\n dstProofSize,\n dstCallBinary\n );\n\n const transactTx = srcApi.tx.PolkadotXcm.send({\n dest: transactXcmDest,\n message: transactXcmMessage,\n });\n\n const calls: any[] = [];\n\n try {\n const swapTxHash = await this.#src.chain.dex.getCalldata(\n srcAccount,\n opts.srcFeeAsset || srcAsset,\n dstAsset,\n dstFee,\n 10 // swap slippage\n );\n const swapBinary = Binary.fromHex(swapTxHash);\n const swapTx = await srcApi.txFromCallData(swapBinary);\n calls.push(swapTx);\n } catch {}\n\n const transferCall = await transfer(dstFee);\n const transferBinary = Binary.fromHex(transferCall.data);\n const transferTx = await srcApi.txFromCallData(transferBinary);\n\n calls.push(transferTx);\n calls.push(transactTx);\n\n const decoded = calls.map((c) => c.decodedCall);\n\n const batchTx = srcApi.tx.Utility.batch_all({ calls: decoded });\n const batchTxEncoded = await batchTx.getEncodedData();\n\n return {\n from: srcAccount,\n data: Binary.toHex(batchTxEncoded),\n type: CallType.Substrate,\n dryRun: this.#src.isDryRunSupported()\n ? async () => {\n try {\n const dryRunResult = await this.#src.dryRun(srcAccount, batchTx);\n\n const error =\n dryRunResult.execution_result &&\n dryRunResult.execution_result.success\n ? undefined\n : getErrorFromDryRun(dryRunResult.execution_result);\n\n return {\n call: 'polkadotXcm.send',\n error: error,\n events: dryRunResult.emitted_events || [],\n xcm: dryRunResult.forwarded_xcms || [],\n } as SubstrateDryRunResult;\n } catch (e) {\n return {\n call: 'polkadotXcm.send',\n error: e instanceof Error ? e.message : 'unknown',\n } as SubstrateDryRunResult;\n }\n }\n : () => {},\n } as SubstrateCall;\n }\n}\n", "import { Asset, AssetAmountParams } from '@galacticcouncil/xc-core';\nimport { big } from '@galacticcouncil/common';\n\nimport { SubstrateService } from '../SubstrateService';\n\n/**\n * Normalize asset amount if chain uses solely chain decimals\n * for balance representation of assets.\n *\n * @param amount - original chain amount\n * @param asset - asset\n * @param substrate - source chain substrate service\n * @returns normalized asset amount if chain decimals used, otherwise default\n */\nexport async function normalizeAssetAmount(\n amount: bigint,\n asset: Asset,\n substrate: SubstrateService\n): Promise<AssetAmountParams> {\n const chainDecimals = await substrate.getDecimals();\n const assetDecimals =\n substrate.chain.getAssetDecimals(asset) ?? chainDecimals;\n const normDecimals = substrate.chain.usesChainDecimals\n ? chainDecimals\n : assetDecimals;\n const normBalance = big.convertDecimals(amount, normDecimals, assetDecimals);\n return {\n amount: normBalance,\n decimals: assetDecimals,\n };\n}\n", "import { enums } from '@galacticcouncil/common';\n\nexport const getDeliveryFeeFromDryRun = (events: any[]): bigint => {\n const deliveryFees: bigint[] = [];\n\n for (const e of events) {\n const isXcmEvent =\n ['PolkadotXcm'].includes(e.type) && e.value.type === 'FeesPaid';\n\n if (isXcmEvent) {\n const fees = e.value.value.fees;\n for (const fee of fees) {\n if (fee.fun.type === 'Fungible') {\n const plancks = BigInt(fee.fun.value);\n deliveryFees.push(plancks);\n }\n }\n }\n }\n return deliveryFees.reduce((acc, df) => acc + df, 0n);\n};\n\nexport const getErrorFromDryRun = (\n executionResult: any\n): string | undefined => {\n const error = executionResult.value.error;\n\n if (error.type === 'Module') {\n return enums.enumPath(error.value);\n }\n return JSON.stringify(error.value);\n};\n", "import { AnyParachain, AssetAmount } from '@galacticcouncil/xc-core';\nimport { xcm } from '@galacticcouncil/common';\n\nexport function buildBeneficiary(dstAccount: string) {\n const acc = dstAccount.startsWith('0x')\n ? xcm.toAccountKey20(dstAccount)\n : xcm.toAccountId32(dstAccount);\n\n return {\n parents: 0,\n interior: {\n type: 'X1',\n value: acc,\n },\n };\n}\n\nexport function buildXcmDest(dstChain: AnyParachain) {\n return {\n type: 'V4',\n value: {\n parents: 1,\n interior: {\n type: 'X1',\n value: {\n type: 'Parachain',\n value: dstChain.parachainId,\n },\n },\n },\n };\n}\n\nconst toAsset = (assetLocation: object, amount: any) => {\n return {\n id: xcm.transform(assetLocation),\n fun: {\n type: 'Fungible',\n value: amount,\n },\n };\n};\n\nexport const buildXcmMessage = (\n dstAccount: string,\n dstFeeLocation: any,\n dstFee: AssetAmount,\n dstRefTime: bigint,\n dstProofSize: bigint,\n dstCallEncoded: Uint8Array\n) => {\n console.log(dstCallEncoded);\n const beneficiary = buildBeneficiary(dstAccount);\n const feeAsset = toAsset(dstFeeLocation, dstFee.amount);\n\n return {\n type: 'V4',\n value: [\n {\n type: 'WithdrawAsset',\n value: [feeAsset],\n },\n {\n type: 'BuyExecution',\n value: {\n fees: feeAsset,\n weight_limit: {\n type: 'Unlimited',\n },\n },\n },\n {\n type: 'Transact',\n value: {\n origin_kind: {\n type: 'SovereignAccount',\n },\n require_weight_at_most: {\n ref_time: dstRefTime,\n proof_size: dstProofSize,\n },\n call: dstCallEncoded,\n },\n },\n {\n type: 'RefundSurplus',\n value: undefined,\n },\n {\n type: 'DepositAsset',\n value: {\n assets: {\n type: 'Wild',\n value: {\n type: 'AllCounted',\n value: 1,\n },\n },\n beneficiary: beneficiary,\n },\n },\n ],\n };\n};\n", "import {\n AnyParachain,\n Asset,\n AssetAmount,\n CallType,\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@galacticcouncil/xc-core';\n\nimport { Binary } from 'polkadot-api';\n\nimport {\n concatMap,\n catchError,\n distinctUntilChanged,\n firstValueFrom,\n map,\n throwError,\n Observable,\n} from 'rxjs';\n\nimport { SubstrateService } from './SubstrateService';\nimport { getErrorFromDryRun, normalizeAssetAmount } from './utils';\nimport { SubstrateCall, SubstrateDryRunResult } from './types';\n\nimport { Platform } from '../types';\n\ntype WatchValueEmission<T = any> = { value: T };\n\nexport class SubstratePlatform implements Platform<\n ExtrinsicConfig,\n SubstrateQueryConfig\n> {\n readonly #substrate: Promise<SubstrateService>;\n\n constructor(chain: AnyParachain) {\n this.#substrate = SubstrateService.create(chain);\n }\n\n private async useSignerFee(fee: Asset) {\n const substrate = await this.#substrate;\n const asset = await substrate.getAsset();\n return substrate.chain.usesSignerFee && !asset.isEqual(fee);\n }\n\n async buildCall(\n account: string,\n _amount: bigint,\n feeBalance: AssetAmount,\n config: ExtrinsicConfig\n ): Promise<SubstrateCall> {\n const substrate = await this.#substrate;\n const useSignerFee = await this.useSignerFee(feeBalance);\n\n const txOptions = useSignerFee\n ? {\n asset: new Asset(feeBalance),\n }\n : undefined;\n\n const extrinsic = config.getTx(substrate.client);\n const extrinsicCall = config.module + '.' + config.func;\n\n const callData = await extrinsic.getEncodedData();\n\n return {\n from: account,\n data: Binary.toHex(callData),\n type: CallType.Substrate,\n txOptions: txOptions,\n dryRun: substrate.isDryRunSupported()\n ? async () => {\n try {\n const extrinsic = config.getTx(substrate.client);\n const dryRunResult = await substrate.dryRun(account, extrinsic);\n\n const error =\n dryRunResult.execution_result &&\n dryRunResult.execution_result.success\n ? undefined\n : getErrorFromDryRun(dryRunResult.execution_result);\n\n return {\n call: extrinsicCall,\n error: error,\n events: dryRunResult.emitted_events || [],\n xcm: dryRunResult.forwarded_xcms || [],\n } as SubstrateDryRunResult;\n } catch (e) {\n return {\n call: extrinsicCall,\n error: e instanceof Error ? e.message : 'unknown',\n } as SubstrateDryRunResult;\n }\n }\n : () => {},\n } as SubstrateCall;\n }\n\n async estimateFee(\n account: string,\n _amount: bigint,\n feeBalance: AssetAmount,\n config: ExtrinsicConfig\n ): Promise<AssetAmount> {\n const substrate = await this.#substrate;\n const networkFee = await substrate.estimateNetworkFee(account, config);\n const deliveryFee = await substrate.estimateDeliveryFee(account, config);\n const fee = await this.exchangeFee(networkFee + deliveryFee, feeBalance);\n const params = await normalizeAssetAmount(fee, feeBalance, substrate);\n return feeBalance.copyWith(params);\n }\n\n async getBalance(\n asset: Asset,\n config: SubstrateQueryConfig\n ): Promise<AssetAmount> {\n const ob = await this.subscribeBalance(asset, config);\n return firstValueFrom(ob);\n }\n\n async subscribeBalance(\n asset: Asset,\n config: SubstrateQueryConfig\n ): Promise<Observable<AssetAmount>> {\n const substrate = await this.#substrate;\n const { module, func, args, transform } = config;\n\n const fn = substrate.client.getUnsafeApi().query[module][func];\n const observable$ = fn\n .watchValue(...args, { at: 'best' })\n .pipe(map(({ value }: WatchValueEmission) => value));\n\n return observable$.pipe(\n concatMap((b: any) => transform(b)),\n distinctUntilChanged((prev, curr) => prev === curr),\n concatMap(async (balance) => {\n const params = await normalizeAssetAmount(\n balance as bigint,\n asset,\n substrate\n );\n return AssetAmount.fromAsset(asset, params);\n }),\n catchError((err) => {\n console.error('subscribe fails for:', asset);\n return throwError(() => err);\n })\n );\n }\n\n /**\n * Display native fee in user preferred fee payment asset\n *\n * Supported only if on-chain swap enabled (dex support)\n *\n * @param fee - native fee\n * @param feeBalance - user preferred payment asset balance\n * @returns - fee in user preferred payment asset\n */\n private async exchangeFee(\n fee: bigint,\n feeBalance: AssetAmount\n ): Promise<bigint> {\n const substrate = await this.#substrate;\n const asset = await substrate.getAsset();\n const decimals = await substrate.getDecimals();\n\n if (asset.isEqual(feeBalance)) {\n return fee;\n }\n\n try {\n const dex = substrate.chain.dex;\n const amount = AssetAmount.fromAsset(asset, { amount: fee, decimals });\n const quote = await dex.getQuote(feeBalance, asset, amount, true);\n return quote.amount;\n } catch {}\n return fee;\n }\n}\n", "import {\n addr,\n multiloc,\n AnyParachain,\n Asset,\n AssetAmount,\n ChainCurrency,\n Extrinsic,\n ExtrinsicConfig,\n} from '@galacticcouncil/xc-core';\n\nimport { acc, enums } from '@galacticcouncil/common';\nimport { HubApis } from '@galacticcouncil/descriptors';\n\nimport { Blake2256, u32 } from '@polkadot-api/substrate-bindings';\nimport { toHex, fromHex } from '@polkadot-api/utils';\n\nimport { Enum, ResultPayload } from 'polkadot-api';\n\nimport { getDeliveryFeeFromDryRun, getErrorFromDryRun } from './utils';\n\ntype TRawDryRun = HubApis['DryRunApi']['dry_run_call']['Value']['value'];\ntype TDryRun = Extract<TRawDryRun, { execution_result: any }>;\n\nconst { Ss58Addr } = addr;\n\nexport class SubstrateService {\n readonly chain: AnyParachain;\n\n private _currency?: Promise<ChainCurrency>;\n\n constructor(chain: AnyParachain) {\n this.chain = chain;\n }\n\n static async create(chain: AnyParachain): Promise<SubstrateService> {\n return new SubstrateService(chain);\n }\n\n get client() {\n return this.chain.client;\n }\n\n get api() {\n return this.client.getUnsafeApi();\n }\n\n async getCurrency(): Promise<ChainCurrency> {\n if (!this._currency) {\n this._currency = this.chain.getCurrency();\n }\n return this._currency;\n }\n\n async getAsset(): Promise<Asset> {\n const currency = await this.getCurrency();\n return currency.asset;\n }\n\n async getDecimals(): Promise<number> {\n const currency = await this.getCurrency();\n return currency.decimals;\n }\n\n async getExistentialDeposit(): Promise<AssetAmount> {\n let ed: bigint;\n try {\n const result = await this.api.constants.Balances.ExistentialDeposit();\n ed = typeof result === 'bigint' ? result : BigInt(String(result));\n } catch {\n ed = 0n;\n }\n const { asset, decimals } = await this.getCurrency();\n return AssetAmount.fromAsset(asset, {\n amount: ed,\n decimals,\n });\n }\n\n isDryRunSupported(): boolean {\n return this.api.apis?.DryRunApi !== undefined;\n }\n\n async buildMessageId(\n account: string,\n amount: bigint,\n asset: string,\n beneficiary: string\n ): Promise<string> {\n const accountNextId = await this.client._request<number>(\n 'system_accountNextIndex',\n [account]\n );\n const accountNextIdBytes = u32.enc(accountNextId);\n\n const stringToU8a = (str: string) => new TextEncoder().encode(str);\n\n const entropy = new Uint8Array([\n ...stringToU8a(this.chain.parachainId.toString()),\n ...fromHex(account.startsWith('0x') ? account.slice(2) : account),\n ...accountNextIdBytes,\n ...fromHex(asset.startsWith('0x') ? asset.slice(2) : asset),\n ...stringToU8a(beneficiary),\n ...stringToU8a(amount.toString()),\n ]);\n\n const hash = Blake2256(entropy);\n return toHex(hash);\n }\n\n async dryRun(account: string, tx: Extrinsic): Promise<TDryRun> {\n const rawOrigin = Enum('Signed', account);\n const origin = Enum('system', rawOrigin);\n\n const raw = (await this.api.apis.DryRunApi.dry_run_call(\n origin,\n tx.decodedCall,\n 4\n )) as ResultPayload<TRawDryRun, unknown>;\n\n if (!raw.success) {\n throw new Error('DryRun call failed');\n }\n\n const result = raw.value as TRawDryRun;\n if ('type' in result && 'value' in result) {\n throw new Error('DryRun call error: ' + enums.enumPath(result.value));\n }\n\n return result as TDryRun;\n }\n\n async estimateNetworkFee(\n account: string,\n config: ExtrinsicConfig\n ): Promise<bigint> {\n const tx = config.getTx(this.client);\n try {\n const info = await tx.getPaymentInfo(account);\n return BigInt(info.partial_fee);\n } catch (e) {\n /**\n * Tx panic for V3 or higher multi-location versions if used\n * for an extrinsic with empty ammount (of transferred asset).\n */\n console.warn(`Can't estimate network fee.`);\n }\n return 0n;\n }\n\n async estimateDeliveryFee(\n account: string,\n config: ExtrinsicConfig\n ): Promise<bigint> {\n if (this.chain.usesDeliveryFee) {\n const acc = await this.estimateDeliveryFeeWith(account, config);\n\n try {\n const tx = config.getTx(this.client);\n const dryRunResult = await this.dryRun(acc, tx);\n\n if (dryRunResult.execution_result?.success) {\n return getDeliveryFeeFromDryRun(dryRunResult.emitted_events || []);\n } else {\n const error = getErrorFromDryRun(dryRunResult.execution_result);\n console.warn(`Can't estimate delivery fee. Reason:\\n ${error}`);\n }\n } catch (e) {}\n }\n return 0n;\n }\n\n private async estimateDeliveryFeeWith(\n account: string,\n config: ExtrinsicConfig\n ): Promise<string> {\n if (['PolkadotXcm'].includes(config.module)) {\n const extrinsic = config.getTx(this.client).decodedCall;\n const args = extrinsic.value.value;\n const dest = 'dest' in args ? args.dest : undefined;\n if (!dest) return account;\n\n const interior = multiloc.findNestedKey(dest, 'interior');\n const parachain = multiloc.findParachain(dest);\n const consensus = multiloc.findGlobalConsensus(dest);\n\n // Cross consensus (use user account)\n if (consensus) {\n return account;\n }\n\n // Downward (use chain sovereign account)\n if (parachain) {\n const saPub = acc.getSovereignAccounts(parachain);\n return this.chain.parachainId === 0\n ? Ss58Addr.encodePubKey(saPub.relay)\n : Ss58Addr.encodePubKey(saPub.generic);\n }\n\n // Upward (use chain treasury account if any)\n const interiorValue = interior && interior['interior'];\n if (interiorValue === 'Here' || interiorValue?.type === 'Here') {\n return this.chain.treasury || account;\n }\n }\n return account;\n }\n}\n", "import { multiloc, AnyParachain, Asset } from '@galacticcouncil/xc-core';\n\nimport { Binary, Enum, PolkadotSigner, TxEvent } from 'polkadot-api';\n\nimport { SubstrateCall, SubstrateTxObserver } from './types';\n\nexport class SubstrateSigner {\n readonly #chain: AnyParachain;\n readonly #signer: PolkadotSigner;\n\n constructor(chain: AnyParachain, signer: PolkadotSigner) {\n this.#chain = chain;\n this.#signer = signer;\n }\n\n signAndSend(call: SubstrateCall, observer: SubstrateTxObserver) {\n const client = this.#chain.client;\n const api = client.getUnsafeApi();\n\n const callData = Binary.fromHex(call.data);\n\n let opts: Record<string, unknown> = {};\n if (call.txOptions?.asset) {\n const feeAsset = this.getFeeAsset(call.txOptions.asset);\n opts = { asset: feeAsset };\n }\n\n api.txFromCallData(callData).then((tx) => {\n tx.signSubmitAndWatch(this.#signer, opts).subscribe({\n next: (event: TxEvent) => {\n if (event.type === 'broadcasted') {\n observer.onTransactionSend(event.txHash);\n }\n if (event.type === 'finalized') {\n observer.onFinalized(event);\n }\n },\n error: (err: unknown) => {\n observer.onError(err);\n },\n });\n });\n }\n\n private getFeeAsset(asset: Asset) {\n const location = this.#chain.getAssetXcmLocation(asset);\n if (location) {\n const pallet = multiloc.findPalletInstance(location);\n const index = multiloc.findGeneralIndex(location);\n return {\n parents: 0,\n interior: Enum('X2', [\n Enum('PalletInstance', Number(pallet)),\n Enum('GeneralIndex', BigInt(index)),\n ]),\n };\n }\n throw new Error('Asset location not found');\n }\n}\n", "import { CallType, SuiChain, Wormhole as Wh } from '@galacticcouncil/xc-core';\n\nimport { Transaction } from '@mysten/sui/transactions';\nimport { SUI_CLOCK_OBJECT_ID } from '@mysten/sui/utils';\nimport { toBase64 } from '@mysten/bcs';\nimport {\n encoding,\n serialize,\n toChainId,\n} from '@wormhole-foundation/sdk-connect';\nimport { deserialize } from '@wormhole-foundation/sdk-definitions';\nimport { getPackageId } from '@wormhole-foundation/sdk-sui';\nimport { getTokenCoinType } from '@wormhole-foundation/sdk-sui-tokenbridge';\n\nimport { SuiCall } from './types';\nimport { resolveCommandsTyped } from './utils';\n\nexport class SuiClaim {\n readonly #chain: SuiChain;\n\n constructor(chain: SuiChain) {\n this.#chain = chain;\n }\n\n async redeem(from: string, vaaRaw: string): Promise<SuiCall> {\n const ctxWh = Wh.fromChain(this.#chain);\n const client = this.#chain.client;\n\n const vaaBytes = encoding.b64.decode(vaaRaw);\n const vaa = deserialize('TokenBridge:Transfer', vaaBytes);\n\n const coreBridgeObjectId = ctxWh.getCoreBridge();\n const tokenBridgeObjectId = ctxWh.getTokenBridge();\n\n const coinType = await getTokenCoinType(\n client,\n tokenBridgeObjectId,\n vaa.payload.token.address.toUint8Array(),\n toChainId(vaa.payload.token.chain)\n );\n\n if (!coinType) {\n throw new Error('Unable to fetch token coinType');\n }\n\n const [coreBridgePackageId, tokenBridgePackageId] = await Promise.all([\n getPackageId(client, coreBridgeObjectId),\n getPackageId(client, tokenBridgeObjectId),\n ]);\n\n const tx = new Transaction();\n tx.setSender(from);\n\n const [verifiedVAA] = tx.moveCall({\n target: `${coreBridgePackageId}::vaa::parse_and_verify`,\n arguments: [\n tx.object(coreBridgeObjectId),\n tx.pure.vector('u8', serialize(vaa)),\n tx.object(SUI_CLOCK_OBJECT_ID),\n ],\n });\n\n const [tokenBridgeMessage] = tx.moveCall({\n target: `${tokenBridgePackageId}::vaa::verify_only_once`,\n arguments: [tx.object(tokenBridgeObjectId), verifiedVAA!],\n });\n\n const [relayerReceipt] = tx.moveCall({\n target: `${tokenBridgePackageId}::complete_transfer::authorize_transfer`,\n arguments: [tx.object(tokenBridgeObjectId), tokenBridgeMessage!],\n typeArguments: [coinType],\n });\n\n const [coins] = tx.moveCall({\n target: `${tokenBridgePackageId}::complete_transfer::redeem_relayer_payout`,\n arguments: [relayerReceipt!],\n typeArguments: [coinType],\n });\n\n tx.moveCall({\n target: `${tokenBridgePackageId}::coin_utils::return_nonzero`,\n arguments: [coins!],\n typeArguments: [coinType],\n });\n\n const txBytes = await tx.build({ client });\n const txJson = await tx.toJSON();\n const commands = resolveCommandsTyped(JSON.parse(txJson));\n\n return {\n from: from,\n commands: commands,\n data: toBase64(txBytes),\n type: CallType.Sui,\n } as SuiCall;\n }\n}\n", "import { fromBase64 } from '@mysten/bcs';\n\ntype NumberMode = 'string' | 'number' | 'bigint';\ntype Options = {\n numbers?: NumberMode;\n decode32As?: 'address' | 'vector<u8>';\n};\n\nexport function resolveCommandsTyped(\n root: { inputs: any[]; commands: any[] },\n opts: Options = {}\n) {\n const inputs = root.inputs ?? [];\n const cmds = root.commands ?? [];\n const numbers: NumberMode = opts.numbers ?? 'string';\n const decode32As = opts.decode32As ?? 'address';\n\n const emitNum = (v: bigint) =>\n numbers === 'bigint'\n ? (v as any)\n : numbers === 'number'\n ? Number(v)\n : v.toString();\n\n const pureToTyped = (b64: string) => {\n const b = fromBase64(b64);\n const le = (n: number) => {\n let v = 0n;\n for (let i = 0; i < n; i++) v |= BigInt(b[i]) << (8n * BigInt(i));\n return v;\n };\n\n if (b.length === 1)\n return { type: 'pure', valueType: 'u8', value: Number(b[0]) };\n if (b.length === 2)\n return { type: 'pure', valueType: 'u16', value: emitNum(le(2)) };\n if (b.length === 4)\n return { type: 'pure', valueType: 'u32', value: Number(le(4)) };\n if (b.length === 8)\n return { type: 'pure', valueType: 'u64', value: emitNum(le(8)) };\n\n if (b.length === 32 && decode32As === 'address') {\n const hex =\n '0x' + [...b].map((x) => x.toString(16).padStart(2, '0')).join('');\n return { type: 'pure', valueType: 'address', value: hex };\n }\n return { type: 'pure', valueType: 'vector<u8>', value: Array.from(b) };\n };\n\n const inputToTyped = (idx: number): any => {\n const i = inputs[idx];\n if (!i) return { Input: idx };\n\n if (i.Pure?.bytes) return pureToTyped(i.Pure.bytes);\n\n const so = i.Object?.SharedObject;\n if (so) {\n return {\n type: 'object',\n objectType: 'sharedObject',\n objectId: so.objectId,\n initialSharedVersion: String(so.initialSharedVersion),\n mutable: !!so.mutable,\n };\n }\n\n const oo = i.Object?.ImmOrOwnedObject;\n if (oo) {\n return {\n type: 'object',\n objectType: 'immOrOwnedObject',\n objectId: oo.objectId,\n version: String(oo.version),\n digest: oo.digest ?? undefined,\n };\n }\n\n return { Input: idx };\n };\n\n const mapArg = (arg: any): any => {\n if (arg?.GasCoin) return 'GasCoin';\n if (Array.isArray(arg?.NestedResult)) return arg;\n if (typeof arg?.Input === 'number') return inputToTyped(arg.Input);\n return arg;\n };\n\n return cmds.map((c: any) => {\n if (c.MoveCall) {\n const m = c.MoveCall;\n return {\n MoveCall: {\n ...m,\n arguments: (m.arguments ?? []).map(mapArg),\n },\n };\n }\n\n if (c.SplitCoins) {\n const s = c.SplitCoins;\n const coinOut = s.coin?.GasCoin ? 'GasCoin' : mapArg(s.coin);\n const amtOut = (s.amounts ?? []).map(mapArg);\n return { SplitCoins: [coinOut, amtOut] };\n }\n\n if (c.MergeCoins) {\n const m = c.MergeCoins;\n return {\n MergeCoins: {\n ...m,\n destination: mapArg(m.destination),\n sources: (m.sources ?? []).map(mapArg),\n },\n };\n }\n\n if (c.TransferObjects) {\n const t = c.TransferObjects;\n return {\n TransferObjects: {\n ...t,\n objects: (t.objects ?? []).map(mapArg),\n address: mapArg(t.address),\n },\n };\n }\n return c;\n });\n}\n", "import {\n Asset,\n AssetAmount,\n CallType,\n MoveConfig,\n SuiChain,\n SuiQueryConfig,\n} from '@galacticcouncil/xc-core';\n\nimport { SuiClient } from '@mysten/sui/client';\nimport { toBase64 } from '@mysten/bcs';\n\nimport {\n distinctUntilChanged,\n finalize,\n shareReplay,\n Observable,\n Subject,\n} from 'rxjs';\n\nimport { SuiBalanceFactory } from './balance';\nimport { SuiCall } from './types';\nimport { resolveCommandsTyped } from './utils';\n\nimport { DryRunResult, Platform } from '../types';\n\nexport class SuiPlatform implements Platform<MoveConfig, SuiQueryConfig> {\n readonly #client: SuiClient;\n\n constructor(chain: SuiChain) {\n this.#client = chain.client;\n }\n\n async buildCall(\n account: string,\n _amount: bigint,\n _feeBalance: AssetAmount,\n config: MoveConfig\n ): Promise<SuiCall> {\n const { transaction } = config;\n\n transaction.setSender(account);\n\n const txBytes = await transaction.build({ client: this.#client });\n const txJson = await transaction.toJSON();\n\n const commands = resolveCommandsTyped(JSON.parse(txJson));\n return {\n from: account,\n commands: commands,\n data: toBase64(txBytes),\n type: CallType.Sui,\n dryRun: async () => {\n const sim = await this.#client.dryRunTransactionBlock({\n transactionBlock: txBytes,\n });\n\n return {\n call: config.module + '.' + config.func,\n error: sim.executionErrorSource,\n } as DryRunResult;\n },\n } as SuiCall;\n }\n\n async estimateFee(\n account: string,\n _amount: bigint,\n feeBalance: AssetAmount,\n config: MoveConfig\n ): Promise<AssetAmount> {\n const { transaction } = config;\n\n transaction.setSender(account);\n const txBytes = await transaction.build({ client: this.#client });\n const sim = await this.#client.dryRunTransactionBlock({\n transactionBlock: txBytes,\n });\n\n const gasUsed = sim.effects.gasUsed;\n\n const computation = BigInt(gasUsed.computationCost);\n const storage = BigInt(gasUsed.storageCost);\n const mist = computation + storage;\n\n return feeBalance.copyWith({ amount: mist });\n }\n\n async getBalance(asset: Asset, config: SuiQueryConfig): Promise<AssetAmount> {\n const query = SuiBalanceFactory.get(this.#client, config);\n const [balance, decimals] = await Promise.all([\n query.getBalance(),\n query.getDecimals(),\n ]);\n return AssetAmount.fromAsset(asset, {\n amount: balance,\n decimals: decimals,\n });\n }\n\n async subscribeBalance(\n asset: Asset,\n config: SuiQueryConfig\n ): Promise<Observable<AssetAmount>> {\n const subject = new Subject<AssetAmount>();\n const observable = subject.pipe(shareReplay(1));\n\n const run = async () => {\n const updateBalance = async () => {\n const balance = await this.getBalance(asset, config);\n subject.next(balance);\n };\n await updateBalance();\n const intervalId = setInterval(() => {}, 3000);\n return () => clearInterval(intervalId);\n };\n\n let disconnect: () => void;\n run().then((unsub) => (disconnect = unsub));\n\n return observable.pipe(\n finalize(() => disconnect?.()),\n distinctUntilChanged((prev, curr) => prev.amount === curr.amount)\n ) as Observable<AssetAmount>;\n }\n}\n", "import { SuiQueryConfig } from '@galacticcouncil/xc-core';\n\nimport { SuiClient } from '@mysten/sui/client';\n\nexport abstract class SuiBalance {\n readonly client: SuiClient;\n readonly config: SuiQueryConfig;\n\n constructor(client: SuiClient, config: SuiQueryConfig) {\n this.validateClient(client);\n this.validateConfig(config);\n this.client = client;\n this.config = config;\n }\n\n private validateClient(client: SuiClient) {\n if (!client) {\n throw new Error(`No client found`);\n }\n }\n\n private validateConfig(config: SuiQueryConfig) {\n if (!config.address) {\n throw new Error('Sui address is required');\n }\n }\n\n abstract getBalance(): Promise<bigint>;\n abstract getDecimals(): Promise<number>;\n}\n", "import { SUI_TYPE_ARG } from '@mysten/sui/utils';\n\nimport { SuiBalance } from './SuiBalance';\n\nconst NATIVE_DECIMALS = 9;\n\nexport class Native extends SuiBalance {\n async getBalance(): Promise<bigint> {\n const { address } = this.config;\n const balance = await this.client.getBalance({\n owner: address,\n coinType: SUI_TYPE_ARG,\n });\n return BigInt(balance.totalBalance);\n }\n\n async getDecimals(): Promise<number> {\n return NATIVE_DECIMALS;\n }\n}\n", "import { SuiQueryConfig } from '@galacticcouncil/xc-core';\n\nimport { SuiClient } from '@mysten/sui/client';\n\nimport { Native } from './Native';\nimport { SuiBalance } from './SuiBalance';\n\nexport class SuiBalanceFactory {\n static get(client: SuiClient, config: SuiQueryConfig): SuiBalance {\n switch (config.module) {\n case 'Native':\n return new Native(client, config);\n default: {\n throw new Error('Module ' + config.module + ' is not supported');\n }\n }\n }\n}\n", "import { SuiChain } from '@galacticcouncil/xc-core';\n\nimport { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';\nimport { Transaction } from '@mysten/sui/transactions';\n\nimport { SuiCall, SuiWallet, SuiTxObserver } from './types';\n\nimport { Call } from '../types';\n\nexport class SuiSigner {\n readonly #chain: SuiChain;\n readonly #wallet: SuiWallet | Ed25519Keypair;\n\n constructor(chain: SuiChain, wallet: SuiWallet | Ed25519Keypair) {\n this.#chain = chain;\n this.#wallet = wallet;\n }\n\n async signAndSend(call: Call, observer: SuiTxObserver) {\n const { from, data } = call as SuiCall;\n const client = this.#chain.client;\n\n try {\n if (this.#wallet instanceof Ed25519Keypair) {\n const transaction = Transaction.from(data);\n const result = await client.signAndExecuteTransaction({\n signer: this.#wallet,\n transaction,\n options: {\n showEffects: true,\n showEvents: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n },\n });\n observer.onTransactionSend(result.digest);\n return;\n }\n\n const signed = await this.#wallet.signTransaction({\n transaction: data,\n address: from,\n networkID: 'sui:mainnet',\n });\n\n const exec = await client.executeTransactionBlock({\n transactionBlock: signed.transaction,\n signature: signed.signature,\n options: {\n showEffects: true,\n showEvents: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n },\n });\n observer.onTransactionSend(exec.digest);\n } catch (err) {\n observer.onError(err);\n }\n }\n}\n", "import {\n addr,\n Asset,\n AssetAmount,\n FeeAmountConfigBuilder,\n FeeAssetConfigBuilder,\n Parachain,\n TransferCtx,\n TransferConfig,\n TransactCtx,\n TransactConfig,\n} from '@galacticcouncil/xc-core';\nimport { acc, big } from '@galacticcouncil/common';\n\nimport { formatAmount, formatEvmAddress } from './utils';\nimport { Call, PlatformAdapter, SubstrateService } from '../platforms';\n\nimport { DataProcessor } from './DataProcessor';\n\nconst { EvmAddr } = addr;\n\nexport class DataOriginProcessor extends DataProcessor {\n constructor(adapter: PlatformAdapter, config: TransferConfig) {\n super(adapter, config);\n }\n\n async getCall(ctx: TransferCtx): Promise<Call> {\n const { amount, sender, source } = ctx;\n const transfer = await this.getTransfer(ctx);\n return this.adapter.buildCall(sender, amount, source.feeBalance, transfer);\n }\n\n async getDestinationFee(transferAmount?: bigint): Promise<{\n fee: AssetAmount;\n feeBreakdown: { [key: string]: bigint };\n }> {\n const { chain, route } = this.config;\n const { source, destination, transact } = route;\n\n const feeAmount = destination.fee.amount;\n const feeAsset = source.destinationFee.asset || destination.fee.asset;\n const feeDecimals = await this.getDecimals(feeAsset);\n\n if (Number.isFinite(feeAmount)) {\n const destinationFee = AssetAmount.fromAsset(feeAsset, {\n amount: big.toBigInt(feeAmount as number, feeDecimals),\n decimals: feeDecimals,\n });\n return {\n fee: destinationFee,\n feeBreakdown: {},\n };\n }\n\n const feeConfigBuilder = feeAmount as FeeAmountConfigBuilder;\n const { amount, breakdown } = await feeConfigBuilder.build({\n feeAsset: feeAsset,\n transferAsset: source.asset,\n source: transact ? transact.chain : chain,\n destination: destination.chain,\n amount: transferAmount,\n });\n\n const fee = AssetAmount.fromAsset(feeAsset, {\n amount: amount,\n decimals: feeDecimals,\n });\n\n return {\n fee: fee,\n feeBreakdown: breakdown,\n };\n }\n\n async getDestinationFeeBalance(address: string): Promise<AssetAmount> {\n const { chain, route } = this.config;\n const { source, destination } = route;\n\n const asset = source.asset;\n const feeAsset = source.destinationFee.asset || destination.fee.asset;\n\n if (asset.isEqual(feeAsset)) {\n return this.getBalance(address);\n }\n\n const feeAssetId = chain.getBalanceAssetId(feeAsset);\n const account = EvmAddr.isValid(feeAssetId.toString())\n ? await formatEvmAddress(address, chain)\n : address;\n const feeBalanceConfig = source.destinationFee.balance.build({\n address: account,\n asset: feeAsset,\n chain: chain,\n });\n return this.adapter.getBalance(feeAsset, feeBalanceConfig);\n }\n\n async getFee(ctx: TransferCtx): Promise<AssetAmount> {\n const { chain, route } = this.config;\n const { amount, sender, source } = ctx;\n\n const transfer = await this.getTransfer(ctx);\n const address = route.contract\n ? await formatEvmAddress(sender, chain)\n : sender;\n\n const networkFee = await this.adapter.estimateFee(\n address,\n amount,\n source.feeBalance,\n transfer\n );\n\n const { fee } = route.source;\n const extraFee = fee ? formatAmount(networkFee.decimals, fee.extra) : 0n;\n const totalFee = networkFee.amount + extraFee;\n return networkFee.copyWith({ amount: totalFee });\n }\n\n async getFeeBalance(address: string): Promise<AssetAmount> {\n const { chain, route } = this.config;\n const { source } = route;\n\n if (!source.fee) {\n return this.getBalance(address);\n }\n\n const feeAsset = await this.getFeeAsset(address);\n const feeAssetId = chain.getBalanceAssetId(feeAsset);\n const account = EvmAddr.isValid(feeAssetId.toString())\n ? await formatEvmAddress(address, chain)\n : address;\n const feeBalanceConfig = source.fee.balance.build({\n address: account,\n asset: feeAsset,\n chain: chain,\n });\n\n return this.adapter.getBalance(feeAsset, feeBalanceConfig);\n }\n\n async getFeeAsset(address: string): Promise<Asset> {\n const { chain, route } = this.config;\n const { source } = route;\n\n const fee = source.fee;\n const asset = source.asset;\n\n if (!fee) {\n return asset;\n }\n\n const feeAssetConfig = fee.asset;\n if (chain instanceof Parachain && 'build' in feeAssetConfig) {\n const feeAssetBuilder = feeAssetConfig as FeeAssetConfigBuilder;\n return await feeAssetBuilder.build({\n chain,\n address,\n });\n }\n return feeAssetConfig as Asset;\n }\n\n private async getTransfer(ctx: TransferCtx) {\n const { chain, route } = this.config;\n const { contract, extrinsic, program, move } = route;\n\n if (extrinsic) {\n const { address, amount, asset, sender } = ctx;\n const substrate = await SubstrateService.create(chain as Parachain);\n const messageId = await substrate.buildMessageId(\n sender,\n amount,\n asset.originSymbol,\n address\n );\n return extrinsic.build({\n ...ctx,\n messageId: messageId,\n });\n }\n\n const callable = contract || program || move;\n if (callable) {\n return callable.build({\n ...ctx,\n });\n }\n\n throw new Error(\n 'AssetRoute transfer config is invalid! Specify contract, extrinsic, move or program instructions.'\n );\n }\n\n async getTransact(ctx: TransferCtx): Promise<TransactCtx | undefined> {\n const { route } = this.config;\n const { transact } = route;\n\n if (transact) {\n // Augment transfer context with transact chain info\n const ctxTransactBase = Object.assign({\n transact: {\n chain: transact.chain,\n },\n });\n\n const context = {\n ...ctx,\n ...ctxTransactBase,\n };\n\n const data = await this.getTransactData(transact, context);\n return {\n ...data,\n chain: transact.chain,\n } as TransactCtx;\n }\n return undefined;\n }\n\n /**\n * Transact remote execution context\n *\n * @param cfg - transact config\n * @param ctx - augmented transfer context\n * @returns transact remote call context\n */\n private async getTransactData(\n cfg: TransactConfig,\n ctx: TransferCtx\n ): Promise<TransactCtx> {\n const { chain, extrinsic } = cfg;\n const config = await extrinsic.build(ctx);\n const substrate = await SubstrateService.create(chain);\n const submittable = config.getTx(substrate.client);\n\n const fromChain = ctx.source.chain as Parachain;\n const fromAddr = ctx.sender;\n\n const mda = acc.getMultilocationDerivatedAccount(\n fromChain.parachainId,\n fromAddr,\n chain.parachainId === 0 ? 0 : 1,\n chain.usesH160Acc\n );\n\n const paymentInfo = await submittable.getPaymentInfo(mda);\n const encodedTx = await submittable.getEncodedData();\n\n const [transactFee, transactFeeBalance] = await Promise.all([\n this.getTransactFee(cfg),\n this.getTransactFeeBalance(cfg, ctx),\n ]);\n\n return {\n call: encodedTx,\n chain: chain,\n fee: transactFee,\n feeBalance: transactFeeBalance,\n weight: {\n refTime: paymentInfo.weight.ref_time,\n proofSize: paymentInfo.weight.proof_size,\n },\n } as TransactCtx;\n }\n\n /**\n * Transact fee on source chain\n *\n * @param cfg - transact config\n * @returns transact source chain fee\n */\n private async getTransactFee(cfg: TransactConfig): Promise<AssetAmount> {\n const { fee } = cfg;\n const decimals = await this.getDecimals(fee.asset);\n const amount = big.toBigInt(fee.amount, decimals);\n return AssetAmount.fromAsset(fee.asset, {\n amount: amount,\n decimals,\n });\n }\n\n /**\n * Transact fee balance on source chain\n *\n * @param cfg - transact config\n * @param ctx - augmented transfer context\n * @returns transact source chain fee balance\n */\n private async getTransactFeeBalance(\n cfg: TransactConfig,\n ctx: TransferCtx\n ): Promise<AssetAmount> {\n const { chain } = this.config;\n const { fee } = cfg;\n const feeBalanceConfig = fee.balance.build({\n address: ctx.sender,\n asset: fee.asset,\n chain: chain,\n });\n return this.adapter.getBalance(fee.asset, feeBalanceConfig);\n }\n}\n", "import { AnyChain, AssetAmount, EvmParachain } from '@galacticcouncil/xc-core';\nimport { big } from '@galacticcouncil/common';\n\nimport Big from 'big.js';\n\n/**\n * Calculate maximum allowed amount of asset to send from source to\n * destination chain.\n *\n * @param balance - source chain asset balance\n * @param fee - source chain transfer fee\n * @param min - source chain minimum\n * @param ed - source chain existential deposit (opt)\n * @returns - maximum allowed amount of tokens to send or zero in\n * case of not enough funds\n */\nexport function calculateMax(\n balance: AssetAmount,\n fee: AssetAmount,\n min: AssetAmount,\n ed?: AssetAmount\n): AssetAmount {\n let result = balance\n .toBig()\n .minus(min.toBig())\n .minus(balance.isSame(fee) ? fee.toBig() : new Big(0));\n\n if (ed) {\n result = result.minus(balance.isSame(ed) ? ed.toBig() : new Big(0));\n }\n\n return balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n\n/**\n * Calculate minimum required amount of asset to send from source to\n * destination chain.\n *\n * @param balance - destination chain asset balance\n * @param fee - destination chain transfer fee\n * @param min - destination chain minimum\n * @param ed - destination chain existential deposit (opt)\n * @returns - minimum required amount of tokens to send or zero in\n * case of no available funds\n */\nexport function calculateMin(\n balance: AssetAmount,\n fee: AssetAmount,\n min: AssetAmount,\n ed?: AssetAmount\n): AssetAmount {\n const zero = balance.copyWith({\n amount: 0n,\n });\n\n let result = zero\n .toBig()\n .plus(balance.isSame(fee) ? fee.toBig() : new Big(0))\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : new Big(0));\n\n if (ed) {\n result = result.plus(\n balance.isSame(ed) && balance.toBig().lt(ed.toBig())\n ? ed.toBig()\n : new Big(0)\n );\n }\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\n/**\n * Return h160 derivated address in case of Evm parachain\n *\n * @param address - h160 or ss58 address format\n * @param chain - transfer chain ctx\n * @returns - derivated address if evm resolver defined, fallback to default\n */\nexport async function formatEvmAddress(\n address: string,\n chain: AnyChain\n): Promise<string> {\n if (chain.isEvmParachain()) {\n const evmParachain = chain as EvmParachain;\n return evmParachain.getDerivatedAddress(address);\n }\n return address;\n}\n\n/**\n * Format amount if defined\n *\n * @param decimals - fee asset decimals\n * @param amount - fee amount\n * @returns formatted amount or 0\n */\nexport function formatAmount(decimals: number, amount?: number): bigint {\n return amount ? big.toBigInt(amount, decimals) : 0n;\n}\n", "import {\n addr,\n Asset,\n AssetAmount,\n Parachain,\n TransferConfig,\n} from '@galacticcouncil/xc-core';\nimport { big } from '@galacticcouncil/common';\n\nimport { formatEvmAddress } from './utils';\nimport { PlatformAdapter, SubstrateService } from '../platforms';\n\nconst { EvmAddr } = addr;\n\nexport abstract class DataProcessor {\n readonly adapter: PlatformAdapter;\n readonly config: TransferConfig;\n\n constructor(adapter: PlatformAdapter, config: TransferConfig) {\n this.adapter = adapter;\n this.config = config;\n }\n\n async getEd(): Promise<AssetAmount | undefined> {\n const { chain } = this.config;\n\n if (chain instanceof Parachain) {\n const substrate = await SubstrateService.create(chain);\n return substrate.getExistentialDeposit();\n }\n return undefined;\n }\n\n async getBalance(address: string): Promise<AssetAmount> {\n const { chain, route } = this.config;\n const { source } = route;\n\n const asset = source.asset;\n\n const assetId = chain.getBalanceAssetId(asset);\n const account = EvmAddr.isValid(assetId.toString())\n ? await formatEvmAddress(address, chain)\n : address;\n const balanceConfig = route.source.balance.build({\n address: account,\n asset: asset,\n chain: chain,\n });\n\n return this.adapter.getBalance(asset, balanceConfig);\n }\n\n async getMin(): Promise<AssetAmount> {\n const { chain, route } = this.config;\n const { source } = route;\n\n const asset = source.asset;\n const min = source.min;\n\n if (chain instanceof Parachain && min) {\n const minAssetId = chain.getMinAssetId(asset);\n const minBalanceConfig = min.build({\n asset: minAssetId,\n });\n return this.adapter.getBalance(asset, minBalanceConfig);\n }\n\n return this.getAssetMin();\n }\n\n private async getAssetMin(): Promise<AssetAmount> {\n const { chain, route } = this.config;\n const { source } = route;\n\n const asset = source.asset;\n const min = chain.getAssetMin(asset);\n const decimals = await this.getDecimals(asset);\n\n let balance: bigint = 0n;\n if (min) {\n balance = big.toBigInt(min, decimals);\n }\n\n return AssetAmount.fromAsset(asset, {\n amount: balance,\n decimals: decimals,\n });\n }\n\n protected async getDecimals(asset: Asset): Promise<number> {\n const { chain } = this.config;\n\n const decimals = chain.getAssetDecimals(asset);\n if (decimals) {\n return decimals;\n }\n\n const chainCurrency = await chain.getCurrency();\n return chainCurrency.decimals;\n }\n}\n", "import { TransferConfig } from '@galacticcouncil/xc-core';\n\nimport { PlatformAdapter } from '../platforms';\n\nimport { DataProcessor } from './DataProcessor';\n\nexport class DataReverseProcessor extends DataProcessor {\n constructor(adapter: PlatformAdapter, config: TransferConfig) {\n super(adapter, config);\n }\n}\n", "import {\n AssetAmount,\n FeeConfig,\n SwapCtx,\n TransferCtx,\n} from '@galacticcouncil/xc-core';\n\nexport class FeeSwap {\n readonly ctx: TransferCtx;\n\n constructor(ctx: TransferCtx) {\n this.ctx = ctx;\n }\n\n get asset() {\n const { source } = this.ctx;\n return source.balance;\n }\n\n get dex() {\n const { source } = this.ctx;\n return source.chain.dex;\n }\n\n get destFee() {\n const { source, transact } = this.ctx;\n return transact ? transact.fee : source.destinationFee;\n }\n\n get destFeeBalance() {\n const { source, transact } = this.ctx;\n return transact ? transact.feeBalance : source.destinationFeeBalance;\n }\n\n get feeBalance() {\n const { source } = this.ctx;\n return source.feeBalance;\n }\n\n /**\n * Fee swap context\n *\n * @param fee - source chain fee\n * @returns source fee swap context\n */\n async getSwap(fee: AssetAmount): Promise<SwapCtx | undefined> {\n const { asset, decimals } = await this.dex!.chain.getCurrency();\n const { amount } = await this.dex!.getQuote(asset, fee, fee);\n\n return {\n aIn: fee,\n aOut: AssetAmount.fromAsset(asset, {\n amount: amount,\n decimals: decimals,\n }),\n enabled: true,\n } as SwapCtx;\n }\n\n /**\n * Swap source fee only if explicitly enabled in route\n * fee config\n *\n * @param fee - source chain fee config\n * @returns true if supported, otherwise false\n */\n isSwapSupported(cfg?: FeeConfig) {\n try {\n this.dex;\n } catch {\n return false;\n }\n\n const isSwapEnabled = cfg && cfg.swap;\n return !!isSwapEnabled;\n }\n\n /**\n * Destination fee swap context\n *\n * Swap is enabled if following applies:\n * - account has not enough destination fee balance\n * - account has enough source fee reserves (double the fee) to buy required asset\n *\n * Note: Slippage can be set up to 100% in builder config (see maxAmountIn)\n *\n * @param fee - source chain fee\n * @returns destination fee swap context\n */\n async getDestinationSwap(fee: AssetAmount): Promise<SwapCtx | undefined> {\n const { amount, route } = await this.dex!.getQuote(\n fee,\n this.destFee,\n this.destFee\n );\n\n const hasNotEnoughDestFee =\n this.destFeeBalance.amount < this.destFee.amount;\n const hasEnoughReservesToSwap =\n this.feeBalance.amount - fee.amount > amount * 2n;\n\n return {\n aIn: fee.copyWith({ amount: amount }),\n aOut: this.destFee,\n enabled: hasNotEnoughDestFee && hasEnoughReservesToSwap,\n route: route,\n } as SwapCtx;\n }\n\n /**\n * Swap destination fee only if:\n * - transfer asset insufficient\n * - destination fee asset is different than fee asset\n *\n * @param fee - source chain fee\n * @returns true if supported, otherwise false\n */\n isDestinationSwapSupported(fee: AssetAmount): boolean {\n try {\n this.dex;\n } catch {\n return false;\n }\n\n const isSwappable = !fee.isSame(this.destFee);\n const isSufficientAssetTransfer = this.asset.isSame(this.destFee);\n return isSwappable && !isSufficientAssetTransfer;\n }\n}\n", "import {\n AnyChain,\n Asset,\n ConfigBuilder,\n TransferConfigs,\n} from '@galacticcouncil/xc-core';\n\nimport { Wallet } from './Wallet';\nimport { Transfer } from './types';\n\nexport function TransferBuilder(wallet: Wallet) {\n const assets = ConfigBuilder(wallet.config).assets();\n return {\n assets,\n withAsset(asset: string | Asset) {\n const sources = assets.asset(asset);\n return {\n sources,\n withSource(srcChain: string | AnyChain) {\n const destinations = sources.source(srcChain);\n return {\n destinations,\n withDestination(dstChain: string | AnyChain) {\n const {\n routes,\n destinationAssets,\n isAssetSelect,\n isTagSelect,\n build,\n } = destinations.destination(dstChain);\n\n return {\n routes,\n destinationAssets,\n isAssetSelect,\n isTagSelect,\n build({\n srcAddress,\n dstAddress,\n dstAsset,\n tag,\n }: {\n srcAddress: string;\n dstAddress: string;\n dstAsset?: string | Asset;\n tag?: string;\n }): Promise<Transfer> {\n const configs = build(dstAsset, tag);\n return wallet.getTransferData(\n configs,\n srcAddress,\n dstAddress\n );\n },\n };\n },\n };\n },\n };\n },\n };\n}\n", "import { Precompile } from '@galacticcouncil/xc-core';\n\nconst DEFAULT_URL = 'https://api.wormholescan.io';\n\nexport interface Vaa {\n sequence: number;\n id: string;\n version: number;\n emitterChain: number;\n emitterAddr: string;\n emitterNativeAddr: string;\n guardianSetIndex: number;\n vaa: string;\n timestamp: string;\n updatedAt: string;\n indexedAt: string;\n txHash: string;\n}\n\nexport interface VaaBytes {\n vaaBytes: string;\n}\n\nexport interface Operation {\n id: string;\n content: {\n payload: OperationPayload;\n standarizedProperties: OperationProperties;\n };\n data: {\n symbol: string;\n tokenAmount: string;\n };\n emitterChain: number;\n emitterAddress: {\n hex: string;\n native: string;\n };\n sequence: string;\n sourceChain: {\n chainId: number;\n from: string;\n status: string;\n timestamp: string;\n transaction: {\n txHash: string;\n };\n };\n targetChain?: {\n status: string;\n };\n vaa?: {\n guardianSetIndex: number;\n isDuplicated: boolean;\n raw: string;\n };\n}\n\nexport interface OperationParsedPayload {\n targetRecipient: string;\n targetRelayerFee: bigint;\n toNativeTokenAmount: bigint;\n}\n\nexport interface OperationPayload {\n amount: string;\n fee: string;\n fromAddress: string;\n parsedPayload: OperationParsedPayload;\n payload: string;\n payloadType: number;\n toAddress: string;\n toChain: number;\n tokenAddress: string;\n tokenChain: number;\n}\n\nexport interface OperationProperties {\n fromChain: number;\n fromAddress: string;\n toChain: number;\n toAddress: string;\n tokenChain: number;\n tokenAddress: string;\n}\n\nexport class WormholeScan {\n private _baseUrl: string;\n\n public constructor(baseUrl?: string) {\n this._baseUrl = baseUrl || DEFAULT_URL;\n }\n\n private buildApi(api: string, params: Record<string, string>): string {\n return (\n [this._baseUrl, api, '?'].join('') +\n new URLSearchParams(params).toString()\n );\n }\n\n async getVaaBytes(wormholeId: string): Promise<VaaBytes> {\n const url = this.buildApi('/v1/signed_vaa/' + wormholeId, {});\n const vaa = await fetch(url);\n const resp = await vaa.json();\n return resp as VaaBytes;\n }\n\n async getVaa(wormholeId: string): Promise<Vaa> {\n const url = this.buildApi('/api/v1/vaas/' + wormholeId, {});\n const vaa = await fetch(url);\n const resp = await vaa.json();\n return resp.data as Vaa;\n }\n\n async getVaaByTxHash(txHash: string): Promise<Vaa> {\n const url = this.buildApi('/api/v1/vaas/', { txHash: txHash });\n const vaa = await fetch(url);\n const resp = await vaa.json();\n if (resp.data.length > 0) {\n return resp.data[0] as Vaa;\n }\n throw Error(\"Can't find VAA for given txHash: \" + txHash);\n }\n\n async getOperations(params: Record<string, string>): Promise<Operation[]> {\n const url = this.buildApi('/api/v1/operations/', params);\n const operations = await fetch(url);\n const resp = await operations.json();\n return resp.operations as Operation[];\n }\n\n async getOperation(wormholeId: string): Promise<Operation> {\n const url = this.buildApi('/api/v1/operations/' + wormholeId, {});\n const operation = await fetch(url);\n const resp = await operation.json();\n return resp as Operation;\n }\n\n isMrlTransfer(payload: OperationPayload): boolean {\n const { payloadType, toAddress, toChain } = payload;\n const nativeToAddress = '0x' + toAddress.substring(26);\n return (\n payloadType === 3 &&\n toChain === 16 &&\n nativeToAddress === Precompile.Bridge\n );\n }\n}\n", "import { acc } from '@galacticcouncil/common';\nimport {\n mrl,\n AnyChain,\n ConfigService,\n ChainType,\n EvmChain,\n EvmParachain,\n Parachain,\n Precompile,\n SolanaChain,\n Wormhole,\n} from '@galacticcouncil/xc-core';\n\nimport { encoding } from '@wormhole-foundation/sdk-base';\nimport { keccak256 } from '@wormhole-foundation/sdk-connect';\nimport { deserialize } from '@wormhole-foundation/sdk-definitions';\n\nimport { EvmClaim, SolanaClaim, SubstrateClaim } from '../platforms';\n\nimport { Operation, WormholeScan } from './WormholeScan';\nimport { WhTransfer, WhStatus } from './types';\n\nconst REDEEM_THRESHOLD = 5 * 60 * 1000; // 5 minutes\n\nexport class WormholeTransfer {\n private parachainId: number;\n private config: ConfigService;\n\n readonly whScan: WormholeScan;\n\n constructor(config: ConfigService, parachainId: number) {\n this.config = config;\n this.parachainId = parachainId;\n\n this.whScan = new WormholeScan();\n }\n\n get chains(): AnyChain[] {\n const configChains = this.config.chains.values();\n return Array.from(configChains);\n }\n\n get filters(): Record<string, string> {\n const toDate = new Date();\n const fromDate = new Date();\n fromDate.setDate(toDate.getDate() - 6);\n\n const toISO = toDate.toISOString();\n const fromISO = fromDate.toISOString();\n\n return {\n page: '0',\n pageSize: '50',\n includeEndDate: 'true',\n from: fromISO,\n to: toISO,\n };\n }\n\n async getWithdraws(address: string): Promise<WhTransfer[]> {\n const mda = acc.getMultilocationDerivatedAccount(\n this.parachainId,\n address,\n 1,\n true\n );\n\n const operations = await this.whScan.getOperations({\n ...this.filters,\n address: mda,\n });\n\n const result = operations.map(async (o) => {\n const { content } = o;\n const { payload, standarizedProperties } = content;\n\n const status = this.getStatus(o);\n\n const fromChain = this.chains.find(\n (c) => c instanceof Parachain && c.parachainId === this.parachainId\n )!;\n\n const { toAddress, tokenAddress } = standarizedProperties;\n const toChain = this.chains.find(\n (c) =>\n Wormhole.isKnown(c) &&\n Wormhole.fromChain(c).getWormholeId() === payload.tokenChain\n )!;\n\n let redeem;\n if (status === WhStatus.VaaEmitted && o.vaa) {\n const { timestamp } = this.getVaaHeader(o.vaa.raw);\n const vaaRaw = o.vaa.raw;\n\n if (this.isStuck(timestamp)) {\n switch (toChain.getType()) {\n case ChainType.EvmChain:\n const evmClaim = new EvmClaim(toChain as EvmChain);\n redeem = async (from: string) => evmClaim.redeem(from, vaaRaw);\n break;\n case ChainType.SolanaChain:\n const solanaClaim = new SolanaClaim(toChain as SolanaChain);\n redeem = async (from: string) => solanaClaim.redeem(from, vaaRaw);\n break;\n }\n }\n }\n\n return {\n asset: tokenAddress,\n assetSymbol: o.data.symbol,\n amount: o.data.tokenAmount,\n from: address,\n fromChain: fromChain,\n to: toAddress,\n toChain: toChain,\n status: status,\n redeem: redeem,\n operation: o,\n };\n });\n\n return Promise.all(result);\n }\n\n async getDeposits(address: string, to = 'hydration'): Promise<WhTransfer[]> {\n const operations = await this.whScan.getOperations({\n ...this.filters,\n address: Precompile.Bridge,\n pageSize: '100',\n });\n\n const toChain = this.config.chains.get(to);\n if (!toChain) {\n return [];\n }\n\n const toParachain = toChain as Parachain;\n const payload = await mrl.createPayload(toParachain, address);\n const payloadHex = payload.toHex();\n const result = operations\n .filter((o) => {\n const { content } = o;\n const { payload } = content;\n return (\n payload.payloadType === 3 &&\n payload.toChain === 16 &&\n '0x' + payload.payload === payloadHex\n );\n })\n .map(async (o) => {\n const { content, sourceChain } = o;\n const { payload, standarizedProperties } = content;\n\n const status = this.getStatus(o);\n const { tokenAddress } = standarizedProperties;\n\n const fromChain = this.chains.find(\n (c) =>\n Wormhole.isKnown(c) &&\n Wormhole.fromChain(c).getWormholeId() === payload.tokenChain\n )!;\n\n const viaChain = this.chains.find(\n (c) =>\n Wormhole.isKnown(c) &&\n Wormhole.fromChain(c).getWormholeId() === payload.toChain\n )!;\n\n let redeem;\n if (status === WhStatus.VaaEmitted && o.vaa) {\n const { timestamp } = this.getVaaHeader(o.vaa.raw);\n const vaaRaw = o.vaa.raw;\n\n if (this.isStuck(timestamp)) {\n const claim = new SubstrateClaim(viaChain as EvmParachain);\n redeem = async (address: string) =>\n claim.redeemMrlViaXcm(address, vaaRaw);\n }\n }\n\n return {\n asset: tokenAddress,\n assetSymbol: o.data.symbol,\n amount: o.data.tokenAmount,\n from: sourceChain.from,\n fromChain: fromChain,\n to: address,\n toChain: toChain,\n status: status,\n redeem: redeem,\n operation: o,\n };\n });\n\n return Promise.all(result);\n }\n\n private isStuck(emittedAt: number) {\n const now = Date.now();\n return now >= emittedAt * 1000 + REDEEM_THRESHOLD;\n }\n\n private getVaaHeader(vaaRaw: string) {\n const vaaBytes = encoding.b64.decode(vaaRaw);\n const vaa = deserialize('Uint8Array', vaaBytes);\n return {\n timestamp: vaa.timestamp,\n emitterChain: vaa.emitterChain,\n emitterAddress: vaa.emitterAddress.toString(),\n sequence: vaa.sequence,\n payload: vaa.payload,\n hash: vaa.hash,\n id: keccak256(vaa.hash),\n };\n }\n\n private getStatus(operation: Operation) {\n if (operation.vaa) {\n const isCompleted =\n operation.targetChain && operation.targetChain.status === 'completed';\n return isCompleted ? WhStatus.Completed : WhStatus.VaaEmitted;\n } else {\n return WhStatus.WaitingForVaa;\n }\n }\n}\n", "import { AnyChain } from '@galacticcouncil/xc-core';\n\nimport { Operation } from './WormholeScan';\nimport { Call } from '../platforms';\n\nexport interface WhTransfer {\n asset: string;\n assetSymbol: string;\n amount: string;\n from: string;\n fromChain: AnyChain;\n to: string;\n toChain: AnyChain;\n status: WhStatus;\n redeem?: (from: string) => Promise<Call | Call[]>;\n operation: Operation;\n}\n\nexport enum WhStatus {\n WaitingForVaa,\n VaaEmitted,\n Completed,\n}\n"],
5
- "mappings": "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",
6
- "names": ["acc", "big", "addr", "ConfigBuilder", "TransferValidator", "combineLatest", "debounceTime", "ChainType", "Abi", "Wh", "encodeFunctionData", "encoding", "EvmClaim", "#chain", "chain", "from", "vaaRaw", "ctxWh", "vaaBytes", "vaaHex", "abi", "data", "Abi", "AssetAmount", "CallType", "Erc20Client", "distinctUntilChanged", "finalize", "shareReplay", "Subject", "EvmBalance", "client", "config", "Erc20Client", "Erc20", "EvmBalance", "client", "config", "Erc20Client", "args", "account", "Native", "EvmBalance", "provider", "address", "EvmBalanceFactory", "client", "config", "Erc20", "Native", "ContractFunctionExecutionError", "decodeEventLog", "EvmTransfer", "client", "config", "args", "asset", "account", "address", "value", "func", "balance", "estimatedGas", "gasPrice", "e", "provider", "nonce", "results", "result", "error", "logs", "decodedLogs", "l", "eventName", "EvmTransferFactory", "client", "config", "EvmTransfer", "Precompile", "decodeAbiParameters", "isSnowbridgeV2", "config", "getSnowbridgeV2TokenAddress", "assets", "_kind", "tokenAddress", "isNativeEthBridge", "isSnowbridgeNative", "isSnowbridgeV1Native", "isPrecompile", "_", "v", "EvmPlatform", "#client", "chain", "account", "amount", "_feeBalance", "config", "contract", "EvmTransferFactory", "abi", "asset", "calldata", "transferCall", "CallType", "error", "logs", "decodedEvents", "isPrecompile", "isNativeEthBridge", "tokenAddress", "isSnowbridgeV2", "getSnowbridgeV2TokenAddress", "erc20", "Erc20Client", "allowance", "approve", "Abi", "feeBalance", "fee", "EvmBalanceFactory", "balance", "decimals", "AssetAmount", "subject", "Subject", "observable", "shareReplay", "provider", "run", "updateBalance", "unsub", "disconnect", "finalize", "distinctUntilChanged", "prev", "curr", "EvmParachain", "h160", "Binary", "DISPATCH_ADDRESS", "H160", "EvmSigner", "#chain", "#client", "#signer", "chain", "signer", "call", "observer", "account", "provider", "isDispatch", "dotClient", "callData", "txHash", "gas", "gasPrice", "gasPriceExtra", "data", "to", "value", "gasPriceSurplus", "gasLimit", "receipt", "error", "AssetAmount", "CallType", "PublicKey", "Buffer", "distinctUntilChanged", "finalize", "shareReplay", "Subject", "SolanaBalance", "connection", "config", "SolanaAddress", "NATIVE_DECIMALS", "Native", "SolanaBalance", "address", "senderAddress", "SolanaAddress", "balance", "SolanaAddress", "Token", "SolanaBalance", "connection", "config", "address", "token", "senderAddress", "SolanaAddress", "mintAddress", "sum", "account", "t", "SolanaBalanceFactory", "connection", "config", "Native", "Token", "ComputeBudgetProgram", "PublicKey", "TransactionMessage", "VersionedTransaction", "DEFAULT_PRIORITY_FEE_PERCENTILE", "DEFAULT_PERCENTILE_MULTIPLE", "DEFAULT_MIN_PRIORITY_FEE", "DEFAULT_MAX_PRIORITY_FEE", "DEFAULT_COMPUTE_BUDGET", "SolanaTransfer", "connection", "config", "account", "instructions", "message", "priorityFeeIx", "balance", "budget", "payerKey", "blockhash", "feePercentile", "multiple", "minPriorityFee", "maxPriorityFee", "computeBudget", "priorityFee", "transaction", "simulateResponse", "err", "unitsConsumed", "percentile", "fee", "lockedWritableAccounts", "recentFeesResponse", "recentFees", "dp", "f", "a", "b", "idx", "percentileFeeJuiced", "luts", "acc", "lut", "val", "keys", "ix", "k", "SolanaTransferFactory", "connection", "config", "SolanaTransfer", "MessageV0", "ixToHuman", "instructions", "ix", "k", "chunk", "items", "size", "out", "i", "serializeV0", "mssgV0", "mssgArray", "deserializeV0", "mssgBuffer", "SolanaPlatform", "#connection", "chain", "account", "_amount", "_feeBalance", "config", "transfer", "SolanaTransferFactory", "mssgV0", "mssgArray", "mssgHex", "Buffer", "ixToHuman", "CallType", "err", "logs", "amount", "feeBalance", "fee", "accounts", "senderFinalBalance", "isSolTransfer", "asset", "query", "SolanaBalanceFactory", "balance", "decimals", "AssetAmount", "subject", "Subject", "observable", "shareReplay", "run", "updateBalance", "sender", "PublicKey", "id", "disconnect", "unsub", "finalize", "distinctUntilChanged", "prev", "curr", "CallType", "Wh", "Keypair", "PublicKey", "SystemProgram", "TransactionMessage", "ACCOUNT_SIZE", "NATIVE_MINT", "TOKEN_PROGRAM_ID", "createAssociatedTokenAccountIdempotentInstruction", "createCloseAccountInstruction", "createInitializeAccountInstruction", "createTransferInstruction", "getAssociatedTokenAddressSync", "getMinimumBalanceForRentExemptAccount", "getMint", "tutils", "cutils", "encoding", "deserialize", "createCompleteTransferNativeInstruction", "createCompleteTransferWrappedInstruction", "SolanaLilJit", "#connection", "chain", "encoded", "result", "bundleIds", "SolanaClaim", "#chain", "#connection", "#lilJit", "chain", "SolanaLilJit", "from", "vaaRaw", "recipient", "ctx", "Wh", "vaaBytes", "encoding", "vaa", "deserialize", "vaaU8a", "postedVaaAddress", "payer", "PublicKey", "payee", "isSelfRedeem", "calls", "signatureSet", "Keypair", "verifyIxs", "cutils", "chunks", "chunk", "i", "sigIx", "sigV0", "sigTx", "serializeV0", "ixToHuman", "CallType", "postVaaIx", "postVaaV0", "postVaaTx", "isNative", "mint", "isNativeSol", "NATIVE_MINT", "tipAccounts", "tipIx", "SystemProgram", "completeCall", "completeIx", "createCompleteTransferNativeInstruction", "createCompleteTransferWrappedInstruction", "ata", "getAssociatedTokenAddressSync", "createAtaIx", "createAssociatedTokenAccountIdempotentInstruction", "completeV0", "completeTx", "mintInfo", "getMint", "targetAmount", "rentBalance", "getMinimumBalanceForRentExemptAccount", "ancillaryKeypair", "createAncillaryIx", "ACCOUNT_SIZE", "TOKEN_PROGRAM_ID", "initAncillaryIx", "createInitializeAccountInstruction", "transferIx", "createTransferInstruction", "closeIx", "createCloseAccountInstruction", "ixs", "wormholeProgramId", "hash", "tutils", "blockhash", "TransactionMessage", "Keypair", "MessageV0", "VersionedTransaction", "Buffer", "SolanaSigner", "#chain", "#wallet", "#lilJit", "chain", "wallet", "SolanaLilJit", "call", "observer", "data", "signers", "versioned", "Keypair", "signature", "status", "err", "calls", "c", "encoded", "tx", "Buffer", "s", "simulation", "bundleId", "mssgBuffer", "mssgArray", "mssgV0", "MessageV0", "VersionedTransaction", "Abi", "CallType", "Precompile", "Wh", "encoding", "encodeFunctionData", "Binary", "SubstrateClaim", "#chain", "chain", "from", "vaaBytes", "vaaArray", "vaaHex", "abi", "data", "api", "claim", "encoded", "AssetAmount", "CallType", "Binary", "big", "normalizeAssetAmount", "amount", "asset", "substrate", "chainDecimals", "assetDecimals", "normDecimals", "enums", "getDeliveryFeeFromDryRun", "events", "deliveryFees", "fees", "fee", "plancks", "acc", "df", "getErrorFromDryRun", "executionResult", "error", "xcm", "buildBeneficiary", "dstAccount", "buildXcmDest", "dstChain", "toAsset", "assetLocation", "amount", "buildXcmMessage", "dstFeeLocation", "dstFee", "dstRefTime", "dstProofSize", "dstCallEncoded", "beneficiary", "feeAsset", "SubstrateExec", "#src", "#dst", "src", "dst", "srcAccount", "dstAccount", "dstCall", "transfer", "opts", "srcApi", "srcAsset", "dstApi", "dstChain", "dstCuurrency", "dstAsset", "dstDecimals", "dstFeeLocation", "dstCallBinary", "Binary", "dstPaymentInfo", "dstFeeAmount", "dstFee", "AssetAmount", "dstRefTime", "dstProofSize", "transactXcmDest", "buildXcmDest", "transactXcmMessage", "buildXcmMessage", "transactTx", "calls", "swapTxHash", "swapBinary", "swapTx", "transferCall", "transferBinary", "transferTx", "decoded", "c", "batchTx", "batchTxEncoded", "CallType", "dryRunResult", "getErrorFromDryRun", "e", "Asset", "AssetAmount", "CallType", "Binary", "concatMap", "catchError", "distinctUntilChanged", "firstValueFrom", "map", "throwError", "addr", "multiloc", "AssetAmount", "acc", "enums", "Blake2256", "u32", "toHex", "fromHex", "Enum", "Ss58Addr", "addr", "SubstrateService", "_SubstrateService", "chain", "ed", "result", "asset", "decimals", "AssetAmount", "account", "amount", "beneficiary", "accountNextId", "accountNextIdBytes", "u32", "stringToU8a", "str", "entropy", "fromHex", "hash", "Blake2256", "toHex", "tx", "rawOrigin", "Enum", "origin", "raw", "enums", "config", "info", "acc", "dryRunResult", "getDeliveryFeeFromDryRun", "error", "getErrorFromDryRun", "args", "dest", "interior", "multiloc", "parachain", "saPub", "interiorValue", "SubstratePlatform", "#substrate", "chain", "SubstrateService", "fee", "substrate", "asset", "account", "_amount", "feeBalance", "config", "txOptions", "Asset", "extrinsic", "extrinsicCall", "callData", "Binary", "CallType", "dryRunResult", "error", "getErrorFromDryRun", "e", "networkFee", "deliveryFee", "params", "normalizeAssetAmount", "ob", "firstValueFrom", "module", "func", "args", "transform", "map", "value", "concatMap", "b", "distinctUntilChanged", "prev", "curr", "balance", "AssetAmount", "catchError", "err", "throwError", "decimals", "dex", "amount", "multiloc", "Binary", "Enum", "SubstrateSigner", "#chain", "#signer", "chain", "signer", "call", "observer", "api", "callData", "opts", "tx", "event", "err", "asset", "location", "pallet", "index", "CallType", "Wh", "Transaction", "SUI_CLOCK_OBJECT_ID", "toBase64", "encoding", "serialize", "toChainId", "deserialize", "getPackageId", "getTokenCoinType", "fromBase64", "resolveCommandsTyped", "root", "opts", "inputs", "cmds", "numbers", "decode32As", "emitNum", "v", "pureToTyped", "b64", "b", "le", "n", "i", "x", "inputToTyped", "idx", "so", "oo", "mapArg", "arg", "c", "s", "coinOut", "amtOut", "t", "SuiClaim", "#chain", "chain", "from", "vaaRaw", "ctxWh", "Wh", "client", "vaaBytes", "encoding", "vaa", "deserialize", "coreBridgeObjectId", "tokenBridgeObjectId", "coinType", "getTokenCoinType", "toChainId", "coreBridgePackageId", "tokenBridgePackageId", "getPackageId", "tx", "Transaction", "verifiedVAA", "serialize", "SUI_CLOCK_OBJECT_ID", "tokenBridgeMessage", "relayerReceipt", "coins", "txBytes", "txJson", "commands", "resolveCommandsTyped", "toBase64", "CallType", "AssetAmount", "CallType", "toBase64", "distinctUntilChanged", "finalize", "shareReplay", "Subject", "SuiBalance", "client", "config", "SUI_TYPE_ARG", "NATIVE_DECIMALS", "Native", "SuiBalance", "address", "balance", "SUI_TYPE_ARG", "SuiBalanceFactory", "client", "config", "Native", "SuiPlatform", "#client", "chain", "account", "_amount", "_feeBalance", "config", "transaction", "txBytes", "txJson", "commands", "resolveCommandsTyped", "toBase64", "CallType", "sim", "feeBalance", "gasUsed", "computation", "storage", "mist", "asset", "query", "SuiBalanceFactory", "balance", "decimals", "AssetAmount", "subject", "Subject", "observable", "shareReplay", "run", "intervalId", "disconnect", "unsub", "finalize", "distinctUntilChanged", "prev", "curr", "Ed25519Keypair", "Transaction", "SuiSigner", "#chain", "#wallet", "chain", "wallet", "call", "observer", "from", "data", "client", "transaction", "result", "signed", "exec", "err", "PlatformAdapter", "chain", "ChainType", "evmChain", "EvmPlatform", "solanaChain", "SolanaPlatform", "suiChain", "SuiPlatform", "parachain", "SubstratePlatform", "account", "amount", "feeBalance", "config", "asset", "addr", "AssetAmount", "Parachain", "acc", "big", "big", "Big", "calculateMax", "balance", "fee", "min", "ed", "result", "calculateMin", "formatEvmAddress", "address", "chain", "formatAmount", "decimals", "amount", "addr", "AssetAmount", "Parachain", "big", "EvmAddr", "addr", "DataProcessor", "adapter", "config", "chain", "Parachain", "SubstrateService", "address", "route", "source", "asset", "assetId", "account", "formatEvmAddress", "balanceConfig", "min", "minAssetId", "minBalanceConfig", "decimals", "balance", "big", "AssetAmount", "EvmAddr", "addr", "DataOriginProcessor", "DataProcessor", "adapter", "config", "ctx", "amount", "sender", "source", "transfer", "transferAmount", "chain", "route", "destination", "transact", "feeAmount", "feeAsset", "feeDecimals", "AssetAmount", "big", "feeConfigBuilder", "breakdown", "address", "asset", "feeAssetId", "account", "formatEvmAddress", "feeBalanceConfig", "networkFee", "fee", "extraFee", "formatAmount", "totalFee", "feeAssetConfig", "Parachain", "contract", "extrinsic", "program", "move", "messageId", "SubstrateService", "callable", "ctxTransactBase", "context", "cfg", "substrate", "submittable", "fromChain", "fromAddr", "mda", "acc", "paymentInfo", "encodedTx", "transactFee", "transactFeeBalance", "decimals", "DataReverseProcessor", "DataProcessor", "adapter", "config", "AssetAmount", "FeeSwap", "ctx", "source", "transact", "fee", "asset", "decimals", "amount", "cfg", "route", "hasNotEnoughDestFee", "hasEnoughReservesToSwap", "isSwappable", "isSufficientAssetTransfer", "EvmAddr", "addr", "Wallet", "configService", "transferValidations", "asset", "srcAddress", "srcChain", "dstAddress", "dstChain", "transfer", "ConfigBuilder", "dstCall", "opts", "src", "dst", "srcSub", "dstSub", "SubstrateService", "exec", "SubstrateExec", "acc", "dstAsset", "fees", "feesFmt", "configs", "srcConf", "dstConf", "srcAdapter", "PlatformAdapter", "dstAdapter", "DataOriginProcessor", "DataReverseProcessor", "validator", "TransferValidator", "srcBalance", "srcFeeBalance", "srcDestinationFee", "srcDestinationFeeBalance", "srcMin", "dstBalance", "dstMin", "source", "destination", "dstFee", "dstFeeBreakdown", "initAmount", "ctx", "swap", "FeeSwap", "srcFee", "srcFeeSwap", "srcDestinationFeeSwap", "dstEd", "min", "calculateMin", "srcEd", "max", "calculateMax", "amount", "copyCtx", "big", "target", "fee", "feeBreakdown", "srcFeeAmount", "address", "chain", "observer", "chainRoutes", "adapter", "observables", "balance", "assetId", "account", "formatEvmAddress", "balanceConfig", "ob", "combineLatest", "debounceTime", "ConfigBuilder", "TransferBuilder", "wallet", "assets", "asset", "sources", "srcChain", "destinations", "dstChain", "routes", "destinationAssets", "isAssetSelect", "isTagSelect", "build", "srcAddress", "dstAddress", "dstAsset", "tag", "configs", "Precompile", "DEFAULT_URL", "WormholeScan", "baseUrl", "api", "params", "wormholeId", "url", "txHash", "resp", "payload", "payloadType", "toAddress", "toChain", "nativeToAddress", "acc", "mrl", "ChainType", "Parachain", "Precompile", "Wormhole", "encoding", "keccak256", "deserialize", "WhStatus", "REDEEM_THRESHOLD", "WormholeTransfer", "config", "parachainId", "WormholeScan", "configChains", "toDate", "fromDate", "toISO", "address", "mda", "acc", "result", "o", "content", "payload", "standarizedProperties", "status", "fromChain", "c", "Parachain", "toAddress", "tokenAddress", "toChain", "Wormhole", "redeem", "timestamp", "vaaRaw", "ChainType", "evmClaim", "EvmClaim", "from", "solanaClaim", "SolanaClaim", "to", "operations", "Precompile", "toParachain", "payloadHex", "mrl", "sourceChain", "viaChain", "claim", "SubstrateClaim", "emittedAt", "vaaBytes", "encoding", "vaa", "deserialize", "keccak256", "operation"]
7
- }
@@ -1,8 +0,0 @@
1
- import { ContractConfig, Erc20Client, EvmClient } from '@galacticcouncil/xc-core';
2
- import { EvmBalance } from './EvmBalance';
3
- export declare class Erc20 extends EvmBalance {
4
- readonly erc20: Erc20Client;
5
- constructor(client: EvmClient, config: ContractConfig);
6
- getBalance(): Promise<bigint>;
7
- getDecimals(): Promise<number>;
8
- }
@@ -1,10 +0,0 @@
1
- import { ContractConfig, EvmClient } from '@galacticcouncil/xc-core';
2
- export declare abstract class EvmBalance {
3
- readonly client: EvmClient;
4
- readonly config: ContractConfig;
5
- constructor(client: EvmClient, config: ContractConfig);
6
- private validateClient;
7
- private validateConfig;
8
- abstract getBalance(): Promise<bigint>;
9
- abstract getDecimals(): Promise<number>;
10
- }
@@ -1,5 +0,0 @@
1
- import { ContractConfig, EvmClient } from '@galacticcouncil/xc-core';
2
- import { EvmBalance } from './EvmBalance';
3
- export declare class EvmBalanceFactory {
4
- static get(client: EvmClient, config: ContractConfig): EvmBalance;
5
- }
@@ -1,5 +0,0 @@
1
- import { EvmBalance } from './EvmBalance';
2
- export declare class Native extends EvmBalance {
3
- getBalance(): Promise<bigint>;
4
- getDecimals(): Promise<number>;
5
- }
@@ -1,2 +0,0 @@
1
- export * from './EvmBalance';
2
- export * from './EvmBalanceFactory';
@@ -1,5 +0,0 @@
1
- import { SolanaBalance } from './SolanaBalance';
2
- export declare class Native extends SolanaBalance {
3
- getBalance(): Promise<bigint>;
4
- getDecimals(): Promise<number>;
5
- }
@@ -1,11 +0,0 @@
1
- import { SolanaQueryConfig } from '@galacticcouncil/xc-core';
2
- import { Connection } from '@solana/web3.js';
3
- export declare abstract class SolanaBalance {
4
- readonly connection: Connection;
5
- readonly config: SolanaQueryConfig;
6
- constructor(connection: Connection, config: SolanaQueryConfig);
7
- private validateConnection;
8
- private validateConfig;
9
- abstract getBalance(): Promise<bigint>;
10
- abstract getDecimals(): Promise<number>;
11
- }
@@ -1,6 +0,0 @@
1
- import { SolanaQueryConfig } from '@galacticcouncil/xc-core';
2
- import { Connection } from '@solana/web3.js';
3
- import { SolanaBalance } from './SolanaBalance';
4
- export declare class SolanaBalanceFactory {
5
- static get(connection: Connection, config: SolanaQueryConfig): SolanaBalance;
6
- }
@@ -1,9 +0,0 @@
1
- import { SolanaQueryConfig } from '@galacticcouncil/xc-core';
2
- import { Connection } from '@solana/web3.js';
3
- import { SolanaBalance } from './SolanaBalance';
4
- export declare class Token extends SolanaBalance {
5
- constructor(connection: Connection, config: SolanaQueryConfig);
6
- getBalance(): Promise<bigint>;
7
- getDecimals(): Promise<number>;
8
- private validateToken;
9
- }
@@ -1,2 +0,0 @@
1
- export * from './SolanaBalance';
2
- export * from './SolanaBalanceFactory';
@@ -1,5 +0,0 @@
1
- import { SuiBalance } from './SuiBalance';
2
- export declare class Native extends SuiBalance {
3
- getBalance(): Promise<bigint>;
4
- getDecimals(): Promise<number>;
5
- }