@croptop/core-v6 0.0.56 → 0.0.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@croptop/core-v6",
3
- "version": "0.0.56",
3
+ "version": "0.0.58",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -27,7 +27,7 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@bananapus/721-hook-v6": "^0.0.55",
30
- "@bananapus/core-v6": "^0.0.60",
30
+ "@bananapus/core-v6": "^0.0.64",
31
31
  "@bananapus/ownable-v6": "^0.0.28",
32
32
  "@bananapus/permission-ids-v6": "^0.0.27",
33
33
  "@bananapus/router-terminal-v6": "^0.0.49",
@@ -2,13 +2,13 @@
2
2
  pragma solidity 0.8.28;
3
3
 
4
4
  import {Hook721Deployment, Hook721DeploymentLib} from "@bananapus/721-hook-v6/script/helpers/Hook721DeploymentLib.sol";
5
- import {CoreDeployment, CoreDeploymentLib} from "@bananapus/core-v6/script/helpers/CoreDeploymentLib.sol";
6
5
  import {SuckerDeployment, SuckerDeploymentLib} from "@bananapus/suckers-v6/script/helpers/SuckerDeploymentLib.sol";
7
6
  import {
8
7
  RouterTerminalDeployment,
9
8
  RouterTerminalDeploymentLib
10
9
  } from "@bananapus/router-terminal-v6/script/helpers/RouterTerminalDeploymentLib.sol";
11
10
  import {CroptopDeployment, CroptopDeploymentLib} from "./helpers/CroptopDeploymentLib.sol";
11
+ import {CoreDeployment, CoreDeploymentLib} from "./helpers/CoreDeploymentLib.sol";
12
12
 
13
13
  import {SphinxConstants, NetworkInfo} from "@sphinx-labs/contracts/contracts/foundry/SphinxConstants.sol";
14
14
  import {Sphinx} from "@sphinx-labs/contracts/contracts/foundry/SphinxPlugin.sol";
@@ -2,7 +2,6 @@
2
2
  pragma solidity 0.8.28;
3
3
 
4
4
  import {Hook721Deployment, Hook721DeploymentLib} from "@bananapus/721-hook-v6/script/helpers/Hook721DeploymentLib.sol";
5
- import {CoreDeployment, CoreDeploymentLib} from "@bananapus/core-v6/script/helpers/CoreDeploymentLib.sol";
6
5
  import {SuckerDeployment, SuckerDeploymentLib} from "@bananapus/suckers-v6/script/helpers/SuckerDeploymentLib.sol";
7
6
 
8
7
  import {Sphinx} from "@sphinx-labs/contracts/contracts/foundry/SphinxPlugin.sol";
@@ -11,6 +10,7 @@ import {Script} from "forge-std/Script.sol";
11
10
  import {CTDeployer} from "./../src/CTDeployer.sol";
12
11
  import {CTProjectOwner} from "./../src/CTProjectOwner.sol";
13
12
  import {CTPublisher} from "./../src/CTPublisher.sol";
13
+ import {CoreDeployment, CoreDeploymentLib} from "./helpers/CoreDeploymentLib.sol";
14
14
 
