coinbase / coinbase/agentkit

feat: Hyperlane cross-chain transfers action provider

Open
#1,142 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
1.3k
Forks
815
Avg merge
13h 31m
Merged PRs (30d)
2

Description

### Language Implementation
- [x] Python

### Feature Type
- [x] Action Provider Template

### 🚀 The feature, motivation and pitch

Add a Hyperlane action provider so AgentKit agents can send cross-chain messages and Warp Route token transfers natively, without leaving the agent loop.

Hyperlane is listed in [WISHLIST.md](https://github.com/coinbase/agentkit/blob/main/WISHLIST.md) under *Cross-Chain & Infrastructure* ("Hyperlane cross-chain transfers"), and currently has no PR open or merged.

**Why it matters.** AgentKit already supports any EVM chain via `EvmWalletProvider`, but agents have no first-class way to move value or messages between those chains. Hyperlane is the natural fit because:

1. It is permissionless — no allowlisting needed for new tokens or chains.
2. It is deployed on every chain AgentKit currently targets (Base, Optimism, Arbitrum, Polygon, BSC, Ethereum) via the same canonical `Mailbox` interface.
3. Warp Routes give a uniform interface for bridging ERC-20s (incl. USDC) across these chains.

**Implementation note.** No official Hyperlane Python SDK exists, so the provider will encode calldata directly via `web3.py` against the published Mailbox + Warp Route ABIs (the same approach the existing Aave provider in #865 takes against the Aave Pool ABI). Verified Base addresses from [hyperlane-registry](https://github.com/hyperlane-xyz/hyperlane-registry/blob/main/chains/base/addresses.yaml):

- Mailbox: `0xeA87ae93Fa0019a82A727bfd3eBd1cFCa8f64f1D`
- InterchainGasPaymaster: `0xc3F23848Ed2e04C0c6d41bd7804fa8f89F940B94`

**Proposed scope** (single Python PR following the Aave precedent in #865):

- Send a Warp Route token transfer to a recipient on a destination chain
- Quote the interchain gas payment for a given destination
- Read the delivery status of a dispatched message (`pending`/`delivered`)
- Constants for canonical Mailbox + IGP addresses on Base, Optimism, Arbitrum, Ethereum

TypeScript provider in a follow-up PR after Python lands.

File layout follows the merged Aave action provider in #865 (provider, schemas, constants, utils, README, changelog entry, unit tests with mocked `EvmWalletProvider`).

### Alternatives

- **LayerZero** — wider deployment but per-token `OFT` contracts make a generic action provider harder; not in WISHLIST.
- **Across / Stargate** — application-layer bridges with narrower asset coverage than Hyperlane Warp Routes.
- **Native canonical bridges** (Base, Optimism) — chain-pair specific; would require a separate provider per pair.

### Additional context

Happy to own this end-to-end and follow the merge pattern from #865 (Aave): clean PR, `make format && make lint && make test` green, README entry in alphabetic order, `changelog.d/` entry.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.