Skip to content

Commit

Permalink
tests passing
Browse files Browse the repository at this point in the history
  • Loading branch information
spengrah committed Jun 14, 2024
1 parent e3c8ecd commit d057209
Show file tree
Hide file tree
Showing 2 changed files with 365 additions and 16 deletions.
69 changes: 53 additions & 16 deletions script/Deploy.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@
pragma solidity ^0.8.19;

import { Script, console2 } from "forge-std/Script.sol";
import { Module } from "../src/Module.sol";
import { HatsModuleFactory } from "../lib/hats-module/src/HatsModuleFactory.sol";
import { LatestNounsBuilderNFTEligibility } from "../src/LatestNounsBuilderNFTEligibility.sol";

contract Deploy is Script {
Module public implementation;
bytes32 public SALT = bytes32(abi.encode("change this to the value of your choice"));
contract DeployImplementation is Script {
LatestNounsBuilderNFTEligibility public implementation;
bytes32 public SALT = bytes32(abi.encode(0x4a75));

// default values
bool internal _verbose = true;
string internal _version = "0.0.1"; // increment this with each new deployment
string internal _version = "0.1.0"; // increment this with each new deployment

/// @dev Override default values, if desired
function prepare(bool verbose, string memory version) public {
Expand All @@ -26,7 +27,7 @@ contract Deploy is Script {

function _log(string memory prefix) internal view {
if (_verbose) {
console2.log(string.concat(prefix, "Module:"), address(implementation));
console2.log(string.concat(prefix, "Implementation:"), address(implementation));
}
}

Expand All @@ -42,29 +43,65 @@ contract Deploy is Script {
* never differs regardless of where its being compiled
* 2. The provided salt, `SALT`
*/
implementation = new Module{ salt: SALT }(_version /* insert constructor args here */ );
implementation = new LatestNounsBuilderNFTEligibility{ salt: SALT }(_version /* insert constructor args here */ );

vm.stopBroadcast();

_log("");
}
}

/// @dev Deploy pre-compiled ir-optimized bytecode to a non-deterministic address
contract DeployPrecompiled is Deploy {
/// @dev Update SALT and default values in Deploy contract
contract DeployInstance is Script {
HatsModuleFactory public factory = HatsModuleFactory(0x0a3f85fa597B6a967271286aA0724811acDF5CD9);
LatestNounsBuilderNFTEligibility public instance;

function run() public override {
vm.startBroadcast(deployer());
// default values
bool internal _verbose = true;
address internal _implementation;
uint256 internal _saltNonce = 1;
uint256 internal _hatId;
address internal _token;

/// @dev Override default values, if desired
function prepare(bool verbose, address implementation, uint256 hatId, address token, uint256 saltNonce) public {
_verbose = verbose;
_implementation = implementation;
_hatId = hatId;
_saltNonce = saltNonce;
_token = token;
}

/// @dev Set up the deployer via their private key from the environment
function deployer() public returns (address) {
uint256 privKey = vm.envUint("PRIVATE_KEY");
return vm.rememberKey(privKey);
}

bytes memory args = abi.encode( /* insert constructor args here */ );
function _log(string memory prefix) internal view {
if (_verbose) {
console2.log(string.concat(prefix, "Instance:"), address(instance));
}
}

/// @dev Load and deploy pre-compiled ir-optimized bytecode.
implementation = Module(deployCode("optimized-out/Module.sol/Module.json", args));
/// @dev Deploy the contract to a deterministic address via forge's create2 deployer factory.
function run() public virtual returns (LatestNounsBuilderNFTEligibility) {
vm.startBroadcast(deployer());

instance = LatestNounsBuilderNFTEligibility(
factory.createHatsModule(
_implementation,
_hatId,
abi.encodePacked(_token), // other immutable args
abi.encode(), // init data
_saltNonce
)
);

vm.stopBroadcast();

_log("Precompiled ");
_log("");

return instance;
}
}

Expand Down
Loading

0 comments on commit d057209

Please sign in to comment.