Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Membina Rantaian Sekat Mudah di Golang

Membina Rantaian Sekat Mudah di Golang

DDD
DDDasal
2024-11-04 08:52:01876semak imbas

Dalam artikel ini, kami akan cuba membina rantaian blok asas menggunakan Go. Kami akan membincangkan perkara penting struktur blok, pencincangan dan pengesahan transaksi menggunakan SHA-256, yang lebih selamat daripada MD5.

Mengapa Pergi untuk Blockchain?

Go ialah bahasa yang cekap dan mudah dipelajari yang bagus untuk projek yang melibatkan konkurensi dan kelajuan—kedua-duanya penting untuk pelaksanaan blockchain.


Asas Blockchain

Rangkaian blok ialah satu siri blok yang dipautkan oleh cincang kriptografi. Setiap blok mengandungi:

  • Data: Maklumat yang disimpan dalam blok, seperti butiran transaksi.
  • Cincang: Cincang SHA-256 bagi kandungan blok.
  • Cincang Sebelumnya: Cincang blok sebelumnya, memautkan blok bersama.
  • Nonce: Nilai yang digunakan dalam perlombongan untuk melaraskan cincang.

Dengan persediaan ini, kami memastikan setiap blok dalam rantaian boleh dikenal pasti secara unik dan tahan gangguan.


Mentakrifkan Struktur Blok

Dalam Go, kami mentakrifkan setiap blok dengan medan untuk Data, Hash, PrevHash, Nonce dan Transaksi.

type Block struct {
    Hash         string
    Data         string
    PrevHash     string
    Nonce        int
    Transactions []*Transaction
}

Mengkomputerkan Hash SHA-256

Untuk melindungi setiap blok, kami menggunakan SHA-256 untuk mengira cincang berdasarkan data blok dan cincang sebelumnya.

func (b *Block) ComputeHash() {
    data := b.Data + b.PrevHash
    hash := sha256.Sum256([]byte(data))
    b.Hash = hex.EncodeToString(hash[:])
}

Mencipta Blok Kejadian

Blok genesis ialah blok pertama dalam blokchain kami, yang dimulakan dengan transaksi "coinbase" yang unik untuk mewujudkan titik permulaan.

func Genesis() *Block {
    coinbaseTx := &Transaction{Sender: "Coinbase", Receiver: "Genesis", Amount: 0.0}
    return CreateBlock("Genesis Block", "", []*Transaction{coinbaseTx})
}

Menstrukturkan Blockchain

Blok blok kami terdiri daripada pelbagai blok. Kami memulakannya dengan blok genesis.

type Blockchain struct {
    Blocks []*Block
}

func InitBlockChain() *Blockchain {
    return &Blockchain{[]*Block{Genesis()}}
}

Bukti Kerja dan Perlombongan

Untuk menambah blok, kami memerlukan algoritma Bukti Kerja yang mencari cincang yang memenuhi syarat sasaran. Proses ini melibatkan penambahan Nonce sehingga cincangan memenuhi kesukaran sasaran, memastikan blok tidak ditambah secara remeh.

Dompet dan Transaksi

Untuk mensimulasikan fungsi dompet, kami menjana kunci RSA untuk menandatangani dan mengesahkan transaksi.

  • Mencipta Dompet: Setiap dompet mempunyai kunci awam dan peribadi.
  • Menandatangani Transaksi: Transaksi ditandatangani oleh kunci peribadi pengirim untuk pengesahan.
  • Mengesahkan Transaksi: Penerima boleh mengesahkan transaksi menggunakan kunci awam penghantar, memastikan kesahihan.

Contoh: Menggunakan Blockchain

Begini cara kami menggunakan rantaian blok:

  1. Memulakan blokchain.
  2. Buat dompet untuk peserta (cth., Alice dan Bob).
  3. Tambah urus niaga, tandatanganinya dengan kunci peribadi Alice dan tambahkannya pada blok baharu.
  4. Paparkan kandungan blockchain untuk pengesahan.
type Block struct {
    Hash         string
    Data         string
    PrevHash     string
    Nonce        int
    Transactions []*Transaction
}

Projek ini merangkumi komponen teras blockchain—penstrukturan, pencincangan, perlombongan bukti kerja dan pengesahan transaksi dengan tandatangan digital. Pencincangan SHA-256 kami memastikan pengecam yang selamat dan unik untuk setiap blok, manakala dompet berasaskan RSA menambah pengesahan transaksi asas.

Pelaksanaan blockchain ini ialah model yang dipermudahkan. Untuk mengembangkannya lagi, anda boleh:

  • Tambahkan storan berterusan untuk blok.
  • Melaksanakan rangkaian peer-to-peer.
  • Tambahkan pengesahan yang lebih canggih untuk transaksi.

Untuk melihat pelaksanaan penuh dari awal, sila rujuk repo berikut:

Building a Simple Blockchain in Golang thesaltree / blockchain-golang

Pelaksanaan rantaian blok di Golang

Building a Simple Blockchain in Golang

Pelaksanaan Blockchain di Golang

Pelaksanaan blockchain dalam Go, menunjukkan konsep penting teknologi blockchain. Projek ini termasuk struktur blok asas, konsensus bukti kerja, tandatangan transaksi kriptografi dan pengesahan blok.

Ciri

  • Struktur Blok: Setiap blok menyimpan data, cincang, pautan cincang sebelumnya, nonce dan transaksi.
  • Bukti Kerja (PoW): Melaksanakan sistem bukti kerja menggunakan pencincangan md5 untuk mengekalkan integriti blockchain.
  • Dompet dan Transaksi: Menyokong pasangan kunci RSA untuk dompet, penciptaan transaksi, tandatangan dan pengesahan.
  • Blok Kejadian: Mencipta blok genesis (pertama) secara automatik dengan transaksi Coinbase.
  • Demo CLI: Menunjukkan penciptaan sekatan, urus niaga dan pengesahan pada rantaian blok.

Pemasangan

Prasyarat

  • Pergi versi 1.16 atau lebih tinggi.

Persediaan

  • Klon repositori:
type Block struct {
    Hash         string
    Data         string
    PrevHash     string
    Nonce        int
    Transactions []*Transaction
}
  • Jalankan projek:
func (b *Block) ComputeHash() {
    data := b.Data + b.PrevHash
    hash := sha256.Sum256([]byte(data))
    b.Hash = hex.EncodeToString(hash[:])
}
Lihat di GitHub

Atas ialah kandungan terperinci Membina Rantaian Sekat Mudah di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn