image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Gilmar Santana
Gilmar Santana24/09/2022 09:55
Compartilhe

Solução blockchain para controle de ponto.

  • #Blockchain

Creio que muitos de nós já se irritaram com aqueles irritantes papéis emitidos pelos controles de ponto. Esses papéis são difíceis de gerenciar, ocupam espaço, você os perde e por melhor que os guarde, ainda há o risco deles serem apagados com o tempo.

Pensando nisso, resolvi criar uma solução para armazenar esses registros. Sei que já existem diversas soluções profissionais e com ótimo custo no mercado capaz de atender aos mais diversos cenários para demandas de controle de ponto. Mas pensei, já que estou focado no estudo de blockchain, entendi que seria interessante criar uma solução que aliasse essa necessidade com a tecnologia blockchain.

Para desenvolver essa solução, criei um Smart Contract em Solidity, utilizando Remix - Ethereum. Neste pocket project pude trabalhar com conceitos interessantes envolvendo essa tecnologia, entre eles variáveis de estado, definição de um owner do contrato, variáveis memory e storage, modifiers, visibilidade e tipos de retorno.Neste Smart Contract há funções de execução exclusiva do owner do contrato e outras públicas, acessíveis por qualquer um. Nas funções exclusivas do owner estão a definição do nome do utlizador, a empresa, o documento e, é claro, registrar o ponto. Ou seja, somente aquele que criou o contrato pode definir estas variáveis.

Quanto às funções de acesso público estão a visualização dos dados do proprietário, com nome, empresa e o documento; o histórico de registro de ponto; e o endereço do proprietário do contrato.

O contrato foi feito na versão 0.8.12 do Solidity

pragma solidity ^0.8.12;

O contrato tem as seguintes variáveis de estado. Todas elas com visualização internal, sendo acessíveis apenas com métodos próprios.

address internal owner;
mapping(address => string[]) internal registroPonto;
string[] internal pontoArray;
string internal nome;
string internal empresa;
string internal cpf;

Na sequência, o construtor define qual o endereço do owner do contrato.

constructor () {        
owner = msg.sender;    
}

Temos então, um modifier que será utilizado em funções chave do contrato.

modifier onlyOwner {
require (msg.sender == owner);
_
}

Na sequência temos a funções de definição das variáveis de estado acessíveis apenas pelo owner do contrato que permitem definir o nome, a empresa, o cpf e registrar o ponto.

function setNome(string memory _nome) public onlyOwner{
nome = _nome;
}
      
function setEmpresa(string memory _empresa) public onlyOwner{
empresa = _empresa;
}
    
function setDocumento(string memory _cpf) public onlyOwner{
cpf = _cpf;
}
    
function registrarPonto(string memory hora) public onlyOwner{
pontoArray.push(hora);
registroPonto[owner] = pontoArray;
}

E depois, as funções públicas acessíveis por qualquer pessoa que permitem verificar todos os registros de ponto, os dados do proprietário e o endereço do proprietário.

function getPonto() public view returns(string[] memory) {
return pontoArray;
}
    
function getProprietario() public  view returns(string memory) {
string memory dados;
dados = string.concat(dados, nome);
dados = string.concat(dados, ",");
dados = string.concat(dados, empresa);
dados = string.concat(dados, ",");
dados = string.concat(dados, cpf);
    
return dados;
}
    
function getEnderecoProprietario() public view returns(address) {
return owner;
}

E é claro, como todo Smart Contract, é preciso conectar sua carteira web3 para ter acesso e interagir com as funções. Fiz o mint do contrato na rede de testes da Ethereum, Rinkeby, mas é possível publicá-lo em qualquer rede.

O próximo passo, neste projeto, é evoluir as funções de interação com o contrato e padronizá-lo dentro das especificações da ERC721. Em paralelo, criar uma interação com algum framework frontend como React, por exemplo, e biblioteca Web3 para interagir com o contrato. Em último, mas não menos importante, evoluir este projeto para registrar geolocalização e foto do utilizador, para poder gravar a foto e o local onde o ponto está sendo registrado, pois com essas implementações, creio que irá trazer recursos importantes para aquelas empresas que precisam registrar a rotina de trabalho de seus colaboradores que tem local de trabalho itinerante, ou seja, não estão todo dia no mesmo local.

Acho que já falei de mais... O código do projeto está disponível em meu GitHub .

https://github.com/gilrsantana/BlockchainToys/blob/main/ControlePonto.sol

Dá uma olhadinha lá, tenho certeza que você vai gostar.

Compartilhe
Comentários (7)
Gilmar Santana
Gilmar Santana - 24/09/2022 14:52

Olhando aqui, percebi que não apareceu o link do GitHub, não sei o motivo. Quem tiver interesse segue... https://github.com/gilrsantana/BlockchainToys/blob/main/ControlePonto.sol

Gilmar Santana
Gilmar Santana - 24/09/2022 14:48

Marcos, tem sim. Na empresa onde trabalho, por exemplo, que inclusive é empresa de desenvolvimento de software, há um desses com biometria onde a cada marcação de ponto ele emite um comprovante. É mais comum do que você imagina.

Gilmar Santana
Gilmar Santana - 24/09/2022 14:46

Almir Santos, aqui na Dio tem uma formação em Blockchain. Vale muito a pena, além disso, tem muito material de qualidade no YouTube.

Marcos
Marcos - 24/09/2022 13:26

É sério mesmo que ainda existe este relógio de ponto que emite papel ?

Nas empresas por onde trabalhei nem existe mais isso.

Ana Bredariol
Ana Bredariol - 24/09/2022 12:28

Ual! Obrigada pela contribuição!

AS

Almir Santos - 24/09/2022 11:22

Estou começando agora na dio, pode me indicar um curso de blockchain aqui na dio? desde ja agradeço e te desejo sucesso aos montes.

AS

Almir Santos - 24/09/2022 11:19

TOP!!