71 lines
2.3 KiB
Markdown
71 lines
2.3 KiB
Markdown
# Lite RPC For Solana Blockchain
|
|
|
|
Submitting a [transaction](https://docs.solana.com/terminology#transaction) to be executed on the solana blockchain,
|
|
requires the client to identify the next few leaders based on the
|
|
[leader schedule](https://docs.solana.com/terminology#leader-schedule), look up their peering information in gossip and
|
|
connect to them via the [quic protocol](https://en.wikipedia.org/wiki/QUIC). In order to simplify the
|
|
process so it can be triggered from a web browser, most applications
|
|
run full [validators](https://docs.solana.com/terminology#validator) that forward the transactions according to the
|
|
protocol on behalf of the web browser. Running full solana [validators](https://docs.solana.com/terminology#validator)
|
|
is incredibly resource intensive `(>256GB RAM)`, the goal of this
|
|
project would be to create a specialized micro-service that allows
|
|
to deploy this logic quickly and allows [horizontal scalability](https://en.wikipedia.org/wiki/Scalability) with
|
|
commodity vms.
|
|
|
|
### Confirmation strategies
|
|
|
|
1) Subscribe to new blocks using [blockSubscribe](https://docs.solana.com/developing/clients/jsonrpc-api#blocksubscribe---unstable-disabled-by-default)
|
|
2) Subscribing to signatures with pool of rpc servers. (Under development)
|
|
3) Listening to gossip protocol. (Future roadmap)
|
|
|
|
## Executing
|
|
|
|
*make sure `solana-validator` is running in the background with `--rpc-pubsub-enable-block-subscription`*
|
|
|
|
*run using*
|
|
```bash
|
|
$ cargo run --release
|
|
```
|
|
|
|
*to know about command line options*
|
|
```bash
|
|
$ cargo run --release -- --help
|
|
```
|
|
|
|
## Test and Bench
|
|
|
|
*Make sure both `solana-validator` and `lite-rpc` is running*
|
|
|
|
*test*
|
|
```bash
|
|
$ cargo test
|
|
```
|
|
|
|
*bench*
|
|
```bash
|
|
$ cd bench and cargo run --release
|
|
```
|
|
|
|
Find a new file named `metrics.csv` in the project root.
|
|
|
|
## Metrics and Postgres
|
|
|
|
LiteRpc implements a postgres service that can write to a postgres database tables as defined
|
|
in `./migrations`
|
|
|
|
### env variables
|
|
|
|
| env | purpose |
|
|
| --------- | ------ |
|
|
| `CA_PEM_B64` | Base64 encoded `ca.pem` |
|
|
| `CLIENT_PKS_B64` | Base64 encoded `client.pks` |
|
|
| `CLIENT_PKS_PASS` | Password to `client.pks` |
|
|
| `PG_CONFIG` | Postgres Connection Config |
|
|
|
|
## License & Copyright
|
|
|
|
Copyright (c) 2022 Blockworks Foundation
|
|
|
|
Licensed under the **[MIT LICENSE](LICENSE)**
|
|
|