Skip to content

Commit

Permalink
Merge pull request #125 from InjectiveLabs/master
Browse files Browse the repository at this point in the history
Upgrade
  • Loading branch information
albertchon authored Jul 27, 2024
2 parents 3eedb36 + ead1119 commit c9e14d3
Show file tree
Hide file tree
Showing 58 changed files with 15,878 additions and 15,061 deletions.
65 changes: 65 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Docker Release
defaults:
run:
shell: bash -leo pipefail {0}
on:
push:
tags:
- v**
env:
ECR_ENABLED: true
ECR_REPO: public.ecr.aws/l9h3g6c6/peggo
GHCR_ENABLED: false
GHCR_REPO: ghcr.io/InjectiveLabs/peggo

jobs:
docker-release:
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- name: Checkout peggo
uses: actions/checkout@master
with:
repository: InjectiveLabs/peggo
fetch-depth: 0
ref: ${{ github.ref_name }}
token: ${{ secrets.GH_TOKEN }}
path: ./peggo

- name: Set up QEMU
uses: docker/setup-qemu-action@v2

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
platforms: linux/amd64,linux/arm64

- name: Log-in to ghcr.io
if: env.GHCR_ENABLED == 'true'
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin

- name: Login to Public ECR
if: env.ECR_ENABLED == 'true'
uses: docker/login-action@v2
with:
registry: public.ecr.aws
username: ${{ secrets.AWS_KEY }}
password: ${{ secrets.AWS_SECRET }}
env:
AWS_REGION: us-east-1

- name: Build image and push
run: |
cd peggo/
TAG=${{ github.ref_name }}
echo $TAG
[[ $ECR_ENABLED == "false" ]] || docker buildx build --tag $ECR_REPO:$TAG --platform linux/amd64,linux/arm64 --push .
[[ $GHCR_ENABLED == "false" ]] || docker buildx build --tag $GHCR_REPO:$TAG --platform linux/amd64,linux/arm64 --push .
- name: NONROOT Build image and push
run: |
cd peggo/
TAG=${{ github.ref_name }}-nonroot
echo $TAG
[[ $ECR_ENABLED == "false" ]] || docker buildx build -f Dockerfile.nonroot --tag $ECR_REPO:$TAG --platform linux/amd64,linux/arm64 --push .
[[ $GHCR_ENABLED == "false" ]] || docker buildx build -f Dockerfile.nonroot --tag $GHCR_REPO:$TAG --platform linux/amd64,linux/arm64 --push .
24 changes: 17 additions & 7 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,24 +1,34 @@
#install packages for build layer
FROM golang:1.15-alpine as builder
RUN apk add --no-cache git gcc make perl jq libc-dev linux-headers
FROM golang:1.19-alpine as builder

ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.3/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a
ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.3/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a
RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep d6904bc0082d6510f1e032fc1fd55ffadc9378d963e199afe0f93dd2667c0160
RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep bb8ffda690b15765c396266721e45516cb3021146fd4de46f7daeda5b0d82c86

RUN apk add --no-cache git gcc make perl jq libc-dev linux-headers libgcc

#Set architecture
RUN apk --print-arch > ./architecture
RUN cp /lib/libwasmvm_muslc.$(cat ./architecture).a /lib/libwasmvm_muslc.a
RUN rm ./architecture

#build binary
WORKDIR /src
COPY . .
RUN go mod download

#install binary
RUN make install
RUN DOCKER=true make install

