Add service to manage RLN contract token minting per nwaku service

This commit is contained in:
stubbsta 2025-07-01 09:12:16 +02:00
parent 2aa54603b6
commit c6b201d264
No known key found for this signature in database
3 changed files with 37 additions and 49 deletions

View File

@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash
set -e
@ -55,46 +55,8 @@ 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"
# 6. Contract deployment completed
echo "\nContract deployment completed successfully"
echo "TOKEN_ADDRESS: $TOKEN_ADDRESS"
echo "CONTRACT_ADDRESS: $CONTRACT_ADDRESS"
echo "\nEach account registering a membership needs to first mint the token and approve the contract to spend it on their behalf."

View File

@ -26,6 +26,8 @@ services:
--allow-origin=*
--block-time=12
--chain-id=1234
--gas-limit=30000000
--gas-price=1
--silent
--config-out=/shared/anvil-config.txt
volumes:
@ -45,9 +47,9 @@ services:
- NUM_NWAKU_NODES=${NUM_NWAKU_NODES:-5}
entrypoint: sh
command:
- '/opt/deploy_new_contract.sh'
- '/opt/deploy_rln_contract.sh'
volumes:
- ./deploy_new_contract.sh:/opt/deploy_new_contract.sh
- ./deploy_rln_contract.sh:/opt/deploy_rln_contract.sh
- privatekeys-volume:/shared
depends_on:
- foundry
@ -88,11 +90,36 @@ services:
- RLN_CREDENTIAL_PASSWORD=passw123
- RLN_RELAY_MSG_LIMIT=${RLN_RELAY_MSG_LIMIT:-100}
- RLN_RELAY_EPOCH_SEC=${RLN_RELAY_EPOCH_SEC:-600}
- TOKEN_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3
- PRIVATE_KEY=${PRIVATE_KEY}
command:
- '/opt/run_nwaku.sh'
volumes:
- ./run_nwaku.sh:/opt/run_nwaku.sh:Z
- privatekeys-volume:/shared
init: true
depends_on:
contract-repo-deployer:
condition: service_completed_successfully
nwaku-token-init:
condition: service_completed_successfully
networks:
- simulation
nwaku-token-init:
build:
context: ./tools/token-mint-service
dockerfile: Dockerfile
environment:
- RPC_URL=${RPC_URL:-http://foundry:8545}
- TOKEN_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3
- CONTRACT_ADDRESS=0x5FC8d32690cc91D4c39d9d3abcBD16989F875707
- PRIVATE_KEY=${PRIVATE_KEY}
- NUM_NWAKU_NODES=${NUM_NWAKU_NODES:-5}
deploy:
replicas: ${NUM_NWAKU_NODES:-5}
volumes:
- privatekeys-volume:/shared
depends_on:
contract-repo-deployer:
condition: service_completed_successfully

View File

@ -4,7 +4,7 @@ NWAKU_IMAGE=harbor.status.im/wakuorg/nwaku:latest
NUM_NWAKU_NODES=50
# Simulation traffic.
MSG_SIZE_KBYTES=10
TRAFFIC_DELAY_SECONDS=30
TRAFFIC_DELAY_SECONDS=6
# Enable automatic Docker image updates.
WATCHTOWER_ENABLED=true
# Anvil RPC Node external IP and port
@ -12,8 +12,7 @@ RPC_URL=http://foundry:8545
# Contract-deployment
PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
ETH_FROM=0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
MAX_MESSAGE_LIMIT=100
# RLNv2 limits
RLN_RELAY_MSG_LIMIT=100
RLN_RELAY_EPOCH_SEC=600
RLN_CONTRACT_REPO_COMMIT=64df4593c6a14e43b8b0e9b396d2f4772bb08b34
RLN_CONTRACT_REPO_COMMIT=ad0dc9a81d892864ac2576d74e628ce93da592ef