Skip to content

Commit

Permalink
Merge branch 'feature/SKALE-1642-delegation' of https://github.com/sk…
Browse files Browse the repository at this point in the history
…alenetwork/skale-manager into feature/SKALE-215-safemath
  • Loading branch information
yavrsky committed Feb 11, 2020
2 parents 5b924e5 + 54487fe commit da0374f
Show file tree
Hide file tree
Showing 77 changed files with 2,598 additions and 1,416 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Expand Up @@ -47,3 +47,7 @@ coverage.json

# Typescript staff
types/

# OpenZeppelin
.openzeppelin/dev-*.json
.openzeppelin/.session
45 changes: 45 additions & 0 deletions .openzeppelin/project.json
@@ -0,0 +1,45 @@
{
"manifestVersion": "2.2",
"contracts": {
"DelegationController": "DelegationController",
"DelegationPeriodManager": "DelegationPeriodManager",
"DelegationRequestManager": "DelegationRequestManager",
"DelegationService": "DelegationService",
"Distributor": "Distributor",
"SkaleBalances": "SkaleBalances",
"TimeHelpers": "TimeHelpers",
"TokenSaleManager": "TokenSaleManager",
"TokenState": "TokenState",
"ValidatorService": "ValidatorService",
"ContractManager": "ContractManager",
"ConstantsHolder": "ConstantsHolder",
"NodesData": "NodesData",
"NodesFunctionality": "NodesFunctionality",
"MonitorsData": "MonitorsData",
"MonitorsFunctionality": "MonitorsFunctionality",
"SchainsData": "SchainsData",
"SchainsFunctionality": "SchainsFunctionality",
"SchainsFunctionalityInternal": "SchainsFunctionalityInternal",
"Decryption": "Decryption",
"ECDH": "ECDH",
"SkaleDKG": "SkaleDKG",
"SkaleVerifier": "SkaleVerifier",
"ManagerData": "ManagerData",
"SkaleManager": "SkaleManager",
"Pricing": "Pricing"
},
"dependencies": {},
"name": "skale-manager",
"version": "1.0.0",
"compiler": {
"manager": "openzeppelin",
"compilerSettings": {
"optimizer": {
"enabled": false,
"runs": "200"
}
},
"solcVersion": "0.5.16"
},
"telemetryOptIn": true
}
38 changes: 23 additions & 15 deletions contracts/ConstantsHolder.sol
Expand Up @@ -75,49 +75,41 @@ contract ConstantsHolder is IConstants, Permissions {
uint public constant NUMBER_OF_MONITORS = 24;

// MSR - Minimum staking requirement
uint public msr = 5e6;
uint public msr;

// Reward period - 30 days (each 30 days Node would be granted for bounty)
uint32 public rewardPeriod = 3600; // Test parameters
uint32 public rewardPeriod;

// Allowable latency - 150000 ms by default
uint32 public allowableLatency = 150000; // Test parameters
uint32 public allowableLatency;

/**
* Delta period - 1 hour (1 hour before Reward period became Monitors need
* to send Verdicts and 1 hour after Reward period became Node need to come
* and get Bounty)
*/
uint32 public deltaPeriod = 300; // Test parameters
uint32 public deltaPeriod;

/**
* Check time - 2 minutes (every 2 minutes monitors should check metrics
* from checked nodes)
*/
uint8 public checkTime = 120; // Test parameters
uint8 public checkTime;

/**
* Last time when system was underloaded
* (allocations on Skale-chain / allocations on Nodes < 75%)
*/
uint public lastTimeUnderloaded = 0;
uint public lastTimeUnderloaded;

/**
* Last time when system was overloaded
* (allocations on Skale-chain / allocations on Nodes > 85%)
*/
uint public lastTimeOverloaded = 0;
uint public lastTimeOverloaded;

//Need to add minimal allowed parameters for verdicts

/**
* @dev constructor in Permissions approach
* @param contractsAddress needed in Permissions constructor
*/
constructor(address contractsAddress) Permissions(contractsAddress) public {

}

/**
* Set reward and delta periods to new one, run only by owner. This function
* only for tests.
Expand Down Expand Up @@ -163,4 +155,20 @@ contract ConstantsHolder is IConstants, Permissions {
function setMSR(uint newMSR) external onlyOwner() {
msr = newMSR;
}

/**
* @dev constructor in Permissions approach
* @param contractsAddress needed in Permissions constructor
*/
function initialize(address contractsAddress) public initializer {
Permissions.initialize(contractsAddress);

msr = 5e6 * 1e18;
rewardPeriod = 3600; // Test parameters
allowableLatency = 150000; // Test parameters
deltaPeriod = 300; // Test parameters
checkTime = 120; // Test parameters
lastTimeUnderloaded = 0;
lastTimeOverloaded = 0;
}
}
9 changes: 7 additions & 2 deletions contracts/ContractManager.sol
Expand Up @@ -19,21 +19,26 @@

