DEV Community

Daniel Ioni
Daniel Ioni

Posted on

From a Real Kefir Handover to a Verifiable On-Chain Commitment: What We Built with MyZubster

Today we reached an important milestone with MyZubster.

We started with something deliberately ordinary and physical: a real hand-delivery of kefir culture between two people.

We then followed that event through MyZubster's digital handover workflow, created a deterministic cryptographic commitment from the recorded event, anchored that commitment to Base Sepolia, verified the resulting transaction, and connected the blockchain receipt back to the MyZubster record.

This was not a blockchain demo built around synthetic data.

It started with a real-world community exchange.

The objective was to explore a much more interesting question:

Can MyZubster connect real community activity to independently verifiable digital evidence without putting personal data on-chain or pretending that blockchain proves more than it actually does?

For this experiment, the answer is increasingly becoming: yes — with carefully defined evidence boundaries.

The MyZubster idea

MyZubster is being developed around a simple loop:

Share → Try → Observe → Improve → Share again

The broader goal is to turn real community practices and exchanges into structured, traceable knowledge.

The project is open source:

MyZubster main repository:
https://github.com/MyZubster-Ecosystem/myzubster

MyZubster Ecosystem:
https://github.com/MyZubster-Ecosystem

Kefir / fermentation knowledge project:
https://github.com/DanielIoni-creator/Myzubster-fermentation-kefir

MyZubster Marketplace project:
https://github.com/DanielIoni-creator/MyZubster-Marketplace

The experiment described below connects several of these ideas: marketplace exchange, evidence, provenance, cryptographic commitments, and public blockchain infrastructure.

  1. It started with a real kefir handover

A kefir culture was physically handed over to Nicola.

Inside MyZubster, we represented the exchange through a dedicated MarketplaceHandover workflow rather than treating a marketplace interaction as completed simply because somebody clicked a button.

The lifecycle distinguishes different events:

ACCEPTED

HANDED_OVER

RECEIVED

RECORDED

This distinction matters.

A donor saying “I handed it over” is not the same piece of evidence as a recipient saying “I received it.”

And neither of those statements should automatically mean “this event is now on a blockchain.”

For the Nicola experiment, the completed application record reached:

METHOD=HAND_DELIVERY
STATE=RECORDED

with separate timestamps for handover, reception and final recording.

This gave us the application-level evidence from which to construct the cryptographic commitment.

  1. Creating a deterministic representation of the event

The next problem was reproducibility.

If we want to hash an event, we need a deterministic representation of exactly what is being committed.

For this first handover commitment schema, the payload contained:

{
"schema": "myzubster.marketplace-handover.v1",
"handoverId": "6aab8faca70ce84f926d0b41",
"listingId": "6aa9ee1b821964be0b43ff6e",
"method": "HAND_DELIVERY",
"state": "RECORDED",
"handedOverAt": "2026-09-17T07:28:24.874Z",
"receivedAt": "2026-09-17T07:45:03.261Z",
"recordedAt": "2026-09-17T07:46:09.606Z"
}

The important architectural decision is that this JSON was not written directly to the blockchain.

Instead, MyZubster generated a SHA-256 commitment.

The resulting hash was:

ba9973f08ce86d16a3611c3cccbb9cc2cc779b9ea1cb6fd87a2e5864e557b6b9

This gives us a compact cryptographic fingerprint of the committed record.

  1. Keeping personal data off-chain

One of the design requirements was that we should not solve provenance by dumping application records or personal information onto a public blockchain.

The blockchain payload therefore contains a prefixed commitment:

MZ-HANDOVER-V1:ba9973f08ce86d16a3611c3cccbb9cc2cc779b9ea1cb6fd87a2e5864e557b6b9

The public chain receives the commitment.

The underlying MyZubster application retains the structured handover information.

This creates an important separation:

Real-world event

MyZubster application record

Canonical representation

SHA-256 commitment

