Skip to content

Commit 74195d3

Browse files
authored
[tesseract] Relayer binary for syncing mandatory proofs (#790)
1 parent de2d527 commit 74195d3

16 files changed

Lines changed: 1147 additions & 4 deletions

File tree

.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Exclude the executable files to be copied into the image
22
target
33
!target/release/tesseract-consensus
4+
!target/release/tesseract-admin-relayer
45
!target/release/tesseract
56
!target/release/telemetry-server
67
!target/release/hyperbridge
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
name: Tesseract Admin Relayer Docker Publish
2+
3+
on:
4+
push:
5+
tags:
6+
- "tesseract-admin-relayer-v[0-9]+.[0-9]+.[0-9]+"
7+
8+
concurrency:
9+
group: release-${{ github.ref }}
10+
cancel-in-progress: true
11+
12+
jobs:
13+
build_and_publish:
14+
runs-on: release-runner
15+
permissions:
16+
contents: read
17+
packages: write
18+
steps:
19+
- name: Checkout sources
20+
uses: actions/checkout@v3
21+
with:
22+
token: ${{ secrets.GH_TOKEN }}
23+
submodules: recursive
24+
25+
- uses: webfactory/ssh-agent@v0.5.4
26+
with:
27+
ssh-private-key: "${{ secrets.SSH_KEY }}"
28+
29+
- name: Install toolchain
30+
uses: dtolnay/rust-toolchain@nightly
31+
with:
32+
toolchain: stable
33+
34+
- uses: pnpm/action-setup@v4
35+
with:
36+
version: 10
37+
38+
- name: Set up Node
39+
uses: actions/setup-node@v3
40+
with:
41+
node-version: 22
42+
cache-dependency-path: "evm/pnpm-lock.yaml"
43+
cache: "pnpm"
44+
45+
- name: Install npm dependencies
46+
working-directory: evm
47+
run: |
48+
pnpm install
49+
50+
- name: Install Foundry
51+
uses: foundry-rs/foundry-toolchain@v1
52+
with:
53+
version: nightly
54+
55+
- name: Build Foundry artifacts
56+
working-directory: evm
57+
run: forge build
58+
59+
- name: Build
60+
run: |
61+
sudo apt-get update -y
62+
sudo apt-get install -y clang netcat wget curl libssl-dev llvm libudev-dev make protobuf-compiler pkg-config
63+
cargo build --release -p tesseract-admin-relayer
64+
- name: Install cargo-get
65+
run: cargo install cargo-get
66+
67+
- name: Resolve version
68+
id: version
69+
run: |
70+
VERSION=$(cargo get package.version --entry ./tesseract/consensus/admin-relayer)
71+
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
72+
73+
- name: Login to Docker Hub
74+
uses: docker/login-action@v3
75+
with:
76+
username: ${{ secrets.DOCKER_USERNAME }}
77+
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
78+
79+
- name: Login to GitHub Container Registry
80+
uses: docker/login-action@v3
81+
with:
82+
registry: ghcr.io
83+
username: ${{ github.actor }}
84+
password: ${{ secrets.GITHUB_TOKEN }}
85+
86+
- name: Set up Docker Buildx
87+
uses: docker/setup-buildx-action@v3
88+
89+
- name: Build and push Docker image
90+
uses: docker/build-push-action@v6
91+
with:
92+
context: .
93+
file: ./scripts/docker/admin-relayer.Dockerfile
94+
push: true
95+
tags: |
96+
polytopelabs/tesseract-admin-relayer:v${{ steps.version.outputs.version }}
97+
polytopelabs/tesseract-admin-relayer:latest
98+
ghcr.io/${{ github.repository_owner }}/tesseract-admin-relayer:v${{ steps.version.outputs.version }}
99+
ghcr.io/${{ github.repository_owner }}/tesseract-admin-relayer:latest
100+
101+
generate-changelog:
102+
runs-on: ubuntu-latest
103+
needs: build_and_publish
104+
permissions:
105+
contents: write
106+
steps:
107+
- name: Checkout repository
108+
uses: actions/checkout@v4
109+
with:
110+
fetch-depth: 0
111+
112+
- name: Get previous tag
113+
id: previous-tag
114+
run: |
115+
CURRENT_TAG=${GITHUB_REF#refs/tags/}
116+
PREVIOUS_TAG=$(git tag -l "tesseract-admin-relayer-v*" --sort=-version:refname | grep -v "^${CURRENT_TAG}$" | head -n1)
117+
echo "previous_tag=${PREVIOUS_TAG}" >> $GITHUB_OUTPUT
118+
echo "current_tag=${CURRENT_TAG}" >> $GITHUB_OUTPUT
119+
echo "clean_tag=${CURRENT_TAG#tesseract-admin-relayer-}" >> $GITHUB_OUTPUT
120+
121+
- name: Generate changelog
122+
id: changelog
123+
run: |
124+
CURRENT_TAG=${{ steps.previous-tag.outputs.current_tag }}
125+
PREVIOUS_TAG=${{ steps.previous-tag.outputs.previous_tag }}
126+
127+
echo "Generating changelog for ${CURRENT_TAG}"
128+
echo "Previous tag: ${PREVIOUS_TAG}"
129+
130+
if [ -z "$PREVIOUS_TAG" ]; then
131+
COMMIT_RANGE="HEAD"
132+
else
133+
COMMIT_RANGE="${PREVIOUS_TAG}..${CURRENT_TAG}"
134+
fi
135+
136+
CHANGELOG=$(git log --pretty=format:"* %s (%h)" $COMMIT_RANGE --reverse | grep -iE "admin-relayer|admin relayer" || true)
137+
138+
echo "changelog<<EOF" >> $GITHUB_OUTPUT
139+
echo "## What's Changed" >> $GITHUB_OUTPUT
140+
echo "" >> $GITHUB_OUTPUT
141+
echo "$CHANGELOG" >> $GITHUB_OUTPUT
142+
echo "EOF" >> $GITHUB_OUTPUT
143+
144+
- name: Create GitHub Release
145+
uses: actions/create-release@v1
146+
env:
147+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
148+
with:
149+
tag_name: ${{ steps.previous-tag.outputs.current_tag }}
150+
release_name: "Tesseract Admin Relayer ${{ steps.previous-tag.outputs.clean_tag }}"
151+
body: ${{ steps.changelog.outputs.changelog }}
152+
draft: false
153+
prerelease: false

Cargo.lock

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ members = [
125125
"tesseract/consensus/beefy",
126126
"tesseract/consensus/beefy/zk",
127127
"tesseract/consensus/relayer",
128+
"tesseract/consensus/admin-relayer",
128129
"tesseract/consensus/polygon",
129130
"tesseract/consensus/tendermint",
130131
"tesseract/consensus/pharos",
@@ -368,6 +369,7 @@ tesseract-integration-tests = { path = "tesseract/consensus/integration-tests" }
368369
tesseract-sync-committee = { path = "tesseract/consensus/sync-committee" }
369370
tesseract-grandpa = { path = "tesseract/consensus/grandpa" }
370371
tesseract-consensus = { path = "tesseract/consensus/relayer" }
372+
tesseract-admin-relayer = { path = "tesseract/consensus/admin-relayer" }
371373
tesseract-polygon = { path = "tesseract/consensus/polygon" }
372374
tesseract-tendermint = { path = "tesseract/consensus/tendermint" }
373375
tesseract-pharos = { path = "tesseract/consensus/pharos" }
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM docker.io/library/debian:bookworm-slim
2+
3+
RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates
4+
5+
WORKDIR /
6+
7+
COPY ./target/release/tesseract-admin-relayer ./
8+
9+
10+
ENTRYPOINT ["./tesseract-admin-relayer"]
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
[package]
2+
name = "tesseract-admin-relayer"
3+
version = "0.1.0"
4+
edition = "2021"
5+
description = "Admin-driven BEEFY mandatory consensus relayer for EVM chains"
6+
authors = ["Polytope Labs <hello@polytope.technology>"]
7+
8+
[lib]
9+
name = "tesseract_admin_relayer"
10+
path = "src/lib.rs"
11+
12+
[[bin]]
13+
name = "tesseract-admin-relayer"
14+
path = "bins/relayer.rs"
15+
16+
[dependencies]
17+
anyhow = "1.0.93"
18+
async-trait = "0.1.53"
19+
clap = { version = "4.3.5", features = ["derive"] }
20+
codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] }
21+
futures = "0.3.28"
22+
hex = { workspace = true }
23+
log = "0.4.19"
24+
rustls = { version = "0.23.23", features = ["ring"] }
25+
serde = { workspace = true, features = ["derive", "alloc"] }
26+
std_serde_json = { package = "serde_json", version = "1.0" }
27+
tokio = { workspace = true, features = ["full"] }
28+
toml = "0.7.4"
29+
tracing = { workspace = true }
30+
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
31+
primitive-types = { workspace = true }
32+
alloy = { workspace = true, features = ["provider-http", "rpc-types", "contract", "signer-local", "network", "providers", "transports", "reqwest", "provider-debug-api", "reqwest-default-tls"] }
33+
alloy-primitives = { workspace = true, default-features = true }
34+
alloy-sol-types = { workspace = true, default-features = true }
35+
36+
# ismp
37+
ismp = { workspace = true }
38+
ismp-solidity-abi = { workspace = true, default-features = true }
39+
beefy-verifier-primitives = { workspace = true }
40+
41+
# tesseract
42+
tesseract-beefy = { workspace = true }
43+
tesseract-evm = { workspace = true }
44+
tesseract-primitives = { workspace = true }
45+
46+
[dependencies.polkadot-sdk]
47+
workspace = true
48+
features = ["sp-runtime", "sc-service"]

0 commit comments

Comments
 (0)