Glossary
CrossCall Components
CrossCall API
CrossCall's forward-facing API interface. Protocols send transaction calldata and target information (chain, address, cost). The CrossCall API simulates the transaction, wraps it into a userop, calculates total transaction cost, and returns a lock request and userop for the protocol to sign. The signed data is forwarded as a blob to the CrossCall Client.
CrossCall Client
CrossCall's backend infrastructure responsible for lock request execution and userop validation. Currently comprises a private bundler and relayer. Expected to scale to a reward-based model with permissionless bundlers and relayers.
CrossCall Mempool
CrossCall's private mempool storing executable blobs. Each blob contains a proposed bid, execution cost, and signed userop. Solvers read blobs and execute them as ERC-4337 userop bundles on the destination chain.
CrossCall Paymaster
CrossCall's ERC-4337 paymaster. During preOp, it validates the userop and decodes the paymasterAndData field, then constructs the Hyperlane payout message bound to the solver's address. During postOp, it pays the Hyperlane IGP, redeposits used stake to the EntryPoint, and returns residual ETH to the solver.
// PaymasterAndData field (generated by CrossCall API)
struct PaymasterAndData {
address paymaster;
address owner;
uint256 chainId;
address asset;
uint256 amount;
}
Hyperlane Components
Hyperlane Mailbox
The core Hyperlane contract. On origin chains it accepts outbound messages; on destination chains it delivers messages to target contracts by calling their handle function. CrossCall uses the Mailbox to deliver solver payout instructions from the destination chain back to the origin chain.
Hyperlane IGP (Interchain Gas Paymaster)
Quotes and collects the native currency cost required to process a Hyperlane message on the destination chain. The CrossCall Paymaster quotes the IGP cost in preOp and pays it in postOp — ensuring the Hyperlane message is only submitted if the userop succeeds.
Hyperlane Validator
Validators in the Hyperlane network process transactions and relay messages to destination chains. Once a CrossCall payout message is confirmed on the Hyperlane network, validators deliver it to the signer's Escrow contract.
Hyperlane Handler
The handle(uint32, bytes32, bytes) function that target contracts implement to receive Hyperlane messages. The signer's Escrow implements this interface to receive and validate solver payout instructions.
Escrow Components
Escrow
Every signer has a create2-derived Escrow address. The Escrow is a lightweight ERC-1967 proxy that tracks locked and unlocked token balances. Only locked funds are used for solver payouts. When the Escrow receives a Hyperlane handle message, it validates the hash and executes the payout to the solver.
Escrow Factory
The factory contract that initializes a signer's ERC-1967 Escrow using create2. The Escrow address is deterministic and can be computed before deployment.
function createEscrow(
bytes memory _initializer,
bytes32 _salt
) external returns (address proxy) {
bytes memory deploymentData = abi.encodePacked(
type(EscrowProxy).creationCode,
_ESCROWIMPL
);
bytes32 salt = _calcSalt(_initializer, _salt);
assembly ("memory-safe") {
proxy := create2(0x0, add(deploymentData, 0x20), mload(deploymentData), salt)
}
if (proxy == address(0)) revert();
assembly ("memory-safe") {
let succ := call(gas(), proxy, 0, add(_initializer, 0x20), mload(_initializer), 0, 0)
if eq(succ, 0) { revert(0, 0) }
}
return proxy;
}
Escrow Simpleton
The current logic contract deployed behind the Escrow ERC-1967 proxy.
General Terms
| Term | Definition |
|---|---|
| Signer | The user or protocol authorizing a call intent |
| Solver | The actor that executes the signer's userop and is repaid via Hyperlane |
| SCW | Smart Contract Wallet — the signer's ERC-4337-compatible account on the destination chain |
| UserOp | ERC-4337 User Operation — the signed transaction object submitted to the EntryPoint |
| EntryPoint | The ERC-4337 singleton contract that validates and executes userops |
| Call Intent | The combination of ExecutionData + UserOperation that a signer authorizes |
| Executable Blob | A call intent packaged for the CrossCall Mempool, including bid and cost data |
| Lock | Funds held in the signer's Escrow authorized for a specific solver payout |