15
15
  contract DeployScript is Script, Sphinx {
16
16
  /// @notice tracks the deployment of the core contracts for the chain we are deploying to.
@@ -0,0 +1,172 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity 0.8.28;
3
+
4
+ import {stdJson} from "forge-std/Script.sol";
5
+ import {Vm} from "forge-std/Vm.sol";
6
+
7
+ import {JBController} from "@bananapus/core-v6/src/JBController.sol";
8
+ import {JBDirectory} from "@bananapus/core-v6/src/JBDirectory.sol";
9
+ import {JBFeelessAddresses} from "@bananapus/core-v6/src/JBFeelessAddresses.sol";
10
+ import {JBFundAccessLimits} from "@bananapus/core-v6/src/JBFundAccessLimits.sol";
11
+ import {JBMultiTerminal} from "@bananapus/core-v6/src/JBMultiTerminal.sol";
12
+ import {JBPermissions} from "@bananapus/core-v6/src/JBPermissions.sol";
13
+ import {JBPrices} from "@bananapus/core-v6/src/JBPrices.sol";
14
+ import {JBProjects} from "@bananapus/core-v6/src/JBProjects.sol";
15
+ import {JBRulesets} from "@bananapus/core-v6/src/JBRulesets.sol";
16
+ import {JBSplits} from "@bananapus/core-v6/src/JBSplits.sol";
17
+ import {JBTerminalStore} from "@bananapus/core-v6/src/JBTerminalStore.sol";
18
+ import {JBTokens} from "@bananapus/core-v6/src/JBTokens.sol";
19
+
20
+ import {SphinxConstants, NetworkInfo} from "@sphinx-labs/contracts/contracts/foundry/SphinxConstants.sol";
21
+
22
+ struct CoreDeployment {
23
+ JBPermissions permissions;
24
+ JBProjects projects;
25
+ JBDirectory directory;
26
+ JBSplits splits;
27
+ JBRulesets rulesets;
28
+ JBController controller;
29
+ JBMultiTerminal terminal;
30
+ JBTerminalStore terminalStore;
31
+ JBPrices prices;
32
+ JBFeelessAddresses feeless;
33
+ JBFundAccessLimits fundAccess;
34
+ JBTokens tokens;
35
+ address trustedForwarder;
36
+ }
37
+
38
+ library CoreDeploymentLib {
39
+ address internal constant VM_ADDRESS = address(uint160(uint256(keccak256("hevm cheat code"))));
40
+ // forge-lint: disable-next-line(screaming-snake-case-const)
41
+ Vm internal constant vm = Vm(VM_ADDRESS);
42
+ string internal constant PROJECT_NAME = "nana-core-v6";
43
+
44
+ function getDeployment(string memory path) internal returns (CoreDeployment memory deployment) {
45
+ uint256 chainId = block.chainid;
46
+
47
+ SphinxConstants sphinxConstants = new SphinxConstants();
48
+ NetworkInfo[] memory networks = sphinxConstants.getNetworkInfoArray();
49
+
50
+ for (uint256 i; i < networks.length; i++) {
51
+ if (networks[i].chainId == chainId) return getDeployment({path: path, networkName: networks[i].name});
52
+ }
53
+
54
+ revert("ChainID is not (currently) supported by Sphinx.");
55
+ }
56
+
57
+ function getDeployment(
58
+ string memory path,
59
+ string memory networkName
60
+ )
61
+ internal
62
+ returns (CoreDeployment memory deployment)
63
+ {
64
+ deployment.permissions = JBPermissions(
65
+ _getDeploymentAddress({
66
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "JBPermissions"
67
+ })
68
+ );
69
+
70
+ deployment.projects = JBProjects(
71
+ _getDeploymentAddress({
72
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "JBProjects"
73
+ })
74
+ );
75
+
76
+ deployment.directory = JBDirectory(
77
+ _getDeploymentAddress({
78
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "JBDirectory"
79
+ })
80
+ );
81
+
82
+ deployment.splits = JBSplits(
83
+ _getDeploymentAddress({
84
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "JBSplits"
85
+ })
86
+ );
87
+
88
+ deployment.rulesets = JBRulesets(
89
+ _getDeploymentAddress({
90
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "JBRulesets"
91
+ })
92
+ );
93
+
94
+ deployment.controller = JBController(
95
+ _tryGetDeploymentAddress({
96
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "JBController"
97
+ })
98
+ );
99
+
100
+ deployment.terminal = JBMultiTerminal(
101
+ _getDeploymentAddress({
102
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "JBMultiTerminal"
103
+ })
104
+ );
105
+
106
+ deployment.terminalStore = JBTerminalStore(
107
+ _getDeploymentAddress({
108
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "JBTerminalStore"
109
+ })
110
+ );
111
+
112
+ deployment.prices = JBPrices(
113
+ _getDeploymentAddress({
114
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "JBPrices"
115
+ })
116
+ );
117
+
118
+ deployment.feeless = JBFeelessAddresses(
119
+ _getDeploymentAddress({
120
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "JBFeelessAddresses"
121
+ })
122
+ );
123
+
124
+ deployment.fundAccess = JBFundAccessLimits(
125
+ _getDeploymentAddress({
126
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "JBFundAccessLimits"
127
+ })
128
+ );
129
+
130
+ deployment.tokens = JBTokens(
131
+ _getDeploymentAddress({
132
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "JBTokens"
133
+ })
134
+ );
135
+
136
+ deployment.trustedForwarder = _getDeploymentAddress({
137
+ path: path, projectName: PROJECT_NAME, networkName: networkName, contractName: "ERC2771Forwarder"
138
+ });
139
+ }
140
+
141
+ function _getDeploymentAddress(
142
+ string memory path,
143
+ string memory projectName,
144
+ string memory networkName,
145
+ string memory contractName
146
+ )
147
+ internal
148
+ view
149
+ returns (address)
150
+ {
151
+ string memory deploymentJson =
152
+ // forge-lint: disable-next-line(unsafe-cheatcode)
153
+ vm.readFile(string.concat(path, projectName, "/", networkName, "/", contractName, ".json"));
154
+ return stdJson.readAddress({json: deploymentJson, key: ".address"});
155
+ }
156
+
157
+ function _tryGetDeploymentAddress(
158
+ string memory path,
159
+ string memory projectName,
160
+ string memory networkName,
161
+ string memory contractName
162
+ )
163
+ internal
164
+ returns (address)
165
+ {
166
+ string memory filePath = string.concat(path, projectName, "/", networkName, "/", contractName, ".json");
167
+ // forge-lint: disable-next-line(unsafe-cheatcode)
168
+ if (!vm.exists(filePath)) return address(0);
169
+ // forge-lint: disable-next-line(unsafe-cheatcode)
170
+ return stdJson.readAddress({json: vm.readFile(filePath), key: ".address"});
171
+ }
172
+ }
@@ -51,7 +51,14 @@ contract CTDeployer is ERC2771Context, JBPermissioned, IJBRulesetDataHook, IERC7
51
51
  // ---------------------------- events -------------------------------- //
52
52
  //*********************************************************************//
53
53
 
54
- event CTDeployer_SuckerDeploymentFailed(uint256 indexed projectId, bytes32 indexed salt, bytes reason);
54
+ /// @notice Emitted when launch-time sucker deployment fails without reverting the collection launch.
55
+ /// @param projectId The project whose sucker deployment failed.
56
+ /// @param salt The salt used for the failed sucker deployment attempt.
57
+ /// @param reason The revert reason returned by the sucker registry.
58
+ /// @param caller The address that launched the project.
59
+ event CTDeployer_SuckerDeploymentFailed(
60
+ uint256 indexed projectId, bytes32 indexed salt, bytes reason, address caller
61
+ );
55
62
 
56
63
  //*********************************************************************//
57
64
  // ---------------- public immutable stored properties --------------- //
@@ -177,6 +184,7 @@ contract CTDeployer is ERC2771Context, JBPermissioned, IJBRulesetDataHook, IERC7
177
184
  IJBController controller
178
185
  )
