Bumuo ng Iyong Sariling Blockchain
๐ 12 min basahin ยท ๐ Python
Quick Answer
Ang pinakamahusay na paraan upang maunawaan ang isang blockchain ay ang bumuo ng isa. Sa humigit-kumulang 50 linya ng Python maaari kang lumikha ng gumaganang blockchain ng laruang may hashing, isang hanay ng mga bloke, proof-of-work mining, at tamper detection โ ang parehong mga pangunahing ideya na nagse-secure ng Bitcoin. Walang paunang kaalaman sa blockchain na kailangan.
โ ๏ธ Isa itong learning model, hindi production code. Itinuturo nito ang istruktura ng data sa likod ng Bitcoin โ hindi ito secure na pera at hindi dapat magkaroon ng tunay na halaga.
Hakbang 1 โ Isang bloke at fingerprint nito
Ang isang bloke ay nagtataglay ng ilang data (mga transaksyon), isang link sa nakaraang bloke, at isang "nonce" (isang numero na maaari nating baguhin). Ang pagkakakilanlan nito ay isang SHA-256 hash ng lahat ng nilalaman nito โ baguhin ang isang character at ganap na magbabago ang hash. Ang hash na iyon ay ang tamper-event na fingerprint ng block.
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()Hakbang 2 โ Pagmimina (Katunayan ng Trabaho)
Ang ibig sabihin ng pagmimina ay paghahanap ng hash na nakakatugon sa isang panuntunan โ dito, simula sa isang set na bilang ng mga zero. Walang formula; pilitin mo ang nonce hanggang magkasya ang hash. Ang pagsuri ng solusyon ay madalian, ngunit ang paghahanap ng isa ay nangangailangan ng trabaho. Ang kawalaan ng simetrya ay ang puso ng Proof of Work.
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()Hakbang 3 - Pagkakadena ng mga bloke
Ang bawat bagong block ay nag-iimbak ng hash ng nauna, hinang ang mga ito sa isang chain na nagsisimula sa isang hard-coded na "genesis" block. Dahil ang bawat bloke ay commit sa isa bago nito, ang pagkakasunud-sunod ay naayos at ang kasaysayan ay magkakaugnay.
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 blockHakbang 4 โ Pagpapatunay sa chain
Upang magtiwala sa isang chain, muli mong suriin ito: ang bawat bloke ay dapat tumuro sa tunay na hash ng nakaraang bloke, at ang bawat bloke ay dapat matugunan ang proof-of-work na panuntunan. Kung mabigo ang alinmang tseke kahit saan, hindi wasto ang chain.
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 TrueHakbang 5 โ Patakbuhin ito at subukang mandaya
Ngayon magdagdag ng ilang mga bloke at pagkatapos ay pakialaman ang isang lumang transaksyon. Sa sandaling binago mo ang nakaraang data, hindi na tumutugma ang hash ng block na iyon sa inaasahan ng susunod na block โ at ang validation ay agad na nagbabalik ng False. Ito ay, sa maliit na larawan, kung bakit hindi mo maaaring tahimik na muling isulat ang kasaysayan ng Bitcoin.
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!๐ Key takeaway
Ang blockchain ay mga istruktura lamang ng data at mga panuntunan: i-hash ang bawat bloke, i-link ito sa huli, at gawing magastos ang pagdaragdag ng mga bloke sa pamamagitan ng proof-of-work. Sinisira ng pakikialam ang kadena ng mga hash โ na kung paano nananatiling maliwanag ang Bitcoin nang walang sentral na awtoridad.
Ano ang idinagdag ng totoong Bitcoin
Ang aming kadena ng laruan ay nagtuturo sa kalansay. Ang Real Bitcoin ay nagdaragdag ng isang pandaigdigang peer-to-peer network ng mga node, mga digital na lagda na nagpapatunay kung sino ang maaaring gumastos ng mga barya, awtomatikong pagsasaayos ng kahirapan, ang modelo ng UTXO, hinaharangan ang mga reward at halvings, at ang mga panuntunan ng pinagkasunduan na nagpapahintulot sa mga estranghero na sumang-ayon nang walang tiwala. Galugarin ang bawat isa sa aming mga nagpapaliwanag sa ibaba.
Mga madalas itanong
Ito ba ay isang tunay na blockchain tulad ng Bitcoin?โผ
Ito ay isang pinasimpleng modelo ng pagtuturo na nagbabahagi ng mga pangunahing ideya ng Bitcoin โ hashing, chaining, at proof-of-work โ ngunit iniiwan ang networking, digital signatures, at economic incentives na ginagawang secure ang Bitcoin sa pandaigdigang saklaw. Ito ay para sa pag-aaral, hindi para sa pagpapatakbo ng pera.
Kailangan ko bang maging isang programmer?โผ
Ang pangunahing kaalaman sa Python ay nakakatulong, ngunit ang mga paliwanag ay nakasulat upang masundan ng sinuman ang lohika. Maaari mo itong basahin upang maunawaan ang mga konsepto kahit na hindi pinapatakbo ang code.
Bakit nagdaragdag lamang ng mga zero ang pagmimina?โผ
Ang pag-aatas sa hash na magsimula sa isang bilang ng mga zero ay isang madaling suriin ngunit mahirap hanapin na kundisyon. Ang tanging paraan upang makahanap ng wastong hash ay ang patuloy na paghula (pagbabago ng nonce), na kung bakit ang tunay na pagmimina ay nagkakahalaga ng enerhiya.
Ano ang kulang kumpara sa totoong Bitcoin?โผ
Isang tunay na network ng mga node, mga digital na lagda na nagpapatunay ng pagmamay-ari, isang peer-to-peer na protocol, pagsasaayos ng kahirapan, modelo ng UTXO, at mga gantimpala sa pag-block. Itinuturo ng tutorial na ito ang istruktura ng data; tingnan ang aming mga nagpapaliwanag para sa buong sistema.