C++ ile Blockchain Uygulaması Oluşturma

C++ ile Blockchain Uygulaması Oluşturma

Giriş

Sayısız kod tabanının labirentinde yolculuk yapmış deneyimli bir geliştirici olarak, bu C++ blockchain projesinin azmin gücünün ve basitliğin güzelliğinin bir kanıtı olduğunu söylemeliyim. Burada yazdığınız kod, gelecek vadeden herhangi bir blockchain mimarı için sağlam bir temel oluşturur.

Yenilikçi blockchain teknolojisi hem finans hem de tedarik zinciri yönetiminde önemli ölçüde devrim yarattı. Merkezi olmayan bir sistem sunarak şeffaflık ve güvenlik sağlar, böylece aracılara olan ihtiyacı en aza indirir, hatta ortadan kaldırır.

Neden bir blockchain uygulaması oluşturulmalıdır?

Blockchain teknolojisi, sağlam veri gerçekliği ve korumasının yanı sıra taraflar arasında güvene ihtiyaç duymadan bilgi alışverişi için güvenilir bir platform sunar. Bu teknoloji, diğer yeni ekonomik modellerin yanı sıra Merkezi Olmayan Finans (DeFi) ve token tabanlı varlıklar gibi yenilikçi finansal sistemlerin önünü açarak akıllı sözleşmelerin ve dijital tokenlerin geliştirilmesine olanak tanıyor.

Bu makale, C++ aracılığıyla Blockchain geliştirme dünyasına 10 dakikalık hızlı bir turdur. 

Blockchain’in Temelleri

Daha basit bir ifadeyle blockchain, işlemlerle ilgili güvenli ve değiştirilemez veriler içeren bir dizi birbirine bağlı dijital kutuya (blok) benzer. Her kutu, benzersiz, karmaşık matematiksel kodlar (karma) kullanılarak bir öncekine bağlanır. Bu bağlantı, her bağlantının (blok) ağ içindeki işlem geçmişindeki bir adımı temsil ettiği bir zincir oluşturur. Temelde bu yapı, tüm blockchain sistemindeki tüm işlemlerin şeffaf ve kalıcı bir şekilde kaydedilmesine olanak tanır.

Blockchain’de C++

C++, etkileyici hızı, uyarlanabilirliği ve hassas kontrol sağlama yeteneği sayesinde blockchain teknolojisi için son derece etkili programlama dillerinden biri olarak öne çıkıyor. Bu, karmaşık sistem mimarisi, oyun geliştirme ve finansal uygulamalarla uğraşırken onu son derece yararlı kılar. C++’ın inanılmaz derecede çok yönlü olduğu açıktır!

Çeşitli nedenlerden dolayı C++, blockchain geliştirme alanında öne çıkıyor. Düşük seviyeli bellek yönetimi, geliştiricilerin ince ayarlı kontrolle sağlam ve verimli blockchain sistemleri oluşturmasına olanak tanır. Çok sayıda işlemi gerçekleştiren Bitcoin ağının muazzam boyutu ve güvenliği göz önüne alındığında, bu zorlu görev için C++’ın seçilmesi şaşırtıcı değil. Aslında Bitcoin, Litecoin, Ripple, Monero ve EOS gibi popüler blockchain uygulamaları C++ kullanılarak oluşturuldu.

C++ neden blockchain gelişimi için ideal bir dildir?

  • Daha hızlı hesaplamalar
  • Yüksek performanslı
  • Verimli bellek yönetimi
  • Nesneye yönelik özellikler
  • Çoklu iş parçacığını destekler
  • Sistem kaynakları üzerinde kontrol 

İster blockchain teknolojisine yeni başlıyor olun ister mevcut sınırların ötesinde yenilik yapmaya çalışıyor olun, konu sağlam ve kalıcı uygulamalar oluşturmak olduğunda C++ mükemmel bir seçenektir.

C++ ile Blockchain Kavramlarını Anlamak