179
186
  external
187
+ payable
180
188
  override
181
189
  returns (uint256 projectId, IJB721TiersHook hook)
182
190
  {
@@ -187,7 +195,7 @@ contract CTDeployer is ERC2771Context, JBPermissioned, IJBRulesetDataHook, IERC7
187
195
  rulesetConfigurations[0].metadata.baseCurrency = JBCurrencyIds.ETH;
188
196
 
189
197
  // Reserve the project ID up front so permissionless project creations cannot invalidate hook deployment.
190
- projectId = PROJECTS.createFor(address(this));
198
+ projectId = PROJECTS.createFor{value: msg.value}(address(this));
191
199
 
192
200
  // Deploy a blank project.
193
201
  hook = DEPLOYER.deployHookFor({
@@ -259,7 +267,9 @@ contract CTDeployer is ERC2771Context, JBPermissioned, IJBRulesetDataHook, IERC7
259
267
  // no-op
260
268
  }
261
269
  catch (bytes memory reason) {
262
- emit CTDeployer_SuckerDeploymentFailed({projectId: projectId, salt: suckerSalt, reason: reason});
270
+ emit CTDeployer_SuckerDeploymentFailed({
271
+ projectId: projectId, salt: suckerSalt, reason: reason, caller: _msgSender()
272
+ });
263
273
  }
264
274
  }
265
275
 
@@ -43,6 +43,7 @@ interface ICTDeployer {
43
43
  IJBController controller
44
44
  )
45
45
  external
46
+ payable
46
47
  returns (uint256 projectId, IJB721TiersHook hook);
47
48
 
48
49
  /// @notice Deploy new suckers for an existing project.