Contract Architecture
Three core contracts, two extensions, and the parameters that govern them.
System Architecture
SolverRegistry <----> IntentReceiptHub <----> DisputeModule
| | |
| - Registration | - Post receipts | - Evidence
| - Bond staking | - V2 extension | - Escalation
| - Slashing | - Disputes | - Arbitration
| - Reputation | - Finalization |
| | |
+--------------------+
|
EscrowVault OptimisticDisputeModule
| - ETH + ERC20 | - Counter-bond window
| - Release/Refund | - Timeout resolution
| - Receipt-linked | - Escalation to arb
ReceiptV2Extension
| - Dual attestation (EIP-712)
| - Privacy commitments
| - Escrow link
Deployed Contracts (Sepolia)
| Contract | Address | Purpose |
|---|---|---|
| SolverRegistry | 0xB6ab964832808E49635fF82D1996D6a888ecB745 ↗ | Solver lifecycle, bonding, slashing, reputation |
| IntentReceiptHub | 0xD66A1e880AA3939CA066a9EA1dD37ad3d01D977c ↗ | Receipt posting, disputes, finalization |
| DisputeModule | 0x144DfEcB57B08471e2A75E78fc0d2A74A89DB79D ↗ | Arbitration for complex disputes |
Protocol Parameters
minimum Bond
0.1 ETH
challenge Window
1 hour
withdrawal Cooldown
7 days
max Jails
3
counter Bond Window
24 hours
arbitration Timeout
7 days
Receipt Structures
V1 Receipt (Single Attestation)
struct IntentReceipt {
bytes32 intentHash;
bytes32 constraintsHash;
bytes32 routeHash;
bytes32 outcomeHash;
bytes32 evidenceHash;
uint64 createdAt;
uint64 expiry;
bytes32 solverId;
bytes solverSig;
}
V2 Receipt (Dual Attestation + Privacy)
struct IntentReceiptV2 {
// ... V1 fields ...
bytes32 metadataCommitment;
string ciphertextPointer;
PrivacyLevel privacyLevel;
bytes32 escrowId;
bytes clientSig; // EIP-712
}
enum PrivacyLevel {
PUBLIC,
SEMI_PUBLIC,
PRIVATE
}
Slashing Distribution
Standard Slashing
User (affected party)80%
Challenger15%
Treasury5%
Arbitration Slashing
User (affected party)70%
Treasury20%
Arbitrator10%
IntentScore Algorithm
On-chain composite score (0–10,000 basis points) computed from execution history. Minimum 10 tasks for a reliable score; new solvers start at 5,000 (50%).
Score = (40% x SuccessRate) + (25% x DisputeWinRate) + (20% x StakeFactor) + (15% x Longevity) - SlashPenalty
| Component | Weight | Calculation |
|---|---|---|
| Success Rate | 40% | successfulTasks / totalTasks |
| Dispute Win Rate | 25% | (wins*100 + partials*50) / totalDisputes |
| Stake Factor | 20% | min(currentBond, 10 ETH) / 10 ETH |
| Longevity | 15% | min(age, 365d) / 365d, halved if inactive 90+ days |
| Slash Penalty | -5% each | slashCount * 500 bps (max 30%) |