Construindo um aplicativo Blockchain com C++


E aí, pessoal! Prontos para embarcar na viagem maluca das notícias de cripto? No nosso canal do Telegram, vamos explorar o mundo das criptomoedas com leveza e bom humor. É como um papo de bar sobre Bitcoin, só que sem a ressaca no dia seguinte! 😄 Junte-se a nós agora e vamos desvendar esse universo juntos! 💸🚀

Junte-se ao Telegram


Introdução

Como um desenvolvedor experiente que viajou pelo labirinto de inúmeras bases de código, devo dizer que este projeto blockchain C++ é uma prova do poder da perseverança e da beleza da simplicidade. O código que você escreveu aqui é uma base sólida para qualquer aspirante a arquiteto de blockchain.

A inovadora tecnologia blockchain revolucionou significativamente o gerenciamento financeiro e da cadeia de suprimentos. Oferece um sistema descentralizado, garantindo transparência e segurança, minimizando ou mesmo eliminando a necessidade de intermediários.

Por que alguém deveria construir um aplicativo blockchain?

A tecnologia Blockchain oferece autenticidade e proteção robusta de dados, bem como uma plataforma confiável para troca de informações sem a necessidade de confiança entre as partes. Esta tecnologia permite o desenvolvimento de contratos inteligentes e tokens digitais, abrindo caminho para sistemas financeiros inovadores como Finanças Descentralizadas (DeFi) e ativos baseados em tokens, entre outros novos modelos económicos.

Este artigo é um rápido tour de 10 minutos pelo mundo do desenvolvimento Blockchain através de C++. 

Noções básicas de Blockchain

Em termos mais simples, um blockchain é como uma série de caixas digitais (blocos) interconectadas que contêm dados seguros e inalteráveis ​​sobre transações. Cada caixa é conectada à anterior usando códigos matemáticos complexos e exclusivos (hashes). Essa ligação cria uma cadeia, onde cada elo (bloco) representa uma etapa do histórico de transações dentro da rede. Em essência, esta estrutura permite um registo transparente e permanente de todas as transações em todo o sistema blockchain.

C++ em Blockchain

C++ se destaca como uma das linguagens de programação altamente eficazes para a tecnologia blockchain graças à sua impressionante velocidade, adaptabilidade e capacidade de fornecer controle preciso. Isso o torna excepcionalmente útil ao lidar com arquiteturas de sistemas complexas, desenvolvimento de jogos e aplicações financeiras. Está claro que C++ é incrivelmente versátil!

Por vários motivos, C++ se destaca no domínio do desenvolvimento de blockchain. Seu gerenciamento de memória de baixo nível permite que os desenvolvedores construam sistemas blockchain robustos e eficientes com controle ajustado. Dado o imenso tamanho e segurança da rede Bitcoin, que processa uma infinidade de transações, não é surpresa que o C++ tenha sido selecionado para esta tarefa desafiadora. Na verdade, aplicativos blockchain populares como Bitcoin, Litecoin, Ripple, Monero e EOS foram desenvolvidos usando C++.

Por que C++ é uma linguagem ideal para o desenvolvimento de blockchain?

  • Cálculos mais rápidos
  • Alto desempenho
  • Gerenciamento eficiente de memória
  • Recursos orientados a objetos
  • Suporta multithreading
  • Controle sobre os recursos do sistema 

Independentemente de você estar apenas começando com a tecnologia blockchain ou se esforçando para inovar além dos limites atuais, C++ é uma excelente opção quando se trata de criar aplicativos robustos e duradouros.

Compreendendo os conceitos de Blockchain com C++

Transações: No blockchain, as transações servem como espinha dorsal, alimentando todo o sistema. Cada bloco pode ser pensado como um cofre seguro, contendo detalhes cruciais sobre a troca e o valor destas transações, bem como as identidades das partes envolvidas. Estas transações constituem os registos fundamentais, narrando a história de quem negociou o quê, com quem e quando.

Pilares do Blockchain que você deve conhecer

A descentralização refere-se à característica única que diferencia o blockchain no mundo da tecnologia. Em termos mais simples, significa que nenhum indivíduo ou organização tem controle total sobre todo o banco de dados no blockchain. Esse recurso torna o sistema resiliente contra falhas e elimina possíveis vieses. Cada dispositivo participante da rede (frequentemente chamado de nó) armazena uma cópia dos dados da blockchain, promovendo transparência e protegendo contra quebras ou manipulações centralizadas.

O recurso de imutabilidade do Blockchain garante que quaisquer dados gravados nele permaneçam inalterados após serem registrados inicialmente. Isto é conseguido através da utilização de funções criptográficas, que impossibilitam a modificação dos dados sem alterar os blocos subsequentes da cadeia. Conseqüentemente, quaisquer alterações feitas não podem ser revertidas, tornando todo o sistema imutável.

Protocolos de Consenso de Blockchain: Uma coleção de regras que orientam como uma blockchain opera, com cada nó dentro da rede obrigado a concordar com esses procedimentos. Esses protocolos de consenso servem para coordenar os nós e garantir que compartilhem o mesmo entendimento em toda a rede.

Até agora, espero que você tenha compreendido muito bem os fundamentos do blockchain. Agora é hora de mudar de assunto e explorar as aplicações práticas. Você está pronto para arregaçar as mangas e mergulhar em alguma experiência prática?

Aqui, orientaremos você passo a passo na criação de um aplicativo blockchain básico, cobrindo tudo, desde a configuração inicial até o teste e eventual implantação.

1.Configurando o ambiente de desenvolvimento C++

Para iniciar seu projeto, é crucial que você reúna primeiro todos os requisitos necessários. Esta próxima seção irá guiá-lo na configuração de um ambiente de desenvolvimento ideal.

Instalando o compilador C++

Vamos começar entendendo o que é um compilador.

Um instrumento crucial na criação de software é um compilador, que serve como mediador entre o código de alto nível legível por humanos que você escreve e o código de máquina de baixo nível que o processador do seu computador pode processar e executar. Quando se trata de construir aplicativos blockchain usando C++, a ação inicial que você deve tomar é garantir um compilador C++ confiável. Esta ferramenta converterá seu código C++ em código de máquina executável, permitindo que seu aplicativo blockchain funcione sem problemas em vários sistemas.

Para iniciar o processo de desenvolvimento, certifique-se de configurar seu sistema instalando primeiro um compilador C++ adequado. Algumas opções populares para compiladores C++ incluem:

GCC (coleção de compiladores GNU):

Linux/MacOS:

Abra o terminal e digite os comandos fornecidos abaixo, respectivamente

a)Ubuntu/Debian:
sudo apt update
sudo apt install build-essential

b)Fedora 
sudo dnf install gcc gcc-c++

c)MacOS(ferramentas de linha de comando)
xcode-select -install

Para usuários do Windows: Se você estiver usando o Windows, o projeto MinGW-w64 pode ser uma ótima opção para você, pois oferece uma versão do GCC (GNU Compiler Collection) projetada para Windows, permitindo que você aproveite o poder do GCC em seu sistema Windows.

Etapas para instalar:

  • Baixe o instalador visitando o site oficial do MinGW-w64.
  • Execute o instalador após o download
  • Selecione a arquitetura adequada de acordo com suas necessidades
  • Siga as etapas do assistente para concluir
  • Atualize o sistema (esta é uma etapa opcional, mas recomendada).

  Clang:

Linux/MacOS: sudo apt install clang (também o clang já está instalado no MacOS)
Fedora: sudo dnf install clang
Windows: Clang pode ser instalado usando MinGW ou através do instalador do projeto LLVM

MSVC (Microsoft Visual C++): 

O Microsoft Visual C++, frequentemente abreviado como MSVC, é uma parte essencial do Visual Studio – um poderoso ambiente de desenvolvimento de software (IDE) criado pela Microsoft. O Visual Studio oferece uma ampla gama de ferramentas para criar, testar e iniciar aplicativos, com a instalação deste software configurando automaticamente o MSVC em seu sistema.

Verifique a instalação usando os seguintes comandos no terminal ou prompt de comando:

g++ -version  # Para GCC
clang -version  # Para Clangcl  # Para MSVC

Escolhendo um IDE

