• v2.0.0 29e95485fa

    v2.0.0 — social feed + Twitter-style client

    vsecoder released this 2026-04-18 21:06:56 +02:00 | 10 commits to main since this release

    This is the first major bump: the old channel/broadcast model is
    fully removed, replaced with a VK/Twitter-style public feed. A new
    Phase of the stack (media scrubbing + FFmpeg sidecar) ships
    alongside, and the client app is folded into the main repo as a
    first-class part of the release.

    Chain

    • New events: CREATE_POST, DELETE_POST, FOLLOW, UNFOLLOW,
      LIKE_POST, UNLIKE_POST
    • New payloads: PostRecord, CreatePostPayload, DeletePostPayload,
      FollowPayload, LikePostPayload, UnlikePostPayload
    • New state prefixes: post:, postbyauthor:, follow:, followin:,
      like:, likecount:
    • Queries: Post, PostsByAuthor (with before-ts pagination),
      Following, Followers, LikeCount, HasLiked
    • Pricing: BasePostFee 1000 µT + PostByteFee 1 µT/byte;
      MaxPostSize 256 KiB; fee credited to HostingRelay
    • Integrity: reply_to/quote_of mutex; only-author DELETE;
      duplicate FOLLOW/LIKE rejected; content_hash required 32 B

    Relay

    • New feed_mailbox.go: per-post body storage, view counter,
      hashtag inverted index, TTL auto-eviction
    • envelope.Store: canonicalised ID + server-stamped SentAt
      (v1.0.1 hardening, preserved)

    Node HTTP

    • New /feed endpoints: publish, post/{id}, post/{id}/attachment,
      post/{id}/stats, post/{id}/view, author/{pub}, timeline,
      trending, foryou, hashtag/{tag}
    • /relay/broadcast promoted to primary E2E path; /relay/send
      flagged non-E2E (still served for backward compat)
    • DELETE /relay/inbox/{id} now requires Ed25519 signed auth
      against identity-registry
    • Rate limits on all /relay/* and /feed/* (withSubmitTxGuards
      • withReadLimit)
    • Feature flags: feed_v2, media_scrub, relay_broadcast added;
      channels_v1 removed

    Media

    • New media/ package with Scrubber type — mandatory EXIF/GPS/
      camera-info strip on every /feed/publish attachment
    • docker/media-sidecar/: FFmpeg-based video/audio re-encoder
      (runs alongside the node; node calls it via
      DCHAIN_MEDIA_SIDECAR_URL)

    Tests

    • blockchain: TestFeedCreatePost, TestFeedInsufficientFee,
      TestFeedFollowUnfollow, TestFeedLikeUnlike,
      TestFeedDeletePostByOther
    • relay: TestFeedMailbox{StoreAndGet,TooLarge,HashtagIndex,
      ViewCounter,ByAuthor,Delete,RecentIDs}
    • media: EXIF-canary regression test
    • node: end-to-end HTTP integration (TestE2EFullFlow +
      TestE2E{LikeUnlike,Timeline,Trending,ForYou,Hashtag,
      Scrubber,RejectsMIMEMismatch,BadSignature,StaleTimestamp})
    • node: two-node propagation (TestTwoNode{PostPropagation,
      LikeCounterSharedAcrossNodes,FollowGraphReplicates})

    Client (new in repo)

    • app/(app)/feed/ — three-tab feed (Подписки/Для вас/В тренде)
      with Twitter-style PostCard, infinite scroll, visibility-
      driven view counter, share-to-chat via embedded post card
    • app/(app)/compose.tsx — full-screen post composer with
      client-side image compression (expo-image-manipulator),
      live fee estimate, hashtag preview
    • app/(app)/feed/[id].tsx — full post detail screen
    • app/(app)/feed/tag/[tag].tsx — hashtag feed
    • app/(app)/profile/[address].tsx — profile page with
      Follow/Unfollow + info card
    • lib/feed.ts — every endpoint wrapped + tx builders
    • lib/forwardPost.ts — share-post-to-chat payload encoding
    • components/feed/ShareSheet.tsx, PostCard.tsx
    • components/chat/PostRefCard.tsx — embedded-post bubble

    Channels removal (breaking)

    • EventCreateChannel, EventAddMember removed
    • CreateChannelPayload, AddMemberPayload, ChannelMember removed
    • prefixChannel, prefixChanMember removed
    • chain.Channel(), chain.ChannelMembers() removed
    • node/api_channels.go removed
    • ExplorerQuery.GetChannel / GetChannelMembers removed
    • Client ContactKind stripped to 'direct' | 'group'
    • NavBar Feed tab: SOON pill removed

    Docs

    • New docs/api/feed.md — full feed API reference
    • docs/api/relay.md — rewritten with broadcast/send distinction
    • docs/architecture.md — L2 description updated, new social-feed
      section with flow diagram
    • docs/node/README.md — BadgerDB schema reference updated
    • README.md — feed mentioned in features, endpoint tables added
    Downloads