Anchor your code, identity, lineage & legacy on-chain, forever — open to everyone on Earth

방주 선언

  • 로딩 중...

지갑 생성 & 선언동의

존재증명 등록

당신의 평문은 절대 서버로 가지 않습니다 — 브라우저에서 SHA-256 해시만 앵커됩니다.

타임캡슐

평문은 서버 미전송. 브라우저에서 해시 후 개봉일을 봉인합니다.

내 기록

존재증명 조회

방주 통계

-
총 레코드
-
회원수
-
코드
-
등록된 레코드가 없습니다.

';return;} let t=''; records.forEach(rec=>{const ts=rec.ts?new Date(rec.ts*1000).toLocaleString('ko-KR'):'-';const ul=rec.unlock&&rec.unlock!='0'?new Date(rec.unlock*1000).toLocaleDateString('ko-KR'):'-';t+='';}); t+='
유형해시등록시각잠금메타
'+rec.type+''+rec.hash.substring(0,16)+'...'+ts+''+ul+''+rec.meta+'
'; document.getElementById('records-table').innerHTML=t; }catch(e){console.error(e);}}async function proof(){ const id=document.getElementById('inp-proof-id').value.trim(); if(!id){msg('msg-proof','record_id를 입력하세요',false);return;} try{ const r=await fetch('/api/proof?id='+encodeURIComponent(id)); const d=await r.json(); if(d.exists==1)msg('msg-proof','존재증명 확인! ts='+d.timestamp,true); else msg('msg-proof','해당 해시 레코드 없음',false); }catch(e){msg('msg-proof','오류: '+e,false);}}async function loadStats(){ try{ const r=await fetch('/api/stats'); const d=await r.json(); const set=(id,v)=>{const el=document.getElementById(id);if(el)el.textContent=v;}; set('stat-total',d.total_records||0); set('stat-members',d.members||0); set('stat-code',d.code||0); set('stat-capsule',d.timecapsule||0); }catch(e){console.error(e);}}async function loadDeclaration(){ try{ const r=await fetch('/api/declaration'); const d=await r.json(); const lines=d.lines||[]; const el=document.getElementById('decl-list'); if(el&&lines.length){el.innerHTML=lines.map(l=>'
  • '+l+'
  • ').join('');} }catch(e){console.error(e);}}document.addEventListener('DOMContentLoaded',()=>{loadDeclaration();loadStats();});