From 21ea84a7476d9e6c11ff7e6f628f41a216543a0b Mon Sep 17 00:00:00 2001 From: Valentyn Faychuk Date: Sun, 6 Oct 2024 19:23:54 +0300 Subject: [PATCH] refactoring --- rewrite/.gitignore | 4 + .../{scripts => docker}/challenge.Dockerfile | 0 .../{scripts => docker}/challenge.qcnl.conf | 0 rewrite/{scripts => docker}/challenge.sh | 0 {mint_sol => rewrite/mint_sol}/Cargo.lock | 0 {mint_sol => rewrite/mint_sol}/Cargo.toml | 0 {mint_sol => rewrite/mint_sol}/src/main.rs | 0 rewrite/scripts/package.sh | 30 ++++- rewrite/scripts/testnet.sh | 112 ++++++++++++------ 9 files changed, 109 insertions(+), 37 deletions(-) create mode 100644 rewrite/.gitignore rename rewrite/{scripts => docker}/challenge.Dockerfile (100%) rename rewrite/{scripts => docker}/challenge.qcnl.conf (100%) rename rewrite/{scripts => docker}/challenge.sh (100%) rename {mint_sol => rewrite/mint_sol}/Cargo.lock (100%) rename {mint_sol => rewrite/mint_sol}/Cargo.toml (100%) rename {mint_sol => rewrite/mint_sol}/src/main.rs (100%) diff --git a/rewrite/.gitignore b/rewrite/.gitignore new file mode 100644 index 0000000..bc443d8 --- /dev/null +++ b/rewrite/.gitignore @@ -0,0 +1,4 @@ +# Occlum building env +challenge_instance +# The challenge bundle +docker/challenge.tar.gz \ No newline at end of file diff --git a/rewrite/scripts/challenge.Dockerfile b/rewrite/docker/challenge.Dockerfile similarity index 100% rename from rewrite/scripts/challenge.Dockerfile rename to rewrite/docker/challenge.Dockerfile diff --git a/rewrite/scripts/challenge.qcnl.conf b/rewrite/docker/challenge.qcnl.conf similarity index 100% rename from rewrite/scripts/challenge.qcnl.conf rename to rewrite/docker/challenge.qcnl.conf diff --git a/rewrite/scripts/challenge.sh b/rewrite/docker/challenge.sh similarity index 100% rename from rewrite/scripts/challenge.sh rename to rewrite/docker/challenge.sh diff --git a/mint_sol/Cargo.lock b/rewrite/mint_sol/Cargo.lock similarity index 100% rename from mint_sol/Cargo.lock rename to rewrite/mint_sol/Cargo.lock diff --git a/mint_sol/Cargo.toml b/rewrite/mint_sol/Cargo.toml similarity index 100% rename from mint_sol/Cargo.toml rename to rewrite/mint_sol/Cargo.toml diff --git a/mint_sol/src/main.rs b/rewrite/mint_sol/src/main.rs similarity index 100% rename from mint_sol/src/main.rs rename to rewrite/mint_sol/src/main.rs diff --git a/rewrite/scripts/package.sh b/rewrite/scripts/package.sh index 8a4b3b8..8d9f752 100755 --- a/rewrite/scripts/package.sh +++ b/rewrite/scripts/package.sh @@ -1,9 +1,36 @@ #!/bin/bash + set -e script_dir=$(dirname "$0") -cd "${script_dir}/.." +cd "$script_dir/.." +prerequisites=$1 +if [ "$prerequisites" == "--prep" ]; then + echo "Preparing the packager environment" + apt update && apt install openssh-client + rustup install stable-x86_64-unknown-linux-gnu + rustup default stable + rustup target add x86_64-unknown-linux-musl + mkdir -p /root/.ssh + + echo "docker cp ~/.ssh/config packager:/root/.ssh/config" + echo "docker cp ~/.ssh/gitea_ed25519 packager:/root/.ssh/gitea_ed25519" + echo "Run above commands in another terminal" + while true; do + echo -n "." && sleep 1 + if [ -e ~/.ssh/config ] && [ -e ~/.ssh/gitea_ed25519 ]; then + echo -n "done" + break + fi + done + + chown -R root:root /root/.ssh + chmod 600 /root/.ssh/gitea_ed25519 + ssh-keyscan -H gitea.detee.cloud > ~/.ssh/known_hosts +fi + +echo "Building the hacker-challenge signed bundle" occlum-cargo build --release strip target/x86_64-unknown-linux-musl/release/hacker-challenge @@ -29,4 +56,3 @@ copy_bom -f ../challenge.yaml --root image --include-dir /opt/occlum/etc/templat # TODO: make sure the bundle needs SGX2 to run since SGX1 is vulnerable to https://x.com/PratyushRT/status/1828183761055330373 occlum build --sign-key ../scripts/signing_key.pem occlum package challenge.tar.gz -mv challenge.tar.gz ../scripts/challenge.tar.gz diff --git a/rewrite/scripts/testnet.sh b/rewrite/scripts/testnet.sh index 4485d57..cd01f0c 100755 --- a/rewrite/scripts/testnet.sh +++ b/rewrite/scripts/testnet.sh @@ -1,51 +1,93 @@ #!/bin/bash set -e -# WARNING: Build and package the hacker-challenge first, see README.md -# TODO: check if scripts/challenge.tar.gz exists, if not tell to build first - script_dir=$(dirname "$0") -cd "${script_dir}/.." +cd "${script_dir}/.." # Go to the root of the project -rm -rf build && mkdir build +function build_mint_sol_tool() { + echo "Building the mint_sol tool for testing" -cp scripts/challenge.* build/ && cd build -docker build -f challenge.Dockerfile -t hacker-challenge:latest . + if ! command -v cargo 2>&1 >/dev/null + then + echo "cargo not found, run 'curl https://sh.rustup.rs -sSf | sh'" + exit 1 + fi + if ! command -v gcc 2>&1 >/dev/null + then + echo "cc not found, run 'apt update && apt install build-essential'" + exit 1 + fi + + if ! command -v protoc 2>&1 >/dev/null + then + echo "protoc not found, run 'apt update && apt install protobuf-compiler'" + exit 1 + fi + + cd mint_sol + cargo build --release + cp target/release/mint_sol "../${script_dir}/mint_sol" + cd .. +} + +function build_challenge_image() { + echo "Building the hacker-challenge docker image" + + if ! command -v docker 2>&1 >/dev/null + then + echo "docker not found, please install docker" + exit 1 + fi + + if [ ! -e challenge_instance/challenge.tar.gz ]; then + echo "Please build the challenge first, see README.md" + exit 1 + fi + + cd docker + cp ../challenge_instance/challenge.tar.gz challenge.tar.gz + docker build -f challenge.Dockerfile -t hacker-challenge:latest . + cd .. +} + +build_challenge_image +build_mint_sol_tool + +# Cleanup old containers and run the network root docker ps -a | grep 'hacker-challenge' | awk '{ print $NF }' | xargs docker rm -f || true -docker run --device /dev/sgx/enclave --device /dev/sgx/provision -d --name "hacker-challenge_0" \ - hacker-challenge:latest - -cd "../${script_dir}/../../mint_sol" -# TODO: build the mint_sol as part of the build process -cargo build --release - -sleep 3 - -address=$(docker logs hacker-challenge_0 | grep 'SOL' | awk '{ print $NF }') - -echo "sending SOL to wallet" - -./target/release/mint_sol $address - +echo "Waiting for the network root to start" +docker run --device /dev/sgx/enclave \ + --device /dev/sgx/provision \ + --name "hacker-challenge" \ + -d hacker-challenge:latest while true; do - echo "Waiting for mint to be created..." - sleep 5 - docker logs hacker-challenge_0 | grep "Mint created" && break + echo -n "." && sleep 1 + docker logs hacker-challenge | grep "SOL" && break done -# for i in {1..10} -for i in {11..20} -do - docker run --device /dev/sgx/enclave --device /dev/sgx/provision -d --name "hacker-challenge_$i" -p 313${i}:31372 \ - --env INIT_NODES="172.17.0.2 172.17.0.3 172.17.0.4" \ - hacker-challenge:latest +echo "Sending SOL to the root and waiting for the mint" +address=$(docker logs hacker-challenge | grep 'SOL' | awk '{ print $NF }') +"${script_dir}"/mint_sol "${address}" +while true; do + echo -n "." && sleep 1 + docker logs hacker-challenge | grep "Mint created" && break done -sleep 3 +echo "Creating the cluster" +for p in {31311..31320}; do + echo -n "." + docker run --device /dev/sgx/enclave \ + --device /dev/sgx/provision \ + --env INIT_NODES="172.17.0.2 172.17.0.3 172.17.0.4" \ + --name "hacker-challenge${p}" -p "${p}:31372" \ + -d hacker-challenge:latest +done -for i in {11..20} -do -curl -X POST 127.0.0.1:313${i}/mint --json '{"wallet": "EZT16iP1SQVUFf1AJN6oiE5BZPnyBUqaKDkZ4oZRsvhR"}' +sleep 5 # Wait for the cluster to start + +echo "Running the test mint" +for p in {31311..31320}; do + curl -X POST "127.0.0.1:${p}/mint" --json '{"wallet": "EZT16iP1SQVUFf1AJN6oiE5BZPnyBUqaKDkZ4oZRsvhR"}' done \ No newline at end of file