Xây dựng ứng dụng Blockchain bằng C++

Xây dựng ứng dụng Blockchain bằng C++

Giới thiệu

Là một nhà phát triển dày dạn kinh nghiệm đã hành trình qua mê cung của vô số cơ sở mã, tôi phải nói rằng dự án blockchain C++ này là minh chứng cho sức mạnh của sự kiên trì và vẻ đẹp của sự đơn giản. Mã bạn viết ở đây là nền tảng vững chắc cho bất kỳ kiến ​​trúc sư blockchain đầy tham vọng nào.

Công nghệ blockchain tiên tiến đã cách mạng hóa đáng kể cả quản lý chuỗi cung ứng và tài chính. Nó cung cấp một hệ thống phi tập trung, đảm bảo tính minh bạch và bảo mật, do đó giảm thiểu hoặc thậm chí loại bỏ yêu cầu đối với người trung gian.

Tại sao nên xây dựng ứng dụng blockchain?

Công nghệ chuỗi khối cung cấp tính xác thực và bảo vệ dữ liệu mạnh mẽ cũng như nền tảng đáng tin cậy để trao đổi thông tin mà không cần sự tin tưởng giữa các bên. Công nghệ này cho phép phát triển các hợp đồng thông minh và mã thông báo kỹ thuật số, mở đường cho các hệ thống tài chính đổi mới như Tài chính phi tập trung (DeFi) và tài sản dựa trên mã thông báo, cùng các mô hình kinh tế mới khác.

Bài viết này là một chuyến tham quan ngắn 10 phút vào thế giới phát triển Blockchain thông qua C++. 

Cơ bản về chuỗi khối

Nói một cách đơn giản hơn, blockchain giống như một loạt các hộp (khối) kỹ thuật số được kết nối với nhau chứa dữ liệu an toàn và không thể thay đổi về các giao dịch. Mỗi hộp được kết nối với hộp trước nó bằng cách sử dụng các mã toán học phức tạp, duy nhất (băm). Liên kết này tạo ra một chuỗi, trong đó mỗi liên kết (khối) đại diện cho một bước trong lịch sử giao dịch trong mạng. Về bản chất, cấu trúc này cho phép ghi lại minh bạch và vĩnh viễn tất cả các giao dịch trên toàn bộ hệ thống blockchain.

C++ trong Chuỗi khối

C++ nổi bật là một trong những ngôn ngữ lập trình hiệu quả cao cho công nghệ blockchain nhờ tốc độ ấn tượng, khả năng thích ứng và khả năng cung cấp khả năng kiểm soát chính xác. Điều này làm cho nó đặc biệt hữu ích khi xử lý kiến ​​trúc hệ thống phức tạp, phát triển trò chơi và ứng dụng tài chính. Rõ ràng là C++ cực kỳ linh hoạt!

Vì nhiều lý do khác nhau, C++ nổi bật trong lĩnh vực phát triển blockchain. Quản lý bộ nhớ cấp thấp của nó cho phép các nhà phát triển xây dựng các hệ thống blockchain mạnh mẽ và hiệu quả với khả năng kiểm soát tinh chỉnh. Với quy mô to lớn và tính bảo mật của mạng Bitcoin, nơi xử lý vô số giao dịch, không có gì ngạc nhiên khi C++ được chọn cho nhiệm vụ đầy thách thức này. Trên thực tế, các ứng dụng blockchain phổ biến như Bitcoin, Litecoin, Ripple, Monero và EOS đều được xây dựng bằng C++.

Tại sao C++ là ngôn ngữ lý tưởng để phát triển blockchain?

  • Tính toán nhanh hơn
  • Hiệu suất cao
  • Quản lý bộ nhớ hiệu quả
  • Tính năng hướng đối tượng
  • Hỗ trợ đa luồng
  • Kiểm soát tài nguyên hệ thống 

Bất kể bạn mới bắt đầu với công nghệ blockchain hay đang nỗ lực đổi mới vượt ra ngoài ranh giới hiện tại, C++ là một lựa chọn tuyệt vời khi tạo ra các ứng dụng mạnh mẽ và lâu dài.

