Skip to content

FraxFinance/fraxtal-lz-hop

Repository files navigation

Specification

RemoteHop

Purpose: User wants to move [(s)frxUSD, (s)frxETH, FXS, FPI] from chain A to chain B via LZ.

  1. User sends OFT to RemoteHop on Chain A
    • If Chain B == Fraxtal
      1. Chain A RemoteHop sends OFT to recipient on Fraxtal
    • If Chain B != Fraxtal
      1. Chain A RemoteHop sends OFT to Fraxtal Remotehop
      2. Fraxtal Remotehop sends OFT to recipient on chain B.

MintRedeemHop

Purpose: User wants to convert their frxUSD to sfrxUSD (or vise versa) on chain A at the best provided rate

  1. User sends OFT to MintRedeemHop on chain A
  2. Chain A MintRedeemHop sends OFT to Fraxtal MintRedeemHop
  3. Fraxtal MintRedeemHop either deposits or redeems (depending if the OFT is frxUSD or sfrxUSD) to the alternate OFT
  4. Fraxtal MintRedeemHop sends newly received token back to user on chain A

How to use

Interfaces

interface IERC20 {
    function approve(address spender, uint256 amount) external;
}
interface IOFT {
    function token() external view returns (address);
}
struct MessagingFee {
    uint256 nativeFee;
    uint256 lzTokenFee;
}
interface IRemoteHop {
    function quote(address oft, uint32 dstEid, bytes32 toAsBytes32, uint256 amount) external view returns (MessagingFee memory fee);
    function sendOFT(address oft, uint32 dstEid, bytes32 toAsBytes23, uint256 amount) external payable;
}
interface IMintRedeemHop {
    function quote(address oft, bytes32 toAsBytes32, uint256 amount) external view returns (MessagingFee memory fee);
    function mintRedeem(address oft, uint256 amount) external payable;
}

RemoteHop

// Ethereum WFRAX => (Fraxtal) => Sonic WFRAX

// OFT address found @ https://docs.frax.com/protocol/crosschain/addresses
address oft = 0x04ACaF8D2865c0714F79da09645C13FD2888977f; // WFRAX OFT
address remoteHop = 0x3ad4dC2319394bB4BE99A0e4aE2AbF7bCEbD648E; // See deployed contracts below
uint256 amount = 1e18;
uint32 dstEid = 30332; // Sonic
bytes32 to = bytes32(uint256(uint160(0xb0E1650A9760e0f383174af042091fc544b8356f))); // example

// 1. Quote cost of send
MessagingFee memory fee = IRemoteHop(remoteHop).quote(oft, dstEid, to, amount);

// 2. Approve OFT underlying token to be transferred to the remoteHop 
IERC20(IOFT(oft).token()).approve(remoteHop, amount);

// 3. Send the OFT to destination
IRemoteHop(remoteHop).sendOFT{value: fee.nativeFee}(oft, dstEid, to, amount);

MintRedeemHop

// Sonic frxUSD => (Fraxtal) => Sonic sfrxUSD

// OFT address found @ https://docs.frax.com/protocol/crosschain/addresses
address oft = 0x80Eede496655FB9047dd39d9f418d5483ED600df; // frxUSD OFT
address mintRedeemHop = 0xf6115Bb9b6A4b3660dA409cB7afF1fb773efaD0b; // see deployed contracts below
uint256 amount = 1e18;
bytes32 to = bytes32(uint256(uint160(0xb0E1650A9760e0f383174af042091fc544b8356f))); // example

// 1. Quote cost of send
MessagingFee memory fee = IMintRedeemHop(mintRedeemHop).quote(oft, to, amount);

// 2. Approve OFT underlying token to be transferred to the mintRedeemHop
IERC20(IOFT(oft).token()).approve(mintRedeemHop, amount);

// 3. Convert the frxUSD to sfrxUSD
IMintRedeemHop(mintRedeemHop).mintRedeem{value: fee.nativeFee}(oft, amount);

Deployed Contracts

HopV2 Mainnet

Chain Hop RemoteAdmin
Fraxtal 0xe8Cd13de17CeC6FCd9dD5E0a1465Da240f951536 0xDC3369C18Ff9C077B803C98b6260a186aDE9A426
Arbitrum 0xf307Ad241E1035062Ed11F444740f108B8D036a6 0x03047fA366900b4cBf5E8F9FEEce97553f20370e
Base 0x22beDD55A0D29Eb31e75C70F54fADa7Ca94339B9 0xF333d66C7e47053b96bC153Bfdfaa05c8BEe7307
Ethereum 0xFd3B410b82a00B2651b42A13837204c5e3D92e27 0xa2db46c06e0B643A926ef60d1fEB744A7385a593

Mainnet

