testnet upgrade

Signed-off-by: Valentyn Faychuk <valy@detee.ltd>
This commit is contained in:
Valentyn Faychuk 2024-12-22 20:19:32 +02:00
parent 780c1e54a3
commit 3806f4bcb3
Signed by: valy
GPG Key ID: F1AB995E20FEADC5
6 changed files with 72 additions and 28 deletions

@ -42,3 +42,6 @@ tonic-build = "0.12"
[patch.crates-io.curve25519-dalek] [patch.crates-io.curve25519-dalek]
git = "https://github.com/anza-xyz/curve25519-dalek.git" git = "https://github.com/anza-xyz/curve25519-dalek.git"
rev = "b500cdc2a920cd5bff9e2dd974d7b97349d61464" rev = "b500cdc2a920cd5bff9e2dd974d7b97349d61464"
[features]
test = []

@ -14,7 +14,11 @@ fi
cd docker cd docker
cp ../challenge_instance/challenge.tar.gz challenge.tar.gz cp ../challenge_instance/challenge.tar.gz challenge.tar.gz
docker build -f challenge.Dockerfile -t detee/hacker-challenge:latest . if [ -n "$TEST" ]; then
docker build -f challenge.Dockerfile -t detee/hacker-challenge:test .
else
docker build -f challenge.Dockerfile -t detee/hacker-challenge:latest .
fi
cd .. cd ..
echo "Container named 'hacker-challenge' built" echo "Container named 'hacker-challenge' built"

@ -20,8 +20,13 @@ if [ "$prerequisites" == "--prep" ]; then
(cd occlum/tools/toolchains/utils_lib && ./build.sh) (cd occlum/tools/toolchains/utils_lib && ./build.sh)
fi fi
echo "Building the hacker-challenge signed bundle" if [ -n "$TEST" ]; then
occlum-cargo build --release echo "Building the hacker-challenge with test feature"
occlum-cargo build --release --features test
else
echo "Building the hacker-challenge"
occlum-cargo build --release
fi
strip target/x86_64-unknown-linux-musl/release/hacker-challenge strip target/x86_64-unknown-linux-musl/release/hacker-challenge
sha256sum target/x86_64-unknown-linux-musl/release/hacker-challenge sha256sum target/x86_64-unknown-linux-musl/release/hacker-challenge

@ -31,45 +31,66 @@ function build_mint_sol_tool() {
cd .. cd ..
} }
source "${script_dir}/build-container.sh" function run_node() {
build_mint_sol_tool custom_flags=$1
docker run --network dthc -d "${custom_flags}" \
--device /dev/sgx/provision \
--device /dev/sgx/enclave \
detee/hacker-challenge:latest
}
# Cleanup old containers and run the network root TEST=1 ./${script_dir}/build-container.sh
docker ps -a | grep 'hacker-challenge' | awk '{ print $NF }' | xargs docker rm -f || true [ -e "${script_dir}/mint_sol" ] || build_mint_sol_tool
echo "Waiting for the network root to start" # Cleanup old containers and the network
docker run --device /dev/sgx/enclave \ echo "Creating the network and the root node"
--device /dev/sgx/provision \ docker ps -a | grep 'dthc' | awk '{ print $NF }' | xargs docker rm -f || true
--name "hacker-challenge" \ docker network inspect dthc > /dev/null 2>&1 \
-d detee/hacker-challenge:latest || docker network create --subnet=172.18.0.0/24 dthc \
|| true
# 172.18.0.1 is for the network gateway
root_ip="172.18.0.2"
echo "Waiting for the root node to start"
run_node "--name dthc-root --ip ${root_ip} \
--env NODE_IP='${root_ip}'"
while true; do while true; do
echo -n "." && sleep 1 echo -n "." && sleep 1
docker logs hacker-challenge | grep -q "SOL" && echo && break docker logs dthc-root | grep -q "SOL" && echo && break
done done
echo "Sending SOL to the root and waiting for the mint" echo "Sending SOL to the root and waiting for the mint"
address=$(docker logs hacker-challenge | grep 'SOL' | awk '{ print $NF }') address=$(docker logs dthc-root | grep 'SOL' | awk '{ print $NF }')
"${script_dir}"/mint_sol "${address}" "${script_dir}"/mint_sol "${address}"
while true; do while true; do
echo -n "." && sleep 1 echo -n "." && sleep 1
docker logs hacker-challenge | grep -q "Mint created" && echo && break docker logs dthc-root | grep -q "Mint created" && echo && break
done done
echo "Creating the cluster" echo "Creating the cluster"
for p in {31311..31320}; do for n in {2..20}; do
docker run --device /dev/sgx/enclave \ #init_nodes=$(docker inspect dthc-root --format '{{ .NetworkSettings.Networks.dthc.IPAddress }}')
--device /dev/sgx/provision \ node_ip="172.18.0.${n}"
--env INIT_NODES="172.17.0.2 172.17.0.3 172.17.0.4" \ node_port=$((31300 + n))
-v "/tmp/hacker-challenge${p}:/challenge/main" \ node_volume="/tmp/dthc${node_port}"
--name "hacker-challenge${p}" -p "${p}:31372" \
-d detee/hacker-challenge:latest run_node "--name dthc-${n} --ip ${node_ip} \
--env NODE_IP='${node_ip}' \
--env INIT_NODES='${root_ip}' \
-v ${node_volume}:/challenge/main \
-p ${node_port}:31372"
done done
sleep 15 # Wait for the cluster to start sleep 15 # Wait for the cluster to start
echo "Running the test mint" echo "Running the test mint"
for p in {31311..31320}; do for n in {2..20}; do
curl -X POST "127.0.0.1:${p}/mint" \ node_port=$((31300 + n))
curl -X POST "127.0.0.1:${node_port}/mint" \
--json '{"wallet": "EZT16iP1SQVUFf1AJN6oiE5BZPnyBUqaKDkZ4oZRsvhR"}' \ --json '{"wallet": "EZT16iP1SQVUFf1AJN6oiE5BZPnyBUqaKDkZ4oZRsvhR"}' \
--connect-timeout 5 2> /dev/null --connect-timeout 5 2> /dev/null
echo "" echo ""
done done
# curl <ip>/metrics
# curl -X POST <ip>/mint -d '{"wallet": "EZT16iP1SQVUFf1AJN6oiE5BZPnyBUqaKDkZ4oZRsvhR"}' -H 'Content-Type: application/json'

