Orbital Sentinel
Technical Whitepaper v1.0 · March 2026
Autonomous DeFi health monitoring with verifiable on-chain proofs, powered by Chainlink CRE. Built for the Convergence Hackathon 2026.
Abstract
Orbital Sentinel is an autonomous AI agent platform that monitors DeFi protocol health using
Chainlink CRE (Runtime Environment) workflows. Eight independent workflows read live
smart contract state from Ethereum mainnet, compute risk assessments (with AI analysis from
Claude Haiku and GPT-5.3-Codex), and write cryptographic proof hashes to a Solidity registry
on Ethereum Sepolia. A composite intelligence layer synthesizes data from all workflows to
produce ecosystem-aware decisions that no single workflow can make in isolation. The flagship
LINK AI Arbitrage (LAA) workflow is live on the CRE mainnet DON, running
autonomously 7 times per day. Every metric displayed on the dashboard has a corresponding
keccak256 proof hash anchored on-chain, creating an immutable, verifiable audit
trail of protocol health assessments.
Target Protocol: stake.link,
the largest Chainlink liquid staking protocol.
Prize Tracks: CRE & AI, DeFi & Tokenization, Autonomous Agents.
1. The Problem
DeFi dashboards cannot prove their own data.
Traditional DeFi monitoring dashboards pull data from APIs, databases, or third-party aggregators. There is no mechanism to prove that the numbers displayed are authentic, timely, or untampered. A backend server could silently alter metrics, and users would have no way to detect it.
Traditional Dashboards
- Pull from APIs or databases
- No proof data is authentic
- Backend can alter numbers silently
- Users must "trust the server"
- No audit trail of historical accuracy
Orbital Sentinel
- Reads smart contracts directly via CRE
- keccak256 proof hash per snapshot
- Proofs immutable on Sepolia
- Anyone can verify by re-running
- Permanent audit trail on-chain
2. Solution Overview
Autonomous monitoring with verifiable proofs.
Orbital Sentinel reads live DeFi protocol data directly from smart contracts, compresses the key metrics into a cryptographic fingerprint (keccak256 hash), and writes that fingerprint on-chain 7 times per day. Anyone can verify the data is real by re-running the same workflow and checking that their hash matches.
The system monitors eight aspects of the stake.link protocol, the largest Chainlink liquid staking service. Each aspect is an independent CRE workflow that reads on-chain state, classifies risk, and produces a verifiable proof.
Beyond individual monitoring, a composite intelligence layer reads data from all workflows simultaneously and feeds it to an AI analyst (GPT-5.3-Codex). This creates cross-workflow intelligence: the AI can see that treasury health, oracle prices, lending market utilization, and bridge status all interact, and can override isolated signals when the broader ecosystem context demands it.
3. System Architecture
Four layers: CRE workflows read data, AI analyzes risk, proofs anchor on-chain, dashboard displays results.
Data Flow
Phase 1: CRE Execution. Eight workflows read Ethereum mainnet contracts via EVMClient, compute risk metrics, and write JSON snapshots. The LAA workflow runs on the CRE mainnet DON; the other 7 simulate locally.
Phase 1.5: Composite Intelligence. A composite script reads all snapshots and sends cross-workflow context to GPT-5.3-Codex for ecosystem-aware analysis. The AI can override isolated signals.
Phase 2: On-Chain Anchoring. A bridge script (record-all-snapshots.mjs) reads all snapshots, computes keccak256 hashes, and writes them to the SentinelRegistry on Sepolia. Deduplication ensures only changed assessments create new records.
Phase 3: Dashboard. A Next.js 15 application reads HealthRecorded events from Sepolia, stores them in PostgreSQL, and serves per-workflow health data at sentinel.schuna.co.il.
4. Unified Cycle
Three phases, seven times per day: simulate, synthesize, anchor.
7x/day participant CRE as 7 CRE Workflows participant LAA as LAA on CRE DON participant AI as AI Endpoint
GPT-5.3-Codex participant SR as SentinelRegistry
Sepolia rect rgba(55, 91, 210, 0.15) Note over CRON,LAA: Phase 1: Parallel CRE Execution CRON->>CRE: Trigger 7 local simulations CRE->>CRE: Read Ethereum mainnet contracts Note over LAA: LAA runs independently on DON CRE-->>CRON: 7 JSON snapshots saved end rect rgba(79, 212, 229, 0.15) Note over CRON,AI: Phase 1.5: Composite Intelligence CRON->>AI: Send 6 snapshots for cross-workflow analysis AI->>AI: Evaluate ecosystem context AI-->>CRON: Ecosystem-aware recommendation Note over CRON: cre_composite_snapshot.json end rect rgba(0, 200, 83, 0.15) Note over CRON,SR: Phase 2: On-Chain Proof Anchoring CRON->>SR: Write 8 workflow proofs + 1 composite SR-->>CRON: TX confirmed, hashes immutable end
Schedule (UTC)
| Time | Phase 1 | Phase 1.5 | Phase 2 |
|---|---|---|---|
| 00:00 | 7 CRE sims | Composite AI | 9 proofs to Sepolia |
| 03:00 | 7 CRE sims | Composite AI | 9 proofs to Sepolia |
| 07:00 | 7 CRE sims | Composite AI | 9 proofs to Sepolia |
| 10:00 | 7 CRE sims | Composite AI | 9 proofs to Sepolia |
| 14:00 | 7 CRE sims | Composite AI | 9 proofs to Sepolia |
| 17:00 | 7 CRE sims | Composite AI | 9 proofs to Sepolia |
| 21:00 | 7 CRE sims | Composite AI | 9 proofs to Sepolia |
5. The 8 CRE Workflows
Each workflow is an independent CRE project reading live Ethereum mainnet data.
1. Treasury Risk
Local SimStaking pool health, reward runway, queue depth. Claude Haiku AI risk assessment.
keccak256(abi.encode(ts, "treasury", risk, communityFillPct, runwayDays))
Contracts: StakingPool (community + operator), RewardVault, LINK ERC20
2. stLINK Peg Monitor
Local SimChainlink Data Feed reads: stLINK/LINK ratio, LINK/USD, ETH/USD.
keccak256(abi.encode(ts, "feeds", risk, stlinkLinkRatio * 1e6, depegBps * 100))
Feeds: LINK/USD (
0x2c1d...9127c), ETH/USD (0x5f4e...b8419)
3. Morpho Vault Health
Local SimMorpho Blue utilization, on-chain IRM APY, ERC4626 vault TVL.
idToMarketParams() on MorphoBlue to find the IRM contract,
then borrowRateView() on the IRM to get the per-second borrow rate.
supplyAPY = borrowRate * utilization * (1 - protocolFee). No APIs, no oracles: pure smart contract math.
4. Curve Pool Composition
Local SimCurve stLINK/LINK pool balances, TVL, virtual price, gauge incentives.
5. Governance (SLURPs)
Local SimSnapshot proposals with bit-packed encoding for 7 recent SLURPs.
6. CCIP Lane Health
Local SimCCIP Router, OnRamp paused state, TokenPool rate limiters.
7. Token Flows
Local SimERC20 balances across 50+ classified addresses: whales, operators, vesting, team.
8. LINK AI Arbitrage (LAA)
Active on DONCore product. Detects stLINK/LINK arb on Curve. AI signal via GPT-5.3-Codex.
6. Core Product: LINK AI Arbitrage
The arb mechanism: sell stLINK for LINK on Curve (at a premium), deposit LINK to the Priority Pool at 1:1 to mint new stLINK, pocket the spread.
What LAA Reads (via CRE EVMClient, Ethereum Mainnet)
| Contract | Data | Why |
|---|---|---|
| Curve StableSwap NG | balances(), get_dy() at 4 sizes | Pool composition + premium quotes with slippage |
| Priority Pool | poolStatus(), totalQueued() | Gate check (open/draining/closed) + queue depth |
| Arb Vault (optional) | totalStLINKHeld(), minProfitBps() | Vault state for capital management |
Signal Logic
Priority Pool closed? -> pool_closed Vault has zero stLINK? -> no_stlink Premium <= 0 bps? -> unprofitable Premium < minProfitBps? -> wait Otherwise -> execute
What LAA Cannot See Alone
The LAA workflow only reads the Curve pool and Priority Pool. Without the composite intelligence layer, it has no visibility into:
- LINK/USD price movements (price-feeds workflow)
- Community staking pool capacity supporting premium persistence (treasury-risk)
- Morpho utilization locking wstLINK as collateral (morpho-vault-health)
- CCIP lane degradation disrupting cross-chain LINK flows (ccip-lane-health)
- Curve pool imbalance shifts (curve-pool)
This is why the composite intelligence layer exists.
7. Composite Intelligence
Five context workflows feed the LAA override decision. The whole is greater than the parts.
Real Example (Live Mainnet Data, March 2026)
| Isolated LAA signal | EXECUTE (17 bps premium, pool open) |
| Composite recommendation | WAIT (ecosystem under stress) |
| Confidence | 0.94 (all 5 context workflows loaded) |
| Optimal swap size | 500 stLINK (reduced from 5,000) |
How Each Workflow Influences LAA
| Workflow | Signal | Impact on LAA |
|---|---|---|
| price-feeds | LINK/USD, depeg bps | 17 bps arb means nothing if LINK drops 5% during cycle |
| treasury-risk | Pool fill, queue depth | 100% fill = premium persists. 365K queue = slow recycling |
| morpho-vault | Utilization % | 89.38% = wstLINK locked as collateral = less sell pressure |
| ccip-lanes | Lane status | Degraded lanes restrict cross-chain LINK flows |
| curve-pool | Imbalance, TVL | Deep imbalance + active gauge = structural premium |
Composite Proof Hash
The composite proof encodes metrics from all 6 data sources into a single keccak256 hash:
encodeAbiParameters( 'uint256 ts, string wf, string risk, uint256 premiumBps, uint256 linkUsd, uint256 communityFillPct, uint256 queueLink, uint256 morphoUtil, uint256 ccipOk, uint256 curveImbalance, uint256 confidence', [timestamp, 'composite', risk, ...metrics], )
This creates an on-chain proof of cross-workflow AI reasoning: verifiable data from 6 CRE sources compressed into one tamper-proof record.
8. On-Chain Proof System
Each workflow encodes domain-specific metrics into a single keccak256 hash written to Sepolia.
Why Hashes Instead of Raw Data?
Storing the full snapshot on-chain would cost hundreds of dollars in gas per write. A keccak256 hash is always 32 bytes regardless of input size, costing ~21,000 gas (~$0.01 on Sepolia, ~$2-5 on mainnet). The hash is a deterministic fingerprint: if even one metric changes, the hash is completely different.
Per-Workflow Hash Fields
| Workflow | Encoded Fields | Risk Level |
|---|---|---|
| treasury | ts, "treasury", risk, communityFillPct, runwayDays | treasury:ok|warning|critical |
| feeds | ts, "feeds", risk, stlinkLinkRatio*1e6, depegBps*100 | feeds:ok|warning|critical |
| morpho | ts, "morpho", risk, utilization*1e6, totalSupply | morpho:ok|warning|critical |
| curve | ts, "curve", risk, imbalancePct, tvlUsd | curve:ok|warning|critical |
| governance | ts, "governance", risk, activeProposals, urgentProposals | governance:ok|warning|critical |
| ccip | ts, "ccip", risk, okLanes, totalLanes | ccip:ok|warning|critical |
| flows | ts, "flows", risk, totalSdlTracked, addressCount | flows:ok|warning|critical |
| laa | ts, "laa", risk, premiumBps, linkBalance | laa:ok|warning|critical |
| composite | ts, "composite", risk, premiumBps, linkUsd, fillPct, queue, morphoUtil, ccipOk, curveImbalance, confidence | composite:ok|warning|critical |
uint256 (Solidity has no floating-point numbers).
9. SentinelRegistry Contract
52 nSLOC. Append-only. Owner-gated. Deduplicated. Audited.
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
contract OrbitalSentinelRegistry {
struct Record {
bytes32 snapshotHash;
string riskLevel;
uint256 timestamp;
address recorder;
}
Record[] public records;
mapping(bytes32 => bool) public recorded;
address public owner;
address public pendingOwner;
event HealthRecorded(bytes32 indexed snapshotHash, string riskLevel, uint256 ts);
error NotOwner(); error AlreadyRecorded();
error EmptyRiskLevel(); error RiskLevelTooLong();
modifier onlyOwner() { if (msg.sender != owner) revert NotOwner(); _; }
constructor() { owner = msg.sender; }
function recordHealth(bytes32 snapshotHash, string calldata riskLevel)
external onlyOwner
{
if (recorded[snapshotHash]) revert AlreadyRecorded();
if (bytes(riskLevel).length == 0) revert EmptyRiskLevel();
if (bytes(riskLevel).length > 256) revert RiskLevelTooLong();
recorded[snapshotHash] = true;
records.push(Record(snapshotHash, riskLevel, block.timestamp, msg.sender));
emit HealthRecorded(snapshotHash, riskLevel, block.timestamp);
}
function count() external view returns (uint256) { return records.length; }
function latest() external view returns (Record memory) {
require(records.length > 0);
return records[records.length - 1];
}
}
Key Security Properties
10. Verification Guide
How to independently verify that on-chain proofs match real protocol data.
What Proofs Prove
- Data integrity: The hash is a deterministic fingerprint of exact metrics. Modification of any field produces a different hash.
- Temporal ordering: Sepolia block timestamps provide an unforgeable record of when each assessment was made.
- Risk classification: The risk level string is stored in plaintext, creating a queryable health history.
Step-by-Step Verification
Step 1: Get the snapshot data
Each workflow produces a JSON file (e.g., cre_treasury_snapshot.json) with generated_at_utc and the relevant metrics.
Step 2: Reproduce the hash
import { keccak256, encodeAbiParameters, parseAbiParameters } from 'viem';
// Example: treasury snapshot
const ts = BigInt(Math.floor(
new Date('2026-03-01T01:44:17Z').getTime() / 1000
));
const fillPct = BigInt(Math.round(100 * 10000)); // 100% x 10,000
const runway = BigInt(Math.round(572.84 * 100)); // days x 100
const encoded = encodeAbiParameters(
parseAbiParameters(
'uint256 ts, string wf, string risk, uint256 fillPct, uint256 runway'
),
[ts, 'treasury', 'critical', fillPct, runway],
);
const hash = keccak256(encoded);
// Compare with on-chain snapshotHash
Step 3: Check on-chain
const logs = await publicClient.getLogs({
address: '0x35EFB15A46Fa63262dA1c4D8DE02502Dd8b6E3a5',
event: {
type: 'event',
name: 'HealthRecorded',
inputs: [
{ name: 'snapshotHash', type: 'bytes32', indexed: true },
{ name: 'riskLevel', type: 'string' },
{ name: 'timestamp', type: 'uint256' },
],
},
});
// If your computed hash matches a snapshotHash from logs,
// the data is verified.
11. Security Audit
Enhanced 9-phase methodology. 32 tests. 80,000 fuzz iterations. Zero critical findings.
| Auditor | Claude Opus 4.6 (automated + manual review) |
| Date | 2026-03-01 |
| Contract | SentinelRegistry.sol (52 nSLOC) |
| Solidity | 0.8.19 | Paris EVM | Optimizer: off |
| Static Analysis | Slither v0.11.5 (0 findings) + Aderyn v0.6.8 (2 Low, by-design) |
Findings Summary
| ID | Severity | Status | Description |
|---|---|---|---|
| F-1 | Medium | FIXED | No access control: added owner + onlyOwner modifier |
| F-2 | Low | Acknowledged | Unbounded records[] array growth (acceptable on Sepolia) |
| F-3 | Low | FIXED | No duplicate prevention: added recorded mapping |
| F-4 | Low | FIXED | Unspecific pragma: locked to 0.8.19 |
| F-5 | Info | FIXED | No riskLevel validation: added non-empty + 256B max |
| F-6 | Info | Acknowledged | Optimizer disabled (Sepolia, acceptable) |
| F-7 | Info | Acknowledged | No upgrade path (by design for immutability) |
Test Coverage
12. Trust Model
Current hackathon demo vs. production DON attestation.
Current (Hackathon Demo)
CRE workflow (local simulate) produces real mainnet data. A single deployer key signs all proof transactions to Sepolia. Data is verifiable (anyone can recompute the hash) but not yet trustless (you trust the operator didn't modify data before hashing).
Production (DON Attestation)
CRE workflows run across N independent DON nodes. Consensus (f+1 agreement) ensures no single party can fabricate results. Observation, computation, and proof are all decentralized. Byzantine fault tolerance guarantees trustless execution.
What CRE Provides Beyond Hashing
You could hash data without CRE. The value CRE adds:
- Standardized workflow format: Portable, auditable definitions (YAML + TypeScript)
- Built-in capabilities: EVMClient for contract reads, HTTPClient for API calls, CronCapability for scheduling
- Path to decentralization: Same code runs locally in simulate and on the DON in production
- Consensus aggregation:
consensusIdenticalAggregationensures all nodes agree before proceeding
13. CRE Ecosystem Context
Orbital Sentinel uses the same verifiable workflow pattern adopted by major institutions.
CRE Capabilities Used
| Capability | Type | What It Does | Used In |
|---|---|---|---|
| Cron | Trigger | Time-based scheduling | All 8 workflows |
| EVM Read | Execution | Smart contract reads with DON consensus | All 8 workflows |
| EVM Write | Execution | Smart contract writes with DON consensus | SentinelRegistry writes |
| HTTP Client | Execution | API calls with DON consensus | Treasury, governance, LAA |
Institutional Adopters
CRE is adopted by major institutions for tokenized asset operations. Orbital Sentinel demonstrates the same verifiable workflow pattern used by:
- J.P. Morgan / Ondo: Cross-chain DvP transactions
- Swift / UBS: Tokenized fund workflows
- Deutsche Borse / Crypto Finance: Proof of Reserve feeds
- 21X: Regulated onchain exchange with verifiable post-trade data
CRE Upgrade Opportunities
| Capability | Potential Use Case |
|---|---|
| EVM Log Trigger | Replace cron polling with real-time event triggers (RewardAdded, Staked, Withdrawn) |
| Confidential HTTP | Enclave-based calls to proprietary data APIs |
| HTTP Trigger | External webhooks (Discord bot triggers sentinel check) |
| ConsensusMedianAggregation | Aggregate prices from multiple sources |
14. Tech Stack
Production-grade tooling across the full stack.
| Layer | Technology | Version |
|---|---|---|
| Runtime | Node / Bun | 22 / latest |
| Workflows | @chainlink/cre-sdk | ^1.0.9 |
| Smart Contracts | Solidity (Foundry) | 0.8.19 |
| Dashboard | Next.js (Turbopack) | 15.2 |
| UI | React | 19 |
| ORM | drizzle-orm | ^0.39 |
| Database | PostgreSQL | 15+ |
| On-chain lib | viem | 2.34+ |
| AI Analysis | Claude Haiku + GPT-5.3-Codex | Flask endpoint |
| Language | TypeScript | 5.7+ |
| Schema Validation | zod | 3.25 |
15. Chainlink Products Used
Six distinct Chainlink products across 8 workflows.
| Product | Where Used |
|---|---|
| CRE SDK (Runner, handler) | All 8 workflow main.ts files |
| EVMClient.callContract() | All 8 workflows (mainnet reads + Sepolia writes) |
| Chainlink Data Feeds | price-feeds (LINK/USD, ETH/USD via AggregatorV3) |
| HTTPClient + consensusIdenticalAggregation | treasury-risk, governance, price-feeds, LAA |
| CronCapability | All 8 workflows (autonomous scheduling) |
| getNetwork() | All 8 workflows (chain selector: mainnet + Sepolia) |
CCIP Infrastructure Monitoring
The CCIP Lane Health workflow reads CCIP infrastructure contracts directly via EVMClient:
- CCIP Router:
getOnRamp(destChainSelector)to verify lane configuration - OnRamp:
paused()to detect paused lanes - LockReleaseTokenPool:
getCurrentOutboundRateLimiterState(destChainSelector)for rate limiter bucket state
16. Deployment Status
LAA is live on the CRE mainnet DON. The other 7 simulate locally.
LAA Workflow: Live on CRE Mainnet
| Status | ACTIVE ON DON |
| Workflow ID | 005f8a760f4b41e09d4646bfeb7ae17d...fe96 |
| Workflow Registry | 0x4Ac54353FA4Fa961AfcC5ec4B118596d3305E7e5 (mainnet) |
| DON Family | zone-a |
| Schedule | 7x/day (00, 03, 07, 10, 14, 17, 21 UTC) |
| AI Endpoint | sentinel-ai.schuna.co.il/api/cre/analyze-arb |
| AI Cost | ~$0.004/call (GPT-5.3-Codex) |
| Workflow | Status | Schedule |
|---|---|---|
| LINK AI Arbitrage (LAA) | Active on DON | 7x/day |
| treasury-risk | Local Simulate | 7x/day (unified cycle) |
| price-feeds | Local Simulate | 7x/day (unified cycle) |
| morpho-vault-health | Local Simulate | 7x/day (unified cycle) |
| curve-pool | Local Simulate | 7x/day (unified cycle) |
| ccip-lane-health | Local Simulate | 7x/day (unified cycle) |
| governance-monitor | Local Simulate | 7x/day (unified cycle) |
| token-flows | Local Simulate | Not in unified cycle |
17. Contract Reference
All smart contract addresses referenced by Sentinel workflows.
SentinelRegistry (Write Target)
| Field | Value |
|---|---|
| Contract | OrbitalSentinelRegistry |
| Network | Ethereum Sepolia |
| Address | 0x35EFB15A46Fa63262dA1c4D8DE02502Dd8b6E3a5 |
| Key Function | recordHealth(bytes32, string) |
| Event | HealthRecorded(bytes32 indexed, string, uint256) |
| Verified | Sourcify |
Mainnet Contracts Read
| Contract | Network | Read By |
|---|---|---|
| LINK/USD Data Feed | Mainnet | price-feeds, curve-pool |
| ETH/USD Data Feed | Mainnet | price-feeds |
| Community StakingPool | Mainnet | treasury-risk |
| Operator StakingPool | Mainnet | treasury-risk |
| RewardVault | Mainnet | treasury-risk |
| MorphoBlue + IRM | Mainnet | morpho-vault-health |
| Curve StableSwap NG | Mainnet | curve-pool, LAA |
| CCIP Router + OnRamp | Mainnet | ccip-lane-health |
| Priority Pool | Mainnet | LAA |
| 50+ ERC20 Addresses | Mainnet | token-flows |
| Workflow Registry (LAA) | Mainnet | LAA deployment |