Public blockchain anchor

That separation is intentional.

  1. The commitment was actually anchored to Base Sepolia

We did not mark the handover as on-chain merely because a hash had been calculated.

A real EVM transaction was submitted to Base Sepolia.

The confirmed transaction is:

Network: Base Sepolia
Chain ID: 84532
Value: 0 ETH
Block: 46933575
Gas used: 24160
Status: CONFIRMED
Confirmed at: 2026-09-17T08:57:18.000Z

Transaction hash:

0x998a98b1733312e248f74a1387319dae30aab8123a6115c517e4ffe0ef9584bf

You can independently inspect the transaction here:

BaseScan — MyZubster kefir handover transaction:
https://sepolia.basescan.org/tx/0x998a98b1733312e248f74a1387319dae30aab8123a6115c517e4ffe0ef9584bf

This is the public evidence layer of the experiment.

  1. We verified the blockchain before modifying the MyZubster record

Another important part of the experiment was the direction of trust.

We did not simply store a transaction hash in MongoDB and assume it represented the expected transaction.

Before connecting the receipt to the handover, we verified the blockchain transaction and checked the expected chain, transaction, block and commitment.

The verification produced:

CHAIN_ID=84532
TX_ID=0x998a98b1733312e248f74a1387319dae30aab8123a6115c517e4ffe0ef9584bf
BLOCK=46933575
HASH=ba9973f08ce86d16a3611c3cccbb9cc2cc779b9ea1cb6fd87a2e5864e557b6b9
CONFIRMED_AT=2026-09-17T08:57:18.000Z

Only after that verification did we persist the blockchain metadata into the MyZubster handover record. The database update matched and modified exactly one handover.

  1. RECORDED and ONCHAIN_RECORDED mean different things

This distinction is central to the architecture.

The application state remains:

STATE=RECORDED

Blockchain status is derived separately:

ONCHAIN_RECORDED=true

For Nicola's handover, the persisted evidence now includes:

HANDOVER_ID=6aab8faca70ce84f926d0b41

STATE=RECORDED

NETWORK=base-sepolia

TX_ID=
0x998a98b1733312e248f74a1387319dae30aab8123a6115c517e4ffe0ef9584bf

HASH=
ba9973f08ce86d16a3611c3cccbb9cc2cc779b9ea1cb6fd87a2e5864e557b6b9

CONFIRMED_AT=
2026-09-17T08:57:18.000Z

ONCHAIN_RECORDED=true

This prevents a dangerous shortcut where an application could label something "on-chain" simply because blockchain functionality exists somewhere in the codebase.

For MyZubster, onchainRecorded=true requires actual blockchain receipt information.

  1. We then moved the experiment into the MyZubster codebase

Doing a single blockchain transaction manually is useful for experimentation.

It is not enough for a platform.

So we implemented persistent blockchain commitment metadata directly in MarketplaceHandover.

The model can store information such as:

schema
algorithm
hash
preparedAt
network
txId
anchoredAt
confirmedAt

We also implemented an authenticated endpoint for preparing a commitment for a recorded handover:

POST /:handoverId/prepare-blockchain-commitment

The route checks that the caller is a participant in the handover and that the handover has reached the appropriate recorded state before preparing its commitment.

This moves the experiment from:

“We managed to anchor one handover.”

toward:

“MyZubster has a reusable data model for representing blockchain commitments associated with handovers.”

  1. We tested the integration

We did not stop after the code compiled.

The relevant marketplace test suites were executed after installing the dependencies declared by the repository.

The final result was:

PASS tests/marketplaceFlow.test.js
PASS tests/marketplaceEvidence.test.js

Test Suites: 2 passed, 2 total
Tests: 4 passed, 4 total
Snapshots: 0 total

TEST_EXIT=0

There were email-notification credential warnings in the test environment, but they did not fail the test suites.

  1. The integration is public

The work has now been pushed to the public MyZubster repository.

