Takip et

Golang ile Basit Bir Blockchain Nasıl Oluşturulur?

Golang ile Basit Bir Blockchain Nasıl Oluşturulur?

Blockchain teknolojisi, son yıllarda büyük bir ilgi ve heyecan yaratıyor. Kripto para birimlerinden dijital kimliklere kadar çeşitli alanlarda kullanılmaya başlanan blockchain, güvenli ve şeffaf bir veri depolama ve işlem sistemi sunuyor. Bu makalede, Golang programlama dili kullanarak basit bir blockchain nasıl oluşturulacağını adım adım inceleyeceğiz.

Blockchain Nedir?

Blockchain, temelde dağıtık ve değiştirilemez bir veri defteridir. Blok adı verilen veri gruplarından oluşur ve her blok, önceki blokları içeren bir bağlantı ile güvenli bir şekilde birbirine bağlanır. Bu yapı, verilerin değiştirilmesini veya sahtekarlık yapılmasını neredeyse imkansız hale getirir.

Golang ile Blockchain Oluşturma Adımları

Şimdi, Golang kullanarak basit bir blockchain oluşturma adımlarını inceleyelim:

1. Blok Yapısını Tanımlama

Öncelikle, bloklarımızın hangi bilgileri içereceğini tanımlamalıyız. Her blok, bir zaman damgası, önceki bloğun karma değeri (hash), işlem verileri ve bir karma değer içerebilir.

“`go
type Block struct {
Timestamp int64
PreviousHash []byte
Transactions [][]byte
Hash []byte
}
“`

2. Karma Değer Hesaplama

Her bloğun benzersiz bir kimliği olmasını sağlamak için karma değer kullanacağız. Golang’ın `crypto/sha256` paketi bu işlem için kullanılabilmektedir.

“`go
import “crypto/sha256”

func calculateHash(block *Block) []byte {
record := strconv.Itoa(int(block.Timestamp)) + string(block.PreviousHash) + string(block.Transactions)
hash := sha256.Sum256([]byte(record))
return hash[:]
}
“`

3. Genesis Bloğu Oluşturma

Bir blockchain’in başlangıç noktasını oluşturmak için bir genesis bloğu oluşturmamız gerekiyor. Bu blok, ilk blok olarak kabul edilir ve öncesinde bir blok olmadığı için önceki karma değeri boş olur.

“`go
func createGenesisBlock() *Block {
return &Block{
Timestamp: time.Now().Unix(),
PreviousHash: []byte{},
Transactions: [][]byte{},
Hash: calculateHash(&Block{}),
}
}
“`

4. Yeni Bir Blok Ekleme

Yeni işlemler yapıldığında, bu işlemleri içeren yeni bir blok oluşturmamız ve mevcut zincirin sonuna eklememiz gerekiyor.

“`go
func addBlock(newBlock *Block, blockchain []*Block) []*Block {
newBlock.PreviousHash = blockchain[len(blockchain)-1].Hash
newBlock.Hash = calculateHash(newBlock)
blockchain = append(blockchain, newBlock)
return blockchain
}
“`

5. Blockchain’i Depolama

Blockchain’imizi kalıcı hale getirmek için bir dosyaya veya bir veritabanına kaydetmemiz gerekir. Golang’ın `encoding/json` paketi, JSON formatında kaydetme ve yükleme işlemlerini kolaylaştırmaktadır.

“`go
import “encoding/json”

func saveBlockchain(blockchain []*Block, filename string) error {
data, err := json.MarshalIndent(blockchain, “”, ” “)
if err != nil {
return err
}
return ioutil.WriteFile(filename, data, 0644)
}

func loadBlockchain(filename string) ([]*Block, error) {
data, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
var blockchain []*Block
err = json.Unmarshal(data, &blockchain)
if err != nil {
return nil, err
}
return blockchain, nil
}
“`

Örnek Uygulama

Bu adımları kullanarak basit bir blockchain uygulaması oluşturabiliriz. Örneğin, bir `main.go` dosyası oluşturabilir ve aşağıdaki gibi bir kod yazabiliriz:

“`go
package main

import (
“encoding/json”
“fmt”
“io/ioutil”
“strconv”
“time”

“crypto/sha256”
)

type Block struct {
Timestamp int64
PreviousHash []byte
Transactions [][]byte
Hash []byte
}

func calculateHash(block *Block) []byte {
record := strconv.Itoa(int(block.Timestamp)) + string(block.PreviousHash) + string(block.Transactions)
hash := sha256.Sum256([]byte(record))
return hash[:]
}

func createGenesisBlock() *Block {
return &Block{
Timestamp: time.Now().Unix(),
PreviousHash: []byte{},
Transactions: [][]byte{},
Hash: calculateHash(&Block{}),
}
}

func addBlock(newBlock *Block, blockchain []*Block) []*Block {
newBlock.PreviousHash = blockchain[len(blockchain)-1].Hash
newBlock.Hash = calculateHash(newBlock)
blockchain = append(blockchain, newBlock)
return blockchain
}

func saveBlockchain(blockchain []*Block, filename string) error {
data, err := json.MarshalIndent(blockchain, “”, ” “)
if err != nil {
return err
}
return ioutil.WriteFile(filename, data, 0644)
}

func loadBlockchain(filename string) ([]*Block, error) {
data, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
var blockchain []*Block
err = json.Unmarshal(data, &blockchain)
if err != nil {
return nil, err
}
return blockchain, nil
}

func main() {
blockchainFile := “blockchain.json”
blockchain, err := loadBlockchain(blockchainFile)
if err != nil {
fmt.Println(“Blockchain yüklenemedi:”, err)
blockchain = []*Block{createGenesisBlock()}
}

for i := 0; i < 5; i++ { newBlock := &Block{ Timestamp: time.Now().Unix(), Transactions: [][]byte{[]byte("İşlem " + strconv.Itoa(i+1))}, } blockchain = addBlock(newBlock, blockchain) fmt.Println("Yeni blok eklendi:", newBlock.Hash) } err = saveBlockchain(blockchain, blockchainFile) if err != nil { fmt.Println("Blockchain kaydedilemedi:", err) } } ```

Bu örnek kod, bir genesis bloğu oluşturur ve daha sonra 5 yeni blok ekler. Yeni bloklar, `blockchain.json` dosyasına kaydedilir.

Sonuç

Bu makalede, Golang kullanarak basit bir blockchain oluşturma adımlarını inceledik. Blockchain, güvenli ve şeffaf veri depolama ve işlem sistemleri oluşturmak için kullanılabilen güçlü bir teknolojidir. Kendi blockchain’inizi oluşturmak için bu basit örneği bir temel olarak kullanabilir ve kendi ihtiyaçlarınıza göre geliştirebilirsiniz.

Daha Fazla Bilgi İçin

Blockchain teknolojisi hakkında daha fazla bilgi edinmek isterseniz, aşağıdaki kaynakları inceleyebilirsiniz:

#Etiketler

#Blockchain #Golang #Programlama #KriptoPara #Teknoloji #VeriDepolama #DağıtıkSistemler #Güvenlik #Şeffaflık

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.