91 lines
3.2 KiB
Markdown
91 lines
3.2 KiB
Markdown
# Developing the bridge
|
|
|
|
## Local Devnet
|
|
|
|
The following dependencies are required for local development:
|
|
|
|
- [Go](https://golang.org/dl/) >= 1.16.6
|
|
- [Docker](https://docs.docker.com/engine/install/) / moby-engine >= 19.03
|
|
- [Tilt](http://tilt.dev/) >= 0.20.8
|
|
- [NodeJS/npm](https://nodejs.org/en/download/) >= 14
|
|
- Any of the local Kubernetes clusters supported by Tilt.
|
|
We recommend [minikube](https://kubernetes.io/docs/setup/learning-environment/minikube/) >= v1.21.0 with the kvm2 driver.
|
|
|
|
See the [Tilt docs](https://docs.tilt.dev/install.html) docs on how to set up your local cluster -
|
|
it won't take more than a few minutes to set up! Example minikube invocation, adjust limits as needed:
|
|
|
|
minikube start --cpus=8 --memory=8G --disk-size=50G --driver=kvm2
|
|
|
|
npm wants to set up an insane number of inotify watches in the web container which may exceed kernel limits.
|
|
The minikube default is too low, adjust it like this:
|
|
|
|
minikube ssh 'echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p'
|
|
|
|
This should work on Linux, MacOS and possibly even Windows.
|
|
|
|
By default, the devnet is deployed to the `wormhole` namespace rather than `default`. This makes it easy to clean up the
|
|
entire deployment by simply removing the namespace, which isn't possible with `default`. Change your default namespace
|
|
to avoid having to specify `-n wormhole` for all commands:
|
|
|
|
kubectl config set-context --current --namespace=wormhole
|
|
|
|
After installing all dependencies, just run `tilt up`.
|
|
Whenever you modify a file, the devnet is automatically rebuilt and a rolling update is done.
|
|
|
|
Launch the devnet while specifying the number of guardians nodes to run (default is five):
|
|
|
|
tilt up -- --num=1
|
|
|
|
If you want to work on non-consensus parts of the code, running with a single guardian is easiest since
|
|
you won't have to wait for k8s to restart all pods.
|
|
|
|
## Usage
|
|
|
|
Watch pod status in your cluster:
|
|
|
|
kubectl get pod -A -w
|
|
|
|
Get logs for single guardian node:
|
|
|
|
kubectl logs guardian-0
|
|
|
|
Restart a specific pod:
|
|
|
|
kubectl delete pod guardian-0
|
|
|
|
Adjust number of nodes in running cluster: (this is only useful if you want to test scenarios where the number
|
|
of nodes diverges from the guardian set - otherwise, `tilt down --delete-namespaces` and restart the cluster)
|
|
|
|
tilt args -- --num=2
|
|
|
|
Tear down cluster:
|
|
|
|
tilt down --delete-namespaces
|
|
|
|
Once you're done, press Ctrl-C. Run `tilt down` to tear down the devnet.
|
|
|
|
|
|
### Post messages
|
|
|
|
To Solana:
|
|
|
|
kubectl exec solana-devnet-0 -c setup -- client post-message Bridge1p5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o 1 confirmed ffff
|
|
|
|
To Solana as CPI instruction:
|
|
|
|
kubectl exec solana-devnet-0 -c setup -- client post-message --proxy CP1co2QMMoDPbsmV7PGcUTLFwyhgCgTXt25gLQ5LewE1 Bridge1p5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o 1 confirmed ffff
|
|
|
|
|
|
## IntelliJ Protobuf Autocompletion
|
|
|
|
Set the include path:
|
|
|
|
![](https://i.imgur.com/bDij6Cu.png)
|
|
|
|
|
|
## BigTable event persistence
|
|
|
|
Guardian events can be persisted to a BigTable instance. Launch the devnet with flags supplying your database info to enable forwarding events:
|
|
|
|
tilt up -- --num=1 --bigTablePersistence --gcpProject=your-project-id --bigTableKeyPath=./your-service-account-key.json
|