Skip to content

Instantly share code, notes, and snippets.

@d10r
Created February 28, 2024 17:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save d10r/19cafec27da590eb9ce81cb728625e46 to your computer and use it in GitHub Desktop.
Save d10r/19cafec27da590eb9ce81cb728625e46 to your computer and use it in GitHub Desktop.
deploy-sferp-nft.sh
#!/bin/bash
# deploys an instance of GdaNFTContract to a given network
# usage: deploy.sh <network> <priceMillis>
# env var PRIVKEY needs to be set
# env var <explorer>_API_KEY needed for verification
# env vars can be provided via .env file
set -eu
source .env
network_name=$1
priceMillis=$2
# get network metadata
metadata=$(curl -s "https://raw.githubusercontent.com/superfluid-finance/protocol-monorepo/dev/packages/metadata/networks.json")
network=$(echo "$metadata" | jq -r '.[] | select(.name == "'$network_name'")')
# verify chain id
rpc_url=${RPC:-"https://$network_name.rpc.x.superfluid.dev?app=deployer"}
connected_chain_id_hex=$(curl -s -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' $rpc_url | jq -r '.result')
connected_chain_id=$(printf "%d" $connected_chain_id_hex)
expected_chain_id=$(echo "$network" | jq -r '.chainId')
if [ "$connected_chain_id" != "$expected_chain_id" ]; then
echo "chain id mismatch: expected $expected_chain_id, connected to $connected_chain_id"
exit 1
fi
# get explorer api key
explorer_url=$(echo "$network" | jq -r '.explorer')
explorer_api_key_name=$(echo $explorer_url | sed -E 's|https://(.*)\..*|\U\1_API_KEY|g' | sed 's/\./_/g' | sed 's/\-/_/g')
fallback_explorer_api_key_name=$(echo $explorer_api_key_name | sed 's/^[^_]*_//')
explorer_api_key=${!explorer_api_key_name:-${!fallback_explorer_api_key_name}}
# get constructor args
name=${NAME:-"Superfluid Ecosystem Rewards Pass"}
symbol=${SYMBOL:-"SFERP"}
iseth_addr=$(echo "$network" | jq -r '.nativeTokenWrapper')
price=$(echo "$priceMillis * 1000000000000000" | bc)
# 1 month, defined as 365 days divided by 12
duration=2628000
if [[ "${VERIFY_CONTRACT:-}" != "" ]]; then
echo "verify-only mode for contract $VERIFY_CONTRACT"
encoded_args=$(cast abi-encode "constructor(string,string,address,uint96,uint96)" "$name" "$symbol" "$iseth_addr" "$price" "$duration")
echo "encoded args: $encoded_args"
forge verify-contract --chain $connected_chain_id --encoded-constructor-args $encoded_args --etherscan-api-key $explorer_api_key $VERIFY_CONTRACT src/GdaNFTContract.sol:GdaNFTContract
exit 0
fi
echo "deploying with args: $name, $symbol, $iseth_addr, $price, $duration"
forge create --rpc-url $rpc_url src/GdaNFTContract.sol:GdaNFTContract --private-key=$PRIVKEY --constructor-args "$name" "$symbol" "$iseth_addr" $price $duration --etherscan-api-key $explorer_api_key --verify
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment