Tidak Ada Deskripsi

Cesar Rodas fc96f6c73b Use CBOR for inflight metadata and make confirm batch 3 jam lalu
.github ee2e0e2b12 Introduce Kuatia, an append-only, auditable multi-asset ledger 3 hari lalu
crates fc96f6c73b Use CBOR for inflight metadata and make confirm batch 55 menit lalu
doc fc96f6c73b Use CBOR for inflight metadata and make confirm batch 55 menit lalu
.gitignore ee2e0e2b12 Introduce Kuatia, an append-only, auditable multi-asset ledger 3 hari lalu
CHANGELOG.md b3fcc0152e Prepare 0.2.0 release 3 hari lalu
CLAUDE.md ee2e0e2b12 Introduce Kuatia, an append-only, auditable multi-asset ledger 3 hari lalu
Cargo.lock fc96f6c73b Use CBOR for inflight metadata and make confirm batch 55 menit lalu
Cargo.toml fc96f6c73b Use CBOR for inflight metadata and make confirm batch 55 menit lalu
LICENSE ee2e0e2b12 Introduce Kuatia, an append-only, auditable multi-asset ledger 3 hari lalu
README.md ee2e0e2b12 Introduce Kuatia, an append-only, auditable multi-asset ledger 3 hari lalu
rust-toolchain.toml ee2e0e2b12 Introduce Kuatia, an append-only, auditable multi-asset ledger 3 hari lalu

README.md

kuatia

kuatia (kuatiʼa) — Guaraní for paper, document, writing. A fitting name for a small, append-only ledger library.

Auditable, multi-asset UTXO-style ledger in Rust.

Overview

kuatia models value as postings — signed amounts owned by exactly one account. Transfers atomically consume existing postings and create new ones, enforcing per-asset conservation. This gives the same safety guarantee as double-entry bookkeeping (Σ debits = Σ credits), expressed as sum(consumed) == sum(created) per asset over signed postings. There are no mutable balance fields; an account's balance is always the sum of its active postings.

┌─────────────────────────────────────────────────────┐
│                   kuatia (async)                    │
│                                                     │
│  Intent layer:  TransferBuilder + commit · balance   │
│  Saga pipeline: resolve → reserve → validate → fin.  │
│  Raw pipeline:  load  →  plan  →  apply             │
│  Saga steps:    legend step adapters                 │
├─────────────────────────────────────────────────────┤
│               kuatia-core (pure)                    │
│                                                     │
│  Types:         Account · Transfer · Posting · Cent │
│  Validation:    validate_and_plan()                 │
│  Hashing:       double-SHA256, content-addressed    │
│  Selection:     greedy posting selection             │
└─────────────────────────────────────────────────────┘

Crates

Crate Purpose
kuatia-types Domain types — AccountId, Posting, Transfer, Cent, etc.
kuatia-core Pure, sans-IO decision logic — validation, hashing, posting selection.
kuatia-storage Store trait (7 sub-traits), InMemoryStore, store_tests! conformance macro.
kuatia-storage-sql SQL-backed Store — SQLite and PostgreSQL via sqlx.
kuatia Async resource layer — Ledger, saga commit pipeline, intent-layer API.

Quick Example

use std::sync::Arc;
use kuatia::ledger::Ledger;
use kuatia::mem_store::InMemoryStore;
use kuatia_core::*;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let ledger = Arc::new(Ledger::new(InMemoryStore::new()));

    let usd = AssetId::new(1);
    let alice = AccountId::new(1);
    let bob = AccountId::new(2);
    let bank = AccountId::new(3); // external account

    // Create accounts, deposit, pay...
    // See doc/crates.md for the full API reference.

    Ok(())
}

Documentation

License

See LICENSE for details.