# Big Kiwi News Protocol update coming (censorship resistance) Source: https://github.com/attestate/kiwistand/pull/370 Kiwi News: https://news.kiwistand.com/stories/Big-Kiwi-News-Protocol-update-coming-censorship-resistance?index=0x6aeba02ab100367f26218438920d8bf2b750455673f3787f5053293b0e23d07ed7fd46be Submitted by tim on 2026-11-04 UTC, 2 upvotes, 0 comments All messages get one shared order that Ethereum mainnet proves, and a delegation becomes a signed protocol message, so signing up needs no transaction and no ETH. Sync stays set reconciliation. - Sequencer (SEQUENCER_PRIVATE_KEY): notes every message it takes and once a day at COMMIT_HOUR_UTC sends one type-3 transaction to the inbox (contracts/Inbox.sol, sequencer-only commit() emitting Commit). Calldata: commit(version, k, prev, root, n, ids); the blob holds the n messages (CBOR list, Brotli). No commit without new messages or while the base fee is above 20 gwei. Cell proofs (EIP-7594), legacy proofs as a fallback. - Genesis: commit 0 is every message up to its block, prev is the delegations snapshot's hash. scripts/commit.mjs sends it and shows any commit with --dry-run; scripts/deploy-inbox.mjs deploys the inbox. - Verification (ETHEREUM_RPC_URL): read commits via eth_getLogs and their calldata, walk the chain, check every ID and each root. Missing: keep syncing; root differs: name the commit, ignore that peer, stop pushing. GET /api/v1/commits shows the verified range. - Delegation message: Delegation(type,key,authorization,authorize, timestamp) signed by the account, holding the key's Authorization in the protocol's domain; revocation without it. Smart wallets via viem verifyTypedData over SMART_WALLET_RPC_URL; EOAs without RPC. - The order decides attribution: a key counts for its latest delegation's account before the message, or for itself after a revocation (signed by that account). Nothing is deleted. Rows are credited again when a key's delegations or their order change. - src/chainstate/delegations.json (scripts/delegations-snapshot.mjs) replaces crawling OP Mainnet; until it's in the repo, nodes crawl. - Protocol bump: roots/messages 15.0.0, leaves/levels 18.0.0. - Tests: message, rules and batch encoding; an integration test on anvil with separate node processes (honest catch-up, tampered message caught); Foundry in CI. - Docs: Protocol (Order), Delegation rewritten, HTTP API, changelog. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01SMVvgNvhTv5tdTHsuURqFb mentioned this pull request Nov 3, 2026 A commit goes out at the first check of each UTC hour (every 10 minutes) that has something new, so the order is final within about an hour instead of a day. COMMIT_HOUR_UTC is gone. At about one euro cent a commit, that's at most 24 cents a day. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01SMVvgNvhTv5tdTHsuURqFb The delegation message uses the codebase's own words: the identity (the user's wallet, which owns profile and karma) and the signer (the key on the device that signs stories, upvotes and comments). - Signed by the signer: Authorization(address identity,bool authorize). - Signed by the identity: Delegation(string type,address signer,bytes authorization,bool authorize,uint256 timestamp). - The message as nodes store and sync it: `identity` and `signer` instead of `account` and `key`; the delegations table's columns, too. - `authorization` stays bytes: EIP-712 has no fixed-size type over 32 bytes and a signature is 65. The schema still takes exactly 65 bytes, or "0x" in a revocation; a test checks it. - POST /api/v1/list and the startup's delegations table read messages through the enhancer, which sets `signer` and `identity` on every message. A delegation now keeps its own (a test checks it), so the signer isn't overwritten by the identity that signed the message. - Parameters, variables, comments, docs and changelog follow. The domain, GET /api/v1/delegations, the commits and the sequencer are unchanged. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01SMVvgNvhTv5tdTHsuURqFb A signer's message counts for the identity whose latest delegation is dated before it; after a revocation dated T, its messages dated after T count for the signer. Messages from before the first delegation count for that delegation's identity, as before. Nodes no longer place messages by their commit and position, and no longer credit every signer again when a commit lands; a delegation or revocation still credits its signer again. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01SMVvgNvhTv5tdTHsuURqFb …reported The inbox has an owner (EIP-173, with setSequencer) and a sequencer, and stores nothing else. Only the sequencer calls commit(version, root, ids); anyone calls include(messages) with signed messages in calldata. Both emit Commit(sender, sequencer, root, n), and the order of those events is the commits' order: k, prev and n go away, and nodes no longer need the sequencer's address (SEQUENCER_ADDRESS). A sequencer commit's root covers every valid message listed so far, by all commits and include()s, plus the genesis set; the genesis lists the delegations snapshot's hash. Nodes with an RPC take the valid messages of include()s through the normal path and gossip them, and the sequencer takes them before its next root. A node only reports a failed check on GET /api/v1/commits; it no longer ignores the peer or stops syncing. scripts/deploy-inbox.mjs takes the owner and the sequencer. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01SMVvgNvhTv5tdTHsuURqFb On a node with ETHEREUM_RPC_URL, a message dated t is witnessed in time if a sequencer commit at or before the first one whose block time is after t + 1 hour lists it, or an include() with a block time between t (less MAX_TIMESTAMP_DELTA_SECS) and t + 1 hour carries it. Until such a commit exists, the message is pending and counts by its timestamp; messages dated up to the genesis are final. A message that wasn't witnessed in time counts for its signer, never for an identity, so a stolen key can't backdate messages past its revocation. When a sequencer commit lands, the node credits the messages it decided again; only messages of delegated signers can change. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01SMVvgNvhTv5tdTHsuURqFb protocol.mdx describes the inbox, what a commit contains, the genesis, when a message is witnessed in time, forced inclusion and verification; delegation.mdx credits by timestamp with finality on top; http-api.mdx has the new GET /api/v1/commits; the changelog says hourly and describes the new design. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01SMVvgNvhTv5tdTHsuURqFb