sentry.sol 1.66 KB
// SPDX-License-Identifier: MIT
// Created by Caduceus.foundation
pragma solidity ^0.8.4;

contract ConsensusContract {
    struct CommitBlockInfo {
        uint256 block_number;
        address miner;
        bytes   block_hash;
        bytes   state_root;
        bytes   receipts_root;
        bytes   tx_root;
    }
    mapping(uint256=>CommitBlockInfo) committedBlocks;

    struct VirtualBlockInfo {
        uint256 block_number;
        uint256 block_time;
        bytes   batch_txs;
    }
    uint256 nextBlockNumber;
    mapping(uint256=>VirtualBlockInfo) virtualblocks;

    address private _owner;

    modifier onlyOwner() {
        require(msg.sender == _owner, "Only owner can do it");
        _;
    }

    constructor() {
        _owner = msg.sender;
	nextBlockNumber = 1;
    }

    function LimitInfo() public pure returns (uint256, uint256) {
        return (100,20);
    }

    function SubmitTx(bytes memory batchtxs) public returns (bool) {
        virtualblocks[nextBlockNumber].block_number = nextBlockNumber;
        virtualblocks[nextBlockNumber].block_time = block.timestamp;
        virtualblocks[nextBlockNumber].batch_txs = batchtxs;
        nextBlockNumber += 1;
        return true;
    }

    function GetNewVirtualBlock(uint256 lastblock) public view returns (VirtualBlockInfo memory) {
        return virtualblocks[lastblock+1];
    }

    function CommitBlock(CommitBlockInfo memory blockinfo) public returns (bool) {
        committedBlocks[blockinfo.block_number] = blockinfo;
        return true;
    }

    function GetConfirmedBlock(uint256 block_number) public view returns (CommitBlockInfo memory) {
        return committedBlocks[block_number];
    }
}