logos-messaging-simulator/deploy_rln_contract.sh
Tanya S 68c6c0246a
Deploy TST Proxy contract (#113)
* env updates and new deploy of TST

* Fix export parameter name in deply_rln_contracts

* Update docker-compose and deploy_rln_contracts

* Verify forge commands and addresses

* Fix command for DeployTokenWithProxy
2025-10-03 13:00:27 +02:00

103 lines
3.5 KiB
Bash

#!/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
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. Compile Contract Repo
echo "forge install..."
forge install
echo "pnpm install..."
pnpm install
echo "forge build..."
forge build
# 4. Export environment variables
export RCL_URL=$RCL_URL
export PRIVATE_KEY=$PRIVATE_KEY
export ETH_FROM=$ETH_FROM
# Dummy values
export API_KEY_ETHERSCAN=123
export API_KEY_CARDONA=123
export API_KEY_LINEASCAN=123
# Helper function to validate Ethereum addresses
validate_address() {
local address="$1"
local name="$2"
if [ -z "$address" ]; then
echo "Error: Failed to extract $name address"
exit 1
fi
if ! echo "$address" | grep -qE "^0x[a-fA-F0-9]{40}$"; then
echo "Error: Invalid $name address format: $address"
exit 1
fi
echo "Successfully extracted $name address: $address"
}
# 5. Deploy the TestToken Proxy with the TestToken implementation contracts
printf "\nDeploying TestToken Proxy (ERC20 Token Contract)...\n"
DEPLOY_TST_PROXY_OUTPUT=$(ETH_FROM=$ETH_FROM forge script script/DeployTokenWithProxy.s.sol:DeployTokenWithProxy --broadcast -vv --rpc-url http://foundry:8545 --private-key $PRIVATE_KEY)
if [ $? -ne 0 ]; then
echo "Error: TestToken Proxy deployment failed"
echo "Forge output: $DEPLOY_TST_PROXY_OUTPUT"
exit 1
fi
export PROXY_TOKEN_ADDRESS=$(echo "$DEPLOY_TST_PROXY_OUTPUT" | grep -o "0: address 0x[a-fA-F0-9]\{40\}" | head -n1 | cut -d' ' -f3)
validate_address "$PROXY_TOKEN_ADDRESS" "TestToken Proxy"
export TOKEN_ADDRESS=$PROXY_TOKEN_ADDRESS
printf "\nDeploying LinearPriceCalculator Contract...\n"
forge script script/Deploy.s.sol --broadcast -vv --rpc-url http://foundry:8545 --tc DeployPriceCalculator --private-key $PRIVATE_KEY
if [ $? -ne 0 ]; then
echo "Error: LinearPriceCalculator deployment failed"
exit 1
fi
echo "LinearPriceCalculator deployment completed successfully"
printf "\nDeploying RLN contract...\n"
forge script script/Deploy.s.sol --broadcast -vv --rpc-url http://foundry:8545 --tc DeployWakuRlnV2 --private-key $PRIVATE_KEY
if [ $? -ne 0 ]; then
echo "Error: RLN contract deployment failed"
exit 1
fi
echo "RLN contract deployment completed successfully"
printf "\nDeploying Proxy contract...\n"
DEPLOY_WAKURLN_PROXY_OUTPUT=$(ETH_FROM=$ETH_FROM forge script script/Deploy.s.sol --broadcast -vvv --rpc-url http://foundry:8545 --tc DeployProxy --private-key $PRIVATE_KEY)
if [ $? -ne 0 ]; then
echo "Error: Proxy contract deployment failed"
echo "Forge output: $DEPLOY_WAKURLN_PROXY_OUTPUT"
exit 1
fi
export RLN_CONTRACT_ADDRESS=$(echo "$DEPLOY_WAKURLN_PROXY_OUTPUT" | grep -o "0: address 0x[a-fA-F0-9]\{40\}" | head -n1 | cut -d' ' -f3)
validate_address "$RLN_CONTRACT_ADDRESS" "RLN Proxy"
# 6. Contract deployment completed
printf "\nContract deployment completed successfully"
printf "\nTOKEN_ADDRESS: $TOKEN_ADDRESS"
printf "\nRLN_CONTRACT_ADDRESS: $RLN_CONTRACT_ADDRESS"
printf "\nEach account registering a membership needs to first mint the token and approve the contract to spend it on their behalf."