Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Decentralized prover #97

Merged
merged 40 commits into from
Sep 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
95d8750
Move tree update in a separate function
AllFi Nov 24, 2023
ffa96ec
Add grace period
AllFi Nov 24, 2023
406c2bf
Refactor code, add tests
AllFi Nov 27, 2023
1da8886
adds tests for dd
r0wdy1 Nov 30, 2023
effa3ee
Fix message event, add comments
AllFi Nov 30, 2023
799b765
adds tests for priority queue
r0wdy1 Dec 1, 2023
cccd9e7
Add tests, minor fixes
AllFi Dec 11, 2023
eeb3821
Add AllowListOperatorManager tests
AllFi Dec 12, 2023
91053a2
Minor refactoring
AllFi Dec 13, 2023
7168553
Minor fixes
AllFi Dec 13, 2023
f823aec
Refactor PriorityQueue
AllFi Dec 13, 2023
c32eb0b
Fix formatting
AllFi Jan 4, 2024
266c118
Fix formatting
AllFi Jan 4, 2024
ec8b5c1
Fix formatting
AllFi Jan 4, 2024
5d78b89
Rename transact, add calldata version
AllFi Jan 5, 2024
93c29bf
Add commitment to RootUpdated event
AllFi Jan 11, 2024
c397b69
Return gracePeriodEnd from pendingCommitment
AllFi Jan 12, 2024
20382b7
Add memo message size
AllFi Jan 16, 2024
b8356d3
Add extra data to tests
AllFi Jan 17, 2024
8250dce
Support new message prefix
AllFi Jan 17, 2024
6fe228e
Remove forced exit related code
AllFi Jan 24, 2024
61b2fbd
Update src/zkbob/utils/PriorityQueue.sol
AllFi Jan 31, 2024
ecc926b
Refactor AllowListOperatorManager
AllFi Jan 31, 2024
6d16f95
Rename PriorityQueue, add copyright, uint32 timestamp
AllFi Feb 1, 2024
1182878
Remove minTreeUpdateFeeIsSet modifier
AllFi Feb 1, 2024
8d19384
Pack fee reciever and allowed in a single struct
AllFi Feb 1, 2024
d5648f7
Remove lastTreeUpdateTimestamp
AllFi Feb 2, 2024
3d39ff4
Add gaps, fix testNativeWithdrawal
AllFi Feb 2, 2024
95ef57e
Fix formatting
AllFi Feb 2, 2024
d640c76
Update ZkBobPool.s.sol and Local.s.sol scripts
AllFi Feb 22, 2024
e3da183
Add script to deploy new operator, modify upgrade script
AllFi Feb 22, 2024
0333691
Minor fixes
AllFi Feb 26, 2024
ccc7c73
Add privileged prover in calldata
AllFi Mar 26, 2024
a41c6aa
Update scripts
AllFi Mar 26, 2024
5ec30b8
Add decentralization upgrade script
AllFi Jun 3, 2024
22644a7
Modify migration script
AllFi Jun 5, 2024
8f37f9f
Update scripts
AllFi Jul 4, 2024
b864c8e
Minor fixes
AllFi Aug 19, 2024
78eb1bd
Fix format
AllFi Aug 19, 2024
8428fa2
Fix format
AllFi Aug 19, 2024
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
1 change: 1 addition & 0 deletions LICENSE-MIT
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
MIT License

Copyright (c) 2021 ZeroPool
Copyright (c) 2019 Matter Labs

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
48 changes: 48 additions & 0 deletions script/scripts/DeployAllowListOperatorManager.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// SPDX-License-Identifier: CC0-1.0

pragma solidity 0.8.15;

import "forge-std/Script.sol";
import {AllowListOperatorManager} from "../../src/zkbob/manager/AllowListOperatorManager.sol";

// TODO: Update this values before the deployment
address constant operatorManagerOwner = 0x14fc6a1a996A2EB889cF86e5c8cD17323bC85290;
address constant zkBobProxy1 = 0x7D2D146a7AD3F0Dc398AA718a9bFCa2Bc873a5FD;
address constant zkBobProxyFeeReceiver1 = 0x7D2D146a7AD3F0Dc398AA718a9bFCa2Bc873a5FD;
address constant zkBobProxy2 = 0xFec49782FE8e11De9Fb3Ba645a76FE914FFfe3cb;
address constant zkBobProxyFeeReceiver2 = 0xFec49782FE8e11De9Fb3Ba645a76FE914FFfe3cb;
address constant zkBobProver1 = 0x33a0b018340d6424870cfC686a4d02e1df792254;
address constant zkBobProverFeeReceiver1 = 0x33a0b018340d6424870cfC686a4d02e1df792254;
address constant zkBobProver2 = 0x63A88E69fa7adEf036fc6ED94394CC9295de2f99;
address constant zkBobProverFeeReceiver2 = 0x63A88E69fa7adEf036fc6ED94394CC9295de2f99;

bool constant allowListEnabled = true;

