Receipts

Receipts furnish cryptographic evidence of the precise moment -- down to the millisecond -- that a transaction was submitted.

Receipts & Timestamps

When data is uploaded to Irys, it receives a millisecond-accurate timestamp prior to being stored onchain.

Blockchain systems depend on timestamps to order transactions and blocks. This sequencing is vital for security, ensuring transactions are recorded correctly without reordering.

Receipts offer cryptographic proof substantiating a timestamp.

Ordering & Streaming

Real-time data processing systems handle messaging, event processing, and data integration. These applications maintain performance while managing substantial data volumes across independent systems. Apache Kafka and RabbitMQ exemplify this pattern.

Why Use Signed Receipts?

Digitally signed receipts enable novel development possibilities:

  • Sequential ordering of posts, likes and comments for decentralized social protocols
  • Sequential ordering of data from group messaging protocols
  • Automatic adjudication of music copyright claims
  • History preservation preventing manipulation over time
  • Scientific research preservation using Irys's pay-once, store-forever approach

Receipt Permanence

A receipt is immediately provided upon posting a transaction to Irys.

Irys maintains an internal registry of all receipts that can be queried as needed. These are stored centrally, suitable for users accepting centralized trust assumptions.

You may permanently store receipts on Irys using the SDK or CLI.

Receipt Format

Receipts follow this JSON structure:

{
  "id": "1Txlbl5NgEqUbIkDnnunHC0gFx0n8_Y92zAsoX54kI8",
  "timestamp": 1676891681110,
  "version": "1.0.0",
  "public": "...",
  "signature": "...",
  "deadlineHeight": "...",
  "block": "...",
  "validatorSignatures": []
}
FieldDescription
IDTransaction ID (used to download the data)
timestampTimestamp (UNIX milliseconds) of when the transaction was created
versionThe version of this JSON file, currently 1.0.0
publicPublic key of the bundler node used
signatureA signed deep hash of the JSON receipt
deadlineHeightThe block number by which the transaction must be finalized
blockDeprecated
validatorSignaturesDeprecated

Verifying Receipts

Receipt verification may be necessary after issuance. If application security relies on transaction ordering, verify each receipt to confirm ordering hasn't been tampered with.

The signature field derives from a deep hash of receipt information including transaction ID and timestamp, signed by Irys.

The Irys SDK enables signature verification using receipt values and the supplied public key.

Timestamp Generation

Irys records transaction time using UNIX timestamps in milliseconds. The node initially receiving and verifying the transaction generates this timestamp.