Skip to content

Commit

Permalink
feat(protocol): refactor tier providers and added minority-guardian p…
Browse files Browse the repository at this point in the history
…rovers to all providers (#17169)

Co-authored-by: Daniel Wang <[email protected]>
Co-authored-by: dantaik <[email protected]>
Co-authored-by: Daniel Wang <[email protected]>
  • Loading branch information
4 people authored May 15, 2024
1 parent 7cf6cfe commit cd51442
Show file tree
Hide file tree
Showing 20 changed files with 219 additions and 421 deletions.
72 changes: 0 additions & 72 deletions packages/protocol/contract_layout.md
Original file line number Diff line number Diff line change
Expand Up @@ -376,78 +376,6 @@
| __gap | uint256[49] | 202 | 0 | 1568 | contracts/L1/hooks/AssignmentHook.sol:AssignmentHook |
| __gap | uint256[50] | 251 | 0 | 1600 | contracts/L1/hooks/AssignmentHook.sol:AssignmentHook |

## DevnetTierProvider
| Name | Type | Slot | Offset | Bytes | Contract |
|----------------|-------------|------|--------|-------|--------------------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| _initializing | bool | 0 | 1 | 1 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| __gap | uint256[50] | 1 | 0 | 1600 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| _owner | address | 51 | 0 | 20 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| __gap | uint256[49] | 52 | 0 | 1568 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| _pendingOwner | address | 101 | 0 | 20 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| __gap | uint256[49] | 102 | 0 | 1568 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| addressManager | address | 151 | 0 | 20 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| __gap | uint256[49] | 152 | 0 | 1568 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| __reentry | uint8 | 201 | 0 | 1 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| __paused | uint8 | 201 | 1 | 1 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| lastUnpausedAt | uint64 | 201 | 2 | 8 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| __gap | uint256[49] | 202 | 0 | 1568 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |
| __gap | uint256[50] | 251 | 0 | 1600 | contracts/L1/tiers/DevnetTierProvider.sol:DevnetTierProvider |

## TierProviderV1
| Name | Type | Slot | Offset | Bytes | Contract |
|----------------|-------------|------|--------|-------|------------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| _initializing | bool | 0 | 1 | 1 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| __gap | uint256[50] | 1 | 0 | 1600 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| _owner | address | 51 | 0 | 20 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| __gap | uint256[49] | 52 | 0 | 1568 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| _pendingOwner | address | 101 | 0 | 20 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| __gap | uint256[49] | 102 | 0 | 1568 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| addressManager | address | 151 | 0 | 20 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| __gap | uint256[49] | 152 | 0 | 1568 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| __reentry | uint8 | 201 | 0 | 1 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| __paused | uint8 | 201 | 1 | 1 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| lastUnpausedAt | uint64 | 201 | 2 | 8 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| __gap | uint256[49] | 202 | 0 | 1568 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |
| __gap | uint256[50] | 251 | 0 | 1600 | contracts/L1/tiers/TierProviderV1.sol:TierProviderV1 |

## TierProviderV2
| Name | Type | Slot | Offset | Bytes | Contract |
|----------------|-------------|------|--------|-------|------------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| _initializing | bool | 0 | 1 | 1 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| __gap | uint256[50] | 1 | 0 | 1600 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| _owner | address | 51 | 0 | 20 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| __gap | uint256[49] | 52 | 0 | 1568 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| _pendingOwner | address | 101 | 0 | 20 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| __gap | uint256[49] | 102 | 0 | 1568 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| addressManager | address | 151 | 0 | 20 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| __gap | uint256[49] | 152 | 0 | 1568 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| __reentry | uint8 | 201 | 0 | 1 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| __paused | uint8 | 201 | 1 | 1 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| lastUnpausedAt | uint64 | 201 | 2 | 8 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| __gap | uint256[49] | 202 | 0 | 1568 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |
| __gap | uint256[50] | 251 | 0 | 1600 | contracts/L1/tiers/TierProviderV2.sol:TierProviderV2 |

## TierProviderV3
| Name | Type | Slot | Offset | Bytes | Contract |
|----------------|-------------|------|--------|-------|------------------------------------------------------|
| _initialized | uint8 | 0 | 0 | 1 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| _initializing | bool | 0 | 1 | 1 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| __gap | uint256[50] | 1 | 0 | 1600 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| _owner | address | 51 | 0 | 20 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| __gap | uint256[49] | 52 | 0 | 1568 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| _pendingOwner | address | 101 | 0 | 20 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| __gap | uint256[49] | 102 | 0 | 1568 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| addressManager | address | 151 | 0 | 20 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| __gap | uint256[49] | 152 | 0 | 1568 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| __reentry | uint8 | 201 | 0 | 1 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| __paused | uint8 | 201 | 1 | 1 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| lastUnpausedAt | uint64 | 201 | 2 | 8 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| __gap | uint256[49] | 202 | 0 | 1568 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |
| __gap | uint256[50] | 251 | 0 | 1600 | contracts/L1/tiers/TierProviderV3.sol:TierProviderV3 |

## ERC20Airdrop
| Name | Type | Slot | Offset | Bytes | Contract |
|----------------|--------------------------|------|--------|-------|------------------------------------------------------|
Expand Down
46 changes: 5 additions & 41 deletions packages/protocol/contracts/L1/tiers/DevnetTierProvider.sol
Original file line number Diff line number Diff line change
@@ -1,54 +1,18 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import "../../common/EssentialContract.sol";
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 EssentialContract, ITierProvider {
uint256[50] private __gap;

/// @notice Initializes the contract.
/// @param _owner The owner of this contract. msg.sender will be used if this value is zero.
function init(address _owner) external initializer {
__Essential_init(_owner);
}

/// @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) {
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[](2);
tiers_ = new uint16[](3);
tiers_[0] = LibTiers.TIER_OPTIMISTIC;
tiers_[1] = LibTiers.TIER_GUARDIAN;
tiers_[1] = LibTiers.TIER_GUARDIAN_MINORITY;
tiers_[2] = LibTiers.TIER_GUARDIAN;
}

/// @inheritdoc ITierProvider
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,28 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

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

/// @title HeklaTierProvider
/// @dev Labeled in AddressResolver as "tier_provider"
/// @title TierProviderBase
/// @custom:security-contact [email protected]
contract HeklaTierProvider is EssentialContract, ITierProvider {
uint256[50] private __gap;

/// @notice Initializes the contract.
/// @param _owner The owner of this contract. msg.sender will be used if this value is zero.
function init(address _owner) external initializer {
__Essential_init(_owner);
}

abstract contract TierProviderBase is ITierProvider {
/// @inheritdoc ITierProvider
function getTier(uint16 _tierId) public pure override returns (ITierProvider.Tier memory) {
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: 30, // 0.5 hours
maxBlocksToVerifyPerProof: 12
maxBlocksToVerifyPerProof: 16
});
}

Expand All @@ -41,6 +37,28 @@ contract HeklaTierProvider is EssentialContract, ITierProvider {
});
}

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,
Expand All @@ -54,18 +72,4 @@ contract HeklaTierProvider is EssentialContract, ITierProvider {

revert TIER_NOT_FOUND();
}