Chain RemoteHop MintRedeemHop
Fraxtal 0x2A2019b30C157dB6c1C01306b8025167dBe1803B 0x3e6a2cBaFD864e09e6DAb9Cf035a0AbEa32bc0BC
Sonic 0x3A5cDA3Ac66Aa80573402610c94B74eD6cdb2F23 0xf6115Bb9b6A4b3660dA409cB7afF1fb773efaD0b
Ethereum 0x3ad4dC2319394bB4BE99A0e4aE2AbF7bCEbD648E 0x99B5587ab54A49e3F827D10175Caf69C0187bfA8
Sei 0x3a6F28e8DDD232B02C72C491Bd1626F69D2fb329 0x0255a172d0a060F2bEab3e7c12334dD73cCC26ba
Linea 0x6cA98f43719231d38F6426DB64C7F3D5C7CE7876 0xa71f2204EDDB8d84F411A0C712687FAe5002e7Fb
Mode 0x486CB4788F1bE7cdEf9301a7a637B451df3Cf262 0x7360575f6f8F91b38dD078241b0Df508f5fBfDf9
X-Layer 0x79152c303AD5aE429eDefa4553CB1Ad2c6EE1396 0x45c6852A5188Ce1905567EA83454329bd4982007
Ink 0x7a07D606c87b7251c2953A30Fa445d8c5F856C7A 0x452420df4AC1e3db5429b5FD629f3047482C543C
Arbitrum 0x29F5DBD0FE72d8f11271FCBE79Cb87E18a83C70A 0xa46A266dCBf199a71532c76967e200994C5A0D6d
Optimism 0x31D982ebd82Ad900358984bd049207A4c2468640 0x7a07D606c87b7251c2953A30Fa445d8c5F856C7A
Polygon 0xf74D38A26948E9DDa53eD85cF03C6b1188FbB30C 0x5658e82E330e094627D9b362ed0E137eA06673C4
Avalanche 0x7a07D606c87b7251c2953A30Fa445d8c5F856C7A 0x452420df4AC1e3db5429b5FD629f3047482C543C
BSC 0x452420df4AC1e3db5429b5FD629f3047482C543C 0xdee45510b42Cb0678C8A61D043C698aF66b0d852
Polygon ZkEvm 0x111ddab65Af5fF96b674400246699ED40F550De1 0xc71BF5Ee4740405030eF521F18A96eA14fec802D
Blast 0xe93Cb38f97469eac2f284a87813D0d701b28E58e 0x85b1714b25f40FD5025423124c076476073180b3
Base 0x3Ec3849C33291a9eF4c5dB86De593EB4A37fDe45 0x73382eb28F35d80Df8C3fe04A3EED71b1aFce5dE
Berachain 0xc71BF5Ee4740405030eF521F18A96eA14fec802D 0x983aF86c94Fe3963989c22CeeEb6eA8Eac32D263
Abstract 0xc5e4a0cfef8d801278927c25fb51c1db7b69ddfb 0xa05e9f9b97c963b5651ed6a50fae46625a8c400b
ZkSync 0xc5e4a0cfef8d801278927c25fb51c1db7b69ddfb 0xa05e9f9b97c963b5651ed6a50fae46625a8c400b
Worldchain 0x938d99A81814f66b01010d19DDce92A633441699 0x111ddab65Af5fF96b674400246699ED40F550De1
Unichain 0xc71BF5Ee4740405030eF521F18A96eA14fec802D 0x983aF86c94Fe3963989c22CeeEb6eA8Eac32D263
Plume 0x6cA98f43719231d38F6426DB64C7F3D5C7CE7876 0xa71f2204EDDB8d84F411A0C712687FAe5002e7Fb
Scroll 0xF6f45CCB5E85D1400067ee66F9e168f83e86124E 0x91DDB0E0C36B901C6BF53B9Eb5ACa0Eb1465F558
Aurora 0x53e36c8380ff62d7964bfa4868a0045e58a52344 0x8EbB34b1880B2EA5e458082590B3A2c9Ea7C41A2
Katana 0x5d8EB59A12Bc98708702305A7b032f4b69Dd5b5c 0xF6f45CCB5E85D1400067ee66F9e168f83e86124E
Hyperliquid 0x8EbB34b1880B2EA5e458082590B3A2c9Ea7C41A2 0xb85A8FDa7F5e52E32fa5582847CFfFee9456a5Dc
Stable 0x938Ca0dbaF2876011CD43598b14acA21a6c61b6e 0xA27eCe4f3108655dCE7d8aD684B780a2163928A1
Monad 0x40f66fff44dbbee88058185f2cfe287558d7e532 0x92e6892706053ee85fc1178affcb3803118d2c4f

Testnet

Chain RemoteHop
Fraxtal 0xd593Df4E2E3156C5707bB6AE4ba26fd4A9A04586
Eth Sepolia 0xa46A266dCBf199a71532c76967e200994C5A0D6d
Arb Sepolia 0x7a07D606c87b7251c2953A30Fa445d8c5F856C7A

About

Fraxtal LayerZero Hop Contracts

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors