Sem descrição

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

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.