Auto-payable SLAs. Trustlessly enforced.
Combine on-chain uptime evidence with Internet Court to create service level agreements that enforce themselves. No lawyers, no screenshots, no trust required.
Who's Involved
Provider
Matter Labs
Provides ZKSync bridge infrastructure. GenLayer Labs pays them for maintaining bridge uptime.
Services covered
ZKSync Bridge
Provider + Customer
GenLayer Labs
Operates the Asimov, Bradbury, and Studionet networks. Pays Matter Labs. Gets paid by GenLayer Foundation.
Services covered
Asimov RPC, Bradbury RPC, Studionet Node
Customer
GenLayer Foundation
Pays GenLayer Labs for infrastructure uptime across all RPC endpoints and block explorers.
Services covered
All RPCs + Explorers
Deployed Contracts
SLA Verifier and two agreements on Studionet
Agreement Details
Terms for each SLA contract
SLA-001
ActiveGenLayer Labs pays Matter Labs
5,000 USDC/month
Target: 99.50%
GenLayer Labs pays Matter Labs for ZKSync bridge availability. Tiered penalties: 10% for minor breach (< 0.5% shortfall), 25% for major (0.5-2%), 50% for critical (2-5%), 100% for severe (> 5%).
Penalty model: Tiered
SLA-002
ActiveGenLayer Foundation pays GenLayer Labs
20,000 USDC/month
Target: 99.90%
GenLayer Foundation pays GenLayer Labs for all RPC and Explorer infrastructure. Linear penalty: payment reduced proportionally to the shortfall of the worst-performing service.
Penalty model: Linear
How Settlement Works
Period ends
At the end of each billing period, either party can call settle_period() on the SLA Agreement contract. The contract reads uptime data directly from the UptimeMonitor.
Penalty calculated
The SLA Verifier calculates the penalty based on the agreed model (linear, tiered, or full). A 10% protocol fee is taken from any penalty amount.
Dispute or accept
If either party disagrees, they open a case in Internet Court. The court reads internet_court_summary() from the SLA contract and evaluates the on-chain evidence.
Penalty Models
Each agreement chooses one model at creation
| Model | How it works | Example |
|---|---|---|
| Linear | Penalty scales proportionally to the shortfall | Target 99.50%, measured 99.00% = 0.50% shortfall. Penalty = payment x 50/9950 = ~0.5% |
| Tiered | Fixed penalty brackets based on severity | < 0.50% shortfall: 10% penalty 0.50-2.00%: 25% penalty 2.00-5.00%: 50% penalty > 5.00%: 100% penalty |
| Full | Any breach = full payment withheld | Target 99.50%, measured 99.49% = full refund |
Dispute Example
What happens when GenLayer Foundation disputes SLA-002
Statement
"GenLayer Labs failed to maintain 99.90% uptime on Asimov RPC during March 2026, as defined in SLA Agreement SLA-002 deployed at 0x90287aec...D5d548 on Studionet."
Guidelines
- Call
check_compliance(720)on the SLA Agreement contract (720 checks = 30 days at 1/hour) - Read
internet_court_summary()for full terms and settlement history - Verdict is TRUE (breach occurred) if any covered service measured below 9990 bps
Evidence
Foundation submits
SLA Contract: 0x90287aec...D5d548
Method: check_compliance(720)
Asimov RPC uptime: 98.75%
Target: 99.90%
Shortfall: 1.15%
GenLayer Labs responds
Same contract, same data.
Both parties read identical
immutable on-chain records.
No conflicting evidence.
Verdict
True
Breach occurred
False
SLA met
Undetermined
Insufficient data
Linear penalty applied: $20,000 x (115/9990) = $230.23 penalty. 10% protocol fee: $23.02. Net payout to GenLayer Labs: $19,769.77.
Contract Architecture
Two contracts work together
┌──────────────────┐
│ UptimeMonitor │ Source of truth for all health checks
│ (existing) │ get_uptime_stats(service_id, last_n)
└────────┬─────────┘
│ reads
v
┌──────────────────┐
│ SLA Verifier │ Base contract that verifies uptime claims
│ (new) │ calculate_penalty(payment, measured, target, model)
│ │ Takes 10% protocol fee on penalties
└────────┬─────────┘
│ used by
v
┌──────────────────┐ ┌──────────────────┐
│ SLA Agreement │ │ SLA Agreement │
│ SLA-001 │ │ SLA-002 │
│ GL Labs -> ML │ │ GL Found -> Labs│
│ ZKSync bridge │ │ All RPCs + Expl │
│ Tiered penalty │ │ Linear penalty │
└──────────────────┘ └──────────────────┘
│ │
└───── settleable by ────┘
│
┌──────v──────────┐
│ Internet Court │ Reads internet_court_summary()
│ (dispute res.) │ AI jury verifies on-chain data
└─────────────────┘Future Work
Planned features for the SLA system
SLA Templates
Standardized SLA templates, similar to software licenses (MIT, BSD, Apache). Pick a template for your use case: Public API, Infrastructure, Data Pipeline, Bridge. Each comes with reasonable defaults for target uptime, penalty model, and payment curves.
Composable verification
The SLA Verifier is the base layer. Any contract can call it to verify uptime claims. Build custom SLA logic on top: multi-party agreements, escrow with auto-release, insurance pools. The verifier takes a 10% fee, creating a sustainable revenue model for developers.
Payment curves
Beyond linear and tiered: exponential penalties, grace periods, bonus payments for exceeding SLA targets, time-weighted penalties (downtime during peak hours costs more), and rolling window calculations.
Auto-settlement
Automatic period settlement via cron. At the end of each billing cycle, the contract settles itself: reads uptime, calculates penalties, and triggers payment. Disputes go to Internet Court automatically if the penalty exceeds a configurable threshold.
Create Your Own SLA
Deploy an SLA Agreement contract with your terms. You need:
// Constructor arguments
agreement_id: "MY-SLA-001"
customer_name: "Your Company"
provider_name: "Service Provider"
customer_address: 0x...
provider_address: 0x...
sla_verifier_address: 0x8D926888...66D85
uptime_monitor_address: 0x1AE5Eb9a...f2573
service_ids_json: '["studionet_rpc", "asimov_rpc"]'
target_uptime_bps: 9950 // 99.50%
penalty_model: "tiered"
payment_schedule: "monthly"
base_payment_monthly: 10000 // in smallest unit
base_payment_yearly: 100000
effective_from: 1711929600 // Unix timestamp
effective_until: 0 // 0 = no end date
Once deployed, both parties can call settle_period() at the end of each billing cycle. If there is a dispute, either party opens a case in Internet Court pointing to the contract address.
Are You An Agent?
Deploy your own SLA contract programmatically
If you are an AI agent or developer tool, read the full deployment guide with step-by-step CLI commands, constructor arguments, and examples.
Read SKILL.md# Quick start: deploy an SLA agreement on Studionet (free, no tokens needed)
genlayer network set studionet
genlayer account create --name sla-deployer --password ""
genlayer deploy --contract contracts/sla_agreement.py \
--args "MY-SLA-001" "Customer" "Provider" 0xCUST 0xPROV \
0x8D926888B6781d9C987dB89693E771D702366D85 \
0x1AE5Eb9a7A1ece2E873689e0ED33b818dd2f2573 \
'["studionet_rpc"]' 9950 "tiered" "monthly" 5000 55000 1711929600 0