@zoralabs/protocol-deployments 0.0.2

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.
Files changed (77) hide show
  1. package/.env.anvil +2 -0
  2. package/.turbo/turbo-build.log +34 -0
  3. package/CHANGELOG.md +34 -0
  4. package/README.md +20 -0
  5. package/addresses/1.json +14 -0
  6. package/addresses/10.json +14 -0
  7. package/addresses/11155111.json +9 -0
  8. package/addresses/420.json +14 -0
  9. package/addresses/424.json +11 -0
  10. package/addresses/5.json +14 -0
  11. package/addresses/58008.json +11 -0
  12. package/addresses/7777777.json +14 -0
  13. package/addresses/8453.json +14 -0
  14. package/addresses/84531.json +14 -0
  15. package/addresses/999.json +14 -0
  16. package/addresses/999999999.json +13 -0
  17. package/chainConfigs/1.json +5 -0
  18. package/chainConfigs/10.json +5 -0
  19. package/chainConfigs/11155111.json +4 -0
  20. package/chainConfigs/420.json +5 -0
  21. package/chainConfigs/424.json +5 -0
  22. package/chainConfigs/5.json +5 -0
  23. package/chainConfigs/58008.json +4 -0
  24. package/chainConfigs/7777777.json +5 -0
  25. package/chainConfigs/8453.json +5 -0
  26. package/chainConfigs/84531.json +5 -0
  27. package/chainConfigs/999.json +5 -0
  28. package/chainConfigs/999999999.json +5 -0
  29. package/deterministicConfig/factoryProxy/params.json +10 -0
  30. package/deterministicConfig/factoryProxy/signatures.json +14 -0
  31. package/deterministicConfig/premintExecutorProxy/params.json +10 -0
  32. package/deterministicConfig/premintExecutorProxy/signatures.json +11 -0
  33. package/deterministicConfig/upgradeGate/params.json +7 -0
  34. package/deterministicConfig/upgradeGate/signatures.json +14 -0
  35. package/dist/index.cjs +3360 -0
  36. package/dist/index.cjs.map +1 -0
  37. package/dist/index.js +3314 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/package/batchPublish.test.d.ts +451 -0
  40. package/dist/package/batchPublish.test.d.ts.map +1 -0
  41. package/dist/package/chainConfigs.d.ts +61 -0
  42. package/dist/package/chainConfigs.d.ts.map +1 -0
  43. package/dist/package/deployment.d.ts +32 -0
  44. package/dist/package/deployment.d.ts.map +1 -0
  45. package/dist/package/index.d.ts +3 -0
  46. package/dist/package/index.d.ts.map +1 -0
  47. package/dist/package/wagmiGenerated.d.ts +6810 -0
  48. package/dist/package/wagmiGenerated.d.ts.map +1 -0
  49. package/dist/script/copy-deployed-contracts.d.ts +2 -0
  50. package/dist/script/copy-deployed-contracts.d.ts.map +1 -0
  51. package/dist/script/signDeploymentTransactions.d.ts +2 -0
  52. package/dist/script/signDeploymentTransactions.d.ts.map +1 -0
  53. package/foundry.toml +40 -0
  54. package/package/batchPublish.test.ts +326 -0
  55. package/package/chainConfigs.ts +60 -0
  56. package/package/deployment.ts +94 -0
  57. package/package/index.ts +5 -0
  58. package/package/wagmiGenerated.ts +3472 -0
  59. package/package.json +44 -0
  60. package/remappings.txt +9 -0
  61. package/script/CalculateDeterministicParams.s.sol +84 -0
  62. package/script/DeployMintersAndImplementations.s.sol +31 -0
  63. package/script/DeployNewImplementation.s.sol +26 -0
  64. package/script/DeployPreminterImpl.s.sol +23 -0
  65. package/script/DeployProxiesToNewChain.s.sol +42 -0
  66. package/script/DeployUpgradeGate.s.sol +27 -0
  67. package/script/Upgrade.s.sol +83 -0
  68. package/script/UpgradePreminter.s.sol +34 -0
  69. package/script/bundle-chainConfigs.mjs +36 -0
  70. package/script/copy-deployed-contracts.ts +66 -0
  71. package/script/signDeploymentTransactions.ts +277 -0
  72. package/test/NewFactoryProxyDeployer.t.sol +127 -0
  73. package/test/ZoraCreator1155Factory_Fork.t.sol +151 -0
  74. package/test/ZoraCreator1155PremintExecutorForkTest.t.sol +93 -0
  75. package/tsconfig.json +25 -0
  76. package/tsup.config.ts +10 -0
  77. package/wagmi.config.ts +113 -0
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@zoralabs/protocol-deployments",
3
+ "version": "0.0.2",
4
+ "repository": "https://github.com/ourzora/zora-protocol",
5
+ "license": "MIT",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/package/index.d.ts",
8
+ "type": "module",
9
+ "scripts": {
10
+ "dev": "FOUNDRY_PROFILE=dev forge test --watch -vvv",
11
+ "test:fork": "FORK_TEST_CHAINS=mainnet,goerli,optimism,optimism_goerli,zora,zora_goerli,base_goerli,base,zora_sepolia forge test -vvv",
12
+ "test": "forge test -vvv",
13
+ "build": "yarn wagmi && yarn bundle-configs && tsup",
14
+ "bundle-configs": "node script/bundle-chainConfigs.mjs && yarn prettier",
15
+ "prettier": "prettier --write 'package/**/*.ts' 'script/**/*.ts' 'wagmi.config.ts'",
16
+ "update-new-deployment-addresses": "node script/copy-deployed-contracts.mjs deploy",
17
+ "wagmi": "wagmi generate",
18
+ "unlink-protocol-rewards": "rm -rf ./node_modules/@zoralabs/protocol-rewards && cp -r ../protocol-rewards ./node_modules/@zoralabs/protocol-rewards",
19
+ "unlink-1155": "rm -rf ./node_modules/@zoralabs/zora-1155-contracts && cp -r ../1155-contracts ./node_modules/@zoralabs/zora-1155-contracts",
20
+ "unlink-contracts": "yarn unlink-protocol-rewards && yarn unlink-1155",
21
+ "link-contracts": "rm -rf ./node_modules && cd .. && yarn"
22
+ },
23
+ "dependencies": {
24
+ "@zoralabs/zora-1155-contracts": "*",
25
+ "ds-test": "https://github.com/dapphub/ds-test#cd98eff28324bfac652e63a239a60632a761790b",
26
+ "forge-std": "https://github.com/foundry-rs/forge-std#705263c95892a906d7af65f0f73ce8a4a0c80b80",
27
+ "solmate": "^6.1.0"
28
+ },
29
+ "devDependencies": {
30
+ "@turnkey/api-key-stamper": "^0.1.1",
31
+ "@turnkey/http": "^1.2.0",
32
+ "@turnkey/viem": "^0.2.4",
33
+ "@types/node": "^20.1.2",
34
+ "@wagmi/cli": "^1.0.1",
35
+ "es-main": "^1.2.0",
36
+ "glob": "^10.2.2",
37
+ "prettier": "^2.8.8",
38
+ "prettier-plugin-solidity": "^1.1.3",
39
+ "solady": "^0.0.132",
40
+ "tsup": "^7.2.0",
41
+ "tsx": "^3.13.0",
42
+ "typescript": "^5.2.2"
43
+ }
44
+ }
package/remappings.txt ADDED
@@ -0,0 +1,9 @@
1
+ ds-test/=node_modules/ds-test/src/
2
+ forge-std/=node_modules/forge-std/src/
3
+ @zoralabs/openzeppelin-contracts-upgradeable/=node_modules/@zoralabs/openzeppelin-contracts-upgradeable/
4
+ @zoralabs/protocol-rewards/src/=node_modules/@zoralabs/protocol-rewards/src/
5
+ @zoralabs/zora-1155-contracts/src/=node_modules/@zoralabs/zora-1155-contracts/src/
6
+ @openzeppelin/contracts/=node_modules/@openzeppelin/contracts/
7
+ _imagine=node_modules/@zoralabs/zora-1155-contracts/_imagine
8
+ solemate/=/node_modules/solemate/src/
9
+ solady/=node_modules/solady/src/
@@ -0,0 +1,84 @@
1
+ // spdx-license-identifier: mit
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "forge-std/Script.sol";
5
+ import "forge-std/console2.sol";
6
+
7
+ import {ZoraDeployerBase} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerBase.sol";
8
+ import {Zora1155Factory} from "@zoralabs/zora-1155-contracts/src/proxies/Zora1155Factory.sol";
9
+ import {ProxyShim} from "@zoralabs/zora-1155-contracts/src/utils/ProxyShim.sol";
10
+ import {UpgradeGate} from "@zoralabs/zora-1155-contracts/src/upgrades/UpgradeGate.sol";
11
+ import {LibString} from "solady/utils/LibString.sol";
12
+ import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
13
+ import {ZoraDeployerUtils} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerUtils.sol";
14
+ import {Zora1155PremintExecutor} from "@zoralabs/zora-1155-contracts/src/proxies/Zora1155PremintExecutor.sol";
15
+ import {DeterministicDeployerScript, DeterministicParams} from "@zoralabs/zora-1155-contracts/src/deployment/DeterministicDeployerScript.sol";
16
+ import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
17
+
18
+ /// @title Gets parameters for deterministically deploying a new 1155 factory proxy at an address starting with 0x777777, regardless of the chain.
19
+ /// @dev Example usage: DEPLOYER=0xf69fEc6d858c77e969509843852178bd24CAd2B6 forge script script/GetDeterminsticParam.s.sol --rpc-url https://testnet.rpc.zora.energy --ffi
20
+ /// @author doved
21
+ /// @notice Ensure to set env variable for DEPLOYER
22
+ contract FactoryProxyDeterministicParams is ZoraDeployerBase {
23
+ address deployerAddress;
24
+ // Set in step 2
25
+ address proxyDeployerAddress;
26
+
27
+ function run() public {
28
+ vm.createSelectFork("zora_goerli", 1252119);
29
+
30
+ deployerAddress = vm.envAddress("TURNKEY_TARGET_ADDRESS");
31
+
32
+ calculateForFactoryProxy();
33
+ calculateForPremintExecutorProxy();
34
+
35
+ // Note: relies on proxyDeployerAddress
36
+ calculateUpgradeGateAddress();
37
+ }
38
+
39
+ function calculateForFactoryProxy() internal {
40
+ bytes memory proxyCreationCode = type(Zora1155Factory).creationCode;
41
+
42
+ DeterministicParams memory deterministicParams = getDeterministicDeploymentParams(deployerAddress, proxyCreationCode, 100);
43
+
44
+ proxyDeployerAddress = deterministicParams.proxyDeployerAddress;
45
+
46
+ mkdir("deterministicConfig/factoryProxy");
47
+ serializeAndSaveOutput(deterministicParams, "factoryProxy");
48
+ }
49
+
50
+ function calculateForPremintExecutorProxy() internal {
51
+ bytes memory proxyCreationCode = type(Zora1155PremintExecutor).creationCode;
52
+
53
+ DeterministicParams memory deterministicParams = getDeterministicDeploymentParams(deployerAddress, proxyCreationCode, 200);
54
+
55
+ mkdir("deterministicConfig/premintExecutorProxy");
56
+ serializeAndSaveOutput(deterministicParams, "premintExecutorProxy");
57
+ }
58
+
59
+ // @notice Since this doesn't
60
+ function calculateUpgradeGateAddress() internal {
61
+ bytes memory creationCodeUpgradeGate = type(UpgradeGate).creationCode;
62
+ bytes32 salt = saltWithAddressInFirst20Bytes(deployerAddress, 20);
63
+ address resultAddress = Create2.computeAddress(salt, keccak256(creationCodeUpgradeGate), proxyDeployerAddress);
64
+
65
+ vm.serializeAddress("UPGRADE_GATE_JSON", "deployerAddress", deployerAddress);
66
+ vm.serializeAddress("UPGRADE_GATE_JSON", "upgradeGateAddress", resultAddress);
67
+ vm.serializeAddress("UPGRADE_GATE_JSON", "proxyDeployerAddress", proxyDeployerAddress);
68
+ vm.serializeBytes32("UPGRADE_GATE_JSON", "salt", salt);
69
+ string memory output = vm.serializeBytes("UPGRADE_GATE_JSON", "creationCode", creationCodeUpgradeGate);
70
+
71
+ console2.log(output);
72
+
73
+ mkdir("deterministicConfig/upgradeGate");
74
+ vm.writeJson(output, paramsFilePath("upgradeGate"));
75
+ }
76
+
77
+ function mkdir(string memory path) internal {
78
+ string[] memory commands = new string[](3);
79
+ commands[0] = "mkdir";
80
+ commands[1] = "-p";
81
+ commands[2] = path;
82
+ vm.ffi(commands);
83
+ }
84
+ }
@@ -0,0 +1,31 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "forge-std/Script.sol";
5
+ import "forge-std/console2.sol";
6
+
7
+ import {ZoraDeployerBase} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerBase.sol";
8
+ import {ZoraDeployerUtils} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerUtils.sol";
9
+ import {Deployment} from "@zoralabs/zora-1155-contracts/src/deployment/DeploymentConfig.sol";
10
+
11
+ contract DeployMintersAndImplementations is ZoraDeployerBase {
12
+ function run() public returns (string memory) {
13
+ Deployment memory deployment = getDeployment();
14
+
15
+ address deployer = vm.envAddress("DEPLOYER");
16
+
17
+ vm.startBroadcast(deployer);
18
+
19
+ deployUpgradeGateDeterminstic(deployment);
20
+
21
+ deployMinters(deployment);
22
+
23
+ deployNew1155AndFactoryImpl(deployment);
24
+
25
+ deployNewPreminterImplementationDeterminstic(deployment);
26
+
27
+ vm.stopBroadcast();
28
+
29
+ return getDeploymentJSON(deployment);
30
+ }
31
+ }
@@ -0,0 +1,26 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "forge-std/Script.sol";
5
+ import "forge-std/console2.sol";
6
+
7
+ import {ZoraDeployerBase} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerBase.sol";
8
+ import {Deployment} from "@zoralabs/zora-1155-contracts/src/deployment/DeploymentConfig.sol";
9
+ import {DeterministicDeployerScript} from "@zoralabs/zora-1155-contracts/src/deployment/DeterministicDeployerScript.sol";
10
+
11
+ /// @dev Deploys implementation contracts for 1155 contracts.
12
+ /// @notice Run after deploying the minters
13
+ /// @notice This
14
+ contract DeployNewImplementations is ZoraDeployerBase {
15
+ function run() public returns (string memory) {
16
+ Deployment memory deployment = getDeployment();
17
+
18
+ vm.startBroadcast();
19
+
20
+ deployNew1155AndFactoryImpl(deployment);
21
+
22
+ deployNewPreminterImplementationDeterminstic(deployment);
23
+
24
+ return getDeploymentJSON(deployment);
25
+ }
26
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "forge-std/Script.sol";
5
+ import "forge-std/console2.sol";
6
+
7
+ import {ZoraDeployerBase} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerBase.sol";
8
+ import {Deployment} from "@zoralabs/zora-1155-contracts/src/deployment/DeploymentConfig.sol";
9
+ import {DeterministicDeployerScript} from "@zoralabs/zora-1155-contracts/src/deployment/DeterministicDeployerScript.sol";
10
+
11
+ /// @dev Deploys preminter implementation contract.
12
+ /// @notice Run after deploying the minters
13
+ contract DeployPreminterImpl is ZoraDeployerBase {
14
+ function run() public returns (string memory) {
15
+ Deployment memory deployment = getDeployment();
16
+
17
+ vm.startBroadcast();
18
+
19
+ deployNewPreminterImplementationDeterminstic(deployment);
20
+
21
+ return getDeploymentJSON(deployment);
22
+ }
23
+ }
@@ -0,0 +1,42 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "forge-std/Script.sol";
5
+ import "forge-std/console2.sol";
6
+
7
+ import {ZoraDeployerBase} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerBase.sol";
8
+ import {Deployment} from "@zoralabs/zora-1155-contracts/src/deployment/DeploymentConfig.sol";
9
+ import {ZoraDeployerUtils} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerUtils.sol";
10
+ import {DeploymentTestingUtils} from "@zoralabs/zora-1155-contracts/src/deployment/DeploymentTestingUtils.sol";
11
+
12
+ contract DeployProxiesToNewChain is ZoraDeployerBase, DeploymentTestingUtils {
13
+ function run() public returns (string memory) {
14
+ Deployment memory deployment = getDeployment();
15
+
16
+ vm.startBroadcast();
17
+
18
+ console.log("deploy factory proxy");
19
+
20
+ deployFactoryProxyDeterminstic(deployment);
21
+
22
+ console2.log("factory proxy address:", deployment.factoryProxy);
23
+
24
+ console2.log("create test contract for verification");
25
+
26
+ ZoraDeployerUtils.deployTestContractForVerification(deployment.factoryProxy, makeAddr("admin"));
27
+
28
+ deployPreminterProxyDeterminstic(deployment);
29
+
30
+ console2.log("preminter proxy", deployment.preminterProxy);
31
+
32
+ console2.log("testing premint");
33
+
34
+ signAndExecutePremint(deployment.preminterProxy);
35
+
36
+ vm.stopBroadcast();
37
+
38
+ // now test signing and executing premint
39
+
40
+ return getDeploymentJSON(deployment);
41
+ }
42
+ }
@@ -0,0 +1,27 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "forge-std/Script.sol";
5
+ import "forge-std/console2.sol";
6
+
7
+ import {ZoraDeployerBase} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerBase.sol";
8
+ import {Deployment} from "@zoralabs/zora-1155-contracts/src/deployment/DeploymentConfig.sol";
9
+ import {ZoraDeployerUtils} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerUtils.sol";
10
+ import {DeploymentTestingUtils} from "@zoralabs/zora-1155-contracts/src/deployment/DeploymentTestingUtils.sol";
11
+ import {DeterministicDeployerScript} from "@zoralabs/zora-1155-contracts/src/deployment/DeterministicDeployerScript.sol";
12
+
13
+ contract DeployUpgradeGate is ZoraDeployerBase {
14
+ function run() public returns (string memory) {
15
+ Deployment memory deployment = getDeployment();
16
+
17
+ vm.startBroadcast();
18
+
19
+ deployUpgradeGateDeterminstic(deployment);
20
+
21
+ vm.stopBroadcast();
22
+
23
+ // now test signing and executing premint
24
+
25
+ return getDeploymentJSON(deployment);
26
+ }
27
+ }
@@ -0,0 +1,83 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "forge-std/Script.sol";
5
+
6
+ import {ZoraDeployerBase} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerBase.sol";
7
+ import {ChainConfig, Deployment} from "@zoralabs/zora-1155-contracts/src/deployment/DeploymentConfig.sol";
8
+
9
+ import {ZoraCreator1155FactoryImpl} from "@zoralabs/zora-1155-contracts/src/factory/ZoraCreator1155FactoryImpl.sol";
10
+ import {Zora1155Factory} from "@zoralabs/zora-1155-contracts/src/proxies/Zora1155Factory.sol";
11
+ import {ZoraCreator1155Impl} from "@zoralabs/zora-1155-contracts/src/nft/ZoraCreator1155Impl.sol";
12
+ import {ICreatorRoyaltiesControl} from "@zoralabs/zora-1155-contracts/src/interfaces/ICreatorRoyaltiesControl.sol";
13
+ import {IZoraCreator1155Factory} from "@zoralabs/zora-1155-contracts/src/interfaces/IZoraCreator1155Factory.sol";
14
+ import {IMinter1155} from "@zoralabs/zora-1155-contracts/src/interfaces/IMinter1155.sol";
15
+ import {IZoraCreator1155} from "@zoralabs/zora-1155-contracts/src/interfaces/IZoraCreator1155.sol";
16
+ import {ZoraCreatorFixedPriceSaleStrategy} from "@zoralabs/zora-1155-contracts/src/minters/fixed-price/ZoraCreatorFixedPriceSaleStrategy.sol";
17
+ import {ZoraCreatorMerkleMinterStrategy} from "@zoralabs/zora-1155-contracts/src/minters/merkle/ZoraCreatorMerkleMinterStrategy.sol";
18
+ import {ZoraCreatorRedeemMinterFactory} from "@zoralabs/zora-1155-contracts/src/minters/redeem/ZoraCreatorRedeemMinterFactory.sol";
19
+ import {ZoraDeployerUtils} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerUtils.sol";
20
+ import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
21
+
22
+ contract UpgradeScript is ZoraDeployerBase {
23
+ using Strings for uint256;
24
+ using stdJson for string;
25
+
26
+ string configFile;
27
+
28
+ function run() public returns (string memory) {
29
+ Deployment memory deployment = getDeployment();
30
+ ChainConfig memory chainConfig = getChainConfig();
31
+
32
+ vm.startBroadcast();
33
+
34
+ if (deployment.fixedPriceSaleStrategy == address(0)) {
35
+ deployment.fixedPriceSaleStrategy = address(new ZoraCreatorFixedPriceSaleStrategy());
36
+ console2.log("New FixedPriceMinter", deployment.fixedPriceSaleStrategy);
37
+ } else {
38
+ console2.log("Existing FIXED_PRICE_STRATEGY", deployment.fixedPriceSaleStrategy);
39
+ }
40
+
41
+ if (deployment.merkleMintSaleStrategy == address(0)) {
42
+ deployment.merkleMintSaleStrategy = address(new ZoraCreatorMerkleMinterStrategy());
43
+ console2.log("New MerkleMintStrategy", deployment.merkleMintSaleStrategy);
44
+ } else {
45
+ console2.log("Existing MERKLE_MINT_STRATEGY", deployment.merkleMintSaleStrategy);
46
+ }
47
+
48
+ if (deployment.redeemMinterFactory == address(0)) {
49
+ deployment.redeemMinterFactory = address(new ZoraCreatorRedeemMinterFactory());
50
+ console2.log("New REDEEM_MINTER_FACTORY", address(deployment.redeemMinterFactory));
51
+ } else {
52
+ console2.log("Existing REDEEM_MINTER_FACTORY", deployment.redeemMinterFactory);
53
+ }
54
+
55
+ bool isNewNFTImpl = deployment.contract1155Impl == address(0);
56
+ if (isNewNFTImpl) {
57
+ console2.log("mintFeeRecipient", chainConfig.mintFeeRecipient);
58
+ console2.log("protocolRewards", chainConfig.protocolRewards);
59
+ deployment.contract1155Impl = address(new ZoraCreator1155Impl(chainConfig.mintFeeRecipient, deployment.factoryProxy, chainConfig.protocolRewards));
60
+ console2.log("New NFT_IMPL", deployment.contract1155Impl);
61
+ } else {
62
+ console2.log("Existing NFT_IMPL", deployment.contract1155Impl);
63
+ }
64
+
65
+ deployment.factoryProxy = address(
66
+ new ZoraCreator1155FactoryImpl({
67
+ _zora1155Impl: IZoraCreator1155(deployment.contract1155Impl),
68
+ _merkleMinter: ZoraCreatorMerkleMinterStrategy(deployment.merkleMintSaleStrategy),
69
+ _redeemMinterFactory: ZoraCreatorRedeemMinterFactory(deployment.redeemMinterFactory),
70
+ _fixedPriceMinter: ZoraCreatorFixedPriceSaleStrategy(deployment.fixedPriceSaleStrategy)
71
+ })
72
+ );
73
+
74
+ console2.log("New Factory Impl", deployment.factoryImpl);
75
+ console2.log("Upgrade to this new factory impl on the proxy:", deployment.factoryProxy);
76
+
77
+ if (isNewNFTImpl) {
78
+ ZoraDeployerUtils.deployTestContractForVerification(deployment.factoryProxy, makeAddr("admin"));
79
+ }
80
+
81
+ return getDeploymentJSON(deployment);
82
+ }
83
+ }
@@ -0,0 +1,34 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.17;
3
+
4
+ import "forge-std/Script.sol";
5
+ import "forge-std/console2.sol";
6
+
7
+ import {ZoraDeployerBase} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerBase.sol";
8
+ import {ChainConfig, Deployment} from "@zoralabs/zora-1155-contracts/src/deployment/DeploymentConfig.sol";
9
+ import {UUPSUpgradeable} from "@zoralabs/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol";
10
+ import {ZoraDeployerUtils} from "@zoralabs/zora-1155-contracts/src/deployment/ZoraDeployerUtils.sol";
11
+
12
+ contract UpgradePreminter is ZoraDeployerBase {
13
+ function run() public returns (string memory, bytes memory upgradeCalldata, address upgradeTarget) {
14
+ Deployment memory deployment = getDeployment();
15
+
16
+ uint256 deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY");
17
+
18
+ vm.startBroadcast(deployerPrivateKey);
19
+
20
+ address preminterImplementation = ZoraDeployerUtils.deployNewPreminterImplementationDeterminstic(deployment.factoryProxy);
21
+
22
+ vm.stopBroadcast();
23
+
24
+ upgradeCalldata = abi.encodeWithSelector(UUPSUpgradeable.upgradeTo.selector, preminterImplementation);
25
+
26
+ upgradeTarget = deployment.preminterImpl;
27
+
28
+ console2.log("Upgrade PremintExecutor target and implementatin:", upgradeTarget, preminterImplementation);
29
+ console2.log("To upgrade, use this calldata:");
30
+ console2.logBytes(upgradeCalldata);
31
+
32
+ return (getDeploymentJSON(deployment), upgradeCalldata, upgradeTarget);
33
+ }
34
+ }
@@ -0,0 +1,36 @@
1
+ import { readdirSync, readFileSync, writeFileSync } from 'fs';
2
+
3
+ // Reads all the chain configs in ./chainConfigs folder, and bundles them into a typescript
4
+ // definition that looks like:
5
+ // export const chainConfigs = {
6
+ // [chainId]: {
7
+ // ...chainConfig
8
+ // }
9
+ //}
10
+ function makeConfig() {
11
+ // read all files in the chainConfigs folder
12
+ const files = readdirSync('chainConfigs');
13
+
14
+ // combine them into a single mapping
15
+ const chainConfigsInner = files
16
+ .map((fileName) => {
17
+ const chainId = fileName.split('.')[0];
18
+
19
+ const fileContents = JSON.parse(readFileSync(`chainConfigs/${fileName}`));
20
+
21
+ return `[${chainId}]: ${JSON.stringify(fileContents, null, 2)}`;
22
+ })
23
+ .join(', ');
24
+
25
+ return `export const chainConfigs = {
26
+ ${chainConfigsInner}
27
+ };`;
28
+ }
29
+
30
+ async function bundleChainConfigs() {
31
+ const configString = makeConfig();
32
+
33
+ writeFileSync('./package/chainConfigs.ts', configString);
34
+ }
35
+
36
+ await bundleChainConfigs();
@@ -0,0 +1,66 @@
1
+ import { writeFile, readFile } from "fs/promises";
2
+ import esMain from "es-main";
3
+ import { glob } from "glob";
4
+
5
+ type Deploy = {
6
+ timestamp: number;
7
+ commit: string;
8
+ returns: { value: string }[];
9
+ chain: number;
10
+ };
11
+ async function copyEnvironmentRunFiles() {
12
+ const latestFiles = await glob(`broadcast/**/*run-latest.json`);
13
+
14
+ const allFileContents = await Promise.all(
15
+ latestFiles.map(async (file) => {
16
+ const fileParts = file.split("/");
17
+ const chainId = fileParts[fileParts.length - 2];
18
+ return {
19
+ chainId,
20
+ contents: JSON.parse(await readFile(file, "utf-8")) as Deploy,
21
+ };
22
+ })
23
+ );
24
+
25
+ const groupedByChainId = allFileContents.reduce((acc, file) => {
26
+ const chainId = file.chainId!;
27
+ if (isNaN(Number(chainId))) return acc;
28
+
29
+ if (!acc[chainId]) {
30
+ acc[chainId] = [];
31
+ }
32
+ acc[chainId]!.push(file.contents);
33
+ return acc;
34
+ }, {} as Record<string, Deploy[]>);
35
+
36
+ const withLatest = Object.entries(groupedByChainId).map(
37
+ ([chainId, files]) => {
38
+ const latest = files.sort((a, b) => b.timestamp! - a.timestamp!)[0];
39
+ return {
40
+ chainId,
41
+ latest,
42
+ };
43
+ }
44
+ );
45
+
46
+ withLatest.forEach(async ({ chainId, latest }) => {
47
+ const filePath = `addresses/${chainId}.json`;
48
+
49
+ await writeFile(
50
+ filePath,
51
+ JSON.stringify(
52
+ {
53
+ ...JSON.parse(latest!.returns["0"]!.value),
54
+ timestamp: latest!.timestamp,
55
+ commit: latest!.commit,
56
+ },
57
+ null,
58
+ 2
59
+ )
60
+ );
61
+ });
62
+ }
63
+
64
+ if (esMain(import.meta)) {
65
+ await copyEnvironmentRunFiles();
66
+ }