Deployment
Last updated
Last updated
// script/Deploy.s.sol
pragma solidity ^0.8.33;
import "forge-std/Script.sol";
import "src/tokens/BLTBYToken.sol";
contract DeployScript is Script {
function run() external {
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
vm.startBroadcast(deployerPrivateKey);
// Deploy tokens
BLTBYToken bltby = new BLTBYToken();
EQTBLTToken eqtblt = new EQTBLTToken();
// Deploy NFTs
MembershipNFT membership = new MembershipNFT();
// Log addresses
console.log("BLTBY:", address(bltby));
console.log("EQTBLT:", address(eqtblt));
vm.stopBroadcast();
}
}# Deploy to testnet
forge script script/Deploy.s.sol \
--rpc-url $BASE_SEPOLIA_RPC \
--broadcast \
--verify# Verify contract
forge verify-contract \
--chain-id 84532 \
--compiler-version v0.8.33 \
<CONTRACT_ADDRESS> \
src/tokens/BLTBYToken.sol:BLTBYToken# Deploy to mainnet
forge script script/Deploy.s.sol \
--rpc-url $BASE_RPC_URL \
--broadcast \
--verify \
--slow// script/Upgrade.s.sol
pragma solidity ^0.8.33;
contract UpgradeScript is Script {
function run() external {
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
vm.startBroadcast(deployerPrivateKey);
// Deploy new implementation
TreasuryV2 newImpl = new TreasuryV2();
// Upgrade via governance (pre-approved)
Treasury proxy = Treasury(TREASURY_PROXY);
proxy.upgradeTo(address(newImpl));
vm.stopBroadcast();
}
}// V1
contract TreasuryV1 {
address public admin; // slot 0
uint256 public balance; // slot 1
}
// V2 - MUST maintain layout
contract TreasuryV2 is TreasuryV1 {
// Existing slots preserved
uint256 public newVariable; // slot 2 (new)
}# Read contract state
cast call $CONTRACT "totalSupply()" --rpc-url $BASE_RPC_URL
# Send transaction
cast send $CONTRACT "mint(address,uint256)" $TO $AMOUNT \
--private-key $PRIVATE_KEY \
--rpc-url $BASE_RPC_URL# Grant role
cast send $CONTRACT "grantRole(bytes32,address)" $ROLE $ACCOUNT
# Check role
cast call $CONTRACT "hasRole(bytes32,address)" $ROLE $ACCOUNT
# Pause contract
cast send $CONTRACT "pause()"#!/bin/bash
# verify-all.sh
CONTRACTS=(
"BLTBYToken:0x..."
"EQTBLTToken:0x..."
"MembershipNFT:0x..."
)
for contract in "${CONTRACTS[@]}"; do
name="${contract%%:*}"
address="${contract##*:}"
forge verify-contract \
--chain-id 8453 \
$address \
src/$name.sol:$name
done#!/bin/bash
# health-check.sh
echo "Treasury Balance:"
cast call $TREASURY "totalBalance()"
echo "Total Members:"
cast call $MEMBERSHIP "totalSupply()"
echo "BLTBY Supply:"
cast call $BLTBY "totalSupply()"