wormhole/ethereum
Aaron Clark 79d918eae1
Mezo mainnet deployment (#4378)
* Mezo mainnet deployment

- Provides .env.mezo.mainnet used for deploying WH Core and Token Bridge
  contracts to Mezo Mainnet

* Add Mezo mainnet values to node and SDK

Adds support for Mezo on mainnet.

    Core contract here
    Token bridge contract here

To enable Mezo on mainnet, use the following config parameters:

```
--mezoRPC YOUR_MEZO_RPC
--mezoContract 0xaBf89de706B583424328B54dD05a8fC986750Da8
```

Verification
~~~
|- go run verify.go --chainId 50
Verifying prod mezo...
   Verifying EVM chain ID for prod mezo ✓
   Verifying finality values for prod mezo ✓
   Verifying contract address for prod mezo ✓
Verifying test mezo...
   Verifying EVM chain ID for test mezo ✓
   Verifying finality values for test mezo ✓
   Verifying contract address for test mezo ✓
~~~

* Update mainnet_tokens_test.go

SeiEVM -> Mezo in comment

---------

Co-authored-by: Adam <20446095+aadam-10@users.noreply.github.com>
2025-05-21 12:09:05 -04:00
..
contracts Ethereum: Move relayer (#3866) 2024-04-11 08:46:36 -04:00
docs ethereum: rm truffle 2024-08-20 16:30:34 -06:00
env Mezo mainnet deployment (#4378) 2025-05-21 12:09:05 -04:00
forge-scripts node: Add Transfer Verifier mechanism (#4169) 2025-01-21 14:18:51 -05:00
forge-test ethereum: fix tests after forge 1.0 release 2025-02-18 08:12:05 -08:00
lib ethereum: Init foundry project and add installer for native solc 2022-08-09 20:02:47 +01:00
sh Deploy Worldchain testnet (#4140) 2024-10-21 16:19:58 -05:00
.dockerignore Relayer: Ethereum folder Changes for Merging into Main (#3038) 2023-06-13 17:01:43 -04:00
.env.test CI: Change chain id for evm devnet node (#3864) 2024-03-29 15:13:45 -04:00
.gitignore Ethereum: deploy with forge (#3862) 2024-04-15 12:13:37 -05:00
Dockerfile Tilt/CI: Pin foundry release (#4337) 2025-04-09 11:58:06 -05:00
Makefile ethereum: remove deleted "--no-commit" flag from forge commands (#4363) 2025-05-01 12:56:55 -04:00
PROOFS.md ethereum: Add property tests and instructions for running them with KEVM (#2956) 2023-09-06 11:24:00 -04:00
README.md ethereum: rm truffle 2024-08-20 16:30:34 -06:00
VERIFY.md ethereum: rm truffle 2024-08-20 16:30:34 -06:00
anvil_fork eth: fix unbound variable errors in shell utilities (#4103) 2024-10-06 16:39:20 -04:00
compare-method-identifiers.sh evm: add token and nft bridge interface (#1710) 2022-10-28 12:28:40 -04:00
foundry Tilt/CI: Pin foundry release (#4337) 2025-04-09 11:58:06 -05:00
foundry.toml Ethereum: deploy with forge (#3862) 2024-04-15 12:13:37 -05:00
package-lock.json Update elliptic to >= 6.6.1 (#4272) 2025-02-27 10:09:10 -05:00
package.json Update elliptic to >= 6.6.1 (#4272) 2025-02-27 10:09:10 -05:00
run-kevm.sh ethereum: Add property tests and instructions for running them with KEVM (#2956) 2023-09-06 11:24:00 -04:00
simulate_upgrade ethereum: rm truffle 2024-08-20 16:30:34 -06:00
simulate_upgrades ethereum: Implement shutdown for all 3 contracts (fixes #1937) 2022-11-23 15:22:52 +00:00
slither.config.json ethereum: add default slither config 2023-10-06 17:13:43 -04:00
upgrade_all_testnet ethereum: rm truffle 2024-08-20 16:30:34 -06:00
verify Ethereum: deploy with forge (#3862) 2024-04-15 12:13:37 -05:00
verify_all ethereum: Add scripts to verify/upgrade all contracts 2022-09-30 09:11:52 -04:00
wormhole-lemmas.k ethereum: Add property tests and instructions for running them with KEVM (#2956) 2023-09-06 11:24:00 -04:00

README.md

Wormhole bridge - ETH

These smart contracts allow to use Ethereum as foreign chain in the Wormhole protocol.

The Wormhole contract is the bridge contract and allows tokens to be transferred out of ETH and VAAs to be submitted to transfer tokens in or change configuration settings.

The WrappedAsset is a ERC-20 token contract that holds metadata about a wormhole asset on ETH. Wormhole assets are all wrapped non-ETH assets that are currently held on ETH.

Building

To build the contracts: make build

Deploying using Forge

Create the ENV file

Before you can deploy the contracts, you need to create a file in ethereum/env with a name like .env.blast for mainnet or .env.blast.testnet for testnet. Substitute the appropriate chain name (as it will be in the worm client) and use the mentioned one as an example.

ethereum$ ln -s env/.env.blast.testnet .env

Deploy the Core contract

ethereum$ MNEMONIC=<redacted> ./sh/deployCoreBridge.sh

Deploy the TokenBridge contract

ethereum$ MNEMONIC=<redacted> WORMHOLE_ADDRESS=<from_the_previous_command> ./sh/deployTokenBridge.sh

Deploy the Core Shutdown contract

ethereum$ MNEMONIC=<redacted> ./sh/deployCoreShutdown.sh

Deploy the TokenBridge Shutdown contract

ethereum$ MNEMONIC=<redacted> ./sh/deployTokenBridgeShutdown.sh

Generate Flattened Source

To generated the flattened source files to verify the contracts using the explorer UI

ethereum$ ./sh/flatten.sh

This will put the flattened files in ethereum/flattened.

Upgrade the Core or TokenBridge Implementation

ethereum$ MNEMONIC= ./sh/upgrade.sh testnet Core blast
ethereum$ MNEMONIC= ./sh/upgrade.sh testnet TokenBridge blast

Registering Other Chains on a New TokenBridge

ethereum$ MNEMONIC= ./sh/registerAllChainsOnTokenBridge.sh <network> <chainName> <tokenBridgeAddress>

Testing

Run all ethereum tests using make test

User methods

submitVAA(bytes vaa) can be used to execute a VAA.

lockAssets(address asset, uint256 amount, bytes32 recipient, uint8 target_chain) can be used to transfer any ERC20 compliant asset out of ETH to any recipient on another chain that is connected to the Wormhole protocol. asset is the asset to be transferred, amount is the amount to transfer (this must be <= the allowance that you have previously given to the bridge smart contract if the token is not a wormhole token), recipient is the foreign chain address of the recipient, target_chain is the id of the chain to transfer to.

lockETH(bytes32 recipient, uint8 target_chain) is a convenience function to wrap the Ether sent with the function call and transfer it as described in lockAssets.

Forge

Some tests and scripts use Foundry. It can be installed via the official installer, or by running

wormhole/ethereum $ ../scripts/install-foundry

The installer script installs foundry and the appropriate solc version to build the contracts.