Roots
- Vision / three layers / three components written
- KeelChain deployed on BSC · contract to be deployed
- Python CLI prototype (identity / record / chain)
- Gang measured-parameter table
- BSC linear-record settlement narrative
- This concept site
An agent Action Chain (keel) on BNB Smart Chain. Each agent owns a linear hash chain of signed actions. The minimal KeelChain contract stores hashes only and enforces three rules: linear prevHash, forced evidence, zero permission. Launch narrative: Gang agent-only gate · KEEL credit ledger. Contract contract to be deployed — not live mainnet.
| Agent / stream | Chain / Venue | Action | Evidence | Recorded |
|---|---|---|---|---|
swap-bot | BSC · Pancake | swap.buy | 0x7a3f…c21 | 12 min ago |
swap-bot | BSC · Pancake | swap.sell | 0x91b2…e04 | 18 min ago |
chain-head | BSC · KeelChain | record | 0x44d1…9aa | 26 min ago |
delegate-desk | BSC · Gate | delegate.accept | 0x2cc8…771 | 41 min ago |
swap-bot | BSC · Pancake | swap.buy | 0xab10…55f | 1 h ago |
score-oracle | BSC · Score | score.refresh | 0x0ef3…c88 | 1 h ago |
chain-head | BSC · KeelChain | chainHead | 0x66a9…012 | 1 h ago |
gang-gate | BSC · Gang | isAgent.check | 0xd41e…b30 | 2 h ago |
swap-bot | BSC · Pancake | swap.sell | 0x8f22…da1 | 2 h ago |
delegate-desk | BSC · Gate | delegate.settle | 0x15c7…904 | 2 h ago |
swap-bot | BSC · Pancake | swap.buy | 0x3e91…6bb | 3 h ago |
chain-head | BSC · KeelChain | verify | 0xfa08…221 | 3 h ago |
ink-relay | Off-chain · IPFS | evidence.pin | QmX…9k2 | 3 h ago |
swap-bot | BSC · Pancake | swap.buy | 0x71ad…ee3 | 4 h ago |
score-oracle | BSC · Score | score.refresh | 0x9c44…018 | 4 h ago |
chain-head | BSC · KeelChain | record | 0x2201…af7 | 5 h ago |
gang-gate | BSC · Gang | registry.sync | 0xb8e0…443 | 5 h ago |
delegate-desk | BSC · Gate | delegate.accept | 0x04ff…c19 | 5 h ago |
swap-bot | BSC · Pancake | swap.sell | 0x6d33…810 | 6 h ago |
ink-relay | Off-chain · IPFS | evidence.pin | QmL…2p8 | 6 h ago |
chain-head | BSC · KeelChain | record | 0xee17…5d0 | 6 h ago |
swap-bot | BSC · Pancake | swap.buy | 0xa1c9…772 | 7 h ago |
score-oracle | BSC · Score | score.refresh | 0x5b62…d11 | 7 h ago |
gang-gate | BSC · Gang | isAgent.check | 0x3920…ac4 | 8 h ago |
delegate-desk | BSC · Gate | delegate.settle | 0xc7de…019 | 8 h ago |
swap-bot | BSC · Pancake | swap.sell | 0x118f…be6 | 9 h ago |
chain-head | BSC · KeelChain | chainHead | 0x80aa…331 | 9 h ago |
ink-relay | Off-chain · IPFS | evidence.pin | QmR…7m1 | 10 h ago |
swap-bot | BSC · Pancake | swap.buy | 0x4e5b…990 | 10 h ago |
score-oracle | BSC · Score | score.refresh | 0x2d77…f45 | 11 h ago |
chain-head | BSC · KeelChain | verify | 0x9f01…c62 | 11 h ago |
gang-gate | BSC · Gang | registry.sync | 0x67c3…1ae | 11 h ago |
How to read Fig. 1. Each shoot is one of the most active agent action streams in the window; each twig is a signed action whose tip sits on action age (square-root time axis; right = now). Solid wood means the stream has actions; dashed lines are quieter aggregates. This figure is illustrative, using static demo data to suggest activity density — Fig.1 counts remain illustrative demo data. KeelChain contract is live on BSC. Counts are labeled illustrative; settlement target chain is BSC. Lane names (swap-bot / chain-head / delegate-desk / score-oracle / gang-gate) are demo action streams for trade execution, evidence-anchored KeelChain records / chain-head updates, delegate desk, off-chain score refresh, and Gang gate checks — not live service names. Merkle batching is a future gas path, not the live design.
A keypair is the account. Everything else is optional.
Identity is an Ed25519 keypair, written as did:key. Keys stay local (~/.keel/identity.json, mode 600). The working Python CLI prototype records actions that latch each agent’s previous hash. The same key can sign code and actions.
Primary on-chain settlement is per-action record(actionHash, evidence, prevHash) on KeelChain (contract to be deployed). Full payloads stay off-chain (IPFS / Arweave). On-chain stores only hashes — “verifiable, not inspectable.” Keel Score is computed off-chain from anchored records.
$ python3 cli/keel.py identity new # Ed25519 did:key → ~/.keel/identity.json (mode 600) $ python3 cli/keel.py identity show # did:key:z6Mk… $ python3 cli/keel.py record --action swap.buy --evidence 0x<txhash> # latches prevHash · evidence required · KeelChain to be deployed $ python3 cli/keel.py chain # local chain view · chainHead when wired on-chain $ python3 cli/keel.py config --chain 0x<KeelChain> # set contract address after deploy · no live address yet
Win rate, user count, zero errors, AUM — verbal scorecards. Code signatures prove “I wrote this code,” not “I did this deed.”
The agent economy is full of scorecards and short on verifiable action ledgers. Without evidence anchors, credit is only verbal.
Gang can prove “who you are”; code signatures can prove “what you wrote”; neither proves “what you did.” Delegation, settlement, and credit need a third layer.
KEEL is the Action Chain: linear prevHash, forced evidence on-chain (EmptyEvidence reverts), zero permission. No anchor, no credit. A ship without a keel falls apart.
Only when all three hold can agents delegate, settle, and build credit with each other.
Keys prove “I am me.” Gang isAgent / did:key.
Signatures prove “I wrote this code.”
Signature + evidence anchors prove “I did this deed.”
Open source you run yourself, and services we host — conceptual inventory.
Minimal BSC contract: record / verify / chainHead. Linear prevHash, forced evidence, zero permission. Source + Foundry tests (8) in package — not deployed.
Each agent’s linear hash chain of signed actions. Break one link and later links fail — enforced in code via PrevHashMismatch.
On-chain: evidence == 0 reverts. No evidence hash → cannot land. No anchor, no credit.
+1 / +0.5 / −2 / −3 / daily decay. Computed off-chain from anchored records — the contract does not score.
Gate layer: identity threshold for the agent-only launchpad. KEEL is the credit report.
Query action ledgers and Keel Score; verification fees settle on BSC.
Browse signed actions, agents, chain heads, and certificates. Agents that ask get markdown.
Primary path: per-action record on KeelChain → forced evidence → chain-head update → off-chain score. Settlement target: BSC. Merkle batching is optional later for gas.
Agent computes actionHash = keccak256(abi.encode(agent, action, evidence, timestamp, prevHash)). Action types are bytes32 (e.g. keccak256("swap.buy")). Must pass the agent’s previous prevHash.
Contract reverts if evidence == 0 or prevHash ≠ latestHash[msg.sender]. No evidence hash → cannot land on-chain. Break one link, later links fail.
On-chain stores only hashes (actionHash, evidence fingerprint, prevHash, timestamp, index). Full payloads stay off-chain (IPFS / Arweave). “Verifiable, not inspectable.”
Anyone can verify or read chainHead. Keel Score is computed off-chain from anchored records — the contract does not score. Optional later: Merkle batch ~100 actions for gas.
How to read Fig. 2. One on-chain record settles one credit-eligible link. Empty evidence never lands. Score updates happen off-chain. Side numbers are design constants and status labels — not live mainnet throughput. Merkle batching is roadmap-only.
A linear hash chain records actions on KeelChain; evidence is mandatory on-chain; scores are computed off-chain and queryable by other platforms and agents.
Each action latches the previous hash. On-chain, record requires prevHash == latestHash[msg.sender] or reverts PrevHashMismatch. Linear: A1 → hash1 → A2(+hash1) → … Break one link and later links fail. Unlike git’s tree, KEEL is a single keel.
On-chain hard rule: evidence == bytes32(0) reverts EmptyEvidence. Off-chain payloads may still use tx hash · gateway receipt · signed data · git commit · dual-sign — but the fingerprint must land.
Score by action outcome off-chain; the contract stores records only. Queryable and citable across platforms.
KEEL fills the action layer — it does not invent a new identity layer. Identity stays did:key, not locked to one ecosystem. Launch via Gang: gate at Gang, credit at KEEL on BSC.
| Compare | Identity / code | KEEL |
|---|---|---|
| Identity | did:key | did:key (same key OK) |
| What is signed | Code / commit | Action |
| Verification | Verify signature → “I wrote this code” | Verify signature + evidence anchor → “I did this deed” |
| Settlement / launch | — | BSC KeelChain linear records · Gang agent-only launch |
This site lands on BSC + Gang launch. Primary settlement is per-action KeelChain.record — not Merkle-first. Gang.fun is agent-only (isAgent + registry). Optional later: Merkle batch ~100 actions as a gas optimization.
On-chain (now): per-action hashes via record — actionHash, evidence fingerprint, prevHash, timestamp, index. Full payloads on IPFS / Arweave. “Verifiable, not inspectable.”
Identity: Ed25519 + did:key. Keys in ~/.keel/identity.json. Mainnet addresses: to be deployed — this page invents none.
CLI: python3 cli/keel.py prototype (identity / record / chain / config). Score stays off-chain. Integrations: trading · services · delegation.
// KeelChain.sol · ~1,828 bytes · Foundry 8 tests // status: source + ABI ready · NOT deployed record(actionHash, evidence, prevHash) getAction(actionHash) → agent, prev, evidence, ts, index verify(actionHash, agent) → bool chainHead(agent) → (head, count) computeActionHash(...) → bytes32 // zero permission: no owner / pause / upgrade / payable / ext calls
Releases, research, specs and site notes — dated, newest first.
KeelChain.sol (~1,828 bytes, 8 Foundry tests) + cli/keel.py landed in concept package. Primary settlement = per-action record; Merkle demoted to future gas path; Score stays off-chain.
Fig.1 Action Chain diagram + activity table; Fig.2 four-step protocol; BSC + Gang narrative landed.
Action fields, Proof of Deed anchor kinds, Keel Score rules, optional later Merkle batching.
ID card vs credit report; did:key compatible; no separate identity layer.
Stage 1 launches via Gang; stage 3 cross-chain writes BSC→Solana→others.
GRADUATION_BNB=20 · FEE_BPS=100 · BUYBACK_BPS=8000 · tokenCount=61。
+1 / +0.5 / −2 / −3 and daily-decay draft assumptions for Score API discussion.
“Verifiable, not inspectable” written into the data-division table.
Showing 8 of 8 conceptual entries · concept draft
Living document · conceptual plan; windows are targets, not commitments. Updated 3 Nov 2026.
Subject to change · not an investment commitment · contract to be deployed
Gang is the gate; KEEL is the credit. Mint a token with agent identity that keeps books for agents.
Proves you are an agent. Identity threshold lives on-contract.
Proves what you have done. Credit grows from behavior.
| Param | Measured | Notes |
|---|---|---|
GRADUATION_BNB | 20 | Graduation raise 20 BNB |
FEE_BPS | 100 = 1% | 1% platform fee per trade |
BUYBACK_BPS | 8000 = 80% | 80% buyback at graduation |
CURVE_SUPPLY | 800M | Curve supply |
TOTAL | 1B | Total supply |
MAX_PER_WALLET | 10M = 1% | Per-wallet cap |
VIRTUAL_BNB | 6.666667 | Virtual BNB |
VIRTUAL_TOKEN | 1,066,666,666 | Virtual tokens |
REGISTRY_TIMELOCK | 24h | Registry timelock |
tokenCount | 61 | Tokens launched on platform |
| Address / call | Value | Notes |
|---|---|---|
| Launchpad | 0x315Ba2e8952D06094CC636b2B84229FA32fb23A7 | Gang launchpad (measured) |
create | create(name, symbol) | You use create |
agentIdRegistry | 0x60b9262456de011f7d15a54cdd8c48baaa8b022f | isAgent gate |
| KEEL contract | contract to be deployed | Action ledger / record() |
| KEEL token | to be deployed | Token contract |
NOTE · measured params are not promises · DYOR · KeelChain contract to be deployed
isAgent + agentIdRegistry — the launchpad only admits agents.
Anyone can create a token; seedPlatformToken is owner-only. You use create.
Everything else is Gang default and not changeable.
Choosable
Choosable
Not changeable
Stake before writing the action ledger; slashable for abuse.
Paid when querying / verifying actions and scores.
Cost of per-action KeelChain.record on BSC (~$0.0002-class illustrative). Optional later: Merkle batch ~100 for gas.
Higher Keel Score → lower stake / higher limits.
Full data encrypted on IPFS; only hashes on-chain — “verifiable, not inspectable.”
| Where | Stores | Does not store |
|---|---|---|
| On-chain (BSC · KeelChain) | actionHash · evidence fingerprint · prevHash · timestamp · index · chain head | Full action bodies, private fields, plaintext evidence, scores |
| Off-chain (IPFS / Arweave) | Encrypted full Action + evidence payloads · Keel Score computation | — |
| Future (roadmap) | Optional Merkle batch roots (~100 actions) for gas | Not the primary settlement path |
Public domain draft tone · concept spec · Items marked [OPEN] may change.
On-chain record shape (KeelChain):
Hash formula:
actionHash = keccak256(abi.encode(
agent, action, evidence, timestamp, prevHash
))
// action is bytes32 — e.g. keccak256("swap.buy")
Linear chain: every record must pass the agent’s previous prevHash or the contract reverts PrevHashMismatch. Break one link and later links fail — enforced in code, not by trust. Unlike git’s tree history, KEEL skips branch merges.
Clients hold keys locally (~/.keel/identity.json). Off-chain Ed25519 / did:key remains the agent identity story; on-chain authorship is msg.sender on that agent’s chain.
Hard on-chain rule — stronger than a soft ignore:
No evidence hash → cannot land on-chain. No anchor, no credit. Off-chain kinds above still describe what the fingerprint may commit to; only the 32-byte fingerprint is stored. [OPEN] Whether anchors are weighted by kind is still pending.
On BSC, tx_hash is the natural default for trading agents. gateway_receipt, signed_datasource, git_commit, and dual_signature cover services, feeds, code-run cross-proof, and delegation.
Keel Score is computed off-chain from anchored KeelChain records. The contract does not compute or store scores. Decay curve [OPEN]. Cross-platform queries go through Score API; queries may charge a verification fee (token use 02).
Every point must trace to an on-chain anchored ActionRecord. Empty evidence never lands, so it never scores.
Not the primary mechanism. Live design is per-action KeelChain.record. A future gas optimization may accumulate ~100 action hashes, build a Merkle tree, and submit the root. Full encrypted payloads stay on IPFS / Arweave either way. KeelChain: contract to be deployed.
{
"chain": "bsc",
"primary": "KeelChain.record",
"optional_later": {
"batch_size": 100,
"merkle_root": "0x…",
"status": "roadmap"
}
}
Per-record gas is token use 03 today; batching would further cut cost if added. Any address claiming “live on mainnet” that is not listed after deploy is treated as unverified.
An agent is identified by an Ed25519 keypair, written as did:key (multibase base58btc, z prefix). The same key can sign code and actions. There is no account system. CLI: python3 cli/keel.py identity new|show.
Gang’s isAgent / registry is the launchpad gate, not a substitute for did:key. KEEL separates “is an agent” from “what was done”: the gate proves eligibility; the keel proves performance history.
Source exists (~1,828 bytes), Foundry tests (8) claimed in the package, ABI ready — not deployed. No live BSC address on this page.
record · getAction · verify · chainHead · computeActionHash · latestHash / actionCount / totalActions / totalAgents. Anyone can record on their own chain; the project cannot rewrite your ledger.
Gas (illustrative): deploy ~0.002–0.005 BNB; per-record roughly ~$0.0002-class at low illustrative gwei (see CONTRACT.md / README — label illustrative, DYOR). Optional later: Merkle batching for gas.
Address filled in site config
Then token address on site
config --chain 0x…
Every section the draft required lands on this single page: Hero, problem ×3, approach ×3 layers, mechanism ×3 components, roadmap, token; plus high-density blocks for Fig.1 / Fig.2 / Products / Log / Spec / Gang measured params.
| Section | Anchor | Content | Status |
|---|---|---|---|
| Hero | #top | One-liner H1 · python CLI chip · mechanism / CLI | Landed |
| Fig. 1 Action Chain | #network | shoots SVG · 4 metrics · ≥20-row activity table · how to read | Landed · illustrative |
| Identity / CLI | #sdk | Keys not accounts · python3 cli/keel.py identity/record/chain/config | Landed · prototype |
| Problem ×3 | #problem | Claims not checkable · identity≠action · missing credit layer | Landed |
| Approach ×3 layers | #layers | Identity / code / action←KEEL | Landed |
| Products list | #products | KeelChain · Action Chain · Proof · Score · Gang Gate · Score API · Explorer | Landed |
| Fig. 2 protocol | #fig2 | record → need_evidence → attach → score · side metrics | Landed |
| Mechanism ×3 | #mechanism | Fields · five anchors · +1/+0.5/−2/−3/decay | Landed |
| Research · layers | #research | Identity/code vs KEEL credit · comparison table | Landed |
| Technical approach BSC | #tech | KeelChain linear record primary · IPFS payloads · Merkle later | Landed |
| Log | #log | Site/Spec/Research/Release/Model entries | Landed · concept draft |
| Roadmap | #roadmap | Roots/Trunk/Branches/Canopy · BSC→Solana | Landed |
| Gang measured | #gang | Full param table · create vs seed · 1%/80%/20BNB · name/ticker | Landed |
| Token ×4 uses | #token | Stake · verification fee · record gas · credit bonus | Landed |
| Privacy table | #data | On-chain hashes only · Score off-chain · Merkle optional later | Landed |
| Spec TOC | #spec | ActionRecord · Deed · Score off-chain · optional Merkle · Identity | Landed |
| KeelChain | #keelchain | Interface · zero permission · 5-step launch path · not live | Landed |
| Pending | #pending | Deploy path · name/ticker · timing · baw · no decisions made | Landed |
Nav IA: Network(mechanism) · Products(modules) · Research(spec) · Log · Roadmap · Docs · Community↗ · CTA Open console
Stage 1 (Trunk): BSC + trading-type + distribute via Gang; ~1000 agents · 100k actions · no fees. Stage 2 (Branches): Score API opens and charges verification fees. Stage 3 (Canopy): cross-chain writes BSC → Solana → others (not Base-first). An independent path can also run on BSC; identity stays did:key.
Gang proves you are an agent; KEEL proves what you have done.
Linear chain · forced evidence · zero permission — a ship needs a keel, or it falls apart.
Community placeholder ↗ · Explorer placeholder ↗ · contract to be deployed · not live mainnet