Go to file
Reptile dbc7d7d10f
Add evm integration tests (#9)
* evm: rename 00_environment.ts

* evm: add IUSDC.sol

* evm: add two anvil procs

* evm: add eth to avax test

* evm: add test failure cases

* evm: add mock contract to test redemptions

* evm: test clean up

* Add testnet governance upgrade script

* Remove typo in deploy_mock_contracts.sol

* evm: fix foundry.toml

* Remove null check in test

Co-authored-by: A5 Pickle <a5-pickle@users.noreply.github.com>
Co-authored-by: gator-boi <gator-boi@users.noreply.github.com>
2022-11-22 10:15:45 -06:00
evm Add evm integration tests (#9) 2022-11-22 10:15:45 -06:00
DESIGN.md Write design document rough draft (#12) 2022-11-21 09:02:59 -06:00
LICENSE Add LICENSE 2022-10-18 16:04:37 +00:00
README.md evm: add forge tests (#6) 2022-11-10 17:21:32 -06:00

README.md

wormhole-circle-integration

Details

This repo demonstrates how to send USDC cross-chain (with additional instructions to be used by a contract) by using Wormhole's generic-messaging layer and by interacting with Circle's Cross-Chain Transfer Protocol.

Compiling contracts

Install Foundry tools, which includes forge, anvil and cast CLI tools.

cd evm
make build

Testnet Deployment

cd evm

# goerli
. env/eth-goerli-testnet.env && PRIVATE_KEY=put_your_private_key_here bash shell-scripts/deploy_circle_integration.sh

# fuji
. env/avax-fuji-testnet.env && PRIVATE_KEY=put_your_private_key_here bash shell-scripts/deploy_circle_integration.sh

Deployed Contract Addresses

goerli: 0xdbedb4ebd098e9f1777af9f8088e794d381309d1
fuji: 0x3e6a4543165aaecbf7ffc81e54a1c7939cb12cb8

Structs

struct TransferParameters {
    address token;
    uint256 amount;
    uint16 targetChain;
    bytes32 mintRecipient;
}

struct RedeemParameters {
    bytes encodedWormholeMessage;
    bytes circleBridgeMessage;
    bytes circleAttestation;
}

// payload ID == 1
struct DepositWithPayload {
    bytes32 token;
    uint256 amount;
    uint32 sourceDomain;
    uint32 targetDomain;
    uint64 nonce;
    bytes32 mintRecipient;
    bytes payload;
}

API

function transferTokensWithPayload(
    TransferParameters memory transferParams,
    uint32 batchId,
    bytes memory payload
) public payable returns (uint64 messageSequence)

function redeemTokensWithPayload(
    RedeemParameters memory params
) public returns (DepositWithPayload memory depositWithPayload)