pragma solidity ^0.5.0;
contract Governance {
// Nodes.
struct Node {
address owner;
bytes publicKey;
uint256 staked;
uint256 fined;
string name;
string email;
string location;
string url;
uint256 unstaked;
uint256 unstaked_at;
}
// ReportType.
enum ReportType {
INVALID_DKG,
FORK_VOTE,
FORK_BLOCK
}
// 0: round to blockHeight mapping.
uint256[] public roundHeight;
// 1: totalSupply
uint256 public totalSupply;
// 2: totalStaked.
uint256 public totalStaked;
// 3: nodes.
Node[] public nodes;
// 4: stores the array index + 1 of nodes by address.
mapping(address => int256) public nodesOffsetByAddress;
// 5: stores the array index + 1 of nodes by address represented by node key.
mapping(address => int256) public nodesOffsetByNodeKeyAddress;
// 6: crsRound.
uint256 public crsRound;
// 7: crs.
bytes32 public crs;
// 8: dkgRound.
uint256 public dkgRound;
// 9: dkgResetCount.
uint256[] public dkgResetCount;
// 10: dkgMasterPublicKeys
bytes[] public dkgMasterPublicKeys;
// 11: dkgComplaints
bytes[] public dkgComplaints;
// 12: dkgMPKReadys
mapping(address => bool) public dkgMPKReadys;
// 13: dkgMPKReadysCount
uint256 public dkgMPKReadysCount;
// 14: dkgFinalizeds
mapping(address => bool) public dkgFinalizeds;
// 15: dkgFinalizedsCount
uint256 public dkgFinalizedsCount;
// 16: owner address.
address public owner;
// 17: minStake
uint256 public minStake;
// 18: lockupPeriod
uint256 public lockupPeriod;
// 19: miningVelocity.
uint256 public miningVelocity; // stored as miningVelocity * 10^8
// 20: nextHalvingSupply.
uint256 public nextHalvingSupply;
// 21: lastHalvedAmount.
uint256 public lastHalvedAmount;
// 22: blockGasLimit.
uint256 public blockGasLimit;
// Lambda related.
// 23
uint256 public lambdaBA;
// 24
uint256 public lambdaDKG;
// Set related.
// 25
uint256 public notarySetSize;
// 26
uint256 public dkgSetSize;
// 27: roundLength.
uint256 public roundLength;
// 28: minBlockInterval.
uint256 public minBlockInterval;
// 29: Fine value.
uint256[] public fineValues;
// 30: Fined records.
mapping(bytes32 => bool) public finedRecords;
// 31: min gas price.
uint256 public minGasPrice;
// ----------
// Modifiers.
// ----------
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
// -------
// Events.
// -------
event ConfigurationChanged();
event CRSProposed(uint256 indexed Round, bytes32 CRS);
event Staked(address indexed NodeAddress, uint256 Amount);
event Unstaked(address indexed NodeAddress, uint256 Amount);
event Withdrawn(address indexed NodeAddress, uint256 Amount);
event NodeAdded(address indexed NodeAddress);
event NodeRemoved(address indexed NodeAddress);
event ForkReported(address indexed NodeAddress, uint256 Type, bytes Arg1, bytes Arg2);
event Fined(address indexed NodeAddress, uint256 Amount);
event FinePaid(address indexed NodeAddress, uint256 Amount);
event DKGReset(uint256 indexed Round, uint256 BlockHeight);
// transferOwnership()
function transferOwnership(address newOwner) public onlyOwner {
}
// UpdateConfiguration(...)
function updateConfiguration(
uint256 MinStake,
uint256 LockupPeriod,
uint256 BlockGasLimit,
uint256 LambdaBA,
uint256 LambdaDKG,
uint256 NotarySetSize,
uint256 DKGSetSize,
uint256 RoundLength,
uint256 MinBlockInterval,
uint256[] memory FineValues,
uint256 MinGasPrice)
public onlyOwner {
}
// Return number of nodes.
function nodesLength() view public returns (uint256) {
}
// ProposeCRS(round, signedCRS)
function proposeCRS(uint256 Round, bytes memory SignedCRS) public {
}
// AddDKGComplaint(round, complaint)
function addDKGComplaint(uint256 Round, bytes memory Complaint) public {
}
// AddDKGMasterPublicKey(round, key)
function addDKGMasterPublicKey(uint256 Round, bytes memory PublicKey) public {
}
// AddDKGMPKReady(round, ready)
function addDKGMPKReady(uint256 Round, bytes memory MPKReady) public {
}
// AddDKGFinalize(round, finalize)
function addDKGFinalize(uint256 Round, bytes memory Finalize) public {
}
// Register(public_key, name, email, location, url)
function register(bytes memory PublicKey, string memory Name,
string memory Email, string memory Location,
string memory Url) public payable {
}
// Stake()
function stake() public payable {
}
// Unstake()
function unstake(uint256 Amount) public {
}
// Withdraw()
function withdraw() public {
}
// PayFine(node)
function payFine(address NodeAddress) public payable {
}
// Report(enum type, bytes[] payloads)
function report(uint256 Type, bytes memory Arg1, bytes memory Arg2) public {
}
// ResetDKG(newSignedCRS)
function resetDKG(bytes memory NewSignedCRS) public {
}
}