Repository navigation
Tamper Tutorial
The tamper tutorial changes a meaningful value inside a signed receipt body while keeping the export syntactically valid. A fixed byte offset is unsuitable because it can damage JSON syntax or hit an unsigned description. A parser rejecting malformed JSON does not demonstrate that a valid but modified transfer body fails integrity verification. Keep the original export and create a separate modified copy.
Use a compatible export with a receipts array and body strings. For a real-transfer demonstration, first complete and observe the devnet transaction, then export that operation's receipt. A fixture can be used to practice, but label it fixture throughout. Run the verifier on the original before modifying anything. If the original fails, investigate that failure instead of proceeding to a comparison whose baseline is already broken.
import json
from pathlib import Path
original = Path("receipt.json")
doc = json.loads(original.read_text(encoding="utf-8"))
for record in doc["receipts"]:
body = json.loads(record["body"])
value = body.get("lamports")
if isinstance(value, int) and not isinstance(value, bool):
body["lamports"] = value + 1
record["body"] = json.dumps(body, separators=(",", ":"))
break
else:
raise SystemExit("No signed body with integer lamports; no copy written")
Path("receipt-tampered.json").write_text(
json.dumps(doc, indent=2), encoding="utf-8"
)The script does not update the stored digest or signature. That is intentional: the changed body should no longer match its original SHA-256. The bool check avoids Python's integer subtype behavior when validating input. If the export schema changes, adapt the script to the actual protected body rather than blindly finding an amount-looking field anywhere in the document.
Verify receipt.json, then receipt-tampered.json. Preserve the output and process status for each. The observed fixture demonstration returned PASS for the original and FAIL with a body digest mismatch after lamports increased by one. This is the expected comparison for a signed-content mutation. The tutorial itself does not produce a live transfer and should not be used to imply one.
Changing body serialization can also alter signed bytes. In this tutorial the amount change is explicit and meaningful, but the verifier protects exact content, not a normalized semantic interpretation. A stronger automated test inventory can isolate individual changes and test recomputed digests to reach signature validation. Those are separate tests; a video does not need to reproduce every parser and cryptographic case.
Show the original receipt's operation identity, the original verification result, the changed lamports and the rejection. Say that signed receipt contents are integrity protected. Do not say every export field is signed. Notes, labels and other unsigned descriptive metadata can remain outside this guarantee. A documented boundary is more credible than an expansive claim a simple mutation can disprove.
Store both files, their hashes, the checker revision and logs. If the export contains sensitive document names or account context, review whether it is appropriate for public publication; do not edit the original signed body to redact it and still call it the original. Use a separate development operation with non-sensitive data when preparing public evidence. The acceptance result is a valid baseline and rejected signed-content modification, with the fixture or real-transfer status made explicit.
Built by CodesbyFebin · Devnet review candidate · Trust boundaries · Qualification
EdgeORE
- The EdgeORE handbook
- Read the evidence ledger
- Clone and pin the Android source
- Prepare the Android build environment
- Run and preserve qualification gates
- Install and identify the candidate APK
- Choose a runtime without tool shopping
- Authorize through Mobile Wallet Adapter
- Use the official mock wallet safely
- Test disconnect and reconnect after restart
- Read balance and obtain devnet funding
- Review the exact transaction message
- Submit once and observe confirmation
- Recover after an interrupted submission
- Understand budgets and spend reservations
- Read a receipt without overclaiming it
- Verify an export on the JVM
- Change signed lamports and observe rejection
- Separate integrity, provenance and completeness
- Use an Ollama-compatible owned host
- Understand endpoint and transport policy
- Evaluate the experimental on-device AI branch
- Evaluate AI quality and privacy claims
- Use the device-local encrypted vault
- Design an owned-node IPFS adapter
- Design backup and restore acceptance
- Pair an owned node with a pinned identity
- Observe health and revoke node access
- Interpret controls and device readings
- Threat model and production boundaries
- Collect diagnostics without leaking secrets
- Design customer-funded SOL contribution jobs
- Specify escrow before writing a program
- Settlement program status
- Use attestation for the claim it can support
- Evaluate federated learning and data contribution
- Bound mesh networking and agent hosting
- Write marketing copy that survives inspection
- Build the website and publish the GitBook handbook
- Contribute without merging every upstream repository