A blockchain is not a camera.
It remembers exactly what it was told. That's why we're careful about what we tell it — and honest about where it came from.
A PoPW receipt proves
- A defined task existed, posted by a known kind of requester for an accountable person or organization.
- This exact evidence bundle — of this declared origin — was submitted.
- It was evaluated under this exact, versioned verification policy.
- This outcome was decided, under this rights record and settlement.
- None of it has changed since the batch was anchored.
It does not prove
- That a blockchain saw anything. It didn't. Capture and verification did.
- “A human definitely folded this towel.” That remains the result of capture and verification.
- Who you are, where you live or what the photo shows. None of it is on-chain.
- That a model is right. Models estimate; a named policy decided.
- Anything about the value of $PORT.
What's on the receipt.
A claim has 25 fields. Names, places and raw media never appear — people and organizations are salted commitments, revealed only to an authorized auditor, one claim at a time.
- Task
- Open door 3B for a delivery robot
- Requested by
- Robot, for a verified org
- Performed by
- Human
- Evidence
- Guided capture + robot odometry
- Policy
- door-assist v1.0
- Decision
- Accepted
- Paid
- $3.00 · USDC
- Anchored
- Base · batch 0xf376…77ad
STATUS: FINAL
- The task
taskSpecHashtriggerHashmandateHashworkflowIdHash- Who asked, who did it
requesterTypeprincipalCommitmentactorTypeactorCommitment- The evidence
evidenceRootevidenceOriginFloormanifestHash- The decision
verificationPolicyHashverificationEvidenceHashdecisionrightsHash- Money and security
settlementReferenceHashassurancePolicyHashsecurityReferenceHash- Time
executedAtverifiedAt
Change one character.
This is the real trigger document from the door-assist test vectors, and the hash committed in its claim. Edit the robot's ID by one digit and see what survives. Both hashes were computed when this page was built.
trigger · RFC 8785 canonical JSON
{"occurredAt":"2026-10-29T21:02:11Z","sourceRef":"amr-0042","type":"ROBOT_EXCEPTION"}{"occurredAt":"2026-10-29T21:02:11Z","sourceRef":"amr-0043","type":"ROBOT_EXCEPTION"}keccak256( keccak256("teleport.tap.trigger") ‖ keccak256(JCS(trigger)) )
- Committed in the claim
0x239107ca225bb55a3ec8ee68bfbdd1cd8869a73722c4554adf6a3c0a409cba45- Recomputed from the document
0x239107ca225bb55a3ec8ee68bfbdd1cd8869a73722c4554adf6a3c0a409cba450xb603ea26c065fdd9d44ec8a15c6bde843ca3d74cbe2cff7e7260c8acd1dd3768
The claim, its batch root and the Base anchor all still agree.
One digit, a completely different hash. The claim, the root and the anchor now disagree with the document — anyone can see it was altered.
From claim to Base, in four hashes.
Keccak-256 for anything structured, SHA-256 for raw files. Only the root goes on-chain. These are the published test vectors, on Base Sepolia.
- 01
Claim
All 25 fields are hashed as one EIP-712 struct, bound to Base and to the registry contract.
claimHash
0xe7e7efca66…53d547 - 02
Leaf
The claim hash is hashed again to make a Merkle leaf, so a leaf can never pose as a node.
keccak256(claimHash)
0x1668f74701…9a7904 - 03
Batch
Leaves are sorted and paired into a tree. One 32-byte root stands for the whole batch.
merkleRoot
0x15c33e99ae…7601c4 - 04
Anchor
The verifier posts the root to the PhysicalWorkRegistry on Base, which emits BatchAnchored.
batchId
0xf37679174f…c977ad
Want to check it yourself? The verification walkthrough takes three steps and only public data.
How much to trust it is written on it.
Every proof carries an assurance tier, capped by its weakest evidence. Uploaded photos can reach Standard; Teleport capture and attested devices can go higher. See the caps.
Standard
Routine observations and ordinary operational work. One verifier, a short challenge window.
Verified
Higher-value datasets and enterprise workflows. More review, more $PORT behind it, a longer window.
High assurance
Multiple verifiers and human adjudication. Planned; not live at launch.
§ 06 · The proof network
Dollars pay for the work. PoPW proves it. $PORT secures the proof.
A verifier locks $PORT as a bond behind every batch it anchors. If it signs something provably false, part of that bond is taken. Nobody needs $PORT to post a task, do one, or get paid.
Bond
The verifier locks $PORT against a batch before anchoring it on Base.
Challenge
During the challenge window, an authorized challenger can point to a specific, checkable fault.
Slash, rarely
Only provable misconduct costs bond. Otherwise the bond is released when the window closes.
Can cost a bond
- Signing two conflicting attestations
- Building an invalid batch
- Signing without authorization
- Citing a policy that doesn't exist
- Signature fraud or replay
- Misstating where evidence came from
- Claiming more assurance than the evidence allows
Never costs a bond
- “The room did not look clean.”
- “I disagree with the AI.”
- A model that was honestly wrong
- A good-faith judgment call
Canonical $PORT is the existing Ethereum token; proof operations run on Base. $PORT is a network-security asset, not payment for work and not an investment offer. Protocol is a draft.
Get proof
Put a receipt on the work you already pay for.
Verify-only mode checks work done anywhere — by your team, your contractors or your robots.