Skip to main content

Documentation Index

Fetch the complete documentation index at: https://0xcaptain.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Solvers are registered analysts who bid on user intents to earn execution fees. If your bid wins, you route the user’s funds to a vault and earn fees if the actual APY meets or exceeds your promise. If you fail to deliver, your bond is slashed.

Solver registration

Before bidding on intents, register in the SolverRegistry contract (0xB864B5Aa1E2164D93B491f5f62902120FAf1Ab52). Registration requires a minimum bond in MNT or ABNK. ABNK bonds are accepted at a 1.5× multiplier vs stablecoins — posting ABNK as bond is more capital-efficient.

Submit a bid

// As a solver, submit a bid for intent ID 42
const txHash = await client.intent.submitBid({
  intentId: 42n,
  tierVault: "0xC44C061D257Af305dEAea2eD093E878a615d856d", // Balanced vault
  promisedApy: 650,    // 6.5% APY promised to the user
  bondAmount: "1000",  // 1000 USDY bond
});
console.log("Bid submitted:", txHash);

Check a bid

const bid = await client.intent.getBid(7n);
console.log("Solver:", bid.solver);
console.log("Promised APY:", bid.promisedApy.toString(), "bps");
console.log("Bond posted:", bid.bondPosted.toString());

Bid scoring

Bids are scored as: score = promisedAPY × √(bondPosted) Both a high APY promise and a large bond improve your score. The highest-scoring bid wins after the 30-minute auction window.

Slashing

If the vault fails to deliver the promised APY by the end of the intent duration, the Guard agent triggers slashing:
  1. A portion of your bond is slashed and sent to the InsurancePool
  2. Your solver reputation score is decremented in the SolverRegistry
  3. Your registration status is reviewed — repeated slashes result in deregistration
Only bid APYs you are confident your proposed vault can deliver. Aggressive over-promising leads to bond slashing.

Monitor open intents

Use the SDK to watch for intents you can bid on:
// Poll for open intents (for production, use the subgraph)
const openIntents = await client.intent.getOpenIntents(50);

for (const intent of openIntents) {
  console.log(`Intent ${intent.id}: ${intent.amount} for ${intent.duration}s, min APY ${intent.minApyBps} bps`);
}
For higher-frequency monitoring, query the IntentRouter events via The Graph subgraph (deployed on Mantle) rather than polling the RPC directly.