A tecnologia Blockchain traz abordagens inovadoras para alcançar consenso, segurança e privacidade. Uma dessas inovações é o esquema de revelação do comité, um protocolo criptográfico que aumenta a privacidade e a segurança dos utilizadores de blockchain. À medida que navega neste curso, irá desdobrar 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 aprofundada do esquema Commit-Reveal, a sua implementação e o seu impacto no cenário blockchain.
No seu núcleo, uma blockchain é como um livro-razão digital com uma reviravolta. Ao contrário dos livros tradicionais, é descentralizado, o que significa que nenhuma entidade tem controlo sobre toda a cadeia de blocos e é acessível a qualquer pessoa que faça parte da sua rede. Cada 'bloco' numa cadeia de blocos contém uma lista de transações. Uma vez 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 da blockchain é a sua ênfase na confiança e transparência. Qualquer pessoa na rede tem acesso e pode ver todas as transações numa cadeia de blocos. Esta abertura desencoraja a desonestidade e fomenta a confiança entre a comunidade. Pode estar a perguntar-se, como é que consegue esse nível de transparência? A resposta está nos seus mecanismos de consenso únicos e princípios criptográficos, nos quais vamos nos aprofundar à medida que progredimos neste curso.
Agora que tem um gostinho do que é blockchain, vamos apresentar um sabor especial a ele - o esquema Commit-Reveal. É como um espetáculo de mágica onde um mágico (o utilizador) primeiro se compromete com um determinado ato sem o revelar ao público (a rede) e depois, numa fase posterior, revela o acto. Em termos de blockchain, este é um processo de duas etapas: a 'Fase de Compromete' e a 'Fase de revelação'.
Na Fase de Compromisso, um utilizador submete uma versão com hash das suas informações para a cadeia de blocos. Esta versão em hash é como uma versão embaralhada da informação original que esconde o conteúdo real. A mágica da função hash é que é uma viagem só de ida; não pode desenfrear 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 utilizador revela a informação original, que é então verificada pela rede ao fazer hash novamente e compará-la com o hash inicial confirmado 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 detalhe nos próximos módulos.
À medida que navegamos para as profundezas do esquema Commit-Reveal, a nossa primeira paragem é a 'Fase de Comprometo'. Nesta fase, os utilizadores “comprometem-se” com um determinado valor, mas o fazem de uma forma que mantém o valor real em segredo. Imagine que tem um número secreto em mente, mas em vez de dizer a todos o que é, coloca-o numa caixa trancada e mostra-o a todos. Sabem que tem um número mas não sabem o que é. É disso que se trata o compromisso na blockchain!
Agora, como é que bloqueamos o nosso valor secreto? No mundo blockchain, usamos algo chamado função hash para fazer isso. Uma função de hash é como um liquidificador mágico. Coloca o seu valor secreto e exala uma versão embaralhado 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 unidirecional - uma vez que o valor é hash, não há maneira fácil de descobrir o valor original a partir do hash. Então, quando os utilizadores comprometem o seu valor, o que estão realmente a fazer é partilhar o hash do seu valor com todos na cadeia de blocos.
Depois do suspense incorporado na Fase de Compromisso, é hora da grande revelação! A Fase de Revelação é onde os valores comprometidos são finalmente revelados a todos os participantes na cadeia de blocos. Voltando à nossa analogia da caixa trancada, este é o momento em que a caixa é aberta e todos podem ver o número que escondeu. No mundo blockchain, revelar é um processo simples mas crucial que fornece transparência e justiça em várias aplicações.
Quando um utilizador revela o seu valor comprometido, a rede pode facilmente verificar a sua autenticidade através do hashing do valor revelado e comparando-o com o hash original partilhado durante a Fase de Confirmar. Se os hashes corresponderem, confirma que o utilizador não mudou de ideia a meio do caminho. Este processo de verificação simples mas poderoso ajuda a manter um ambiente de confiança onde todos jogam de acordo com as regras. É como ter um árbitro num jogo, garantir 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 através de contratos inteligentes. Um contrato inteligente é como um contrato tradicional, mas é digital e auto-executável. Imagine um robô imparcial que garante automaticamente que todas as partes cumpram os seus acordos, e tem a ideia de um contrato inteligente. É a ferramenta que pega a ideia teórica do Commit-Reveal e a torna prática no reino digital. Implementar um esquema Commit-Reveal através de um contrato inteligente é como coreografar uma dança em que cada passo segue um ritmo definido. Vamos percorrer esta coreografia passo a passo.
Comece por criar um contrato inteligente numa plataforma blockchain como o Ethereum. Este contrato terá as regras de compromisso para o esquema Commit-Reveal codificadas nele.
Projetar uma função de compromisso dentro do contrato inteligente. Esta função permitirá que os utilizadores submetam os seus valores de hash (a fase de compromisso) ao contrato.
À medida que os utilizadores comprometem os seus valores, o contrato inteligente irá armazenar estes hashes de forma segura na cadeia de blocos, aguardando a fase de revelação.
Em seguida, dentro do contrato inteligente, crie uma função de revelação. Quando chegar a hora, esta função permitirá que os utilizadores revelem os seus valores originais.
Ao revelar, o contrato inteligente verificará os valores revelados, fazendo-os hash e comparando-os com os hashes inicialmente cometidos. Se tudo corresponder, a revelação é validada.
Assim que todas as revelações forem recolhidas e verificadas, o contrato inteligente pode executar automaticamente os próximos passos, seja a contagem de votos, a determinação dos vencedores do leilão ou qualquer outra ação específica da aplicação.
Antes de implantar, teste minuciosamente o contrato inteligente para garantir que funciona como pretendido e está protegido contra potenciais explorações. Através destes passos, o contrato inteligente orquestra a dança Commit-Reveal, garantindo um processo justo e transparente.
//Identificador de licença SPDX: MIT
solidez do pragma ^0.8.0;
contrato CommitReveal {
struct Commit {
bytes32 hash;
bool revealed;
}
mapeamento (endereço = > Commit) commits públicos;
mapeamento (endereço = > uint256) public RevealedValues;
//A função de compromisso permite que os utilizadores enviem os seus valores com hash
função commits (bytes32 _hash) público {
require(commits[msg.sender].hash == 0, "Already committed");
commits[msg.sender].hash = _hash;
}
//A função de revelação permite aos utilizadores revelar os seus valores originais
função revelação (uint256 _value, string memory _salt) público {
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 poderia contabilizar votos
função tallyVotes () retornos de vista pública (uint256) {
uint256 Total de votos = 0;
para (endereço addr = endereço (0); addr & lt; endereço (-1); addr++) {
if (commits [addr] .revelado) {
totalVotes += revealedValues[addr];
}
}
devolver TotalVotes;
}
//Uma função para auditar o estado do contrato (apenas um exemplo, não é prático para grandes conjuntos de dados)
função auditoria () retornos de vista pública (mapeamento (endereço = > uint256) memória) {
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 prevenir transbordamentos, otimizar o uso de gás, gerir grandes conjuntos de dados e adicionar um controlo de acesso adequado). A função de finalização, em particular, é impraticável devido à iteração em todos os endereços possíveis e precisaria de um design diferente num cenário do mundo real. Este código pretende ser um ponto de partida e uma ferramenta educativa, não uma solução pronta para produção.
Os leilões online são uma das aplicações por excelência do esquema Commit-Reveal. Para evitar que outros usem os valores dos lances como alavancagem, os participantes podem apresentar as suas propostas secretamente durante a fase de compromisso. Quando o período de licitação termina, a fase de revelação começa, permitindo que os participantes divulgem as suas propostas. A oferta válida mais alta é determinada, 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 compromisso sem revelá-las a outros, garantindo a integridade e o sigilo dos votos. Assim que o período de votação terminar, a fase de revelação começa, permitindo que os eleitores divulgem os seus votos. Estes são então registados para determinar o resultado, promovendo um processo de votação justo e transparente.
Nos contratos de licitação selada, os licitantes apresentam as suas propostas ocultos usando o esquema Commit-Reveal. Este processo garante que nenhum dos licitantes saiba os valores das propostas de outros, promovendo uma concorrência justa. Após o período de apresentação da proposta, ocorre a fase de revelação e o contrato é adjudicado ao licitante qualificado com a melhor oferta.
O esquema Commit-Reveal encontra cenários divertidos de aplicação no jogo, como uma versão digital de Rock, Paper e Scissor. Os jogadores comprometem as suas escolhas sem revelá-las, garantindo um jogo justo. Depois 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 em que os agentes mal-intencionados podem potencialmente beneficiar do conhecimento de transações pendentes. O esquema Commit-Reveal ajuda a mitigar esses problemas ocultando os detalhes da transação inicialmente. Quando chega a fase de revelação, é tarde demais para os agentes mal-intencionados agirem com base nas informações, preservando assim a integridade da transação.
Arquiteturas mais recentes como o F3B evoluíram para reduzir a sobrecarga associada aos esquemas tradicionais do Commit-Reveal. O 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 contínua otimização e inovação nos esquemas Commit-Reveal, tornando-os mais eficientes para aplicações do mundo real.
Em ambientes blockchain, gerar 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 gerar números aleatórios na cadeia de blocos Ethereum. Por exemplo, o Randao, uma implementação do Commit-Reveal RNG, utiliza feeds de dados públicos e incentiva a participação na geração aleatória de números.
À medida que este olhar interessante sobre o esquema Commit-Reveal chega ao fim, é importante considerar como este mecanismo simples mas poderoso ajuda a construir confiança e abertura nas 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 de jogos mais criativos, entre outras coisas, com o esquema Commit-Reveal. A viagem não termina aqui; a natureza em constante evolução da tecnologia blockchain apresenta novos horizontes a explorar. Armado com o conhecimento adquirido através deste curso, está bem posicionado para mergulhar mais fundo na blockchain, explorar as 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 de revelação do comité, um protocolo criptográfico que aumenta a privacidade e a segurança dos utilizadores de blockchain. À medida que navega neste curso, irá desdobrar 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 aprofundada do esquema Commit-Reveal, a sua implementação e o seu impacto no cenário blockchain.
No seu núcleo, uma blockchain é como um livro-razão digital com uma reviravolta. Ao contrário dos livros tradicionais, é descentralizado, o que significa que nenhuma entidade tem controlo sobre toda a cadeia de blocos e é acessível a qualquer pessoa que faça parte da sua rede. Cada 'bloco' numa cadeia de blocos contém uma lista de transações. Uma vez 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 da blockchain é a sua ênfase na confiança e transparência. Qualquer pessoa na rede tem acesso e pode ver todas as transações numa cadeia de blocos. Esta abertura desencoraja a desonestidade e fomenta a confiança entre a comunidade. Pode estar a perguntar-se, como é que consegue esse nível de transparência? A resposta está nos seus mecanismos de consenso únicos e princípios criptográficos, nos quais vamos nos aprofundar à medida que progredimos neste curso.
Agora que tem um gostinho do que é blockchain, vamos apresentar um sabor especial a ele - o esquema Commit-Reveal. É como um espetáculo de mágica onde um mágico (o utilizador) primeiro se compromete com um determinado ato sem o revelar ao público (a rede) e depois, numa fase posterior, revela o acto. Em termos de blockchain, este é um processo de duas etapas: a 'Fase de Compromete' e a 'Fase de revelação'.
Na Fase de Compromisso, um utilizador submete uma versão com hash das suas informações para a cadeia de blocos. Esta versão em hash é como uma versão embaralhada da informação original que esconde o conteúdo real. A mágica da função hash é que é uma viagem só de ida; não pode desenfrear 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 utilizador revela a informação original, que é então verificada pela rede ao fazer hash novamente e compará-la com o hash inicial confirmado 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 detalhe nos próximos módulos.
À medida que navegamos para as profundezas do esquema Commit-Reveal, a nossa primeira paragem é a 'Fase de Comprometo'. Nesta fase, os utilizadores “comprometem-se” com um determinado valor, mas o fazem de uma forma que mantém o valor real em segredo. Imagine que tem um número secreto em mente, mas em vez de dizer a todos o que é, coloca-o numa caixa trancada e mostra-o a todos. Sabem que tem um número mas não sabem o que é. É disso que se trata o compromisso na blockchain!
Agora, como é que bloqueamos o nosso valor secreto? No mundo blockchain, usamos algo chamado função hash para fazer isso. Uma função de hash é como um liquidificador mágico. Coloca o seu valor secreto e exala uma versão embaralhado 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 unidirecional - uma vez que o valor é hash, não há maneira fácil de descobrir o valor original a partir do hash. Então, quando os utilizadores comprometem o seu valor, o que estão realmente a fazer é partilhar o hash do seu valor com todos na cadeia de blocos.
Depois do suspense incorporado na Fase de Compromisso, é hora da grande revelação! A Fase de Revelação é onde os valores comprometidos são finalmente revelados a todos os participantes na cadeia de blocos. Voltando à nossa analogia da caixa trancada, este é o momento em que a caixa é aberta e todos podem ver o número que escondeu. No mundo blockchain, revelar é um processo simples mas crucial que fornece transparência e justiça em várias aplicações.
Quando um utilizador revela o seu valor comprometido, a rede pode facilmente verificar a sua autenticidade através do hashing do valor revelado e comparando-o com o hash original partilhado durante a Fase de Confirmar. Se os hashes corresponderem, confirma que o utilizador não mudou de ideia a meio do caminho. Este processo de verificação simples mas poderoso ajuda a manter um ambiente de confiança onde todos jogam de acordo com as regras. É como ter um árbitro num jogo, garantir 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 através de contratos inteligentes. Um contrato inteligente é como um contrato tradicional, mas é digital e auto-executável. Imagine um robô imparcial que garante automaticamente que todas as partes cumpram os seus acordos, e tem a ideia de um contrato inteligente. É a ferramenta que pega a ideia teórica do Commit-Reveal e a torna prática no reino digital. Implementar um esquema Commit-Reveal através de um contrato inteligente é como coreografar uma dança em que cada passo segue um ritmo definido. Vamos percorrer esta coreografia passo a passo.
Comece por criar um contrato inteligente numa plataforma blockchain como o Ethereum. Este contrato terá as regras de compromisso para o esquema Commit-Reveal codificadas nele.
Projetar uma função de compromisso dentro do contrato inteligente. Esta função permitirá que os utilizadores submetam os seus valores de hash (a fase de compromisso) ao contrato.
À medida que os utilizadores comprometem os seus valores, o contrato inteligente irá armazenar estes hashes de forma segura na cadeia de blocos, aguardando a fase de revelação.
Em seguida, dentro do contrato inteligente, crie uma função de revelação. Quando chegar a hora, esta função permitirá que os utilizadores revelem os seus valores originais.
Ao revelar, o contrato inteligente verificará os valores revelados, fazendo-os hash e comparando-os com os hashes inicialmente cometidos. Se tudo corresponder, a revelação é validada.
Assim que todas as revelações forem recolhidas e verificadas, o contrato inteligente pode executar automaticamente os próximos passos, seja a contagem de votos, a determinação dos vencedores do leilão ou qualquer outra ação específica da aplicação.
Antes de implantar, teste minuciosamente o contrato inteligente para garantir que funciona como pretendido e está protegido contra potenciais explorações. Através destes passos, o contrato inteligente orquestra a dança Commit-Reveal, garantindo um processo justo e transparente.
//Identificador de licença SPDX: MIT
solidez do pragma ^0.8.0;
contrato CommitReveal {
struct Commit {
bytes32 hash;
bool revealed;
}
mapeamento (endereço = > Commit) commits públicos;
mapeamento (endereço = > uint256) public RevealedValues;
//A função de compromisso permite que os utilizadores enviem os seus valores com hash
função commits (bytes32 _hash) público {
require(commits[msg.sender].hash == 0, "Already committed");
commits[msg.sender].hash = _hash;
}
//A função de revelação permite aos utilizadores revelar os seus valores originais
função revelação (uint256 _value, string memory _salt) público {
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 poderia contabilizar votos
função tallyVotes () retornos de vista pública (uint256) {
uint256 Total de votos = 0;
para (endereço addr = endereço (0); addr & lt; endereço (-1); addr++) {
if (commits [addr] .revelado) {
totalVotes += revealedValues[addr];
}
}
devolver TotalVotes;
}
//Uma função para auditar o estado do contrato (apenas um exemplo, não é prático para grandes conjuntos de dados)
função auditoria () retornos de vista pública (mapeamento (endereço = > uint256) memória) {
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 prevenir transbordamentos, otimizar o uso de gás, gerir grandes conjuntos de dados e adicionar um controlo de acesso adequado). A função de finalização, em particular, é impraticável devido à iteração em todos os endereços possíveis e precisaria de um design diferente num cenário do mundo real. Este código pretende ser um ponto de partida e uma ferramenta educativa, não uma solução pronta para produção.
Os leilões online são uma das aplicações por excelência do esquema Commit-Reveal. Para evitar que outros usem os valores dos lances como alavancagem, os participantes podem apresentar as suas propostas secretamente durante a fase de compromisso. Quando o período de licitação termina, a fase de revelação começa, permitindo que os participantes divulgem as suas propostas. A oferta válida mais alta é determinada, 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 compromisso sem revelá-las a outros, garantindo a integridade e o sigilo dos votos. Assim que o período de votação terminar, a fase de revelação começa, permitindo que os eleitores divulgem os seus votos. Estes são então registados para determinar o resultado, promovendo um processo de votação justo e transparente.
Nos contratos de licitação selada, os licitantes apresentam as suas propostas ocultos usando o esquema Commit-Reveal. Este processo garante que nenhum dos licitantes saiba os valores das propostas de outros, promovendo uma concorrência justa. Após o período de apresentação da proposta, ocorre a fase de revelação e o contrato é adjudicado ao licitante qualificado com a melhor oferta.
O esquema Commit-Reveal encontra cenários divertidos de aplicação no jogo, como uma versão digital de Rock, Paper e Scissor. Os jogadores comprometem as suas escolhas sem revelá-las, garantindo um jogo justo. Depois 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 em que os agentes mal-intencionados podem potencialmente beneficiar do conhecimento de transações pendentes. O esquema Commit-Reveal ajuda a mitigar esses problemas ocultando os detalhes da transação inicialmente. Quando chega a fase de revelação, é tarde demais para os agentes mal-intencionados agirem com base nas informações, preservando assim a integridade da transação.
Arquiteturas mais recentes como o F3B evoluíram para reduzir a sobrecarga associada aos esquemas tradicionais do Commit-Reveal. O 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 contínua otimização e inovação nos esquemas Commit-Reveal, tornando-os mais eficientes para aplicações do mundo real.
Em ambientes blockchain, gerar 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 gerar números aleatórios na cadeia de blocos Ethereum. Por exemplo, o Randao, uma implementação do Commit-Reveal RNG, utiliza feeds de dados públicos e incentiva a participação na geração aleatória de números.
À medida que este olhar interessante sobre o esquema Commit-Reveal chega ao fim, é importante considerar como este mecanismo simples mas poderoso ajuda a construir confiança e abertura nas 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 de jogos mais criativos, entre outras coisas, com o esquema Commit-Reveal. A viagem não termina aqui; a natureza em constante evolução da tecnologia blockchain apresenta novos horizontes a explorar. Armado com o conhecimento adquirido através deste curso, está bem posicionado para mergulhar mais fundo na blockchain, explorar as suas infinitas possibilidades e contribuir para moldar um futuro digital transparente, justo e descentralizado.