Skip to content

node21labs/parcel21

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Parcel21

Decentralized RGB consignment exchange over Nostr.

CI  License: MIT

Every RGB transfer has an off-chain step: the sender hands the receiver a consignment, the client-side data that proves the transferred rights. Today that hand-off runs through a handful of centralized proxy servers whose operators can read the consignment, see who is paying whom, censor, or go down.

Parcel21 moves the hand-off onto Nostr. The consignment travels as an encrypted, gift-wrapped event (NIP-44 + NIP-59): relays see only an opaque blob addressed to a throwaway key, receivers are pushed the data in real time instead of polling, and anyone can run a relay.

Parcel21 live demo: a marketplace checkout settles as a real RGB transfer over Nostr on Mutinynet and confirms on Bitcoin

Try it live: demo.node21labs.com. A marketplace checkout settles as a real RGB transfer over Nostr on Mutinynet, then hands you the Bitcoin tx, the kind-1059 event, and the RGB contract id so you can verify each one.

How it maps to the existing proxy protocol

Parcel21 mirrors RGB HTTP JSON-RPC v0.2 so it can act as a drop-in decentralized transport:

RGB HTTP JSON-RPC Parcel21 (Nostr)
consignment.post (payer uploads, keyed by recipient_id) Payer publishes a gift-wrapped consignment event addressed to the payee
consignment.get (payee downloads) Payee subscribes for gift wraps addressed to it and unwraps the consignment
ack.post (payee ACK/NACK) Payee publishes a gift-wrapped ack to the payer's per-transfer reply key
ack.get (payer polls status) Payer subscribes for the ack (push, not poll)
media.post / media.get Same pattern; large blobs offloaded to encrypted Blossom storage

The proxy's write-once invariants are preserved at the receiver. The full design (event kinds, the anonymous-payer ACK return path, the authenticated-unwrap requirement) lives in docs/architecture.md and the spec.

For developers

  • Spec: spec/nip-XX-rgb-consignment-exchange.md is the source of truth.
  • Relay: TypeScript/Bun + Postgres (relay/), live at wss://relay-production-1664.up.railway.app. Reads are public; publishing to the hosted relay requires an access token. For development, run your own relay (relay/README.md): it accepts writes without tokens unless you configure them.
  • Client: the protocol library and a bare reference client (client/) that runs the raw flow against the live relay (invoice, gift-wrap, deliver, unwrap, ACK) with every event logged: client-production-ffe8.up.railway.app.
cd client && npm install
npm run typecheck
npx tsx scripts/verify-protocol.ts   # round-trip + forged-ACK rejection (3/3 checks)
npm run dev                          # http://localhost:3000

Status

Draft NIP and working implementations; test networks only, nothing is production-ready yet. Real transfers have settled end-to-end over Nostr on regtest and Mutinynet.

Not done yet: mainnet, the Blossom path for large consignments, full NIP-07 signer integration.

License

MIT © 2026 Node21 Labs. Builds on the RGB HTTP JSON-RPC protocol and rgb-proxy-server by RGB-Tools.

About

Decentralized RGB consignment exchange over Nostr

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors