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

feat(protocol): refactor tier providers and added minority-guardian provers to all providers #17169

Merged
merged 15 commits into from
May 15, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
fix
  • Loading branch information
dantaik committed May 15, 2024
commit 1ea58a01c3dd64dc81b8cd7a559626b4dcd304a8
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: The network configuration page describes many of the configuration

## Tier configuration

You can view the full `TierProviderV1` tier configuration [here](https://github.com/taikoxyz/taiko-mono/blob/main/packages/protocol/contracts/L1/tiers/TierProviderV1.sol):
You can view the full `TestTierProvider` tier configuration [here](https://github.com/taikoxyz/taiko-mono/blob/main/packages/protocol/contracts/L1/TestTierProvider.sol):

Here is a diagram of the proof tier configuration:

Expand Down
863 changes: 443 additions & 420 deletions packages/protocol/contract_layout.md

Large diffs are not rendered by default.

43 changes: 2 additions & 41 deletions packages/protocol/contracts/L1/tiers/DevnetTierProvider.sol
Original file line number Diff line number Diff line change
@@ -1,51 +1,12 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import "../../common/LibStrings.sol";
import "./ITierProvider.sol";
import "./TierProviderBase.sol";

/// @title DevnetTierProvider
/// @dev Labeled in AddressResolver as "tier_provider"
/// @custom:security-contact [email protected]
contract DevnetTierProvider is ITierProvider {
/// @inheritdoc ITierProvider
function getTier(uint16 _tierId) public pure override returns (ITierProvider.Tier memory) {
if (_tierId == LibTiers.TIER_OPTIMISTIC) {
return ITierProvider.Tier({
verifierName: "",
validityBond: 250 ether, // TKO
contestBond: 500 ether, // TKO
cooldownWindow: 1440, //24 hours
provingWindow: 120, // 2 hours
maxBlocksToVerifyPerProof: 16
});
}

if (_tierId == LibTiers.TIER_GUARDIAN_MINORITY) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_GUARDIAN_MINORITY,
validityBond: 500 ether, // TKO
contestBond: 3280 ether, // =500TKO * 6.5625
cooldownWindow: 60, //1 hours
provingWindow: 2880, // 48 hours
maxBlocksToVerifyPerProof: 16
});
}

if (_tierId == LibTiers.TIER_GUARDIAN) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_GUARDIAN,
validityBond: 0, // must be 0 for top tier
contestBond: 0, // must be 0 for top tier
cooldownWindow: 60, //1 hours
provingWindow: 2880, // 48 hours
maxBlocksToVerifyPerProof: 16
});
}

revert TIER_NOT_FOUND();
}

contract DevnetTierProvider is TierProviderBase {
/// @inheritdoc ITierProvider
function getTierIds() public pure override returns (uint16[] memory tiers_) {
tiers_ = new uint16[](3);
Expand Down
75 changes: 75 additions & 0 deletions packages/protocol/contracts/L1/tiers/TierProviderBase.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import "../../common/LibStrings.sol";
import "./ITierProvider.sol";

/// @title TierProviderBase
/// @custom:security-contact [email protected]
abstract contract TierProviderBase is ITierProvider {
/// @inheritdoc ITierProvider
function getTier(uint16 _tierId)
public
pure
virtual
override
returns (ITierProvider.Tier memory)
{
if (_tierId == LibTiers.TIER_OPTIMISTIC) {
return ITierProvider.Tier({
verifierName: "",
validityBond: 250 ether, // TKO
contestBond: 500 ether, // TKO
cooldownWindow: 1440, //24 hours
provingWindow: 120, // 2 hours
maxBlocksToVerifyPerProof: 16
});
}

if (_tierId == LibTiers.TIER_SGX) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_SGX,
validityBond: 250 ether, // TKO
contestBond: 1640 ether, // =250TKO * 6.5625
cooldownWindow: 1440, //24 hours
provingWindow: 60, // 1 hours
maxBlocksToVerifyPerProof: 8
});
}

if (_tierId == LibTiers.TIER_SGX_ZKVM) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_SGX_ZKVM,
validityBond: 500 ether, // TKO
contestBond: 3280 ether, // =500TKO * 6.5625
cooldownWindow: 1440, //24 hours
provingWindow: 240, // 4 hours
maxBlocksToVerifyPerProof: 4
});
}

if (_tierId == LibTiers.TIER_GUARDIAN_MINORITY) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_GUARDIAN_MINORITY,
validityBond: 500 ether, // TKO
contestBond: 3280 ether, // =500TKO * 6.5625
cooldownWindow: 1440, //24 hours
provingWindow: 2880, // 48 hours
maxBlocksToVerifyPerProof: 16
});
}

