-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bake stake into genesis #68
Open
gregcusack
wants to merge
5
commits into
anza-xyz:main
Choose a base branch
from
gregcusack:bake-stake-into-genesis
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+464
−118
Open
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
3505f2e
add primordial stakes into genesis. set as default
gregcusack 2b17dc6
reformat and update readme
gregcusack c16f6b2
bake internal node stakes into genesis
gregcusack a5587aa
switch to --validator-balances-file instead of flags for each individ…
gregcusack ae8d479
update to match agave genesis file format
gregcusack File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -9,6 +9,17 @@ In Validator Lab we can deploy and test new validator features quickly and easil | |||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
## How to run | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
### Requirements | ||||||||||||||||||||||||||||||||||||||||||
1) Docker. Create `docker` group add user to `docker` group | ||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||
sudo usermod -aG docker $USER | ||||||||||||||||||||||||||||||||||||||||||
newgrp docker | ||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||
2) jq | ||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||
sudo apt install jq | ||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
### Setup | ||||||||||||||||||||||||||||||||||||||||||
Ensure you have the proper permissions to connect to the Monogon Kubernetes endpoint. Reach out to Leo on slack if you need the key (you do if you haven't asked him in the past). | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
|
@@ -79,13 +90,15 @@ cargo run --bin cluster -- | |||||||||||||||||||||||||||||||||||||||||
--base-image <base-image> # e.g. ubuntu:20.04 | ||||||||||||||||||||||||||||||||||||||||||
--image-name <docker-image-name> # e.g. cluster-image | ||||||||||||||||||||||||||||||||||||||||||
# validator config | ||||||||||||||||||||||||||||||||||||||||||
--skip-primordial-accounts | ||||||||||||||||||||||||||||||||||||||||||
--full-rpc | ||||||||||||||||||||||||||||||||||||||||||
--internal-node-sol <Sol> | ||||||||||||||||||||||||||||||||||||||||||
--internal-node-stake-sol <Sol> | ||||||||||||||||||||||||||||||||||||||||||
--internal-node-sol <sol> | ||||||||||||||||||||||||||||||||||||||||||
--internal-node-stake-sol <sol> | ||||||||||||||||||||||||||||||||||||||||||
# kubernetes config | ||||||||||||||||||||||||||||||||||||||||||
--cpu-requests <cores> | ||||||||||||||||||||||||||||||||||||||||||
--memory-requests <memory> | ||||||||||||||||||||||||||||||||||||||||||
# deploy with clients | ||||||||||||||||||||||||||||||||||||||||||
bench-tps | ||||||||||||||||||||||||||||||||||||||||||
-c <num-clients> | ||||||||||||||||||||||||||||||||||||||||||
--client-type <client-type e.g. tpu-client> | ||||||||||||||||||||||||||||||||||||||||||
--client-to-run <type-of-client e.g. bench-tps> | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -107,6 +120,41 @@ For client Version >= 2.0.0 | |||||||||||||||||||||||||||||||||||||||||
--bench-tps-args 'tx-count=5000 keypair-multiplier=4 threads=16 num-lamports-per-account=200000000 sustained tpu-connection-pool-size=8 thread-batch-sleep-ms=0 commitment-config=processed' | ||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
## Baking Validator Stakes into Genesis | ||||||||||||||||||||||||||||||||||||||||||
- You can bake validator accounts and delegated stakes into genesis creation by passing in `--validator-balances-file <file-path-to-validator-balances-yml>`. This way when the cluster boots up, all validators will consistently be in the leader schedule and no need to wait for stake to warm up. In the validator balances file, you can set specific validator balances and stake amounts. | ||||||||||||||||||||||||||||||||||||||||||
The validator balances file has the following yaml format: | ||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||
--- | ||||||||||||||||||||||||||||||||||||||||||
v0: | ||||||||||||||||||||||||||||||||||||||||||
balances_lamports: <balance0> | ||||||||||||||||||||||||||||||||||||||||||
stake_lamports: <stake0> | ||||||||||||||||||||||||||||||||||||||||||
v1: | ||||||||||||||||||||||||||||||||||||||||||
balances_lamports: <balance1> | ||||||||||||||||||||||||||||||||||||||||||
stake_lamports: <stake1> | ||||||||||||||||||||||||||||||||||||||||||
... | ||||||||||||||||||||||||||||||||||||||||||
vN: | ||||||||||||||||||||||||||||||||||||||||||
balances_lamports: <balanceN> | ||||||||||||||||||||||||||||||||||||||||||
stake_lamports: <stakeN> | ||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+128
to
+137
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||
^ Note, the file must have the `v0`, `v1`, ..., `vN` format. The number of validators in this file must match `--num-validators <number-of-validators>` | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
For example, we could create: `validator-balances.yml` and have it look like: | ||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||
--- | ||||||||||||||||||||||||||||||||||||||||||
v0: | ||||||||||||||||||||||||||||||||||||||||||
balance_lamports: 400000000000 | ||||||||||||||||||||||||||||||||||||||||||
stake_lamports: 40000000000 | ||||||||||||||||||||||||||||||||||||||||||
v1: | ||||||||||||||||||||||||||||||||||||||||||
balance_lamports: 200000000000 | ||||||||||||||||||||||||||||||||||||||||||
stake_lamports: 20000000000 | ||||||||||||||||||||||||||||||||||||||||||
v2: | ||||||||||||||||||||||||||||||||||||||||||
balance_lamports: 300000000000 | ||||||||||||||||||||||||||||||||||||||||||
stake_lamports: 30000000000 | ||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
- If you do not want to bake stakes into genesis and instead want the stake to warm up after deplyoyment, pass in the flag `--skip-primordial-stakes` and leave out `--validator-balances` | ||||||||||||||||||||||||||||||||||||||||||
- `--internal-node-sol`, `--internal-node-stake-sol`, are `--comission` are only valid with `--skip-primordial-stakes` | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
## Metrics | ||||||||||||||||||||||||||||||||||||||||||
1) Setup metrics database: | ||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -128,7 +176,7 @@ You can add in RPC nodes. These sit behind a load balancer. Load balancer distri | |||||||||||||||||||||||||||||||||||||||||
--num-rpc-nodes <num-nodes> | ||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
## Heterogeneous Clusters | ||||||||||||||||||||||||||||||||||||||||||
## Heterogeneous Agave Clusters | ||||||||||||||||||||||||||||||||||||||||||
You can deploy a cluster with heterogeneous validator versions | ||||||||||||||||||||||||||||||||||||||||||
For example, say you want to deploy a cluster with the following nodes: | ||||||||||||||||||||||||||||||||||||||||||
* 1 bootstrap, 3 validators, 1 rpc-node, and 1 client running some agave-repo local commit | ||||||||||||||||||||||||||||||||||||||||||
|
@@ -155,7 +203,9 @@ cargo run --bin cluster -- -n <namespace> --registry <registry> --release-channe | |||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
For steps (2) and (3), when using `--no-bootstrap`, we assume that the directory at `--cluster-data-path <directory>` has the correct genesis, bootstrap identity, and faucet account stored. These are all created in step (1). | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
Note: We can't deploy heterogeneous clusters across v1.17 and v1.18 due to feature differences. Hope to fix this in the future. Have something where we can specifically define which features to enable. | ||||||||||||||||||||||||||||||||||||||||||
Notes: | ||||||||||||||||||||||||||||||||||||||||||
1) We can't deploy heterogeneous clusters across v1.17 and v1.18 due to feature differences. Hope to fix this in the future. Have something where we can specifically define which features to enable. | ||||||||||||||||||||||||||||||||||||||||||
2) Heterogenous clusters with primordial stakes baked into genesis is not supported yet | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
## Querying the RPC from outside the cluster | ||||||||||||||||||||||||||||||||||||||||||
The cluster now has an external IP/port that can be queried to reach the cluster RPC. The external RPC port will be logged during cluster boot, e.g.: | ||||||||||||||||||||||||||||||||||||||||||
|
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks out of place. Is it correct?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
bench-tps
is a subcommand so should be passed in like this