Skip to content

Bulla examples.

Create one transaction record, check it locally, and compare the receipt set with a separate action log.

These examples use Bulla 0.47.1. They show what can be checked from the supplied files. Evidence from the systems that performed or observed an action is still needed to establish what happened.

1. Run the complete product loop

The fixed example records a local action and writes an ActionReceipt. A changed copy fails its integrity check. A separate action log then identifies a second action with no receipt.

$ python -m pip install "bulla==0.47.1"
$ bulla demo --out first-action

receipt emitted       pay_demo_042
changed copy          FAILED
coverage before       1/1
coverage after        1/2
unreceipted action    pay_demo_043

The receiver record is constructed. The demonstration does not establish that funds moved, and it computes no reliance or payment-eligibility decision. Follow the complete quickstart.

2. Create and verify one receipt

$ bulla receipt create     --type demo.write     --subject path=/tmp/example.txt     --principal did:web:example.invalid:agent     --policy policy://demo-v1     --forum-endpoint https://example.invalid/challenge     --forum-root fixture:independently-pinned-root     --out receipt.json
$ bulla receipt verify receipt.json --format json

What the receipt check does not prove

This checks the receipt file. Evidence from the systems that performed or observed the action is still needed to establish what happened.

Technical evidence

Verification establishes only the reported digest, identity, or inclusion depth; it does not establish the truth of the underlying process.

3. Check the file without a hosted service

The drill runs Bulla and the checker included in the verification kit with network access denied. It reports file checks separately from claims that require another record or trusted key.

$ bulla receipt drill     first-action/receipts/pay_demo_042.json     --format json

Retain the verification kit and its detached digest with the receipt set.

4. Add Bulla where your application acts

python
from bulla import wrap_action

with wrap_action("payments.charge", {"amount": 200, "currency": "USD"}) as act:
    act.set_result("sha256:...")
    act.add_evidence("counterparty_ack", "sha256:...", "counterparty_signed")

receipt = act.receipt

Your application supplies the action and declared context; Bulla writes the receipt JSON. The model does not need to know about the receipt. Continue with the Python SDK guide.

5. Compare receipts with an action log

$ bulla coverage --anchor pypi --receipts releases/

Bulla reports actions in the supplied log that have no matching receipt. It cannot find actions missing from that log. Open the coverage walkthrough.

Limits of the comparison

Bulla can find actions in the supplied action log that have no matching receipt. It cannot find actions missing from that log.

Technical evidence

Coverage is computed relative to the supplied denominator; a compromised or incomplete independent log narrows what reconciliation can find. The browser recomputes digests and the set difference over unsigned fixture receipts and does not verify signer identity or the denominator's independence.

Composition and research archive

These source and research surfaces are separate from the stable product path. Their canonical pages retain the current evidence boundaries and reproduction material.

What this check cannot tell you
  • A host's assertion about its own root is not independent grounding; the relying party must obtain or anchor the root separately.
  • The coherence fee measures undisclosed conventions in a pinned composition model; it is not Bulla's safety foundation or an execution-failure predictor.
  • Exact means minimum-cost within the pinned finite repair model; it is not proof of safe execution or a universal real-world cost.
  • The demonstrated proxy advises and records; it does not silently modify traffic or verify underlying tool execution.

Open the source-only experimental index →

Source and status

Stable commands are documented from Bulla 0.47.1. Experimental availability and external evidence counts remain on the generated status page.