/// @inheritdoc ITierProvider
function getTierIds() public pure override returns (uint16[] memory tiers_) {
tiers_ = new uint16[](3);
tiers_[0] = LibTiers.TIER_OPTIMISTIC;
tiers_[1] = LibTiers.TIER_SGX;
tiers_[2] = LibTiers.TIER_GUARDIAN;
}

/// @inheritdoc ITierProvider
function getMinTier(uint256 _rand) public pure override returns (uint16) {
// All blocks require SGX proofs.
return LibTiers.TIER_SGX;
}
}
52 changes: 2 additions & 50 deletions packages/protocol/contracts/L1/tiers/TierProviderV2.sol
Original file line number Diff line number Diff line change
@@ -1,60 +1,12 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import "../../common/EssentialContract.sol";
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 EssentialContract, ITierProvider {
uint256[50] private __gap;

/// @notice Initializes the contract.
/// @param _owner The owner of this contract. msg.sender will be used if this value is zero.
function init(address _owner) external initializer {
__Essential_init(_owner);
}

/// @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
63 changes: 2 additions & 61 deletions packages/protocol/contracts/L1/tiers/TierProviderV3.sol
Original file line number Diff line number Diff line change
@@ -1,71 +1,12 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.24;

import "../../common/EssentialContract.sol";
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 EssentialContract, ITierProvider {
uint256[50] private __gap;

/// @notice Initializes the contract.
/// @param _owner The owner of this contract. msg.sender will be used if this value is zero.
function init(address _owner) external initializer {
__Essential_init(_owner);
}

/// @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
4 changes: 0 additions & 4 deletions packages/protocol/deployments/gen-layouts.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,6 @@ contracts=(
"BridgedERC721"
"BridgedERC1155"
"AssignmentHook"
"DevnetTierProvider"
"TierProviderV1"
"TierProviderV2"
"TierProviderV3"
"ERC20Airdrop"
"AutomataDcapV3Attestation"
"SgxVerifier"
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
Loading

0 comments on commit cd51442

Please sign in to comment.