Hats.s.sol
1 // SPDX-License-Identifier: UNLICENSED 2 pragma solidity ^0.8.13; 3 4 import { Script, console2 } from "forge-std/Script.sol"; 5 import { Hats } from "../src/Hats.sol"; 6 7 contract DeployHats is Script { 8 string public constant baseImageURI = "ipfs://bafkreiflezpk3kjz6zsv23pbvowtatnd5hmqfkdro33x5mh2azlhne3ah4"; 9 10 string public constant name = "Hats Protocol v1"; // increment this each deployment 11 12 bytes32 internal constant SALT = bytes32(abi.encode(0x4a75)); // ~ H(4) A(a) T(7) S(5) 13 14 function run() external { 15 // set up deployer 16 uint256 privKey = vm.envUint("PRIVATE_KEY"); 17 address deployer = vm.rememberKey(privKey); 18 // log deployer data 19 console2.log("Deployer: ", deployer); 20 console2.log("Deployer Nonce: ", vm.getNonce(deployer)); 21 22 vm.startBroadcast(deployer); 23 24 // deploy Hats to a deterministic address via CREATE2 25 Hats hats = new Hats{ salt: SALT }(name, baseImageURI); 26 27 vm.stopBroadcast(); 28 // log deployment data 29 console2.log("Salt: ", vm.toString(SALT)); 30 console2.log("Hats contract: ", address(hats)); 31 } 32 33 // forge script script/Hats.s.sol:DeployHats -f goerli 34 // forge script script/Hats.s.sol:DeployHats -f goerli --broadcast --verify 35 36 // forge verify-contract --chain-id 5 --num-of-optimizations 10000 --watch --constructor-args $(cast abi-encode "constructor(string,string)" "Hats Protocol v1" "ipfs://bafkreiflezpk3kjz6zsv23pbvowtatnd5hmqfkdro33x5mh2azlhne3ah4") --compiler-version v0.8.17 0x3bc1A0Ad72417f2d411118085256fC53CBdDd137 src/Hats.sol:Hats --etherscan-api-key $ETHERSCAN_KEY 37 } 38 39 contract DeployHatsAndMintTopHat is Script { 40 string public imageURI = ""; 41 string public name = "Hats Protocol - Test XYZ"; 42 bytes32 internal constant SALT = bytes32(abi.encode(0x4a15)); // ~ hats 43 44 function run() external { 45 uint256 privKey = vm.envUint("PRIVATE_KEY"); 46 47 address deployer = vm.rememberKey(privKey); 48 vm.startBroadcast(deployer); 49 50 Hats hats = new Hats{ salt: SALT }(name, imageURI); 51 52 string memory image = ""; 53 string memory details = ""; 54 55 uint256 tophat = hats.mintTopHat(deployer, details, image); 56 57 vm.stopBroadcast(); 58 59 console2.log("hats: ", address(hats)); 60 console2.log("tophat: ", tophat); 61 } 62 63 // forge script script/Hats.s.sol:DeployHatsAndMintTopHat -f goerli 64 // forge script script/Hats.s.sol:DeployHatsAndMintTopHat -f polygon --broadcast --verify 65 66 // forge script script/Hats.s.sol:DeployHatsAndMintTopHat --rpc-url http://localhost:8545 --broadcast 67 68 // forge verify-contract --chain-id 5 --num-of-optimizations 1000000 --watch --constructor-args $(cast abi-encode "constructor(string,string)" "Hats Protocol - uri test 7" "") --compiler-version v0.8.16 "0x9b50ab91b3ffbcdd5d5ed49ed70bf299434c955c" src/Hats.sol:Hats $ETHERSCAN_API 69 }