
One primitive. Three fields. Every food interaction on earth.
A FoodBlock is a JSON object with three fields. Its identity is derived from its content. Same content, same hash. FoodBlocks are append-only. You never edit one. You create a new one that references the previous version.
Three entities (things that exist) and three actions (things that happen). Subtypes use dot notation: substance.product, observe.review, transfer.subscription.
A person or organisation. A farmer, a restaurant chain, a food bank, a home cook selling meal prep.
{ "type": "actor", "state": { "name": "Kent Farm", "role": "producer" }, "refs": {} }A physical location. The coordinates of a farm, the terroir of a vineyard, a market stall, a kitchen.
{ "type": "place", "state": { "name": "Borough Market", "lat": 51.50, "lng": -0.09 }, "refs": {} }An ingredient, product, or material. Tomatoes, sourdough, a meal prep box, flour, starter culture.
{ "type": "substance.product", "state": { "name": "Tomatoes", "price": 3.00, "organic": true }, "refs": { "seller": "a3f..." } }Changing one thing into another. Cooking, processing, fermenting, growing. A recipe is a transform subtype.
{ "type": "transform.recipe", "state": { "name": "Sourdough", "time": "4h" }, "refs": { "inputs": ["flour_hash", "water_hash", "starter_hash"] } }Moving something between actors. A sale, a delivery, a gift, a surplus rescue. Value changing hands.
{ "type": "transfer.order", "state": { "qty": 2, "amount": 6.00 }, "refs": { "item": "b7c...", "from": "a3f...", "to": "d2e..." } }Making a statement about something. A review, a photo, a certification, a health inspection. Trust is built here.
{ "type": "observe.review", "state": { "score": 4.8, "text": "Best tomatoes in Kent" }, "refs": { "subject": "b7c...", "author": "d2e..." } }Follow refs backwards from any FoodBlock to trace its full history. Provenance is inherited through the chain.
Bread (substance.product)
<- Baking (transform)
<- Dough (transform)
<- Flour <- Mill <- Certification
<- Water <- Location
<- Starter
<- 14 days of fermentationTrust is computed from the FoodBlock graph itself.
Trust(actor, context) =
(authority_certs WHERE valid_until > NOW() x 3)
+ (peer_reviews WHERE reviewer.verified_orders > 0 x review_weight)
+ (chain_depth x 2)
+ (verified_order_count x 1.5)
+ (account_age x 0.5)Autonomous agents are first-class actors in the FoodBlock protocol. They register, propose actions, and build memory โ all as FoodBlocks.