2024-10-14 16:17:56 +11:00
|
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
2025-07-18 15:48:35 +05:30
|
|
|
|
echocol()
|
|
|
|
|
|
{
|
|
|
|
|
|
COL='\033[0;32m'
|
|
|
|
|
|
NC='\033[0m'
|
|
|
|
|
|
printf "$COL${1}${NC}\n"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
RLN_CONTRACT_ADDRESS=0xB9cd878C90E49F797B4431fBF4fb333108CB90e6
|
|
|
|
|
|
TOKEN_CONTRACT_ADDRESS=0x185A0015aC462a0aECb81beCc0497b649a64B9ea
|
|
|
|
|
|
REQUIRED_AMOUNT=5
|
|
|
|
|
|
TTT_AMOUNT_WEI=5000000000000000000
|
|
|
|
|
|
|
|
|
|
|
|
mint_tokens() {
|
|
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "Minting TTT tokens ..."
|
|
|
|
|
|
cast send $TOKEN_CONTRACT_ADDRESS "mint(address,uint256)" \
|
|
|
|
|
|
$ETH_TESTNET_ACCOUNT $TTT_AMOUNT_WEI \
|
|
|
|
|
|
--private-key $ETH_TESTNET_KEY \
|
|
|
|
|
|
--rpc-url $RLN_RELAY_ETH_CLIENT_ADDRESS || {
|
|
|
|
|
|
echocol "❌ Mint transaction failed."
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
}
|
|
|
|
|
|
echocol "✅ Mint complete!"
|
|
|
|
|
|
echocol ""
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
approve_tokens() {
|
|
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "Approving RLN contract to spend your TTT tokens ..."
|
|
|
|
|
|
cast send $TOKEN_CONTRACT_ADDRESS "approve(address,uint256)" \
|
|
|
|
|
|
$RLN_CONTRACT_ADDRESS $TTT_AMOUNT_WEI \
|
|
|
|
|
|
--private-key $ETH_TESTNET_KEY \
|
|
|
|
|
|
--rpc-url $RLN_RELAY_ETH_CLIENT_ADDRESS || {
|
|
|
|
|
|
echocol "❌ Approve transaction failed."
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
}
|
|
|
|
|
|
echocol "✅ Approval complete!"
|
|
|
|
|
|
echocol ""
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
check_eth_balance() {
|
|
|
|
|
|
# 0.01 ETH in wei
|
|
|
|
|
|
local MIN=10000000000000000
|
|
|
|
|
|
local BAL
|
|
|
|
|
|
|
|
|
|
|
|
BAL=$(cast balance "$ETH_TESTNET_ACCOUNT" --rpc-url "$RLN_RELAY_ETH_CLIENT_ADDRESS" 2>/dev/null | tr -d '[:space:]')
|
|
|
|
|
|
[ -z "$BAL" ] && { echocol "Couldn’t fetch ETH balance."; exit 1; }
|
|
|
|
|
|
[ "$BAL" -lt "$MIN" ] && { echocol "Need ≥ 0.01 Sepolia ETH. Top up at https://www.infura.io/faucet/sepolia"; exit 1; }
|
|
|
|
|
|
|
|
|
|
|
|
echocol "✅ You have enough Linea Sepolia ETH to register."
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if [ -f ./.env ]; then
|
|
|
|
|
|
echocol ".env file already exists."
|
|
|
|
|
|
read -p "Do you want to delete and regenerate it? (y/N): " RECREATE_ENV
|
|
|
|
|
|
if [ "$RECREATE_ENV" = "y" ] || [ "$RECREATE_ENV" = "Y" ]; then
|
|
|
|
|
|
rm -f ./.env
|
|
|
|
|
|
echocol "Old .env removed. Generating a new one..."
|
|
|
|
|
|
else
|
|
|
|
|
|
echocol "Keeping existing .env. Exiting wizard."
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
2024-10-14 16:17:56 +11:00
|
|
|
|
fi
|
|
|
|
|
|
|
2025-07-18 15:48:35 +05:30
|
|
|
|
if [ -f keystore/keystore.json ]; then
|
|
|
|
|
|
echocol "'keystore/keystore.json' already exists."
|
|
|
|
|
|
read -p "Do you want to delete and regenerate it? (y/N): " RECREATE_KEYSTORE
|
|
|
|
|
|
if [ "$RECREATE_KEYSTORE" = "y" ] || [ "$RECREATE_KEYSTORE" = "Y" ]; then
|
|
|
|
|
|
rm -f keystore/keystore.json
|
|
|
|
|
|
echocol "Old keystore/keystore.json removed. Generating a new one..."
|
|
|
|
|
|
else
|
|
|
|
|
|
echocol "Keeping existing keystore/keystore.json. Exiting wizard."
|
|
|
|
|
|
fi
|
2024-10-14 16:17:56 +11:00
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if [ -z "$(which docker 2>/dev/null)" ]; then
|
|
|
|
|
|
echo "Ensure that 'docker\` is installed and in \$PATH"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if [ -z "$(which docker-compose 2>/dev/null)" ]; then
|
|
|
|
|
|
echo "Ensure that 'docker-compose' is installed and in \$PATH"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-18 15:48:35 +05:30
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "╔══════════════════════════════════════════════════════════════════════════════╗"
|
|
|
|
|
|
echocol "║ ║"
|
|
|
|
|
|
echocol "║ Welcome to nwaku-compose wizard ║"
|
|
|
|
|
|
echocol "║ ║"
|
|
|
|
|
|
echocol "╚══════════════════════════════════════════════════════════════════════════════╝"
|
|
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "First, you need a RPC HTTP endpoint for Linea Sepolia"
|
|
|
|
|
|
echocol "If you don't have one, try out https://www.infura.io/ (Expected format is https://linea-sepolia.infura.io/v3/<api key>)"
|
|
|
|
|
|
read -p "RLN_RELAY_ETH_CLIENT_ADDRESS: " RLN_RELAY_ETH_CLIENT_ADDRESS
|
2024-10-14 16:17:56 +11:00
|
|
|
|
|
|
|
|
|
|
if [ -z "$RLN_RELAY_ETH_CLIENT_ADDRESS" ] \
|
|
|
|
|
|
|| [ $(echo "$RLN_RELAY_ETH_CLIENT_ADDRESS" | grep -c "^https:") -eq 0 ]; then
|
|
|
|
|
|
echo "Invalid value, received '$RLN_RELAY_ETH_CLIENT_ADDRESS'"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-07-18 15:48:35 +05:30
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "Now enter your Linea Sepolia Testnet account address (should start with 0x and be 42 characters)"
|
|
|
|
|
|
read -p "ETH_TESTNET_ACCOUNT: " ETH_TESTNET_ACCOUNT
|
2024-10-14 16:17:56 +11:00
|
|
|
|
|
2025-07-18 15:48:35 +05:30
|
|
|
|
if ! [[ "$ETH_TESTNET_ACCOUNT" =~ ^0x[0-9a-fA-F]{40}$ ]]; then
|
|
|
|
|
|
echo "Invalid value, received '$ETH_TESTNET_ACCOUNT'"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "Checking your Linea Sepolia Testnet balance..."
|
|
|
|
|
|
check_eth_balance
|
|
|
|
|
|
echocol ""
|
|
|
|
|
|
|
|
|
|
|
|
echocol "Now enter your Linea Sepolia Testnet private key in hex format 0a...1f without 0x prefix"
|
|
|
|
|
|
read -p "ETH_TESTNET_KEY: " ETH_TESTNET_KEY
|
|
|
|
|
|
|
|
|
|
|
|
if ! [[ "$ETH_TESTNET_KEY" =~ ^[0-9a-fA-F]{64}$ ]]; then
|
|
|
|
|
|
echo "Invalid value, received '$ETH_TESTNET_KEY'"
|
|
|
|
|
|
exit 1
|
2024-10-14 16:17:56 +11:00
|
|
|
|
fi
|
|
|
|
|
|
|
2025-07-18 15:48:35 +05:30
|
|
|
|
echocol ""
|
2024-10-14 16:17:56 +11:00
|
|
|
|
echocol "Generating a password for the RLN membership keystore file..."
|
2025-07-18 15:48:35 +05:30
|
|
|
|
read -p "Press ENTER to continue..." foo
|
|
|
|
|
|
RLN_RELAY_CRED_PASSWORD=$(LC_ALL=C < /dev/urandom tr -dc ',/.;:<>?!@#$%^&*()+\-_A-Z-a-z-0-9' | head -c${1:-16}; echo)
|
2024-10-14 16:17:56 +11:00
|
|
|
|
|
2025-07-18 15:48:35 +05:30
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "Estimating storage size for DB..."
|
|
|
|
|
|
read -p "Press ENTER to continue..." foo
|
2024-10-14 16:17:56 +11:00
|
|
|
|
STORAGE_SIZE=$(./set_storage_retention.sh echo-value)
|
|
|
|
|
|
|
|
|
|
|
|
if [ -z "$STORAGE_SIZE" ]; then
|
|
|
|
|
|
echo "Error encountered when estimating storage size, exiting"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-07-18 15:48:35 +05:30
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "Estimating SHM for Postgres..."
|
|
|
|
|
|
read -p "Press ENTER to continue..." foo
|
2025-02-17 20:17:34 +11:00
|
|
|
|
POSTGRES_SHM=$(./set_postgres_shm.sh echo-value)
|
|
|
|
|
|
|
|
|
|
|
|
if [ -z "$POSTGRES_SHM" ]; then
|
|
|
|
|
|
echo "Error encountered when estimating postgres container shm, exiting"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-07-18 15:48:35 +05:30
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "🔐 Review your credentials and environment configuration below."
|
|
|
|
|
|
echocol "They will be saved to '.env'. Press ENTER to confirm or CONTROL-C to cancel:"
|
|
|
|
|
|
|
|
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "RLN_RELAY_ETH_CLIENT_ADDRESS: $RLN_RELAY_ETH_CLIENT_ADDRESS"
|
|
|
|
|
|
echocol "ETH_TESTNET_KEY: $ETH_TESTNET_KEY"
|
|
|
|
|
|
echocol "ETH_TESTNET_ACCOUNT: $ETH_TESTNET_ACCOUNT"
|
|
|
|
|
|
echocol "RLN_RELAY_CRED_PASSWORD: $RLN_RELAY_CRED_PASSWORD"
|
|
|
|
|
|
echocol "STORAGE_SIZE: $STORAGE_SIZE"
|
|
|
|
|
|
echocol "POSTGRES_SHM: $POSTGRES_SHM"
|
|
|
|
|
|
|
|
|
|
|
|
read -p "Press ENTER to continue..." foo
|
2024-10-14 16:17:56 +11:00
|
|
|
|
|
|
|
|
|
|
echo "RLN_RELAY_ETH_CLIENT_ADDRESS='$RLN_RELAY_ETH_CLIENT_ADDRESS'
|
|
|
|
|
|
ETH_TESTNET_KEY=$ETH_TESTNET_KEY
|
2025-07-18 15:48:35 +05:30
|
|
|
|
ETH_TESTNET_ACCOUNT=$ETH_TESTNET_ACCOUNT
|
2024-10-14 16:17:56 +11:00
|
|
|
|
RLN_RELAY_CRED_PASSWORD='$RLN_RELAY_CRED_PASSWORD'
|
2025-02-17 20:17:34 +11:00
|
|
|
|
STORAGE_SIZE=$STORAGE_SIZE
|
|
|
|
|
|
POSTGRES_SHM=$POSTGRES_SHM" > ./.env
|
2024-10-14 16:17:56 +11:00
|
|
|
|
|
2025-07-18 15:48:35 +05:30
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "Checking your TTT token balance..."
|
|
|
|
|
|
USER_BALANCE_RAW=$(cast call $TOKEN_CONTRACT_ADDRESS "balanceOf(address)(uint256)" $ETH_TESTNET_ACCOUNT --rpc-url $RLN_RELAY_ETH_CLIENT_ADDRESS 2>/dev/null)
|
|
|
|
|
|
USER_BALANCE=$(echo "$USER_BALANCE_RAW" | awk '{print $1}')
|
|
|
|
|
|
USER_BALANCE=$(echo "$USER_BALANCE / 10^18" | bc)
|
|
|
|
|
|
|
|
|
|
|
|
if [ -z "$USER_BALANCE" ]; then
|
|
|
|
|
|
echocol "Could not fetch balance. Please ensure your RPC endpoint and account are correct."
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echocol "Your current TTT token balance is: $USER_BALANCE"
|
|
|
|
|
|
echocol "Required amount: $REQUIRED_AMOUNT"
|
|
|
|
|
|
echocol ""
|
|
|
|
|
|
|
|
|
|
|
|
if [ "$USER_BALANCE" -ge "$REQUIRED_AMOUNT" ]; then
|
|
|
|
|
|
echocol "You already have enough TTT tokens to register."
|
|
|
|
|
|
read -p "Do you want to mint more tokens? (y/N): " MINT_CHOICE
|
|
|
|
|
|
if [ "$MINT_CHOICE" = "y" ] || [ "$MINT_CHOICE" = "Y" ]; then
|
|
|
|
|
|
mint_tokens
|
|
|
|
|
|
approve_tokens
|
|
|
|
|
|
else
|
|
|
|
|
|
approve_tokens
|
|
|
|
|
|
fi
|
|
|
|
|
|
else
|
|
|
|
|
|
echocol "Minting and approving required TTT tokens …"
|
|
|
|
|
|
mint_tokens
|
|
|
|
|
|
approve_tokens
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2024-10-14 16:17:56 +11:00
|
|
|
|
SUDO=""
|
|
|
|
|
|
if ! docker info > /dev/null 2>&1; then
|
|
|
|
|
|
echocol "...."
|
|
|
|
|
|
echocol "'sudo' seems to be needed to run docker, your unix password will be asked"
|
|
|
|
|
|
SUDO="sudo"
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-07-18 15:48:35 +05:30
|
|
|
|
|
|
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "🔐 Registering RLN membership..."
|
|
|
|
|
|
read -p "Press ENTER to continue..." foo
|
|
|
|
|
|
|
2024-10-14 16:17:56 +11:00
|
|
|
|
if ! $SUDO ./register_rln.sh; then
|
2025-07-18 15:48:35 +05:30
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "❌ RLN registration failed. This may be due to high gas fees."
|
|
|
|
|
|
echocol "💡 Make sure you have enough Sepolia ETH and try again with:"
|
|
|
|
|
|
echocol " $SUDO ./register_rln.sh"
|
|
|
|
|
|
echocol ""
|
2024-10-14 16:17:56 +11:00
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2025-07-18 15:48:35 +05:30
|
|
|
|
echocol ""
|
|
|
|
|
|
echocol "✅ RLN membership registered successfully!"
|
|
|
|
|
|
echocol ""
|
|
|
|
|
|
|
2024-10-14 16:17:56 +11:00
|
|
|
|
echocol "Your node is ready! enter the following command to start it:"
|
2025-07-18 15:48:35 +05:30
|
|
|
|
read -p "Press ENTER to continue..." foo
|
|
|
|
|
|
echo "> $SUDO docker-compose up -d"
|
|
|
|
|
|
echocol "✅ Node started successfully!"
|
|
|
|
|
|
echocol ""
|