This repository was archived by the owner on Mar 16, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCreateInstanceDeterministic.s.sol
More file actions
61 lines (53 loc) · 2.66 KB
/
CreateInstanceDeterministic.s.sol
File metadata and controls
61 lines (53 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
* SPDX-FileCopyrightText: 2025 Black Cat Academy s. r. o.
* SPDX-License-Identifier: LicenseRef-BlackCat-Proprietary-1.0
*/
pragma solidity ^0.8.24;
import {BlackCatInstanceFactoryV1 as InstanceFactory} from "../src/InstanceFactory.sol";
import {FoundryVm} from "./FoundryVm.sol";
/// @notice Create a per-install InstanceController using CREATE2 (deterministic) via an authorized setup ceremony.
/// @dev Usage:
/// 1) Set env:
/// - `PRIVATE_KEY` (deployer)
/// - `BLACKCAT_INSTANCE_FACTORY` (address)
/// - `BLACKCAT_ROOT_AUTHORITY` (address; EOA/Safe/KernelAuthority)
/// - `BLACKCAT_UPGRADE_AUTHORITY` (address; EOA/Safe/KernelAuthority)
/// - `BLACKCAT_EMERGENCY_AUTHORITY` (address; EOA/Safe/KernelAuthority)
/// - `BLACKCAT_GENESIS_ROOT` (bytes32)
/// - `BLACKCAT_GENESIS_URI_HASH` (bytes32)
/// - `BLACKCAT_GENESIS_POLICY_HASH` (bytes32)
/// - `BLACKCAT_INSTANCE_SALT` (bytes32)
/// - `BLACKCAT_SETUP_DEADLINE` (uint256; included in the signed digest)
/// - `BLACKCAT_SETUP_SIGNATURE` (bytes; signature by `BLACKCAT_ROOT_AUTHORITY`, EOA `(r,s,v)`/EIP-2098 or EIP-1271 blob)
/// 2) Run:
/// - `forge script script/CreateInstanceDeterministic.s.sol:CreateInstanceDeterministic --rpc-url <RPC> --broadcast`
contract CreateInstanceDeterministic {
FoundryVm internal constant vm = FoundryVm(address(uint160(uint256(keccak256("hevm cheat code")))));
function run() external returns (address instance) {
uint256 deployerPk = vm.envUint("PRIVATE_KEY");
address factory = vm.envAddress("BLACKCAT_INSTANCE_FACTORY");
address rootAuthority = vm.envAddress("BLACKCAT_ROOT_AUTHORITY");
address upgradeAuthority = vm.envAddress("BLACKCAT_UPGRADE_AUTHORITY");
address emergencyAuthority = vm.envAddress("BLACKCAT_EMERGENCY_AUTHORITY");
bytes32 genesisRoot = vm.envBytes32("BLACKCAT_GENESIS_ROOT");
bytes32 genesisUriHash = vm.envBytes32("BLACKCAT_GENESIS_URI_HASH");
bytes32 genesisPolicyHash = vm.envBytes32("BLACKCAT_GENESIS_POLICY_HASH");
bytes32 salt = vm.envBytes32("BLACKCAT_INSTANCE_SALT");
uint256 deadline = vm.envUint("BLACKCAT_SETUP_DEADLINE");
bytes memory signature = vm.envBytes("BLACKCAT_SETUP_SIGNATURE");
vm.startBroadcast(deployerPk);
instance = InstanceFactory(factory)
.createInstanceDeterministicAuthorized(
rootAuthority,
upgradeAuthority,
emergencyAuthority,
genesisRoot,
genesisUriHash,
genesisPolicyHash,
salt,
deadline,
signature
);
vm.stopBroadcast();
}
}