Skip to content

Commit fef4217

Browse files
Olshanskdylanlott
authored andcommitted
[E2E Test] Utilities for State Sync Test (#874)
## Description <!-- reviewpad:summarize:start --> ### Summary generated by Reviewpad on 03 Aug 23 20:11 UTC This pull request introduces several changes across multiple files. Here is a summary of the changes: 1. `go.mod`: - The `golang.org/x/text` dependency is now listed explicitly instead of being an indirect dependency. 2. `scenario_test.go`: - Added a new feature called "State Sync Namespace" that includes various commands and waits for specific amounts of time. - Code improvements and TODO comments have been added. 3. `FAQ.md`: - Updated an issue related to starting LocalNet with SELinux on an operating system. Replaced the command `make compose_and_watch` with `make lightweight_localnet` to avoid permission denied errors. 4. `.gitignore`: - Removed the entry "main" from the list of ignored files. - Removed the entries "rpc/server.gen.go" and "rpc/client.gen.go" from the list of ignored files. - Added the entry "**/gomock_reflect_*/" to ignore mock temporary files. 5. `e2e/README.md`: - Added a new section on `Keywords`. - Modified scenario descriptions and code examples to replace instances of "Validator" with "Node". - Included a flowchart depicting the E2E scenarios with updated terminology. 6. Consensus module files: - Added a new logging statement in the `HandleDebugMessage` function. - Simplified the handling of the `DEBUG_CONSENSUS_RESET_TO_GENESIS` action. 7. `.tiltignore`: - Removed the entry "main" from the list of ignored files. - Removed the entries "rpc/server.gen.go" and "rpc/client.gen.go" from the list of ignored files. 8. `CHANGELOG.md`: - Updated build commands and added a new section on `Keywords`. 9. `persistence/docs/CHANGELOG.md`: - Several changes related to deprecation, addition, and fixing of functions and issues. 10. `validator.feature`: - Renamed file from "valdator.feature" to "validator.feature". - Updated scenario titles and step descriptions to use more descriptive terminology. - Replaced references to "validator" with "node". 11. `tilt_helpers.go`: - Added a new file containing functions related to syncing network configuration and checking package installation. 12. `debug.go`: - Added new debug commands and subcommands. - Updated existing functions and added new functions for debug actions. 13. `account.feature`: - Added a new file containing scenarios for testing node account functionalities. 14. `README.md` files: - Updated sections, titles, dependencies, and instructions in various README.md files. 15. `build/config/README.md`: - Updated usage instructions, changing the command `make compose_and_watch` to `make lightweight_localnet`. 16. `iteration_3_end_to_end_tx.md`: - Updated commands to start LocalNet and consensus debugger. 17. Deleted files: - `validator.go` - `watch_build.sh` 18. New files added: - `debug.feature` - `tilt_helpers.go` - `account.feature` Please let me know if you need more information about any specific change. <!-- reviewpad:summarize:end --> ## Issue Fixes par of #579 ## Type of change Please mark the relevant option(s): - [x] New feature, functionality or library - [ ] Bug fix - [ ] Code health or cleanup - [ ] Major breaking change - [ ] Documentation - [ ] Other <!-- add details here if it a different type of change --> ## List of changes - `s/compose_and_watch/lightweight_localnet` and all related helpers - `s/validator/node` in e2e tests for clarity - Add fire-and-forget `Debug` CLI w/ several useful initial subcommands - Add `keywords` to the `e2e` document - Add an `e2e debug` test to trigger views and track the blockchain increasing - Avoid rebuilding the actors if the CLI changes - Small miscellaneous improvements & code cleanup ## Testing - [x] `make develop_test`; if any code changes were made - [ ] `make test_e2e` on [k8s LocalNet](https://github.com/pokt-network/pocket/blob/main/build/localnet/README.md); if any code changes were made - [ ] `e2e-devnet-test` passes tests on [DevNet](https://pocketnetwork.notion.site/How-to-DevNet-ff1598f27efe44c09f34e2aa0051f0dd); if any code was changed - [ ] [Docker Compose LocalNet](https://github.com/pokt-network/pocket/blob/main/docs/development/README.md); if any major functionality was changed or introduced - [ ] [k8s LocalNet](https://github.com/pokt-network/pocket/blob/main/build/localnet/README.md); if any infrastructure or configuration changes were made ## Required Checklist - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [ ] I have added, or updated, [`godoc` format comments](https://go.dev/blog/godoc) on touched members (see: [tip.golang.org/doc/comment](https://tip.golang.org/doc/comment)) - [ ] I have tested my changes using the available tooling - [ ] I have updated the corresponding CHANGELOG ### If Applicable Checklist - [x] I have updated the corresponding README(s); local and/or global - [x] I have added tests that prove my fix is effective or that my feature works - [ ] I have added, or updated, [mermaid.js](https://mermaid-js.github.io) diagrams in the corresponding README(s) - [ ] I have added, or updated, documentation and [mermaid.js](https://mermaid-js.github.io) diagrams in `shared/docs/*` if I updated `shared/*`README(s) --- Co-authored-by: d7t <[email protected]>
1 parent 92ece19 commit fef4217

32 files changed

+715
-303
lines changed

.github/workflows/main.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -197,4 +197,4 @@ jobs:
197197
198198
- id: "run-e2e-tests"
199199
run: |
200-
./argo-linux-amd64 submit --wait --log --namespace devnet-issue-${{ github.event.pull_request.number }} --from 'wftmpl/dev-e2e-tests' --parameter gitsha="${{ github.event.pull_request.head.sha }}"
200+
./argo-linux-amd64 submit --wait --log --namespace devnet-issue-${{ github.event.pull_request.number }} --from 'wftmpl/dev-e2e-tests' --parameter tags="~@skip_in_ci" --parameter gitsha="${{ github.event.pull_request.head.sha }}"

.gitignore

+3-3
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,6 @@ temp_test.go
5555
test_results.json
5656
coverage.out
5757

58-
# Output of `make build_and_watch`
59-
main
60-
6158
# generated RPC server and client from openapi.yaml
6259
rpc/server.gen.go
6360
rpc/client.gen.go
@@ -90,3 +87,6 @@ tools/wiki
9087

9188
# ggshield
9289
.cache_ggshield
90+
91+
# mock temporary files
92+
**/gomock_reflect_*/

.tiltignore

-3
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@ temp_test.go
4141
test_results.json
4242
coverage.out
4343

44-
# Output of `make build_and_watch`
45-
main
46-
4744
# generated RPC server and client from openapi.yaml
4845
rpc/server.gen.go
4946
rpc/client.gen.go

Makefile

+29-22
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ help:
3838
docker_check:
3939
{ \
4040
if ( ! ( command -v docker >/dev/null && (docker compose version >/dev/null || command -v docker-compose >/dev/null) )); then \
41-
echo "Seems like you don't have Docker or docker-compose installed. Make sure you review docs/development/README.md before continuing"; \
41+
echo "Seems like you don't have Docker or docker-compose installed. Make sure you review build/localnet/README.md and docs/development/README.md before continuing"; \
4242
exit 1; \
4343
fi; \
4444
}
@@ -47,11 +47,21 @@ docker_check:
4747
kubectl_check:
4848
{ \
4949
if ( ! ( command -v kubectl >/dev/null )); then \
50-
echo "Seems like you don't have Kubectl installed. Make sure you review docs/development/README.md before continuing"; \
50+
echo "Seems like you don't have Kubectl installed. Make sure you review build/localnet/README.md and docs/development/README.md before continuing"; \
5151
exit 1; \
5252
fi; \
5353
}
5454

55+
# Internal helper target - check if rsync is installed.
56+
rsync_check:
57+
{ \
58+
if ( ! ( command -v kubectl >/dev/null )); then \
59+
echo "Seems like you don't have rsync installed. Make sure you review build/localnet/README.md and docs/development/README.md before continuing"; \
60+
exit 1; \
61+
fi; \
62+
}
63+
64+
5565
.PHONY: trigger_ci
5666
trigger_ci: ## Trigger the CI pipeline by submitting an empty commit; See https://github.com/pokt-network/pocket/issues/900 for details
5767
git commit --allow-empty -m "Empty commit"
@@ -133,6 +143,9 @@ go_imports: ## Group imports using rinchsan/gosimports
133143
go_fmt: ## Format all the .go files in the project in place.
134144
gofmt -w -s .
135145

146+
# TODO(#964): add `rsync_check`, `kubectl_check`, `docker_check` as a validation in `install_cli_deps`; https://github.com/pokt-network/pocket/assets/1892194/a7a24a11-f54d-46e2-a73e-9e8ea7d06726
147+
# .PHONY: install_cli_deps
148+
# install_cli_deps: rsync_check kubectl_check docker_check ## Installs `helm`, `tilt` and the underlying `ci_deps`
136149
.PHONY: install_cli_deps
137150
install_cli_deps: ## Installs `helm`, `tilt` and the underlying `ci_deps`
138151
make install_ci_deps
@@ -163,33 +176,27 @@ develop_test: docker_check ## Run all of the make commands necessary to develop
163176
make develop_start && \
164177
make test_all
165178

166-
.PHONY: client_start
167-
client_start: docker_check ## Run a client daemon which is only used for debugging purposes
179+
.PHONY: lightweight_localnet_client
180+
lightweight_localnet_client: docker_check ## Run a client daemon which is only used for debugging purposes
181+
# Add `--build` to rebuild the client
168182
${docker-compose} up -d client
169183

170-
.PHONY: rebuild_client_start
171-
rebuild_client_start: docker_check ## Rebuild and run a client daemon which is only used for debugging purposes
172-
${docker-compose} up -d --build client
173-
174-
.PHONY: client_connect
175-
client_connect: docker_check ## Connect to the running client debugging daemon
184+
.PHONY: lightweight_localnet_client_debug
185+
lightweight_localnet_client_debug: docker_check ## Connect to the running client debugging daemon
176186
docker exec -it client /bin/bash -c "go run -tags=debug app/client/*.go DebugUI"
177187

178-
.PHONY: build_and_watch
179-
build_and_watch: ## Continous build Pocket's main entrypoint as files change
180-
/bin/sh ${PWD}/build/scripts/watch_build.sh
188+
# IMPROVE: Avoid building the binary on every shell execution and sync it from local instead
189+
.PHONY: lightweight_localnet_shell
190+
lightweight_localnet_shell: docker_check ## Connect to the running client debugging daemon
191+
docker exec -it client /bin/bash -c "go build -tags=debug -o p1 ./app/client/*.go && chmod +x p1 && mv p1 /usr/bin && echo \"Finished building a new p1 binary\" && /bin/bash"
181192

182-
# TODO(olshansky): Need to think of a Pocket related name for `compose_and_watch`, maybe just `pocket_watch`?
183-
.PHONY: compose_and_watch
184-
compose_and_watch: docker_check db_start monitoring_start ## Run a localnet composed of 4 consensus validators w/ hot reload & debugging
193+
.PHONY: lightweight_localnet
194+
lightweight_localnet: docker_check db_start monitoring_start ## Run a lightweight localnet composed of 4 validators w/ hot reload & debugging
195+
# Add `--build` to rebuild the client
185196
${docker-compose} up --force-recreate validator1 validator2 validator3 validator4 servicer1 fisherman1
186197

187-
.PHONY: rebuild_and_compose_and_watch
188-
rebuild_and_compose_and_watch: docker_check db_start monitoring_start ## Rebuilds the container from scratch and launches compose_and_watch
189-
${docker-compose} up --build --force-recreate validator1 validator2 validator3 validator4 servicer1 fisherman1
190-
191198
.PHONY: db_start
192-
db_start: docker_check ## Start a detached local postgres and admin instance; compose_and_watch is responsible for instantiating the actual schemas
199+
db_start: docker_check ## Start a detached local postgres and admin instance; lightweight_localnet is responsible for instantiating the actual schemas
193200
${docker-compose} up --no-recreate -d db pgadmin
194201

195202
.PHONY: db_cli
@@ -245,7 +252,7 @@ docker_wipe_nodes: docker_check prompt_user db_drop ## [WARNING] Remove all the
245252
docker ps -a -q --filter="name=node*" | xargs -r -I {} docker rm {}
246253

247254
.PHONY: monitoring_start
248-
monitoring_start: docker_check ## Start grafana, metrics and logging system (this is auto-triggered by compose_and_watch)
255+
monitoring_start: docker_check ## Start grafana, metrics and logging system (this is auto-triggered by lightweight_localnet)
249256
${docker-compose} up --no-recreate -d grafana loki vm
250257

251258
.PHONY: docker_loki_install

app/client/cli/debug.go

+114-23
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package cli
22

33
import (
4+
"fmt"
5+
"log"
46
"os"
7+
"os/exec"
58
"time"
69

710
"github.com/manifoldco/promptui"
811
"github.com/spf13/cobra"
12+
"golang.org/x/exp/slices"
913
"google.golang.org/protobuf/types/known/anypb"
1014

1115
"github.com/pokt-network/pocket/app/client/cli/helpers"
@@ -35,46 +39,123 @@ var items = []string{
3539
}
3640

3741
func init() {
42+
dbg := newDebugCommand()
43+
dbg.AddCommand(newDebugSubCommands()...)
44+
rootCmd.AddCommand(dbg)
45+
3846
dbgUI := newDebugUICommand()
39-
dbgUI.AddCommand(newDebugUISubCommands()...)
4047
rootCmd.AddCommand(dbgUI)
4148
}
4249

43-
// newDebugUISubCommands builds out the list of debug subcommands by matching the
44-
// handleSelect dispatch to the appropriate command.
45-
// * To add a debug subcommand, you must add it to the `items` array and then
46-
// write a function handler to match for it in `handleSelect`.
47-
func newDebugUISubCommands() []*cobra.Command {
48-
commands := make([]*cobra.Command, len(items))
49-
for idx, promptItem := range items {
50-
commands[idx] = &cobra.Command{
51-
Use: promptItem,
50+
// newDebugCommand returns the cobra CLI for the Debug command.
51+
func newDebugCommand() *cobra.Command {
52+
return &cobra.Command{
53+
Use: "Debug",
54+
Aliases: []string{"d"},
55+
Short: "Debug utility for rapid development",
56+
Long: "Debug utility to send fire-and-forget messages to the network for development purposes",
57+
Args: cobra.MaximumNArgs(1),
58+
}
59+
}
60+
61+
// newDebugSubCommands is a list of commands that can be "fired & forgotten" (no selection necessary)
62+
func newDebugSubCommands() []*cobra.Command {
63+
cmds := []*cobra.Command{
64+
{
65+
Use: "PrintNodeState",
66+
Aliases: []string{"print", "state"},
67+
Short: "Prints the node state",
68+
Long: "Sends a message to all visible nodes to log the current state of their consensus",
69+
Args: cobra.ExactArgs(0),
5270
PersistentPreRunE: helpers.P2PDependenciesPreRunE,
53-
Run: func(cmd *cobra.Command, _ []string) {
54-
// TECHDEBT(#874): this is a magic number, but an alternative would be to have the p2p module wait until connections are open and to flush the message correctly
55-
time.Sleep(500 * time.Millisecond) // give p2p module time to start
56-
handleSelect(cmd, cmd.Use)
57-
time.Sleep(500 * time.Millisecond) // give p2p module time to broadcast
71+
Run: func(cmd *cobra.Command, args []string) {
72+
runWithSleep(func() {
73+
handleSelect(cmd, PromptPrintNodeState)
74+
})
5875
},
59-
ValidArgs: items,
60-
}
76+
},
77+
{
78+
Use: "ResetToGenesis",
79+
Aliases: []string{"reset", "genesis"},
80+
Short: "Reset to genesis",
81+
Long: "Broadcast a message to all visible nodes to reset the state to genesis",
82+
Args: cobra.ExactArgs(0),
83+
PersistentPreRunE: helpers.P2PDependenciesPreRunE,
84+
Run: func(cmd *cobra.Command, args []string) {
85+
runWithSleep(func() {
86+
handleSelect(cmd, PromptResetToGenesis)
87+
})
88+
},
89+
},
90+
{
91+
Use: "TriggerView",
92+
Aliases: []string{"next", "trigger", "view"},
93+
Short: "Trigger the next view in consensus",
94+
Long: "Sends a message to all visible nodes on the network to start the next view (height/step/round) in consensus",
95+
Args: cobra.ExactArgs(0),
96+
PersistentPreRunE: helpers.P2PDependenciesPreRunE,
97+
Run: func(cmd *cobra.Command, args []string) {
98+
runWithSleep(func() {
99+
handleSelect(cmd, PromptTriggerNextView)
100+
})
101+
},
102+
},
103+
{
104+
Use: "TogglePacemakerMode",
105+
Aliases: []string{"toggle", "pcm"},
106+
Short: "Toggle the pacemaker",
107+
Long: "Toggle the consensus pacemaker either on or off so the chain progresses on its own or loses liveness",
108+
Args: cobra.ExactArgs(0),
109+
PersistentPreRunE: helpers.P2PDependenciesPreRunE,
110+
Run: func(cmd *cobra.Command, args []string) {
111+
runWithSleep(func() {
112+
handleSelect(cmd, PromptTogglePacemakerMode)
113+
})
114+
},
115+
},
116+
{
117+
Use: "ScaleActor",
118+
Aliases: []string{"scale"},
119+
Short: "Scales the number of actors up or down",
120+
Long: "Scales the type of actor specified to the number provided",
121+
Args: cobra.ExactArgs(2),
122+
PersistentPreRunE: helpers.P2PDependenciesPreRunE,
123+
Run: func(cmd *cobra.Command, args []string) {
124+
actor := args[0]
125+
numActors := args[1]
126+
validActors := []string{"fishermen", "full_nodes", "servicers", "validators"}
127+
if !slices.Contains(validActors, actor) {
128+
logger.Global.Fatal().Msg("Invalid actor type provided")
129+
}
130+
sedReplaceCmd := fmt.Sprintf("/%s:/,/count:/ s/count: [0-9]*/count: %s/", actor, numActors)
131+
sedCmd := exec.Command("sed", "-i", sedReplaceCmd, "/usr/local/localnet_config.yaml")
132+
if err := sedCmd.Run(); err != nil {
133+
log.Fatal(err)
134+
}
135+
},
136+
},
61137
}
62-
return commands
138+
return cmds
63139
}
64140

65141
// newDebugUICommand returns the cobra CLI for the Debug UI interface.
66142
func newDebugUICommand() *cobra.Command {
67143
return &cobra.Command{
68144
Aliases: []string{"dui", "debug"},
69145
Use: "DebugUI",
70-
Short: "Debug selection ui for rapid development",
146+
Short: "Debug utility with an interactive UI for development purposes",
147+
Long: "Opens a shell-driven selection UI to view and select from a list of debug actions for development purposes",
71148
Args: cobra.MaximumNArgs(0),
72149
PersistentPreRunE: helpers.P2PDependenciesPreRunE,
73-
RunE: runDebug,
150+
RunE: selectDebugCommand,
74151
}
75152
}
76153

77-
func runDebug(cmd *cobra.Command, _ []string) (err error) {
154+
// selectDebugCommand builds out the list of debug subcommands by matching the
155+
// handleSelect dispatch to the appropriate command.
156+
// - To add a debug subcommand, you must add it to the `items` array and then
157+
// write a function handler to match for it in `handleSelect`.
158+
func selectDebugCommand(cmd *cobra.Command, _ []string) error {
78159
for {
79160
if selection, err := promptGetInput(); err == nil {
80161
handleSelect(cmd, selection)
@@ -162,7 +243,17 @@ func handleSelect(cmd *cobra.Command, selection string) {
162243
}
163244
}
164245

165-
// Broadcast to the entire network.
246+
// HACK: Because of how the p2p module works, we need to surround it with sleep both BEFORE and AFTER the task.
247+
// - Starting the task too early after the debug client initializes results in a lack of visibility of the nodes in the network
248+
// - Ending the task too early before the debug client completes its task results in a lack of propagation of the message or retrieval of the result
249+
// TECHDEBT: There is likely an event based solution to this but it would require a lot more refactoring of the p2p module.
250+
func runWithSleep(task func()) {
251+
time.Sleep(1000 * time.Millisecond)
252+
task()
253+
time.Sleep(1000 * time.Millisecond)
254+
}
255+
256+
// broadcastDebugMessage broadcasts the debug message to the entire visible network.
166257
func broadcastDebugMessage(cmd *cobra.Command, debugMsg *messaging.DebugMessage) {
167258
anyProto, err := anypb.New(debugMsg)
168259
if err != nil {
@@ -178,7 +269,7 @@ func broadcastDebugMessage(cmd *cobra.Command, debugMsg *messaging.DebugMessage)
178269
}
179270
}
180271

181-
// Send to just a single (i.e. first) validator in the set
272+
// sendDebugMessage sends the debug message to just a single (i.e. first) node visible
182273
func sendDebugMessage(cmd *cobra.Command, debugMsg *messaging.DebugMessage) {
183274
anyProto, err := anypb.New(debugMsg)
184275
if err != nil {

build/config/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ It is not recommended at this time to build infrastructure components that rely
1212

1313
## Origin Document
1414

15-
Currently, the Genesis and Configuration generator is necessary to create development `localnet` environments for iterating on V1. A current example (as of 09/2022) of this is the `make compose_and_watch` debug utility that generates a `localnet` using `docker-compose` by injecting the appropriate `config.json` and `genesis.json` files.
15+
Currently, the Genesis and Configuration generator is necessary to create development `localnet` environments for iterating on V1. A current example (as of 09/2022) of this is the `make lightweight_localnet` debug utility that generates a `localnet` using `docker-compose` by injecting the appropriate `config.json` and `genesis.json` files.
1616

1717
## Usage
1818

build/docs/CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
233233
## [0.0.0.1] - 2022-12-29
234234

235235
- Updated all `config*.json` files with the missing `max_mempool_count` value
236-
- Added `is_client_only` to `config1.json` so Viper knows it can be overridden. The config override is done in the Makefile's `client_connect` target. Setting this can be avoided if we merge the changes in https://github.com/pokt-network/pocket/compare/main...issue/cli-viper-environment-vars-fix
236+
- Added `is_client_only` to `config1.json` so Viper knows it can be overridden. The config override is done in the Makefile's `lightweight_localnet_client_debug` target. Setting this can be avoided if we merge the changes in https://github.com/pokt-network/pocket/compare/main...issue/cli-viper-environment-vars-fix
237237

238238
## [0.0.0.0] - 2022-12-22
239239

build/localnet/README.md

+7-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
This guide shows how to deploy a LocalNet using [pocket-operator](https://github.com/pokt-network/pocket-operator).
44

5-
- [TLDR](#tldr)
5+
- [TL;DR](#tldr)
66
- [Dependencies](#dependencies)
77
- [Choosing Kubernetes Distribution](#choosing-kubernetes-distribution)
88
- [How to create Kind Kubernetes cluster](#how-to-create-kind-kubernetes-cluster)
@@ -16,6 +16,8 @@ This guide shows how to deploy a LocalNet using [pocket-operator](https://github
1616
- [Interacting w/ LocalNet](#interacting-w-localnet)
1717
- [Make Targets](#make-targets)
1818
- [Addresses and keys on LocalNet](#addresses-and-keys-on-localnet)
19+
- [Applications staked on LocalNet](#applications-staked-on-localnet)
20+
- [Servicers staked on LocalNet](#servicers-staked-on-localnet)
1921
- [How to change configuration files](#how-to-change-configuration-files)
2022
- [Overriding default values for localnet with Tilt](#overriding-default-values-for-localnet-with-tilt)
2123
- [How does it work?](#how-does-it-work)
@@ -26,7 +28,7 @@ This guide shows how to deploy a LocalNet using [pocket-operator](https://github
2628
- [Full Cleanup](#full-cleanup)
2729
- [Code Structure](#code-structure)
2830

29-
## TLDR
31+
## TL;DR
3032

3133
If you feel adventurous, and you know what you're doing, here is a rapid guide to start LocalNet:
3234

@@ -46,6 +48,7 @@ All necessary dependencies, except Docker and Kubernetes cluster, are installed
4648
3. `Kubernetes cluster`: refer to [Choosing Kubernetes Distribution](#choosing-kubernetes-distribution) section for more details.
4749
4. `kubectl`: CLI is required and should be configured to access the cluster. This should happen automatically if using Docker Desktop, Rancher Desktop, k3s, k3d, minikube, etc.
4850
5. [helm](https://helm.sh/docs/intro/install): required to template the YAML manifests for the dependencies (e.g., Postgres, Grafana). Installation instructions available.
51+
6. [rsync](https://www.hostinger.com/tutorials/how-to-use-rsync): required to for some extensions used with `Tilt`; https://github.com/tilt-dev/tilt-extensions/tree/master/syncback#usage
4952

5053
### Choosing Kubernetes Distribution
5154

@@ -149,8 +152,8 @@ For example:
149152
- `0010297b55fc9278e4be4f1bcfe52bf9bd0443f8` is a servicer #001.
150153
- `314019dbb7faf8390c1f0cf4976ef1215c90b7e4` is an application #314.
151154

152-
153155
#### Applications staked on LocalNet
156+
154157
Applications with the following addresses are staked on LocalNet, through the [applications field of the genesis.json in the LocalNet configuration](https://github.com/pokt-network/pocket/blob/main/build/localnet/manifests/configs.yaml#L4088)
155158

156159
- `00001fff518b1cdddd74c197d76ba5b5dedc0301`
@@ -159,6 +162,7 @@ Applications with the following addresses are staked on LocalNet, through the [a
159162
These addresses can be used for e.g. testing the CLI.
160163

161164
#### Servicers staked on LocalNet
165+
162166
Servicers with the following addresses are staked on LocalNet, through the [servicers field of the genesis.json in the LocalNet configuration](https://github.com/pokt-network/pocket/blob/main/build/localnet/manifests/configs.yaml#L4120)
163167

164168
- `00002b8cea1bcc3dadc72ebecf95564ceb9c2e2a`

0 commit comments

Comments
 (0)