Quickstart
Testnet swap group in fifteen minutes.
Tesseract is MIT-licensed and fully self-hosted. Clone it, run the tests, deploy the contracts, run the relayer, and create your first cross-rollup atomic swap group. No accounts, no hosted service, no API keys.
- 01
Clone and install
Clone the MIT-licensed repository and install the Vyper and Rust toolchains. Everything is self-hosted — there is no hosted service to sign up for.
git clone https://github.com/cryptuon/tesseract cd tesseract # contracts pip install vyper # relayer rustup toolchain install stable
- 02
Run the test suite
Before deploying anything, run the 135-test suite. It covers compilation, tokenomics, access control, safety, and cross-chain integration scenarios.
# compile all seven Vyper contracts + run tests make test # expected on main: 86 passed, 40 xfailed, 9 xpassed
- 03
Deploy the contracts to a testnet
Deploy the seven Vyper contracts to each rollup you want to coordinate — Sepolia, Amoy, and the L2 testnets are supported out of the box.
# deploy to Arbitrum Sepolia + Base Sepolia make deploy NETWORK=arbitrum-sepolia make deploy NETWORK=base-sepolia # note the deployed TesseractBuffer + Coordinator addresses
- 04
Run the relayer
Point the Rust relayer at each chain's RPC and the contract addresses. It monitors events over WebSocket with HTTP failover and persists state in PostgreSQL.
export DATABASE_URL=postgres://localhost/tesseract export RPC_ARBITRUM_SEPOLIA=wss://... export RPC_BASE_SEPOLIA=wss://... cargo run --release --bin relayer
- 05
Create a swap group
Submit a commitment for each leg with a shared swap_group_id and a deadline. Reveal after one block; the relayer coordinates resolution across chains, or the group refunds after the deadline.
# leg A on Arbitrum, leg B on Base, one shared group id GROUP=$(cast keccak "arb-base-demo-001") cast send $BUFFER_ARB "buffer_transaction_with_commitment(bytes32,bytes32,bytes32,uint256,address)" \ $TX_A $COMMIT_A $GROUP $DEADLINE $REFUND cast send $BUFFER_BASE "buffer_transaction_with_commitment(bytes32,bytes32,bytes32,uint256,address)" \ $TX_B $COMMIT_B $GROUP $DEADLINE $REFUND # reveal after 1 block, then the relayer resolves the group
Where to go next
The commit → reveal → resolve lifecycle in depth.
Every capability and parameter, in one place.
Reference documentation on docs.cryptuon.com.
Building something specific? Talk to the team or browse the use cases.