cctp
Small Trezor-backed CLI for bridging USDC with
cctp-rs.
The first supported route is Ethereum mainnet to HyperEVM. The CLI uses Alloy's Trezor signer support and defaults to waiting for any permissionless relayer to complete the destination mint.
Install
The source repository, published crate, and installed command are all named
cctp.
Usage
By default this sends standard-finality CCTP v2 transactions. To request fast finality, provide an explicit fee cap:
By default the CLI waits for any relayer to complete the mint on HyperEVM. It uses a read-only HyperEVM provider and does not initialize a destination signer or require HyperEVM gas.
To self-relay, add --self-relay; the relay account must hold HyperEVM gas.
The relay signer defaults to --trezor-account, but can be selected
independently with --relay-trezor-account.
Before any signing prompt, the CLI prints each active Trezor account's role,
derivation path, chain binding, and address. Use --dry-run to inspect those
details without sending transactions.
Configuration
Configuration is treated as a service boundary. Raw CLI/env input is resolved
once into a validated BridgeConfig; execution code consumes that immutable
config instead of reading flags or environment variables directly.
Precedence is:
- CLI flags.
- Environment variables for RPC URLs:
ETHEREUM_RPC_URLandHYPEREVM_RPC_URL. - TOML config file passed with
--config. - Built-in defaults for route, wallet, account, relay mode, and transfer mode.
amount, ethereum_rpc, and hyperevm_rpc must be supplied by CLI, env, or
config file. Example:
= "10.25"
= "https://..."
= "https://..."
= "0x0000000000000000000000000000000000000000"
= 0
= false
= false
= false
Run with:
Domain primitives are shared with cctp-rs where they belong. The CLI uses
CctpV2Route for route validation and UsdcAmount for six-decimal USDC amount
parsing. Wallet backends, RPC endpoints, dry-run behavior, and relay policy stay
in the CLI because they are application concerns.