-
ProxyAdmin
Mode
,Sei
,Fraxtal
,X-Layer
,Ink
,Sonic
,Arbitrum
,Optimism
,Polygon
,Avalanche
,BSC
,Polygon zkEvm
0x223a681fc5c5522c85c96157c0efa18cd6c5405c
Base
0xF59C41A57AB4565AF7424F64981523DfD7A453c5
Linea
0x3cf371c128b092b085B7732069cEAF3Fd863F270
ZKSync
,Abstract
0xe59dcae52a4ffa39be99588486c84bc2dc1ba52f
-
Msigs (links to gnosis safe and squad for Solana)
- Chain:
Mode
,Sei
,X-Layer
,Ink
,Sonic
,Arbitrum
,Optimism
,Polygon
,BSC
,Avalanche
,Polygon zkEvm
,Blast
,Berachain
- OFTs
frxUSD
:0x80Eede496655FB9047dd39d9f418d5483ED600df
sfrxUSD
:0x5Bff88cA1442c2496f7E475E9e7786383Bc070c0
frxETH
:0x43eDD7f3831b08FE70B7555ddD373C8bF65a9050
sfrxETH
:0x3Ec3849C33291a9eF4c5dB86De593EB4A37fDe45
FXS
:0x64445f0aecC51E94aD52d8AC56b7190e764E561a
FPI
:0x90581eCa9469D8D7F5D3B60f4715027aDFCf7927
- OFTs
- Chain:
Base
- OFTs
frxUSD
:0xe5020A6d073a794B6E7f05678707dE47986Fb0b6
sfrxUSD
:0x91A3f8a8d7a881fBDfcfEcd7A2Dc92a46DCfa14e
frxETH
:0x7eb8d1E4E2D0C8b9bEDA7a97b305cF49F3eeE8dA
sfrxETH
:0x192e0C7Cc9B263D93fa6d472De47bBefe1Fb12bA
FXS
:0x0CEAC003B0d2479BebeC9f4b2EBAd0a803759bbf
FPI
:0xEEdd3A0DDDF977462A97C1F0eBb89C3fbe8D084B
- OFTs
- Chain:
Linea
- OFTs:
frxUSD
:0xC7346783f5e645aa998B106Ef9E7f499528673D8
sfrxUSD
:0x592a48c0FB9c7f8BF1701cB0136b90DEa2A5B7B6
frxETH
:0xB1aFD04774c02AE84692619448B08BA79F19b1ff
sfrxETH
:0x383Eac7CcaA89684b8277cBabC25BCa8b13B7Aa2
FXS
:0x5217Ab28ECE654Aab2C68efedb6A22739df6C3D5
FPI
:0xDaF72Aa849d3C4FAA8A9c8c99f240Cf33dA02fc4
- OFTs:
- Chain:
ZkSync
,Abstract
- OFTs:
frxUSD
:0xEa77c590Bb36c43ef7139cE649cFBCFD6163170d
sfrxUSD
:0x9F87fbb47C33Cd0614E43500b9511018116F79eE
frxETH
:0xc7Ab797019156b543B7a3fBF5A99ECDab9eb4440
sfrxETH
:0xFD78FD3667DeF2F1097Ed221ec503AE477155394
FXS
:0xAf01aE13Fb67AD2bb2D76f29A83961069a5F245F
FPI
:0x580F2ee1476eDF4B1760bd68f6AaBaD57dec420E
- OFTs:
Frax operates a dual-lockbox design where users can exit their OFT token into the native Frax-asset token on both Ethereum and Fraxtal. Utilizing a dual-lockbox design is a novel solution to bridging as liquidity is unlocked from more than one location. More about this solution is be explained in the docs.
frxUSD
:0x96A394058E2b84A89bac9667B19661Ed003cF5D4
sfrxUSD
:0x88Aa7854D3b2dAA5e37E7Ce73A1F39669623a361
frxETH
:0x9aBFE1F8a999B0011ecD6116649AEe8D575F5604
sfrxETH
:0x999dfAbe3b1cc2EF66eB032Eea42FeA329bBa168
FXS
:0xd86fBBd0c8715d2C1f40e451e5C3514e65E7576A
FPI
:0x75c38D46001b0F8108c4136216bd2694982C20FC
There are two sets of Ethereum lockboxes: (1) the upgradeable lockboxes used in current deployments and (2) legacy immutable lockboxes used to unlock immutable OFT liquidity. You can expect to use (1) unless you are holding OFTs on Base, Blast, or Metis prior to February 2025. Legacy liquidity can be unlocked through Stargate UI.
- Upgradeable (current) Lockboxes
frxUSD
:0x566a6442A5A6e9895B9dCA97cC7879D632c6e4B0
sfrxUSD
:0x7311CEA93ccf5f4F7b789eE31eBA5D9B9290E126
frxETH
:0x1c1649A38f4A3c5A0c4a24070f688C525AB7D6E6
sfrxETH
:0xbBc424e58ED38dd911309611ae2d7A23014Bd960
FXS
:0xC6F59a4fD50cAc677B51558489E03138Ac1784EC
FPI
:0x9033BAD7aA130a2466060A2dA71fAe2219781B4b
- Immutable (legacy) Lockboxes
FRAX
:0x909DBdE1eBE906Af95660033e478D59EFe831fED
sFRAX
:0xe4796cCB6bB5DE2290C417Ac337F2b66CA2E770E
frxETH
:0xF010a7c8877043681D59AD125EbF575633505942
sfrxETH
:0x1f55a02A049033E3419a8E2975cF3F572F4e6E9A
FXS
:0x23432452B720C80553458496D4D9d7C5003280d0
FPI
:0x6Eca253b102D41B6B69AC815B9CC6bD47eF1979d
- Admin: Chain-respective msig
frxUSD
- SPL Token:
GzX1ireZDU865FiMaKrdVB1H6AE8LAqWYCg6chrMrfBw
- As bytes32:
0x5e208a73d5bb1c78e9dbf53badd7299afd6bee9acacdcd4fd668833e53c538ad
- As bytes32:
- SPL Token:
sfrxUSD
- SPL Token:
DUvWQMyASSkLNJFwsMDA4kwxEvmfaqpPGrvUVKtitX45
- As bytes32:
0x8602f005ca65b6da46a3c6ce66ecd1d15be911ca650d5f418d369df184b584cf
- As bytes32:
- SPL Token:
frxETH
- SPL Token:
5sDrwVNiHMM2jC78hRBH1CtysDQYiNKihubgW2zNu8tf
- As bytes32:
0x38dd9e11bbf63835dc61d3cbf259f4221f5987ac92982c96609b99634662dfb3
- As bytes32:
- SPL Token:
sfrxETH
- SPL Token:
58zpC9acE6F4FBtd88L64NoWHJcmzLsQSy5bjz35Ydgv
- As bytes32:
0xbf2f1fc27286a43f25b05bd843a74a5478c4246343fa90c1fcb641a1caf46c61
- As bytes32:
- SPL Token:
FXS
- SPL Token:
zZbQjiRg8uSxZaPu996XuviuZeSY6nsaMuutKZQBJga
- As bytes32:
0x4939035f8dd13d15a9386e28b6705519aa6f488791323466a3c0116a201e51aa
- As bytes32:
- SPL Token:
FPI
- SPL Token:
8xKX8CRH9LxriRUNCPittu1jiovyQQr4EonWQjHZjWyH
- As bytes32:
0xd3cee058686107cc51844f331ee213a33142ab299b5ce473c1cf3a8ddaa721a0
- As bytes32:
- SPL Token:
- Chain:
Ethereum
,Metis
,Blast
,Base
- Chain to convert from native token into OFT: Ethereum
- Admin: Chain-respective msig
- OFTs
FRAX
:0x909DBdE1eBE906Af95660033e478D59EFe831fED
sFRAX
:0xe4796cCB6bB5DE2290C417Ac337F2b66CA2E770E
frxETH
:0xF010a7c8877043681D59AD125EbF575633505942
sfrxETH
:0x1f55a02A049033E3419a8E2975cF3F572F4e6E9A
FXS
:0x23432452B720C80553458496D4D9d7C5003280d0
FPI
:0x6Eca253b102D41B6B69AC815B9CC6bD47eF1979d
- Ensure
PK_OFT_DEPLOYER
andPK_CONFIG_DEPLOYER
are the private keys for0x9C9dD956b413cdBD81690c9394a6B4D22afe6745
and0x0990be6dB8c785FBbF9deD8bAEc612A10CaE814b
, respectively. - Modify
.env
RPC_URL
to the new chain RPC - Add an item to
scripts/L0Config.json:Proxy
with the new chain details (incorrect data will cause the script to fail). source .env && forge script scripts/DeployFraxOFTProtocol.s.sol --rpc-url $RPC_URL
- Verify files created within
scripts/txs/{SOURCE_CHAIN_ID}-{DESTINATION_CHAIN_ID}.json
are correct peers, config- Notably, Fraxtal OFTs are the (s)frxUSD lockbox contracts
source .env && forge script scripts/DeployFraxOFTProtocol.s.sol --rpc-url $RPC_URL --broadcast --slow
- Manually verify each contract on the deployed chain (do not need to verify ImplementationMock)
- Use
contracts/flat
, Solidity version 0.8.22, default compiler, 200 optimizer runs
- Use
- Modify
scripts/tx/{SOURCE_CHAIN_ID}-{DESTINATION_CHAIN_ID}.json
values to so that:\"
=>"
"[
=>[
]"
=>]
TODO: automatically save as strings.
- Submit each newly crafted json to the respective
DESTINATION_CHAIN_ID
msig.
- Ink, Sonic, Arbitrum, Optimism, Polygon, Avalanche, BSC, Polygon zkEvm
- Wire (s)frxETH/FPI to legacy Ethereum lockbox
- Solana
- Configure for Ink, Sonic, Arbitrum, Optimism, Polygon, Avalanche, BSC, Polygon zkEvm, Ethereum (s)frxUSD, Fraxtal lockboxes
We recommend using pnpm
as a package manager (but you can of course use a package manager of your choice):
pnpm install
This project supports both hardhat
and forge
compilation. By default, the compile
command will execute both:
pnpm compile
If you prefer one over the other, you can use the tooling-specific commands:
pnpm compile:forge
pnpm compile:hardhat
Or adjust the package.json
to for example remove forge
build:
- "compile": "$npm_execpath run compile:forge && $npm_execpath run compile:hardhat",
- "compile:forge": "forge build",
- "compile:hardhat": "hardhat compile",
+ "compile": "hardhat compile"
Similarly to the contract compilation, we support both hardhat
and forge
tests. By default, the test
command will execute both:
pnpm test
If you prefer one over the other, you can use the tooling-specific commands:
pnpm test:forge
pnpm test:hardhat
Or adjust the package.json
to for example remove hardhat
tests:
- "test": "$npm_execpath test:forge && $npm_execpath test:hardhat",
- "test:forge": "forge test",
- "test:hardhat": "$npm_execpath hardhat test"
+ "test": "forge test"
Set up deployer wallet/account:
- Rename
.env.example
->.env
- Choose your preferred means of setting up your deployer wallet/account:
MNEMONIC="test test test test test test test test test test test junk"
or...
PRIVATE_KEY="0xabc...def"
- Fund this address with the corresponding chain's native tokens you want to deploy to.
To deploy your contracts to your desired blockchains, run the following command in your project's folder:
npx hardhat lz:deploy
More information about available CLI arguments can be found using the --help
flag:
npx hardhat lz:deploy --help
By following these steps, you can focus more on creating innovative omnichain solutions and less on the complexities of cross-chain communication.