A blockchain in your garage
An ultra-simple blockchain with instant finality
Contracts in WebAssembly
You can write modules in any language that compiles to WebAssembly
counter.wasm
WebAssembly
00 61 73 6d 01 00 00 00 01 25 07 60 01 6f 01 6f 60 00 01 6f 60 04 7f 7f 7f 7f 00 60 02 7f 7f 01 7f 60 02 7f 7f 01 6f 60 02 6f 6f 00 60 00 00 02 74 08 03 65 6e 76 05 61 62 6f 72 74 00 02 05 62 6c 6f 62 73 04 73 61 76 65 00 04 07 73 74 6f 72 61 67 65 03 67 65 74 00 00 07 62 69 67 69 6e 74 73 03 6f 6e 65 00 01 07 62 69 67 69 6e 74 73 06 65 6e 63 6f 64 65 00 00 07 73 74 6f 72 61 67 65 03 73 65 74 00 05 07 62 69 67 69 6e 74 73 06 64 65 63 6f 64 65 00 00 07 62 69 67 69 6e 74 73 03 69 6e 63 00 00 03 04 03 03 01 06 05 03 01 00 01 06 06 01 7f 01 41 00 0b 07 10 02 03 61 64 64 00 09 06 6d 65 6d 6f 72 79 02 00 08 01 0a 0c 01 10 0a fc 05 03 c6 01 01 06 7f 20 00 41 ec ff ff ff 03 4b 04 40 41 d0 08 41 90 09 41 d6 00 41 1e 10 00 00 0b 20 00 41 10 6a 22 04 41 fc ff ff ff 03 4b 04 40 41 d0 08 41 90 09 41 21 41 1d 10 00 00 0b 23 00 23 00 41 04 6a 22 02 20 04 41 13 6a 41 70 71 41 04 6b 22 04 6a 22 05 3f 00 22 06 41 10 74 41 0f 6a 41 70 71 22 07 4b 04 40 20 06 20 05 20 07 6b 41 ff ff 03 6a 41 80 80 7c 71 41 10 76 22 07 20 06 20 07 4a 1b 40 00 41 00 48 04 40 20 07 40 00 41 00 48 04 40 00 0b 0b 0b 20 05 24 00 20 04 36 02 00 20 02 41 04 6b 22 03 41 00 36 02 04 20 03 41 00 36 02 08 20 03 20 01 36 02 0c 20 03 20 00 36 02 10 20 02 41 10 6a 0b a9 04 02 06 7f 02 6f 41 a0 08 21 01 41 9c 08 28 02 00 41 a0 08 6a 21 02 03 40 20 01 20 02 49 04 40 20 01 2f 01 00 22 03 41 80 01 49 04 7f 20 00 41 01 6a 05 20 03 41 80 10 49 04 7f 20 00 41 02 6a 05 20 03 41 80 f8 03 71 41 80 b0 03 46 20 01 41 02 6a 20 02 49 71 04 40 20 01 2f 01 02 41 80 f8 03 71 41 80 b8 03 46 04 40 20 00 41 04 6a 21 00 20 01 41 04 6a 21 01 0c 05 0b 0b 20 00 41 03 6a 0b 0b 21 00 20 01 41 02 6a 21 01 0c 01 0b 0b 20 00 41 01 10 08 21 01 41 a0 08 21 03 41 9c 08 28 02 00 41 7e 71 41 a0 08 6a 21 02 20 01 21 00 03 40 20 02 20 03 4b 04 40 20 03 2f 01 00 22 04 41 80 01 49 04 7f 20 00 20 04 3a 00 00 20 00 41 01 6a 05 20 04 41 80 10 49 04 7f 20 00 20 04 41 06 76 41 c0 01 72 20 04 41 3f 71 41 80 01 72 41 08 74 72 3b 01 00 20 00 41 02 6a 05 20 04 41 80 f0 03 71 41 80 b0 03 46 04 40 20 04 41 80 b8 03 49 20 03 41 02 6a 20 02 49 71 04 40 20 03 2f 01 02 22 05 41 80 f8 03 71 41 80 b8 03 46 04 40 20 00 20 04 41 ff 07 71 41 0a 74 41 80 80 04 6a 20 05 41 ff 07 71 72 22 04 41 3f 71 41 80 01 72 41 18 74 20 04 41 06 76 41 3f 71 41 80 01 72 41 10 74 72 20 04 41 0c 76 41 3f 71 41 80 01 72 41 08 74 72 20 04 41 12 76 41 f0 01 72 72 36 02 00 20 00 41 04 6a 21 00 20 03 41 04 6a 21 03 0c 06 0b 0b 0b 20 00 20 04 41 0c 76 41 e0 01 72 20 04 41 06 76 41 3f 71 41 80 01 72 41 08 74 72 3b 01 00 20 00 20 04 41 3f 71 41 80 01 72 3a 00 02 20 00 41 03 6a 0b 0b 21 00 20 03 41 02 6a 21 03 0c 01 0b 0b 20 01 41 14 6b 28 02 10 21 00 41 0c 41 04 10 08 22 02 20 01 36 02 00 20 02 20 00 36 02 08 20 02 20 01 36 02 04 20 02 28 02 04 20 02 28 02 08 10 01 22 06 10 02 22 07 d1 04 40 20 06 10 03 22 06 10 04 10 05 20 06 0f 0b 20 06 20 07 10 06 10 07 22 06 10 04 10 05 20 06 0b 07 00 41 dc 0b 24 00 0b 0b 99 03 10 00 41 8c 08 0b 01 2c 00 41 98 08 0b 15 02 00 00 00 0e 00 00 00 63 00 6f 00 75 00 6e 00 74 00 65 00 72 00 41 bc 08 0b 01 3c 00 41 c8 08 0b 2f 02 00 00 00 28 00 00 00 41 00 6c 00 6c 00 6f 00 63 00 61 00 74 00 69 00 6f 00 6e 00 20 00 74 00 6f 00 6f 00 20 00 6c 00 61 00 72 00 67 00 65 00 41 fc 08 0b 01 3c 00 41 88 09 0b 25 02 00 00 00 1e 00 00 00 7e 00 6c 00 69 00 62 00 2f 00 72 00 74 00 2f 00 73 00 74 00 75 00 62 00 2e 00 74 00 73 00 41 bc 09 0b 01 3c 00 41 c8 09 0b 2b 02 00 00 00 24 00 00 00 55 00 6e 00 70 00 61 00 69 00 72 00 65 00 64 00 20 00 73 00 75 00 72 00 72 00 6f 00 67 00 61 00 74 00 65 00 41 fc 09 0b 01 2c 00 41 88 0a 0b 23 02 00 00 00 1c 00 00 00 7e 00 6c 00 69 00 62 00 2f 00 73 00 74 00 72 00 69 00 6e 00 67 00 2e 00 74 00 73 00 41 ac 0a 0b 01 3c 00 41 b8 0a 0b 2b 02 00 00 00 24 00 00 00 49 00 6e 00 64 00 65 00 78 00 20 00 6f 00 75 00 74 00 20 00 6f 00 66 00 20 00 72 00 61 00 6e 00 67 00 65 00 41 ec 0a 0b 01 3c 00 41 f8 0a 0b 2b 02 00 00 00 24 00 00 00 7e 00 6c 00 69 00 62 00 2f 00 74 00 79 00 70 00 65 00 64 00 61 00 72 00 72 00 61 00 79 00 2e 00 74 00 73 00 41 ac 0b 0b 01 2c 00 41 b8 0b 0b 23 02 00 00 00 1c 00 00 00 49 00 6e 00 76 00 61 00 6c 00 69 00 64 00 20 00 6c 00 65 00 6e 00 67 00 74 00 68
No extra tooling required
Just upload any .wasm file, and execute any exported function
counter.ts
AssemblyScript
import { bigintref, bigints } from "@/libs/bigints/mod.ts" import { blobs } from "@/libs/blobs/mod.ts" import { storage } from "@/libs/storage/mod.ts" export function add(): bigintref { const key = blobs.save(String.UTF8.encode("counter")) const val = storage.get(key) if (!val) { const fresh = bigints.one() storage.set(key, bigints.encode(fresh)) return fresh } const stale = bigints.decode(val) const fresh = bigints.inc(stale) storage.set(key, bigints.encode(fresh)) return fresh }
counter.rs
Rust
use stdbob::{bigints, blobs, storage}; #[no_mangle] pub extern "C" fn add() -> bigints::BigIntRef { let key = blobs::save("counter".as_bytes()); let val = storage::get(&key); if val.is_none() { let fresh = bigints::one(); storage::set(&key, &bigints::encode(&fresh)); return fresh; } let stale = bigints::decode(&val.unwrap()); let fresh = bigints::inc(&stale); storage::set(&key, &bigints::encode(&fresh)); fresh }
Full account abstraction
No built-in concept of accounts, use any account module you want
secp256k1.wasm
Bitcoin, Ethereum
ed25519.wasm
Solana, Signal, Tor
secp256r1.wasm
Passkeys, Hyperledger
mldsa44.wasm
Post-quantum
schnorr.wasm
Multi-signature
custom.wasm
Your own module
Capability-based security
No more approve-then-transfer, modules can get temporary access
vault.ts
AssemblyScript
export function deposit(session: sessionref, amount: bigintref): void { token.transfer(session, modules.self(), amount) }
Gas paid via proof-of-work
Never run out of gas, just compute some hashes to pay for your transactions
Live sparks generated in your browser
All sales final
Finality is instant, no reorg, no fifty-percent attack
#1
#2
#3
High throughput
Expect thousands of transactions per second
1 TPS
0 TPS
100K TPS
Live transactions running in your browser
Made for the web
Made with web technologies, everything can run in a browser
WebAssembly
WebSocket
HTTP
TypeScript
Workers
AssemblyScript
BigInt
OPFS
SHA-256
Ed25519
IndexedDB
Base64
JSON
FormData
SQLite
Run it yourself
Click here to open GitHub
Made by cypherpunks