Integration Basics¶
This guide covers the foundational concepts every developer needs before building on Kakitu. Read this page first before moving on to key management, block confirmation, or specific integration patterns.
Block Lattice Design¶
Kakitu uses a Block Lattice — a directed acyclic graph where every account has its own independent blockchain.
Unlike traditional blockchains where all transactions compete to be included in a shared block, in Kakitu:
- Each account chain is controlled exclusively by its private key holder
- Transactions on one account do not block or delay transactions on another
- There is no global block size or throughput ceiling
Every transaction consists of two operations:
- Send — the sender creates a block reducing their balance and specifying a destination
- Receive — the receiver creates a block increasing their balance, referencing the send block
The receiver does not need to be online when the send occurs. Funds remain receivable indefinitely until the receiver claims them.
Account A Chain: Account B Chain:
[open] [open]
[receive: genesis] [receive: genesis]
[send → B: 5 KSHS] ───► [receive ← A: 5 KSHS]
[send → C: 2 KSHS]
Representatives and Consensus¶
Kakitu uses Open Representative Voting (ORV) for consensus:
- Account holders assign a representative — a node that votes on their behalf
- Representatives accumulate voting weight proportional to delegated KSHS
- When a block is broadcast, representatives vote on it
- Once votes from representatives holding more than 67% of online voting weight are collected, the block is confirmed
Key properties: - Voting is free — no staking, no lockup - Any account can change its representative at any time (creates a change block) - Representatives vote on behalf of delegators; delegators retain full custody of their funds
Account Identifiers¶
Understanding the difference between these identifiers is critical:
Wallet ID¶
- 64-character hex string
- Local to this node's database only
- Not recoverable if the database is deleted
- Do not use as a backup mechanism
Seed¶
- 64-character hex string (32 bytes)
- Deterministically derives multiple private keys via Blake2b hashing
- This is your backup. Store it offline and encrypted.
- Also available as a 24-word BIP39 mnemonic
Private Key¶
- 64-character hex string (32 bytes)
- Derived from a seed at a specific index
- Signs all blocks for the associated account
- Never share or transmit
Public Key¶
- 64-character hex string (32 bytes)
- Derived from the private key using Ed25519
- Used in open block and change block operations
Account Address¶
- The public key encoded in Base32 with a
kshs_prefix and a Blake2b-40 checksum - This is the identifier you share with others to receive KSHS
- Always begins with
kshs_
Units¶
All Kakitu RPC operations use raw — the smallest indivisible unit.
Never use floating-point arithmetic for KSHS amounts. Use arbitrary-precision integer libraries (e.g., Python's int, Java's BigInteger, Go's big.Int).
| Amount | Raw value |
|---|---|
| 1 KSHS | 1000000000000000000000000000000 |
| 0.001 KSHS | 1000000000000000000000000000 |
| 0.000001 KSHS | 1000000000000000000000000 |
Unit conversion RPC:
# KSHS to raw
curl -s -d '{
"action": "kshs_to_raw",
"amount": "1"
}' http://localhost:7076
# → {"amount": "1000000000000000000000000000000"}
# Raw to KSHS
curl -s -d '{
"action": "raw_to_kshs",
"amount": "1000000000000000000000000000000"
}' http://localhost:7076
# → {"amount": "1"}
Block Structure¶
All Kakitu transactions use the state block format. Every block contains:
| Field | Description |
|---|---|
type |
Always "state" |
account |
The kshs_ address of the account chain |
previous |
Hash of the previous block in this account's chain (or 0000...0000 for open block) |
representative |
The representative for this account |
balance |
Account balance after this block, in raw |
link |
Context-dependent (see below) |
signature |
Ed25519 signature of the block hash |
work |
Proof-of-Work value |
The link Field¶
| Block Action | link value |
|---|---|
| Send | Destination account's public key (32 bytes hex) |
| Receive / Open | Hash of the source send block |
| Change representative | 0000...0000 (64 zeros) |
URIs and QR Codes¶
Kakitu uses standardized URI schemes for payments and key imports:
| Scheme | Purpose | Example |
|---|---|---|
kshs: |
Payment request | kshs:kshs_3t6k35...?amount=1000000000000000000000000000000 |
kshsrep: |
Change representative | kshsrep:kshs_3t6k35... |
kshskey: |
Import private key | kshskey:PRIVATE_KEY_HEX |
kshsseed: |
Import seed | kshsseed:SEED_HEX |
kshsblock: |
Import raw block | kshsblock:{"type":"state",...} |
Payment URI with amount:
kshs:kshs_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3?amount=1000000000000000000000000000000&label=KakituPay
Next Steps¶
- Key Management — generating and storing keys securely
- Block Confirmation — how to reliably detect confirmed transactions
- Work Generation — generating PoW for blocks
- WebSockets — real-time event streaming
- RPC Reference — complete API documentation