Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .env-template
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
DEPLOYER_PRIVATE_KEY=0x

ETHERSCAN_API_KEY=

AGREEMENT_SALT=

NUM_RECIPIENTS=1

# X = [0..NUM_RECIPIENTS)
RECIPIENT_NAME_X="Alice"
RECIPIENT_ADDR_X=0x
RECIPIENT_AGREEMENT_URI_X=ipfs://
RECIPIENT_TEMPLATE_ID_X=
RECIPIENT_TEMPLATE_NAME_X=""
RECIPIENT_SAFE_DELEGATE_SIGNATURE_X=0x
9 changes: 6 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
[submodule "lib/forge-std"]
path = lib/forge-std
url = https://github.com/foundry-rs/forge-std
[submodule "lib/zk-governance"]
path = lib/zk-governance
url = https://github.com/zksync-association/zk-governance
[submodule "lib/cybercorps-contracts"]
path = lib/cybercorps-contracts
url = https://github.com/MetaLex-Tech/cybercorps-contracts
[submodule "lib/openzeppelin-contracts"]
path = lib/openzeppelin-contracts
url = https://github.com/openzeppelin/openzeppelin-contracts
[submodule "lib/openzeppelin-contracts-upgradeable"]
path = lib/openzeppelin-contracts-upgradeable
url = https://github.com/openzeppelin/openzeppelin-contracts-upgradeable
35 changes: 32 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ Before you begin, ensure you have the following installed:

