Events
Subscribe to Tenzro Network 1 events in real time, query event history, and receive signed webhooks for blocks, payments, inference and more.
Every Tenzro Network 1 node publishes what happens on the network as a stream of typed events: finalised blocks, transfers, settlements, inference, identity, staking, governance and workflow changes. You can subscribe to the stream live, query its history, or have the node push events to your own HTTPS endpoint.
Event types
| Area | Events |
|---|---|
| Blocks | NewBlock, BlockFinalized, BlockReorged, SyncProgress |
| Transactions | NewPendingTransaction, TransactionIncluded, TransactionFinalized, Log, Transfer |
| Settlement and payments | SettlementCompleted, PaymentChannelUpdate |
| Inference | ModelRegistered, InferenceCompleted, InferenceStreamStarted, InferenceStreamFirstToken, InferenceStreamDropped, InferenceStreamCompleted |
| Identity and compliance | IdentityRegistered, CredentialIssued, ComplianceViolation |
| Agents and workflows | AgentMessage, WorkflowCreated, WorkflowLifecycleTransitioned, WorkflowReceiptEmitted, ApprovalRequested, ApprovalFinalized |
| Staking and governance | StakeDeposited, StakeWithdrawn, ValidatorSlashed, ProposalCreated, VoteCast |
| Bridges | BridgeTransferInitiated, BridgeTransferCompleted, CrosschainMint, CrosschainBurn |
Every event carries a sequence number that increases monotonically on the node, so a consumer can resume exactly where it stopped.
Subscribe from the CLI
# Stream new block headers and transfers
tenzro events subscribe --types newHeads,transfers --rpc https://rpc.tenzro.xyz
# Only logs from one contract, as JSON
tenzro events subscribe --types logs --address 0xContract --format json
# Filter by runtime
tenzro events subscribe --vm evm--topic filters logs by their first topic (the event signature hash) and --limit stops after a number of events.
Query history
# Events between two heights
tenzro events history --from-block 1000 --to-block 2000
# Resume from a sequence number
tenzro events history --from-sequence 48213 --limit 100
# EVM logs, eth_getLogs compatible
tenzro events logs --address 0xContract --from-block 1000The same history is available over JSON-RPC:
curl -s https://rpc.tenzro.xyz -H 'content-type: application/json' -d '{
"jsonrpc": "2.0", "id": 1, "method": "tenzro_getEvents",
"params": {"from_block": 1000, "to_block": 2000, "limit": 50}
}'tenzro_getEvents accepts from_sequence, from_block, to_block, event_types, addresses and limit, and returns a cursor for the next page.
Subscribe over JSON-RPC
tenzro_subscribeEvents takes event_types and addresses and returns a subscription_id together with a WebSocket URL that streams matching events. Standard EVM tooling can use eth_getLogs and filters as usual.
Webhooks
A webhook pushes events to an HTTPS endpoint you run. Registering, listing and deleting webhooks are owner operations: the request must be signed by the DID that owns the webhook, so nobody else can read or remove it.
tenzro events register-webhook \
--url https://example.org/tenzro/events \
--types all \
--secret "$WEBHOOK_SECRET" \
--owner-did did:tenzro:human:... \
--did-envelope <signed envelope>
tenzro events list-webhooks --owner-did did:tenzro:human:... --did-envelope <signed envelope>
tenzro events delete-webhook <webhook id> --did-envelope <signed envelope>Each delivery is a JSON body:
{
"webhook_id": "wh_...",
"event": { "...": "the event" },
"confirmed": false,
"timestamp": 1790000000000,
"sequence": 48214
}and two headers:
X-Tenzro-Webhook-Id: the webhook the delivery belongs to.X-Tenzro-Signature: the hex HMAC-SHA256 of the raw body under your secret.
Verify the signature before you act on a delivery:
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(body: Buffer, signature: string, secret: string): boolean {
const expected = createHmac("sha256", secret).update(body).digest("hex");
return (
expected.length === signature.length &&
timingSafeEqual(Buffer.from(expected), Buffer.from(signature))
);
}Failed deliveries are retried with backoff. With --confirmed-delivery you receive each event twice: once as soon as it happens ("confirmed": false) and again once it is final ("confirmed": true). Act on money only after the confirmed delivery.
Status
tenzro events infotenzro_eventStatus returns the same information over JSON-RPC.