You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
| Single node down (3-node) | ✓ Available | ✓ Available | Automatic failover |
404
+
| Minority nodes down | ✓ Available | ✓ Available | Reduced redundancy, monitor closely |
405
+
| Majority nodes down | ✗ Unavailable | ✓ Stale reads | Manual intervention required |
406
+
| Leader network isolated | ✓ After election | ✓ Available | New leader elected (~10s) |
407
+
| State root divergence (vault) | ✗ Vault halted | ✓ Available | Rebuild vault from snapshot |
408
+
| Disk full | ✗ Unavailable | ✓ Available | Expand storage, compact logs |
409
+
410
+
**Partial availability**: When writes are unavailable, Ledger continues serving eventually consistent reads from any healthy replica. Applications can implement read-only degraded modes.
411
+
412
+
**Vault-level isolation**: A diverged vault does not affect other vaults in the same namespace. Only the affected vault halts writes pending recovery.
413
+
414
+
**Automatic recovery scope**: Ledger automatically recovers from transient failures (network blips, brief partitions). Persistent failures (disk corruption, state divergence) require operator intervention to prevent data loss.
415
+
397
416
---
398
417
399
418
## Scaling Architecture: Shard Groups
@@ -654,9 +673,7 @@ This section consolidates all design trade-offs for decision archaeology.
654
673
| State verification | O(log n) proof | Replay from snapshot |
655
674
| Query latency | O(log n) | O(1) |
656
675
657
-
**Trade-off accepted**: We sacrifice instant per-key proofs for 10x lower write amplification and O(1) query latency. Verification via replay is acceptable for audit scenarios (not real-time).
658
-
659
-
**When to reconsider**: If instant per-key proofs become a hard requirement.
676
+
We sacrifice instant per-key proofs for 10x lower write amplification and O(1) query latency. Verification via replay is acceptable for audit scenarios (not real-time).
660
677
661
678
### gRPC/HTTP/2 vs. Custom Protocol
662
679
@@ -668,9 +685,7 @@ This section consolidates all design trade-offs for decision archaeology.
| Standardization | FIPS 180-4, ubiquitous | Not FIPS | FIPS 202 |
747
+
| Tooling/verification | Excellent | Growing | Good |
748
+
| Audit familiarity | Universal | Less common | Growing |
749
+
750
+
SHA-256's universal recognition and hardware acceleration trump BLAKE3's raw speed. For authorization audits, auditors must be able to verify hashes with standard tools—SHA-256 is understood everywhere. Cryptographic operations are not the bottleneck (<5% of request latency).
751
+
752
+
### seahash vs. Alternative Non-Cryptographic Hashes
753
+
754
+
**Decision**: seahash for bucket assignment and internal indexing (non-security-critical paths).
| Pure Rust | Yes | Requires C FFI | Yes | Yes (std default) |
760
+
| Distribution | Good | Excellent | Poor for short | Good |
761
+
| DoS resistant | No | No | No | Yes |
762
+
763
+
seahash provides excellent speed in pure Rust without FFI complexity. For bucket assignment from already-authenticated data, DoS resistance is unnecessary—we're hashing internal keys, not untrusted input.
764
+
765
+
---
766
+
767
+
## Threat Model
768
+
769
+
### Trusted Operator Assumption
770
+
771
+
Ledger assumes a **trusted operator model**: the organization running the cluster controls all nodes and does not act maliciously. This is distinct from permissionless blockchains where nodes may be adversarial.
772
+
773
+
**What Ledger protects against**:
774
+
775
+
-**Crash failures**: Nodes may crash, lose power, or experience hardware failures. Raft tolerates (n-1)/2 simultaneous failures.
776
+
-**Network partitions**: Nodes may become temporarily unreachable. Raft maintains safety (no conflicting commits) and makes progress when majority is reachable.
777
+
-**Disk corruption**: State root verification detects corruption. Recovery via snapshot + log replay.
778
+
-**Accidental misconfiguration**: Sequence numbers and idempotency prevent duplicate operations.
779
+
-**Post-hoc tampering**: Cryptographic chain linking makes undetected modification computationally infeasible.
780
+
781
+
**What Ledger does NOT protect against**:
782
+
783
+
-**Malicious operator**: A compromised operator with access to majority of nodes can forge state. Raft is not Byzantine fault tolerant.
784
+
-**Compromised leader**: A Byzantine leader can propose invalid blocks. Followers verify state roots but cannot prevent a malicious majority from accepting invalid state.
785
+
-**Side-channel attacks**: Memory inspection, timing attacks on cryptographic operations are out of scope.
786
+
787
+
**Mitigation for untrusted environments**: Organizations requiring Byzantine fault tolerance should evaluate Tendermint-based systems or PBFT variants, accepting 3x latency overhead.
726
788
727
789
---
728
790
@@ -763,11 +825,9 @@ This section consolidates all design trade-offs for decision archaeology.
763
825
764
826
### Future Considerations
765
827
766
-
1.**Hardware acceleration**: Can cryptographic operations benefit from GPU/FPGA offload?
767
-
768
-
2.**Zero-knowledge proofs**: Could ZK-SNARKs enable private verification without revealing data?
828
+
1.**Zero-knowledge proofs**: Could ZK-SNARKs enable private verification without revealing data?
769
829
770
-
3.**Tiered storage**: Hot data in memory, warm on SSD, cold in object storage?
830
+
2.**Tiered storage**: Hot data in memory, warm on SSD, cold in object storage?
0 commit comments