Um espaço de trabalho simplificado chamado Ambiente de Desenvolvimento Integrado (IDE) aumenta a eficiência, fornecendo recursos como preenchimento automático, solução de problemas e organização de projetos, tudo em uma plataforma fácil de usar. Alguns IDEs populares para programação C++ estão listados abaixo:

Visual Studio: Baixe o Visual Studio do site oficial.

E siga as seguintes etapas conforme mencionado na tabela abaixo:

CLion: Instalação e configuração:

CLion, um Ambiente de Desenvolvimento Integrado (IDE) amplamente utilizado, opera sob a égide da JetBrains, mas requer uma assinatura paga. No entanto, também oferece períodos de teste gratuitos.

oferece testes gratuitos.

Visual Studio Code: instale e configure extensões para desenvolvimento em C++.

Instalando bibliotecas necessárias

Use gerenciadores de pacotes para instalar bibliotecas essenciais como OpenSSL para funções criptográficas. Abaixo estão as etapas e várias bibliotecas para diferentes sistemas operacionais e seus comandos. WSvbuFg9l48q1TFn4ujocfLuIft_0wuhRew3Dkwsq51epOZ0jigJxCgj_IguXct?key=8h1rU_nRjsJaN1hLh5UINA”/>

Viva! Você configurou efetivamente seu ambiente de programação. Agora você está livre para começar a executar seu código no Ambiente de Desenvolvimento Integrado (IDE) que melhor lhe convier.

2.Construindo um Blockchain Simples com C++

Vamos nos familiarizar com os elementos que compõem uma classe de bloco antes de começarmos a codificá-la.

Componentes do Blockclass

  • Um índice é um número inteiro que armazena e mantém a ordem de classificação dos blocos cronologicamente.
  • Timestamp: O timestamp armazena a instância em que o bloco foi criado na forma de uma string. 
  • Transações:  As transações armazenam as informações de troca entre os participantes e o estado do blockchain naquele momento.
  • Hash anterior e Hash: O hash anterior armazena o hash criptográfico do bloco anterior, enquanto o hash é uma sequência de informações criptográficas misturadas ou hash.
  • Nonce: Um número inteiro usado no algoritmo de consenso de Prova de Trabalho (PoW). Atua como um contador que é incrementado para encontrar um hash válido que atenda ao alvo de dificuldade. O nonce é crucial para o processo de mineração em PoW, onde os mineradores competem para encontrar um nonce que gere um hash com um número específico de zeros à esquerda.

Vamos implementar todos os recursos no código agora:

bloco de classe {
público:    
índice int;    
std::string carimbo de data/hora;    
transações std::vector;    
std::string anteriorHash;    
std::string hash;    
int nonce; // Para PoW

// Construtor    
Block(int idx, std::string time , std::vector txs, std::string prevHash) {        
index = idx;        
carimbo de data/hora = hora;        
transações = txs;        
previoHash = prevHash;        
nonce = 0;        
hash = calcularHash; // Hash do bloco atual    
}
    // Método para calcular o hash do bloco    
std::string calculaHash {        
std::stringstream ss;        
ss << índice << timestamp << previousHash << nonce;        
// Adicione dados de transação e quaisquer detalhes adicionais ao cálculo de hash        
return sha256(ss.str); // Espaço reservado para a função hash real    
}

 // Método para extrair o bloco    
void mineBlock(int dificuldade) {        
std::string target(dificuldade, ‘0’); // Cria uma string de hash de destino        
while (hash.substr(0, dificuldade) != target) {            
nonce++;            
hash = calcularHash;       
  }    
}
};

Como um investidor criptográfico, depois de configurar minha classe de bloco com os atributos necessários, prossigo para estabelecer o Bloco Gênesis. O Genesis Block é o bloco inaugural do blockchain que requer inicialização e carrega um índice zero. Depois de definir o Bloco Genesis, continuo adicionando blocos subsequentes ao meu blockchain usando o método ‘addblock’. Aqui está o código:

class Blockchain {
public:    
std::vector chain;
    Blockchain {        
chain.push_back(createGenesisBlock);    
}
    Bloquear createGenesisBlock {        
Bloquear return(0, “01/01/2024”, “Bloco Gênesis”, “0”);   
 }
    Bloquear getLatestBlock {        
return chain.back;    
}
    void addBlock(Bloquear newBlock) {        
newBlock.previousHash = getLatestBlock.hash;        
newBlock.hash = newBlock.calculateHash;        
chain.push_back(newBlock);    
}
};

