Skip to main content

recensus-sdk

Label your agent's transactions on Robinhood Chain so they show up on Recensus. The Python mirror of @recensus/sdk on npm — the same surface.

pip install recensus-sdk
from recensus_sdk import Recensus, derive_agent_id
from web3 import Web3

w3 = Web3(Web3.HTTPProvider("https://rpc.mainnet.chain.robinhood.com"))

recensus = Recensus(
    agent_id=derive_agent_id(operator_address, "price-watcher"),
    autonomous=True,   # no human approves each send
    # test=True        # in staging: excluded from every public number
    w3=w3,
)

account = recensus.wrap(account)
account.send_transaction({"to": recipient, "value": 1_000_000})

That is the whole integration. Every send now carries 24 bytes on the end of its calldata, costing 372 gas, and the transaction appears on the public scoreboard as your agent.

The label never breaks a transaction

Three layers, in order:

  1. Call shape. The label goes only where trailing calldata is inert. Contract deployments, EntryPoint handleOps, data sent to an address with no code, and anything marked tagSafe: false are refused outright.
  2. Simulation. Before sending, the labelled call is simulated. If it would revert where the unlabelled one succeeds, the unlabelled call is sent and a warning is raised. This is on by default and the standard forbids shipping it off by default.
  3. A catch-all. Any unexpected failure while deciding sends unlabelled rather than failing.

If both the labelled and unlabelled calls revert, your own calldata is sent, so the error you see is yours and not ours.

Without web3

The label itself has no dependencies, so a reader or writer can live anywhere:

from recensus_sdk import build_label, parse_label

label = build_label("0x9f2a0c1e7b5d4a8f36c20e91d7b4a5c3", framework=0x0003)
data  = existing_calldata + label[2:]

parse_label(data).agent_id   # '0x9f2a0c1e7b5d4a8f36c20e91d7b4a5c3'

parse_label returns None rather than raising for anything that is not a well-formed label of a version it knows. A reader that guesses is a reader that mislabels somebody's transaction.

The agent lane

from recensus_sdk import canonical_body

url = "https://api.example.com/v1/thing"
body = {"hello": "world"}
headers = recensus.sign_request("POST", url, account, body=body)

# Send the exact bytes that were signed. `requests.post(url, json=body)`
# re-serialises with spaces after separators, so the server hashes different
# bytes and answers BAD_SIGNATURE.
requests.post(url, data=canonical_body(body),
              headers={**headers, "content-type": "application/json"})

Five headers an app can verify with requireRecensus from @recensus/sdk on npm, so a labelled agent can be given its own rate limits instead of being throttled like a spam bot.

Development

pip install -e '.[dev]'
pytest

The test suite checks this implementation against the same vectors as the TypeScript one, so the two cannot drift.

Release files for recensus-sdk 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for recensus-sdk 1.1.0
File Size Uploaded
recensus_sdk-1.1.0.tar.gz 18.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for recensus-sdk 1.1.0
File Interpreter ABI Platform
recensus_sdk-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 34.1 kB

Release files / recensus_sdk-1.1.0.tar.gz

Download URL recensus_sdk-1.1.0.tar.gz
Size 18.7 kB
Tags Source
SHA-256 checksum
How to use checksums
a2df0a43c61e795a40f3fb51e0319039ee014a1706558c3c07c6de33e16501b9
BLAKE2b-256 checksum
How to use checksums
b531cad1b281cdbbf20e58d3287328a0fa8628f823f24716dfb5c5c9a21d8c48
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.7

Release files / recensus_sdk-1.1.0-py3-none-any.whl

Download URL recensus_sdk-1.1.0-py3-none-any.whl
Size 15.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e2d3cd124652287d42de62e39a3c600f8bdafa3bc8c109f7c2c617f0f981f48b
BLAKE2b-256 checksum
How to use checksums
6b24c9d3c62f125184ebc0c479d4c48b70a51f5d612b9a8db164da5000fbe9d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.7

Release history Release notifications | RSS feed

2.1.0

2 release files

2.0.0

2 release files

1.2.0

2 release files

1.1.1

2 release files

This release

1.1.0 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page