@ -26,7 +26,7 @@ pub struct NodeInfo {
impl NodeInfo { impl NodeInfo {
pub fn is_newer_than(&self, older_self: &Self) -> bool { pub fn is_newer_than(&self, older_self: &Self) -> bool {
self.keepalive >= older_self.keepalive self.keepalive > older_self.keepalive
} }
pub fn to_json(&self) -> String { pub fn to_json(&self) -> String {

@ -12,8 +12,8 @@ use datastore::State;
use detee_sgx::{InstanceMeasurement, RaTlsConfig}; use detee_sgx::{InstanceMeasurement, RaTlsConfig};
use std::{ use std::{
fs::File, fs::File,
io::Error,
io::{BufRead, BufReader}, io::{BufRead, BufReader},
io::{Error, ErrorKind},
sync::Arc, sync::Arc,
}; };
use tokio::{ use tokio::{
@ -26,9 +26,19 @@ const INIT_NODES_FILE: &str = "/host/detee_challenge_nodes";
const KEYS_FILE: &str = "/host/main/TRY_TO_HACK_THIS"; const KEYS_FILE: &str = "/host/main/TRY_TO_HACK_THIS";
const MAX_CONNECTIONS: usize = 3; const MAX_CONNECTIONS: usize = 3;
#[cfg(feature = "test")]
async fn resolve_my_ip() -> Result<String, Error> {
let node_ip = File::open("/host/detee_node_ip")?;
let mut reader = BufReader::new(node_ip);
let mut ip = String::new();
reader.read_line(&mut ip)?;
Ok(ip)
}
#[cfg(not(feature = "test"))]
async fn resolve_my_ip() -> Result<String, Error> { async fn resolve_my_ip() -> Result<String, Error> {
let err = "Can't resolve my external IP, try again"; let err = "Can't resolve my external IP, try again";
let ip = public_ip::addr_v4().await.ok_or(Error::new(ErrorKind::Other, err))?; let ip = public_ip::addr_v4().await.ok_or(Error::new(std::io::ErrorKind::Other, err))?;
Ok(format!("{}", ip)) Ok(format!("{}", ip))
} }
@ -108,8 +118,9 @@ async fn main() {
env_logger::init_from_env(env_logger::Env::default().default_filter_or("warn")); env_logger::init_from_env(env_logger::Env::default().default_filter_or("warn"));
let ratls_config = RaTlsConfig::new() let ratls_config = RaTlsConfig::new()
.allow_instance_measurement(InstanceMeasurement::new().with_current_mrenclave().unwrap()); .allow_instance_measurement(InstanceMeasurement::new().with_current_mrenclave().unwrap());
let my_ip = resolve_my_ip().await.unwrap(); let my_ip = resolve_my_ip().await.unwrap();
println!("Starting on IP {}", my_ip);
let state = Arc::new(State::new(my_ip.clone())); let state = Arc::new(State::new(my_ip.clone()));
let sol_client = Arc::new(get_sol_client(state.clone(), ratls_config.clone()).await); let sol_client = Arc::new(get_sol_client(state.clone(), ratls_config.clone()).await);