Beam
← Releases
Relay 0.1.0

Transfer receipts on Bittensor EVM

Beam can now record receipts of your finished transfers and Room deliveries on Bittensor EVM mainnet, where any smart contract can read them, for 1 credit each.

ConsoleBeamCoreSDKDocs

Receipts any contract can read

Beam's relay records each receipt in Beam's receipts contract on Bittensor EVM mainnet (chain 964): the transfer's status, size, completion time and fingerprints, never its payload. A contract reads it with getReceipt. A receipt is Beam-reported: it records what Beam's API reported about the transfer, and a Room receipt can also carry the receipts its targets signed.

Every transfer, or only the ones you ask for

Turn on one switch and every transfer your organization creates while it is on gets a receipt once it finishes, with no transaction on your side. Or have Beam approve a contract or wallet of yours, which asks for the receipts it needs with requestReceipt or requestRoomReceipt and pays only the gas of its request.

How it works

Beam runs a relay on Bittensor EVM mainnet, chain 964. It records receipts of finished transfers and Room deliveries in Beam's receipts contract, 0x52c7d4c0d7462562295bbf2e55d3350ca30ba992, where any smart contract can read them. Your organization gets receipts in one of two ways, or both.

Every transfer
Turn on one switch, and every transfer your organization creates while it is on gets a receipt once it finishes, whether it completed, failed or was cancelled. Nobody sends a transaction: the relay finds your finished transfers and records their receipts, usually within a minute or two, several in one transaction when it can.
Contract requests
Register the contract or wallet address that will ask. Once Beam approves it, the relay allows it on the receipts contract. The address calls requestReceipt with a transfer id, or requestRoomReceipt with a Room, channel and publication, and the relay records the receipt once Beam reports the delivery finished. Only your own organization's transfers and Room deliveries are answered.
What a receipt holds
A standard receipt holds the status, the total and transferred bytes, the completion time, the plan fingerprint, the coordinate checksum and the level. A Room receipt holds the status, the file size, the manifest hash, the target count, the evidence and assignment hashes and the level: 1 for a Beam-reported receipt, 3 for a Room receipt that every target signed. Payloads never go onchain.

Get started

  • On the console's API keys page, create a key with only the Read-only: transfers + Room evidence preset. The relay reads your transfers with it and charges your receipts to it.
  • Paste it under Organization, Onchain receipts. The console seals it so that only Beam's relay can read it.
  • Turn on Record a receipt for every transfer, register a contract that requests receipts, or both.

Costs and limits

  • Each recorded receipt costs 1 credit, either way. Beam pays the gas to record it.
  • A contract request costs its sender about 164,000 gas, about 0.0008 TAO at 5 gwei. Reading a receipt is free.
  • A credit is charged only once the receipt is onchain, and a receipt asked for both ways is charged once. Out of credits, nothing is recorded until you top up.
  • The relay closes a request it will never answer with cancelRequest, for 1 credit. Cancel a mistaken request yourself within the hour to avoid the charge.

What it does not do

  • A receipt is Beam-reported: it records what Beam's API reported, written by one operator, Beam's relay. Nothing independently checks Beam's answer, and no receipt proves that the content is correct.
  • Beam's relay records receipts only. It does not start transfers: start them with an SDK, the CLI or Studio as usual, or run your own relay and Studio to start them from a contract.
  • Receipt data is public and permanent: transfer ids, byte counts, completion times, fingerprints, and Room, channel and publication ids. Do not record receipts of transfers whose metadata must stay private.
Transfer receipts on Bittensor EVM — Beam