#build main container
FROM alpine:latest
RUN apk add --update --no-cache ca-certificates
RUN apk add curl
RUN apk add --update --no-cache ca-certificates curl libgcc
COPY --from=builder /go/bin/* /usr/local/bin/

#configure container
VOLUME /apps/data
WORKDIR /apps/data
WORKDIR /root/.injectived/peggo

#default command
CMD cd /root/.injectived/peggo/ && peggo orchestrator
CMD peggo orchestrator
46 changes: 46 additions & 0 deletions Dockerfile.nonroot
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#install packages for build layer
FROM golang:1.19-alpine as builder

ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.3/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a
ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.3/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a
RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep d6904bc0082d6510f1e032fc1fd55ffadc9378d963e199afe0f93dd2667c0160
RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep bb8ffda690b15765c396266721e45516cb3021146fd4de46f7daeda5b0d82c86

RUN apk add --no-cache git gcc make perl jq libc-dev linux-headers

#Set architecture
RUN apk --print-arch > ./architecture
RUN cp /lib/libwasmvm_muslc.$(cat ./architecture).a /lib/libwasmvm_muslc.a
RUN rm ./architecture

#build binary
WORKDIR /src
COPY . .
RUN go mod download

#install binary
RUN DOCKER=true make install

#build main container
FROM alpine:latest

# Add the "injective" non-root user and group
RUN addgroup -S injective && adduser -S -G injective injective

# Install dependencies
RUN apk add --update --no-cache ca-certificates curl

# Copy the peggo binary
COPY --from=builder /go/bin/* /usr/local/bin/

# Set ownership and permissions
RUN chown -R injective:injective /usr/local/bin

# Configure container
USER injective
VOLUME /apps/data
WORKDIR /home/injective/.injectived/peggo

# Default command
CMD peggo orchestrator

5 changes: 2 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ GIT_COMMIT = $(shell git rev-parse --short HEAD)
BUILD_DATE = $(shell date -u "+%Y%m%d-%H%M")
VERSION_PKG = github.com/InjectiveLabs/peggo/orchestrator/version
IMAGE_NAME := gcr.io/injective-core/peggo
DOCKER ?= false

all:

Expand All @@ -18,9 +19,7 @@ push:
install: export GOPROXY=direct
install: export VERSION_FLAGS="-X $(VERSION_PKG).GitCommit=$(GIT_COMMIT) -X $(VERSION_PKG).BuildDate=$(BUILD_DATE)"
install:
go install \
-ldflags $(VERSION_FLAGS) \
./cmd/...
$(DOCKER) && go install -tags muslc -ldflags $(VERSION_FLAGS) ./cmd/... || go install -ldflags $(VERSION_FLAGS) ./cmd/...

.PHONY: install image push test gen

Expand Down
123 changes: 123 additions & 0 deletions README.ua.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# Injective's Peggo [![Peggy.sol MythX](https://badgen.net/https/api.mythx.io/v1/projects/82ca9468-f86d-4550-a0ae-bc120eeb055f/badge/data?cache=300&icon=https://raw.githubusercontent.com/ConsenSys/mythx-github-badge/main/logo_white.svg)](https://docs.mythx.io/dashboard/github-badges)

Peggo - це впровадження Peggy Orchestrator на мові програмування Go для Injective.

Важливі команди:

* `peggo orchestrator` запускає основний цикл оркестратора.
* `peggo tx register-eth-key` це спеціальна команда для надсилання ключа Ethereum, який буде використовуватися для підпису повідомлень від вашого Валідатора


## Installation

Спочатку завантажте собі `Go 1.15+` на https://golang.org/dl/ а потім:

```
$ go get github.com/InjectiveLabs/peggo/orchestrator/cmd/...
```

## peggo

Peggo - це допоміжний виконуваний файл для оркестрації валідатора Peggy.

### Конфігурація

Використовуйте аргументи CLI, прапорці або створіть `.env` зі змінними середовища.

### Використання

```
$ peggo --help
Використання: peggo [Опції] КОМАНДА [arg...]
Peggo - це допоміжний виконуваний файл для оркестрації валідатора Peggy.
Опції:
-e, --env Назва середовища, в якому працює цей додаток. Використовується для метрик та повідомлень про помилки. (env $PEGGO_ENV) (default "local")
-l, --log-level Доступні рівні: error, warn, info, debug. (env $PEGGO_LOG_LEVEL) (default "info")
--svc-wait-timeout Стандартний тайм-аут очікування для зовнішніх служб (наприклад, з'єднання Cosmos daemon GRPC connection) (env $PEGGO_SERVICE_WAIT_TIMEOUT) (default "1m")
Команди:
orchestrator Запускає головний цикл оркестратора.
q, query Команди запитів, які можуть отримати інформацію про стан від Peggy.
tx Транзакції для управління Peggy та обслуговування.
version Друкує інформацію про версію та виходить.
Запустіть 'peggo COMMAND --help' для отримання додаткової інформації про команду.
```

## Команди

### peggo orchestrator

```
$ peggo orchestrator -h
Використання: peggo orchestrator [Опції]
Запускає головний цикл оркестратора.
Опції:
--cosmos-chain-id Вкажіть ID мережі Cosmos. (env $PEGGO_COSMOS_CHAIN_ID) (default "888")
--cosmos-grpc Кінцева точка запиту Cosmos GRPC (env $PEGGO_COSMOS_GRPC) (default "tcp://localhost:9900")
--tendermint-rpc Кінцева точка Tendermint RPC (env $PEGGO_TENDERMINT_RPC) (default "http://localhost:26657")
--cosmos-gas-prices Вкажіть комісію за транзакції в мережі Cosmos у вигляді цін на газ DecCoins (env $PEGGO_COSMOS_GAS_PRICES)
--cosmos-keyring Вкажіть бекенд Cosmos keyring (os|file|kwallet|pass|test) (env $PEGGO_COSMOS_KEYRING) (default "file")
--cosmos-keyring-dir Вкажіть директорію Cosmos keyring, якщо використовуєте file keyring. (env $PEGGO_COSMOS_KEYRING_DIR)
--cosmos-keyring-app Вкажіть ім'я додатку Cosmos keyring. (env $PEGGO_COSMOS_KEYRING_APP) (default "peggo")
--cosmos-from Вкажіть ім'я або адресу ключа валідатора Cosmos. Якщо вказано, має існувати в keyring, ledger або співпадати з privkey. (env $PEGGO_COSMOS_FROM)
--cosmos-from-passphrase Вкажіть пароль keyring, інакше буде використано Stdin. (env $PEGGO_COSMOS_FROM_PASSPHRASE) (default "peggo")
--cosmos-pk Вкажіть приватний ключ рахунку валідатора Cosmos у форматі hex. ВИКОРИСТОВУЙТЕ ТІЛЬКИ ДЛЯ ТЕСТУВАННЯ! (env $PEGGO_COSMOS_PK)
--cosmos-use-ledger Використовуйте додаток Cosmos на апаратному ledger для підпису транзакцій. (env $PEGGO_COSMOS_USE_LEDGER)
--eth-chain-id Вкажіть ID мережі Ethereum. (env $PEGGO_ETH_CHAIN_ID) (default 42)
--eth-node-http Вкажіть HTTP кінцеву точку для вузла Ethereum. (env $PEGGO_ETH_RPC) (default "http://localhost:1317")
--eth-node-alchemy-ws Вкажіть url веб-сокета для вузла Ethereum Alchemy. (env $PEGGO_ETH_ALCHEMY_WS)
--eth_gas_price_adjustment Корекція ціни газу для транзакцій на Ethereum (env $PEGGO_ETH_GAS_PRICE_ADJUSTMENT) (default 1.3)
--eth-keystore-dir Вкажіть директорію Ethereum keystore (формат Geth) префікс. (env $PEGGO_ETH_KEYSTORE_DIR)
--eth-from Вкажіть адресу відправника. Якщо вказано, має існувати в keystore, ledger або відповідати privkey. (env $PEGGO_ETH_FROM)
--eth-passphrase Пароль для розблокування приватного ключа з armor, якщо порожній, то використовується stdin. (env $PEGGO_ETH_PASSPHRASE)
--eth-pk Надайте необроблений приватний ключ валідатора Ethereum у форматі hex. ВИКОРИСТОВУЙТЕ ТІЛЬКИ ДЛЯ ТЕСТУВАННЯ! (env $PEGGO_ETH_PK)
--eth-use-ledger Використовуйте додаток Ethereum на апаратному ledger для підпису транзакцій. (env $PEGGO_ETH_USE_LEDGER)
--relay_valsets Якщо включено, relayer буде перенаправляти valsets до ethereum (env $PEGGO_RELAY_VALSETS)
--relay_valset_offset_dur Якщо встановлено, relayer буде транслювати valsetUpdate лише після того, як пройде relayValsetOffsetDur від часу створення valsetUpdate (env $PEGGO_RELAY_VALSET_OFFSET_DUR) (default "5m")
--relay_batches Якщо включено, relayer пересилатиме пакети до Ethereum. (env $PEGGO_RELAY_BATCHES)
--relay_batch_offset_dur Якщо встановлено, релейер буде транслювати пакети лише після того, як пройде relayBatchOffsetDur від моменту створення пакету (env $PEGGO_RELAY_BATCH_OFFSET_DUR) (default "5m")
--relay_pending_tx_wait_duration Якщо встановлено, релейер буде транслювати очікуючі пакети/оновлення valsetupdate лише після того, як пройде час pendingTxWaitDuration (env $PEGGO_RELAY_PENDING_TX_WAIT_DURATION) (default "20m")
--min_batch_fee_usd Якщо встановлено, запит на пакет створить пакети тільки у випадку, якщо поріг комісії перевищено (env $PEGGO_MIN_BATCH_FEE_USD) (default 23.3)
--coingecko_api Вкажіть кінцеву точку HTTP для coingecko api. (env $PEGGO_COINGECKO_API) (default "https://api.coingecko.com/api/v3")
```

### peggo tx register-eth-key

```
peggo tx register-eth-key --help
Використання: peggo tx register-eth-key [ОПЦІЇ]
Надсилає ключ Ethereum, який буде використовуватися для підпису повідомлень від імені вашого валідатора
ОПЦІЇ:
--cosmos-chain-id Вказує ID ланцюга мережі Cosmos. (env $PEGGO_COSMOS_CHAIN_ID) (default "888")
--cosmos-grpc Кінцева точка запиту Cosmos GRPC (env $PEGGO_COSMOS_GRPC) (default "tcp://localhost:9900")
--tendermint-rpc Кінцева точка Tendermint RPC (env $PEGGO_TENDERMINT_RPC) (default "http://localhost:26657")
--cosmos-gas-prices Вказує вартість транзакцій ланцюга Cosmos у вигляді газових цін DecCoins (env $PEGGO_COSMOS_GAS_PRICES)
--cosmos-keyring Вкажіть бекенд Cosmos keyring (os|file|kwallet|pass|test) (env $PEGGO_COSMOS_KEYRING) (default "file")
--cosmos-keyring-dir Вкажіть директорію Cosmos keyring, якщо використовуєте file keyring. (env $PEGGO_COSMOS_KEYRING_DIR)
--cosmos-keyring-app Вкажіть ім'я додатку Cosmos keyring. (env $PEGGO_COSMOS_KEYRING_APP) (default "peggo")
--cosmos-from Вкажіть ім'я або адресу ключа валідатора Cosmos. Якщо вказано, має існувати в keyring, ledger або співпадати з privkey. (env $PEGGO_COSMOS_FROM)
--cosmos-from-passphrase Вкажіть пароль keyring, інакше буде використано Stdin. (env $PEGGO_COSMOS_FROM_PASSPHRASE) (default "peggo")
--cosmos-pk Вкажіть приватний ключ рахунку валідатора Cosmos у форматі hex. ВИКОРИСТОВУЙТЕ ТІЛЬКИ ДЛЯ ТЕСТУВАННЯ! (env $PEGGO_COSMOS_PK)
--cosmos-use-ledger Використовуйте додаток Cosmos на апаратному ledger для підпису транзакцій. (env $PEGGO_COSMOS_USE_LEDGER)
--eth-keystore-dir Вказує директорію Ethereum keystore (формат Geth) префікс. (env $PEGGO_ETH_KEYSTORE_DIR)
--eth-from Вкажіть адресу відправника. Якщо вказано, має існувати в keystore, ledger або відповідати privkey. (env $PEGGO_ETH_FROM)
--eth-passphrase Пароль для розблокування приватного ключа з armor, якщо порожній, то використовується stdin. (env $PEGGO_ETH_PASSPHRASE)
--eth-pk Надайте необроблений приватний ключ валідатора Ethereum у форматі hex. ВИКОРИСТОВУЙТЕ ТІЛЬКИ ДЛЯ ТЕСТУВАННЯ! (env $PEGGO_ETH_PK)
--eth-use-ledger Використовуйте додаток Ethereum на апаратному ledger для підпису транзакцій. (env $PEGGO_ETH_USE_LEDGER)
-y, --yes Завжди автоматично підтверджує дії, такі як відправка транзакцій. (env $PEGGO_ALWAYS_AUTO_CONFIRM)
```

## Ліцензія

Apache 2.0
34 changes: 34 additions & 0 deletions cmd/peggo/encoding.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package main

import (
"github.com/cosmos/cosmos-sdk/client"
sdkcodec "github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/codec/types"
"github.com/cosmos/cosmos-sdk/x/auth/tx"

"github.com/InjectiveLabs/sdk-go/chain/codec"
)

type EncodingConfig struct {
InterfaceRegistry types.InterfaceRegistry
Marshaler sdkcodec.Codec
TxConfig client.TxConfig
Amino *sdkcodec.LegacyAmino
}

// MakeEncodingConfig creates an EncodingConfig for testing
func MakeEncodingConfig() EncodingConfig {
cdc := sdkcodec.NewLegacyAmino()
interfaceRegistry := types.NewInterfaceRegistry()
marshaler := sdkcodec.NewProtoCodec(interfaceRegistry)
encodingConfig := EncodingConfig{
InterfaceRegistry: interfaceRegistry,
Marshaler: marshaler,
TxConfig: tx.NewTxConfig(marshaler, tx.DefaultSignModes),
Amino: cdc,
}

codec.RegisterInterfaces(encodingConfig.InterfaceRegistry)
codec.RegisterLegacyAminoCodec(encodingConfig.Amino)
return encodingConfig
}
Loading

0 comments on commit c9e14d3

Please sign in to comment.