Aaron Clark b866766462 feat: moca testnet (#4550) 3 tuần trước cách đây
..
contracts 6279a1474e EVM/Node: Custom consistency level (#4406) 3 tháng trước cách đây
docs 750645b350 ethereum: rm truffle 1 năm trước cách đây
env b866766462 feat: moca testnet (#4550) 3 tuần trước cách đây
forge-scripts 6279a1474e EVM/Node: Custom consistency level (#4406) 3 tháng trước cách đây
forge-test 6279a1474e EVM/Node: Custom consistency level (#4406) 3 tháng trước cách đây
lib 3e051e97b6 ethereum: Init foundry project and add installer for native solc 3 năm trước cách đây
sh 6279a1474e EVM/Node: Custom consistency level (#4406) 3 tháng trước cách đây
.dockerignore 7885acb9bd Relayer: Ethereum folder Changes for Merging into Main (#3038) 2 năm trước cách đây
.env.test d87024c9df CI: Change chain id for evm devnet node (#3864) 1 năm trước cách đây
.gitignore f290df6b9b Ethereum: deploy with forge (#3862) 1 năm trước cách đây
Dockerfile 39081fa293 update nodejs (#4409) (#4410) 3 tháng trước cách đây
Makefile 1e08acef29 ethereum: remove deleted "--no-commit" flag from forge commands (#4363) 6 tháng trước cách đây
PROOFS.md 406a43d03e ethereum: Add property tests and instructions for running them with KEVM (#2956) 2 năm trước cách đây
README.md 6279a1474e EVM/Node: Custom consistency level (#4406) 3 tháng trước cách đây
VERIFY.md 750645b350 ethereum: rm truffle 1 năm trước cách đây
anvil_fork c9690c9f85 eth: fix unbound variable errors in shell utilities (#4103) 1 năm trước cách đây
compare-method-identifiers.sh bac99e912f evm: add token and nft bridge interface (#1710) 3 năm trước cách đây
foundry ab907d57c0 Tilt/CI: Pin foundry release (#4337) 7 tháng trước cách đây
foundry.toml f290df6b9b Ethereum: deploy with forge (#3862) 1 năm trước cách đây
package-lock.json e90146b321 Update elliptic to >= 6.6.1 (#4272) 8 tháng trước cách đây
package.json e90146b321 Update elliptic to >= 6.6.1 (#4272) 8 tháng trước cách đây
run-kevm.sh 406a43d03e ethereum: Add property tests and instructions for running them with KEVM (#2956) 2 năm trước cách đây
simulate_upgrade 750645b350 ethereum: rm truffle 1 năm trước cách đây
simulate_upgrades effde7f756 ethereum: Implement shutdown for all 3 contracts (fixes #1937) 3 năm trước cách đây
slither.config.json c19e6b972e ethereum: add default slither config 2 năm trước cách đây
upgrade_all_testnet 750645b350 ethereum: rm truffle 1 năm trước cách đây
verify f290df6b9b Ethereum: deploy with forge (#3862) 1 năm trước cách đây
verify_all b5a8ba2361 ethereum: Add scripts to verify/upgrade all contracts 3 năm trước cách đây
wormhole-lemmas.k 406a43d03e ethereum: Add property tests and instructions for running them with KEVM (#2956) 2 năm trước cách đây

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.

Create a symbolic link

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

Deploy the Custom Consistency Level contract

ethereum$ RPC_URL= MNEMONIC= EVM_CHAIN_ID= ./sh/deployCustomConsistencyLevel.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.