-
Notifications
You must be signed in to change notification settings - Fork 286
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: make a txsim binary build from Makefile and dockerfile (#2052)
[ReadMe for TL;DR](https://github.com/celestiaorg/celestia-app/blob/f1d9c1c52b7ccf16f999a9d87aacba9ff2fbbe06/docker/README.md) Closes celestiaorg/devops#249 --------- Co-authored-by: Jose Ramon Mañes <[email protected]> Co-authored-by: Rootul P <[email protected]>
- Loading branch information
1 parent
39b81f5
commit 7494cc7
Showing
5 changed files
with
297 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -20,3 +20,11 @@ jobs: | |
uses: celestiaorg/.github/.github/workflows/[email protected] # yamllint disable-line rule:line-length | ||
with: | ||
dockerfile: Dockerfile | ||
|
||
docker-txsim-build: | ||
permissions: | ||
contents: write | ||
packages: write | ||
uses: celestiaorg/.github/.github/workflows/[email protected] | ||
with: | ||
dockerfile: docker/Dockerfile_txsim |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# Stage 1: generate celestia-appd binary | ||
FROM docker.io/golang:1.20.6-alpine3.17 as builder | ||
# hadolint ignore=DL3018 | ||
RUN apk update && apk add --no-cache \ | ||
gcc \ | ||
git \ | ||
make \ | ||
musl-dev | ||
COPY . /celestia-app | ||
WORKDIR /celestia-app | ||
# we need the celestia-appd build as we might want to create an account | ||
# internally for txsimulation | ||
RUN make build && make txsim-build | ||
|
||
# Stage 2: create a minimal image with the binary | ||
FROM docker.io/alpine:3.18.2 | ||
|
||
# Use UID 10,001 because UIDs below 10,000 are a security risk. | ||
# Ref: https://github.com/hexops/dockerfile/blob/main/README.md#do-not-use-a-uid-below-10000 | ||
ARG UID=10001 | ||
ARG USER_NAME=celestia | ||
|
||
ENV CELESTIA_HOME=/home/${USER_NAME} | ||
|
||
# hadolint ignore=DL3018 | ||
RUN apk update && apk add --no-cache \ | ||
bash \ | ||
curl \ | ||
jq \ | ||
# Creates a user with $UID and $GID=$UID | ||
&& adduser ${USER_NAME} \ | ||
-D \ | ||
-g ${USER_NAME} \ | ||
-h ${CELESTIA_HOME} \ | ||
-s /sbin/nologin \ | ||
-u ${UID} | ||
|
||
# Copy in the celestia-appd binary | ||
COPY --from=builder /celestia-app/build/celestia-appd /bin/celestia-appd | ||
COPY --from=builder /celestia-app/build/txsim /bin/txsim | ||
|
||
COPY --chown=${USER_NAME}:${USER_NAME} docker/txsim.sh /opt/entrypoint.sh | ||
|
||
USER ${USER_NAME} | ||
|
||
# grpc, rpc, api ports | ||
EXPOSE 26657 1317 9090 | ||
|
||
ENTRYPOINT [ "/bin/bash", "/opt/entrypoint.sh" ] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
# Celestia `txsim` Docker Image Usage Guide | ||
|
||
The `txsim` binary is a tool that can be used to simulate transactions on the Celestia network. It can be used to test the performance of the Celestia network. | ||
This guide provides instructions on how to use the Celestia `txsim` Docker image. The `txsim` Docker image is designed to run the `txsim` binary with a variety of configurable options. | ||
|
||
## Table of Contents | ||
|
||
1. [Prerequisites](#prerequisites) | ||
2. [Running the Docker Image](#running-the-docker-image) | ||
- [Docker Run](#docker-run) | ||
- [Docker Compose](#docker-compose) | ||
- [Kubernetes Deployment](#kubernetes-deployment) | ||
3. [Flag Breakdown](#flag-breakdown) | ||
|
||
## Prerequisites | ||
|
||
Before you can use the `txsim` Docker image, you must have a prefunded account set up. The `txsim` binary requires a prefunded account to function correctly. The keyring for this account should be stored in a file that can be accessed by the Docker container. | ||
|
||
## Running the Docker Image | ||
|
||
### Docker Run | ||
|
||
You can run the `txsim` Docker image using the `docker run` command. Here's an example: | ||
|
||
```bash | ||
docker run -it -v ${HOME}/.celestia-app:/home/celestia ghcr.io/celestiaorg/txsim -k 0 -r http://consensus-validator-robusta-rc6.celestia-robusta.com:26657,http://consensus-full-robusta-rc6.celestia-robusta.com:26657 -g consensus-validator-robusta-rc6.celestia-robusta.com:9090 -t 10s -b 10 -d 100 -e 10 | ||
``` | ||
|
||
In this command, the `-v` option is used to mount the `${HOME}/.celestia-app` directory from the host to the `/home/celestia` directory in the Docker container. This allows the `txsim` binary to access the keyring for the prefunded account. | ||
|
||
### Docker Compose | ||
|
||
You can also run the `txsim` Docker image using Docker Compose. Here's an example `docker-compose.yml` file: | ||
|
||
```yaml | ||
version: '3' | ||
services: | ||
txsim: | ||
image: ghcr.io/celestiaorg/txsim | ||
command: > | ||
-k 0 | ||
-r http://consensus-validator-robusta-rc6.celestia-robusta.com:26657,http://consensus-full-robusta-rc6.celestia-robusta.com:26657 | ||
-g consensus-validator-robusta-rc6.celestia-robusta.com:9090 | ||
-t 10s | ||
-b 10 | ||
-d 100 | ||
-e 10 | ||
volumes: | ||
- /Users/txsimp/.celestia-app:/home/celestia | ||
``` | ||
In this file, the `volumes` key is used to mount the `/Users/txsimp/.celestia-app` directory from the host to the `/home/celestia` directory in the Docker container. | ||
|
||
### Kubernetes Deployment | ||
|
||
Finally, you can run the `txsim` Docker image in a Kubernetes cluster. Here's an example `deployment.yaml` file: | ||
|
||
```yaml | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
name: txsim-deployment | ||
spec: | ||
replicas: 1 | ||
selector: | ||
matchLabels: | ||
app: txsim | ||
template: | ||
metadata: | ||
labels: | ||
app: txsim | ||
spec: | ||
containers: | ||
- name: txsim | ||
image: ghcr.io/celestiaorg/txsim | ||
args: | ||
- "-k" | ||
- "0" | ||
- "-r" | ||
- "http://consensus-validator-robusta-rc6.celestia-robusta.com:26657,http://consensus-full-robusta-rc6.celestia-robusta.com:26657" | ||
- "-g" | ||
- "consensus-validator-robusta-rc6.celestia-robusta.com:9090" | ||
- "-t" | ||
- "10s" | ||
- "-b" | ||
- "10" | ||
- "-d" | ||
- "100" | ||
- "-e" | ||
- "10" | ||
volumeMounts: | ||
- name: keyring-volume | ||
mountPath: /home/celestia | ||
volumes: | ||
- name: keyring-volume | ||
hostPath: | ||
path: /Users/txsimp/.celestia-app | ||
``` | ||
|
||
In this file, the `volumeMounts` and `volumes` keys are used to mount the `/Users/txsimp/.celestia-app` directory from the host to the `/home/celestia` directory in the Docker container. | ||
|
||
## Flag Breakdown | ||
|
||
Here's a breakdown of what each flag means: | ||
|
||
- `-k`: Whether a new key should be created (1 for yes, 0 for no) | ||
- `-p`: The path to the keyring for the prefunded account | ||
- `-r`: The RPC endpoints for the `txsim` binary | ||
- `-g`: The gRPC endpoints for the `txsim` binary | ||
- `-t`: The poll time for the `txsim` binary | ||
- `-b`: The number of blob sequences to run | ||
- `-a`: The range of blobs to send per PFB in a sequence | ||
- `-s`: The range of blob sizes to send | ||
- `-m`: The mnemonic for the keyring | ||
- `-d`: The seed for the random number generator | ||
- `-e`: The number of send sequences to run | ||
- `-i`: The amount to send from one account to another | ||
- `-v`: The number of send iterations to run per sequence | ||
- `-u`: The number of stake sequences to run | ||
- `-w`: The amount of initial stake per sequence | ||
|
||
Please replace the placeholders in the examples with the actual values you want to use. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
#!/bin/bash | ||
|
||
CREATE_KEY=0 | ||
KEY_PATH="/home/celestia" | ||
RPC_ENDPOINTS="" | ||
GRPC_ENDPOINTS="" | ||
POLL_TIME="" | ||
BLOB=0 | ||
BLOB_AMOUNTS="1" | ||
BLOB_SIZES="100-1000" | ||
KEY_MNEMONIC="" | ||
SEED=0 | ||
SEND=0 | ||
SEND_AMOUNT=1000 | ||
SEND_ITERATIONS=1000 | ||
STAKE=0 | ||
STAKE_VALUE=1000 | ||
|
||
while getopts "k:p:r:g:t:b:a:s:m:d:e:i:v:u:w:" opt; do | ||
case ${opt} in | ||
k ) | ||
CREATE_KEY=$OPTARG | ||
;; | ||
p ) | ||
KEY_PATH=$OPTARG | ||
;; | ||
r ) | ||
RPC_ENDPOINTS=$OPTARG | ||
;; | ||
g ) | ||
GRPC_ENDPOINTS=$OPTARG | ||
;; | ||
t ) | ||
POLL_TIME=$OPTARG | ||
;; | ||
b ) | ||
BLOB=$OPTARG | ||
;; | ||
a ) | ||
BLOB_AMOUNTS=$OPTARG | ||
;; | ||
s ) | ||
BLOB_SIZES=$OPTARG | ||
;; | ||
m ) | ||
KEY_MNEMONIC=$OPTARG | ||
;; | ||
d ) | ||
SEED=$OPTARG | ||
;; | ||
e ) | ||
SEND=$OPTARG | ||
;; | ||
i ) | ||
SEND_AMOUNT=$OPTARG | ||
;; | ||
v ) | ||
SEND_ITERATIONS=$OPTARG | ||
;; | ||
u ) | ||
STAKE=$OPTARG | ||
;; | ||
w ) | ||
STAKE_VALUE=$OPTARG | ||
;; | ||
\? ) | ||
echo "Invalid option: $OPTARG" 1>&2 | ||
exit 1 | ||
;; | ||
: ) | ||
echo "Invalid option: $OPTARG requires an argument" 1>&2 | ||
exit 1 | ||
;; | ||
esac | ||
done | ||
shift $((OPTIND -1)) | ||
|
||
if [ "$CREATE_KEY" -eq 1 ]; then | ||
echo "Creating a new keyring-test for the txsim" | ||
/bin/celestia-appd keys add sim --keyring-backend test --home $KEY_PATH | ||
sleep 5 | ||
fi | ||
|
||
# Running a tx simulator | ||
txsim --key-path $KEY_PATH \ | ||
--rpc-endpoints $RPC_ENDPOINTS \ | ||
--grpc-endpoints $GRPC_ENDPOINTS \ | ||
--poll-time $POLL_TIME \ | ||
--blob $BLOB \ | ||
--blob-amounts $BLOB_AMOUNTS \ | ||
--blob-sizes $BLOB_SIZES \ | ||
--key-mnemonic "$KEY_MNEMONIC" \ | ||
--seed $SEED \ | ||
--send $SEND \ | ||
--send-amount $SEND_AMOUNT \ | ||
--send-iterations $SEND_ITERATIONS \ | ||
--stake $STAKE \ | ||
--stake-value $STAKE_VALUE |