diff --git a/deploy_rln_contract.sh b/deploy_rln_contract.sh index d199af7..894a9e6 100644 --- a/deploy_rln_contract.sh +++ b/deploy_rln_contract.sh @@ -2,7 +2,9 @@ set -e -# 1. Install foundry and pnpm +# 1. Install foundry, pnpm, and required tools +apt update && apt install -y jq + curl -L https://foundry.paradigm.xyz | bash && . /root/.bashrc && foundryup && export PATH=$PATH:$HOME/.foundry/bin echo "installing pnpm..." @@ -21,10 +23,7 @@ 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 +# 3. Compile Contract Repo echo "forge install..." forge install echo "pnpm install..." @@ -32,7 +31,7 @@ pnpm install echo "forge build..." forge build -# 5. Export environment variables +# 4. Export environment variables export RCL_URL=$RCL_URL export PRIVATE_KEY=$PRIVATE_KEY export ETH_FROM=$ETH_FROM @@ -41,5 +40,61 @@ 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 \ No newline at end of file +# 5. Deploy the TestToken +echo "\nDeploying TestToken (ERC20 Token Contract)...\n" +forge script test/TestToken.sol --broadcast -vv --rpc-url http://foundry:8545 --tc TestTokenFactory --private-key $PRIVATE_KEY +export TOKEN_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3 + +echo "\nDeploying LinearPriceCalculator Contract..." +forge script script/Deploy.s.sol --broadcast -vv --rpc-url http://foundry:8545 --tc DeployPriceCalculator --private-key $PRIVATE_KEY + +echo "\nDeploying RLN contract..." +forge script script/Deploy.s.sol --broadcast -vv --rpc-url http://foundry:8545 --tc DeployWakuRlnV2 --private-key $PRIVATE_KEY + +echo "\nDeploying Proxy contract..." +forge script script/Deploy.s.sol --broadcast -vvv --rpc-url http://foundry:8545 --tc DeployProxy --private-key $PRIVATE_KEY +export CONTRACT_ADDRESS=0x5FC8d32690cc91D4c39d9d3abcBD16989F875707 + +# 6. Setup tokens for nwaku nodes +echo "\nSetting up tokens for nwaku nodes..." + +# Read anvil config to get addresses and private keys +ANVIL_CONFIG=$(cat /shared/anvil-config.txt) +ADDRESSES=$(echo "$ANVIL_CONFIG" | jq -r '.available_accounts[]') +echo "Available addresses: $ADDRESSES" +PRIVATE_KEYS=$(echo "$ANVIL_CONFIG" | jq -r '.private_keys[]') + +# Get number of nwaku nodes from environment (default 5) +NUM_NODES=${NUM_NWAKU_NODES:-5} + +echo "Setting up tokens for $NUM_NODES nwaku nodes" + +# Process each account sequentially to ensure reliability +node_index=1 +address_index=1 + +echo "$ADDRESSES" | while read ADDRESS; do + if [ $node_index -le $NUM_NODES ]; then + # Get corresponding private key + PRIV_KEY=$(echo "$PRIVATE_KEYS" | sed -n "${address_index}p") + + echo "Setting up tokens for node $node_index: $ADDRESS" + + # Mint tokens to the address + echo " Minting tokens..." + cast send $TOKEN_ADDRESS "mint(address,uint256)" $ADDRESS 5000000000000000000 --private-key $PRIVATE_KEY --from $ETH_FROM --rpc-url $RPC_URL + + # Approve the RLN contract to spend tokens + echo " Approving contract..." + cast send $TOKEN_ADDRESS "approve(address,uint256)" $CONTRACT_ADDRESS 5000000000000000000 --private-key $PRIV_KEY --from $ADDRESS --rpc-url $RPC_URL + + echo "✓ Node $node_index setup complete" + node_index=$((node_index + 1)) + else + break + fi + + address_index=$((address_index + 1)) +done + +echo "Token setup complete for all nwaku nodes" \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 97040b9..f278514 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -38,16 +38,17 @@ services: labels: com.centurylinklabs.watchtower.enable: '${WATCHTOWER_ENABLED:-false}' environment: - - RLN_CONTRACT_REPO_COMMIT=${RLN_CONTRACT_REPO_COMMIT:-64df4593c6a14e43b8b0e9b396d2f4772bb08b34} + - RLN_CONTRACT_REPO_COMMIT=${RLN_CONTRACT_REPO_COMMIT:-ad0dc9a81d892864ac2576d74e628ce93da592ef} - PRIVATE_KEY=${PRIVATE_KEY} - RPC_URL=${RPC_URL:-http://foundry:8545} - ETH_FROM=${ETH_FROM} - - MAX_MESSAGE_LIMIT=${MAX_MESSAGE_LIMIT:-20} + - NUM_NWAKU_NODES=${NUM_NWAKU_NODES:-5} entrypoint: sh command: - - '/opt/deploy_rln_contract.sh' + - '/opt/deploy_new_contract.sh' volumes: - - ./deploy_rln_contract.sh:/opt/deploy_rln_contract.sh + - ./deploy_new_contract.sh:/opt/deploy_new_contract.sh + - privatekeys-volume:/shared depends_on: - foundry networks: @@ -82,11 +83,11 @@ services: entrypoint: sh environment: - RPC_URL=${RPC_URL:-http://foundry:8545} - - RLN_CONTRACT_ADDRESS=0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9 + - 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} + - RLN_RELAY_MSG_LIMIT=${RLN_RELAY_MSG_LIMIT:-100} + - RLN_RELAY_EPOCH_SEC=${RLN_RELAY_EPOCH_SEC:-600} command: - '/opt/run_nwaku.sh' volumes: