UNPKG

@molecularlabs/nucleus-frontend

Version:
80 lines 2.64 kB
import { getVaultByKey } from "."; import { getPreviewFee } from "../api/teller"; import { toChainId } from "../api/vault-config"; import { NATIVE_TOKEN_FOR_BRIDGE_FEE } from "../constants"; import { CrossChainTellerBaseAbi } from "../contracts/cross-chain-teller-base-abi"; const prepareBridgeContractArg = ({ bridgeChainIdentifier, userAddress, nativeTokenForBridgeFee = NATIVE_TOKEN_FOR_BRIDGE_FEE }) => { return { chainSelector: bridgeChainIdentifier, destinationChainReceiver: userAddress, bridgeFeeToken: nativeTokenForBridgeFee, messageGas: BigInt(1e5), data: "0x" }; }; const prepareBridgeTransactionData = async ({ vaultKey, bridgeAmount, sourceChainId, destinationChainId, userAddress }) => { const nativeTokenForBridgeFee = NATIVE_TOKEN_FOR_BRIDGE_FEE; const vault = await getVaultByKey(vaultKey); if (!vault) { throw new Error(`Invalid vault key: ${vaultKey}`); } if (!vault.contracts) { throw new Error(`Contracts not configured for vault ${vaultKey}`); } if (!vault.contracts.boringVault) { throw new Error( `BoringVault contract not configured for vault ${vaultKey}` ); } if (!vault.contracts.accountant) { throw new Error(`Accountant contract not configured for vault ${vaultKey}`); } if (!vault.contracts.teller) { throw new Error(`Teller contract not configured for vault ${vaultKey}`); } const normalizedSourceChainId = toChainId(sourceChainId); const sourceChain = vault.withdraw.sourceChains[normalizedSourceChainId]; if (!sourceChain) { throw new Error(`Source chain not configured for vault ${vaultKey}`); } const normalizedDestinationChainId = toChainId(destinationChainId); const destinationChain = sourceChain.destinationChains[normalizedDestinationChainId]; if (!destinationChain) { throw new Error(`Destination chain not configured for vault ${vaultKey}`); } const bridgeChainIdentifier = destinationChain.bridge.chainIdentifier; const bridgeContractArg = prepareBridgeContractArg({ bridgeChainIdentifier, userAddress, nativeTokenForBridgeFee }); const previewFee = await getPreviewFee({ shareAmount: bridgeAmount, bridgeData: bridgeContractArg, contractAddress: vault.contracts.teller, chainId: normalizedSourceChainId }); return { abi: CrossChainTellerBaseAbi, address: vault.contracts.teller, functionName: "bridge", args: [bridgeAmount, bridgeContractArg], chainId: normalizedSourceChainId, value: previewFee }; }; export { prepareBridgeContractArg, prepareBridgeTransactionData }; //# sourceMappingURL=bridge.mjs.map