Skip to main content

Monad

MonadLIVE

Base layer — every Vessel contract runs here (testnet today)

Status

LIVE

Vessel runs on Monad testnet, as of 2026-08-29. Monad mainnet is not a Vessel deployment target yet; no date for one is published.

What Vessel uses it for

Monad is the settlement layer for everything Vessel does. The tranche tokens, the accrual waterfall, the Reserve, the keeper entry points, and the venue adapter behind IVenue all execute as Monad contracts. There is no off-chain component that holds user funds. If a Vessel action is not a Monad transaction, it is a read.

The dependency is total in a way the other integrations on this site are not. Perpl, Kuru, and Pendle can each fail and leave Vessel degraded. Monad failing leaves Vessel stopped.

What is actually wired today

Per vessel.wtf, the protocol is live on Monad testnet (chain 10143) and is "experimental software in testnet." The testnet app is reached from vessel.wtf; the testnet.vessel.wtf hostname does not resolve as of 2026-08-29 and should not be used.

The public repository at github.com/Lemma-Development-Labs/vessel contains only a README and a LICENSE as of 2026-08-29. No contract source, ABI, or deployment address is published there. Every Vessel contract address on this page is therefore unpublished UNVERIFIED — PENDING GATE-0, and the Addresses section below reflects that rather than filling the gap.

The hedge venue wired to the deployed contracts is SimVenue SIMVENUE — SIMULATED, a simulated venue with an owner-settable funding rate, sitting behind the same IVenue interface a real venue will use. That is a Vessel-side fact, not a Monad one, but it bears on what "live on testnet" means: the chain is real, the funding source is not.

Interface

Monad exposes standard EVM JSON-RPC. Existing Ethereum tooling (Foundry, viem, ethers) works unchanged against either endpoint:

Mainnet chain 143 https://rpc.monad.xyz
Testnet chain 10143 https://testnet-rpc.monad.xyz

Two Monad-specific behaviours change how a Vessel user or keeper should think about a transaction.

Gas is charged on the limit, not on usage. gas_paid = gas_limit × price_per_gas. Monad's leader builds blocks before executing them, so actual consumption is unknown at inclusion time; charging the limit prevents under-priced compute from being used as a denial-of-service vector. The practical consequence: a padded gas limit is money spent, and a wallet that falls back to a huge limit after a failed eth_estimateGas will spend all of it. Keep estimation buffers at or under roughly 10%. A native MON transfer costs exactly 21,000 gas. The full rules, including the 200M block limit, the 30M per-transaction limit, and the 100 MON-gwei minimum base fee, are on the gas pricing page and summarised in the network reference.

State is served with a delay, and blocks have four states. Consensus is decoupled from execution and validates against a state view three blocks old (D=3). A freshly funded account cannot send until its funding is three blocks old, about 1.2 seconds. eth_call and eth_estimateGas simulate against speculative state and return accurate results. Blocks move through Proposed, Voted, Finalized, and Verified, which map onto the RPC block tags:

latest speculative (Proposed)
safe validator-backed (Voted)
finalized irreversible (Finalized)

Block time is 300ms; speculative finality 300ms, full finality 600ms, per current docs.monad.xyz. The Vessel litepaper still prints 400ms/800ms; those figures predate the current network and are not shipped here as current.

Addresses

Vessel's own contracts are unpublished. The rows below render as unverified until the repository or the team publishes them.

Contract (testnet)AddressActions
Vessel EngineUNVERIFIED — PENDING GATE-0
Hull series tokenUNVERIFIED — PENDING GATE-0
Ballast tokenUNVERIFIED — PENDING GATE-0
ReserveUNVERIFIED — PENDING GATE-0
SimVenue (IVenue adapter)UNVERIFIED — PENDING GATE-0

The canonical Monad mainnet contracts below are verified against the MONSKILLS address registry and are the ones a reader is most likely to need alongside Vessel. They are mainnet addresses; Vessel is not on mainnet.

Contract (mainnet)AddressActions
WMON0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A Explorer ↗
USDC0x754704Bc059F8C67012fEd69BC8A327a5aafb603 Explorer ↗
Multicall30xcA11bde05977b3631167028862bE2a173976CA11 Explorer ↗

Testnet token addresses used by Vessel (the USDC the buffer holds, the WMON the spot leg touches) are not published by Vessel and are not listed here. Do not assume the mainnet addresses above carry over; testnet was reset from genesis on 2025-12-16.

Verify it yourself

Confirm you are talking to the chain you think you are. The two commands should return 143 and 10143 respectively:

cast chain-id --rpc-url https://rpc.monad.xyz
# 143

cast chain-id --rpc-url https://testnet-rpc.monad.xyz
# 10143

Confirm code exists at any address before you trust it:

cast code 0xcA11bde05977b3631167028862bE2a173976CA11 --rpc-url https://rpc.monad.xyz

A non-empty hex string means a contract is deployed there; 0x means nothing is.

Explorers, per the current docs.monad.xyz set: monadvision.com and monadscan.com for mainnet, testnet.monadvision.com and testnet.monadscan.com for testnet. Once Vessel publishes addresses, verification on either explorer follows the Monad contract verification guide.

Explorer conflict

viem and ethereum-lists still name testnet.monadexplorer.com as the testnet explorer. Current docs.monad.xyz does not. This site ships the docs.monad.xyz set.

Failure mode

Vessel inherits Monad's liveness wholesale. There is no fallback chain and no off-chain settlement path.

If Monad halts, the hedge freezes exactly where it was. Keepers cannot top up margin, cannot rebalance the delta band, cannot harvest funding. The last committed NAV becomes stale immediately and stays stale until the chain resumes. If the short leg lives on a venue that keeps running while Monad does not, the position is unattended for the duration; the 40%-above-mark liquidation distance and the idle buffer are the only protection, and neither can be adjusted during the halt. How Vessel's contracts treat the gap on resumption (whether accrual is backfilled or skipped) is not documented in any published source UNVERIFIED — PENDING GATE-0.

If Monad reorganises below finalized, any Vessel action that read latest may have acted on state that no longer exists. This is why finality semantics gate irreversible actions: a Hull redemption, a Ballast withdrawal after cooldown, or a keeper's margin transfer should be treated as done only at finalized. latest is fine for display; it is not fine for anything that cannot be undone.

If a public RPC degrades rather than the chain itself, Vessel is unaffected on-chain but keepers and the app lose visibility. The five mainnet and three testnet endpoints listed in the network reference are the mitigation; a keeper pinned to a single endpoint has a single point of failure that Monad itself does not impose.

Nothing in Vessel's design can make it more available than Monad. The honest framing is that Vessel's uptime is Monad's uptime, minus Vessel's own bugs.

Verified from: vessel.wtf · vessel-repo · docs.monad.xyz · monskills/gas · monskills/concepts · monskills/addresses · viem/ethereum-lists · monad.xyz/brand-and-media-kit — Sat Aug 29 2026 00:00:00 GMT+0000 (Coordinated Universal Time) · How we verify this site →