@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.
|
|
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.
|
|
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";
|
package/script/Deploy.s.sol
CHANGED
|
@@ -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
|
+
}
|
package/src/CTDeployer.sol
CHANGED
|
@@ -51,7 +51,14 @@ contract CTDeployer is ERC2771Context, JBPermissioned, IJBRulesetDataHook, IERC7
|
|
|
51
51
|
// ---------------------------- events -------------------------------- //
|
|
52
52
|
//*********************************************************************//
|
|
53
53
|
|
|
54
|
-
|
|
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({
|
|
270
|
+
emit CTDeployer_SuckerDeploymentFailed({
|
|
271
|
+
projectId: projectId, salt: suckerSalt, reason: reason, caller: _msgSender()
|
|
272
|
+
});
|
|
263
273
|
}
|
|
264
274
|
}
|
|
265
275
|
|