We opened:

PR #1230 — Integrate on-chain handover commitment support

https://github.com/MyZubster-Ecosystem/myzubster/pull/1230

The PR contains the model and route integration: two commits and two changed files.

The main repository is here:

https://github.com/MyZubster-Ecosystem/myzubster

This means the experiment is not represented only by a post or a blockchain transaction. The implementation itself can be inspected.

  1. What the blockchain proves

It is important to be precise here.

The blockchain transaction does not prove that the kefir was microbiologically safe.

It does not certify its composition.

It does not scientifically validate fermentation practices.

It does not independently prove that the physical handover happened exactly as described.

And it does not magically transform community observations into verified scientific knowledge.

What it provides is narrower — and useful:

a public, timestamped cryptographic commitment that can later be compared against the corresponding digital record.

If the committed data changes, recomputing the commitment will no longer produce the same hash.

So blockchain becomes an integrity and timestamp layer, rather than a replacement for the application database, scientific validation or real-world evidence.

  1. Why this matters for MyZubster

The interesting part is not simply that MyZubster can write something to a blockchain.

Many applications can do that.

The interesting problem is connecting several different evidence layers without confusing them:

PHYSICAL WORLD
Real kefir handover

HUMAN EVIDENCE
Donor and recipient actions

APPLICATION STATE
MarketplaceHandover → RECORDED

STRUCTURED EVIDENCE
myzubster.marketplace-handover.v1

CRYPTOGRAPHIC EVIDENCE
SHA-256 commitment

PUBLIC EVIDENCE
Base Sepolia transaction

VERIFICATION
Hash + transaction + block + confirmation

Each layer answers a different question.

That is much more useful than treating "blockchain" as a generic badge of truth.

  1. Where this could go next

The next architectural step is to make this verification increasingly reproducible.

A future verifier should be able to take an eligible MyZubster record, reproduce its canonical representation, calculate its SHA-256 commitment, obtain the blockchain receipt, inspect the transaction calldata and determine whether the commitment matches.

Conceptually:

MyZubster record

canonicalize

SHA-256

expected commitment

compare

Base transaction calldata

MATCH / NO MATCH

This can eventually become part of a broader provenance system for MyZubster.

The important rule remains:

We should never claim more than the evidence actually proves.

Project links

MyZubster — main open-source repository
https://github.com/MyZubster-Ecosystem/myzubster

MyZubster Ecosystem on GitHub
https://github.com/MyZubster-Ecosystem

PR #1230 — On-chain handover commitment integration
https://github.com/MyZubster-Ecosystem/myzubster/pull/1230

Kefir and fermentation knowledge repository
https://github.com/DanielIoni-creator/Myzubster-fermentation-kefir

MyZubster Marketplace repository
https://github.com/DanielIoni-creator/MyZubster-Marketplace

Public Base Sepolia transaction
https://sepolia.basescan.org/tx/0x998a98b1733312e248f74a1387319dae30aab8123a6115c517e4ffe0ef9584bf

MyZubster website
https://www.myzubster.com

Building provenance from real activity

This experiment began with something extremely simple: sharing kefir with another person.

But that simplicity is useful.

If a provenance architecture cannot clearly represent a small real-world exchange, adding more technology will not fix it.

Our approach with MyZubster is therefore to build from real interactions upward:

real activity → explicit human actions → structured records → cryptographic commitments → public verification.

Not everything belongs on-chain.

Not everything recorded by an application is automatically true.

And not every community observation is scientific evidence.

The goal is instead to make the relationships between these things explicit, inspectable and increasingly verifiable.

That is the direction we are exploring with MyZubster.

Share → Try → Observe → Improve → Share again.

MyZubster #OpenSource #BuildInPublic #Blockchain #Base #Web3 #Cryptography #SHA256 #Traceability #Provenance #DigitalTrust #Kefir #Fermentation #CommunityKnowledge

Top comments (0)