Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wormhole-foundation/example-circle-relayer
https://github.com/wormhole-foundation/example-circle-relayer
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/wormhole-foundation/example-circle-relayer
- Owner: wormhole-foundation
- License: other
- Created: 2022-11-02T20:25:35.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-03-26T01:06:38.000Z (10 months ago)
- Last Synced: 2024-04-01T16:10:17.274Z (10 months ago)
- Language: Solidity
- Size: 418 KB
- Stars: 10
- Watchers: 5
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# WH x CCTP USDC Bridge Example
Please start by reading the [design document](https://github.com/wormhole-foundation/example-circle-relayer/blob/main/DESIGN.md).
## Wormhole-Scaffolding
This repository was generated from the [wormhole-scaffolding](https://github.com/wormhole-foundation/wormhole-scaffolding) template. We recommend using this template as a starting point for cross-chain development on Wormhole.
## Prerequisites
Install [Foundry tools](https://book.getfoundry.sh/getting-started/installation), which include `forge`, `anvil` and `cast` CLI tools.
## Build
Run the following commands to install necessary dependencies and to build the smart contracts:
```shell
cd evm
make dependencies
make build
```## Testing Environment
The testing environments can be found in the following locations:
- [Unit Tests](https://github.com/wormhole-foundation/example-circle-relayer/blob/main/evm/forge-test/CircleRelayer.t.sol)
- [Integration Tests](https://github.com/wormhole-foundation/example-circle-relayer/tree/main/evm/ts-test)First, set the `RPC` variable in `evm/env/testing.env`. Then run the tests with the following commands:
```shell
# solidity-based unit tests
make unit-test# local-validator integration tests written in typescript
make integration-test# unit tests and local-validator integration tests
make test
```## Contract Deployment
Before deploying the contracts, set the `Deployment Variables` and `RPC` for your target networks in the following directories:
- `evm/env/testnet`
- `evm/env/mainnet`Then deploy the contracts by executing the following commands:
```bash
# goerli
. env/testnet/eth.env && shell-scripts/deploy_circle_relayer.sh --private-key put_your_private_key_here# fuji
. env/testnet/avax.env && shell-scripts/deploy_circle_relayer.sh --private-key put_your_private_key_here
```Make sure to deploy all contracts (save the contract addresses) before moving onto the `Initial Contract Setup` section of this README.md.
### Hardware wallet deployment
Alternatively, Foundry supports signing with both Ledger and Trezor wallets.
You might need to specify all three of the following arguments:
- `--ledger` or `--trezor` to select which hardware wallet should be used to sign.
- `--mnemonic-derivation-paths ` to select the path derivation for the account.
- `--sender ` to specify the address of the selected account. Might be necessary to workaround some tx simulation issues.So for example, you would execute:
```bash
# goerli
source env/testnet/eth.env && shell-scripts/deploy_circle_relayer.sh --ledger --mnemonic-derivation-paths your_derivation_path --sender your_address_for_given_path
```to deploy on goerli with a ledger wallet.
## Contract verification
To verify the contract, you need an API token for the corresponding block explorer. The verification script uses `forge verify-contract` which verifies the contract on etherscan-like block explorers.
Ensure that the verification environment variables `RELEASE_EVM_CHAIN_ID` and `RELEASE_CIRCLE_RELAYER_ADDRESS` are set correctly:
- `RELEASE_EVM_CHAIN_ID` must be set to the EIP-155 chain id.
- `RELEASE_CIRCLE_RELAYER_ADDRESS` must be set to the address where you deployed the contract.Then, you only need to run the following:
```bash
# Contract verification
source env/testnet_or_mainnet/your_file.env && shell-scripts/verify_contracts.sh your_api_token
```## Initial Contract Setup
First, copy the `evm/cfg/sampleDeployment.json` file and update the values based on your deployment configuration:
```bash
# start from the evm directory
cd evm
# create the myDeployment.json file
cp cfg/sampleDeployment.json cfg/myDeployment.json
# Set the path of the configuration file in an environment variable that's read by all scripts
export CONFIGURE_CCTP_CONFIG=cfg/myDeployment.json
```Next, register the deployed contracts by running the following command for each target network:
```bash
# register the contracts
source env/testnet_or_mainnet/your_file.env && PRIVATE_KEY=your_private_key yarn register-contracts
```Finally, set up the deployed contracts by running the following command for each target network:
```bash
# set up the contracts
source env/testnet_or_mainnet/your_file.env && PRIVATE_KEY=your_private_key yarn configure-contract \
--setSwapRate --setRelayerFee --setMaxSwapAmount
```Where the three command-line arguments are defined as:
- `--setSwapRate` - Sets the native swap rate for the configured tokens.
- `--setMaxSwapAmount` - Sets the max native swap amount for the configured tokens.
- `--setRelayerFee` - Sets the outbound relayer fee for the configured tokens and chains.### Signing configuration transactions with a hardware wallet
Only signing txs with a Ledger device is supported at this time.
Ensure you've created a deployment configuration file and set `CONFIGURE_CCTP_CONFIG` to its path.```bash
export CONFIGURE_CCTP_LEDGER=true
export CONFIGURE_CCTP_DERIVATION_PATH=your_derivation_path# Register the contracts
source env/testnet_or_mainnet/your_file.env && npx ts-node ts/scripts/registerContracts.ts# Set the swap rate and relayer fee for other chains
source env/testnet_or_mainnet/your_file.env && npx ts-node ts/scripts/configureContract.ts --setSwapRate --setRelayerFee --setMaxSwapAmount
```## Off-Chain Circle Relayer
Copy the sample `.env` file in the `relayer` directory and set the values:
```shell
cp .env.sample .env
```To run the off-chain relayer process, check that the contract addresses are correct in the `relayer/src/circleRelayer/main.ts` file, then run the following commands:
```shell
cd relayer
npm ci
npm run build
npm run start-circle-relayer
```## Off-Chain Price Relayer
Copy the sample `.env` file in the `relayer` directory and set the values (this .env file is shared with the Off-Chain Circle Relayer process):
```shell
cp .env.sample .env
```Copy the `priceRelayerSample.json` file in the `relayer/cfg` directory and set the values:
```shell
cp priceRelayerSample.json priceRelayer.json
```To run the off-chain relayer process, check that the contract addresses are correct in the `relayer/src/priceRelayer/main.ts` file, then run the following commands:
```shell
# only run these if you haven't already for the off-chain circle relayer
cd relayer
npm cinpm run build
npm run start-price-relayer
```