spigot
Sell files by the byte · settled on Kaspa

Pay for the bytes
that arrived.

Every download today bills you for what the server says it sent. spigot bills what actually landed — counted by the buyer, not the seller.

dataset.tar.zst · 200,008 B Downloading
0%1 sompi / byte
Bytes received
0
Downloading. Each slice is counted by both sides before the next is authorised — the bill tracks the bytes, not the promise.

A live illustration of spigot's rule — not a real transfer. Hit Stall it and watch the bill stop where the bytes stopped.

The idea

Remove the conversation about what got sent.

If a transfer stalls at 60%, today's bill is a negotiation — you paid for a whole file, or you argue for a refund. spigot has no conversation: the buyer authorises one slice at a time, both sides count every byte independently, and the money follows the bytes that actually landed.

THE UNIT

Bytes delivered, agreed before they're counted

The meter is net.bytes_delivered.v1, exact to the octet. Both sides agree on the content digest first, so two honest parties can't disagree about a length. Tolerance is zero — no rounding, no room to shave.

THE STALL

A stall costs nothing for what never came

Not a refund, not a dispute — the bytes were simply never billed. And resuming isn't a feature: an interrupted download is just one whose next request starts further in. Nothing renegotiated, because nothing was overpaid.

How a purchase works

Open a channel once. Buy any number of files against it.

spigot is the first real consumer of the metered protocol — a way to pay for work whose size is only known once it's been delivered. The money settles on Kaspa through the kaspa-x402 escrow rail; spigot holds no escrow of its own.

  1. Open one escrow channel with a seller — a single on-chain transaction. Everything after is off-chain until you're done.
  2. Ask for a file, one slice at a time. Each slice (a “babel”) is reserved, delivered, and counted by both parties before the next is authorised.
  3. Sign a voucher for the running total. It travels with your countersignature, so the seller is never owed for a slice it hasn't been paid for.
  4. Seller claims, buyer refunds the rest. The seller redeems the vouchers on-chain whenever it likes; you reclaim whatever you didn't spend after the timeout.
Why Kaspa, why a channel

One file is thousands of tiny payments. You can't touch a chain for each.

Paying by the byte means a bill that updates constantly. spigot never settles a babel on chain — it settles the channel. Open once, transact off-chain with signed vouchers, and the seller collects the sum in a single claim.

AMORTISED

The chain cost is paid once, then spread

The only on-chain events are open, claim and refund. Buy one file or fifty against the same channel — the per-file overhead trends to nothing.

KASPA'S FIT

Fast, cheap finality makes small bills worth settling

Kaspa's BlockDAG confirms in about a second and costs little, so a 0.04 KAS earning is economical to collect. The same rail flume streams on.

Why it holds

The seller cannot be paid for bytes it didn't deliver.

01 The buyer's count is the bill

The seller reports a count; the buyer counts the same bytes and signs its own figure. They settle on the agreed number, so an overstatement is refused, not litigated.

02 Under-delivery can't claim the reservation

A seller that sends less than it reserved cannot collect the reservation — refused at three layers: the transaction builder, the accounting, and the escrow script itself.

03 Machines can transact unattended

No account, no subscription, no dispute queue. An agent opens a channel, buys exactly the bytes it needs, and the bill is provably correct without a human in the loop.

04 Byte-identical, or it halts

The content digest is agreed up front. A delivered slice that doesn't match is not a smaller bill — it stops the transfer. You never pay for bytes you can't verify.

Proven, not promised

A real file, sold by the byte, settled on Kaspa testnet-10.

Channel openedgenesis · b518a530… · 0.2 KAS escrow
Bought by the bytea 200,008-byte file in 4 babels · 0.04000160 KAS · delivered byte-identical to source
Seller claimedclaim · 3422d275… · 0.035 KAS collected, 0.16 KAS left in the channel
Under-deliverya seller that sent less cannot claim the reservation — refused at all three layers