From d2c74fef535a6251bf69894ce4117aa325f76db3 Mon Sep 17 00:00:00 2001 From: James Bayly Date: Mon, 11 Dec 2023 13:38:08 +0800 Subject: [PATCH] Add RPC provider docs and redirects --- docs/.vuepress/config.ts | 100 ++++++++++-------- docs/.vuepress/sidebar.ts | 43 +++++--- docs/subquery_network/delegators/rewards.md | 2 +- docs/subquery_network/introduction.md | 2 +- .../indexers/become-an-indexer.md | 2 +- .../indexers/dictionary-restore.md | 4 +- .../{ => node_operators}/indexers/faq.md | 0 .../indexers/index-project.md | 4 +- .../indexers/indexer-security-guide.md | 0 .../indexers/install-indexer-linux.md | 4 +- .../indexers/install-indexer-locally.md | 4 +- .../indexers/introduction.md | 2 +- .../{ => node_operators}/indexers/plans.md | 0 .../{ => node_operators}/indexers/rewards.md | 2 +- .../indexers/separated-db.md | 0 .../indexers/troubleshooting-indexers.md | 0 .../node_operators/introduction.md | 3 + .../rpc_providers/introduction.md | 58 ++++++++++ 18 files changed, 158 insertions(+), 72 deletions(-) rename docs/subquery_network/{ => node_operators}/indexers/become-an-indexer.md (99%) rename docs/subquery_network/{ => node_operators}/indexers/dictionary-restore.md (95%) rename docs/subquery_network/{ => node_operators}/indexers/faq.md (100%) rename docs/subquery_network/{ => node_operators}/indexers/index-project.md (98%) rename docs/subquery_network/{ => node_operators}/indexers/indexer-security-guide.md (100%) rename docs/subquery_network/{ => node_operators}/indexers/install-indexer-linux.md (95%) rename docs/subquery_network/{ => node_operators}/indexers/install-indexer-locally.md (91%) rename docs/subquery_network/{ => node_operators}/indexers/introduction.md (97%) rename docs/subquery_network/{ => node_operators}/indexers/plans.md (100%) rename docs/subquery_network/{ => node_operators}/indexers/rewards.md (99%) rename docs/subquery_network/{ => node_operators}/indexers/separated-db.md (100%) rename docs/subquery_network/{ => node_operators}/indexers/troubleshooting-indexers.md (100%) create mode 100644 docs/subquery_network/node_operators/introduction.md create mode 100644 docs/subquery_network/node_operators/rpc_providers/introduction.md diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts index b6d579e4a81..016f0446d52 100644 --- a/docs/.vuepress/config.ts +++ b/docs/.vuepress/config.ts @@ -240,49 +240,63 @@ export default defineUserConfig({ id: "G-MY90N76MNK", }), redirectPlugin({ - config: { - "/subquery_network/architects.html": - "/subquery_network/architects/introduction.html", - "/subquery_network/consumers.html": - "/subquery_network/consumers/introduction.html", - "/subquery_network/delegators.html": - "/subquery_network/delegators/introduction.html", - "/subquery_network/indexers.html": - "/subquery_network/indexers/introduction.html", - "/subquery_network/token.html": "/subquery_network/token/token.html", - "/subquery_network/design-philosophy.html": - "/subquery_network/design/design-philosophy.html", - "/subquery_network/payment-methods.html": - "/subquery_network/design/payment-methods.html", - "/subquery_network/kepler/welcome.html": - "/subquery_network/introduction.html", - "/subquery_network/kepler/ksqt.html": - "/subquery_network/token/token.html", - "/subquery_network/kepler/indexers/become-an-indexer.html": - "/subquery_network/indexers/become-an-indexer.html", - "/subquery_network/kepler/indexers/install-indexer-locally.html": - "/subquery_network/indexers/install-indexer-locally.html", - "/subquery_network/kepler/indexers/install-indexer-linux.html": - "/subquery_network/indexers/install-indexer-linux.html", - "/subquery_network/kepler/indexers/index-project.html": - "/subquery_network/indexers/index-project.html", - "/subquery_network/kepler/indexers/dictionary-restore.html": - "/subquery_network/indexers/dictionary-restore.html", - "/subquery_network/kepler/indexers/plans.html": - "/subquery_network/indexers/plans.html", - "/subquery_network/kepler/indexers/troubleshooting-indexers.html": - "/subquery_network/indexers/troubleshooting-indexers.html", - "/subquery_network/kepler/indexers/faqs-indexers.html": - "/subquery_network/indexers/faqs-indexers.html", - "/subquery_network/kepler/indexers/ssl-configuration.html": - "/subquery_network/indexers/indexer-security-guide.html", - "/subquery_network/indexers/ssl-configuration.html": - "/subquery_network/indexers/indexer-security-guide.html", - "/build/manifest/terra.html": "/build/manifest/cosmos.html", - "/build/mapping/terra.html": "/build/mapping/cosmos.html", - "/build/quickstart/quickstart_chains/terra.html": - "/build/quickstart/quickstart_chains/cosmos.html", - "/run_publish/ipfs.html": "/miscellaneous/ipfs.html", + config: (app) => { + const redirects: Record = { + "/subquery_network/architects.html": + "/subquery_network/architects/introduction.html", + "/subquery_network/consumers.html": + "/subquery_network/consumers/introduction.html", + "/subquery_network/delegators.html": + "/subquery_network/delegators/introduction.html", + "/subquery_network/indexers.html": + "/subquery_network/node_operators/indexers/introduction.html", + "/subquery_network/token.html": "/subquery_network/token/token.html", + "/subquery_network/design-philosophy.html": + "/subquery_network/design/design-philosophy.html", + "/subquery_network/payment-methods.html": + "/subquery_network/design/payment-methods.html", + "/subquery_network/kepler/welcome.html": + "/subquery_network/introduction.html", + "/subquery_network/kepler/ksqt.html": + "/subquery_network/token/token.html", + "/subquery_network/kepler/indexers/become-an-indexer.html": + "/subquery_network/node_operators/indexers/become-an-indexer.html", + "/subquery_network/kepler/indexers/install-indexer-locally.html": + "/subquery_network/node_operators/indexers/install-indexer-locally.html", + "/subquery_network/kepler/indexers/install-indexer-linux.html": + "/subquery_network/node_operators/indexers/install-indexer-linux.html", + "/subquery_network/kepler/indexers/index-project.html": + "/subquery_network/node_operators/indexers/index-project.html", + "/subquery_network/kepler/indexers/dictionary-restore.html": + "/subquery_network/node_operators/indexers/dictionary-restore.html", + "/subquery_network/kepler/indexers/plans.html": + "/subquery_network/node_operators/indexers/plans.html", + "/subquery_network/kepler/indexers/troubleshooting-indexers.html": + "/subquery_network/node_operators/indexers/troubleshooting-indexers.html", + "/subquery_network/kepler/indexers/faqs-indexers.html": + "/subquery_network/node_operators/indexers/faqs-indexers.html", + "/subquery_network/kepler/indexers/ssl-configuration.html": + "/subquery_network/node_operators/indexers/indexer-security-guide.html", + "/subquery_network/indexers/ssl-configuration.html": + "/subquery_network/node_operators/indexers/indexer-security-guide.html", + "/build/manifest/terra.html": "/build/manifest/cosmos.html", + "/build/mapping/terra.html": "/build/mapping/cosmos.html", + "/build/quickstart/quickstart_chains/terra.html": + "/build/quickstart/quickstart_chains/cosmos.html", + "/run_publish/ipfs.html": "/miscellaneous/ipfs.html", + }; + return { + ...redirects, + ...Object.fromEntries( + app.pages.map(({ path }) => [ + path.replace( + "/subquery_network/node_operators/indexers/", + "/subquery_network/indexers/" + ), + path, + ]) + ), + }; }, }), ], diff --git a/docs/.vuepress/sidebar.ts b/docs/.vuepress/sidebar.ts index 7e9e3ba343d..7cdc28df3f6 100644 --- a/docs/.vuepress/sidebar.ts +++ b/docs/.vuepress/sidebar.ts @@ -460,29 +460,40 @@ export const getSidebar = (locale: string) => ], }, { - text: "Indexers", - link: `${locale}/subquery_network/indexers/introduction.md`, + text: "Node Operators", + link: `${locale}/subquery_network/node_operators/introduction.md`, collapsible: true, children: [ - `${locale}/subquery_network/indexers/introduction.md`, - `${locale}/subquery_network/indexers/rewards.md`, { - text: "Becoming an Indexer", - link: `${locale}/subquery_network/indexers/become-an-indexer.md`, + text: "Data Indexers", + link: `${locale}/subquery_network/node_operators/indexers/introduction.md`, collapsible: true, children: [ - `${locale}/subquery_network/indexers/become-an-indexer.md`, - `${locale}/subquery_network/indexers/install-indexer-locally.md`, - `${locale}/subquery_network/indexers/install-indexer-linux.md`, - `${locale}/subquery_network/indexers/separated-db.md`, - `${locale}/subquery_network/indexers/indexer-security-guide.md`, - `${locale}/subquery_network/indexers/index-project.md`, - `${locale}/subquery_network/indexers/dictionary-restore.md`, - `${locale}/subquery_network/indexers/troubleshooting-indexers.md`, + `${locale}/subquery_network/node_operators/indexers/introduction.md`, + `${locale}/subquery_network/node_operators/indexers/rewards.md`, + { + text: "Becoming an Indexer", + link: `${locale}/subquery_network/node_operators/indexers/become-an-indexer.md`, + collapsible: true, + children: [ + `${locale}/subquery_network/node_operators/indexers/become-an-indexer.md`, + `${locale}/subquery_network/node_operators/indexers/install-indexer-locally.md`, + `${locale}/subquery_network/node_operators/indexers/install-indexer-linux.md`, + `${locale}/subquery_network/node_operators/indexers/separated-db.md`, + `${locale}/subquery_network/node_operators/indexers/indexer-security-guide.md`, + `${locale}/subquery_network/node_operators/indexers/index-project.md`, + `${locale}/subquery_network/node_operators/indexers/dictionary-restore.md`, + `${locale}/subquery_network/node_operators/indexers/troubleshooting-indexers.md`, + ], + }, + `${locale}/subquery_network/node_operators/indexers/plans.md`, + `${locale}/subquery_network/node_operators/indexers/faq.md`, ], }, - `${locale}/subquery_network/indexers/plans.md`, - `${locale}/subquery_network/indexers/faq.md`, + { + text: "RPC Providers", + link: `${locale}/subquery_network/node_operators/rpc_providers/introduction.md`, + }, ], }, `${locale}/subquery_network/architects/introduction.md`, diff --git a/docs/subquery_network/delegators/rewards.md b/docs/subquery_network/delegators/rewards.md index 64c93257338..7f5b31037f7 100644 --- a/docs/subquery_network/delegators/rewards.md +++ b/docs/subquery_network/delegators/rewards.md @@ -26,7 +26,7 @@ For example, Indexer A has set an ICR of 80% and has received SQT from 8 Delegat Note that Delegators must have delegated their tokens for the entire Era to be eligible for these rewards (note [Non-reward period](#non-reward-period)). -Additionally, we've made it easier for you to see other data about all indexers in our app. Navigate to `Delegator` > `Indexers` and view the [leaderboard](https://kepler.subquery.network/delegator/indexers/top) which shows various scores and details that we think are important to you when deciding what indexer to choose. The Indexer Score takes into account an Indexer’s uptime, slashing events, and other parameters. +Additionally, we've made it easier for you to see other data about all indexers in our app. Navigate to `Delegator` > `Indexers` and view the [leaderboard](https://kepler.subquery.network/delegator/node_operators/indexers/top) which shows various scores and details that we think are important to you when deciding what indexer to choose. The Indexer Score takes into account an Indexer’s uptime, slashing events, and other parameters. ## Non-reward period diff --git a/docs/subquery_network/introduction.md b/docs/subquery_network/introduction.md index dc9a6abaf63..aa283dacd10 100644 --- a/docs/subquery_network/introduction.md +++ b/docs/subquery_network/introduction.md @@ -10,7 +10,7 @@ There’s a role for everyone in the network, from highly technical developers t **Consumers** will ask the SubQuery Network for specific data for their dApps or tools, and pay an advertised amount of SQT for each request. Learn more about [Consumers](./consumers/introduction.md). -**Indexers** will run and maintain high quality SubQuery projects in their own infrastructure, running both the indexer and query service, and will be rewarded in SQT for the requests that they serve. Learn more about [Indexers](./indexers/introduction.md). +**Indexers** will run and maintain high quality SubQuery projects in their own infrastructure, running both the indexer and query service, and will be rewarded in SQT for the requests that they serve. Learn more about [Indexers](./node_operators/indexers/introduction.md). **Delegators** will participate in the Network by supporting their favourite Indexers to earn rewards based on the work those indexers do. Learn more about [Delegators](./delegators/introduction.md). diff --git a/docs/subquery_network/indexers/become-an-indexer.md b/docs/subquery_network/node_operators/indexers/become-an-indexer.md similarity index 99% rename from docs/subquery_network/indexers/become-an-indexer.md rename to docs/subquery_network/node_operators/indexers/become-an-indexer.md index d99c63046ea..2674495a46b 100644 --- a/docs/subquery_network/indexers/become-an-indexer.md +++ b/docs/subquery_network/node_operators/indexers/become-an-indexer.md @@ -160,7 +160,7 @@ Once your Indexing Service is all set and running successfully, connect to your At this stage, only Indexers that received kSQT tokens via the airdrop can obtain and participate as Indexers in Kepler. This may change soon as we test and verify that aspects of the Kepler network are running smoothly. -For Kepler, you can obtain kSQT tokens from the [Kepler Airdrop App](https://airdrop.subquery.foundation). Learn more about kSQT and how to add it to your wallet in [kSQT](../token/token.md#ksqt). +For Kepler, you can obtain kSQT tokens from the [Kepler Airdrop App](https://airdrop.subquery.foundation). Learn more about kSQT and how to add it to your wallet in [kSQT](../../token/token.md#ksqt). ## 4. How to index a project diff --git a/docs/subquery_network/indexers/dictionary-restore.md b/docs/subquery_network/node_operators/indexers/dictionary-restore.md similarity index 95% rename from docs/subquery_network/indexers/dictionary-restore.md rename to docs/subquery_network/node_operators/indexers/dictionary-restore.md index c9962a2fa3c..7f0f610837d 100644 --- a/docs/subquery_network/indexers/dictionary-restore.md +++ b/docs/subquery_network/node_operators/indexers/dictionary-restore.md @@ -1,6 +1,6 @@ # Restoring Dictionary Projects -Below are the [Dictionary Projects](../../academy/tutorials_examples/dictionary.md) supported on Kepler. These projects are commonly used, are simple to index and create, but create large datasets. +Below are the [Dictionary Projects](../../../academy/tutorials_examples/dictionary.md) supported on Kepler. These projects are commonly used, are simple to index and create, but create large datasets. In order to speed up the onboarding of Indexers, we are providing database snapshots for most of these dictionaries @@ -42,7 +42,7 @@ curl -o dictionary.tar ## Restoring the Database Snapshot -This assumes that you have an indexer [running locally](../../run_publish/run.md) with admin access to a PostgresQL database (you will be using the `pg_restore` command). +This assumes that you have an indexer [running locally](../../../run_publish/run.md) with admin access to a PostgresQL database (you will be using the `pg_restore` command). 1. First extract the downloaded snapshot and then extract it using the following command: diff --git a/docs/subquery_network/indexers/faq.md b/docs/subquery_network/node_operators/indexers/faq.md similarity index 100% rename from docs/subquery_network/indexers/faq.md rename to docs/subquery_network/node_operators/indexers/faq.md diff --git a/docs/subquery_network/indexers/index-project.md b/docs/subquery_network/node_operators/indexers/index-project.md similarity index 98% rename from docs/subquery_network/indexers/index-project.md rename to docs/subquery_network/node_operators/indexers/index-project.md index 3468eed80b3..d7bae7df854 100644 --- a/docs/subquery_network/indexers/index-project.md +++ b/docs/subquery_network/node_operators/indexers/index-project.md @@ -94,7 +94,7 @@ The following projects are available for indexing on the Kepler network. Some pr | Astar | Astar Dictionary | `QmUmnKPhcE6JwGMYvY3Yitb5j8qxbQBMxgpkHpVQuXqxDH` | ~65G | N/A | [Yes](./dictionary-restore.md) | ::: info Note -If you are wanting to index a Dictionary, then you may be able to restore your project from our dictionary snapshots to save a lot of time. Instructions are [here](../indexers/dictionary-restore.md) +If you are wanting to index a Dictionary, then you may be able to restore your project from our dictionary snapshots to save a lot of time. Instructions are [here](./dictionary-restore.md) ::: Enter the project deployment ID when addding the new project. @@ -177,6 +177,6 @@ On the network page, the Indexer can check the era information and confirm that Congratulations! You have successfully indexed your SubQuery Project. -- If you encounter any trouble while running the indexing service, please visit [Troubleshooting](../indexers/troubleshooting-indexers.md)) and find all your solutions in one place. +- If you encounter any trouble while running the indexing service, please visit [Troubleshooting](./troubleshooting-indexers.md)) and find all your solutions in one place. - Find the list of [FAQs](./faq.md), and resolve your query. diff --git a/docs/subquery_network/indexers/indexer-security-guide.md b/docs/subquery_network/node_operators/indexers/indexer-security-guide.md similarity index 100% rename from docs/subquery_network/indexers/indexer-security-guide.md rename to docs/subquery_network/node_operators/indexers/indexer-security-guide.md diff --git a/docs/subquery_network/indexers/install-indexer-linux.md b/docs/subquery_network/node_operators/indexers/install-indexer-linux.md similarity index 95% rename from docs/subquery_network/indexers/install-indexer-linux.md rename to docs/subquery_network/node_operators/indexers/install-indexer-linux.md index addfa9a2763..1b8125dc596 100644 --- a/docs/subquery_network/indexers/install-indexer-linux.md +++ b/docs/subquery_network/node_operators/indexers/install-indexer-linux.md @@ -26,7 +26,7 @@ There are plenty of online guies on how to launch a compute engine on various cl DO NOT skip checking the Indexer Version after you finish the SSH process. ::: -- Visit [this section](../indexers/become-an-indexer.md#_2-1-check-indexer-version) and complete the process. +- Visit [this section](./become-an-indexer.md#_2-1-check-indexer-version) and complete the process. ::: warning Important Please change the default PostgreSQL password in the `POSTGRES_PASSWORD` field and in the coordinator-service's `postgres-password` field. Replace it with your own one. @@ -167,5 +167,5 @@ Add space limit to journald by set up `SystemMaxUse` and `RuntimeMaxUse` We highly recommend setting up SSL on your new server. [Follow the guide here](./indexer-security-guide.md#ssl-certificate-configuration). ::: tip Tip -Having trouble running a command or setting up the service? Got stuck in the process? Find your solutions [here](../indexers/troubleshooting-indexers.md). +Having trouble running a command or setting up the service? Got stuck in the process? Find your solutions [here](./troubleshooting-indexers.md). ::: diff --git a/docs/subquery_network/indexers/install-indexer-locally.md b/docs/subquery_network/node_operators/indexers/install-indexer-locally.md similarity index 91% rename from docs/subquery_network/indexers/install-indexer-locally.md rename to docs/subquery_network/node_operators/indexers/install-indexer-locally.md index 3f200ce422a..e131024dab3 100644 --- a/docs/subquery_network/indexers/install-indexer-locally.md +++ b/docs/subquery_network/node_operators/indexers/install-indexer-locally.md @@ -34,7 +34,7 @@ chmod +x ipfs/ipfs.sh ``` ::: warning Important -DO NOT skip checking the indexer version after you finish the installation process. Visit [this section](../indexers/become-an-indexer.md#_2-1-check-indexer-version) to check the latest indexer version is used and to to complete the set up process. +DO NOT skip checking the indexer version after you finish the installation process. Visit [this section](./become-an-indexer.md#_2-1-check-indexer-version) to check the latest indexer version is used and to to complete the set up process. Also, please change the default PostgreSQL password in the `POSTGRES_PASSWORD` field and in the coordinator-service's `postgres-password` field in the docker-compose.yml file. ::: @@ -78,7 +78,7 @@ Open `http://localhost:8000/` in your browser to view the Indexer App. We highly recommend setting up SSL on your new server. [Follow the guide here](./indexer-security-guide.md#ssl-certificate-configuration). :::tip Tip -Having trouble running a command or setting up the service? Got stuck in the process? Find your solutions [here](../indexers/troubleshooting-indexers.md). +Having trouble running a command or setting up the service? Got stuck in the process? Find your solutions [here](./troubleshooting-indexers.md). If you want to use a separated database for the Indexing service, you can follow [this guide](./separated-db.md) to set up the database and install the Indexing service. ::: diff --git a/docs/subquery_network/indexers/introduction.md b/docs/subquery_network/node_operators/indexers/introduction.md similarity index 97% rename from docs/subquery_network/indexers/introduction.md rename to docs/subquery_network/node_operators/indexers/introduction.md index 0721b23867b..1a07483f082 100644 --- a/docs/subquery_network/indexers/introduction.md +++ b/docs/subquery_network/node_operators/indexers/introduction.md @@ -20,7 +20,7 @@ Finally, interested parties should be prepared to invest time in maintaining the ### Staking requirements -Indexers are expected to stake and maintain a minimum amount of tokens. This is to ensure that Indexers have some skin in the game and are committed to supporting the network. SubQuery is yet to determine this but it is one of our [design philosophies](../design/design-philosophy.md) that this be as low and as accessible as possible. +Indexers are expected to stake and maintain a minimum amount of tokens. This is to ensure that Indexers have some skin in the game and are committed to supporting the network. SubQuery is yet to determine this but it is one of our [design philosophies](../../design/design-philosophy.md) that this be as low and as accessible as possible. Should an Indexer experience a slashable event and their staked SQT balance fall below the minimum required, they will have to top up their staked SQT in order to continue to earn rewards from their work. diff --git a/docs/subquery_network/indexers/plans.md b/docs/subquery_network/node_operators/indexers/plans.md similarity index 100% rename from docs/subquery_network/indexers/plans.md rename to docs/subquery_network/node_operators/indexers/plans.md diff --git a/docs/subquery_network/indexers/rewards.md b/docs/subquery_network/node_operators/indexers/rewards.md similarity index 99% rename from docs/subquery_network/indexers/rewards.md rename to docs/subquery_network/node_operators/indexers/rewards.md index b739b6431bf..f805411ef38 100644 --- a/docs/subquery_network/indexers/rewards.md +++ b/docs/subquery_network/node_operators/indexers/rewards.md @@ -33,7 +33,7 @@ Indexers benefit from higher total stake (with the help of delegators) in ways: For indexers, since these benefits are delicate, it is always a challenge to consider the best strategy, how many delegator's stake do I need. Too many delegation will dilute the reward, small delegation will limit the opportunity of more rewards. By changing commission rate, indexer can adjust the delegation proportion to a balance point. -You should read more about how Delegators will pick Indexers [here](../delegators/rewards.md#how-to-select-what-indexers-to-delegate-to) +You should read more about how Delegators will pick Indexers [here](../../delegators/rewards.md#how-to-select-what-indexers-to-delegate-to) The main two aspects of how Delegators will pick indexers is the [Indexer Score from the Indexer Leaderboard](https://kepler.subquery.network/delegator/indexers/top), and the Indexer Commission Rate (ICR). The Indexer’s Commission Rate (ICR) is the percentage Indexers earn. The remaining is then shared amongst the Indexer and all Delegators propotionally by staked/delegated amount. Therefore, Indexers need to decide on the proportion of rewards an Indexer wishes to retain versus the amount to share with their Delegators. A lower ICR will be more attractive for Delegators. diff --git a/docs/subquery_network/indexers/separated-db.md b/docs/subquery_network/node_operators/indexers/separated-db.md similarity index 100% rename from docs/subquery_network/indexers/separated-db.md rename to docs/subquery_network/node_operators/indexers/separated-db.md diff --git a/docs/subquery_network/indexers/troubleshooting-indexers.md b/docs/subquery_network/node_operators/indexers/troubleshooting-indexers.md similarity index 100% rename from docs/subquery_network/indexers/troubleshooting-indexers.md rename to docs/subquery_network/node_operators/indexers/troubleshooting-indexers.md diff --git a/docs/subquery_network/node_operators/introduction.md b/docs/subquery_network/node_operators/introduction.md new file mode 100644 index 00000000000..516a4a07285 --- /dev/null +++ b/docs/subquery_network/node_operators/introduction.md @@ -0,0 +1,3 @@ +## Node Operators + +SubQuery has a commitment to expanding the SubQuery Network to decentralise both Data Indexers, as well as supercharging RPCs to address a much broader centralisation issue throughout Web3 infrastructure. The SubQuery network will see thousands of decentralised Indexers and RPC providers simplify the data layer for a myriad of applications and use cases. diff --git a/docs/subquery_network/node_operators/rpc_providers/introduction.md b/docs/subquery_network/node_operators/rpc_providers/introduction.md new file mode 100644 index 00000000000..a9a0949b721 --- /dev/null +++ b/docs/subquery_network/node_operators/rpc_providers/introduction.md @@ -0,0 +1,58 @@ +# Introduction to RPC Providers + +## What is an RPC Provider? + +An RPC Provider is a SubQuery network participant who is responsible for serving RPC queries for blockchain data to their customers. + +RPC Providers play a very important role within the SubQuery network, they acts as the main interface between dApps, indexers, and other consumers to the underlying data on the blockchain, and are also responsible for submitting transactions. + +## Requirements to be an RPC Provider + +To become an RPC Provider on the SubQuery Network, the RPC Provider must possess the necessary hardware, run the required SubQuery services, have a publicly accessible network via a static IP or a domain name, and register as an RPC Provider. + +### RPC Provider skillset + +In general, an RPC Provider should be a technically proficient computer user. However, the simplicity of the SubQuery network and proposed frameworks allows even a junior developer to successfully participate. + +A basic user should be familiar with provisioning and managing servers, installing the SubQuery Node Operator tools, RPC Node management, and basic networking. More experienced users may run nodes in a clustered environment, incorporate monitoring and alerts and also more advanced networking management. + +Finally, interested parties should be prepared to invest time in maintaining their RPC nodes and infrastructure. + +### Staking requirements + +RPC Providers are expected to stake and maintain a minimum amount of tokens. This is to ensure that RPC Providers have some skin in the game and are committed to supporting the network. SubQuery is yet to determine this but it is one of our [design philosophies](../../design/design-philosophy.md) that this be as low and as accessible as possible. + +Should an RPC Provider experience a slashable event and their staked SQT balance fall below the minimum required, they will have to top up their staked SQT in order to continue to earn rewards from their work. + +### Hardware requirements + +RPC Providers can either invest in their own infrastructure hardware or rent infrastructure from the likes of AWS, Google Cloud, Digital Ocean, Microsoft Azure etc. + +### Maintenance/operational requirements + +Here are some of the maintenance and/or operational requirements RPC Providers should expect: + +- Always upgrade to the latest SubQuery software version. +- Identify and take advantage of new indexing opportunities. +- Update project version to latest and reindex where necessary. +- Infrastructure maintenance: + - Constantly monitoring and upsizing disk. + - Right size query and indexing compute based on traffic. + - Increase query services for increasing ingress traffic. + +### Infrastructure + +The minimum infrastructure requirement includes: + +- At least one computational node to run the following services: + - RPC Node (this is different for each network). + - RPC Coordinator Service. + +More detailed information will come soon. + +## Risk of being an RPC Provider + +There are a few risks of being an RPC Provider. + +- Infrastructure investment risk. An RPC Provider needs to invest in hardware infrastructure which is an upfront cost. However, many infrastructure provides such as AWS provide monthly payments, as opposed to yearly contracts, and the ability to scale servers up and down based on demand. This significantly reduces the risk for an RPC Provider. +- Lack of customers. This risk is inherent in any business opportunity and the traditional risk mitigation methods apply here. RPC Providers can adjust their price to be competitive, advertise their services, and build a solid reputation within the community by contributing to forums and helping others.