Skip to content

Commit

Permalink
feat: sync eigen SC (#54)
Browse files Browse the repository at this point in the history
* separate EvidenceVerifier

* whitelist

* eigen sync

* fix build

* fix deploy script
  • Loading branch information
cool-develope authored Jan 25, 2024
1 parent 039ceee commit f4014c2
Show file tree
Hide file tree
Showing 39 changed files with 605 additions and 749 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,9 @@ deploy-eigen-public: generate-accounts deploy-weth9 update-strategy-config deplo

all-mock: run-geth init-accounts deploy-mock deploy-lagrange update-config add-quorum deploy-register init-committee

all-native: run-geth init-accounts deploy-weth9 deploy-mock deploy-lagrange deploy-verifiers update-config add-quorum deposit-stake deploy-register init-committee
all-native: run-geth init-accounts deploy-weth9 deploy-lagrange deploy-verifiers update-config add-quorum deposit-stake deploy-register init-committee

deploy-native: generate-accounts deploy-weth9 deploy-mock deploy-lagrange deploy-verifiers update-config add-quorum distribute deposit-stake deploy-register init-committee
deploy-native: generate-accounts deploy-weth9 deploy-lagrange deploy-verifiers update-config add-quorum distribute deploy-register init-committee

deploy-staging: run-geth init-accounts generate-accounts deploy-weth9 deploy-mock deploy-lagrange deploy-verifiers update-config add-quorum deposit-stake deploy-register init-committee

Expand Down
9 changes: 1 addition & 8 deletions config/LagrangeService.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
{
"strategies": [
{
"strategy_address": "0xf32358f5C8FFfCF1a7bDb58b270a082abb7Ba1A6",
"strategy_name": "Wrapped Ether",
"multiplier": 1000000000
}
],
"tokens": [
{
"token_name": "mantle",
Expand All @@ -31,6 +24,6 @@
"opt_l2outputoracle": "0x4200000000000000000000000000000000000016",
"arb_outbox": "0x45Af9Ed1D03703e480CE7d328fB684bb67DA5049"
},
"isNative": false,
"isNative": true,
"isMock": false
}
80 changes: 40 additions & 40 deletions config/operators.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,28 +27,28 @@
"0x9750901b0ded0603e9be4a56315fe1487d4afc7ec05e3fc75fe6c568d52bea1b"
],
"bls_pub_keys": [
"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb",
"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e",
"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224",
"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60",
"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc",
"0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909",
"0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7",
"0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf",
"0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793",
"0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed"
"0x2d6c60e91f6f4026d3637018d1b66636090a16ace9595d52e01381649f5a8bfb086ce92c7caece1b8efad25e5e23332771080c87c38ebe2805cd57d008980693",
"0x0dae9aed87b0ff66b31048db9e82093c0288c1c20f197501ba1fb53b60aba57c1bb9d89335453c4516dc6c347949c9cfcb0cc1158ffb43204cd0912e3443dd76",
"0x2b67946b6e46b37d20e0c5ce176510853fcc1a4c1f07764b151c83cc0da17ac92dbaf767b87e784aecec6eb6f381f92bf4e644c811d2d7bf9f1de5a605cf5e77",
"0x26b50c3dea350fb3b858176b574363fb999f6da9685fe3744e8f47c7105d942a254db1ae26337cd18ed4ba677e18e0a243f5c66256aa966c0be4920646ae3b98",
"0x30412c83900a7551181148b2e98b72270b673f90b1e4b3229632ed0e855578381d75c79b2229695fa1ce1de76cd028e684675cd533f2a3fa5056ab52672c8bce",
"0x26b6e450feda517cbb7ce82c64607e313cd2dce6ad55bbf3ce284a47d0b6430602816cbfc6d883b5833b9ca35e82179366fc5c9e220d4893b72448ae325b261c",
"0x042ece3f4b0c47649f8d5319280472bfa29faba85b1b83dea9ea7cb5750da63a14fd9437ac57274b51b45db0ddab402ff7449f3981e17dc1bb39a19e65f1377f",
"0x108e959127d84f3b3ac3140f1043f88f95f3359e03e42a6618f24497e977f2c61ecf2f5b94480621305c683cabd64e1229b3e6fe3f57b779e0ef3770f891f54a",
"0x0b48f15b5e6ef9a1f5534c8cbb6044c6be2548f531ecf00dd30b38b912611b280ee4b5dee4d3b1776ee6d401f8c23fa323b822515311d878d8da2296540a357c",
"0x128d711905ffb24ae2796f21951665184b29c840d515804f7a90270922e94ef70c347f0c9fd1ce0ced23a14d643101dfac6dc9b8c9bbaf69d8ff1fe23dd772b3"
],
"bls_priv_keys": [
"0x0000000000000000000000000000000000000000000000000000000000000001",
"0x0000000000000000000000000000000000000000000000000000000000000002",
"0x0000000000000000000000000000000000000000000000000000000000000003",
"0x0000000000000000000000000000000000000000000000000000000000000004",
"0x0000000000000000000000000000000000000000000000000000000000000005",
"0x0000000000000000000000000000000000000000000000000000000000000006",
"0x0000000000000000000000000000000000000000000000000000000000000007",
"0x0000000000000000000000000000000000000000000000000000000000000008",
"0x0000000000000000000000000000000000000000000000000000000000000009",
"0x000000000000000000000000000000000000000000000000000000000000000a"
"0x00000000000000000000000000000000000000000000000000000000499602d3",
"0x00000000000000000000000000000000000000000000000000000000499602d4",
"0x00000000000000000000000000000000000000000000000000000000499602d5",
"0x00000000000000000000000000000000000000000000000000000000499602d6",
"0x00000000000000000000000000000000000000000000000000000000499602d7",
"0x00000000000000000000000000000000000000000000000000000000499602d8",
"0x00000000000000000000000000000000000000000000000000000000499602d9",
"0x00000000000000000000000000000000000000000000000000000000499602da",
"0x00000000000000000000000000000000000000000000000000000000499602db",
"0x00000000000000000000000000000000000000000000000000000000499602dc"
]
},
{
Expand Down Expand Up @@ -79,28 +79,28 @@
"0x9750901b0ded0603e9be4a56315fe1487d4afc7ec05e3fc75fe6c568d52bea1b"
],
"bls_pub_keys": [
"0x97f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb",
"0xa572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e",
"0x89ece308f9d1f0131765212deca99697b112d61f9be9a5f1f3780a51335b3ff981747a0b2ca2179b96d2c0c9024e5224",
"0xac9b60d5afcbd5663a8a44b7c5a02f19e9a77ab0a35bd65809bb5c67ec582c897feb04decc694b13e08587f3ff9b5b60",
"0xb0e7791fb972fe014159aa33a98622da3cdc98ff707965e536d8636b5fcc5ac7a91a8c46e59a00dca575af0f18fb13dc",
"0xa6e82f6da4520f85c5d27d8f329eccfa05944fd1096b20734c894966d12a9e2a9a9744529d7212d33883113a0cadb909",
"0xb928f3beb93519eecf0145da903b40a4c97dca00b21f12ac0df3be9116ef2ef27b2ae6bcd4c5bc2d54ef5a70627efcb7",
"0xa85ae765588126f5e860d019c0e26235f567a9c0c0b2d8ff30f3e8d436b1082596e5e7462d20f5be3764fd473e57f9cf",
"0x99cdf3807146e68e041314ca93e1fee0991224ec2a74beb2866816fd0826ce7b6263ee31e953a86d1b72cc2215a57793",
"0xaf81da25ecf1c84b577fefbedd61077a81dc43b00304015b2b596ab67f00e41c86bb00ebd0f90d4b125eb0539891aeed"
"0x2d6c60e91f6f4026d3637018d1b66636090a16ace9595d52e01381649f5a8bfb086ce92c7caece1b8efad25e5e23332771080c87c38ebe2805cd57d008980693",
"0x0dae9aed87b0ff66b31048db9e82093c0288c1c20f197501ba1fb53b60aba57c1bb9d89335453c4516dc6c347949c9cfcb0cc1158ffb43204cd0912e3443dd76",
"0x2b67946b6e46b37d20e0c5ce176510853fcc1a4c1f07764b151c83cc0da17ac92dbaf767b87e784aecec6eb6f381f92bf4e644c811d2d7bf9f1de5a605cf5e77",
"0x26b50c3dea350fb3b858176b574363fb999f6da9685fe3744e8f47c7105d942a254db1ae26337cd18ed4ba677e18e0a243f5c66256aa966c0be4920646ae3b98",
"0x30412c83900a7551181148b2e98b72270b673f90b1e4b3229632ed0e855578381d75c79b2229695fa1ce1de76cd028e684675cd533f2a3fa5056ab52672c8bce",
"0x26b6e450feda517cbb7ce82c64607e313cd2dce6ad55bbf3ce284a47d0b6430602816cbfc6d883b5833b9ca35e82179366fc5c9e220d4893b72448ae325b261c",
"0x042ece3f4b0c47649f8d5319280472bfa29faba85b1b83dea9ea7cb5750da63a14fd9437ac57274b51b45db0ddab402ff7449f3981e17dc1bb39a19e65f1377f",
"0x108e959127d84f3b3ac3140f1043f88f95f3359e03e42a6618f24497e977f2c61ecf2f5b94480621305c683cabd64e1229b3e6fe3f57b779e0ef3770f891f54a",
"0x0b48f15b5e6ef9a1f5534c8cbb6044c6be2548f531ecf00dd30b38b912611b280ee4b5dee4d3b1776ee6d401f8c23fa323b822515311d878d8da2296540a357c",
"0x128d711905ffb24ae2796f21951665184b29c840d515804f7a90270922e94ef70c347f0c9fd1ce0ced23a14d643101dfac6dc9b8c9bbaf69d8ff1fe23dd772b3"
],
"bls_priv_keys": [
"0x0000000000000000000000000000000000000000000000000000000000000001",
"0x0000000000000000000000000000000000000000000000000000000000000002",
"0x0000000000000000000000000000000000000000000000000000000000000003",
"0x0000000000000000000000000000000000000000000000000000000000000004",
"0x0000000000000000000000000000000000000000000000000000000000000005",
"0x0000000000000000000000000000000000000000000000000000000000000006",
"0x0000000000000000000000000000000000000000000000000000000000000007",
"0x0000000000000000000000000000000000000000000000000000000000000008",
"0x0000000000000000000000000000000000000000000000000000000000000009",
"0x000000000000000000000000000000000000000000000000000000000000000a"
"0x00000000000000000000000000000000000000000000000000000000499602d3",
"0x00000000000000000000000000000000000000000000000000000000499602d4",
"0x00000000000000000000000000000000000000000000000000000000499602d5",
"0x00000000000000000000000000000000000000000000000000000000499602d6",
"0x00000000000000000000000000000000000000000000000000000000499602d7",
"0x00000000000000000000000000000000000000000000000000000000499602d8",
"0x00000000000000000000000000000000000000000000000000000000499602d9",
"0x00000000000000000000000000000000000000000000000000000000499602da",
"0x00000000000000000000000000000000000000000000000000000000499602db",
"0x00000000000000000000000000000000000000000000000000000000499602dc"
]
}
]
37 changes: 17 additions & 20 deletions contracts/interfaces/ILagrangeCommittee.sol
Original file line number Diff line number Diff line change
@@ -1,43 +1,40 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.12;

