contract Coinbase is Ownable {
    using SafeMath for uint256;
    uint256 public blockHeight;
    uint256 public decimals; 
    uint256 public coinbaseInit;

    // Generar nuevo bloque cada 6 horas. Reducir a la mitad la base de monedas cada 120 días.
    uint256 public halvingPeriod = 4 * 120;

    uint256 public maxSupply;
    uint256[6] private coinbaseArray;
    uint256 public exodus;

    event LogBlockHeight(uint256 blockHeight);

    constructor(uint256 _decimals) public{
        decimals = _decimals;
        maxSupply = 710000000 * (10 ** uint256(decimals));
        // 10% of maxSupply acuñar antes de bloque de genesis
        exodus = maxSupply / 10;

        // 90% de maxSupply para los próximos 2 años.
        coinbaseInit = 196875 * (10 ** uint256(decimals));
        coinbaseArray = [
            coinbaseInit,
            coinbaseInit / 2,
            coinbaseInit / 4,
            coinbaseInit / 8,
            coinbaseInit / 16,
            coinbaseInit / 16
        ];
       
    }
    
    /**
    * @dev Función para aumentar la altura del bloque.
    * @return 
    */
    function nextBlock() onlyOwner public {
        blockHeight = blockHeight.add(1);
        emit LogBlockHeight(blockHeight);
    }

    /**
    * @dev Función para calcular la cantidad de coinbase del bloque en este momento.
    * @return Un booleano que indica si la operación se realizó correctamente.
    */
    function coinbaseAmount() view internal returns (uint){
        uint256 index = blockHeight.sub(1).div(halvingPeriod);
        if (index > 5 || index < 0) {
            return 0;
        }
        return coinbaseArray[index];
    }

}
function nextBlock() onlyOwner public {
    blockHeight = blockHeight.add(1);
    emit LogBlockHeight(blockHeight);
}

/**
 * @dev Función para aumentar la altura del bloque.
 * @return 
 */