İşlemler: Blockchain’de işlemler tüm sisteme güç veren omurga görevi görür. Her blok, bu işlemlerin takası ve değeri ile ilgili tarafların kimlikleri hakkında önemli ayrıntıları içeren güvenli bir kasa olarak düşünülebilir. Bu işlemler, kimin neyi, kiminle ve ne zaman ticaret yaptığını anlatan temel kayıtları oluşturur.

Bilmeniz Gereken Blockchain Temelleri

C++ ile Blockchain Uygulaması Oluşturma

Merkezi olmayanlaşma, blockchain’i teknoloji dünyasında diğerlerinden ayıran benzersiz özelliği ifade eder. Daha basit bir ifadeyle bu, hiçbir şahsın veya kuruluşun blockchain üzerindeki veritabanının tamamı üzerinde tam kontrole sahip olmadığı anlamına gelir. Bu özellik, sistemi arızalara karşı dayanıklı hale getirir ve olası önyargıları ortadan kaldırır. Ağa katılan her cihaz (genellikle düğüm olarak anılır), blockchain verilerinin bir kopyasını saklayarak şeffaflığı artırır ve merkezi arızalara veya manipülasyonlara karşı koruma sağlar.

Blockchain’in değişmezlik özelliği, üzerine yazılan verilerin ilk kaydedildikten sonra değişmeden kalmasını sağlar. Bu, zincirdeki sonraki blokları değiştirmeden verileri değiştirmeyi imkansız kılan kriptografik işlevlerin kullanılmasıyla elde edilir. Sonuç olarak, yapılan herhangi bir değişiklik geri alınamaz, bu da tüm sistemi değiştirilemez hale getirir.

Blockchain Konsensüs Protokolleri: Bir blockchain’in nasıl çalışacağına rehberlik eden ve ağ içindeki her düğümün bu prosedürler üzerinde mutabakata varması gereken bir kurallar koleksiyonu. Bu fikir birliği protokolleri, düğümleri koordine etmeye ve tüm ağ boyunca aynı anlayışı paylaşmalarını garanti etmeye hizmet eder.

Şu ana kadar umarım blockchainin temellerini oldukça iyi kavramışsınızdır. Artık vites değiştirmenin ve pratik uygulamaları keşfetmenin zamanı geldi. Kollarınızı sıvamaya ve uygulamalı deneyimlere dalmaya hazır mısınız?

Burada, ilk kurulumdan teste ve nihai dağıtıma kadar her şeyi kapsayan temel bir blockchain uygulaması oluşturma konusunda size adım adım rehberlik edeceğiz.

1.C++ Geliştirme Ortamını Kurma

Projenizi başlatmak için öncelikle gerekli tüm gereksinimleri toplamanız çok önemlidir. Gelecek bölüm size en uygun geliştirme ortamını kurma konusunda rehberlik edecektir.

C++ Derleyicisini Yükleme

Derleyicinin ne olduğunu anlayarak başlayalım.

Yazılım oluşturmada çok önemli bir araç, yazdığınız yüksek seviyeli, insan tarafından okunabilen kod ile bilgisayarınızın işlemcisinin işleyebileceği ve yürütebileceği düşük seviyeli makine kodu arasında aracı görevi gören bir derleyicidir. C++ kullanarak blockchain uygulamaları oluşturmaya gelince, yapmanız gereken ilk eylem güvenilir bir C++ derleyicisinin güvenliğini sağlamaktır. Bu araç, C++ kodunuzu çalıştırılabilir makine koduna dönüştürerek blockchain uygulamanızın birden fazla sistemde sorunsuz bir şekilde çalışmasına olanak tanır.

Geliştirme sürecini başlatmak için öncelikle uygun bir C++ derleyicisi kurarak sisteminizi kurduğunuzdan emin olun. C++ derleyicilerine yönelik bazı popüler seçenekler şunlardır:

GCC(GNU Derleyici koleksiyonu):

