Solana
| Property | Value |
|---|---|
| CAIP-2 ID | solana:5eykt4UsFv8P8NJdTREpY1vzqKq2Kvdp |
| Testnet | solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1 |
| Block time | ~400ms |
| Confirmation | Commitment levels (confirmed ~400ms, finalized ~13s) |
| Native token | SOL |
Memo strategy — reference key
Cherp generates a random ed25519 keypair at intent creation. The public key serves as thereference. The SDK includes this pubkey as a read-only account in the transfer transaction. Cherp detects fulfillment by monitoring signatures for this reference address — no memo contract or additional wallet-layer cooperation needed.
ATA handling
When the recipient doesn’t have an Associated Token Account (ATA) for the token, the build endpoint includescreateAssociatedTokenAccount atomically with the transfer. The response includes ataRentLamports so the SDK can display it as a line item before signing. Rent is charged to the fulfiller’s SOL balance.
Dropped transactions
Solana transactions expire after ~60 blockhashes (~60s). If Cherp detects that a transaction was dropped, it resets the intent tocreated with retryRequired: true. The SDK prompts the fulfiller to re-sign with a fresh blockhash.
Base
| Property | Value |
|---|---|
| CAIP-2 ID | eip155:8453 |
| Testnet | eip155:84532 (Base Sepolia) |
| Block time | ~2s |
| Confirmation | Block count (10 blocks, ~20s) |
| Native token | ETH |
Memo strategy — singleton memo contract
A minimal immutableMemo contract is deployed once per EVM chain. For ERC-20 transfers, the SDK emits two instructions in one transaction:
token.transfer(recipient, amount)memo.record(bytes32 reference)— zero-value call to singleton
memo.Recorded(bytes32 indexed reference, address indexed sender, bytes32 indexed txHash) events and correlates by tx hash. The reference is a bytes32 encoding of the intent’s reference ID, prefixed pf:.
Tempo
| Property | Value |
|---|---|
| CAIP-2 ID | eip155:4217 |
| Testnet | eip155:42431 (Moderato) |
| Block time | ~500ms |
| Confirmation | Single block (deterministic BFT finality, ~1s end-to-end) |
| Native token | None (fees paid in USDC) |
Memo strategy — TIP-20 transferWithMemo
Tempo’s TIP-20 token standard has transferWithMemo(address to, uint256 amount, bytes32 memo) built in. No external memo contract needed — a single function call handles transfer and memo. Cherp listens for TransferWithMemo events to detect fulfillment.
Important differences
- No native gas token. Transaction fees are denominated in USDC (same token as payment). The SDK must account for this — the fee comes out of the fulfiller’s USDC balance, not a separate ETH balance.
- Never call
eth_getBalance— it returns a fixed placeholder. All balances come fromtoken.balanceOf(address). - Token addresses are resolved at runtime from the Tempo token list registry. Cache with a 24-hour TTL.
- Use viem v2.43.0+ for full Tempo Transaction (type
0x76) support. - Deterministic finality. Simplex BFT provides single-block finality. There are no re-orgs, no probabilistic confirmation windows. A single block confirmation maps to both
confirmedandfinalizedstates simultaneously.