- [Node.js](https://nodejs.org/)
- [Foundry](https://book.getfoundry.sh/getting-started/installation.html)
- solc v0.8.20
- solc v0.8.28

## Installation

Expand All @@ -176,6 +176,35 @@ To set up the project locally, follow these steps:
```
3. **Compile Contracts**

```base
forge build --optimize --optimizer-runs 200 --use solc:0.8.20
```bash
forge build --via-ir --optimize --optimizer-runs 200 --use solc:0.8.28
```

## Deployment

- `scripts/`: Scripts for deployment and maintenance. Some of them are integrated in tests to keep consistency
- `scripts/lib`: Utilities and configs. Configs are separate by deploy targets (e.g. projects & networks)
- `.env*`: Env vars for sensitive data. Required for most configs. Also separate by deploy targets

```bash
# You can find end-to-end tests against the following scripts in test/YearnBorgCompensation.t.sol

# Setup env vars for your target
cp .env.your-target .env

# Deploy prerequisites contracts if needed (ex. factories)
forge script scripts/deployYearnBorgCompensationPrerequisites.s.sol --rpc-url <your-target-network-rpc> --use solc:0.8.28 --via-ir --optimize --optimizer-runs 200 --broadcast
# Deploy project-specific contracts (ex. controllers)
forge script scripts/deployYearnBorgCompensation.s.sol --rpc-url <your-target-network-rpc> --use solc:0.8.28 --via-ir --optimize --optimizer-runs 200 --broadcast
# Create template agreements if needed
forge script scripts/createAllTemplates.s.sol --rpc-url <your-target-network-rpc> --use solc:0.8.28 --via-ir --optimize --optimizer-runs 200 --broadcast
# Propose MetaVesT deals per configs
forge script scripts/proposeAllGuardiansMetavestDeals.s.sol --rpc-url <your-target-network-rpc> --use solc:0.8.28 --via-ir --optimize --optimizer-runs 200 --broadcast
```

## Tests

To run tests:
```bash
forge test --via-ir --fork-url <your-target-network-rpc> -vvv
```
1 change: 1 addition & 0 deletions lib/openzeppelin-contracts
Submodule openzeppelin-contracts added at c64a1e
1 change: 1 addition & 0 deletions lib/openzeppelin-contracts-upgradeable
1 change: 0 additions & 1 deletion lib/zk-governance
Submodule zk-governance deleted from f9915c
12 changes: 2 additions & 10 deletions remappings.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,4 @@
ds-test/=lib/zk-governance/l2-contracts/lib/forge-std/lib/ds-test/src/
erc4626-tests/=lib/zk-governance/l1-contracts/lib/openzeppelin-contracts/lib/erc4626-tests/
flexible-voting/=lib/zk-governance/l2-contracts/lib/flexible-voting/
forge-std/=lib/forge-std/src/
murky/=lib/zk-governance/l2-contracts/lib/murky/
openzeppelin-contracts-upgradeable/=lib/zk-governance/l2-contracts/lib/openzeppelin-contracts-upgradeable/
openzeppelin-contracts/=lib/zk-governance/l1-contracts/lib/openzeppelin-contracts/
@openzeppelin/contracts-upgradeable=lib/zk-governance/l2-contracts/lib/openzeppelin-contracts-upgradeable/contracts
@openzeppelin/contracts/=lib/zk-governance/l2-contracts/lib/openzeppelin-contracts/contracts/
solmate/=lib/zk-governance/l2-contracts/lib/flexible-voting/lib/solmate/src/
zk-governance/=lib/zk-governance/
openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/
openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/
cybercorps-contracts/=lib/cybercorps-contracts/
75 changes: 20 additions & 55 deletions scripts/createAllTemplates.s.sol
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity ^0.8.24;

import {ZkSyncGuardianCompensation2024_2025} from "./lib/ZkSyncGuardianCompensation2024_2025.sol";
import {ZkSyncGuardianCompensation2025_2026} from "./lib/ZkSyncGuardianCompensation2025_2026.sol";
import {ZkSyncGuardianCompensationSepolia2024_2025} from "./lib/ZkSyncGuardianCompensationSepolia2024_2025.sol";
import {YearnBorgCompensation2025_2026} from "./lib/YearnBorgCompensation2025_2026.sol";
import {YearnBorgCompensationSepolia2025_2026} from "./lib/YearnBorgCompensationSepolia2025_2026.sol";
import {ISafeProxyFactory, IGnosisSafe, GnosisTransaction} from "../test/lib/safe.sol";
import {BorgAuth} from "cybercorps-contracts/src/libs/auth.sol";
import {CyberAgreementRegistry} from "cybercorps-contracts/src/CyberAgreementRegistry.sol";
import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
import {IZkCappedMinterV2} from "../src/interfaces/zk-governance/IZkCappedMinterV2.sol";
import {ERC1967Proxy} from "openzeppelin-contracts/proxy/ERC1967/ERC1967Proxy.sol";
import {SafeTxHelper} from "./lib/SafeTxHelper.sol";
import {Script} from "forge-std/Script.sol";
import {VestingAllocationFactory} from "../src/VestingAllocationFactory.sol";
Expand All @@ -18,65 +16,32 @@ import {metavestController} from "../src/MetaVesTController.sol";
contract CreateAllTemplatesScript is SafeTxHelper, Script {
/// @dev For running from `forge script`
function run() public virtual {
// zkSync mainnet
run(ZkSyncGuardianCompensation2024_2025.getDefault(vm));
run(
// // Ethereum mainnet
// YearnBorgCompensation2025_2026.getDefault(vm)

// Sepolia testnet
YearnBorgCompensationSepolia2025_2026.getDefault(vm)
);
}

/// @dev For running in tests
function run(
ZkSyncGuardianCompensation2024_2025.Config memory config
YearnBorgCompensation2025_2026.Config memory config
) public virtual returns(GnosisTransaction[] memory) {
IGnosisSafe safe;
ZkSyncGuardianCompensation2024_2025.Config memory config;

// zkSync Era (zkSync Guardians)
config = ZkSyncGuardianCompensation2024_2025.getDefault(vm);

safe = config.guardianSafe;

// TODO deprecated
// GnosisTransaction[] memory safeTxs = new GnosisTransaction[](config.guardians.length + 1);
// safeTxs[0] = GnosisTransaction({
// to: address(config.registry),
// value: 0 ether,
// data: abi.encodeWithSelector(
// CyberAgreementRegistry.createTemplate.selector,
// config.borgResolutionTemplate.id,
// config.borgResolutionTemplate.name,
// config.borgResolutionTemplate.agreementUri,
// config.borgResolutionTemplate.globalFields,
// config.borgResolutionTemplate.partyFields
// )
// });
// for (uint i = 0; i < config.guardians.length ; i++) {
// ZkSyncGuardianCompensation2024_2025.GuardianCompInfo memory guardian = config.guardians[i];
// safeTxs[i + 1] = GnosisTransaction({
// to: address(config.registry),
// value: 0 ether,
// data: abi.encodeWithSelector(
// CyberAgreementRegistry.createTemplate.selector,
// guardian.compTemplate.id,
// guardian.compTemplate.name,
// guardian.compTemplate.agreementUri,
// guardian.compTemplate.globalFields,
// guardian.compTemplate.partyFields
// )
// });
// }

GnosisTransaction[] memory safeTxs = new GnosisTransaction[](config.guardians.length);
for (uint i = 0; i < config.guardians.length ; i++) {
ZkSyncGuardianCompensation2024_2025.GuardianCompInfo memory guardian = config.guardians[i];
GnosisTransaction[] memory safeTxs = new GnosisTransaction[](config.compRecipients.length);
for (uint i = 0; i < config.compRecipients.length ; i++) {
YearnBorgCompensation2025_2026.CompInfo memory compRecipient = config.compRecipients[i];
safeTxs[i] = GnosisTransaction({
to: address(config.registry),
value: 0 ether,
data: abi.encodeWithSelector(
CyberAgreementRegistry.createTemplate.selector,
guardian.compTemplate.id,
guardian.compTemplate.name,
guardian.compTemplate.agreementUri,
guardian.compTemplate.globalFields,
guardian.compTemplate.partyFields
compRecipient.compTemplate.id,
compRecipient.compTemplate.name,
compRecipient.compTemplate.agreementUri,
compRecipient.compTemplate.globalFields,
compRecipient.compTemplate.partyFields
)
});
}
Expand All @@ -85,7 +50,7 @@ contract CreateAllTemplatesScript is SafeTxHelper, Script {

console2.log("");
console2.log("=== CreateAllTemplatesScript ===");
console2.log("Safe: ", address(safe));
console2.log("Safe: ", address(config.metalexSafe));
console2.log("Safe TXs:");
for (uint256 i = 0 ; i < safeTxs.length ; i++) {
console2.log(" #", i);
Expand Down
51 changes: 0 additions & 51 deletions scripts/deploy.s.sol

This file was deleted.

87 changes: 0 additions & 87 deletions scripts/deployTestZkCappedMinter.s.sol

This file was deleted.

Loading