Skip to content

Commit

Permalink
chore: add setup for neutron-query-relayer (#425)
Browse files Browse the repository at this point in the history
* add docker setup for neutron-query-relayer

* install unzip before using it

* add inital configs for neutron-query-relayer

* add neutron-query-relayer to values schema

* rebase main, starship v2

* partial ss of neutron-query-relayer

* intermediate state

* update neutron query relayer startup process

* update registry test to check ibc endpoint, add neutron-query-relayer for e2e tests
  • Loading branch information
Anmol1696 authored May 29, 2024
1 parent 026dca9 commit 267f737
Show file tree
Hide file tree
Showing 11 changed files with 360 additions and 7 deletions.
1 change: 1 addition & 0 deletions .github/workflows/e2e-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ jobs:
- "three-chain.yaml"
- "agoric.yaml"
- "multi-relayer.yaml"
- "neutron-relayer.yaml"
fail-fast: true
max-parallel: 1

Expand Down
23 changes: 23 additions & 0 deletions starship/charts/devnet/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -776,6 +776,26 @@ defaultRelayers:
mode: push # allowed values: push, pull. Valid only for 1.6.0+
go-relayer:
image: ghcr.io/cosmology-tech/starship/go-relayer:v2.4.1
neutron-query-relayer:
image: ghcr.io/cosmology-tech/starship/neutron-query-relayer:v0.2.0
config:
RELAYER_NEUTRON_CHAIN_TIMEOUT: 1000s
RELAYER_NEUTRON_CHAIN_GAS_PRICES: 0.5untrn
RELAYER_NEUTRON_CHAIN_GAS_LIMIT: 200000
RELAYER_NEUTRON_CHAIN_GAS_ADJUSTMENT: 2.0
RELAYER_NEUTRON_CHAIN_DEBUG: false
RELAYER_NEUTRON_CHAIN_KEYRING_BACKEND: test
RELAYER_NEUTRON_CHAIN_OUTPUT_FORMAT: json
RELAYER_NEUTRON_CHAIN_SIGN_MODE_STR: direct
RELAYER_TARGET_CHAIN_TIMEOUT: 1000s
RELAYER_TARGET_CHAIN_DEBUG: true
RELAYER_REGISTRY_ADDRESS: ""
RELAYER_ALLOW_TX_QUERIES: true
RELAYER_ALLOW_KV_CALLBACKS: true
RELAYER_MIN_KV_UPDATE_PERIOD: 1
RELAYER_STORAGE_PATH: "storage/leveldb"
RELAYER_CHECK_SUBMITTED_TX_STATUS_DELAY: 10s
RELAYER_QUERIES_TASK_QUEUE_CAPACITY: 10000

defaultScripts:
createGenesis:
Expand All @@ -796,6 +816,9 @@ defaultScripts:
buildChain:
name: build-chain.sh
file: scripts/default/build-chain.sh
ibcConnection:
name: ibc-connection.sh
file: scripts/default/ibc-connection.sh

defaultFaucet:
cosmjs:
Expand Down
26 changes: 26 additions & 0 deletions starship/charts/devnet/scripts/default/ibc-connection.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash

REGISTRY_URL="$1"
CHAIN_1="$2"
CHAIN_2="$3"

set -eux

function connection_id() {
CONNECTION_ID=$(curl -s $REGISTRY_URL/ibc/$CHAIN_1/$CHAIN_2 | jq -r ".chain_1.connection_id")
echo $CONNECTION_ID
}

echo "Try to get connection id, if failed, wait for 2 seconds and try again"
max_tries=20
while [[ max_tries -gt 0 ]]
do
id=$(connection_id)
if [[ -n "$id" ]]; then
echo "Found connection id: $id"
exit 0
fi
echo "Failed to get connection id. Sleeping for 2 secs. Tries left $max_tries"
((max_tries--))
sleep 10
done
22 changes: 17 additions & 5 deletions starship/charts/devnet/scripts/neutron/create-neutron-genesis.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ KEYS_CONFIG="${KEYS_CONFIG:=configs/keys.json}"

BRANCH="${BRANCH:=v2.0.1}"

FAUCET_ENABLED="${FAUCET_ENABLED:=true}"
NUM_VALIDATORS="${NUM_VALIDATORS:=1}"
NUM_RELAYERS="${NUM_RELAYERS:=0}"

GENESIS_PATH="$CHAIN_DIR/config/genesis.json"
BASE_DIR=./data

Expand All @@ -33,16 +37,24 @@ echo "Adding key...." $(jq -r ".genesis[0].name" $KEYS_CONFIG)
jq -r ".genesis[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r ".genesis[0].name" $KEYS_CONFIG) --recover --keyring-backend="test"
$BINARY add-genesis-account $($BINARY keys show -a $(jq -r .genesis[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test"

# Add relayer key to the keyring and self delegate initial coins
echo "Adding key...." $(jq -r ".relayers[0].name" $KEYS_CONFIG)
jq -r ".relayers[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r ".relayers[0].name" $KEYS_CONFIG) --recover --keyring-backend="test"
$BINARY add-genesis-account $($BINARY keys show -a $(jq -r .relayers[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test"

# Add faucet key to the keyring and self delegate initial coins
echo "Adding key...." $(jq -r ".faucet[0].name" $KEYS_CONFIG)
jq -r ".faucet[0].mnemonic" $KEYS_CONFIG | $BINARY keys add $(jq -r ".faucet[0].name" $KEYS_CONFIG) --recover --keyring-backend="test"
$BINARY add-genesis-account $($BINARY keys show -a $(jq -r .faucet[0].name $KEYS_CONFIG) --keyring-backend="test") $COINS --keyring-backend="test"

if [[ $FAUCET_ENABLED == "false" && $NUM_RELAYERS -gt "-1" ]];
then
## Add relayers keys and delegate tokens
for i in $(seq 0 $NUM_RELAYERS);
do
# Add relayer key and delegate tokens
RELAYER_KEY_NAME="$(jq -r ".relayers[$i].name" $KEYS_CONFIG)"
echo "Adding relayer key.... $RELAYER_KEY_NAME"
jq -r ".relayers[$i].mnemonic" $KEYS_CONFIG | $BINARY keys add $RELAYER_KEY_NAME --recover --keyring-backend="test"
$BINARY add-genesis-account $($BINARY keys show -a $RELAYER_KEY_NAME --keyring-backend="test") $COINS --keyring-backend="test"
done
fi

# Add test addresses, admin address
echo "Adding key.... demowallet1"
jq -r ".keys[0].mnemonic" $KEYS_CONFIG | $BINARY keys add demowallet1 --index 1 --recover --keyring-backend="test"
Expand Down
2 changes: 2 additions & 0 deletions starship/charts/devnet/templates/chains/cosmos/configmap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,6 @@ metadata:
data:
transfer-tokens.sh: |-
{{- $.Files.Get "scripts/default/transfer-tokens.sh" | nindent 4 }}
ibc-connection.sh: |-
{{- $.Files.Get "scripts/default/ibc-connection.sh" | nindent 4 }}
---
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{{- $keys := .Files.Get "configs/keys.json" | fromJson }}
{{- range $relayer := .Values.relayers }}
{{- if eq $relayer.type "neutron-query-relayer" }}
{{ $defaultFile := $.Files.Get "defaults.yaml" | fromYaml }}
{{ $relayer = include "devnet.fullrelayer" (dict "name" $relayer.name "file" $defaultFile "context" $) | fromJson }}
{{ $tag := include "image.tag" $relayer.image }}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: "{{ $relayer.fullname }}"
data:
{{- range $i, $chain := $relayer.chains }}
{{ $fullchain := include "devnet.fullchain" (dict "name" $chain "file" $defaultFile "context" $) | fromJson }}
{{- if eq $fullchain.name "neutron" }}
relayer-neutron-chain-rpc-addr: "http://{{ $fullchain.hostname }}-genesis.{{ $.Release.Namespace }}.svc.cluster.local:26657"
relayer-neutron-chain-rest-addr: "http://{{ $fullchain.hostname }}-genesis.{{ $.Release.Namespace }}.svc.cluster.local:1317"
relayer-neutron-chain-home-dir: "{{ $fullchain.home }}"
{{- else }}
relayer-target-chain-rpc-addr: "http://{{ $fullchain.hostname }}-genesis.{{ $.Release.Namespace }}.svc.cluster.local:26657"
{{- end }}
{{- end }}
relayer-registry-addresses: ""
relayer-listen-addr: "127.0.0.1:9999"
---
{{- end }}
{{- end }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{{- range $relayer := .Values.relayers }}
{{- if eq $relayer.type "neutron-query-relayer" }}
{{ $defaultFile := $.Files.Get "defaults.yaml" | fromYaml }}
{{ $defaultRelayer := get $defaultFile.defaultRelayers $relayer.type | default dict }}
{{ $relayer = mergeOverwrite $defaultRelayer $relayer }}
---
apiVersion: v1
kind: Service
metadata:
name: {{ $relayer.type }}-{{ $relayer.name }}
labels:
app.kubernetes.io/name: {{ $relayer.type }}-{{ $relayer.name }}
spec:
clusterIP: None
ports:
- name: rest
port: 3000
protocol: TCP
targetPort: 9999
selector:
app.kubernetes.io/name: {{ $relayer.type }}-{{ $relayer.name }}
---
{{- end }}
{{- end }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
{{- range $relayer := .Values.relayers }}
{{- if eq $relayer.type "neutron-query-relayer" }}
{{ $defaultFile := $.Files.Get "defaults.yaml" | fromYaml }}
{{ $relayer := include "devnet.fullrelayer" (dict "name" $relayer.name "file" $defaultFile "context" $) | fromJson }}
{{ $relayerIndex := include "devnet.relayerindex" (dict "name" $relayer.name "context" $) }}
{{ $initParams := dict "chains" $relayer.chains "port" $.Values.exposer.ports.rest "context" $ }}
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{ $relayer.fullname }}
spec:
serviceName: {{ $relayer.fullname }}
replicas: {{ $relayer.replicas }}
podManagementPolicy: "Parallel"
revisionHistoryLimit: 3
selector:
matchLabels:
app.kubernetes.io/instance: relayer
app.kubernetes.io/type: {{ $relayer.type }}
app.kubernetes.io/name: {{ $relayer.fullname }}
template:
metadata:
annotations:
quality: release
role: api-gateway
sla: high
tier: gateway
labels:
app.kubernetes.io/instance: relayer
app.kubernetes.io/type: {{ $relayer.type }}
app.kubernetes.io/name: {{ $relayer.fullname }}
app.kubernetes.io/rawname: {{ $relayer.name }}
app.kubernetes.io/version: {{ $.Chart.AppVersion }}
spec:
{{- include "imagePullSecrets" $relayer | indent 6 }}
initContainers:
{{/* Waits for all upstream chains before starting relayer, vai init containers */}}
{{- include "devnet.init.wait" $initParams | indent 8 }}
- name: init-relayer
{{- range $i, $chain := $relayer.chains }}
{{ $fullchain := include "devnet.fullchain" (dict "name" $chain "file" $defaultFile "context" $) | fromJson }}
{{- if eq $fullchain.name "neutron" }}
image: {{ $fullchain.image }}
imagePullPolicy: {{ $.Values.images.imagePullPolicy }}
env:
- name: KEYS_CONFIG
value: /keys/keys.json
- name: RELAYER_DIR
value: "{{ $fullchain.home }}"
- name: RELAYER_INDEX
value: "{{ $relayerIndex }}"
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
command:
- bash
- "-c"
- |
set -ux
echo "Adding key.... relayer"
jq -r ".relayers[$RELAYER_INDEX].mnemonic" $KEYS_CONFIG | neutrond keys add relayer --recover --keyring-backend="test"
DENOM="{{ $fullchain.denom }}"
RLY_ADDR=$(neutrond keys show relayer -a --keyring-backend='test')
echo "Transfer tokens to address $RLY_ADDR"
echo "Transfer tokens to address $RLY_ADDR"
bash -e /scripts/transfer-tokens.sh \
$RLY_ADDR \
$DENOM \
http://{{ $fullchain.hostname }}-genesis.$NAMESPACE.svc.cluster.local:8000/credit \
"{{ $fullchain.faucet.enabled }}" || true
echo "Wait for connection id to be created"
bash -e /scripts/ibc-connection.sh \
http://registry.$NAMESPACE.svc.cluster.local:8080 \
{{ index $relayer.chains 0 }} \
{{ index $relayer.chains 1 }}
{{- end }}
{{- end }}
volumeMounts:
- mountPath: /root
name: relayer
- mountPath: /configs
name: relayer-config
- mountPath: /keys
name: keys
- mountPath: /scripts
name: scripts
containers:
- name: relayer
image: {{ $relayer.image }}
imagePullPolicy: {{ $.Values.images.imagePullPolicy }}
env:
- name: RELAYER_DIR
value: /root/.hermes
{{- range $key, $value := $relayer.config }}
- name: {{ $key }}
value: "{{ $value }}"
{{- end }}
- name: RELAYER_NEUTRON_CHAIN_SIGN_KEY_NAME
value: relayer
- name: RELAYER_NEUTRON_CHAIN_RPC_ADDR
valueFrom:
configMapKeyRef:
name: "{{ $relayer.fullname }}"
key: relayer-neutron-chain-rpc-addr
- name: RELAYER_NEUTRON_CHAIN_REST_ADDR
valueFrom:
configMapKeyRef:
name: "{{ $relayer.fullname }}"
key: relayer-neutron-chain-rest-addr
- name: RELAYER_NEUTRON_CHAIN_HOME_DIR
valueFrom:
configMapKeyRef:
name: "{{ $relayer.fullname }}"
key: relayer-neutron-chain-home-dir
- name: RELAYER_TARGET_CHAIN_RPC_ADDR
valueFrom:
configMapKeyRef:
name: "{{ $relayer.fullname }}"
key: relayer-target-chain-rpc-addr
- name: RELAYER_REGISTRY_ADDRESSES
valueFrom:
configMapKeyRef:
name: "{{ $relayer.fullname }}"
key: relayer-registry-addresses
- name: RELAYER_LISTEN_ADDR
valueFrom:
configMapKeyRef:
name: "{{ $relayer.fullname }}"
key: relayer-listen-addr
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
command:
- bash
- "-c"
- |
RLY_INDEX=${HOSTNAME##*-}
echo "Relayer Index: $RLY_INDEX"
echo "Query connection id from registry service"
CONNECTION_ID=$(curl -s -X GET curl http://registry.$NAMESPACE.svc.cluster.local:8080/ibc/{{ index $relayer.chains 0 }}/{{ index $relayer.chains 1 }} | jq -r ".chain_1.connection_id")
echo "Connection ID: $CONNECTION_ID"
RELAYER_NEUTRON_CHAIN_CONNECTION_ID=$CONNECTION_ID neutron_query_relayer start
resources: {{- include "devnet.node.resources" ( dict "node" $relayer "context" $ ) | trim | nindent 12 }}
securityContext:
allowPrivilegeEscalation: false
runAsUser: 0
volumeMounts:
- mountPath: /root
name: relayer
- mountPath: /configs
name: relayer-config
volumes:
- name: relayer
emptyDir: { }
- name: relayer-config
configMap:
name: "{{ $relayer.fullname }}"
- name: keys
configMap:
name: keys
- name: scripts
configMap:
name: setup-scripts
---
{{- end }}
{{- end }}
19 changes: 18 additions & 1 deletion starship/charts/devnet/values.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,22 @@
"file",
"data"
]
},
"ibcConnection": {
"type": "object",
"properties": {
"file": {
"type": "string"
},
"data": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"file",
"data"
]
}
},
"additionalProperties": false
Expand Down Expand Up @@ -531,7 +547,8 @@
"enum": [
"go-relayer",
"hermes",
"ts-relayer"
"ts-relayer",
"neutron-query-relayer"
]
},
"image": {
Expand Down
Loading

0 comments on commit 267f737

Please sign in to comment.