A lightweight blockchain for associations, cooperatives and collectives where transparency matters.
greffe decides nothing for the group. It records who the group admitted, and enforces that only they write. This page is the operating manual for that: how a federation bootstraps, grows, and handles the awkward cases.
greffe init --name <federation> and publishes the output of
greffe genesis: the name, a timestamp and the first validator keys. This JSON is the
federation’s birth certificate; everyone else starts from it.greffe grant validator <pub>. Two to five validators, on machines run by
different people, is the sweet spot.--nat if behind a router), sends its public key
to the umbrella, and is admitted with greffe grant member <pub>.Every one of those grants is an entry in the record, with the key that made it and the time.
| may write entries | may seal blocks | may grant/revoke | |
|---|---|---|---|
| validator | yes | yes | yes |
| member | yes | no | no |
| full node / relay | no | no | no |
A validator is also a member for writing purposes. Removing the last validator is refused by every node: the record can always move forward.
greffe grant member <pub> / greffe grant validator <pub>.greffe revoke member <pub> / greffe revoke validator <pub>. Effective from
the block that contains the revocation; entries the key wrote before stay valid and visible.greffe imposes no schema on kind or payload. A federation will want a short written
convention — it can be the first decision recorded. A workable starting set:
| kind | payload | who |
|---|---|---|
charter |
{"title","text_hash","url"} |
validator |
decision |
{"body":"general assembly","date","title","outcome","votes":{"for","against","abstain"}} |
validator or delegate |
org.join / org.leave |
{"name","pub","contact_hash"} |
validator |
release |
{"tool","version","sha256","url"} |
maintainer |
grant.record |
{"to","amount","currency","purpose","reference"} (a fact about a payment, not a payment) |
treasurer |
incident |
{"service","started","resolved","summary"} |
operator |
attest |
{"sha256","what","where"} |
anyone |
Put the convention itself in the record as a charter entry, and update it the same way.
The record does not settle disputes; it makes them factual. Every claim of “that was never decided” or “I was admitted before that” can be checked against signed, ordered entries that every member holds. If a validator wrote something the group disowns, the group records the disavowal as a new entry and, if needed, revokes the validator — the original stays, with its signature, as evidence of what happened.