- name
- blockchain_attestation
- description
- Create verifiable attestations of agent work using Ethereum Attestation Service (EAS), with Base as the default chain.
- metadata
- {"clawdbot":{"emoji":"⛓️","homepage":"https://attest.org","requires":{"bins":["node"]},"primaryEnv":"EAS_PRIVATE_KEY"}}
Blockchain Attestation (EAS)
This skill creates onchain or offchain attestations of completed work using the Ethereum Attestation Service (EAS).
Opinionated defaults:
- Default chain: Base mainnet
- Default mode: offchain (zero gas, still verifiable)
- Default data model: store hashes of the task and the deliverable (plus a small agent id and metadata string)
Safety and privacy rules
- Never put secrets, private keys, tokens, or private user data into onchain attestations.
- Prefer offchain attestations for most use cases.
- If you need a public timestamp anchor for an offchain attestation, use the timestamp command which anchors the UID onchain without publishing the full payload.
- Only run onchain transactions after the user explicitly requests it or has approved costs.
Environment variables
Required for signing (offchain or onchain):
EAS_PRIVATE_KEY
Required for onchain transactions and onchain reads:
EAS_RPC_URL(an RPC endpoint for the selected chain)
Optional:
EAS_CHAIN(baseorbase_sepolia, default isbase)CLAWDBOT_AGENT_ID(overrides theagentIdfield)
One time setup
Install Node dependencies once:
cd {baseDir} && npm installOne time per chain: register the schema
This skill uses a single schema:
bytes32 taskHash, bytes32 outputHash, string agentId, string metadataRegister it (onchain transaction) and persist the resulting schema UID into schemas.json:
cd {baseDir} && node attest.mjs schema register --chain baseFor Base Sepolia:
cd {baseDir} && node attest.mjs schema register --chain base_sepoliaCreate an attestation (recommended: offchain)
Best default workflow:
- Provide the task description text
- Provide the deliverable file path (or deliverable text)
- Create an offchain attestation
- Save the signed payload to a file
- Return UID plus the explorer link to the user
Example:
cd {baseDir} && node attest.mjs attest \
--mode offchain \
--chain base \
--task-text "Summarize Q4 board deck into 1 page memo" \
--output-file ./deliverables/memo.pdf \
--recipient 0x0000000000000000000000000000000000000000 \
--metadata '{"hashAlg":"sha256","artifact":"memo.pdf"}' \
--save ./attestations/latest.offchain.jsonTimestamp an offchain UID onchain (optional anchor)
cd {baseDir} && node attest.mjs timestamp --chain base --uid <uid>Create an onchain attestation (costs gas)
cd {baseDir} && node attest.mjs attest \
--mode onchain \
--chain base \
--task-text "..." \
--output-file ./path/to/output \
--metadata '{"hashAlg":"sha256"}'Verify
Verify an onchain UID:
cd {baseDir} && node attest.mjs verify --chain base --uid <uid>Verify an offchain attestation JSON file (as produced by this skill):
cd {baseDir} && node attest.mjs verify --offchain-file ./attestations/latest.offchain.jsonHash helper
If you need hashes without creating an attestation:
cd {baseDir} && node attest.mjs hash --file ./deliverables/memo.pdfOutput contract
All commands print a single JSON object to stdout.
- On success:
{ "success": true, ... } - On error:
{ "success": false, "error": { "code": "...", "message": "...", "details": ... } }
This is deliberate so the agent can reliably parse results.