Tìm hiểu các khái niệm về chuỗi khối bằng C++

Giao dịch: Trong blockchain, các giao dịch đóng vai trò là xương sống, cung cấp năng lượng cho toàn bộ hệ thống. Mỗi khối có thể được coi là một nơi an toàn an toàn, chứa các thông tin chi tiết quan trọng về việc trao đổi và giá trị của các giao dịch này, cũng như danh tính của các bên liên quan. Những giao dịch này tạo thành các hồ sơ cơ bản, kể lại câu chuyện về việc ai giao dịch cái gì, với ai và khi nào.

Các trụ cột của Blockchain bạn nên biết

Xây dựng ứng dụng Blockchain bằng C++

Phân cấp đề cập đến đặc điểm độc đáo khiến blockchain trở nên khác biệt trong thế giới công nghệ. Nói một cách đơn giản hơn, điều đó có nghĩa là không một cá nhân hay tổ chức nào có toàn quyền kiểm soát toàn bộ cơ sở dữ liệu trên blockchain. Tính năng này giúp hệ thống có khả năng phục hồi tốt trước các lỗi và loại bỏ các sai lệch tiềm ẩn. Mỗi thiết bị tham gia vào mạng (thường được gọi là nút) lưu trữ một bản sao của dữ liệu blockchain, thúc đẩy tính minh bạch và bảo vệ khỏi sự cố hoặc thao túng tập trung.

Tính năng bất biến của Blockchain đảm bảo rằng mọi dữ liệu được ghi trên đó không thay đổi sau khi được ghi lại lần đầu. Điều này đạt được thông qua việc sử dụng các chức năng mã hóa, khiến không thể sửa đổi dữ liệu mà không thay đổi các khối tiếp theo trong chuỗi. Do đó, mọi thay đổi được thực hiện đều không thể đảo ngược được, khiến toàn bộ hệ thống không thể thay đổi được.

Giao thức đồng thuận Blockchain: Tập hợp các quy tắc hướng dẫn cách hoạt động của chuỗi khối, yêu cầu mọi nút trong mạng phải đồng ý với các quy trình này. Các giao thức đồng thuận này dùng để điều phối các nút và đảm bảo chúng có chung sự hiểu biết trên toàn bộ mạng.

Cho đến nay, tôi hy vọng bạn đã nắm khá tốt các nguyên tắc cơ bản của blockchain. Bây giờ là lúc chuyển số và khám phá các ứng dụng thực tế. Bạn đã sẵn sàng xắn tay áo và đi sâu vào trải nghiệm thực tế chưa?

Tại đây, chúng tôi sẽ hướng dẫn bạn từng bước cách tạo một ứng dụng blockchain cơ bản, bao gồm mọi thứ từ thiết lập ban đầu đến thử nghiệm và triển khai cuối cùng.

1.Thiết lập môi trường phát triển C++

Để khởi động dự án của bạn, điều quan trọng là bạn phải thu thập tất cả các yêu cầu cần thiết trước tiên. Phần sắp tới này sẽ hướng dẫn bạn thiết lập một môi trường phát triển tối ưu.

Cài đặt trình biên dịch C++

Hãy bắt đầu bằng cách hiểu trình biên dịch là gì.

Một công cụ quan trọng trong việc tạo ra phần mềm là trình biên dịch, đóng vai trò trung gian giữa mã cấp cao mà con người có thể đọc được mà bạn viết và mã máy cấp thấp mà bộ xử lý máy tính của bạn có thể xử lý và thực thi. Khi nói đến việc xây dựng các ứng dụng blockchain bằng C++, hành động đầu tiên bạn nên thực hiện là đảm bảo có một trình biên dịch C++ đáng tin cậy. Công cụ này sẽ chuyển đổi mã C++ của bạn thành mã máy thực thi, cho phép ứng dụng blockchain của bạn chạy trơn tru trên nhiều hệ thống.

Để bắt đầu quá trình phát triển, trước tiên hãy đảm bảo thiết lập hệ thống của bạn bằng cách cài đặt trình biên dịch C++ phù hợp. Một số tùy chọn phổ biến cho trình biên dịch C++ bao gồm:

GCC(Bộ sưu tập trình biên dịch GNU):

Linux/MacOS:

Mở terminal và gõ các lệnh tương ứng bên dưới

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

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

c)MacOS(công cụ dòng lệnh)
xcode-select -install

Dành cho người dùng Windows: Nếu bạn đang sử dụng Windows, dự án MinGW-w64 có thể là một lựa chọn tuyệt vời cho bạn vì nó cung cấp phiên bản GCC (Bộ sưu tập trình biên dịch GNU) được thiết kế cho Windows, cho phép bạn khai thác sức mạnh của GCC trong hệ thống Windows của bạn.

Các bước để cài đặt:

  • Tải xuống trình cài đặt bằng cách truy cập trang web chính thức của MinGW-w64.
  • Chạy trình cài đặt sau khi tải xuống
  • Chọn kiến ​​trúc phù hợp theo nhu cầu của bạn
  • Thực hiện theo các bước hướng dẫn để hoàn thành
  • Cập nhật hệ thống(Đây là bước tùy chọn nhưng được khuyến nghị).

  Tiếng kêu:

Linux/MacOS: sudo apt install clang (cũng clang đã được cài đặt trong MacOS)
Fedora: sudo dnf install clang
Windows: Clang có thể được cài đặt bằng MinGW hoặc thông qua trình cài đặt dự án LLVM

MSVC (Microsoft Visual C++): 

Microsoft Visual C++, thường được viết tắt là MSVC, là một phần thiết yếu của Visual Studio – môi trường phát triển phần mềm (IDE) mạnh mẽ do Microsoft tạo ra. Visual Studio cung cấp nhiều công cụ để tạo, thử nghiệm và khởi chạy ứng dụng, với việc cài đặt phần mềm này sẽ tự động định cấu hình MSVC trên hệ thống của bạn.

Xác minh cài đặt bằng các lệnh sau trong terminal hoặc dấu nhắc lệnh:

g++ -version  # Dành cho GCC
clang -version  # Dành cho Clangcl  # Dành cho MSVC

Chọn IDE

Một không gian làm việc được sắp xếp hợp lý được gọi là Môi trường phát triển tích hợp (IDE) nâng cao hiệu quả bằng cách cung cấp các tính năng như tự động hoàn thành, khắc phục sự cố và tổ chức các dự án, tất cả trong một nền tảng thân thiện với người dùng. Một số IDE phổ biến cho lập trình C++ được liệt kê dưới đây:

Visual Studio: Tải xuống Visual Studio từ trang web chính thức.

Và hãy làm theo các bước sau như được đề cập trong bảng dưới đây:

Xây dựng ứng dụng Blockchain bằng C++

CLion: Cài đặt và thiết lập:

CLion, Môi trường phát triển tích hợp (IDE) được sử dụng rộng rãi, hoạt động dưới sự bảo trợ của JetBrains, tuy nhiên nó yêu cầu đăng ký trả phí. Tuy nhiên, nó cũng cung cấp thời gian dùng thử miễn phí.

cung cấp các thử nghiệm miễn phí.

Xây dựng ứng dụng Blockchain bằng C++

Mã Visual Studio: Cài đặt và thiết lập các tiện ích mở rộng để phát triển C++.

Xây dựng ứng dụng Blockchain bằng C++

Cài đặt thư viện cần thiết

Sử dụng trình quản lý gói để cài đặt các thư viện cần thiết như OpenSSL cho các chức năng mã hóa. Dưới đây là các bước và các thư viện khác nhau dành cho các Hệ điều hành khác nhau và các lệnh của chúng.Xây dựng ứng dụng Blockchain bằng C++

Hoan hô! Bạn đã cấu hình hiệu quả môi trường lập trình của mình. Bây giờ, bạn có thể thoải mái bắt đầu chạy mã của mình trong Môi trường phát triển tích hợp (IDE) phù hợp nhất với bạn.

2.Xây dựng một chuỗi khối đơn giản bằng C++

Chúng ta hãy làm quen với các thành phần tạo nên một lớp khối trước khi đi sâu vào mã hóa nó.