Linux/MacOS:

Terminali açın ve aşağıda verilen komutları sırasıyla yazın.

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

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

c)MacOS(komut satırı araçları)
xcode-select -install

Windows Kullanıcıları için: Windows kullanıyorsanız, MinGW-w64 projesi sizin için harika bir seçenek olabilir çünkü GCC’nin (GNU Derleyici Koleksiyonu) Windows için tasarlanmış bir sürümünü sunar ve şunları yapmanızı sağlar: Windows sisteminizde GCC’nin gücünden yararlanın.

Kurulum Adımları:

  • Resmi MinGW-w64 web sitesini ziyaret ederek yükleyiciyi indirin.
  • İndirme işleminden sonra yükleyiciyi çalıştırın
  • İhtiyaçlarınıza göre uygun mimariyi seçin
  • Tamamlamak için sihirbaz adımlarını izleyin
  • Sistemi güncelleyin (Bu isteğe bağlı bir adımdır ancak önerilir).

  Çıngırak:

Linux/MacOS: sudo apt install clang (ayrıca clang MacOS’ta zaten yüklüdür)
Fedora: sudo dnf install clang
Windows: Clang olabilir MinGW kullanılarak veya LLVM proje yükleyicisi aracılığıyla kurulur

MSVC (Microsoft Visual C++): 

Genellikle MSVC olarak kısaltılan Microsoft Visual C++, Microsoft tarafından oluşturulan güçlü bir yazılım geliştirme ortamı (IDE) olan Visual Studio’nun önemli bir parçasıdır. Visual Studio, sisteminizde MSVC’yi otomatik olarak yapılandıran bu yazılımın yüklenmesiyle, uygulamaları oluşturmak, test etmek ve başlatmak için geniş bir araç yelpazesi sunar.

Terminalde veya komut isteminde aşağıdaki komutları kullanarak kurulumu doğrulayın:

g++ -version  # GCC için
clang -version  # Clangcl için  # MSVC için

IDE seçme

Entegre Geliştirme Ortamı (IDE) adı verilen modern bir çalışma alanı, otomatik tamamlama, sorun giderme ve projelerin organizasyonu gibi özelliklerin tamamını kullanıcı dostu tek bir platformda sunarak verimliliği artırır. C++ programlamaya yönelik bazı popüler IDE’ler aşağıda listelenmiştir:

Visual Studio: Visual Studio’yu resmi web sitesinden indirin.

Ve aşağıdaki tabloda belirtildiği gibi aşağıdaki adımları izleyin:

C++ ile Blockchain Uygulaması Oluşturma

CLion: Kurulum ve ayarlar:

Yaygın olarak kullanılan bir Entegre Geliştirme Ortamı (IDE) olan CLion, JetBrains çatısı altında çalışır ancak ücretli bir abonelik gerektirir. Ancak ücretsiz deneme süreleri de sunuyor.

ücretsiz denemeler sağlar.

C++ ile Blockchain Uygulaması Oluşturma

Visual Studio Code: C++ geliştirme için uzantıları yükleyin ve ayarlayın.

C++ ile Blockchain Uygulaması Oluşturma

Gerekli Kitaplıkları Yükleme

Şifreleme işlevlerine yönelik OpenSSL gibi temel kitaplıkları yüklemek için paket yöneticilerini kullanın. Aşağıda farklı İşletim sistemleri ve komutlarına yönelik adımlar ve çeşitli kitaplıklar bulunmaktadır.C++ ile Blockchain Uygulaması Oluşturma

Yaşasın! Programlama ortamınızı etkili bir şekilde yapılandırdınız. Artık kodunuzu size en uygun Entegre Geliştirme Ortamında (IDE) çalıştırmaya başlamakta özgürsünüz.

2.C++ ile Basit Bir Blockchain Oluşturmak

Kodlamaya dalmadan önce bir blok sınıfını oluşturan öğelere aşina olalım.

