Bina Blockchain Anda Sendiri

๐Ÿ“– 12 min baca ยท ๐Ÿ Python

โœ๏ธ Ditulis & disemak oleh Karel Havlรญฤekdikemas kini 2026๐Ÿ›ก๏ธ Bebas dari segi editorial

Quick Answer

Cara terbaik untuk memahami blockchain ialah membina satu. Dalam kira-kira 50 baris Python anda boleh mencipta blok mainan yang berfungsi dengan pencincangan, rantaian blok, perlombongan bukti kerja dan pengesanan gangguan โ€” idea teras yang sama yang menjamin Bitcoin. Tiada pengetahuan blockchain sebelumnya diperlukan.

โš ๏ธ Ini adalah model pembelajaran, bukan kod pengeluaran. Ia mengajar struktur data di sebalik Bitcoin โ€” ia bukan wang yang selamat dan tidak sepatutnya memegang nilai sebenar.

Langkah 1 โ€” Blok dan cap jarinya

Blok menyimpan beberapa data (urus niaga), pautan ke blok sebelumnya dan "nonce" (nombor yang boleh kita ubah). Identitinya ialah cincang SHA-256 bagi semua kandungannya โ€” tukar satu aksara dan cincang berubah sepenuhnya. Cincang itu ialah cap jari yang boleh diganggu gugat.

import hashlib, json, time

class Block:
    def __init__(self, index, transactions, previous_hash, nonce=0):
        self.index = index
        self.timestamp = time.time()
        self.transactions = transactions
        self.previous_hash = previous_hash
        self.nonce = nonce

    def hash(self):
        # A block's fingerprint = SHA-256 of all its contents.
        payload = json.dumps({
            "index": self.index,
            "timestamp": self.timestamp,
            "transactions": self.transactions,
            "previous_hash": self.previous_hash,
            "nonce": self.nonce,
        }, sort_keys=True).encode()
        return hashlib.sha256(payload).hexdigest()

Langkah 2 โ€” Perlombongan (Bukti Kerja)

Perlombongan bermaksud mencari cincang yang memenuhi peraturan โ€” di sini, bermula dengan bilangan sifar yang ditetapkan. Tiada formula; anda brute-force nonce sehingga cincang muat. Menyemak penyelesaian adalah segera, tetapi mencari penyelesaian memerlukan usaha. Asimetri itu adalah nadi Bukti Kerja.

DIFFICULTY = 4  # require this many leading zeros

def mine(block):
    # Proof of Work: keep changing the nonce until the hash
    # starts with DIFFICULTY zeros. There is no shortcut โ€”
    # you just have to guess, which is what costs energy.
    target = "0" * DIFFICULTY
    while not block.hash().startswith(target):
        block.nonce += 1
    return block.hash()

Langkah 3 - Merantai blok

Setiap blok baharu menyimpan cincangan yang sebelumnya, mengimpalnya ke dalam rantai yang bermula dengan blok "genesis" berkod keras. Oleh kerana setiap blok berkomitmen kepada yang sebelum itu, susunan itu ditetapkan dan sejarahnya dipautkan bersama.

class Blockchain:
    def __init__(self):
        # The genesis block โ€” the very first, hard-coded block.
        genesis = Block(0, [{"note": "genesis"}], "0")
        mine(genesis)
        self.chain = [genesis]

    def add_block(self, transactions):
        prev = self.chain[-1]
        block = Block(len(self.chain), transactions, prev.hash())
        mine(block)            # do the work
        self.chain.append(block)
        return block

Langkah 4 โ€” Mengesahkan rantaian

Untuk mempercayai rantaian, anda menyemaknya semula: setiap blok mesti menunjuk ke cincang sebenar blok sebelumnya dan setiap blok mesti memenuhi peraturan bukti kerja. Jika mana-mana semakan gagal di mana-mana, rantai itu tidak sah.

def is_valid(chain):
    for i in range(1, len(chain)):
        current, previous = chain[i], chain[i - 1]
        # 1) Each block must point to the real hash of the one before it.
        if current.previous_hash != previous.hash():
            return False
        # 2) Each block must satisfy the proof-of-work rule.
        if not current.hash().startswith("0" * DIFFICULTY):
            return False
    return True

Langkah 5 โ€” Jalankan dan cuba menipu

Sekarang tambah beberapa blok dan kemudian ganggu transaksi lama. Sebaik sahaja anda menukar data lalu, cincangan blok itu tidak lagi sepadan dengan jangkaan blok seterusnya โ€” dan pengesahan serta-merta mengembalikan Palsu. Inilah, dalam bentuk kecil, mengapa anda tidak boleh menulis semula sejarah Bitcoin secara senyap-senyap.

bc = Blockchain()
bc.add_block([{"from": "Alice", "to": "Bob", "amount": 5}])
bc.add_block([{"from": "Bob", "to": "Carol", "amount": 2}])

print("Chain valid?", is_valid(bc.chain))   # True

# Now try to cheat: tamper with an old transaction.
bc.chain[1].transactions[0]["amount"] = 5000
print("Chain valid?", is_valid(bc.chain))   # False โ€” tampering is caught!

๐Ÿ”‘ Bawa pulang kunci

Blockchain hanyalah struktur data serta peraturan: cincang setiap blok, pautkannya ke yang terakhir, dan buat penambahan blok mahal melalui bukti kerja. Penggangguan memutuskan rantaian cincang โ€” iaitu cara Bitcoin kekal jelas tanpa pihak berkuasa pusat.

Apa yang ditambahkan oleh Bitcoin sebenar

Rantai mainan kami mengajar rangka. Real Bitcoin menambah rangkaian nod peer-to-peer global, tandatangan digital yang membuktikan siapa yang boleh membelanjakan syiling, pelarasan kesukaran automatik, model UTXO, menyekat ganjaran dan separuh, dan peraturan konsensus yang membenarkan orang yang tidak dikenali bersetuju tanpa kepercayaan. Teroka setiap satu dalam penjelasan kami di bawah.

Soalan lazim

Adakah ini blockchain sebenar seperti Bitcoin?โ–ผ

Ia adalah model pengajaran ringkas yang berkongsi idea teras Bitcoin โ€” pencincangan, rantaian dan bukti kerja โ€” tetapi meninggalkan rangkaian, tandatangan digital dan insentif ekonomi yang menjadikan Bitcoin selamat pada skala global. Ia adalah untuk belajar, bukan untuk menjalankan wang.

Adakah saya perlu menjadi seorang pengaturcara?โ–ผ

Kebiasaan asas dengan Python membantu, tetapi penjelasan ditulis supaya sesiapa sahaja boleh mengikuti logik. Anda boleh membacanya untuk memahami konsep walaupun tanpa menjalankan kod.

Mengapa perlombongan hanya menambah sifar?โ–ผ

Memerlukan cincangan untuk bermula dengan bilangan sifar ialah syarat yang mudah disemak tetapi sukar dicari. Satu-satunya cara untuk mencari cincang yang sah adalah dengan terus meneka (mengubah nonce), itulah sebabnya perlombongan sebenar memerlukan tenaga.

Apa yang kurang berbanding Bitcoin sebenar?โ–ผ

Rangkaian nod sebenar, tandatangan digital yang membuktikan pemilikan, protokol peer-to-peer, pelarasan kesukaran, model UTXO dan ganjaran blok. Tutorial ini mengajar struktur data; lihat penjelasan kami untuk sistem penuh.

Teruskan belajar