Jeff Schroeder 2402e2fbcf ethereum: update foundry config 2 년 전
..
contracts 6825d5ca3a ethereum: adding hash check in verifyVM (#1851) 2 년 전
docs 523a30140f ethereum: token verification instructions 3 년 전
forge-test 8605ef0e5f ethereum: kill warning in TokenImplementation.t 2 년 전
lib 3e051e97b6 ethereum: Init foundry project and add installer for native solc 3 년 전
migrations 9d477e0585 ethereum: EVM fork protection 3 년 전
scripts ed733f8e73 sdk/js: add Sui support 2 년 전
test 6c6b25ab2a add check for the zero address in storeGuardianSet 3 년 전
.dockerignore 41868dec51 ethereum: Add make target to flatten contracts 3 년 전
.env.acala.mainnet 19149e653e Script changes for acala upgrade (#1726) 3 년 전
.env.acala.testnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.arbitrum.mainnet a99c4a1a7c node: arbitrum mainnet deploy changes (#1786) 3 년 전
.env.arbitrum.testnet 87d146a261 Deploy contracts to testnet 3 년 전
.env.aurora.mainnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.aurora.testnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.base.testnet caa71f18a6 Deploy base to testnet (#2422) 2 년 전
.env.celo.mainnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.celo.testnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.fantom.mainnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.fantom.testnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.gnosis.mainnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.gnosis.testnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.karura.mainnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.karura.testnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.klaytn.mainnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.klaytn.testnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.moonbeam.mainnet cda45a85ab Moonbeam mainnet deploy (#1579) 3 년 전
.env.moonbeam.testnet 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.neon.testnet b2fdebb9cb SDK: Redeploy Neon Testnet (#2035) 3 년 전
.env.optimism.mainnet 074c98a952 Optimism mainnet deploy (#1869) 3 년 전
.env.optimism.testnet 0f7ddda602 Optimism testnet deploy (#1661) 3 년 전
.env.sepolia.testnet f9758b38e7 SDK/Node: Sepolia deployment (#2567) 2 년 전
.env.template 9d477e0585 ethereum: EVM fork protection 3 년 전
.env.test 9d477e0585 ethereum: EVM fork protection 3 년 전
.gitignore 41868dec51 ethereum: Add make target to flatten contracts 3 년 전
Dockerfile 8221708ef0 Move from ADD to COPY on Dockerfiles 3 년 전
Makefile 925e6474d7 ethereum: update forge-std in the Makefile 2 년 전
README.md d7b102df70 add EVM contract for batched VAA development 3 년 전
VERIFY.md 60d313b23c ethereum: Add contract verification instructions (#792) 3 년 전
acala-gas-prices a58c5ae950 ethereum: remove wormhole from token name 3 년 전
anvil_fork 520cbbb6ca ethereum: touch up foundry scripts 3 년 전
compare-method-identifiers.sh bac99e912f evm: add token and nft bridge interface (#1710) 3 년 전
copy-from-container.sh c5d90f779c Use /usr/bin/env for shell scripts; web/.dockerignore: node_modules (#159) 4 년 전
devnet_mnemonic.txt 2ea41b8176 [WIP] Pr/drozdziak1/p2w batching/5e704f8b (#877) 3 년 전
foundry f25075d256 ethereum: update foundry wrapper script 2 년 전
foundry.toml 2402e2fbcf ethereum: update foundry config 2 년 전
karura-gas-prices 42d054282a Add script to query karura gas prices 3 년 전
mine.js f184b308a8 ci: quieter eth 3 년 전
package-lock.json af2385c9c6 ethereum: npm install truffle-flattener --save-dev 3 년 전
package.json af2385c9c6 ethereum: npm install truffle-flattener --save-dev 3 년 전
simulate_upgrade effde7f756 ethereum: Implement shutdown for all 3 contracts (fixes #1937) 3 년 전
simulate_upgrades effde7f756 ethereum: Implement shutdown for all 3 contracts (fixes #1937) 3 년 전
truffle-config.js f9758b38e7 SDK/Node: Sepolia deployment (#2567) 2 년 전
truffle-verify-constants.patch 3e23db6331 Add aurora 3 년 전
upgrade b5a8ba2361 ethereum: Add scripts to verify/upgrade all contracts 3 년 전
upgrade_all_testnet b5a8ba2361 ethereum: Add scripts to verify/upgrade all contracts 3 년 전
verify 58cd031ea8 ethereum: Add verify script to match up the deployed bytecode with the 3 년 전
verify_all b5a8ba2361 ethereum: Add scripts to verify/upgrade all contracts 3 년 전

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.

Deploying

To deploy the bridge on Ethereum you first need to compile all smart contracts: npx truffle compile

To deploy you can either use the bytecode from the build/contracts folder or the oz cli oz deploy <Contract> (Documentation).

You first need to deploy one Wrapped Asset and initialize it using dummy data.

Then deploy the Wormhole using the initial guardian key (key_x,y_parity,0) and the address of the previously deployed WrappedAsset. The wrapped asset contract will be used as proxy library to all the creation of cheap proxy wrapped assets.

Testing

For each test run:

Run npx ganache-cli --deterministic --time "1970-01-01T00:00:00+00:00" to start a chain.

Run the all ethereum tests using make test

Run a specific test file using npx truffle test test/wormhole.js

Run a specific test file while skipping compile npx truffle test test/wormhole.js --compile-none

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.

Batched VAAs

To send a transaction that will create multiple VAAs, invoke the sendMultipleMessages method of ethereum/contracts/mock/MockBatchedVAASender.sol with the truffle script:

npx truffle exec scripts/send_batched_vaa.js

or invoke the same script in the tilt devnet:

minikube kubectl -- exec -n wormhole eth-devnet-0 -c tests --  npx truffle exec scripts/send_batched_vaa.js