Blockclass’ın Bileşenleri

  • Dizin, blokların sırasını kronolojik olarak saklayan ve koruyan bir tamsayıdır.
  • Zaman Damgası: Zaman damgası, bloğun oluşturulduğu örneği bir dize biçiminde saklar. 
  • İşlemler:  İşlemler, katılımcılar ile blok zincirinin o andaki durumu arasındaki alışveriş bilgilerini saklar.
  • Önceki hash ve Hash: Önceki hash, önceki bloğun kriptografik hash’ini saklar, oysa hash, karıştırılmış veya hash edilmiş bir kriptografik bilgi dizisidir.
  • Nonce: İş Kanıtı (PoW) fikir birliği algoritmasında kullanılan bir tamsayı. Zorluk hedefini karşılayan geçerli bir karma bulmak için artırılan bir sayaç görevi görür. Nonce, madencilerin başında belirli sayıda sıfır bulunan bir hash üreten bir nonce bulmak için yarıştığı PoW’daki madencilik süreci için çok önemlidir.

Şimdi koddaki tüm özellikleri uygulayalım:

class Block {
public:    
int index;    
std::string zaman damgası;    
std::vector işlemleri;    
std::string öncekiHash;    
std::string hash;    
int nonce; // PoW için

// Yapıcı    
Block(int idx, std::string time) , std::vector txs, std::string prevHash) {        
index = idx;        
zaman damgası = zaman;        
işlemler = txs;        
öncekiHash = öncekiHash;        
bir kez = 0;        
hash = hesaplaHash; // Geçerli bloğun karması    

    // Bloğun karmasını hesaplama yöntemi    
std::string accountHash {        
std::stringstream ss;        
ss << indeks << zaman damgası << öncekiHash << tek seferlik;        
// Hash hesaplamasına işlem verilerini ve varsa ek ayrıntıları ekleyin        
return sha256(ss.str); // Gerçek karma işlevi için yer tutucu b>
void mineBlock(int zorluk) {        
std::string target(zorluk, ‘0’); // Bir hedef karma dizesi oluşturun        
while (hash.substr(0, zorluk) != hedef) {            
nonce++;            
hash = hesaplaHash;       
  }    

};

Bir kripto yatırımcısı olarak blok sınıfımı gerekli niteliklerle kurduktan sonra Genesis Bloğunu oluşturmaya devam ediyorum. Genesis Bloğu, blok zincirindeki başlatma gerektiren ve sıfır endeksi taşıyan açılış bloğudur. Genesis Bloğunu tanımladıktan sonra ‘addblock’ yöntemini kullanarak sonraki blokları blockchainime ekleyerek devam ediyorum. İşte kod:

class Blockchain {
public:    
std::vector zinciri;
    Blockchain {        
chain.push_back(createGenesisBlock);    

    Blok createGenesisBlock {        
return Block(0, “01/01/2024”, “Genesis Bloğu”, “0”);   
 }
    Blok getLatestBlock {        
return Chain.back;    

    void addBlock(newBlock’u engelle) {        
newBlock.preciousHash = getLatestBlock.hash;        
newBlock.hash = newBlock.calculateHash;        
chain.push_back(newBlock);    

};

Bir işlem oluşturun ve doğrulayın. Her işlemin benzersiz bir tanımlayıcısı, tanımlanmış bir şablonu veya planı ve gönderen, alıcı ve belirtilen tutar hakkında ayrıntılar bulunur. Bir işlem oluşturduğunuzda validateTransaction işlevini kullanarak geçerliliğini kontrol etmelisiniz.

sınıf İşlemi {public:    
std::string sender;    
std::string alıcısı;    
iki katı miktar;    
std::string transactionID;

// Yapıcı    Transaction(std::string snd, std::string rcp, double amt, std::string txID) {        
sender = snd;        
alıcı = rcp;        
tutar = miktar;        
işlemKimliği = txID;    

    // İşlemi doğrulama yöntemi > // Doğrulama mantığının uygulanması        
doğruyu döndür; // Yer tutucu    

};

3.C++’ta Konsensüs Mekanizmalarını Uygulama

Bir proje analisti olarak inşaat aşamamızın %25’ini başarıyla tamamladığımızı paylaşmaktan heyecan duyuyorum. İleriye dönük olarak, blok zincirimizde mutabakat mekanizmalarını uygulamaya odaklanmamızın zamanı geldi. Bu önemli bileşen, tüm uygulamamızın temelini oluşturur. Bir sonraki aşamaya coşku ve hassasiyetle geçelim!

İş Kanıtı

Daha basit bir ifadeyle İş Kanıtı (PoW), bir blockchain ağındaki katılımcılar (genellikle madenciler olarak anılır) tarafından karmaşık matematik problemlerini zincire yeni bir blok eklemeden önce çözmek için kullanılan bir yöntemdir. Temel olarak, nonce olarak bilinen ve bloğun verileri, karma değeri ve ek ayrıntılarla birleştirildiğinde, başlangıçta belirli sayıda sıfırla başlayan benzersiz bir karma değeri üreten belirli bir sayıyı arıyorlar. Bu tasarım, süreci hem verimli hem de zararlı saldırılara karşı dayanıklı hale getirir.

C++ programlama alanında, Block sınıfınıza bir ‘proof’ niteliği ve bir ‘proofOfWork’ işlevi ekleyerek bir Proof of Work sistemi oluşturabilirsiniz. Bunu başarmanın bir yolu:

#include
#include
#include
#include
#include
#include
ad alanı std’sini kullanarak;

string sha256 (const string str) {    
imzasız karakter karması[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];    
}    
ss.str’yi döndürür;

class Block {
public:    
int index;    
dize verileri;    
string öncekiHash;    
dize karması;    
uzun kanıt;    
time_t timestamp;

Block(int idx, string d, string prevHash) {        
dizin = idx;        
veri = d;        
öncekiHash = öncekiHash;        
zaman damgası = zaman(nullptr);        
kanıt = 0;        
hash = hesaplaHash;   
 }
    string accountHash const {        
stringstream ss;        
ss << indeks << zaman damgası << veri << öncekiHash << kanıt;        
dönüş sha256(ss.str);    

    voidproofOfWork(int zorluk) {        
string target(difficulty, ‘0’) ;        
yap {            
kanıt++;            
hash = hesaplaHash;        
} while (hash.substr(0, zorluk) != hedef);    
}
};
sınıf Blockchain {
public:    
vektör zinciri;    
int zorluk;

Blockchain(int diff) {        
zorluk = fark;        
chain.emplace_back(Block(0, “Genesis Block”, “0”));   

    void addBlock(string data) {        
Block newBlock(chain.size, data, Chain.back.hash);        
newBlock.proofOfWork(zorluk);        
if (isValidProof(newBlock)) {            
chain.push_back(newBlock);        
}    

    bool isValidProof(const Blok& blok) const {        
return blok.hash.substr(0, zorluk) == string(zorluk,
‘0’);    

};

Bir araştırmacı olarak, sağlanan kodda, başlangıçta bir kanıt ve ona karşılık gelen karma değerini bir bloğa eklemekle görevlendirildim. Daha sonra kanıtın karmaşıklığını belirlemem ve ardından onu çıkarmaya devam etmem gerekiyor. Son olarak, çıkarılan kanıtı doğrulayacağım veya doğrulayacağım.

4.C++ ile Basit Blockchain API’si Oluşturma

API veya Uygulama Programlama Arayüzü, farklı yazılım programlarının sorunsuz bir şekilde iletişim kurmasını sağlayan bir köprü görevi görür. Blockchain bağlamında API’ler, blockchain ağındaki önceden tanımlanmış verilerle kolay etkileşimi kolaylaştırarak geliştiricilerin temel yapının karmaşık ayrıntılarına girmeden uygulamalar oluşturmasını kolaylaştırır. API’ler, blockchain teknolojisinin web veya mobil uygulamalar gibi diğer platformlarla entegrasyonunu basitleştirerek geliştirme ve entegrasyon süreçlerini kolaylaştırır.

API Ortamını Kurma

Aşağıdaki tabloda belirtildiği gibi C++ ile API oluşturmak için gereken araçları yükleyin ve yapılandırın:

C++ ile Blockchain Uygulaması OluşturmaC++ ile Blockchain Uygulaması OluşturmaC++ ile Blockchain Uygulaması Oluşturma

API’yi oluşturma

#include
#include
#include “blockchain.h”

web ad alanını kullanma;
http ad alanını kullanma;
ad alanı yardımcı programını kullanma;
http::experimental::listener ad alanını kullanma;

Blockchain blockchain( 4); // zorluk seviyesi 4

voidhandleGet(http_request request) {    
json::value Response = json::value:: sıralamak;    
int i = 0;    
for (auto& blok : blockchain.chain) {        
json::value block_json;        
block_json[U(“index”)] = json::value::number(block.index);        
block_json[U(“veri”)] = json::value::string(block.data);        
block_json[U(“öncekiHash”)] =
json::value::string(block.previlHash);        
block_json[U(“hash”)] = json::value::string(block.hash);        
block_json[U(“kanıt”)] = json::value::number(block.proof);        
block_json[U(“timestamp”)] = json::value::number(block.timestamp);        
yanıt[i++] = blok_json;    
}    
request.reply(status_codes::OK, yanıt);

void handPost(http_request request) {    
request.extract_json.then([&](json::value requestData) {        
auto data = requestData[U(“data”)].as_string;
blockchain.addBlock(data);
request.reply(status_codes) ::Tamam, U(“Engelleme başarıyla eklendi”));
}).wait;

int main {
http_listener listener(U(“http://localhost) :8080″));

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

{
listener.open.wait;
cout << “http://localhost:8080’de dinleniyor” << endl;
while (true);
} catch (‘i deneyin istisna const& e) {
cerr << e.what << endl;
   
return 0;


handleGet blok zincirinin tamamını JSON formatında alır.

handlePost POST isteğinden gelen verileri kullanarak blok zincirine yeni bir blok ekler.

Uygulamayı Çalıştırma ve Test Etme

Uygulamayı Çalıştırma

Yazılım geliştirme sürecini takiben kodunuzun temel özelliklerini tamamladıktan sonra, kritik ve vazgeçilmez aşama olan tüm uygulamanın derlenmesi ve test edilmesi aşamasına geçmek önemlidir. Bu adım, uygulamanın tüm bölümlerinin doğru şekilde çalışmasını sağlamak için çok önemlidir.

Kodu derleyin:
g++ -o blockchain_api blockchain_api.cpp -lboost_system -lcrypto -lssl -lcpprest

Yürütülebilir dosyayı çalıştırın:.
/blockchain_api

Yukarıdaki kod http://localhost:8080 üzerinde API sunucusunu başlatır.

Postacı ile Test Etme

  • API uç noktalarını Postman veya curl kullanarak test edin:
  • Bir Blok Ekle:
  • Yöntem: POST
  • URL: http://localhost:8080
  • Gövde: JSON formatı
{  
“data”: “Bu yeni bir blok”

Blockchain’i Görüntüle:

  • Yöntem: GET
  • URL: http://localhost:8080

C++ ile oluşturulan API’yi kullanarak blok ekleme ve blok zincirini görüntüleme örneği.

void tanıtıcıGet(http_request request) {    
json::value Response = json::value::array;    
int i = 0;    
for (auto& blok : blockchain.chain) {       
 json::value block_json;        
block_json[U(“index”)] = json::value::number(block.index);        
block_json[U(“veri”)] = json::value::string(block.data);        
block_json[U(“öncekiHash”)] =
json::value::string(block.previlHash);        
block_json[U(“hash”)] = json::value::string(block.hash);        
block_json[U(“kanıt”)] = json::value::number(block.proof);        
block_json[U(“timestamp”)] = json::value::number(block.timestamp);        
yanıt[i++] = blok_json;    
}    
request.reply(status_codes::OK, yanıt);

void handPost(http_request request) {    
request.extract_json.then([&](json::value requestData) {        
auto data = requestData[U(“data”)].as_string;
blockchain.addBlock(data);
request.reply(status_codes) ::Tamam, U(“Engelleme başarıyla eklendi”) 
}).bekle;
}

handlePost işlevi, sağlanan JSON içeriğinden bilgi çekip zincire yeni bir blok ekleyerek blok zincirine blok ekleme sürecini yönetir.

handleGet işlevi tüm blok zincirini alır ve onu bir JSON yanıtı olarak geri gönderir.

6.C++ ile Blockchain Uygulaması Oluşturmanın Canlı Örneği

 Adım Adım Yürütme

1. Adım: C++ sözdizimini kullanarak gerekli niteliklere sahip Block sınıfını oluşturun.

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

ad alanı std’sini kullanarak;

class Block {
public:    
int index;    
dize verileri;    
string öncekiHash;    
dize karması;    
uzun kanıt;    
time_t timestamp;

Block(int idx, const string& data, const string& prevHash)        
: indeks(idx), veri(veri), öncekiHash(öncekiHash), kanıt(0),
timestamp(time(nullptr)) {
hash = hesaplaHash;    

    string accountHash const {        
stringstream ss;       
 ss << indeks << zaman damgası << veri << öncekiHash << kanıt;        
dönüş sha256(ss.str);    

voidproofOfWork(int zorluk) {        
string target(difficulty, ‘0’) ;        
yap {            
kanıt++;            
hash = hesaplaHash;        
} while (hash.substr(0, zorluk) != hedef);    

özel:    
string sha256(const string& input) const {        
imzasız karakter karması[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;    

};

2. Adım: accountHash yöntemini uygulayın.

#include
#include
#include
#include

sınıf Bloku {
genel:    
int dizini;    
std::string verisi;    
std::string öncekiHash;    
std::string hash;    
uzun kanıt;    
time_t timestamp;

Block(int idx, const std::string& data, const std) ::string& prevHash)        
: index(idx), data(data), öncekiHash(prevHash), prova(0),
timestamp( time(nullptr)) {        
hash = accountHash;    

 std::string accountHash const {        
std::stringstream ss;        
ss << indeks << zaman damgası << veri << öncekiHash << kanıt;        
dönüş sha256(ss.str);   
 }

özel:    
std::string sha256(const std:: string& input) const {        
imzasız karakter karması[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;   

};

Adım 3: Blockchain sınıfını tanımlayın ve onu bir oluşum bloğuyla başlatın.

sınıf Blockchain {
genel:    
Blockchain(int zorluk)        
: zorluk(zorluk) ) {        
chain.emplace_back(Block(0, “Genesis Block”, “0”));    

    void addBlock(const string& data) {        
Block newBlock(chain.size, data) , Chain.back.hash);        
newBlock.proofOfWork(zorluk);        
chain.push_back(newBlock);    

    const Block& lastBlock const {        
return Chain.back;    

    vektör zinciri;

özel:
int zorluğu;
};

4. Adım: accountHash yöntemini uygulayın.

#include
#include
#include
#include

sınıf Bloku {
genel:    
int dizini;    
std::string verisi;    
std::string öncekiHash;    
std::string hash;    
uzun kanıt;    time_t timestamp;

Block(int idx, const std::string& data, const std::string& prevHash)        
: indeks(idx), veri(veri), öncekiHash(öncekiHash), kanıt(0),
timestamp(time(nullptr)) {        < br/>hash = hesaplaHash;    

    std::string accountHash const {        
std::stringstream ss;        
ss << indeks << zaman damgası << veri << öncekiHash << kanıt;        
dönüş sha256(ss.str);    

özel:    
std::string sha256(const std::string& input) const {        
imzasız karakter karması[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;    

};

5. Adım: Blockchain sınıfını tanımlayın ve onu bir oluşum bloğuyla başlatın.

sınıf Blockchain {
genel:    
Blockchain(int zorluk)        
: zorluk(zorluk) ) {        
chain.emplace_back(Block(0, “Genesis Block”, “0”));    

void addBlock(const string& data) {        
Block newBlock(chain.size, data, Chain.back.hash);        
newBlock.proofOfWork(zorluk);        
chain.push_back(newBlock);    

    const Block& lastBlock const {        
return Chain.back;    

vektör zinciri;

özel:
int zorluğu;};

6. Adım: API ortamını, uygun bir C++ kitaplığı kullanarak istekleri işleyecek şekilde ayarlayın.

#include
#include

ad alanı web’i kullanma;
ad alanı web’i kullanma::http;
ad alanı web’i kullanma::http:: deneysel::listener;

class BlockchainAPI {public:    
BlockchainAPI(const string & adres, Blockchain & blockchain)     < br/>: listener(http_listener(U(adres))), 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));

geçersiz başlatma {listener.open.wait;        cout << “Blockchain API çalışıyor…” << endl;    
Gizli:http_listener dinleyicisi;    Blockchain& blockchain;void tanıtıcıGet(http_request request) {json::value Response = json::value::array;int i = 0;for (const auto& blok : 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(“öncekiHash”) ] = json::value::string(block.öncekiHash);block_json[U(“hash”)] = json::value::string(block.hash);block_json[U(“kanıt”)] = json: :value::number(block.proof);block_json[U(“timestamp”)] = json::value::number(block.timestamp);response[i++] = block_json; }        request.reply(durum_kodları::OK, yanıt);    }void handPost(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(“Engelleme başarıyla eklendi”));}) . Beklemek ; }} ;

Bir kripto para yatırımcısı olarak, 7. adımda yeni bir blok kazmaya ve Postman veya curl aracılığıyla blok zincirinin kimliğini doğrulamaya çalışarak bilgilerimi eyleme geçirirdim. Bu uygulamalı yaklaşım, uygulamanın beklendiği gibi çalıştığından emin olmamı sağlıyor ve aşağıdakileri sağlıyor: Blockchain’in bütünlüğünü koruma yeteneğine olan güven.

Ana:
int main {    
Blockchain blockchain(4);  // Zorluk seviyesi

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

0’ı döndürür;

Test:
curl -X POST http://localhost:8080 -H “İçerik- Tür: application/json” -d ‘{“data”:”Bu yeni bir blok”}’

C++ kullanarak blockchain geliştirmeye başlamak, kod yazmaktan çok daha fazlasını içerir; çok sayıda sektörü çarpıcı biçimde dönüştürme vaadi taşıyan merkezi olmayan sistemlerin temel bileşenlerinin inşa edilmesiyle ilgilidir.

Özetle, blockchain teknolojisine uygulanan C++ programlamanın temellerini derinlemesine inceledik ve geliştirdiğimiz uygulamayı dağıtma ve test etme sürecine geçtik.

Bu modülü bitirdikten sonra Ölçeklenebilirlik, Güvenlik protokolleri, karmaşık Konsensüs Algoritmaları ve daha derinlemesine bir anlayış için akıllı sözleşme kullanımı gibi konuları daha derinlemesine incelemekten çekinmeyin.

Bilgiye olan susuzluğunuzu besleyin, yaşam boyu öğrenme zihniyetini benimseyin ve kod yazmayı asla bırakmayın. Yenilikleriniz teknolojik gelişmelerin seyrini şekillendirsin!

2024-09-17 10:54