Estabeleça e autentique uma transação. Cada transação possui um identificador exclusivo, um modelo ou plano definido e detalhes sobre o remetente, o destinatário e o valor especificado. Depois de criar uma transação, você deve verificar sua validade utilizando a função activateTransaction.

class Transação {public:    
std::string remetente;    
std::string destinatário;    
valor em dobro;    
std::string transactionID;

// Construtor    Transaction(std::string snd, std::string rcp, double amt, std::string txID) {        
sender = snd;        
destinatário = rcp;        
valor = valor;        
transactionID = txID;    
}
    // Método para validar a transação    
bool validTransaction {       
 // Implementação da lógica de validação        
retornar verdadeiro; // Espaço reservado    
}
};

3.Implementando Mecanismos de Consenso em C++

Como analista de projetos, tenho o prazer de compartilhar que concluímos com sucesso 25% da nossa fase de construção. Seguindo em frente, é hora de nos concentrarmos na implementação dos mecanismos de consenso em nosso blockchain. Este componente crucial serve de base para toda a nossa aplicação. Vamos mergulhar nesta próxima etapa com entusiasmo e precisão!

Comprovante de Trabalho

Em termos mais simples, Prova de Trabalho (PoW) é um método usado pelos participantes de uma rede blockchain (frequentemente chamados de mineradores) para resolver problemas matemáticos complexos antes que possam anexar um novo bloco à cadeia. Essencialmente, eles procuram um número específico, conhecido como nonce, que, quando combinado com os dados do bloco, seu hash e detalhes adicionais, produz um valor de hash exclusivo que começa com um número especificado de zeros no início. Este design torna o processo eficiente e resistente a ataques prejudiciais.

No domínio da programação C++, você pode criar um sistema Proof of Work incorporando um atributo ‘proof’ e uma função ‘proofOfWork’ em sua classe Block. Esta é uma maneira de fazer isso:

#include
#include
#include
#include
#include
#include
usando namespace std;

string sha256 (const string str) {    
hash de char não assinado[SHA256_DIGEST_LENGTH];    
SHA256_CTX sha256;    
SHA256_Init(&sha256);    
SHA256_Update(&sha256, str.c_str, str.length);    
SHA256_Final(hash, &sha256);    
stringstream ss;    
for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) {        
ss << hex << setw(2) << setfill( ‘0’) << (int)hash[i];    
}    
return ss.str;
}
bloco de classe {
público:    
índice int;    
dados de string;    
string anteriorHash;    
hash de string;    
prova longa;    
time_t timestamp;

Bloquear(int idx, string d, string prevHash) {        
índice = idx;        
dados = d;        
previoHash = prevHash;        
timestamp = hora(nullptr);        
prova = 0;        
hash = calcularHash;   
 }
    string calculaHash const {        
stringstream ss;        
ss << índice << timestamp << dados << previousHash << prova;        
retornar sha256(ss.str);    
}
    void proofOfWork(int dificuldade) {        
string target(dificuldade, ‘0’) ;        
faça {            
prova++;            
hash = calcularHash;        
} while (hash.substr(0, dificuldade) != alvo);    
}
};
classe Blockchain {
público:    
vetor cadeia;    
dificuldade int;

Blockchain(int diff) {        
dificuldade = diferença;        
chain.emplace_back(Block(0, “Bloco Gênesis”, “0”));   
}
    void addBlock(string dados) {        
Bloquear newBlock(chain.size, dados, cadeia.back.hash);        
newBlock.proofOfWork(dificuldade);        
if (isValidProof(newBlock)) {            
chain.push_back(newBlock);        
}    
}
    bool isValidProof(const Bloco e bloco) const {        
return block.hash.substr(0, dificuldade) == string(dificuldade,
‘0’);    
}
};

Como pesquisador, no código fornecido, inicialmente tenho a tarefa de adicionar uma prova e seu hash correspondente a um bloco. Posteriormente, preciso estabelecer a complexidade da prova e depois proceder à sua extracção. Por fim, irei verificar ou validar a prova extraída.

4.Criando uma API Blockchain simples com C++