struct OperatorStatus {
uint256 amount;
uint256[2] blsPubKey;
bool slashed;
uint32 serveUntilBlock;
uint32[] subscribedChains;
uint256 unsubscribedBlockNumber;
// ChainID => Block Number which can be unsubscribable
mapping(uint32 => uint256) unsubscribedChains;
}

interface ILagrangeCommittee {
struct UnsubscribedParam {
uint32 chainID;
uint256 blockNumber;
}

struct OperatorStatus {
uint256[2] blsPubKey;
uint8 subscribedChainCount;
// ChainID => VotingPower
mapping(uint32 => uint96) subscribedChains;
UnsubscribedParam[] unsubscribedParams;
}

struct CommitteeDef {
uint256 startBlock;
uint256 duration;
uint256 freezeDuration;
uint8 quorumNumber;
}

struct CommitteeData {
bytes32 root;
uint256 height;
uint256 leafCount;
uint256 totalVotingPower;
}

function getServeUntilBlock(address operator) external returns (uint32);

function getSlashed(address operator) external returns (bool);

function getCommittee(uint32 chainID, uint256 blockNumber) external returns (CommitteeData memory, bytes32);

function addOperator(address operator, uint256[2] memory blsPubKey, uint32 serveUntilBlock) external;

function freezeOperator(address operator) external;
function addOperator(address operator, uint256[2] memory blsPubKey) external;

function isLocked(uint32 chainID) external returns (bool, uint256);

function updateOperatorAmount(address operator) external;
function updateOperatorAmount(address operator, uint32 chainID) external;

function subscribeChain(address operator, uint32 chainID) external;

Expand Down
12 changes: 11 additions & 1 deletion contracts/interfaces/ILagrangeService.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,17 @@
pragma solidity ^0.8.12;

interface ILagrangeService {
function register(uint256[2] memory _blsPubKey, uint32 serveUntilBlock) external;
function addOperatorsToWhitelist(address[] calldata operators) external;

function removeOperatorsFromWhitelist(address[] calldata operators) external;

function register(uint256[2] memory _blsPubKey) external;

function subscribe(uint32 chainID) external;

function unsubscribe(uint32 chainID) external;

function deregister() external;

function owner() external view returns (address);
}
31 changes: 0 additions & 31 deletions contracts/interfaces/IServiceManager.sol

This file was deleted.

16 changes: 9 additions & 7 deletions contracts/interfaces/IStakeManager.sol
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.12;

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

interface IStakeManager {
function freezeOperator(address toBeFrozen) external;
function deposit(IERC20 token, uint256 amount) external;

function resetFrozenStatus(address[] calldata frozenAddresses) external;
function withdraw(IERC20 token, uint256 amount) external;

function recordFirstStakeUpdate(address operator, uint32 serveUntilBlock) external;
function lockStakeUntil(address operator, uint256 serveUntilBlock) external;

function recordStakeUpdate(address operator, uint32 updateBlock, uint32 serveUntilBlock, uint256 insertAfter)
external;
function operatorShares(address operator, address token) external view returns (uint256);

function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) external;
// future use for slashing
function freezeOperator(address toBeFrozen) external;

function isFrozen(address staker) external view returns (bool);
function resetFrozenStatus(address[] calldata frozenAddresses) external;
}
11 changes: 10 additions & 1 deletion contracts/interfaces/IVoteWeigher.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,16 @@
pragma solidity ^0.8.12;

