Date: 2026-02-15
- Pricing model is maker-defined menu with options: subscription-limited, subscription-unlimited, per-signal. Taker chooses tier at subscription.
- Trust vs Verifier are evidence levels, not pricing models; pricing can sit under either.
- Posts are immutable; corrections are new posts.
- Social layer uses Tapestry; financial logic uses Solana programs.
- Evidence storage MVP uses backend storage with on-chain SHA-256 hash and pointer.
- Hybrid encryption delivery: ciphertext stored off-chain, symmetric key encrypted per subscriber.
- Subscriber id is hash of encryption public key; keybox can be public without leaking pubkey.
- Registry, Subscription/Royalty, Slashing are three separate on-chain programs.
- Discovery ranking uses weighted sum of accuracy, latency, evidence, and price.
- MVP domain choice: ETH best price feed across sources.
- On-chain programs will use Rust with Anchor for MVP.
- Frontend will use Next.js.
- Backend and agents will use Node.js with TypeScript.
- Backend storage will use Postgres (Supabase) plus object storage for ciphertext and keyboxes.
- Backend uses an Anchor client to submit
record_signalon-chain when Solana env vars are set; testnet is the default cluster. - Devnet programs deployed and stream PDAs created; SOLANA_STREAM_MAP now maps stream IDs to on-chain PDAs.
- MVP uses backend wallet to sign on-chain subscriptions; UI exposes on-chain subscribe for demo.
- Frontend UI is now aligned with the introduction design system (colors, typography, layout).
- Wallet-based login registers user profiles and powers profile/bot/subscription views.
- Tapestry integration is implemented via SocialFi client and optional signal posting.
- Subscriptions now mint an on-chain 1-of-1 NFT (decimals 0) per subscription; UI reads subscriptions from chain (no DB storage).
- One wallet holds at most one subscription per stream (no multi-tier subscriptions for the same stream).
- Subscription NFTs are now soulbound using Token-2022 Non-Transferable mint (breaking compatibility with old NFTs).
- Next protocol version should require Tapestry as a first-class dependency: all discovery must be social, requests must be Tapestry posts, and all profiles must be on Tapestry.
- On-chain subscribe is now wallet-signed in the UI; profile reads subscriptions directly from chain (no backend storage).
- Keybox stored as a map (subscriber_id -> wrapped_key) so listeners decrypt only their own entry.
- SDK and MCP server added for agent signal listening (Solana + backend pointers).
- Signal
created_atis now anchored on-chain via Solana Clock sysvar (stored in ms) to prevent maker backdating. - Stream registry is enforced on-chain for subscribe and record_signal; only active registered streams can emit signals.
- Makers can only emit signals when there is at least one active subscription (subscription count tracked on-chain; cancel decrements, renew reactivates).
- Social layer is Tapestry-first: intents and slash reports are Tapestry posts, votes are likes, and comments are Tapestry comments; backend only indexes the feed.
- Social feed now supports follows and trending (sorted by Tapestry like counts); slash posts can link to challenge tx.
- Stream pages expose a Follow button (uses Tapestry profileId from stream map) and homepage shows Trending leaderboard.
- Tapestry API expects
propertiesfor content/profile andtextfor comments; base URL now uses the fly.dev/api/v1host for successful requests. - Subscribe inputs are tier-derived in the UI; users select a tier, and pricing type / evidence / quota / expiry are not user-editable at subscribe time (revisit later).
- On-chain subscribe now transfers lamports: a platform cut (1% = 100 bps) to stream
daoand the remainder to streamauthority(maker). - On-chain subscriber key registration is supported via
register_key(SubscriberKey PDA) to bind X25519 pubkeys on-chain. - Default model is one subscription encryption key per user per stream (SubscriptionKey PDA); all tiers for a stream reuse the same key.
- Tier prices are now stored on-chain via stream_registry
TierConfigPDAs and enforced during subscribe; price must match exactly. - Signal recording is latest-only: one
signal_latestPDA per stream; each signal update overwrites the same account (history kept off-chain). - Product name is now sigints.club (Signals Intelligence), not Stream.club.
- Protocol focus: perishable alpha + strategic foresight signals; streams are topics, signals are updates, intents are request posts.
- Discovery and social posting remain Tapestry-first (intents and signal posts are Tapestry content).
- Public streams are free and oracle-like (latest-only account). Private streams are encrypted and subscription-based.
- Private streams are monthly subscriptions only (no per-signal or limited tiers for MVP).
- Trust vs Verifiable are evidence modes for private streams; public streams are open.
- Public stream signals skip keyboxes; payloads live in
/storage/publicand on-chain keybox hashes are zeroed. - Tapestry is mandatory for discovery and social; backend no longer falls back to local stores for stream lists or feeds.
- Private keybox access is now gated by wallet signature + Token-2022 NFT ownership; backend only returns the caller’s keybox entry.
- Signal visibility is stream-level only (set at stream creation). Publish flow does not allow per-signal visibility; backend derives visibility from the stream and ignores client-provided values.
- Private streams require a registered SubscriptionKey PDA (stream + subscriber). The backend resolves subscription keys from chain at publish time;
/subscription-key/syncis validation-only (agents can be delegated to fetch keybox entries).