API, ou Interface de Programação de Aplicativo, serve como uma ponte que permite que diferentes programas de software se comuniquem perfeitamente. No contexto do blockchain, as APIs facilitam a interação com dados predefinidos na rede blockchain, tornando mais simples para os desenvolvedores criar aplicativos sem se aprofundar nos detalhes intrincados da estrutura subjacente. As APIs simplificam a integração da tecnologia blockchain com outras plataformas, como aplicativos web ou móveis, agilizando assim os processos de desenvolvimento e integração.

Configurando o ambiente da API

Instale e configure as ferramentas necessárias para a criação de APIs com C++ conforme mencionado na tabela abaixo:

Construindo a API

#include
#include
#include “blockchain.h”

usando namespace web;
usando namespace http;
usando utilitário de namespace;
usando namespace http::experimental::listener;

Blockchain blockchain( 4); // nível de dificuldade 4

void handleGet(http_request request) {    
json::value response = json::value:: variedade;    
int i = 0;    
for (auto& block : blockchain.chain) {        
json::value block_json;        
block_json[U(“index”)] = json::value::number(block.index);        
block_json[U(“dados”)] = json::valor::string(bloco.dados);        
block_json[U(“previousHash”)] =
json::value::string(block.previousHash);        
block_json[U(“hash”)] = json::value::string(block.hash);        
block_json[U(“prova”)] = json::valor::número(bloco.prova);        
block_json[U(“timestamp”)] = json::value::number(block.timestamp);        
resposta[i++] = block_json;    
}    
request.reply(status_codes::OK, resposta);
}
void handlePost(solicitação http_request) {    
request.extract_json.then([&](json::value requestData) {        
dados automáticos = requestData[U(“dados”)].as_string;
blockchain.addBlock(dados);
request.reply(status_codes ::OK, U(“Bloco adicionado com sucesso”));
}).wait;
}
int main {
http_listener listener(U(“http://localhost :8080”));

listener.support(methods::GET, handleGet);
listener.support(methods::POST, handlePost);

tente {
listener.open.wait;
cout << “Ouvindo em http://localhost:8080” << endl;
while (true);
} catch ( exceção const& e) {
cerr << e.what << endl;
   }
return 0;
}

handleGet recupera todo o blockchain no formato JSON.

handlePost adiciona um novo bloco ao blockchain usando os dados da solicitação POST.

Executando e testando o aplicativo

Executando o aplicativo

Depois de concluir os recursos primários do seu código seguindo o processo de desenvolvimento do software, é essencial passar para a etapa crítica e indispensável de compilação e teste de toda a aplicação. Esta etapa é crucial para garantir que todas as partes do aplicativo funcionem corretamente.

Compile o código:
g++ -o blockchain_api blockchain_api.cpp -lboost_system -lcrypto -lssl -lcpprest

Execute o executável:.
/blockchain_api

O código acima inicia o servidor API em http://localhost:8080.

Testando com Postman

  • Teste os endpoints da API usando Postman ou curl:
  • Adicionar um bloco:
  • Método: POSTAR
  • URL: http://localhost:8080
  • Corpo: formato JSON
{  
“dados”: “Este é um novo bloco”
}

Ver Blockchain:

  • Método: GET
  • URL: http://localhost:8080

Exemplo de adição de um bloco e visualização do blockchain usando a API criada em C++.

void handleGet(solicitação http_request) {    
json::value resposta = json::value::array;    
int i = 0;    
for (auto& block : blockchain.chain) {       
 json::value block_json;        
block_json[U(“index”)] = json::value::number(block.index);        
block_json[U(“dados”)] = json::valor::string(bloco.dados);        
block_json[U(“previousHash”)] =
json::value::string(block.previousHash);        
block_json[U(“hash”)] = json::value::string(block.hash);        
block_json[U(“prova”)] = json::valor::número(bloco.prova);        
block_json[U(“timestamp”)] = json::value::number(block.timestamp);        
resposta[i++] = block_json;    
}    
request.reply(status_codes::OK, resposta);
}
void handlePost(solicitação http_request) {    
request.extract_json.then([&](json::value requestData) {        
dados automáticos = requestData[U(“dados”)].as_string;
blockchain.addBlock(dados);
request.reply(status_codes ::OK, U(“Bloco adicionado com sucesso”)) 
}).wait;
}

A função handlePost gerencia o processo de adição de blocos ao blockchain, extraindo informações do conteúdo JSON fornecido e anexando um novo bloco à cadeia.

A função handleGet recupera todo o blockchain e o envia de volta como uma resposta JSON.

6.Exemplo ao vivo de construção de uma aplicação Blockchain com C++

 Execução passo a passo

Etapa 1: Crie a classe Block com os atributos necessários usando a sintaxe C++.

#include
#include
#include
#include
#include
#include

usando namespace std;

bloco de classe {
public:    
índice int;    
dados de string;    
string anteriorHash;    
hash de string;    
prova longa;    
time_t timestamp;

Bloquear(int idx, const string& data, const string& prevHash)        
: índice(idx), dados(dados), previousHash(prevHash), prova(0),
timestamp(time(nullptr)) {
hash = calcularHash;    
}
    string calculaHash const {        
stringstream ss;       
 ss << índice << timestamp << dados << previousHash << prova;        
retornar sha256(ss.str);    }

void proofOfWork(int dificuldade) {        
string target(dificuldade, ‘0’) ;        
faça {            
prova++;            
hash = calcularHash;        
} while (hash.substr(0, dificuldade) != alvo);    
}

privado:    
string sha256(const string& input) const {        
hash de char não assinado[SHA256_DIGEST_LENGTH];        
SHA256_CTX sha256;        
SHA256_Init(&sha256);        
SHA256_Update(&sha256, input.c_str, input.size);        
SHA256_Final(hash, &sha256);

stringstream ss;        
for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {            
ss << hex << setw(2) << setfill( ‘0’) << (int)hash[i];        
}        
return ss.str;    
}
};

Etapa 2: Implemente o método calculaHash.

#include
#include
#include
#include

bloco de classe {
público:    
índice int;    
std::string dados;    
std::string anteriorHash;    
std::string hash;    
prova longa;    
time_t timestamp;

Bloquear(int idx, const std::string& data, const std ::string& prevHash)        
: índice(idx), dados(dados), previousHash(prevHash), prova(0),
timestamp( time(nullptr)) {        
hash = calcularHash;    
}
 std::string calculaHash const {        
std::stringstream ss;        
ss << índice << timestamp << dados << previousHash << prova;        
retornar sha256(ss.str);   
 }

privado:    
std::string sha256(const std:: string& input) const {        
hash de char não assinado[SHA256_DIGEST_LENGTH];        
SHA256_CTX sha256;        
SHA256_Init(&sha256);        
SHA256_Update(&sha256, input.c_str, input.size);        
SHA256_Final(hash, &sha256);

std::stringstream ss;        
for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {            
ss << std::hex << std::setw( 2) << std::setfill(‘0’) << (int)hash[i];       
 }        
return ss.str;   
  }
};

Etapa 3: Defina a classe Blockchain e inicialize-a com um bloco genesis.

class Blockchain {
público:    
Blockchain(int dificuldade)        
: dificuldade(dificuldade ) {        
chain.emplace_back(Block(0, “Bloco Gênesis”, “0”));    
}
    void addBlock(const string& dados) {        
Bloquear newBlock(chain.size, dados , cadeia.back.hash);        
newBlock.proofOfWork(dificuldade);        
chain.push_back(newBlock);    
}
    const Block& lastBlock const {        
return chain.back;    
}
    vetor cadeia;

privado:
dificuldade interna;
};

Etapa 4: Implemente o método calculaHash.

#include
#include
#include
#include

bloco de classe {
público:    
índice int;    
std::string dados;    
std::string anteriorHash;    
std::string hash;    
prova longa;    time_t timestamp;

Bloquear(int idx, const std::string& data, const std::string& prevHash)        
: índice(idx), dados(dados), previousHash(prevHash), prova(0),
timestamp(time(nullptr)) {         < br/>hash = calcularHash;    
}
    std::string calculaHash const {        
std::stringstream ss;        
ss << índice << timestamp << dados << previousHash << prova;        
retornar sha256(ss.str);    
}
privado:    
std::string sha256(const std::string& input) const {        
hash de caractere não assinado[SHA256_DIGEST_LENGTH];        
SHA256_CTX sha256;        
SHA256_Init(&sha256);        
SHA256_Update(&sha256, input.c_str, input.size);        
SHA256_Final(hash, &sha256);

std::stringstream ss;        
for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {            
ss << std::hex << std::setw( 2) << std::setfill(‘0’) <<
(int)hash[i];        
}        
return ss.str;    
}
};

Etapa 5: Defina a classe Blockchain e inicialize-a com um bloco genesis.

class Blockchain {
público:    
Blockchain(int dificuldade)        
: dificuldade(dificuldade ) {        
chain.emplace_back(Block(0, “Bloco Gênesis”, “0”));    
}

void addBlock(const string& dados) {        
Bloquear newBlock(chain.size, data, chain.back.hash);        
newBlock.proofOfWork(dificuldade);        
chain.push_back(newBlock);    
}
    const Block& lastBlock const {        
return chain.back;    }

vetor cadeia;

privado:
dificuldade interna;};

Etapa 6: Configure o ambiente da API para lidar com solicitações usando uma biblioteca C++ adequada.

#include
#include

usando namespace web;
usando namespace web::http;
usando namespace web::http:: experimental::listener;

class BlockchainAPI {public:    
BlockchainAPI(const string& address, Blockchain& blockchain)     < br/>: listener(http_listener(U(endereço))), blockchain(blockchain) {        
listener.support(methods::GET,
std::bind(&BlockchainAPI::handleGet, this, std::placeholders::_1));
listener.support(methods::POST, std::bind (&BlockchainAPI::handlePost, this, std::placeholders::_1));

void start {listener.open.wait;        cout << “API Blockchain em execução…” << endl;     }
Privado:http_listener ouvinte;    Blockchain& blockchain;void handleGet(solicitação http_request) {json::value response = json::value::array;int i = 0;for (const auto& block : blockchain.chain) {json::value block_json;block_json[U( “índice”)] = json::valor::número(bloco.index);block_json[U(“dados”)] = json::valor::string(bloco.dados);block_json[U(“previousHash”) ] = json::value::string(block.previousHash);block_json[U(“hash”)] = json::value::string(block.hash);block_json[U(“proof”)] = json: :value::number(block.proof);block_json[U(“timestamp”)] = json::value::number(block.timestamp);response[i++] = block_json; }        request.reply(status_codes::OK, resposta);    }void handlePost(solicitação http_request) {request.extract_json.then([&](json::value requestData) {string dados = requestData[U(“dados”)].as_string;blockchain.addBlock(dados);request.reply (status_codes::OK, U(“Bloco adicionado com sucesso”));}) . espere ; }} ;

Como investidor em criptomoedas, eu colocaria meu conhecimento em ação tentando extrair um novo bloco e autenticar o blockchain por meio do Postman ou curl na etapa 7. Essa abordagem prática me permite garantir que o aplicativo esteja funcionando conforme o esperado e fornece confiança em sua capacidade de manter a integridade do blockchain.

Principal:
int main {    
Blockchain blockchain(4);  // Nível de dificuldade

BlockchainAPI api(“http://localhost:8080”, blockchain);    
api.start;

return 0;

}

Teste:
curl -X POST http://localhost:8080 -H “Conteúdo- Digite: application/json” -d ‘{“data”:”Este é um novo bloco”}’

Iniciar o desenvolvimento de blockchain usando C++ envolve muito mais do que escrever código; trata-se de construir os componentes fundamentais dos sistemas descentralizados, que prometem transformar dramaticamente numerosos sectores.

Em resumo, nos aprofundamos nos fundamentos da programação C++ conforme ela se aplica à tecnologia blockchain e passamos para o processo de implantação e teste de nosso aplicativo desenvolvido.

Depois de terminar este módulo, sinta-se à vontade para se aprofundar em tópicos como escalabilidade, protocolos de segurança, algoritmos de consenso sofisticados e utilização de contratos inteligentes para uma compreensão mais aprofundada.

Alimente sua sede de conhecimento, adote uma mentalidade de aprendizagem contínua e nunca pare de escrever código. Que suas inovações moldem o curso dos avanços tecnológicos!

2024-09-17 10:54