pragma solidity ^0.5.3;

import "@openzeppelin/contracts/ownership/Ownable.sol";
import "@openzeppelin/contracts-ethereum-package/contracts/ownership/Ownable.sol";
import "@openzeppelin/upgrades/contracts/Initializable.sol";


/**
* @title Main contract in upgradeable approach. This contract contain actual
* contracts for this moment in skale manager system by human name.
* @author Artem Payvin
*/
contract ContractManager is Ownable {
contract ContractManager is Initializable, Ownable {

// mapping of actual smart contracts addresses
mapping (bytes32 => address) public contracts;

event ContractUpgraded(string contractsName, address contractsAddress);

function initialize() external initializer {
Ownable.initialize(msg.sender);
}

/**
* Adds actual contract to mapping of actual contract addresses
* @param contractsName - contracts name in skale manager system
Expand Down
5 changes: 0 additions & 5 deletions contracts/ECDH.sol
Expand Up @@ -28,11 +28,6 @@ contract ECDH {
uint256 constant GY = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8;
uint256 constant N = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F;
uint256 constant A = 0;
// uint256 constant B = 7;

constructor () public {

}

function publicKey(uint256 privKey) external pure returns (uint256 qx, uint256 qy) {
uint256 x;
Expand Down
39 changes: 10 additions & 29 deletions contracts/GroupsData.sol
Expand Up @@ -59,15 +59,6 @@ contract GroupsData is IGroupsData, Permissions {
// name of executor contract
string executorName;

/**
* @dev constructor in Permissions approach
* @param newExecutorName - name of executor contract
* @param newContractsAddress needed in Permissions constructor
*/
constructor(string memory newExecutorName, address newContractsAddress) public Permissions(newContractsAddress) {
executorName = newExecutorName;
}

/**
* @dev addGroup - creates and adds new Group to mapping
* function could be run only by executor
Expand Down Expand Up @@ -161,26 +152,6 @@ contract GroupsData is IGroupsData, Permissions {
groups[groupIndex].nodesInGroup = nodesInGroup;
}

// /**
// * @dev setNewAmountOfNodes - set new recommended number of Nodes
// * function could be run only by executor
// * @param groupIndex - Groups identifier
// * @param amountOfNodes - recommended number of Nodes in this Group
// */
// function setNewAmountOfNodes(bytes32 groupIndex, uint amountOfNodes) external allow(executorName) {
// groups[groupIndex].recommendedNumberOfNodes = amountOfNodes;
// }

// /**
// * @dev setNewGroupData - set new extra data
// * function could be run only be executor
// * @param groupIndex - Groups identifier
// * @param data - new extra data
// */
// function setNewGroupData(bytes32 groupIndex, bytes32 data) external allow(executorName) {
// groups[groupIndex].groupData = data;
// }

function setGroupFailedDKG(bytes32 groupIndex) external allow("SkaleDKG") {
groups[groupIndex].succesfulDKG = false;
}
Expand Down Expand Up @@ -285,4 +256,14 @@ contract GroupsData is IGroupsData, Permissions {
function getNumberOfNodesInGroup(bytes32 groupIndex) external view returns (uint) {
return groups[groupIndex].nodesInGroup.length;
}

/**
* @dev constructor in Permissions approach
* @param newExecutorName - name of executor contract
* @param newContractsAddress needed in Permissions constructor
*/
function initialize(string memory newExecutorName, address newContractsAddress) public initializer {
Permissions.initialize(newContractsAddress);
executorName = newExecutorName;
}
}
33 changes: 17 additions & 16 deletions contracts/GroupsFunctionality.sol
Expand Up @@ -89,17 +89,6 @@ contract GroupsFunctionality is Permissions {
// name of data contract
string dataName;

/**
* @dev contructor in Permissions approach
* @param newExecutorName - name of executor contract
* @param newDataName - name of data contract
* @param newContractsAddress needed in Permissions constructor
*/
constructor(string memory newExecutorName, string memory newDataName, address newContractsAddress) Permissions(newContractsAddress) public {
executorName = newExecutorName;
dataName = newDataName;
}

/**
* @dev verifySignature - verify signature which create Group by Groups BLS master public key
* @param groupIndex - Groups identifier
Expand All @@ -116,7 +105,7 @@ contract GroupsFunctionality is Permissions {
uint hashX,
uint hashY) external view returns (bool)
{
address groupsDataAddress = contractManager.contracts(keccak256(abi.encodePacked(dataName)));
address groupsDataAddress = contractManager.getContract(dataName);
uint publicKeyx1;
uint publicKeyy1;
uint publicKeyx2;
Expand All @@ -128,6 +117,18 @@ contract GroupsFunctionality is Permissions {
);
}

/**
* @dev contructor in Permissions approach
* @param newExecutorName - name of executor contract
* @param newDataName - name of data contract
* @param newContractsAddress needed in Permissions constructor
*/
function initialize(string memory newExecutorName, string memory newDataName, address newContractsAddress) public initializer {
Permissions.initialize(newContractsAddress);
executorName = newExecutorName;
dataName = newDataName;
}

/**
* @dev addGroup - creates and adds new Group to Data contract
* function could be run only by executor
Expand All @@ -136,7 +137,7 @@ contract GroupsFunctionality is Permissions {
* @param data - some extra data
*/
function addGroup(bytes32 groupIndex, uint newRecommendedNumberOfNodes, bytes32 data) public allow(executorName) {
address groupsDataAddress = contractManager.contracts(keccak256(abi.encodePacked(dataName)));
address groupsDataAddress = contractManager.getContract(dataName);
IGroupsData(groupsDataAddress).addGroup(groupIndex, newRecommendedNumberOfNodes, data);
emit GroupAdded(
groupIndex,
Expand All @@ -151,7 +152,7 @@ contract GroupsFunctionality is Permissions {
* @param groupIndex - Groups identifier
*/
function deleteGroup(bytes32 groupIndex) public allow(executorName) {
address groupsDataAddress = contractManager.contracts(keccak256(abi.encodePacked(dataName)));
address groupsDataAddress = contractManager.getContract(dataName);
require(IGroupsData(groupsDataAddress).isGroupActive(groupIndex), "Group is not active");
IGroupsData(groupsDataAddress).removeGroup(groupIndex);
IGroupsData(groupsDataAddress).removeAllNodesInGroup(groupIndex);
Expand All @@ -166,7 +167,7 @@ contract GroupsFunctionality is Permissions {
* @param data - some extra data
*/
function upgradeGroup(bytes32 groupIndex, uint newRecommendedNumberOfNodes, bytes32 data) public allow(executorName) {
address groupsDataAddress = contractManager.contracts(keccak256(abi.encodePacked(dataName)));
address groupsDataAddress = contractManager.getContract(dataName);
require(IGroupsData(groupsDataAddress).isGroupActive(groupIndex), "Group is not active");
IGroupsData(groupsDataAddress).removeGroup(groupIndex);
IGroupsData(groupsDataAddress).removeAllNodesInGroup(groupIndex);
Expand All @@ -185,7 +186,7 @@ contract GroupsFunctionality is Permissions {
* @return local index of Node in Schain
*/
function findNode(bytes32 groupIndex, uint nodeIndex) internal view returns (uint index) {
address groupsDataAddress = contractManager.contracts(keccak256(abi.encodePacked(dataName)));
address groupsDataAddress = contractManager.getContract(dataName);
uint[] memory nodesInGroup = IGroupsData(groupsDataAddress).getNodesInGroup(groupIndex);
for (index = 0; index < nodesInGroup.length; index++) {
if (nodesInGroup[index] == nodeIndex) {
Expand Down
19 changes: 9 additions & 10 deletions contracts/ManagerData.sol
Expand Up @@ -40,16 +40,6 @@ contract ManagerData is IManagerData, Permissions {
//name of executor contract
string executorName;

/**
* @dev constuctor in Permissions approach
* @param newExecutorName - name of executor contract
* @param newContractsAddress needed in Permissions constructor
*/
constructor(string memory newExecutorName, address newContractsAddress) Permissions(newContractsAddress) public {
startTime = uint32(block.timestamp);
executorName = newExecutorName;
}

/**
* @dev setMinersCap - sets miners capitalization
*/
Expand All @@ -65,4 +55,13 @@ contract ManagerData is IManagerData, Permissions {
stageTime = uint32(block.timestamp);
}

/**
* @dev constuctor in Permissions approach
* @param newContractsAddress needed in Permissions constructor
*/
function initialize(address newContractsAddress) public initializer {
Permissions.initialize(newContractsAddress);
startTime = uint32(block.timestamp);
executorName = "SkaleManager";
}
}
9 changes: 4 additions & 5 deletions contracts/MonitorsData.sol
Expand Up @@ -37,13 +37,8 @@ contract MonitorsData is GroupsData {
}

mapping (bytes32 => bytes32[]) public checkedNodes;
//mapping (bytes32 => Metrics[]) public verdicts;
mapping (bytes32 => uint32[][]) public verdicts;

constructor(string memory newExecutorName, address newContractsAddress) GroupsData(newExecutorName, newContractsAddress) public {

}

/**
* Add checked node or update existing one if it is already exits
*/
Expand Down Expand Up @@ -89,4 +84,8 @@ contract MonitorsData is GroupsData {
function getLengthOfMetrics(bytes32 monitorIndex) external view returns (uint) {
return verdicts[monitorIndex].length;
}

function initialize(address newContractsAddress) public initializer {
GroupsData.initialize("MonitorsFunctionality", newContractsAddress);
}
}

0 comments on commit da0374f

Please sign in to comment.