Cross-Chain Solver Settlement
checking chain… Coston2 testnet — no real value Fee-free · 0 bps, immutable

A solver gets paid only when the chain can prove they did the work.

A solver posts a bond in FLR, claims a cross-chain job, and executes it on another chain. They get paid only if Flare's Data Connector proves the payment happened — verified on-chain, against a Merkle root the network agreed on. No valid proof, no payment, and the bond is slashed. The contract never takes the solver's word for anything.

Below, you can forge a proof yourself and watch the deployed contract reject it. No wallet, no gas, no signup — your browser talks straight to Coston2.

How the loop works

Six steps. Step 6 is the one that matters.

  1. PostSomeone records a job on-chain: a value, a deadline, a description hash.
  2. BondA solver deposits FLR into the bond vault. Their bond caps the size of job they may take.
  3. ClaimThe solver claims the job. Their bond is locked against it — an under-bonded solver is refused.
  4. ExecuteThe solver makes the payment on the other chain (here, an XRPL testnet payment carrying a reference that binds it to this exact job and this exact solver).
  5. AttestFlare's Data Connector attests the payment. Validators agree a Merkle root covering it.
  6. SettleThe contract verifies the Merkle proof on-chain and checks it binds the right job, amount, solver and time window. Valid → the solver is paid and the bond released. Invalid or late → the bond is slashed.

Try to fake it

This is the whole thesis in one button. Tamper with a real attestation and submit it to the live contract on Coston2.

Proof forgery bench

Starts from the genuine attestation of a real XRPL testnet payment (voting round 1 437 267). Change anything you like, then submit. Your browser ABI-encodes the call and sends eth_call to a public Coston2 node — a real execution against the deployed contract that costs nothing and changes nothing.

Everything here will be refused, including the untouched proof — and that is the honest result. This proof was already spent: it settled job #40 in this transaction, which paid the solver and released their bond. A spent proof cannot be replayed against another job — that refusal is the replay protection doing its job. So the bench shows you the rejection half of the design live; the acceptance half is the transaction linked above, already on chain.

finding a claimed opportunity…

Every rejection you see is produced by the contract at 0x52B11A47d832F43Bc35e014f95dA93c340F5A155, not by this page. This page cannot decide the answer — it only formats what the chain returned.

Live state

Read from Coston2 when you loaded this page. Nothing here is hardcoded.

#StatusValue (drops)SolverReward pot
loading from chain…

What has actually been proven

Four criteria, each demonstrated by a real transaction or a real on-chain refusal. Every hash below is clickable — check them yourself rather than taking this page's word.

AC1 — the bond gate holds

An under-bonded solver is refused; a sufficiently bonded one is allowed. The refusal reverts with InsufficientFreeBond.

claim tx 0xbb8b6e8c…3d4db0

AC2 — the honest path pays

A real XRPL testnet payment, attested by the Data Connector, verified on-chain, and settled. The solver was paid and the bond released. Opportunity #40 reads SETTLED, its reward pot went from 0.1 FLR to zero, and the fee split paid 100% to the solver, 0 to the protocol, 0 to LPs.

settle tx 0x6e8e1826…d2dd45
XRPL payment 0xbea3bd28…ded8a6

AC3 — no proof means the bond is slashed

Two opportunities passed their deadline with no valid proof. Both read DEFAULTED and the full locked bond moved to the slash destination. Check them yourself — read statusOf(6) and statusOf(26) on the registry and you get 5, the defaulted state.

opportunities #6 and #26 · registry 0x2327102e…19cafd

AC4 — a forged proof is rejected (the load-bearing one)

Five forgeries, all aimed at a genuinely claimed opportunity, all refused on-chain: a wholly fabricated proof, a rewritten amount, a rewritten reference, a rewritten sender, and the genuine proof replayed against a different job. Four died at ProofRejectedByFdc — the Merkle verification — and the replay died at PaymentReferenceMismatch. You can reproduce any of them in the bench above.

What this does not claim. This is a proof-of-concept on a testnet. The cross-chain job is a stand-in — it proves the settlement mechanism, not a profitable trade. There is no opportunity-detection engine, no pooled LP capital, and no confidential order matching; those are named as out of scope, not quietly omitted. Nothing here has been audited, and none of it should touch real money in this form.

Docs

Why bother verifying on-chain?

The easy version of this system pays the solver when an off-chain service says the job was done. That service is then the thing you have to trust, and the economic security is decorative. Here the settlement contract fetches Flare's FdcVerification contract through the canonical registry and checks the Merkle proof itself. A solver who lies produces a proof that fails verification, and the deadline then slashes their bond. The bench above exists so you don't have to believe that paragraph.

The checks a proof must survive

After the Merkle verification passes, the contract still refuses the proof unless it binds to this exact job:

CheckRejects with
Merkle proof verifies against the agreed rootProofRejectedByFdc
It is a Payment attestation from the expected source chainWrongAttestationType / WrongSourceId
The payment succeeded and was one-to-onePaymentNotSuccessful / PaymentNotOneToOne
Reference binds this job id and this solverPaymentReferenceMismatch
Amount delivered covers the job valueInsufficientPaymentAmount
Sent by the solver's registered account, to the protocol's accountWrongPaymentSender / WrongPaymentRecipient
Paid after the claim and before the deadlinePaymentBeforeClaim / PaymentAfterDeadline

Contracts

SolverBondVault

Holds FLR bonds. Lock, release and slash are callable only by the registry — there is no owner drain path.

OpportunityRegistry

Posts, claims and expires jobs. Enforces the bond gate at claim time.

Settlement

Verifies the proof and pays or slashes. The fee split is immutable at 0 bps.

Verify any of this yourself

Every read this page makes is a plain JSON-RPC call to a public Coston2 node, with no key. For example, the status of opportunity #40:

Status codes: 0 none · 1 open · 2 claimed · 3 settled · 4 expired · 5 defaulted.