A tecnologia Blockchain traz abordagens inovadoras para alcançar consenso, segurança e privacidade. Uma dessas inovações é o esquema commit-reveal, um protocolo criptográfico que aumenta a privacidade e a segurança dos usuários do blockchain. Ao navegar neste curso, você revelará as camadas de confiança, transparência e inovação que o esquema Commit-Reveal traz para o domínio digital descentralizado. Cada módulo deste artigo é meticulosamente elaborado para fornecer uma compreensão completa do esquema Commit-Reveal, sua implementação e seu impacto no cenário do blockchain.
Em sua essência, um blockchain é como um livro-razão digital com uma peculiaridade. Ao contrário dos livros-razão tradicionais, é descentralizado, o que significa que nenhuma entidade tem controle sobre todo o blockchain e é acessível a qualquer pessoa que faça parte de sua rede. Cada ‘bloco’ em uma blockchain carrega uma lista de transações. Depois que um bloco é preenchido com transações, um novo bloco é formado, criando uma 'cadeia' de blocos conectada - daí o nome 'blockchain'.
Uma das características brilhantes do blockchain é a ênfase na confiança e na transparência. Qualquer pessoa na rede tem acesso e pode visualizar todas as transações em um blockchain. Esta abertura desencoraja a desonestidade e promove a confiança entre a comunidade. Você deve estar se perguntando: como isso atinge tal nível de transparência? A resposta está em seus mecanismos de consenso e princípios criptográficos únicos, nos quais nos aprofundaremos à medida que avançamos neste curso.
Agora que você tem uma ideia do que é blockchain, vamos apresentar um sabor especial a ele - o esquema Commit-Reveal. É como um show de mágica onde um mágico (o usuário) primeiro se compromete com um determinado ato sem revelá-lo ao público (a rede) e depois, numa fase posterior, revela o ato. Em termos de blockchain, este é um processo de duas etapas: a ‘Fase de Confirmação’ e a ‘Fase de Revelação’.
Na fase de confirmação, um usuário envia uma versão com hash de suas informações para o blockchain. Esta versão com hash é como uma versão embaralhada da informação original que oculta o conteúdo real. A mágica da função hash é que ela é uma jornada só de ida; você não pode desembaralhar o hash de volta à sua forma original, mantendo assim a informação em segredo por enquanto. Depois vem a Fase de Revelação, onde o usuário revela a informação original, que é então verificada pela rede fazendo hash novamente e comparando-a com o hash confirmado inicial, se corresponder, voila! A rede confirma a revelação e o truque de mágica está completo.
Através do esquema Commit-Reveal, as redes blockchain podem atingir um novo nível de envolvimento em aplicações como leilões, sistemas de votação e muito mais, que exploraremos em detalhes nos próximos módulos.
À medida que navegamos nas profundezas do esquema Commit-Reveal, nossa primeira parada é a 'Fase Commit'. Nesta fase, os usuários “comprometem-se” com um determinado valor, mas o fazem de uma forma que mantém o valor real em segredo. Imagine que você tem um número secreto em mente, mas em vez de contar a todos o que é, você o coloca em uma caixa trancada e mostra a todos. Eles sabem que você tem um número, mas não sabem qual é. É disso que se trata o comprometimento no blockchain!
Agora, como guardamos nosso valor secreto? No mundo blockchain, usamos algo chamado função hash para fazer isso. Uma função hash é como um liquidificador mágico. Você insere seu valor secreto e ele exibe uma versão embaralhada dele, conhecida como hash. Este hash é único; mesmo uma pequena alteração no valor original cria um hash totalmente diferente. A beleza disso é que é um processo unilateral - uma vez que o valor é hash, não há uma maneira fácil de descobrir o valor original do hash. Assim, quando os usuários comprometem seu valor, o que eles realmente fazem é compartilhar o hash de seu valor com todos no blockchain.
Depois do suspense construído na Fase de Comprometimento, é hora da grande revelação! A Fase de Revelação é onde os valores comprometidos são finalmente revelados a todos os participantes do blockchain. Voltando à nossa analogia da caixa trancada, este é o momento em que a caixa é aberta e todos podem ver qual número você escondeu. No mundo do blockchain, a revelação é um processo simples, mas crucial, que proporciona transparência e justiça em diversas aplicações.
Quando um usuário revela seu valor comprometido, a rede pode facilmente verificar sua autenticidade fazendo hash do valor revelado e comparando-o com o hash original compartilhado durante a fase de confirmação. Se os hashes corresponderem, isso confirma que o usuário não mudou de ideia no meio do caminho. Este processo de verificação simples, mas poderoso, ajuda a manter um ambiente confiável onde todos cumprem as regras. É como ter um árbitro num jogo, garantindo que todos os jogadores cumpram os termos acordados.
Agora que desvendamos a magia do esquema Commit-Reveal, vamos ver como ele ganha vida no mundo blockchain por meio de contratos inteligentes. Um contrato inteligente é como um contrato tradicional, mas é digital e autoexecutável. Imagine um robô imparcial que garanta automaticamente que todas as partes cumpram seus acordos, e você terá a ideia de um contrato inteligente. É a ferramenta que pega a ideia teórica do Commit-Reveal e a torna prática no mundo digital. Implementar um esquema Commit-Reveal por meio de um contrato inteligente é como coreografar uma dança onde cada passo segue um ritmo definido. Vamos percorrer essa coreografia passo a passo.
Comece criando um contrato inteligente em uma plataforma blockchain como Ethereum. Este contrato terá as regras de compromisso para o esquema Commit-Reveal codificadas nele.
Projete uma função de commit dentro do contrato inteligente. Esta função permitirá que os usuários enviem seus valores hash (a fase de commit) ao contrato.
À medida que os usuários comprometem seus valores, o contrato inteligente armazenará esses hashes de forma segura no blockchain, aguardando a fase de revelação.
A seguir, dentro do contrato inteligente, crie uma função de revelação. Quando chegar a hora, esta função permitirá aos usuários revelar seus valores originais.
Após a revelação, o contrato inteligente verificará os valores revelados, fazendo hash deles e comparando-os com os hashes inicialmente comprometidos. Se tudo corresponder, a revelação é validada.
Depois que todas as revelações forem coletadas e verificadas, o contrato inteligente pode executar automaticamente as próximas etapas, seja a contagem de votos, a determinação dos vencedores do leilão ou qualquer outra ação específica do aplicativo.
Antes de implantar, teste minuciosamente o contrato inteligente para garantir que ele funcione conforme planejado e esteja protegido contra possíveis explorações. Através destas etapas, o contrato inteligente orquestra a dança Commit-Reveal, garantindo um processo justo e transparente.
// Identificador de licença SPDX: solidez do pragma do MIT
^0.8.0;
contratos CommitReveal {
struct Commit {
bytes32 hash;
bool revealed;
}
mapeamento (endereço => Commit) commits públicos;
mapeamento (endereço => uint256) valores revelados públicos;
// A função commit permite que os usuários enviem seus valores hash
function commit(bytes32 _hash) public {
require(commits[msg.sender].hash == 0, "Already committed");
commits[msg.sender].hash = _hash;
}
// A função revelador permite que os usuários revelem seus valores originais
function revelado(uint256 _value, string memory _salt) public {
require(commits[msg.sender].revealed == false, "Already revealed");
require(keccak256(abi.encodePacked(_value, _salt)) == commits[msg.sender].hash, "Hashes don't match");
commits[msg.sender].revealed = true;
revealedValues[msg.sender] = _value;
}
// Um exemplo de função de finalização que pode contabilizar votos
function tallyVotes() public view return (uint256) {
uint256 totalVotes = 0;
para (endereço endereço = endereço(0); endereço < endereço(-1); endereço++) {
if (commits[addr].revealed) {
totalVotes += revealedValues[addr];
}
}
return totalVotes;
}
// Uma função para auditar o estado do contrato (apenas um exemplo, não prático para grandes conjuntos de dados)
function audit() public view return (mapping(address => uint256) memory) {
return revealedValues;
}
}
Explicação:
Este é um exemplo muito simplificado e carece de muitas considerações práticas necessárias para um sistema de produção (como evitar transbordamentos, otimizar o uso de gás, gerenciar grandes conjuntos de dados e adicionar controle de acesso adequado). A função de finalização, em particular, é impraticável devido à iteração em todos os endereços possíveis e necessitaria de um design diferente num cenário do mundo real. Este código pretende ser um ponto de partida e uma ferramenta educacional, não uma solução pronta para produção.
Os leilões online são uma das aplicações essenciais do esquema Commit-Reveal. Para evitar que outros utilizem os valores das propostas como alavancagem, os participantes podem enviar as suas propostas secretamente durante a fase de compromisso. Terminado o período de licitações, entra em ação a fase de revelação, permitindo que os participantes divulguem seus lances. O lance válido mais alto é determinado, garantindo um processo de leilão justo e competitivo.
Os sistemas de votação podem beneficiar significativamente do esquema Commit-Reveal, especialmente em cenários que exigem anonimato e honestidade dos eleitores. Nesta configuração, durante as eleições ou qualquer evento de votação, os eleitores comprometem-se com as suas escolhas na fase de commit sem revelá-las a terceiros, garantindo a integridade e o sigilo dos votos. Terminado o período de votação, começa a fase de revelação, permitindo que os eleitores divulguem seus votos. Estes são então computados para determinar o resultado, promovendo um processo de votação justo e transparente.
Nos contratos de licitação selada, os licitantes apresentam suas propostas ocultas usando o esquema Commit-Reveal. Este processo garante que nenhum dos licitantes conheça os valores das propostas dos outros, promovendo uma concorrência leal. Após o período de apresentação de propostas, ocorre a fase de revelação e o contrato é adjudicado ao licitante qualificado com a melhor oferta.
O esquema Commit-Reveal encontra uma aplicação divertida em cenários de jogo, como uma versão digital de Pedra, Papel e Tesoura. Os jogadores cometem suas escolhas sem revelá-las, garantindo um jogo justo. Assim que ambos os jogadores se comprometerem, segue-se a fase de revelação, determinando o vencedor com base nas escolhas feitas.
Em ambientes blockchain, o front-running é uma preocupação onde atores mal-intencionados poderiam potencialmente se beneficiar do conhecimento de transações pendentes. O esquema Commit-Reveal ajuda a mitigar esses problemas, ocultando inicialmente os detalhes da transação. Quando chega a fase de revelação, é tarde demais para que atores mal-intencionados atuem com base nas informações, preservando assim a integridade da transação.
Arquiteturas mais recentes, como F3B, evoluíram para reduzir a sobrecarga associada aos esquemas tradicionais de Commit-Reveal. F3B minimiza a gravação de dados no blockchain, oferecendo uma arquitetura Commit-and-Reveal de baixa latência. Este desenvolvimento é notável porque significa a otimização e inovação contínuas nos esquemas Commit-Reveal, tornando-os mais eficientes para aplicações do mundo real.
Em ambientes blockchain, a geração de números aleatórios pode ser um desafio devido à natureza determinística dos protocolos blockchain. O esquema Commit-Reveal serve como uma alternativa descentralizada para geração de números aleatórios na blockchain Ethereum. Por exemplo, Randao, uma implementação RNG Commit-Reveal, utiliza feeds de dados públicos e incentiva a participação na geração de números aleatórios.
À medida que esta interessante visão do esquema Commit-Reveal chega ao fim, é importante considerar como este mecanismo simples, mas poderoso, ajuda a construir confiança e abertura em aplicações blockchain. Demos uma espiada em como a tecnologia blockchain pode mudar muitos campos, tornando os leilões justos, os sistemas de votação honestos e os cenários dos jogos mais criativos, entre outras coisas, com o esquema Commit-Reveal. A jornada não termina aqui; a natureza em constante evolução da tecnologia blockchain apresenta novos horizontes a explorar. Munido do conhecimento adquirido neste curso, você estará bem posicionado para se aprofundar no blockchain, explorar suas infinitas possibilidades e contribuir para moldar um futuro digital transparente, justo e descentralizado.
A tecnologia Blockchain traz abordagens inovadoras para alcançar consenso, segurança e privacidade. Uma dessas inovações é o esquema commit-reveal, um protocolo criptográfico que aumenta a privacidade e a segurança dos usuários do blockchain. Ao navegar neste curso, você revelará as camadas de confiança, transparência e inovação que o esquema Commit-Reveal traz para o domínio digital descentralizado. Cada módulo deste artigo é meticulosamente elaborado para fornecer uma compreensão completa do esquema Commit-Reveal, sua implementação e seu impacto no cenário do blockchain.
Em sua essência, um blockchain é como um livro-razão digital com uma peculiaridade. Ao contrário dos livros-razão tradicionais, é descentralizado, o que significa que nenhuma entidade tem controle sobre todo o blockchain e é acessível a qualquer pessoa que faça parte de sua rede. Cada ‘bloco’ em uma blockchain carrega uma lista de transações. Depois que um bloco é preenchido com transações, um novo bloco é formado, criando uma 'cadeia' de blocos conectada - daí o nome 'blockchain'.
Uma das características brilhantes do blockchain é a ênfase na confiança e na transparência. Qualquer pessoa na rede tem acesso e pode visualizar todas as transações em um blockchain. Esta abertura desencoraja a desonestidade e promove a confiança entre a comunidade. Você deve estar se perguntando: como isso atinge tal nível de transparência? A resposta está em seus mecanismos de consenso e princípios criptográficos únicos, nos quais nos aprofundaremos à medida que avançamos neste curso.
Agora que você tem uma ideia do que é blockchain, vamos apresentar um sabor especial a ele - o esquema Commit-Reveal. É como um show de mágica onde um mágico (o usuário) primeiro se compromete com um determinado ato sem revelá-lo ao público (a rede) e depois, numa fase posterior, revela o ato. Em termos de blockchain, este é um processo de duas etapas: a ‘Fase de Confirmação’ e a ‘Fase de Revelação’.
Na fase de confirmação, um usuário envia uma versão com hash de suas informações para o blockchain. Esta versão com hash é como uma versão embaralhada da informação original que oculta o conteúdo real. A mágica da função hash é que ela é uma jornada só de ida; você não pode desembaralhar o hash de volta à sua forma original, mantendo assim a informação em segredo por enquanto. Depois vem a Fase de Revelação, onde o usuário revela a informação original, que é então verificada pela rede fazendo hash novamente e comparando-a com o hash confirmado inicial, se corresponder, voila! A rede confirma a revelação e o truque de mágica está completo.
Através do esquema Commit-Reveal, as redes blockchain podem atingir um novo nível de envolvimento em aplicações como leilões, sistemas de votação e muito mais, que exploraremos em detalhes nos próximos módulos.
À medida que navegamos nas profundezas do esquema Commit-Reveal, nossa primeira parada é a 'Fase Commit'. Nesta fase, os usuários “comprometem-se” com um determinado valor, mas o fazem de uma forma que mantém o valor real em segredo. Imagine que você tem um número secreto em mente, mas em vez de contar a todos o que é, você o coloca em uma caixa trancada e mostra a todos. Eles sabem que você tem um número, mas não sabem qual é. É disso que se trata o comprometimento no blockchain!
Agora, como guardamos nosso valor secreto? No mundo blockchain, usamos algo chamado função hash para fazer isso. Uma função hash é como um liquidificador mágico. Você insere seu valor secreto e ele exibe uma versão embaralhada dele, conhecida como hash. Este hash é único; mesmo uma pequena alteração no valor original cria um hash totalmente diferente. A beleza disso é que é um processo unilateral - uma vez que o valor é hash, não há uma maneira fácil de descobrir o valor original do hash. Assim, quando os usuários comprometem seu valor, o que eles realmente fazem é compartilhar o hash de seu valor com todos no blockchain.
Depois do suspense construído na Fase de Comprometimento, é hora da grande revelação! A Fase de Revelação é onde os valores comprometidos são finalmente revelados a todos os participantes do blockchain. Voltando à nossa analogia da caixa trancada, este é o momento em que a caixa é aberta e todos podem ver qual número você escondeu. No mundo do blockchain, a revelação é um processo simples, mas crucial, que proporciona transparência e justiça em diversas aplicações.
Quando um usuário revela seu valor comprometido, a rede pode facilmente verificar sua autenticidade fazendo hash do valor revelado e comparando-o com o hash original compartilhado durante a fase de confirmação. Se os hashes corresponderem, isso confirma que o usuário não mudou de ideia no meio do caminho. Este processo de verificação simples, mas poderoso, ajuda a manter um ambiente confiável onde todos cumprem as regras. É como ter um árbitro num jogo, garantindo que todos os jogadores cumpram os termos acordados.
Agora que desvendamos a magia do esquema Commit-Reveal, vamos ver como ele ganha vida no mundo blockchain por meio de contratos inteligentes. Um contrato inteligente é como um contrato tradicional, mas é digital e autoexecutável. Imagine um robô imparcial que garanta automaticamente que todas as partes cumpram seus acordos, e você terá a ideia de um contrato inteligente. É a ferramenta que pega a ideia teórica do Commit-Reveal e a torna prática no mundo digital. Implementar um esquema Commit-Reveal por meio de um contrato inteligente é como coreografar uma dança onde cada passo segue um ritmo definido. Vamos percorrer essa coreografia passo a passo.
Comece criando um contrato inteligente em uma plataforma blockchain como Ethereum. Este contrato terá as regras de compromisso para o esquema Commit-Reveal codificadas nele.
Projete uma função de commit dentro do contrato inteligente. Esta função permitirá que os usuários enviem seus valores hash (a fase de commit) ao contrato.
À medida que os usuários comprometem seus valores, o contrato inteligente armazenará esses hashes de forma segura no blockchain, aguardando a fase de revelação.
A seguir, dentro do contrato inteligente, crie uma função de revelação. Quando chegar a hora, esta função permitirá aos usuários revelar seus valores originais.
Após a revelação, o contrato inteligente verificará os valores revelados, fazendo hash deles e comparando-os com os hashes inicialmente comprometidos. Se tudo corresponder, a revelação é validada.
Depois que todas as revelações forem coletadas e verificadas, o contrato inteligente pode executar automaticamente as próximas etapas, seja a contagem de votos, a determinação dos vencedores do leilão ou qualquer outra ação específica do aplicativo.
Antes de implantar, teste minuciosamente o contrato inteligente para garantir que ele funcione conforme planejado e esteja protegido contra possíveis explorações. Através destas etapas, o contrato inteligente orquestra a dança Commit-Reveal, garantindo um processo justo e transparente.
// Identificador de licença SPDX: solidez do pragma do MIT
^0.8.0;
contratos CommitReveal {
struct Commit {
bytes32 hash;
bool revealed;
}
mapeamento (endereço => Commit) commits públicos;
mapeamento (endereço => uint256) valores revelados públicos;
// A função commit permite que os usuários enviem seus valores hash
function commit(bytes32 _hash) public {
require(commits[msg.sender].hash == 0, "Already committed");
commits[msg.sender].hash = _hash;
}
// A função revelador permite que os usuários revelem seus valores originais
function revelado(uint256 _value, string memory _salt) public {
require(commits[msg.sender].revealed == false, "Already revealed");
require(keccak256(abi.encodePacked(_value, _salt)) == commits[msg.sender].hash, "Hashes don't match");
commits[msg.sender].revealed = true;
revealedValues[msg.sender] = _value;
}
// Um exemplo de função de finalização que pode contabilizar votos
function tallyVotes() public view return (uint256) {
uint256 totalVotes = 0;
para (endereço endereço = endereço(0); endereço < endereço(-1); endereço++) {
if (commits[addr].revealed) {
totalVotes += revealedValues[addr];
}
}
return totalVotes;
}
// Uma função para auditar o estado do contrato (apenas um exemplo, não prático para grandes conjuntos de dados)
function audit() public view return (mapping(address => uint256) memory) {
return revealedValues;
}
}
Explicação:
Este é um exemplo muito simplificado e carece de muitas considerações práticas necessárias para um sistema de produção (como evitar transbordamentos, otimizar o uso de gás, gerenciar grandes conjuntos de dados e adicionar controle de acesso adequado). A função de finalização, em particular, é impraticável devido à iteração em todos os endereços possíveis e necessitaria de um design diferente num cenário do mundo real. Este código pretende ser um ponto de partida e uma ferramenta educacional, não uma solução pronta para produção.
Os leilões online são uma das aplicações essenciais do esquema Commit-Reveal. Para evitar que outros utilizem os valores das propostas como alavancagem, os participantes podem enviar as suas propostas secretamente durante a fase de compromisso. Terminado o período de licitações, entra em ação a fase de revelação, permitindo que os participantes divulguem seus lances. O lance válido mais alto é determinado, garantindo um processo de leilão justo e competitivo.
Os sistemas de votação podem beneficiar significativamente do esquema Commit-Reveal, especialmente em cenários que exigem anonimato e honestidade dos eleitores. Nesta configuração, durante as eleições ou qualquer evento de votação, os eleitores comprometem-se com as suas escolhas na fase de commit sem revelá-las a terceiros, garantindo a integridade e o sigilo dos votos. Terminado o período de votação, começa a fase de revelação, permitindo que os eleitores divulguem seus votos. Estes são então computados para determinar o resultado, promovendo um processo de votação justo e transparente.
Nos contratos de licitação selada, os licitantes apresentam suas propostas ocultas usando o esquema Commit-Reveal. Este processo garante que nenhum dos licitantes conheça os valores das propostas dos outros, promovendo uma concorrência leal. Após o período de apresentação de propostas, ocorre a fase de revelação e o contrato é adjudicado ao licitante qualificado com a melhor oferta.
O esquema Commit-Reveal encontra uma aplicação divertida em cenários de jogo, como uma versão digital de Pedra, Papel e Tesoura. Os jogadores cometem suas escolhas sem revelá-las, garantindo um jogo justo. Assim que ambos os jogadores se comprometerem, segue-se a fase de revelação, determinando o vencedor com base nas escolhas feitas.
Em ambientes blockchain, o front-running é uma preocupação onde atores mal-intencionados poderiam potencialmente se beneficiar do conhecimento de transações pendentes. O esquema Commit-Reveal ajuda a mitigar esses problemas, ocultando inicialmente os detalhes da transação. Quando chega a fase de revelação, é tarde demais para que atores mal-intencionados atuem com base nas informações, preservando assim a integridade da transação.
Arquiteturas mais recentes, como F3B, evoluíram para reduzir a sobrecarga associada aos esquemas tradicionais de Commit-Reveal. F3B minimiza a gravação de dados no blockchain, oferecendo uma arquitetura Commit-and-Reveal de baixa latência. Este desenvolvimento é notável porque significa a otimização e inovação contínuas nos esquemas Commit-Reveal, tornando-os mais eficientes para aplicações do mundo real.
Em ambientes blockchain, a geração de números aleatórios pode ser um desafio devido à natureza determinística dos protocolos blockchain. O esquema Commit-Reveal serve como uma alternativa descentralizada para geração de números aleatórios na blockchain Ethereum. Por exemplo, Randao, uma implementação RNG Commit-Reveal, utiliza feeds de dados públicos e incentiva a participação na geração de números aleatórios.
À medida que esta interessante visão do esquema Commit-Reveal chega ao fim, é importante considerar como este mecanismo simples, mas poderoso, ajuda a construir confiança e abertura em aplicações blockchain. Demos uma espiada em como a tecnologia blockchain pode mudar muitos campos, tornando os leilões justos, os sistemas de votação honestos e os cenários dos jogos mais criativos, entre outras coisas, com o esquema Commit-Reveal. A jornada não termina aqui; a natureza em constante evolução da tecnologia blockchain apresenta novos horizontes a explorar. Munido do conhecimento adquirido neste curso, você estará bem posicionado para se aprofundar no blockchain, explorar suas infinitas possibilidades e contribuir para moldar um futuro digital transparente, justo e descentralizado.