contract DeployAllowListOperatorManager is Script {
function run() external {
vm.startBroadcast();

address[] memory operators = new address[](4);
operators[0] = zkBobProxy1;
operators[1] = zkBobProver1;
operators[2] = zkBobProxy2;
operators[3] = zkBobProver2;

address[] memory feeReceivers = new address[](4);
feeReceivers[0] = zkBobProxyFeeReceiver1;
feeReceivers[1] = zkBobProverFeeReceiver1;
feeReceivers[2] = zkBobProxyFeeReceiver2;
feeReceivers[3] = zkBobProverFeeReceiver2;

AllowListOperatorManager operatorManager =
new AllowListOperatorManager(operators, feeReceivers, allowListEnabled);

operatorManager.transferOwnership(operatorManagerOwner);

vm.stopBroadcast();

assert(address(operatorManager.owner()) == operatorManagerOwner);

console2.log("AllowListOperatorManager address:", address(operatorManager));
}
}
85 changes: 0 additions & 85 deletions script/scripts/DeployZkBobPoolModules.s.sol

This file was deleted.

58 changes: 42 additions & 16 deletions script/scripts/Env.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ enum PoolType {
}

// common
address constant deployer = 0x39F0bD56c1439a22Ee90b4972c16b7868D161981;
address constant admin = 0xd4a3D9Ca00fa1fD8833D560F9217458E61c446d8;
address constant owner = 0xd4a3D9Ca00fa1fD8833D560F9217458E61c446d8;
address constant deployer = 0x37493bFe9c8c31fAbe8615C988e83D59D1a667a9;
address constant admin = 0x37493bFe9c8c31fAbe8615C988e83D59D1a667a9;
address constant owner = 0x37493bFe9c8c31fAbe8615C988e83D59D1a667a9;
address constant mockImpl = address(0xdead);