if (_tierId == LibTiers.TIER_GUARDIAN) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_GUARDIAN,
validityBond: 0, // must be 0 for top tier
contestBond: 0, // must be 0 for top tier
cooldownWindow: 60, //1 hours
provingWindow: 2880, // 48 hours
maxBlocksToVerifyPerProof: 16
});
}

revert TIER_NOT_FOUND();
}
}
43 changes: 2 additions & 41 deletions packages/protocol/contracts/L1/tiers/TierProviderV2.sol
Original file line number Diff line number Diff line change
@@ -1,51 +1,12 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import "../../common/LibStrings.sol";
import "./ITierProvider.sol";
import "./TierProviderBase.sol";

/// @title TierProviderV2
/// @dev Labeled in AddressResolver as "tier_provider"
/// @custom:security-contact [email protected]
contract TierProviderV2 is ITierProvider {
/// @inheritdoc ITierProvider
function getTier(uint16 _tierId) public pure override returns (ITierProvider.Tier memory) {
if (_tierId == LibTiers.TIER_SGX) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_SGX,
validityBond: 250 ether, // TKO
contestBond: 1640 ether, // =250TKO * 6.5625
cooldownWindow: 1440, //24 hours
provingWindow: 60, // 1 hours
maxBlocksToVerifyPerProof: 8
});
}

if (_tierId == LibTiers.TIER_GUARDIAN_MINORITY) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_GUARDIAN_MINORITY,
validityBond: 500 ether, // TKO
contestBond: 3280 ether, // =500TKO * 6.5625
cooldownWindow: 60, //1 hours
provingWindow: 2880, // 48 hours
maxBlocksToVerifyPerProof: 16
});
}

if (_tierId == LibTiers.TIER_GUARDIAN) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_GUARDIAN,
validityBond: 0, // must be 0 for top tier
contestBond: 0, // must be 0 for top tier
cooldownWindow: 60, //1 hours
provingWindow: 2880, // 48 hours
maxBlocksToVerifyPerProof: 16
});
}

revert TIER_NOT_FOUND();
}

contract TierProviderV2 is TierProviderBase {
/// @inheritdoc ITierProvider
function getTierIds() public pure override returns (uint16[] memory tiers_) {
tiers_ = new uint16[](3);
Expand Down
54 changes: 2 additions & 52 deletions packages/protocol/contracts/L1/tiers/TierProviderV3.sol
Original file line number Diff line number Diff line change
@@ -1,62 +1,12 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import "../../common/LibStrings.sol";
import "./ITierProvider.sol";
import "./TierProviderBase.sol";

/// @title TierProviderV3
/// @dev Labeled in AddressResolver as "tier_provider"
/// @custom:security-contact [email protected]
contract TierProviderV3 is ITierProvider {
/// @inheritdoc ITierProvider
function getTier(uint16 _tierId) public pure override returns (ITierProvider.Tier memory) {
if (_tierId == LibTiers.TIER_SGX) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_SGX,
validityBond: 250 ether, // TKO
contestBond: 1640 ether, // =250TKO * 6.5625
cooldownWindow: 1440, //24 hours
provingWindow: 60, // 1 hours
maxBlocksToVerifyPerProof: 8
});
}

if (_tierId == LibTiers.TIER_SGX_ZKVM) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_SGX_ZKVM,
validityBond: 500 ether, // TKO
contestBond: 3280 ether, // =500TKO * 6.5625
cooldownWindow: 1440, //24 hours
provingWindow: 240, // 4 hours
maxBlocksToVerifyPerProof: 4
});
}

if (_tierId == LibTiers.TIER_GUARDIAN_MINORITY) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_GUARDIAN_MINORITY,
validityBond: 500 ether, // TKO
contestBond: 3280 ether, // =500TKO * 6.5625
cooldownWindow: 60, //1 hours
provingWindow: 2880, // 48 hours
maxBlocksToVerifyPerProof: 16
});
}

if (_tierId == LibTiers.TIER_GUARDIAN) {
return ITierProvider.Tier({
verifierName: LibStrings.B_TIER_GUARDIAN,
validityBond: 0, // must be 0 for top tier
contestBond: 0, // must be 0 for top tier
cooldownWindow: 60, //1 hours
provingWindow: 2880, // 48 hours
maxBlocksToVerifyPerProof: 16
});
}

revert TIER_NOT_FOUND();
}

