Modelo de Loteria na Blockchain do Ethereum
Uma simples PoC para ilustrar o poder do conceito Blockchain. Você provavelmente já ouviu falar no termo Blockchain ou, se nunca ouviu, vale a pena pesquisar. Esse conceito relativamente recente está ganhando cada vez mais notoriedade e promete revolucionar as relações de acordos entre partes de maneira irreversível.
Sumário
Pois bem, então o que é blockchain?
Blockchain é o conceito por trás de tecnologias como a moeda virtual Bitcoin e também o Ethereum. Basicamente, se refere a uma cadeia que registra todas as atividades que acontecem na rede. Essa cadeia é composta por blocos que, por sua vez, são compostos por transações. Cada uma dessas transações é uma atividade realizada por algum nó da rede.
Por exemplo, suponhamos que um dos nós da rede (conta Ethereum) dispara uma transação para transferir Ethers (moeda virtual da Rede Ethereum) para outro nó. Essa transação será validada pelos outros nós da rede e, caso não haja nenhuma irregularidade, a transação irá compor um bloco que será adicionado à cadeia.
A confiabilidade e segurança deste conceito estão relacionadas à criptografia e à descentralização da rede, uma vez que a informação é validada por todos os nós e não por um intermediador centralizado.
Smart Contracts na Rede Ethereum
Os Smart Contracts são a grande diferença entre as tecnologias do Bitcoin e do Ethereum. Enquanto no Bitcoin tudo gira em torno da moeda virtual e das operações realizadas com ela, no Ethereum o principal produto são os Smart Contracts.
Basicamente, Smart Contracts são códigos que executam algum algoritmo e tem um custo para serem criados e, também, para serem executados. Por se tratar de um código, os Smart Contracts abrem infinitas possibilidades de aplicações. No nosso caso, por exemplo, foi criado um contrato que, quando executado, funciona como uma loteria. Qualquer nó da rede Ethereum, desde que tenha o endereço do contrato, pode apostar na loteria. Depois que as apostas forem feitas, o criador do contrato chama uma função que automaticamente encontra os ganhadores e transfere para eles o valor do prêmio igualmente dividido.
Como funciona a loteria na blockchain do Ethereum?
A loteria implementada oferece:
● Transparência: O código do contrato é aberto permitindo ao usuário avaliar como o jogo é executado caso seja de seu interesse.
● Confiabilidade: O resultado é validado por todos os nós da rede.
● Menores custos: Elimina os gastos que vão para o intermediador ou, no mínimo, diminui significativamente. Além disso, suas características principais com relação à implementação são:
● O Smart Contract foi desenvolvido na linguagem Solidity.
● Recebe uma ou mais apostas de um ou mais jogadores (conta Ethereum).
● A aposta é um número inteiro qualquer escolhido pelo apostador.
● A conta criadora do contrato especifica o range do número a ser sorteado entre 1 e x, e também o preço a ser pago em Ethers para se fazer uma aposta.
● O apostador deve pagar o preço da aposta para cada número escolhido, caso contrário, sua aposta não é computada.
● O prêmio é a soma do valor arrecadado com todas as apostas e é dividido entre os ganhadores.
● Após realizar o pagamento ao último vencedor, o contrato é destruído (comando selfdestruct).
Abaixo, segue o código implementado em Solidity do contrato lottery:
pragma solidity ^0.4.0;
contract lottery {
//Struct representando cada apostador com seu endereço (conta Ethereum) e número de aposta.
struct Gambler {
address gamblerAddress;
uint gamblerLuckyNum;
}
//Variáveis globais do contrato.
uint public numPossibilities;
uint public priceGamble;
uint public numGamblers;
uint public numWinners;
uint public luckyNum;
uint public prize;
address public chairperson;
mapping(uint => Gambler) public gamblers;
//Construtor do contrato Lottery.
//Recebe preço por aposta (priceG) em Ethers e maior número do range de possibilidades sendo o range de 1 a numP.
function lottery(uint priceG, uint numP) {
numPossibilities = numP;
priceGamble = priceG * 1000000000000000000;
numGamblers = 0;
numWinners = 0;
prize = 0;
chairperson = msg.sender;
}
//Função chamada por cada apostador onde é passado como parâmetro o número apostado.
//Só executa caso o valor transferido para o contrato seja igual ao valor estipulado no construtor.
function gamble(uint chosenNum) payable{
if(msg.value != priceGamble){
throw;
}else{
Gambler gb = gamblers[numGamblers];
gb.gamblerAddress = msg.sender;
gb.gamblerLuckyNum = chosenNum;
numGamblers++;
}
}
//Função chamada para encontrar e pagar ganhadores.
//Só pode ser chamada pelo criador do contrato, caso contrário gera exceção.
//Gera número randômico com base no hash do bloco anterior.
//Calcula número de ganhadores.
//Divide prêmio igualmente entre ganhadores e destrói o contrato após pagar último ganhador.
function winner () {
if(msg.sender != chairperson){
throw;
}else{
luckyNum = uint(block.blockhash(block.number-1))%numPossibilities + 1;
for (uint i = 0; i < numGamblers ; i++){
if (gamblers[i].gamblerLuckyNum == luckyNum) {
numWinners++;
}
}
if(numWinners == 0){
selfdestruct(chairperson);
}else{
uint numWinnersAux = numWinners;
prize = this.balance/numWinnersAux;
for (uint j = 0; j < numGamblers ; j++){
if (gamblers[j].gamblerLuckyNum == luckyNum) {
numWinnersAux–;
if(numWinnersAux == 0){
selfdestruct(gamblers[j].gamblerAddress);
} else {
gamblers[j].gamblerAddress.transfer(prize);
}
}
}
}
}
}
}
E o futuro?
Como se pode notar, as possibilidades através do conceito blockchain são incríveis, principalmente quando associado ao uso de Smart Contracts como acontece na rede Ethereum. Esse modelo bastante simples de loteria é só um aperitivo da ampla gama de inovações que podem e, certamente, irão surgir num futuro bem próximo.
Quer saber como a blockchain pode impactar seu negócio? Entre em contato com a dti!
Data Science
Confira outros artigos
Ciência de dados explicando coisas que acontecem no mundo
Hoje cada ser humano com um dispositivo móvel em mãos produz uma série de dados, gerados em velocidade, volume e variedade nunca vistos antes. A internet das coisas tem se tornado um mar de oportunidades para a ciência de dados nos últimos anos. Isso acontece, porque, através de sensores inteligentes e softwares que transmitem dados […]
Data Science
Dados Geoespaciais: Uma visão geral
Dentre todas as bases de dados em que tive a oportunidade de trabalhar, poucas foram as vezes em que não encontrei dados geoespaciais. Sumário0.1 Mas o que são dados geoespaciais?1 Conceitos Básicos dos dados1.1 Como representar os dados2 Operações Geoespaciais2.1 Operações de relacionamento3 Visualização4 Aplicações de dados georreferenciados4.1 Dados georreferenciais e a pandemia5 Referências e […]
Data Science
Estrutura de dados: o que é e qual a sua importância?
Entenda o que é a importância da estrutura de dados na linguagem da programação O universo da programação possui uma série de fundamentos considerados essenciais para o desenvolvimento dos mais diversos softwares. Considerada um ponto-chave em qualquer projeto, a estrutura de dados tem um papel relevante no trabalho de todos os programadores. Mas você sabe […]
Data Science