cronos icon indicating copy to clipboard operation
cronos copied to clipboard

Problem: don't support distributed state query service

Open yihuang opened this issue 3 years ago • 3 comments

Currently to provide distributed public json-rpc service, one need to run multiple full nodes, each node sync the chain directly. With the help of recent new features, it's possible to replicate the chain state directly and setup cheaper distributed query service.

  • cosmos-sdk already support state streaming^1, but there's only a file based implementation builtin.
  • cosmos-sdk already support --grpc-only mode.
  • we are implementing another streaming service which save the historical states in a db^2, and eventually will use this db to support the grpc query server.

We just need one more piece to complete the puzzle: replicate the state stream across multiple processes.

Implementation ideas:

  • based on the builtin file streamer
    • do we need to keep the abci begin/end headers?
    • do we keep the insertion order, or merge the writes? The insertion order enables consumer to reconstruct the iavl tree.
    • one file per block which is easier for client to sync?
    • Is millions of files under single directory is too much? could separate directories based on parts of digits in block number.
  • open a http server to serve these files.
  • start client node in --grpc-only mode, and sync the stream files in the order of block numbers, feed them to the version db^2.
  • [ ] https://github.com/crypto-org-chain/cronos/issues/732

Future Works

grpc service alone is not very interesting in the context of cronos, json-rpc is more important, for json-rpc service to work, we also need to sync the tendermint dbs(mainly the raw blocks and tx execution results).

yihuang avatar Sep 28 '22 04:09 yihuang

open a http server to serve these files.

probably ok to ask user to setup a third-party http server for this, after all, we are talking about setting up distributed service here.

yihuang avatar Sep 28 '22 07:09 yihuang

how do we know the result of the state query from the untrusted party is correct? How do we verify it?

JayT106 avatar Oct 18 '22 19:10 JayT106

how do we know the result of the state query from the untrusted party is correct? How do we verify it?

it's only for trusted parties, like the public rpc services.

yihuang avatar Oct 19 '22 01:10 yihuang