interface IVoteWeigher {
function serviceManager() external view returns (address);
struct TokenMultiplier {
address token;
uint96 multiplier;
}

function addQuorumMultiplier(uint8 quorumNumber, TokenMultiplier[] memory multipliers) external;

function removeQuorumMultiplier(uint8 quorumNumber) external;

function updateQuorumMultiplier(uint8 quorumNumber, uint256 index, TokenMultiplier memory multiplier) external;

function weightOfOperator(uint8 quorumNumber, address operator) external returns (uint96);
}
54 changes: 54 additions & 0 deletions contracts/library/EigenAdapter.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.12;

import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol";
import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {IDelegationManager} from "eigenlayer-contracts/src/contracts/interfaces/IDelegationManager.sol";
import {IStrategy} from "eigenlayer-contracts/src/contracts/interfaces/IStrategy.sol";

import {IStakeManager} from "../interfaces/IStakeManager.sol";

contract EigenAdapter is Initializable, OwnableUpgradeable, IStakeManager {
// future use
mapping(address => bool) public freezeOperators;

address public immutable service;
IDelegationManager public immutable delegationManager;

modifier onlyService() {
require(msg.sender == service, "Only service manager can call this function.");
_;
}

constructor(address _service, IDelegationManager _delegationManager) {
service = _service;
delegationManager = _delegationManager;
_disableInitializers();
}

function initialize(address initialOwner) external initializer {
_transferOwnership(initialOwner);
}

function deposit(IERC20 token, uint256 amount) external pure {}

function withdraw(IERC20 token, uint256 amount) external pure {}

function lockStakeUntil(address operator, uint256 serveUntilBlock) external pure {}

function operatorShares(address operator, address token) external view returns (uint256) {
return delegationManager.operatorShares(operator, IStrategy(token));
}

// future use for slashing
function resetFrozenStatus(address[] calldata frozenAddresses) external onlyOwner {
// for (uint256 i = 0; i < frozenAddresses.length; i++) {
// freezeOperators[frozenAddresses[i]] = false;
// }
}

function freezeOperator(address operator) external onlyService {
// freezeOperators[operator] = true;
}
}
Loading

0 comments on commit f4014c2

Please sign in to comment.