Walrus blob · mainnet
<!DOCTYPE html>
<html lang="en"><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Epoch · Status</title>
<meta name="description" content="Live status of the Epoch protocol systems — Vesting, Names, Kairos, indexer and storage, on Sui & Walrus.">
<link rel="icon" type="image/png" href="data:image/png;base64,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">
<style>
:root{
--bg:#070b14; --card:rgba(255,255,255,.04); --line:rgba(255,255,255,.08);
--tx:#e8eef6; --mut:#8aa0b2; --blue:#29b6f6; --purple:#c084fc;
--green:#34d399; --amber:#fbbf24; --orange:#fb923c; --red:#ef5350; --gray:#64748b;
}
*{box-sizing:border-box;margin:0;padding:0}
body{
background:
radial-gradient(55% 55% at 12% 6%, rgba(124,31,208,.16), transparent 60%),
radial-gradient(55% 55% at 92% 96%, rgba(41,182,246,.14), transparent 60%),
linear-gradient(160deg,#0a0718,#070b14 60%,#05101f);
color:var(--tx); font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Inter,Roboto,sans-serif;
min-height:100vh; line-height:1.5;
}
.wrap{max-width:780px;margin:0 auto;padding:36px 22px 60px}
header{display:flex;align-items:center;justify-content:space-between;margin-bottom:30px;flex-wrap:wrap;gap:12px}
.brand{display:flex;align-items:center;gap:11px;font-weight:800;font-size:1.2rem;letter-spacing:-.3px}
.logo{width:36px;height:36px;border-radius:9px;object-fit:contain}
.brand b{background:linear-gradient(90deg,#fff,var(--blue));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.brand small{display:block;font-size:.6rem;color:var(--mut);font-weight:700;letter-spacing:2px;text-transform:uppercase}
.refresh{font-size:.78rem;color:var(--mut)}
.banner{border-radius:16px;padding:20px 22px;display:flex;align-items:center;gap:14px;margin-bottom:26px;font-weight:700;font-size:1.15rem;
background:rgba(52,211,153,.1);border:1px solid rgba(52,211,153,.35);color:#b9f4dd}
.banner .bdot{width:13px;height:13px;border-radius:50%;background:var(--green);box-shadow:0 0 12px var(--green)}
.banner.warn{background:rgba(251,191,36,.1);border-color:rgba(251,191,36,.35);color:#fde9b0}
.banner.warn .bdot{background:var(--amber);box-shadow:0 0 12px var(--amber)}
.banner.partial{background:rgba(251,146,60,.1);border-color:rgba(251,146,60,.35);color:#ffe0c2}
.banner.partial .bdot{background:var(--orange);box-shadow:0 0 12px var(--orange)}
.banner.down{background:rgba(239,83,80,.1);border-color:rgba(239,83,80,.35);color:#ffc9c7}
.banner.down .bdot{background:var(--red);box-shadow:0 0 12px var(--red)}
.svc{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px 18px;margin-bottom:12px}
.srow{display:flex;align-items:center;justify-content:space-between;gap:12px}
.sname{font-weight:700}
.sdesc{font-size:.78rem;color:var(--mut);margin-top:2px}
.pill{display:inline-flex;align-items:center;gap:7px;font-size:.78rem;font-weight:700;padding:5px 12px;border-radius:20px;white-space:nowrap}
.dot{width:8px;height:8px;border-radius:50%}
.up{color:var(--green);background:rgba(52,211,153,.1)} .up .dot{background:var(--green);box-shadow:0 0 8px var(--green)}
.down{color:var(--red);background:rgba(239,83,80,.1)} .down .dot{background:var(--red)}
.partial{color:var(--orange);background:rgba(251,146,60,.12)} .partial .dot{background:var(--orange)}
.degraded{color:var(--amber);background:rgba(251,191,36,.1)} .degraded .dot{background:var(--amber)}
.unknown{color:var(--gray);background:rgba(100,116,139,.12)} .unknown .dot{background:var(--gray)}
.checking{color:var(--mut);background:rgba(255,255,255,.04)} .checking .dot{background:var(--mut);animation:pulse 1s infinite}
@keyframes pulse{0%,100%{opacity:.3}50%{opacity:1}}
.meta{font-size:.72rem;color:var(--mut);margin-top:10px;display:flex;justify-content:space-between;align-items:center;gap:10px}
.bars{display:flex;gap:3px;align-items:flex-end;height:20px}
.bars i{width:6px;height:100%;border-radius:2px;background:rgba(255,255,255,.07);cursor:pointer;transition:transform .08s}
.bars i:hover{transform:scaleY(1.18)}
.bars i.u{background:var(--green)} .bars i.d{background:var(--red)} .bars i.o{background:var(--orange)} .bars i.w{background:var(--amber)} .bars i.k{background:var(--gray)}
footer{margin-top:30px;padding-top:18px;border-top:1px solid var(--line);color:var(--mut);font-size:.78rem;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px}
footer b{color:var(--blue)}
a{color:var(--blue);text-decoration:none}
/* day detail modal */
.ov{position:fixed;inset:0;background:rgba(3,6,12,.7);backdrop-filter:blur(4px);display:none;align-items:flex-start;justify-content:center;padding:60px 16px;z-index:50;overflow:auto}
.ov.open{display:flex}
.modal{background:#0c1320;border:1px solid var(--line);border-radius:18px;max-width:560px;width:100%;padding:22px 24px;box-shadow:0 24px 60px rgba(0,0,0,.5)}
.modal h3{font-size:1.05rem;margin-bottom:2px}
.modal .mdate{font-size:.8rem;color:var(--mut);margin-bottom:16px}
.modal .ok{display:flex;align-items:center;gap:10px;color:var(--green);font-weight:600;padding:14px 0}
.modal .ok .dot{width:9px;height:9px;border-radius:50%;background:var(--green);box-shadow:0 0 8px var(--green)}
.inc{border-left:3px solid var(--amber);padding:4px 0 4px 14px;margin-bottom:16px}
.inc.sev-down{border-color:var(--red)} .inc.sev-partial{border-color:var(--orange)}
.inc .it{font-weight:700;margin-bottom:8px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.inc .tag{font-size:.62rem;font-weight:800;letter-spacing:.5px;text-transform:uppercase;padding:2px 8px;border-radius:20px;background:rgba(251,191,36,.14);color:var(--amber)}
.inc.sev-down .tag{background:rgba(239,83,80,.14);color:var(--red)}
.inc.sev-partial .tag{background:rgba(251,146,60,.14);color:var(--orange)}
.inc .dur{font-size:.7rem;color:var(--mut);font-weight:600}
.upd{font-size:.78rem;color:#c4d2de;margin-bottom:8px;line-height:1.5}
.upd b{color:#fff;text-transform:capitalize}
.upd .w{color:var(--mut)}
.closeb{float:right;cursor:pointer;color:var(--mut);font-size:1.3rem;line-height:1;margin:-4px -4px 0 0}
.closeb:hover{color:var(--tx)}
</style>
</head>
<body>
<div class="wrap">
<header>
<div class="brand"><img class="logo" src="data:image/png;base64,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" alt="Epoch"><div>Epoch <b>Status</b><small>live systems health</small></div></div>
<div class="refresh" id="refresh">checking…</div>
</header>
<div class="banner checking" id="banner"><span class="bdot"></span><span id="bannerText">Checking systems…</span></div>
<div id="list"></div>
<footer>
<span>Click any bar for that day's detail · 30-day view · auto-refresh 45s</span>
<span>Built on Sui · hosted on <b>Walrus</b> · epochsui.com</span>
</footer>
</div>
<div class="ov" id="ov"><div class="modal" id="modal"></div></div>
<script>
(function(){
'use strict';
var RPC='https://fullnode.mainnet.sui.io:443';
var AGG='https://aggregator.walrus-mainnet.walrus.space';
var SUPA='https://bgbyobyqzxmycatboyug.supabase.co';
var SUPA_KEY='sb_publishable_q92VnPJFVf9TGITNoe3NBQ_ypQCnCu4';
var SH={apikey:SUPA_KEY,Authorization:'Bearer '+SUPA_KEY};
var TREASURY='0x31bd863db14dd552a28f85641888b7ddc3a4866c4ffde286b30eaf7ac2841553';
var NAMES_REG='0xa6d9e91daa40dbff259838c9f5bd6448d8f08e9b2a3da02c5d4d3c88ce5666d1';
var KAIROS_REG='0x799cf6965c592debbe2be11cc1914bc38cc51ba09462cc5b5811c2a8b1749520';
var API={sui:'https://status.sui.io/api/v2/incidents.json',walrus:'https://status.walrus.xyz/api/v2/incidents.json'};
function nowp(){ return performance.now(); }
function timed(p){ var t=nowp(); return p.then(function(r){ return {r:r,ms:Math.round(nowp()-t)}; }); }
function rpc(method,params){
return fetch(RPC,{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({jsonrpc:'2.0',id:1,method:method,params:params})})
.then(function(r){ if(!r.ok) throw new Error('http '+r.status); return r.json(); })
.then(function(j){ if(j.error) throw new Error(j.error.message); return j.result; });
}
function checkChain(){ return timed(rpc('sui_getChainIdentifier',[])).then(function(o){return {status:'up',ms:o.ms};}).catch(function(){return {status:'down'};}); }
function checkObject(id){
return timed(rpc('sui_getObject',[id,{showType:true}])).then(function(o){
return (o.r && o.r.data)?{status:'up',ms:o.ms}:{status:'down',note:'not found'};
}).catch(function(e){ return {status:String(e).indexOf('Failed to fetch')>-1?'unknown':'down'}; });
}
function checkWalrus(){
return timed(fetch(AGG+'/status',{method:'GET',cache:'no-store'})).then(function(o){ return {status:o.r.ok?'up':'down',ms:o.ms}; }).catch(function(){ return {status:'unknown'}; });
}
function checkSupa(){
return timed(fetch(SUPA+'/rest/v1/vaults?select=id&limit=1',{headers:SH})).then(function(o){ return {status:o.r.ok?'up':'down',ms:o.ms}; }).catch(function(){ return {status:'unknown'}; });
}
function checkIndexer(){
// health endpoint of the indexer Worker (cron runs every minute). updated_at in the DB only
// advances on new on-chain events, so it is NOT a liveness signal — the worker ping is.
return timed(fetch('https://epoch-indexer.pupazzipunkapi.workers.dev',{cache:'no-store'}))
.then(function(o){ return {status:o.r.ok?'up':'down',ms:o.ms}; }).catch(function(){ return {status:'unknown'}; });
}
var SERVICES=[
{key:'sui', name:'Sui Mainnet', desc:'Layer-1 network', fn:checkChain, rss:'sui'},
{key:'vesting', name:'Vesting Vaults', desc:'Trustless token vesting on Sui', fn:function(){return checkObject(TREASURY);}},
{key:'names', name:'Epoch Names', desc:'.epoch registry & Walrus sites', fn:function(){return checkObject(NAMES_REG);}},
{key:'kairos', name:'Kairos · Autonomous Agent', desc:'On-chain prediction commit registry', fn:function(){return checkObject(KAIROS_REG);}},
{key:'walrus', name:'Walrus Storage', desc:'Decentralized blob storage & hosting', fn:checkWalrus, rss:'walrus'},
{key:'db', name:'Datastore', desc:'Search & marketplace database', fn:checkSupa},
{key:'indexer', name:'Live Indexer', desc:'Real-time on-chain → DB sync', fn:checkIndexer}
];
var LABEL={up:'Operational',down:'Major outage',partial:'Partial outage',degraded:'Degraded performance',unknown:'Unknown',checking:'Checking…'};
var CLS={up:'u',down:'d',partial:'o',degraded:'w',unknown:'k',checking:''};
var RANK={up:0,unknown:1,degraded:2,partial:3,down:4};
// Statuspage component status -> rank & our colour (4-colour scheme, faithful to Statuspage)
var CRANK={operational:0,under_maintenance:1,degraded_performance:2,partial_outage:3,major_outage:4};
function compToStatus(cs){ return cs==='major_outage'?'down':(cs==='partial_outage'?'partial':(cs?'degraded':'up')); }
function compLabel(cs){ return ({major_outage:'Major outage',partial_outage:'Partial outage',degraded_performance:'Degraded performance',under_maintenance:'Maintenance'})[cs]||'Incident'; }
function sevClass(cs){ return cs==='major_outage'?'sev-down':(cs==='partial_outage'?'sev-partial':'sev-deg'); }
// only mainnet components count toward these services
function COMP(n){ return /mainnet/i.test(n)&&!/testnet|devnet/i.test(n); }
function ymd(d){ d=new Date(d); var m=d.getMonth()+1,day=d.getDate(); return d.getFullYear()+'-'+(m<10?'0':'')+m+'-'+(day<10?'0':'')+day; }
function pretty(s){ var p=s.split('-'); return new Date(p[0],p[1]-1,p[2]).toLocaleDateString(undefined,{weekday:'short',month:'short',day:'numeric',year:'numeric'}); }
function durStr(a,b){ if(!a||!b) return ''; var ms=new Date(b)-new Date(a); if(ms<0) return ''; var m=Math.round(ms/60000),h=Math.floor(m/60); m=m%60; return (h?h+'h ':'')+m+'m'; }
// ---- Statuspage incidents.json parsing (bucket each update to its day, worst component status wins) ----
var byDay={sui:{},walrus:{}}; // ymd -> [incident]
var dayWorst={sui:{},walrus:{}}; // ymd -> worst component status string
function parseApi(name,json){
byDay[name]={}; dayWorst[name]={};
(json.incidents||[]).forEach(function(inc){
var ups=(inc.incident_updates||[]).slice().sort(function(a,b){return new Date(a.created_at)-new Date(b.created_at);});
var dayStatus={}; // ymd -> worst component status for THIS incident
ups.forEach(function(u){
var k=ymd(u.created_at);
(u.affected_components||[]).forEach(function(a){
if(!COMP(a.name)) return; var st=a.new_status; if(st==='operational') return;
if(!dayStatus[k]||CRANK[st]>CRANK[dayStatus[k]]) dayStatus[k]=st;
});
});
if(!Object.keys(dayStatus).length) return; // not a mainnet incident
var incObj={ name:inc.name, impact:inc.impact, started:inc.started_at, resolved:inc.resolved_at,
dur:durStr(inc.started_at,inc.resolved_at), dayStatus:dayStatus,
updates:ups.slice().reverse().map(function(u){ return {when:u.created_at,status:u.status,body:(u.body||'').trim()}; }) };
Object.keys(dayStatus).forEach(function(k){
(byDay[name][k]=byDay[name][k]||[]).push(incObj);
if(!dayWorst[name][k]||CRANK[dayStatus[k]]>CRANK[dayWorst[name][k]]) dayWorst[name][k]=dayStatus[k];
});
});
}
function loadApi(){
return Promise.all(Object.keys(API).map(function(name){
return fetch(API[name],{cache:'no-store'}).then(function(r){return r.json();}).then(function(j){ parseApi(name,j); }).catch(function(){});
}));
}
// ---- 30-day model ----
var days={};
function buildModel(){
var t=Date.now();
SERVICES.forEach(function(s){
var arr=[];
for(var i=29;i>=0;i--){
var dstr=ymd(new Date(t-i*86400000));
var st='up';
if(s.rss){ var cs=dayWorst[s.rss][dstr]; if(cs) st=compToStatus(cs); }
if(i===0&&!s.rss) st='checking';
arr.push({date:dstr,status:st});
}
days[s.key]=arr;
});
}
function render(){
document.getElementById('list').innerHTML=SERVICES.map(function(s){
var arr=days[s.key]; var today=arr[29]; var st=today.status;
var bars=arr.map(function(d,idx){ return '<i class="'+(CLS[d.status]||'')+'" data-k="'+s.key+'" data-i="'+idx+'" title="'+d.date+'"></i>'; }).join('');
var right=today.note?today.note:(today.ms!=null?today.ms+'ms':'');
return '<div class="svc"><div class="srow"><div><div class="sname">'+s.name+'</div><div class="sdesc">'+s.desc+'</div></div>'
+ '<span class="pill '+st+'"><span class="dot"></span>'+LABEL[st]+'</span></div>'
+ '<div class="meta"><div class="bars">'+bars+'</div><span>'+right+'</span></div></div>';
}).join('');
}
function setBanner(){
var states=SERVICES.map(function(s){ return days[s.key][29].status; });
var el=document.getElementById('banner'),t=document.getElementById('bannerText'); el.className='banner';
if(states.indexOf('down')>-1){ el.classList.add('down'); t.textContent='Major outage on a system'; }
else if(states.indexOf('partial')>-1){ el.classList.add('partial'); t.textContent='Partial outage on a system'; }
else if(states.indexOf('degraded')>-1||states.indexOf('unknown')>-On-chain registration not yet visible.
The aggregator served this blob, but we couldn't locate a matching BlobRegistered event in our scan window. It may not be certified yet, or live further back than we paged.
Lifecycle data is unavailable until the blob registration is visible on-chain.