contract TierProviderV3 is TierProviderBase {
/// @inheritdoc ITierProvider
function getTierIds() public pure override returns (uint16[] memory tiers_) {
tiers_ = new uint16[](4);
Expand Down
2 changes: 1 addition & 1 deletion packages/protocol/deployments/gen-layouts.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ contracts=(
"BridgedERC1155"
"AssignmentHook"
"DevnetTierProvider"
"TierProviderV1"
"TestTierProvider"
"TierProviderV2"
"TierProviderV3"
"ERC20Airdrop"
Expand Down
2 changes: 1 addition & 1 deletion packages/protocol/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
"eslint-plugin-promise": "^6.1.1",
"ethers": "^5.7.2",
"solc": "0.8.24",
"solhint": "^4.5.4",
"solhint": "^5.0.1",
"ts-node": "^10.9.2",
"typescript": "^5.2.2"
},
Expand Down
6 changes: 3 additions & 3 deletions packages/protocol/script/DeployOnL1.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import "../contracts/tko/TaikoToken.sol";
import "../contracts/L1/TaikoL1.sol";
import "../contracts/L1/provers/GuardianProver.sol";
import "../contracts/L1/tiers/DevnetTierProvider.sol";
import "../contracts/L1/tiers/TierProviderV1.sol";
import "../contracts/L1/tiers/TierProviderV2.sol";
import "../contracts/L1/hooks/AssignmentHook.sol";
import "../contracts/bridge/Bridge.sol";
Expand All @@ -25,6 +24,7 @@ import "../contracts/automata-attestation/lib/PEMCertChainLib.sol";
import "../contracts/verifiers/SgxVerifier.sol";
import "../test/common/erc20/FreeMintERC20.sol";
import "../test/common/erc20/MayFailFreeMintERC20.sol";
import "../test/L1/TestTierProvider.sol";
import "../test/DeployCapability.sol";

// Actually this one is deployed already on mainnet, but we are now deploying our own (non via-ir)
Expand Down Expand Up @@ -303,7 +303,7 @@ contract DeployOnL1 is DeployCapability {

register(rollupAddressManager, "tier_guardian_minority", guardianProverMinority);
register(rollupAddressManager, "tier_guardian", guardianProver);
register(rollupAddressManager, "tier_provider", address(new TierProviderV1()));
register(rollupAddressManager, "tier_provider", address(new TestTierProvider()));

address[] memory guardians = vm.envAddress("GUARDIAN_PROVERS", ",");

Expand Down Expand Up @@ -341,7 +341,7 @@ contract DeployOnL1 is DeployCapability {
if (keccak256(abi.encode(tierProviderName)) == keccak256(abi.encode("devnet"))) {
return address(new DevnetTierProvider());
} else if (keccak256(abi.encode(tierProviderName)) == keccak256(abi.encode("testnet"))) {
return address(new TierProviderV1());
return address(new TestTierProvider());
} else if (keccak256(abi.encode(tierProviderName)) == keccak256(abi.encode("mainnet"))) {
return address(new TierProviderV2());
} else {
Expand Down
5 changes: 2 additions & 3 deletions packages/protocol/script/upgrade/UpgradeTierProvider.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,15 @@
pragma solidity 0.8.24;

import "../../test/DeployCapability.sol";
import "../../contracts/L1/tiers/ITierProvider.sol";
import "../../contracts/L1/tiers/TierProviderV1.sol";
import "../../test/L1/TestTierProvider.sol";

contract UpgradeTierProvider is DeployCapability {
uint256 public privateKey = vm.envUint("PRIVATE_KEY");
address public addressManager = vm.envAddress("ADDRESS_MANAGER_ADDRESS");

function run() external {
vm.startBroadcast(privateKey);
address impl = address(new TierProviderV1());
address impl = address(new TestTierProvider());
AddressManager(addressManager).setAddress(uint64(block.chainid), "tier_provider", impl);
vm.stopBroadcast();
console2.log("> tier_provider@", addressManager);
Expand Down
4 changes: 2 additions & 2 deletions packages/protocol/test/L1/TaikoL1TestBase.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ abstract contract TaikoL1TestBase is TaikoTest {
RiscZeroVerifier public rv;
SgxVerifier public sv;
GuardianProver public gp;
TierProviderV1 public cp;
TestTierProvider public cp;
Bridge public bridge;

bytes32 public GENESIS_BLOCK_HASH = keccak256("GENESIS_BLOCK_HASH");
Expand Down Expand Up @@ -74,7 +74,7 @@ abstract contract TaikoL1TestBase is TaikoTest {

setupGuardianProverMultisig();

cp = new TierProviderV1();
cp = new TestTierProvider();

bridge = Bridge(
payable(
Expand Down
Loading