// bob
Expand All @@ -23,25 +23,51 @@ address constant bobVanityAddr = address(0xB0B195aEFA3650A6908f15CdaC7D92F8a5791
bytes32 constant bobSalt = bytes32(uint256(285834900769));

// zkbob
uint256 constant zkBobPoolId = 0; // 0 is reserved for Polygon MVP pool, do not use for other deployments
uint256 constant zkBobPoolId = 0xffff0a; // 0 is reserved for Polygon MVP pool, do not use for other deployments
PoolType constant zkBobPoolType = PoolType.BOB;
string constant zkBobVerifiers = "prodV1";
address constant zkBobToken = 0xB0B195aEFA3650A6908f15CdaC7D92F8a5791B0B;
string constant zkBobVerifiers = "stageV2";
address constant zkBobToken = 0x2C74B18e2f84B78ac67428d0c7a9898515f0c46f;
uint256 constant zkBobInitialRoot = 11469701942666298368112882412133877458305516134926649826543144744382391691533;
address constant zkBobRelayer = 0xc2c4AD59B78F4A0aFD0CDB8133E640Db08Fa5b90;
address constant zkBobRelayerFeeReceiver = 0x758768EC473279c4B1Aa61FA5450745340D4B17d;
string constant zkBobRelayerURL = "https://relayer-mvp.zkbob.com";
uint256 constant zkBobPoolCap = 1_000_000 ether;
uint256 constant zkBobDailyDepositCap = 100_000 ether;
uint256 constant zkBobDailyWithdrawalCap = 100_000 ether;
uint256 constant zkBobDailyUserDepositCap = 10_000 ether;
uint256 constant zkBobDepositCap = 10_000 ether;
uint256 constant zkBobDailyUserDirectDepositCap = 0;
uint256 constant zkBobDirectDepositCap = 0;
address constant zkBobProxy = 0xFec49782FE8e11De9Fb3Ba645a76FE914FFfe3cb;
address constant zkBobProxyFeeReceiver = 0xFec49782FE8e11De9Fb3Ba645a76FE914FFfe3cb;
address constant zkBobProver = 0x7D2D146a7AD3F0Dc398AA718a9bFCa2Bc873a5FD;
address constant zkBobProverFeeReceiver = 0x7D2D146a7AD3F0Dc398AA718a9bFCa2Bc873a5FD;
uint256 constant zkBobDirectDepositFee = 0.1 gwei;
uint256 constant zkBobDirectDepositTimeout = 1 days;
address constant permit2 = 0x000000000022D473030F116dDEE9F6B43aC78BA3;

// decentralized
uint64 constant gracePeriod = 3 minutes; // TODO
uint64 constant minTreeUpdateFee = 0.1 gwei;
bool constant allowListEnabled = true;

// accounting
address constant kycManager = address(0);

uint256 constant tier0TvlCap = 2_000_000 gwei;
uint256 constant tier0DailyDepositCap = 300_000 gwei;
uint256 constant tier0DailyWithdrawalCap = 300_000 gwei;
uint256 constant tier0DailyUserDepositCap = 10_000 gwei;
uint256 constant tier0DepositCap = 10_000 gwei;
uint256 constant tier0DailyUserDirectDepositCap = 10_000 gwei;
uint256 constant tier0DirectDepositCap = 1_000 gwei;

uint256 constant tier1TvlCap = 2_000_000 gwei;
uint256 constant tier1DailyDepositCap = 300_000 gwei;
uint256 constant tier1DailyWithdrawalCap = 300_000 gwei;
uint256 constant tier1DailyUserDepositCap = 100_000 gwei;
uint256 constant tier1DepositCap = 100_000 gwei;
uint256 constant tier1DailyUserDirectDepositCap = 10_000 gwei;
uint256 constant tier1DirectDepositCap = 1_000 gwei;

uint256 constant tier254TvlCap = 2_000_000 gwei;
uint256 constant tier254DailyDepositCap = 300_000 gwei;
uint256 constant tier254DailyWithdrawalCap = 300_000 gwei;
uint256 constant tier254DailyUserDepositCap = 20_000 gwei;
uint256 constant tier254DepositCap = 20_000 gwei;
uint256 constant tier254DailyUserDirectDepositCap = 10_000 gwei;
uint256 constant tier254DirectDepositCap = 1_000 gwei;

// new zkbob impl
address constant zkBobPool = 0x72e6B59D4a90ab232e55D4BB7ed2dD17494D62fB;

Expand Down
62 changes: 46 additions & 16 deletions script/scripts/Local.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import "../../test/shared/EIP2470.t.sol";
import "../../src/BobToken.sol";
import "../../src/proxy/EIP1967Proxy.sol";
import "../../src/zkbob/ZkBobPoolBOB.sol";
import "../../src/zkbob/manager/MutableOperatorManager.sol";
import {AllowListOperatorManager} from "../../src/zkbob/manager/AllowListOperatorManager.sol";
import "../../src/zkbob/ZkBobDirectDepositQueue.sol";
import "../../src/zkbob/utils/ZkBobAccounting.sol";

Expand Down Expand Up @@ -45,12 +45,7 @@ contract DeployLocal is Script {
EIP1967Proxy queueProxy = new EIP1967Proxy(tx.origin, mockImpl, "");

ZkBobPoolBOB poolImpl = new ZkBobPoolBOB(
zkBobPoolId,
address(bob),
transferVerifier,
treeVerifier,
batchDepositVerifier,
address(queueProxy)
zkBobPoolId, address(bob), transferVerifier, treeVerifier, batchDepositVerifier, address(queueProxy)
);
{
bytes memory initData = abi.encodeWithSelector(ZkBobPool.initialize.selector, zkBobInitialRoot);
Expand All @@ -64,28 +59,63 @@ contract DeployLocal is Script {

{
ZkBobAccounting accounting = new ZkBobAccounting(address(pool), 1_000_000_000);
if (kycManager != address(0)) {
accounting.setKycProvidersManager(IKycProvidersManager(kycManager));
}
accounting.setLimits(
0,
zkBobPoolCap,
zkBobDailyDepositCap,
zkBobDailyWithdrawalCap,
zkBobDailyUserDepositCap,
zkBobDepositCap,
zkBobDailyUserDirectDepositCap,
zkBobDirectDepositCap
tier0TvlCap,
tier0DailyDepositCap,
tier0DailyWithdrawalCap,
tier0DailyUserDepositCap,
tier0DepositCap,
tier0DailyUserDirectDepositCap,
tier0DirectDepositCap
);
accounting.setLimits(
1,
tier1TvlCap,
tier1DailyDepositCap,
tier1DailyWithdrawalCap,
tier1DailyUserDepositCap,
tier1DepositCap,
tier1DailyUserDirectDepositCap,
tier1DirectDepositCap
);
accounting.setLimits(
254,
tier254TvlCap,
tier254DailyDepositCap,
tier254DailyWithdrawalCap,
tier254DailyUserDepositCap,
tier254DepositCap,
tier254DailyUserDirectDepositCap,
tier254DirectDepositCap
);
pool.setAccounting(accounting);
}

{
IOperatorManager operatorManager =
new MutableOperatorManager(zkBobRelayer, zkBobRelayerFeeReceiver, zkBobRelayerURL);
address[] memory operators = new address[](2);
operators[0] = zkBobProxy;
operators[1] = zkBobProver;

address[] memory feeReceivers = new address[](2);
feeReceivers[0] = zkBobProxyFeeReceiver;
feeReceivers[1] = zkBobProverFeeReceiver;

IOperatorManager operatorManager = new AllowListOperatorManager(operators, feeReceivers, allowListEnabled);
pool.setOperatorManager(operatorManager);
queue.setOperatorManager(operatorManager);
queue.setDirectDepositFee(uint64(zkBobDirectDepositFee));
queue.setDirectDepositTimeout(uint40(zkBobDirectDepositTimeout));
}

{
pool.setGracePeriod(gracePeriod);
pool.setMinTreeUpdateFee(minTreeUpdateFee);
}

{
if (owner != address(0)) {
bob.transferOwnership(owner);
Expand Down
Loading
Loading