Transparency log
Every listing, check, failure and removal, including the ones done by the moderator.
Each event's hash covers the previous event's hash, so changing or deleting a past event breaks every hash after it. Save the current head somewhere: if it ever stops being part of the chain, the log was rewritten.
Current head: #1 37c6265cdb6d528acb7760db2e4a1d4bbe72389b8f8cbd09d3b38f49dcad13b3
The chain covers each URL's hash, not the URL itself, so an address can be redacted on request without breaking it.
Verify it yourself
Paste this into your browser's console, or run it in any JavaScript runtime with fetch. The full log is at /api/log (paginated with after).
const res = await fetch("https://agentwork.tctdx.com/api/log?limit=1000").then((r) => r.json());
const sha = async (s) => [...new Uint8Array(await crypto.subtle.digest("SHA-256",
new TextEncoder().encode(s)))].map((b) => b.toString(16).padStart(2, "0")).join("");
let prev = "0".repeat(64);
for (const e of res.events) {
const hash = await sha([prev, e.seq, e.ts, e.type, e.site_id, e.url_hash, e.detail].join("\n"));
if (e.prev !== prev || e.hash !== hash) throw new Error("chain broken at #" + e.seq);
if (e.url && (await sha(e.url)) !== e.url_hash) throw new Error("url changed at #" + e.seq);
prev = hash;
}
console.log("chain ok, head", prev);
Latest events
showing 1-
Listed, proof: filetctdx.com
#1 · 37c6265cdb6d528a…