From 7f9e8dd0c4af1e8b227d17b77d09511ea0e029d2 Mon Sep 17 00:00:00 2001 From: stubbsta Date: Tue, 15 Apr 2025 12:38:06 +0200 Subject: [PATCH] working local merkle tree with new contract --- deploy_current_contract.sh | 46 ++++++++++++++++++++++ deploy_rln_contract.sh | 42 ++++++++++---------- docker-compose.yml | 79 ++++++++++++++++++++------------------ run_bootstrap.sh | 15 ++++++-- run_nwaku.sh | 38 ++++++++++-------- 5 files changed, 143 insertions(+), 77 deletions(-) create mode 100644 deploy_current_contract.sh diff --git a/deploy_current_contract.sh b/deploy_current_contract.sh new file mode 100644 index 0000000..288aa0c --- /dev/null +++ b/deploy_current_contract.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +set -e + +# 1. Install foundry and pnpm +# curl -L https://foundry.paradigm.xyz | bash && . /root/.bashrc && foundryup && +export PATH=$PATH:$HOME/.foundry/bin +export RLN_CONTRACT_REPO_COMMIT=64df4593c6a14e43b8b0e9b396d2f4772bb08b34 +echo "installing pnpm..." +npm install -g pnpm + +# 2. Clone and build the repository +if [ ! -d "waku-rlnv2-contract" ]; then + git clone https://github.com/waku-org/waku-rlnv2-contract.git +fi + +if [ -z "$RLN_CONTRACT_REPO_COMMIT" ]; then + echo "RLN_CONTRACT_REPO_COMMIT is not set" + exit 1 +fi + +cd /waku-rlnv2-contract +git checkout $RLN_CONTRACT_REPO_COMMIT + +#3. Replace the hardcoded MAX_MESSAGE_LIMIT +sed -i "s/\b100\b/${MAX_MESSAGE_LIMIT}/g" script/Deploy.s.sol + +# 4. Compile +echo "forge install..." +forge install +echo "pnpm install..." +pnpm install +echo "forge build..." +forge build + +# 5. Export environment variables +export RCL_URL=https://sepolia.infura.io/v3/25ec875c07fe43f7b246d633ea76263c +export PRIVATE_KEY=7eef3db90edfb2cd6d733587317fb14521d7ef10391362639f5fb081046966f4 +export ETH_FROM=0x0BFb9Db85a8b6eF81490B3Ad8f6f914570141a49 +# Dummy values +export API_KEY_ETHERSCAN=123 +export API_KEY_CARDONA=123 +export API_KEY_LINEASCAN=123 + +# 6. Deploy the contract +forge script script/Deploy.s.sol:Deploy --rpc-url $RPC_URL --broadcast -vv --private-key $PRIVATE_KEY --sender $ETH_FROM diff --git a/deploy_rln_contract.sh b/deploy_rln_contract.sh index 6fb0a8e..bb1631a 100644 --- a/deploy_rln_contract.sh +++ b/deploy_rln_contract.sh @@ -57,38 +57,38 @@ CONTRACT_ADDRESS=0x5FC8d32690cc91D4c39d9d3abcBD16989F875707 # forge script test/TestToken.sol --broadcast -vvvv --rpc-url http://foundry:8545 --tc TestTokenFactory --private-key 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d # export TOKEN2=0x0165878A594ca255338adfa4d48449f69242Eb8F echo "Minting...1" - cast send $TOKEN_ADDRESS "mint(address,uint256)" $ETH_FROM 90000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL - cast send $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 3000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL + cast send $TOKEN_ADDRESS "mint(address,uint256)" $ETH_FROM 900000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL + cast send $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 30000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL echo "Transfer tokens from account1 to others..." # account1 transfers tokens to account2 - # cast send $TOKEN_ADDRESS "transfer(address,uint256)" 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 3000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL - # cast send $TOKEN_ADDRESS "transfer(address,uint256)" 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC 3000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL - # cast send $TOKEN_ADDRESS "transfer(address,uint256)" 0x90F79bf6EB2c4f870365E785982E1f101E93b906 1100000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL - # cast send $TOKEN_ADDRESS "transfer(address,uint256)" 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 1000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL + cast send $TOKEN_ADDRESS "transfer(address,uint256)" 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 30000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL + cast send $TOKEN_ADDRESS "transfer(address,uint256)" 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC 10000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL + cast send $TOKEN_ADDRESS "transfer(address,uint256)" 0x90F79bf6EB2c4f870365E785982E1f101E93b906 10000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL + cast send $TOKEN_ADDRESS "transfer(address,uint256)" 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 10000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL echo "Minting..2" # account2 approves the smart contract - # cast send --from 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 3000000000000000000 --private-key 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d --rpc-url $RPC_URL -# echo "Allowance:" -# cast call $TOKEN_ADDRESS "allowance(address,address)" 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 $CONTRACT_ADDRESS --rpc-url $RPC_URL --private-key $PRIVATE_KEY + cast send --from 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 30000000000000000000 --private-key 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d --rpc-url $RPC_URL +echo "Allowance:" + cast call $TOKEN_ADDRESS "allowance(address,address)" 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 $CONTRACT_ADDRESS --rpc-url $RPC_URL --private-key $PRIVATE_KEY - export ID_COMMITMENT=1234 - export RATE_LIMIT=20 - export PATH=$PATH:$HOME/.foundry/bin - echo "REGISTERING" - # TX_HASH=$(cast send $CONTRACT_ADDRESS "register(uint256,uint32,uint256[])" $ID_COMMITMENT $RATE_LIMIT "[]" --rpc-url $RPC_URL --private-key $private_key) + # export ID_COMMITMENT=1234 + # export RATE_LIMIT=20 + # export PATH=$PATH:$HOME/.foundry/bin + # echo "REGISTERING" + # TX_HASH=$(cast send $CONTRACT_ADDRESS "register(uint256,uint32,uint256[])" $ID_COMMITMENT $RATE_LIMIT "[]" --rpc-url $RPC_URL --private-key $PRIVATE_KEY) # echo "Transaction hash: $TX_HASH" -# echo "Minting..3" -# cast send --from 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 2000000000000000000 --private-key 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a --rpc-url $RPC_URL +echo "Minting..3" + cast send --from 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 2000000000000000000 --private-key 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a --rpc-url $RPC_URL # cast call $TOKEN_ADDRESS "allowance(address,address)" 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC $CONTRACT_ADDRESS --rpc-url $RPC_URL --private-key 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a -# # echo "Minting..4" - # cast send --from 0x90F79bf6EB2c4f870365E785982E1f101E93b906 $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 1100000000000000000 --private-key 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6 --rpc-url $RPC_URL - # cast send --from 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 1000000000000000000 --private-key 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a --rpc-url $RPC_URL +echo "Minting..4" + cast send --from 0x90F79bf6EB2c4f870365E785982E1f101E93b906 $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 2000000000000000000 --private-key 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6 --rpc-url $RPC_URL + cast send --from 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 2000000000000000000 --private-key 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a --rpc-url $RPC_URL # cast send $TOKEN_ADDRESS "mint(address,uint256)" 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 3000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL # cast send $TOKEN_ADDRESS "approve(address,uint256)" 0x70997970c51812dc3a010c7d01b50e0d17dc79c8 3000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL -# cast send $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 3000000000000000000 --private-key 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d --rpc-url $RPC_URL - + # cast send $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 3000000000000000000 --private-key 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d --rpc-url $RPC_URL +# "private_keys":["0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80","0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d","0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a","0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6","0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a","0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba", # echo "Minting...3" # cast send $TOKEN_ADDRESS "mint(address,uint256)" 0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc 3000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL # cast send $TOKEN_ADDRESS "approve(address,uint256)" 0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc 3000000000000000000 --private-key $PRIVATE_KEY --rpc-url $RPC_URL diff --git a/docker-compose.yml b/docker-compose.yml index a6ac15a..3ac586b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -44,7 +44,8 @@ services: - ETH_FROM=${ETH_FROM} - MAX_MESSAGE_LIMIT=${MAX_MESSAGE_LIMIT:-20} entrypoint: sh - tty: true + command: + - '/opt/deploy_rln_contract.sh' volumes: - ./deploy_rln_contract.sh:/opt/deploy_rln_contract.sh depends_on: @@ -53,7 +54,7 @@ services: - simulation bootstrap: - image: ${NWAKU_IMAGE:-wakuorg/nwaku:latest} + image: ubuntu:24.04 restart: on-failure labels: com.centurylinklabs.watchtower.enable: '${WATCHTOWER_ENABLED:-false}' @@ -67,46 +68,50 @@ services: command: - '/opt/run_bootstrap.sh' volumes: + - /home/stubbsta/work-repos/nwaku_jswaku_keystore/nwaku/build/wakunode2:/usr/bin/wakunode:Z - ./run_bootstrap.sh:/opt/run_bootstrap.sh:Z + - /home/stubbsta/work-repos/nwaku_jswaku_keystore/nwaku/libnegentropy.so:/usr/bin/libnegentropy.so:Z networks: - simulation - # nwaku: - # image: ${NWAKU_IMAGE:-wakuorg/nwaku:latest} - # restart: on-failure - # labels: - # com.centurylinklabs.watchtower.enable: '${WATCHTOWER_ENABLED:-false}' - # deploy: - # replicas: ${NUM_NWAKU_NODES:-5} - # entrypoint: sh - # environment: - # - RPC_URL=${RPC_URL:-http://foundry:8545} - # - RLN_CONTRACT_ADDRESS=0x5FC8d32690cc91D4c39d9d3abcBD16989F875707 - # - RLN_CREDENTIAL_PATH=/keystore.json - # - RLN_CREDENTIAL_PASSWORD=passw123 - # - RLN_RELAY_MSG_LIMIT=${RLN_RELAY_MSG_LIMIT:-10} - # - RLN_RELAY_EPOCH_SEC=${RLN_RELAY_EPOCH_SEC:-60} - # command: - # - '/opt/run_nwaku.sh' - # volumes: - # - ./run_nwaku.sh:/opt/run_nwaku.sh:Z - # - privatekeys-volume:/shared - # depends_on: - # contract-repo-deployer: - # condition: service_completed_successfully - # networks: - # - simulation + nwaku: + image: ubuntu:24.04 + restart: on-failure + labels: + com.centurylinklabs.watchtower.enable: '${WATCHTOWER_ENABLED:-false}' + deploy: + replicas: ${NUM_NWAKU_NODES:-5} + entrypoint: sh + environment: + - RPC_URL=${RPC_URL:-http://foundry:8545} + - RLN_CONTRACT_ADDRESS=0x5FC8d32690cc91D4c39d9d3abcBD16989F875707 + - RLN_CREDENTIAL_PATH=/keystore.json + - RLN_CREDENTIAL_PASSWORD=passw123 + - RLN_RELAY_MSG_LIMIT=${RLN_RELAY_MSG_LIMIT:-10} + - RLN_RELAY_EPOCH_SEC=${RLN_RELAY_EPOCH_SEC:-60} + command: + - '/opt/run_nwaku.sh' + volumes: + - /home/stubbsta/work-repos/nwaku_jswaku_keystore/nwaku/build/wakunode2:/usr/bin/wakunode:Z + - ./run_nwaku.sh:/opt/run_nwaku.sh:Z + - privatekeys-volume:/shared + - /home/stubbsta/work-repos/nwaku_jswaku_keystore/nwaku/libnegentropy.so:/usr/bin/libnegentropy.so:Z + depends_on: + contract-repo-deployer: + condition: service_completed_successfully + networks: + - simulation - # rest-traffic: - # image: alrevuelta/rest-traffic:28430f8 - # command: - # --multiple-nodes=http://waku-simulator-nwaku-[1..${NUM_NWAKU_NODES:-5}]:8645 - # --msg-size-kbytes=${MSG_SIZE_KBYTES:-10} - # --delay-seconds=${TRAFFIC_DELAY_SECONDS:-15} - # networks: - # - simulation - # depends_on: - # - nwaku + rest-traffic: + image: alrevuelta/rest-traffic:28430f8 + command: + --multiple-nodes=http://waku-simulator-nwaku-[1..${NUM_NWAKU_NODES:-5}]:8645 + --msg-size-kbytes=${MSG_SIZE_KBYTES:-10} + --delay-seconds=${TRAFFIC_DELAY_SECONDS:-15} + networks: + - simulation + depends_on: + - nwaku prometheus: image: prom/prometheus:latest diff --git a/run_bootstrap.sh b/run_bootstrap.sh index 2bd970c..dcf30db 100755 --- a/run_bootstrap.sh +++ b/run_bootstrap.sh @@ -1,9 +1,18 @@ #!/bin/sh -IP=$(ip a | grep "inet " | grep -Fv 127.0.0.1 | sed 's/.*inet \([^/]*\).*/\1/') - echo "I am a bootstrap node" +apt update +apt upgrade +apt -y install wget +apt -y install libpq-dev +apt -y install libpcre3 + +IP=$(ip a | grep "inet " | grep -Fv 127.0.0.1 | sed 's/.*inet \([^/]*\).*/\1/') +MY_EXT_IP=$(wget -qO- https://api4.ipify.org) + +chmod a+x /usr/bin/wakunode + exec /usr/bin/wakunode\ --relay=false\ --rest=true\ @@ -16,5 +25,5 @@ exec /usr/bin/wakunode\ --metrics-server=True\ --metrics-server-address=0.0.0.0\ --nodekey=30348dd51465150e04a5d9d932c72864c8967f806cce60b5d26afeca1e77eb68\ - --nat=extip:${IP}\ + --nat=extip:${MY_EXT_IP}\ --cluster-id=66 \ No newline at end of file diff --git a/run_nwaku.sh b/run_nwaku.sh index ac4b626..558b24a 100755 --- a/run_nwaku.sh +++ b/run_nwaku.sh @@ -1,5 +1,14 @@ #!/bin/sh +apt update +apt upgrade +apt -y install wget +apt -y install libpq-dev +apt -y install libpcre3 +apt -y install dnsutils +apt -y install jq +apt -y install iproute2 + # Check Linux Distro Version - it can differ depending on the nwaku image used OS=$(cat /etc/os-release) if echo $OS | grep -q "Debian"; then @@ -94,25 +103,22 @@ if test -f .$RLN_CREDENTIAL_PATH; then echo "$RLN_CREDENTIAL_PATH already exists. Use it instead of creating a new one." else - # private_key="$(get_private_key)" - # echo "Private key: $private_key" + private_key="$(get_private_key)" + echo "Private key: $private_key" - # echo "Generating RLN keystore" - # /usr/bin/wakunode generateRlnKeystore \ - # --rln-relay-eth-client-address="$RPC_URL" \ - # --rln-relay-eth-private-key=$private_key \ - # --rln-relay-eth-contract-address=$RLN_CONTRACT_ADDRESS \ - # --rln-relay-cred-path=$RLN_CREDENTIAL_PATH \ - # --rln-relay-cred-password=$RLN_CREDENTIAL_PASSWORD \ - # --rln-relay-user-message-limit=$RLN_RELAY_MSG_LIMIT \ - # --rln-relay-epoch-sec=$RLN_RELAY_EPOCH_SEC \ - # --log-level=DEBUG \ - # --execute + echo "Generating RLN keystore" + /usr/bin/wakunode generateRlnKeystore \ + --rln-relay-eth-client-address="$RPC_URL" \ + --rln-relay-eth-private-key=$private_key \ + --rln-relay-eth-contract-address=$RLN_CONTRACT_ADDRESS \ + --rln-relay-cred-path=$RLN_CREDENTIAL_PATH \ + --rln-relay-cred-password=$RLN_CREDENTIAL_PASSWORD \ + --rln-relay-user-message-limit=$RLN_RELAY_MSG_LIMIT \ + --rln-relay-epoch-sec=$RLN_RELAY_EPOCH_SEC \ + --log-level=TRACE \ + --execute fi -echo "File list:" -ls -al - echo "I am a nwaku node" RETRIES=${RETRIES:=10}