Các thành phần của Blockclass

  • Chỉ mục là một số nguyên lưu trữ và duy trì thứ tự sắp xếp của các khối theo trình tự thời gian.
  • Dấu thời gian: Dấu thời gian lưu trữ phiên bản mà khối được tạo ở dạng chuỗi. 
  • Giao dịch:  Giao dịch lưu trữ thông tin trao đổi giữa những người tham gia và trạng thái của chuỗi khối tại thời điểm đó.
  • Băm trước và băm: Băm trước lưu trữ hàm băm mật mã của khối trước đó trong khi hàm băm là một chuỗi thông tin mật mã bị xáo trộn hoặc băm.
  • Nonce: Một số nguyên được sử dụng trong thuật toán đồng thuận Bằng chứng công việc (PoW). Hoạt động như một bộ đếm được tăng lên để tìm hàm băm hợp lệ đáp ứng mục tiêu độ khó. Nonce rất quan trọng đối với quá trình khai thác trong PoW, nơi các thợ mỏ cạnh tranh để tìm ra nonce tạo ra hàm băm với số lượng số 0 đứng đầu cụ thể.

Hãy triển khai tất cả các tính năng trong mã ngay bây giờ:

Khối lớp {
công khai:    
int chỉ mục;    
std::string dấu thời gian;    
std::vector giao dịch;    
std::string previousHash;    
std::string băm;    
int nonce; // Dành cho PoW

// Trình xây dựng    
Block(int idx, std::string time , std::vector txs, std::string prevHash) {        
index = idx;        
dấu thời gian = thời gian;        
giao dịch = txs;        
previousHash = prevHash;        
nonce = 0;        
băm = tínhHash; // Hàm băm của khối hiện tại    
>
    // Phương pháp tính hàm băm của khối    
std::string tínhHash {        
std::stringstream ss;        
ss << chỉ mục << dấu thời gian << previousHash << nonce;        
// Thêm dữ liệu giao dịch và mọi chi tiết bổ sung vào phép tính băm        
return sha256(ss.str); // Phần giữ chỗ cho hàm băm thực tế    
>

 // Phương thức khai thác khối    
void MineBlock(int độ khó) {        
std::string target(độ khó, ‘0’); // Tạo một chuỗi băm mục tiêu        
while (hash.substr(0, độ khó) != target) {            
nonce++;            
băm = tínhHash;       
  }    
>
};

Với tư cách là một nhà đầu tư tiền điện tử, sau khi thiết lập lớp khối của mình với các thuộc tính cần thiết, tôi sẽ tiến hành thiết lập Khối Genesis. Khối Genesis là khối đầu tiên trong chuỗi khối yêu cầu khởi tạo và mang chỉ số bằng 0. Sau khi xác định Khối Genesis, tôi tiếp tục bằng cách thêm các khối tiếp theo vào chuỗi khối của mình bằng phương pháp ‘addblock’. Đây là mã:

lớp Blockchain {
công khai:    
std::vector chuỗi;
    Blockchain {        
chain.push_back(createGenesisBlock);    

    Chặn createGenesisBlock {        
return Block(0, “01/01/2024”, “Khối Genesis”, “0”);   

    Chặn getLatestBlock {        
return chain.back;    

    void addBlock(Block newBlock) {        
newBlock.previousHash = getLatestBlock.hash;        
newBlock.hash = newBlock. CalculateHash;        
chain.push_back(newBlock);    

};

Thiết lập và xác thực một giao dịch. Mỗi giao dịch sở hữu một mã định danh duy nhất, một mẫu hoặc bản thiết kế xác định và thông tin chi tiết về người gửi, người nhận và số tiền được chỉ định. Sau khi tạo giao dịch, bạn nên kiểm tra tính hợp lệ của giao dịch đó bằng cách sử dụng hàm validTransaction.

lớp Giao dịch {công khai:    
std::người gửi chuỗi;    
std::người nhận chuỗi;    
số tiền gấp đôi;    
std::string giao dịchID;

// Trình xây dựng    Giao dịch(std::string snd, std::string RCp, double amt, std::string txID) {        
sender = snd;        
người nhận = rcp;        
số tiền = số tiền;        
transactionID = txID;    
>
    // Phương thức xác thực giao dịch    
bool validTransaction {       
 // Triển khai logic xác thực        
trả về true; // Trình giữ chỗ    
>
};

3.Triển khai Cơ chế Đồng thuận trong C++

Với tư cách là nhà phân tích dự án, tôi vui mừng chia sẻ rằng chúng tôi đã hoàn thành thành công 25% giai đoạn xây dựng của mình. Trong tương lai, đã đến lúc chúng ta tập trung vào việc triển khai các cơ chế đồng thuận trong blockchain của mình. Thành phần quan trọng này đóng vai trò là nền tảng cho toàn bộ ứng dụng của chúng tôi. Hãy cùng đi sâu vào giai đoạn tiếp theo này với sự nhiệt tình và chính xác!

Bằng chứng công việc

Nói một cách đơn giản hơn, Proof of Work (PoW) là phương pháp được những người tham gia mạng blockchain (thường được gọi là thợ mỏ) sử dụng để giải quyết các vấn đề toán học phức tạp trước khi họ có thể thêm một khối mới vào chuỗi. Về cơ bản, họ đang tìm kiếm một số cụ thể, được gọi là số nonce, khi kết hợp với dữ liệu của khối, hàm băm của nó và các chi tiết bổ sung sẽ tạo ra một giá trị băm duy nhất bắt đầu bằng một số số 0 được chỉ định ở đầu. Thiết kế này làm cho quá trình vừa hiệu quả vừa có khả năng chống lại các cuộc tấn công có hại.

Trong lĩnh vực lập trình C++, bạn có thể tạo hệ thống Proof of Work bằng cách kết hợp thuộc tính ‘proof’ và hàm ‘proofOfWork’ vào lớp Block của mình. Đây là một cách để thực hiện điều này:

#include
#include
#include
#include
#include
#include
sử dụng không gian tên std;

chuỗi sha256 (const string str) {    
băm ký tự không dấu[SHA256_DIGEST_LENGTH];    
SHA256_CTX sha256;    
SHA256_Init(&sha256);    
SHA256_Update(&sha256, str.c_str, str.length);    
SHA256_Final(băm, &sha256);    
stringstream ss;    
for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) {        
ss << hex << setw(2) << setfill( ‘0’) << (int)hash[i];    
}    
trả về ss.str;

Khối lớp {
công khai:    
int chỉ mục;    
dữ liệu chuỗi;    
chuỗi previousHash;    
băm chuỗi;    
bằng chứng dài;    
dấu thời gian time_t;

Chặn(int idx, chuỗi d, chuỗi prevHash) {        
chỉ mục = idx;        
dữ liệu = d;        
previousHash = prevHash;        
dấu thời gian = thời gian(nullptr);        
bằng chứng = 0;        
băm = tínhHash;   

    chuỗi tínhHash const {        
stringstream ss;        
ss << chỉ mục << dấu thời gian << dữ liệu << previousHash << bằng chứng;        
trả về sha256(ss.str);    

    void proofOfWork(int độ khó) {        
chuỗi mục tiêu(độ khó, ‘0’) ;        
làm {            
proof++;            
băm = tínhHash;        
} while (hash.substr(0, độ khó) != target);    

};
lớp Blockchain {
công khai:    
chuỗi vector;    
độ khó không nhỏ;

Blockchain(int diff) {        
độ khó = khác biệt;        
chain.emplace_back(Block(0, “Khối Genesis”, “0”));   

    void addBlock(string data) {        
Chặn newBlock(chain.size, data, chain.back.hash);        
newBlock.proofOfWork(độ khó);        
if (isValidProof(newBlock)) {            
chain.push_back(newBlock);        
}    
>
    bool isValidProof(const Block& block) const {        
return block.hash.substr(0, độ khó) == string(độ khó,
‘0’);    

};

Với tư cách là một nhà nghiên cứu, trong mã được cung cấp, ban đầu tôi được giao nhiệm vụ thêm bằng chứng và hàm băm tương ứng của nó vào một khối. Sau đó, tôi cần thiết lập độ phức tạp của bằng chứng và sau đó tiến hành khai thác nó. Cuối cùng, tôi sẽ xác minh hoặc xác nhận bằng chứng khai thác được.

4.Tạo API Blockchain đơn giản bằng C++

API, hay Giao diện lập trình ứng dụng, đóng vai trò là cầu nối cho phép các chương trình phần mềm khác nhau giao tiếp liền mạch. Trong bối cảnh blockchain, API tạo điều kiện tương tác dễ dàng với dữ liệu được xác định trước trên mạng blockchain, giúp các nhà phát triển tạo ứng dụng đơn giản hơn mà không cần đi sâu vào các chi tiết phức tạp của cấu trúc cơ bản. API đơn giản hóa việc tích hợp công nghệ blockchain với các nền tảng khác như ứng dụng web hoặc thiết bị di động, từ đó hợp lý hóa quá trình phát triển và tích hợp.

Thiết lập môi trường API

Cài đặt và định cấu hình các công cụ cần thiết để tạo API bằng C++ như được đề cập trong bảng bên dưới:

Xây dựng ứng dụng Blockchain bằng C++Xây dựng ứng dụng Blockchain bằng C++Xây dựng ứng dụng Blockchain bằng C++

Xây dựng API

#include
#include
#include “blockchain.h”

sử dụng web không gian tên;
sử dụng không gian tên http;
sử dụng tiện ích không gian tên;
sử dụng không gian tên http::experimental::listener;

Chuỗi khối chuỗi khối( 4); // độ khó cấp 4

void HandleGet(http_request request) {    
json::value reply = json::value:: mảng;    
int i = 0;    
for (auto& block : blockchain.chain) {        
json::value block_json;        
block_json[U(“index”)] = json::value::number(block.index);        
block_json[U(“data”)] = json::value::string(block.data);        
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(“dấu thời gian”)] = json::value::number(block.timestamp);        
phản hồi[i++] = block_json;    
}    
request.reply(status_codes::OK, phản hồi);

void HandlePost(http_request request) {    
request.extract_json.then([&](json::value requestData) {        
dữ liệu tự động = requestData[U(“data”)].as_string;
blockchain.addBlock(data);
request.reply(status_codes ::OK, U(“Đã thêm khối thành công”));
}).wait;

int main {
http_listener listen(U(“http://localhost :8080”));

listener.support(các phương thức::GET, handGet);
listener.support(các phương thức::POST, handPost);

thử {
listener.open.wait;
cout << “Đang nghe trên http://localhost:8080” << endl;
while (true);
} bắt ( ngoại lệ const& e) {
cerr << e.what << endl;
   
return 0;


handleGet truy xuất toàn bộ chuỗi khối ở định dạng JSON.

handlePost thêm một khối mới vào chuỗi khối bằng cách sử dụng dữ liệu từ yêu cầu POST.

Chạy và kiểm tra ứng dụng

Chạy ứng dụng

Sau khi hoàn thành các tính năng chính của mã theo quy trình phát triển phần mềm, điều cần thiết là chuyển sang giai đoạn quan trọng và không thể thiếu là biên dịch và kiểm tra toàn bộ ứng dụng. Bước này rất quan trọng để đảm bảo rằng tất cả các phần của ứng dụng đều hoạt động chính xác.

Biên dịch mã:
g++ -o blockchain_api blockchain_api.cpp -lboost_system -lcrypto -lssl -lcpprest

Chạy tệp thực thi:.
/blockchain_api

Đoạn mã trên khởi động máy chủ API trên http://localhost:8080.

Thử nghiệm với Người đưa thư

  • Kiểm tra các điểm cuối API bằng Postman hoặc cuộn tròn:
  • Thêm một khối:
  • Phương pháp: ĐĂNG
  • Địa chỉ: http://localhost:8080
  • Nội dung: định dạng JSON
{  
“dữ liệu”: “Đây là một khối mới”

Xem chuỗi khối:

  • Phương pháp: NHẬN
  • Địa chỉ: http://localhost:8080

Ví dụ về việc thêm một khối và xem chuỗi khối bằng API được tạo bằng C++.

void HandleGet(http_request request) {    
json::value reply = 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(“data”)] = json::value::string(block.data);        
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(“dấu thời gian”)] = json::value::number(block.timestamp);        
phản hồi[i++] = block_json;    
}    
request.reply(status_codes::OK, phản hồi);

void HandlePost(http_request request) {    
request.extract_json.then([&](json::value requestData) {        
dữ liệu tự động = requestData[U(“data”)].as_string;
blockchain.addBlock(data);
request.reply(status_codes ::OK, U(“Đã thêm chặn thành công”)) 
}).wait;
}

Hàm handlePost quản lý quá trình thêm khối vào chuỗi khối bằng cách lấy thông tin từ nội dung JSON được cung cấp và thêm khối mới vào chuỗi.

Hàm HandleGet truy xuất toàn bộ chuỗi khối và gửi lại dưới dạng phản hồi JSON.

6.Ví dụ trực tiếp về xây dựng ứng dụng Blockchain bằng C++

 Thực hiện từng bước

Bước 1: Tạo lớp Block với các thuộc tính cần thiết bằng cú pháp C++.

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

sử dụng không gian tên std;

Khối lớp {
công khai:    
int chỉ mục;    
dữ liệu chuỗi;    
chuỗi previousHash;    
băm chuỗi;    
bằng chứng dài;    
dấu thời gian time_t;

Chặn(int idx, const string& data, const string& prevHash)        
: chỉ mục(idx), dữ liệu(dữ liệu), previousHash(prevHash), proof(0),
timestamp(time(nullptr)) {
băm = tínhHash;    

    chuỗi tínhHash const {        
stringstream ss;       
 ss << chỉ mục << dấu thời gian << dữ liệu << previousHash << bằng chứng;        
trả về sha256(ss.str);    

void proofOfWork(int độ khó) {        
chuỗi mục tiêu(độ khó, ‘0’) ;        
làm {            
proof++;            
băm = tínhHash;        
} while (hash.substr(0, độ khó) != target);    

riêng tư:    
chuỗi sha256(const string& input) const {        
băm ký tự không dấu[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;    

};

Bước 2: Triển khai phương thức CalculateHash.

#include
#include
#include
#include

Khối lớp {
công khai:    
chỉ mục int;    
std::dữ liệu chuỗi;    
std::string previousHash;    
std::string băm;    
bằng chứng dài;    
dấu thời gian time_t;

Chặn(int idx, const std::string& data, const std ::string& prevHash)        
: chỉ mục(idx), dữ liệu(dữ liệu), previousHash(prevHash), proof(0),
timestamp( time(nullptr)) {        
băm = tínhHash;    

 std::string tínhHash const {        
std::stringstream ss;        
ss << chỉ mục << dấu thời gian << dữ liệu << previousHash << bằng chứng;        
trả về sha256(ss.str);   

riêng tư:    
std::string sha256(const std:: chuỗi & đầu vào) const {        
băm ký tự không dấu[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;   

};

Bước 3: Xác định lớp Blockchain và khởi tạo nó bằng khối Genesis.

lớp Blockchain {
công khai:    
Blockchain(int độ khó)        
: độ khó(độ khó ) {        
chain.emplace_back(Block(0, “Khối Genesis”, “0”));    

    void addBlock(const string& data) {        
Chặn newBlock(chain.size, data , chain.back.hash);        
newBlock.proofOfWork(độ khó);        
chain.push_back(newBlock);    

    const Block& mới nhấtBlock const {        
return chain.back;    

    chuỗi vector;

riêng tư:
không khó;
};

Bước 4: Triển khai phương thức CalculateHash.

#include
#include
#include
#include

Khối lớp {
công khai:    
chỉ mục int;    
std::dữ liệu chuỗi;    
std::string previousHash;    
std::string băm;    
bằng chứng dài;    time_t dấu thời gian;

Chặn(int idx, const std::string& data, const std::string& prevHash)        
: chỉ mục(idx), dữ liệu(dữ liệu), previousHash(prevHash), proof(0),
timestamp(time(nullptr)) {        < br/>băm = tínhHash;    
>
    std::string tínhHash const {        
std::stringstream ss;        
ss << chỉ mục << dấu thời gian << dữ liệu << previousHash << bằng chứng;        
trả về sha256(ss.str);    

riêng tư:    
std::string sha256(const std::string& input) const {        
băm ký tự không dấu[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;    

};

Bước 5: Xác định lớp Blockchain và khởi tạo nó bằng khối Genesis.

lớp Blockchain {
công khai:    
Blockchain(int độ khó)        
: độ khó(độ khó ) {        
chain.emplace_back(Block(0, “Khối Genesis”, “0”));    

void addBlock(const string& data) {        
Chặn newBlock(chain.size, data, chain.back.hash);        
newBlock.proofOfWork(độ khó);        
chain.push_back(newBlock);    

    const Block& mới nhấtBlock const {        
return chain.back;    

chuỗi vector;

riêng tư:
độ khó không nhỏ;};

Bước 6: Thiết lập môi trường API để xử lý các yêu cầu bằng thư viện C++ phù hợp.

#include
#include

sử dụng web không gian tên;
sử dụng web không gian tên::http;
sử dụng web không gian tên::http:: thử nghiệm::listener;

class BlockchainAPI {public:    
BlockchainAPI(chuỗi ký tự & địa chỉ, Blockchain& blockchain)     < br/>: Listen(http_listener(U(address))), blockchain(blockchain) {        
listener.support(methods::GET,
std::bind(&BlockchainAPI::handleGet, this, std::placeholders::_1));
listener.support(methods::POST, std::bind (&BlockchainAPI::handlePost, cái này, std::placeholders::_1));

void start {listener.open.wait;        cout << “API Blockchain đang chạy…” << endl;    
Riêng tư:người nghe http_listener;    Blockchain& blockchain;void xử lýGet(http_request request) {json::value reply = json::value::array;int i = 0;for (const auto& block : blockchain.chain) {json::value block_json;block_json[U( “index”)] = json::value::number(block.index);block_json[U(“data”)] = json::value::string(block.data);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, phản hồi);    }void HandlePost(http_request request) {request.extract_json.then([&](json::value requestData) {string data = requestData[U(“data”)].as_string;blockchain.addBlock(data);request.reply (status_codes::OK, U(“Đã thêm khối thành công”));}) . Chờ đợi ; }} ;

Với tư cách là một nhà đầu tư tiền điện tử, tôi sẽ áp dụng kiến ​​thức của mình vào thực tế bằng cách cố gắng khai thác một khối mới và xác thực chuỗi khối thông qua Postman hoặc cuộn tròn ở bước 7. Cách tiếp cận thực hành này cho phép tôi đảm bảo rằng ứng dụng đang hoạt động như mong đợi và cung cấp tin tưởng vào khả năng duy trì tính toàn vẹn của blockchain.

Chính:
int main {    
Chuỗi khối chuỗi khối(4);  // Mức độ khó

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

trả về 0;

>

Kiểm tra:
curl -X POST http://localhost:8080 -H “Nội dung- Loại: application/json” -d ‘{“data”:”Đây là một khối mới”}’

Bắt đầu phát triển blockchain bằng C++ không chỉ đơn thuần là viết mã; đó là về việc xây dựng các thành phần cơ bản của hệ thống phi tập trung, hứa hẹn sẽ chuyển đổi đáng kể nhiều lĩnh vực.

Tóm lại, chúng tôi đã đi sâu vào các yếu tố cần thiết của lập trình C++ khi nó áp dụng cho công nghệ chuỗi khối và chuyển sang quá trình triển khai và thử nghiệm ứng dụng đã phát triển của chúng tôi.

Sau khi bạn hoàn thành mô-đun này, vui lòng tìm hiểu sâu hơn về các chủ đề như Khả năng mở rộng, Giao thức bảo mật, Thuật toán đồng thuận phức tạp và việc sử dụng hợp đồng thông minh để hiểu sâu hơn.

Hãy nuôi dưỡng niềm khao khát kiến ​​thức của bạn, áp dụng tư duy học tập suốt đời và không bao giờ ngừng viết mã. Cầu mong những đổi mới của bạn định hình tiến trình tiến bộ công nghệ!

2024-09-17 10:54