/ script / Hats.s.sol
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  }