Proto commits in farcasterxyz/snapchain-v0

These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)

Commit:87715c2
Author:topocount
Committer:GitHub

feat(mesh): network-wide topology crawl over the gossip port (#928) Add an admin-gated crawl that assembles a network-wide view of the validator mesh by querying each connected validator for its local mesh view and aggregating the responses. - gossip: a sibling request-response behaviour for mesh diagnostics (/snapchain/diagnostics/mesh/1.0.0), separate from the Malachite sync rpc so the wire format can evolve independently. The responder serves only validator peers (fail-closed); non-validators are refused. - proto: MeshTopology + UnreachableNode messages and a GetMeshTopology RPC; the per-node query reuses GetMeshViewRequest/MeshView verbatim. - crawl: connected-only — query every connected validator concurrently, classify each response against the local validator set, and surface unconnected/unresponsive validators as `unreachable` rather than dropping them. Traversal is always validators-only; readers are never queried. - http: /v1/mesh?crawl=true returnshe topology (ascii or json). - render: per-topic gossip-mesh display — the single-node table gains a column per topic and the crawl renders one adjacency matrix per topic (directional cells flag one-way links). Topics are chosen via ?topics=a,b (default consensus,mempool; `all` selects every topic), validated against the canonical topic list. - consensus: latest_validator_public_keys() — the latest validator set per shard, unioned — feeds both validator classification and the diagnostics gate, so a removed validator is excluded from both. resolves NEYN-11925

The documentation is generated from this commit.

Commit:ed87a50
Author:topocount
Committer:GitHub

feat(mesh): local mesh view endpoint `/v1/mesh` (#927) Add an admin-gated endpoint that returns a node's view of the gossip mesh and topology: connected peers, per-topic mesh membership, and per-peer/per-topic gossip rates. Validators are identified cryptographically — a peer's libp2p PeerId is derived from its Ed25519 signing key and matched against the validator set at the current height — not by a heuristic. - proto: GetMeshView RPC + MeshView/MeshSelf/MeshPeer/TopicMembership/ GossipRate messages; ContactSource and MeshNodeType enums. Reserve ttl/visited_peer_ids on the request for the future propagating crawl. - gossip: track observed connection addresses separately from peer-attested contact info; assemble the raw mesh view from gossipsub all_peers/mesh_peers + sampled gossip-rate counters. - server: classify peers against the validator set (the only place pubkey -> set mapping happens) and admin-gate via admin_rpc_auth. - http_server: /v1/mesh route with ?at=ascii|json and ?validators_only=; ASCII table + consensus-mesh graph renderer. Bundled fix: connected peers lacking collected contact info (e.g. validators, which never publish it) were dropped from /v1/currentPeers. They now appear tagged source=DERIVED with their observed address, never conflated with COLLECTED peer-attested data. Properly fixing validator contact-info publishing is tracked in #911 / NEYN-11921. resolves #911 resolves NEYN-11921 merge plan: merge after #926

Commit:c292bfd
Author:Ty Book
Committer:GitHub

Add LIVE_AT user data support (#899) ## Summary Implementation of https://github.com/farcasterxyz/protocol/discussions/268 for Linear NEYN-10699. - Add `USER_DATA_TYPE_LIVE_AT = 14` with V17 feature gating and length-only validation. - Add a separate LIVE_AT mempool rate-limit budget based on storage units, with invalidation on storage rent and storage lending changes. - Coalesce pending LIVE_AT heartbeats by full LWW ordering (`timestamp + hash`) so each fid has at most one pending LIVE_AT per shard. - Add validation, mempool, rate-limit, consensus/devnet coverage, and docs/changelog updates. - Fix local Docker devnet peering so the compose stack can be used for end-to-end validation. ## Release schedule V17 enables `ProtocolFeature::LiveAt` by network schedule: - Testnet: 2026-05-21 5:00 PM UTC (`1779382800`) - Mainnet: 2026-06-04 5:00 PM UTC (`1780592400`) Nodes must deploy this PR's build before each network's `active_at`. Devnet is already V17 at `active_at = 0`, so local devnets accept LIVE_AT immediately. ## Test plan - `PATH="$HOME/.cargo/bin:$PATH" rustup run stable rustfmt --edition 2024 src/version/version.rs` - `PATH="$HOME/.cargo/bin:$PATH" rustup run stable cargo test test_live_at --lib` - `PATH="$HOME/.cargo/bin:$PATH" rustup run stable cargo test live_at_budget --lib` - `PATH="$HOME/.cargo/bin:$PATH" rustup run stable cargo test live_at_rate_limit_rejects_zero_storage_units --lib` - `PATH="$HOME/.cargo/bin:$PATH" rustup run stable cargo test live_at_activation_schedule --lib` - `PATH="$HOME/.cargo/bin:$PATH" rustup run stable cargo test test_next_version_timestamp_for --lib` - `PATH="$HOME/.cargo/bin:$PATH" rustup run stable cargo test test_live_at_consensus --test consensus_test` - Local Docker devnet smoke: `docker compose build`, `docker compose up`, verified `/v1/info` block progress and LIVE_AT set/update/clear readback through the running devnet. Made with [Cursor](https://cursor.com) --------- Co-authored-by: Cursor <cursoragent@cursor.com>

Commit:82f7518
Author:topocount
Committer:GitHub

feat: surface current user/app nonces on signersByFid (#888) Adds `current_user_nonce` (always populated) and `requester_fid_nonces` (map<uint64, uint32> keyed by requester FID) to SignersByFidResponse, plus a new SignersByFidRequest carrying repeated `requester_fids` for batched lookups. Exposes the gasless-key counters that previously lived only behind merge-time validation, so clients composing the next signed- key-request no longer have to track nonces locally — including across revocations, where the per-key record is gone but the counter persists.

Commit:0fb53e3
Author:topocount
Committer:GitHub

feat: add unified signer API with on-chain and off-chain support (#864) This commit introduces a new unified signer API, including the `GetSigner` and `GetSignersByFid` RPC methods, which return both on-chain and off-chain (gasless) signer records. The `Signer` message structure is enhanced to accommodate fields relevant to both sources, and the corresponding responses are defined. Additionally, tests are added to ensure the correct functionality of the new API endpoints, verifying the integration of on-chain and gasless key records. This change aims to streamline the signer retrieval process and improve overall API usability.

Commit:4ed61da
Author:Copilot
Committer:GitHub

Remove shard_id from BlocksRequest (#822) `GetBlocks` always returns blocks from shard 0 regardless of the `shard_id` value in `BlocksRequest`, making the field silently misleading to callers. ### Changes - **Proto**: Remove `shard_id` (field 1) from `BlocksRequest`; mark as `reserved` to prevent field number reuse - **Rust**: Remove `shard_id: 0` from `BlocksRequest` construction in `cli.rs` and `rpc_client.rs` - **Docs**: Update `blocks.md` to drop `shard_id` from the `BlocksRequest` table ```proto // Before message BlocksRequest { uint32 shard_id = 1; uint64 start_block_number = 2; optional uint64 stop_block_number = 3; } // After message BlocksRequest { reserved 1; reserved "shard_id"; uint64 start_block_number = 2; optional uint64 stop_block_number = 3; } ``` --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: manan19 <377624+manan19@users.noreply.github.com>

Commit:11ef8a2
Author:topocount
Committer:GitHub

feat: add KEY_ADD and KEY_REMOVE to protos (#786) add empty handlers where needed

Commit:2de072c
Author:Aditi Srinivasan
Committer:Aditi Srinivasan

debug account root mismatch

Commit:93dc859
Author:Christopher Wallace
Committer:GitHub

feat: separate proto files into standalone crate (#729) ## Summary - Extracts protocol buffer definitions into a separate `snapchain-proto` crate so consumers can import protos without depending on the entire snapchain project - Converts the project to a Cargo workspace with `proto/` as a workspace member - Uses extension traits pattern to maintain functionality while respecting Rust's orphan rules ## Changes - Create `proto/` workspace member with its own `Cargo.toml` and `build.rs` - Move proto definitions from `src/proto/` to `proto/definitions/` - Move proto-only impls (Height, ShardHash, Message, FullProposal, ConsensusMessage, BlockEvent) to proto crate - Add extension traits for methods requiring main crate types: - `CommitsExt` for commit certificate conversion - `FullProposalExt` for proposer address - `HubEventExt` for event construction - `HubEventStorageExt` for storage operations - Rename `HubEvent::from()` to `HubEvent::new_event()` to avoid trait conflict with `std::convert::From` ## Test plan - [ ] Docker compose build passes - [ ] All existing tests pass - [ ] Proto crate can be imported independently

Commit:3e753b6
Author:Aditi Srinivasan
Committer:GitHub

chore: add more information about lent and borrowed units to rpc (#717) Update the `GetCurrentStorageLimitsByFid` rpc to include details about how many units are lent, borrowed, and purchased to figure out where there's a discrepancy between snapchain and the client.

Commit:e634aa8
Author:Aditi Srinivasan
Committer:GitHub

chore: add bulk rpc for querying `LendStorage` messages (#702) This rpc provides us a way to know if a `LendStorage` message has been merged into snapchain.

Commit:bd553ec
Author:Aditi Srinivasan
Committer:GitHub

feat: enable migrating onchain events to shard 0 and fix bugs with storage lending (#669) Add an rpc to migrate onchain events to shard 0 from each of the shard 1 and 2. In addition, this feature contains several fixes necessary to support storage lends properly. The bugs were discovered while testing in testnet. As of this feature storage lending is fully supported in testnet. Fixes: - Reset event id to the current block number when starting to propose, validate, or commit a block in the block engine. This was missing so all event ids were being produced with height 0 and we exhausted the available sequence numbers. - Force storage lenders to retain 1 unit of storage so they can revoke storage they've lent. Otherwise, the lender runs into rate limits when trying to revoke lent storage after lending all their storage out. This is easier and safer than bypassing rate limits. - Listen to confirmed blocks in the mempool and evict storage lends that have been put into blocks in shard 0. - Have rate limits in the mempool key off the fid's shard and never shard 0. The mempool was crashing trying to find a `ShardStore` for shard 0. - Add a count of onchain events to the `GetInfo` rpc so we can validate that the migration of onchain events to shard 0 has happened correctly.

Commit:32fa4b1
Author:Aditi Srinivasan
Committer:GitHub

chore: separate out ContactInfo and GossipMessage protos (#695) The client protos fail to generate with an error because the type definition for `GossipMessage` is too big. Separate out `ContactInfo` and `GossipMessage` so we can use `ContactInfo` in rpcs on the client without having to pull in `GossipMessage`.

Commit:f136e05
Author:adityapk00
Committer:GitHub

feat: Discover nodes to sync with using gossip p2p (#682) when replication starts, we seed it with an initial bootstrap list. The replication service then spins up a lightweight gossip node to discover peers to sync against.

Commit:05b8bf5
Author:adityapk00
Committer:GitHub

feat: Configure or get (from public IP) announce_rpc_address (#681) Allow setting a `announce_rpc_address` in the config and share that out in the ContactInfo gossip messages. If not configured, get it from public IP

Commit:3821bc1
Author:Aditi Srinivasan
Committer:GitHub

feat: support storage lending in the shard and block engines (#665) Support storage lending. This feature enables support for storage lending in the `BlockEngine` and `ShardEngine` but the messages aren't handled properly in the rpc server and mempool yet.

Commit:01ce09d
Author:adityapk00
Committer:GitHub

feat: Add the ability to start a node via replication (#667) These are the client changes to support replication. It's not enabled yet, once we feel confident with some manual testing, I'll turn it on.

Commit:a4acb11
Author:Aditi Srinivasan

feat: implement system message to revalidate a user message with external proofs

Commit:81a7f5f
Author:Aditi Srinivasan
Committer:Aditi Srinivasan

feat: periodically revoke invalid ens proofs

Commit:8290347
Author:Sanjay
Committer:GitHub

feat: Add profile token user data type (#666) Implement https://github.com/farcasterxyz/protocol/discussions/247. Will go live on the protocol on Sep 24 (engine version 10)

Commit:541cb3f
Author:adityapk00
Committer:GitHub

feat: Add trie-based replication server (#663) Modify the replication server to use trie-based iteration to get all messages instead of by DB.

Commit:5339d97
Author:Aditi Srinivasan
Committer:GitHub

feat: read block events from shard 0 in other shards (#639) Have all other shards consume block events from shard 0.

Commit:00a776c
Author:Aditya Kulkarni

Merge remote-tracking branch 'adityapk/trie_iteration_replicator' into trie_iteration_client

Commit:2d94da9
Author:Aditya Kulkarni

return shard_chunk and blocks in metadata

Commit:57fdbc1
Author:Aditya Kulkarni

wip

Commit:e853adf
Author:Aditya Kulkarni

fix panic while decoding trie key

Commit:bf64df2
Author:Aditya Kulkarni

wip

Commit:2a4bd80
Author:Aditya Kulkarni

Merge remote-tracking branch 'origin/main' into trie_iteration_replicator

Commit:a60e5a2
Author:Aditya Kulkarni

Merge remote-tracking branch 'adityapk/trie_iteration_replicator' into trie_iteration_client

Commit:4d62fd0
Author:adityapk00
Committer:GitHub

feat: Allow attaching orphaned nodes to the merkle trie (#651) When we write to the trie from parallel threads (like we do in the replicator), we will write "orphaned" nodes. These are nodes that are written to the DB, but not yet attached to the root node. This is because we want to write in parallel threads to different parts of the trie. Once the operation is done, we call `attach_to_root` and `recalculate_hashes` to add new nodes to the trie. This way, we can parallelize construction of the trie. Also remove excluded_hash() and snapshot() which we don't use anymore. The `get_trie_node_metadata` is still supported, which can be used to get info about the parts of a trie.

Commit:a912c1e
Author:Aditya Kulkarni

add onchain event support

Commit:250915a
Author:Aditya Kulkarni

read user messages

Commit:1e63e00
Author:Aditi Srinivasan
Committer:GitHub

feat: produce transactions and events in shard 0 (#634) Produce blocks from shard 0 that contain block events and transactions. We use a heartbeat event for testing the events pipeline.

Commit:8c1f942
Author:Aditi Srinivasan
Committer:Aditi Srinivasan

fixes

Commit:c80dc67
Author:Aditi Srinivasan
Committer:Aditi Srinivasan

rough end to end impl of cross shard communication

Commit:50a8833
Author:Sanjay Raveendran
Committer:Sanjay Raveendran

Upgrade malachite to latest

Commit:a6b4a2b
Author:Paul
Committer:GitHub

Add transaction replication endpoint(s) (#606) Adds endpoints for fetching replication shapshot metadata and transactions for a given shard. --------- Co-authored-by: Paul <515868+eyeamera@users.noreply.github.com>

Commit:592d858
Author:adityapk00
Committer:GitHub

feat: Add SubmitBulkMessages rpc/http API (#600) Add the SubmitBulkMessages API (which had been commented out). The endpoint (both grpc and http API) accepts an array of messages, and submits them sequentially. Right now, the messages need to be independent (i.e., a message that depends on a previous message in the array to succeed is not supported yet) It will attempt to merge all the messages, and return success/failure for each one individually

Commit:47fc859
Author:Sanjay
Committer:GitHub

feat: expose next engine version timestamp in GetInfo API (#595) Based on https://github.com/farcasterxyz/snapchain/pull/587 Fixes https://github.com/farcasterxyz/snapchain/issues/586 --------- Co-authored-by: christopherwxyz <christopher@unofficial.run>

Commit:302cf60
Author:Paul
Committer:GitHub

Read implementation for replication (#589) Adds: - Extension to Engine to support replaying individual transactions for backfilling FID state data - ReplicationStores: used to hold "snapshots" (read-only views) into individual shard stores taken at a specified block interval. These snapshots are utilized to provide a consistent view into FID data at known block height(s). - Replicator: the business logic for taking snapshots and exporting FID data - Replication Service: a new grpc service that exposes an interface in front of replicator for querying FID state. Follow-ups: - [ ] Some accounts have a lot of messages (e.g. fids 2 and 3) so we'll need to sync them over multiple requests. - [ ] Solve for message ordering at the engine level [:link:](https://github.com/farcasterxyz/snapchain/pull/589#discussion_r2216488125) - [ ] Allow db-free lookups at the engine level (e.g. when an FID doesn't exist we shouldn't error) - [ ] Don't commit transactions for FID unless the account root matches [:link:](https://github.com/farcasterxyz/snapchain/pull/589#discussion_r2221348609) Towards: #510 --------- Co-authored-by: Paul <515868+eyeamera@users.noreply.github.com>

Commit:46f736e
Author:Frederik Bolding
Committer:GitHub

feat: Add endpoint for connected peers (#541) Add RPC endpoint for getting the currently connected peers. To do this, introduces a `BTreeMap` in `SnapchainGossip` that stores the contact info received from other peers.

Commit:6dc8dfa
Author:Sanjay
Committer:GitHub

feat: Storage redenomination (#570) Implements the Storage Re-denomination FIP: https://github.com/farcasterxyz/protocol/discussions/229 As part of it, we're also extending the expiry of storage units that are set to expire on Aug 29 2025 by one year.

Commit:8515428
Author:Sanjay
Committer:GitHub

feat: Add admin endpoint to retry fname transfers (#546) Admin endpoint to retry fname transfers by fid.

Commit:a0367ad
Author:Aditi Srinivasan
Committer:GitHub

feat: add event counts per event type to BlockConfirmed (#555) This is required to help the client determine if there are missed events with filtering applied on the event stream.

Commit:60d1d0b
Author:Abdul Azeem Shaik
Committer:GitHub

feat: Add Block Confirmed event type as the first event emitted for a block (#549) #544 Adds a "block confirmed" event to signal block finalization. This event includes block metadata such as number, hash, timestamp, and total event count.

Commit:25af843
Author:Christopher Wallace
Committer:GitHub

feat: unified fid address type endpoint (#535) Add GetFidAddressType endpoint for unified address validation as reference in https://github.com/farcasterxyz/snapchain/issues/529 ## Summary Adds a new `GetFidAddressType` endpoint that checks if an address is valid as a custody address, auth address, or verified address in a single API call. ## Problem Currently, SIWF (Sign-In With Farcaster) authentication requires racing multiple API calls to check if an address is valid: - Check IdRegistry for custody addresses - Check KeyRegistry for auth addresses (keyType=2) - Check verified addresses This is inefficient and adds unnecessary complexity. ## Solution New endpoint `GetFidAddressType(fid, address)` returns: ```proto { is_custody: boolean, // Address owns the FID (IdRegistry) is_auth: boolean, // Address is an auth key (KeyRegistry keyType=2) is_verified: boolean, // Address is verified for this FID valid: boolean // Any of the above is true } ``` ## Changes - Added proto definitions for `FidAddressTypeRequest` and `FidAddressTypeResponse` - Implemented gRPC endpoint in `server.rs` - Added HTTP endpoint `/v1/fidAddressType` - Added comprehensive tests ## Benefits - Single API call instead of multiple racing requests - Simplified client implementation for SIWF - Clear distinction between address types - Supports farcaster.xyz using custody addresses on mobile and auth addresses on web

Commit:324339b
Author:Daniel Pyrathon
Committer:GitHub

Adds Primary Address support to Snapchain (#465) Implementation should mirror [the updated FIP](https://github.com/farcasterxyz/protocol/discussions/141) This is an initial draft of the PR, I have a hunch that it's ~80% there but it's also worth opening up for quick feedback to make sure I don't invest time in the wrong direction.

Commit:7f3430b
Author:Aditi Srinivasan
Committer:GitHub

feat: support pro users (#516) Add support for pro users.

Commit:c1e6027
Author:Aditi Srinivasan
Committer:GitHub

perf: Fix perf test script (#507) - Adds implementation to Admin APIs (`submit_user_name_proof`, `submit_on_chain_event`) for perf tests. These are only accessible on unspecified or dev networks. - Updates perftest w/ a sleep to allow for previous messages to be processed - Updates CLI utils to utilize auth for `send_message` and `send_on_chain_event` --------- Co-authored-by: Sanjay Raveendran <sanjayprabhu@gmail.com> Co-authored-by: Paul <515868+eyeamera@users.noreply.github.com>

Commit:52be669
Author:Sanjay
Committer:GitHub

feat: Support Basenames (#515) Implement https://github.com/farcasterxyz/protocol/discussions/234 to support basenames Todo: - [x] Unit Tests - [x] Username length validation update - [ ] Manual verification

Commit:d44f410
Author:Daniel Pyrathon
Committer:Daniel Pyrathon

Add validation for Ethereum and Solana primary address user data types

Commit:1b7afa3
Author:Aditi Srinivasan
Committer:GitHub

chore: add ability to upload snapshot just for 1 shard (#496) This allows us to manually retry just 1 shard rather than all of them.

Commit:ee1f643
Author:Aditi Srinivasan
Committer:GitHub

feat: add timestamp to hub event (#409) This makes it much easier to determine how far behind you are. https://github.com/farcasterxyz/snapchain/issues/397

Commit:6fd0d96
Author:Frederik Bolding
Committer:GitHub

feat: Add GetFids API (#407) Implement `GetFids` and `v1/fids` which was previously stubbed out. I've tried to follow the established patterns as much as possible for constructing `next_page_token` etc. I also had to modify `get_onchain_events` to allow requests that aren't tied directly to fids. Closes https://github.com/farcasterxyz/snapchain/issues/392

Commit:37ca0ab
Author:Sanjay
Committer:GitHub

fix: implement /v1/events HTTP API endpoint (#451) Inheriting from https://github.com/farcasterxyz/snapchain/pull/411. Merged main and cleaned up some api inconsistencies --------- Co-authored-by: gr4yha7 <jamaal.ekpenyong22@gmail.com>

Commit:8028a15
Author:Aditi Srinivasan

feat: handle slow peers in gossip

Commit:700f438
Author:Aditi Srinivasan

fix: make GetInfo mirror hubs GetInfo

Commit:e320b5d
Author:Sanjay Raveendran

feat: Introduce new unit type for FIP

Commit:0e50e40
Author:Sanjay
Committer:GitHub

[feat] Add new event type for merge failures (#374) Add a new HubEvent type for merge failures that contains the error code and reason why message failed to be merged. This is useful for clients who submit messages which were included into the mempool, but then failed later. Also updates some api error messages to be consistent with hubs, as well as return some additional fields in `GetInfo` and `HubEvent`

Commit:c03d966
Author:Quazia
Committer:GitHub

feat: Return block number as a field in Event (#359) - Add a new `HubEventResponse` message to `request_response.proto` - Add helper for converting a `HubEvent` to a `HubEventResponse` in `event.rs` - Use helper in existing Events API endpoint (subscribe) in `server.rs` - Change return type for Events API in `rpc.proto` - Add tests to `server_tests` ### TODO - [x] Implement GetEvent with new `HubEventResponse` closes #344 When reviewing I think the biggest thing to confirm is that I'm handling the shard index and store lookup correctly. --------- Co-authored-by: Sanjay <sanjayprabhu@gmail.com>

Commit:f2a362c
Author:Sanjay
Committer:GitHub

fix: Keep subscribe shard index backwards compatible (#364) Subscribe call is not backwards compatible with existing clients because the sequence id changed on the protobuf, keep it the same. And some other minor fixes.

Commit:4f54f76
Author:Aditi Srinivasan
Committer:GitHub

feat: support peer autodiscovery (#337) Allow nodes to find each other so that they can receive data from nodes other than the bootstrap nodes.

Commit:edd5bba
Author:Aditi Srinivasan
Committer:GitHub

feat: admin rpc to retry onchain events by fid and block range (#334) We dropped some onchain events during the initial sync and need an admin rpc to retrigger ingest for the range we missed. Tested locally. ``` ❯ grpcurl -plaintext -proto src/proto/admin_rpc.proto -d '{"fid" : 1030970}' -import-path src/proto 127.0.0.1:3383 AdminService/RetryOnchainEvents {} ❯ grpcurl -plaintext -proto src/proto/admin_rpc.proto -d '{"block_range": {"start_block_number" : 133577805, "stop_block_number": 133577810}}' -import-path src/proto 127.0.0.1:3383 AdminService/RetryOnchainEvents ``` ``` 2025-03-26T03:50:14.112717Z INFO snapchain::connectors::onchain_events: Starting l2 events subscription latest_block_on_chain=133681118 latest_block_in_db=133669197 2025-03-26T03:50:23.013693Z INFO snapchain::connectors::onchain_events: Retrying onchain events for fid fid=1030970 2025-03-26T03:50:23.194556Z INFO snapchain::connectors::onchain_events: Processed onchain event fid=1030970 event_type="EVENT_TYPE_STORAGE_RENT" block_number=133577808 block_timestamp=1742754393 tx_hash="9a158395ecd3ba711c0d6c7ca7de39fb6f33044b9e889029bae49b5ebfb8b88f" log_index=21 2025-03-26T03:50:23.388938Z INFO snapchain::connectors::onchain_events: Processed onchain event fid=1030970 event_type="EVENT_TYPE_SIGNER" block_number=133577808 block_timestamp=1742754393 tx_hash="9a158395ecd3ba711c0d6c7ca7de39fb6f33044b9e889029bae49b5ebfb8b88f" log_index=22 2025-03-26T03:50:23.576881Z INFO snapchain::connectors::onchain_events: Processed onchain event fid=1030970 event_type="EVENT_TYPE_ID_REGISTER" block_number=133577808 block_timestamp=1742754393 tx_hash="9a158395ecd3ba711c0d6c7ca7de39fb6f33044b9e889029bae49b5ebfb8b88f" log_index=20 2025-03-26T03:51:50.404134Z INFO snapchain::connectors::onchain_events: Retrying onchain events in range start_block_number=133577805 stop_block_number=133577810 2025-03-26T03:51:50.556316Z INFO snapchain::connectors::onchain_events: Processed onchain event fid=1030970 event_type="EVENT_TYPE_ID_REGISTER" block_number=133577808 block_timestamp=1742754393 tx_hash="9a158395ecd3ba711c0d6c7ca7de39fb6f33044b9e889029bae49b5ebfb8b88f" log_index=20 2025-03-26T03:51:50.622399Z INFO snapchain::connectors::onchain_events: Processed onchain event fid=1030970 event_type="EVENT_TYPE_STORAGE_RENT" block_number=133577808 block_timestamp=1742754393 tx_hash="9a158395ecd3ba711c0d6c7ca7de39fb6f33044b9e889029bae49b5ebfb8b88f" log_index=21 2025-03-26T03:51:50.696271Z INFO snapchain::connectors::onchain_events: Processed onchain event fid=1030970 event_type="EVENT_TYPE_SIGNER" block_number=133577808 block_timestamp=1742754393 tx_hash="9a158395ecd3ba711c0d6c7ca7de39fb6f33044b9e889029bae49b5ebfb8b88f" log_index=22 2025-03-26T03:51:50.785513Z INFO snapchain::connectors::onchain_events: Processed onchain event fid=1030971 event_type="EVENT_TYPE_ID_REGISTER" block_number=133577810 block_timestamp=1742754397 tx_hash="3597280e93945aad66d507e553ff13ae33055e2b39920f6f1b41434d9230139e" log_index=6 2025-03-26T03:51:50.848978Z INFO snapchain::connectors::onchain_events: Processed onchain event fid=1030971 event_type="EVENT_TYPE_STORAGE_RENT" block_number=133577810 block_timestamp=1742754397 tx_hash="3597280e93945aad66d507e553ff13ae33055e2b39920f6f1b41434d9230139e" log_index=7 2025-03-26T03:51:50.922974Z INFO snapchain::connectors::onchain_events: Processed onchain event fid=1030971 event_type="EVENT_TYPE_SIGNER" block_number=133577810 block_timestamp=1742754397 tx_hash="3597280e93945aad66d507e553ff13ae33055e2b39920f6f1b41434d9230139e" log_index=8 ```

Commit:92a2364
Author:Sanjay
Committer:GitHub

feat: Add mempool size to getInfo (#333) Return the size of the mempool in getInfo

Commit:21ea09f
Author:Sanjay
Committer:Sanjay Raveendran

feat: Add auth for rpc endpoints and cleanup admin rpc (#323) Add auth for submit and subscribe rpc endpoints. And for admin endpoints. Don't mount the admin endpoint if admin rpc auth is not configured. Also remove admin endpoints that directly mutate state, we shouldn't allow this for mainnet

Commit:98d3ec4
Author:Cassandra Heart
Committer:GitHub

feat: add missing methods (#291)

Commit:36b6300
Author:Sanjay
Committer:GitHub

feat: Read node documentation and related fixes (#289) Add documentation for how to run a read node and related small fixes around logging and add missing Info http endpoint

Commit:13bbbce
Author:Aditi Srinivasan
Committer:GitHub

support read nodes (#267) Add support for nodes that can listen to committed blocks and serve rpcs but won't participate in consensus.

Commit:49c5902
Author:Sanjay
Committer:GitHub

fix: Block production fixes (#264) - Add consistent 250ms (by default) block time via commit timeout - Don't store full shard chunks in the block, just store headers - Look up chunks from shard db instead of waiting on the channel (fixes block proposer getting stuck forever if it didn't get a chunk in time) - Fix consensus tests not correctly including messages - Delete unused sync code - set max_messages per block to 500 to compensate for slower block time (~1mbs at 200 bytes per messages * 500 * 2 shards * 4 blocks per sec at 250ms). We probably have some room to bump this higher, but need to be mindful of the number of shards running on the same node.

Commit:7f53d5b
Author:Sanjay
Committer:GitHub

Add shard info to getInfo RPC (#251) Add shard info to getInfo so we have more visibility into the current heights.

Commit:bca94b6
Author:Aditi Srinivasan
Committer:GitHub

pick up fname transfer ingest from where it left off (#246) Start ingesting fname transfer from where the node stopped before restart.

Commit:74cb822
Author:Aditi Srinivasan
Committer:GitHub

clean up on chain event ingest persistence (#245) Clean up code for onchain events persistence.

Commit:88a8ad4
Author:Aditi Srinivasan
Committer:GitHub

pick up on chain events ingestion where it left off (#244) Store the last ingested onchain event and pick up ingestion where we left off.

Commit:85defc7
Author:Cassandra Heart
Committer:GitHub

feat: additional read apis for grpc, fleshing out http server (#242) Adds the other read apis we can currently support for gRPC, and scaffolds out most of the http api, but isn't exposed via mod so cargo doesn't try to compile it

Commit:dcdca70
Author:Sanjay
Committer:GitHub

Remove old consensus (#241) Remove code for the pre malachite 0.0.1 consensus implementation. And add a tool to generate keypairs

Commit:20cbee2
Author:Sanjay
Committer:GitHub

Rewrite malachite integration (#239) - Upgrade to malachite v0.0.1 - Rewrite integration to be at the actor level instead of re-implementing the malachite consensus actor - Implement malachite sync

Commit:a3bae68
Author:Aditi Srinivasan
Committer:GitHub

upload snapshots to s3 (#233) Clear existing snapshots and upload new ones to s3 via an admin rpc.

Commit:548053b
Author:Aditi Srinivasan
Committer:Aditi Srinivasan

add fixed validator set

Commit:813b040
Author:Aditi Srinivasan
Committer:Aditi Srinivasan

populate validators on blocks

Commit:43edeb7
Author:Frederik Bolding
Committer:GitHub

feat: Add gossip and eviction to the mempool (#200) This PR adds a basic implementation of the gossipped mempool described in #180. It uses the existing mempool implementation but changes the key to use a key derived from the timestamp and identity of a message. Additions to the mempool are broadcast using a new gossip message. Messages are also evicted from the mempool when shard chunks are emitted that contain messages contained in the mempool. Some minor changes to the channels and overall plumbing was required to setup the mempool communication.

Commit:b04ceb0
Author:Aditi Srinivasan
Committer:GitHub

add rpc for trie inspection (#196) Port the equivalent of the `GetSyncMetadataByPrefix` rpc from hubs. Here, there a trie per shard, so we specify the shard id in the request.

Commit:03ebb7b
Author:suurkivi
Committer:GitHub

turbohash (#171) This change stores the hash of a trie node in the node's parent (in a hashmap). This yields an important performance improvement when recomputing the hash of a changed node. Previously, when recomputing the hash, as we are working our way up the trie, we had to load siblings of a changed node out of the db. In this version, the sibling hashes are already loaded, which dramatically reduces the number of db reads.

Commit:22bb674
Author:suurkivi
Committer:suurkivi

turbohash

Commit:23d011f
Author:Sanjay
Committer:GitHub

Implement Storage Limit RPC (#163)

Commit:c336ed3
Author:Aditi Srinivasan
Committer:GitHub

submit username proofs via admin rpc (#162) We need fnames in snapchain for the migration and an rpc to allow us to submit them. Tested this by running the migration with username proofs.

Commit:2b09536
Author:Sanjay
Committer:GitHub

More read apis (#161) Implement read apis for most of the remaining stores

Commit:dc80981
Author:suurkivi

serde

Commit:5ea86a6
Author:Sanjay
Committer:GitHub

Implement GetCast read api and prepare for rest of the read rpcs (#156)

Commit:01431b6
Author:Aditi Srinivasan
Committer:GitHub

add overall fid message count to stats (#150) Add overall per-fid message count to the `GetInfoByFid` rpc response. This is useful for understanding message count discrepancies in onchain events. ``` ❯ grpcurl -plaintext -proto src/proto/rpc.proto -import-path src/proto -d '{"fid": 522}' 127.0.0.1:3383 HubService/GetInfoByFid { "numMessages": "70", "numMessagesByMessageType": { "1": "14", "2": "0", "3": "0", "4": "0", "5": "49", "6": "0", "7": "0", "8": "0", "11": "3", "12": "0", "13": "0", "14": "0" } } ```

Commit:2305f82
Author:Aditi Srinivasan
Committer:GitHub

add endpoint for message counts by fid (#149) It's useful to have visibility into which message types have differing counts for reach fid to validate the migration. ``` ❯ grpcurl -plaintext -proto src/proto/rpc.proto -import-path src/proto -d '{"fid": 503}' 127.0.0.1:3383 HubService/GetInfoByFid { "numMessagesByMessageType": { "1": "100", "2": "0", "3": "386", "4": "17", "5": "97", "6": "0", "7": "0", "8": "0", "11": "0", "12": "0", "13": "0", "14": "0" } } ```

Commit:e68ee63
Author:Aditi Srinivasan
Committer:GitHub

implement a get info rpc (#147) This rpc is useful for understanding if messages are actually getting merged upon submit. ``` ❯ grpcurl -plaintext -proto src/proto/rpc.proto -import-path src/proto 127.0.0.1:3383 HubService/GetInfo { "dbStats": { "numMessages": "23219", "numFidRegistrations": "10", "approxSize": "47380709" } } ```

Commit:af9e7ae
Author:suurkivi
Committer:GitHub

shard routing (#140)

Commit:ff99cf1
Author:Aditi Srinivasan
Committer:GitHub

remove package names from protos so that rpcs are compatible between hubs and snapchain (#120) Remove package names so that rpcs are compatible between snapchain and hubs.

Commit:461c4d1
Author:Aditi Srinivasan
Committer:GitHub

Revert "add submitLegacyMessage endpoint (#124)" (#130) This reverts commit d7a2df8ef6f9e0a1547a65bee78516590331ec6f.

Commit:657c488
Author:Aditi Srinivasan
Committer:GitHub

Revert "create separate service at root namespace for hub compatible … (#129) This reverts commit 32d935e32eb8648822433341ae928a01a41dc40d.

Commit:32d935e
Author:Aditi Srinivasan
Committer:GitHub

create separate service at root namespace for hub compatible rpcs (#127) Putting `submitLegacyMessage` in the existing rpc service doesn't work due to namespacing issues-- the service is in the "rpc" namespace. Move this endpoint into a new service at the root namespace that exactly matches the proto structure of the parallel hub rpc. Future compatible rpcs should go there too.

Commit:3852b48
Author:Sanjay
Committer:GitHub

Support registering fnames as usernames (#125) Support for merging fname proofs and validation to ensure username can only be merged with the correct proof

Commit:d7a2df8
Author:Aditi Srinivasan
Committer:GitHub

add submitLegacyMessage endpoint (#124) We'll use this endpoint for submitting existing hub messages to snapchain nodes. This avoids us needing to remove qualified module names.

Commit:dd80b5e
Author:Aditi Srinivasan
Committer:GitHub

rename SnapchainService to HubService (#122) The service name needs to be the same as it is in the existing hubs for compatibility.

Commit:75ece71
Author:Aditi Srinivasan
Committer:GitHub

add endpoint for submitting onchain events via rpc (#105) We need to have a storage allocation for an fid before we can accept a message for it. Add the ability to submit an onchain event via rpc to unblock successfully submitting messages via rpc.