Skip to content
Commit 46932f2b authored by Alexandru Vasile's avatar Alexandru Vasile Committed by GitHub
Browse files

rpc: Implement `chainHead` RPC API (#12544)



* rpc/chain_head: Add event structure for serialization

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Add tests for events

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Add API trait for `chainHead`

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Add RPC errors

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Manage subscription ID tracking for pinned blocks

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Add tests for subscription management

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Constructor for the API

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Placeholders for API implementation

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Accept RPC subscription sink

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Generate the runtime API event

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Implement the `follow` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Implement the `body` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Implement the `header` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Implement the `storage` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Implement the `call` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Implement the `unpin` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* Update `Cargo.lock`

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Implement `getGenesis` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Fix clippy

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Parse params from hex string

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Constuct API with genesis hash

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Add the finalized block to reported tree route

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Export the API and events for better ergonomics

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Add test module with helper functions

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Test block events from the `follow` pubsub

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Test `genesisHash` getter

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Test `header` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Test `body` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Test calling into the runtime API

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Test runtime for the `follow` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Add runtime code changes for `follow` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Remove space from rustdoc

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Use the `child_key` for storage queries

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Test `storage` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Test child trie query for `storage` method

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Event serialization typo

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Remove subscription aliases

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Add `NetworkConfig` parameter

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Named parameters as camelCase if present

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Implement From<ApiError> for RuntimeEvents

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Handle pruning of the best block in finalization window

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Generate initial block events

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Verify that initial in-memory blocks are reported

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Verify the finalized event with forks and pruned blocks

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Fix clippy

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Separate logic for generating initial events

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Handle stopping a subscription ID

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Submit events until the "Stop" event is triggered

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Separate logic for handling new and finalized blocks

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Extend subscription logic with subId handle

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Adjust to the new subscription mngmt API

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Refuse RuntimeAPI calls without the runtime flag

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Verify RuntimeAPI calls without runtime flag

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Add best block per subscription

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Check storage keys for prefixes

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Check storage queries with invalid prefixes

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Allow maximum number of pinned blocks

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Test the maximum number of pinned blocks

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Adjust to origin/master and apply clippy

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* client/service: Enable the `chainHead` API

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Stop subscription on client disconnect and add debug logs

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Fix sending `Stop` on subscription exit

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Check best block is descendent of latest finalized

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* chain_head/tests: Report events before pruning the best block

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Nonrecursive initial block generation

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Generate initial events on subscription executor

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Reduce dev-dependencies for tokio

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* Apply suggestions from code review

Co-authored-by: default avatarSebastian Kunert <[email protected]>

* rpc/chain_head: Accept empty parameters

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Use debug of `HexDisplay` for full format

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Enable subscription ID

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Use jsonrpsee 16.2 camelCase feature for paramaters

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Use `NonZeroUsize` for `NetworkConfig` param

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

* rpc/chain_head: Rename `runtime_updates` to `has_runtime_updates`

Signed-off-by: default avatarAlexandru Vasile <[email protected]>

Signed-off-by: default avatarAlexandru Vasile <[email protected]>
Co-authored-by: default avatarSebastian Kunert <[email protected]>
parent b92aa3db
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment