net-kotobase (kotobase.net) ← etzhayyim/kotoba | Rust + WASM
▶ 自動再生中 … 下のバーで一時停止・シーン移動できます
canonical spine: Datom log → ProllyTree → CommitDag → blocks
hot な内蔵ストアが µs–ms で速く、IPFS/B2 は「壊れない・配れる」ための輸出層。
QuadStore::assert_datom(kotoba-graph/src/quad_store.rs)
ここでは 正確な 5-tuple をそのまま記録するだけ。索引化は commit で行う。
kotoba-query/src/arrangement.rs + kotoba-core/src/prolly.rs
≈ 1/256 で境界が立つ → 平均 256 entries/chunk。同じデータなら必ず同じ形 = deterministic / hash-consistent。
変わった枝だけ新ノード(緑)。残りは旧 CID を共有 → commit ごとに Δ だけ書く。
put_node()(prolly.rs)/ KotobaCid::from_bytes(cid.rs)
→ IPFS 互換 CIDv1。block の中に自分の CID は持たない(= block の hash そのもの)。
親リンクで連なる不変チェーン。耐久境界は head-ref の原子的更新(git / Datomic 流)。再起動は head + checkpoint から差分 walk。
全 block は CARv1 1束にまとめて単一 PUT(commit を atomic に複製)。
kotoba-store: Memory / Kubo / Tiered / Distributed・BlockStore trait
封印済み commit を ホットパスの外で非同期 export。pin = named commit CID = 恒久・アドレス可能。
q / pull / datoms / asOf / history | keycodec で hot=cold 同順
索引がホットなら直引き。
EAVT は O(1) hash(≈180ns)、AVET/VAET は O(log N) BTreeMap。これは キャッシュ最適化に過ぎない。
各レベル = block 1回 get(ceil(log₂₅₆ N) ホップ)。leaf から Datom 復元 → filter/project。asOf/since は TEA で時間遡行。
ADR-2606060000 | 3つの DAG-CBOR エンベロープ
result_cid は JSON 応答ではなく正準 DAG-CBOR block の CID。検証は CID で block を再取得して行う。
QuadStore::assert_datom で 5-tuple (E,A,V,T,Added) を pending に。blake3(key)&0xFF==0 境界・path-copy)。Commit{index_roots,prev,seq} を CommitDag(=WAL) に append、CARv1 で単一 PUT。ProllyTree::scan_prefix で cold scan(各レベル=block 1 get)→ Datom 復元。emit_cid で結果も result_cid として content-address(再現・改ざん検知・キャッシュ)。主要コード: prolly.rs / arrangement.rs / keycodec.rs / quad_store.rs / commit.rs / cid.rs
net-kotobase/docs/explainer