ສ້າງ Blockchain ຂອງທ່ານເອງ
📖 12 ນາທີອ່ານ · 🐍 Python
Quick Answer
ວິທີທີ່ດີທີ່ສຸດທີ່ຈະເຂົ້າໃຈ blockchain ແມ່ນການສ້າງຫນຶ່ງ. ໃນປະມານ 50 ສາຍຂອງ Python ທ່ານສາມາດສ້າງ blockchain ຂອງຫຼິ້ນທີ່ເຮັດວຽກດ້ວຍການ hashing, ຕ່ອງໂສ້ຂອງຕັນ, ການຂຸດຄົ້ນບໍ່ແຮ່ຫຼັກຖານສະແດງ, ແລະການຊອກຄົ້ນຫາ tamper - ແນວຄວາມຄິດຫຼັກດຽວກັນທີ່ຮັບປະກັນ Bitcoin. ບໍ່ມີຄວາມຮູ້ກ່ຽວກັບ blockchain ມາກ່ອນ.
⚠️ ນີ້ແມ່ນຮູບແບບການຮຽນຮູ້, ບໍ່ແມ່ນລະຫັດການຜະລິດ. ມັນສອນໂຄງສ້າງຂໍ້ມູນທີ່ຢູ່ເບື້ອງຫລັງ Bitcoin - ມັນບໍ່ແມ່ນເງິນທີ່ປອດໄພແລະບໍ່ຄວນຖືມູນຄ່າທີ່ແທ້ຈິງ.
ຂັ້ນຕອນທີ 1 — ຕັນ ແລະລາຍນິ້ວມືຂອງມັນ
ບລັອກເກັບຂໍ້ມູນບາງຢ່າງ (ການເຮັດທຸລະກໍາ), ການເຊື່ອມຕໍ່ກັບບລັອກທີ່ຜ່ານມາ, ແລະ "nonce" (ຕົວເລກທີ່ພວກເຮົາສາມາດປ່ຽນແປງໄດ້). ຕົວຕົນຂອງມັນແມ່ນ SHA-256 hash ຂອງເນື້ອຫາທັງຫມົດຂອງມັນ - ປ່ຽນລັກສະນະຫນຶ່ງແລະ hash ປ່ຽນແປງຢ່າງສົມບູນ. ແຮຊນັ້ນແມ່ນລາຍນິ້ວມືທີ່ເຫັນໄດ້ຊັດເຈນຂອງບລັອກ.
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()ຂັ້ນຕອນທີ 2 - ການຂຸດຄົ້ນບໍ່ແຮ່ (ຫຼັກຖານສະແດງການເຮັດວຽກ)
ການຂຸດຄົ້ນບໍ່ແຮ່ຫມາຍເຖິງການຊອກຫາ hash ທີ່ສອດຄ່ອງກັບກົດລະບຽບ - ທີ່ນີ້, ເລີ່ມຕົ້ນດ້ວຍຈໍານວນທີ່ກໍານົດໄວ້ຂອງສູນ. ບໍ່ມີສູດ; ທ່ານ brute-force nonce ຈົນກ່ວາ hash ເຫມາະ. ການກວດສອບການແກ້ໄຂແມ່ນທັນທີ, ແຕ່ການຊອກຫາຫນຶ່ງໃຊ້ເວລາເຮັດວຽກ. asymmetry ທີ່ເປັນຫົວໃຈຂອງຫຼັກຖານສະແດງການເຮັດວຽກ.
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()ຂັ້ນຕອນທີ 3 — ຕ່ອງໂສ້ຕັນໄດ້
ແຕ່ລະທ່ອນໄມ້ໃຫມ່ເກັບຮັກສາ hash ຂອງອັນທີ່ຜ່ານມາ, ເຊື່ອມໃຫ້ເຂົາເຈົ້າເຂົ້າໄປໃນລະບົບຕ່ອງໂສ້ທີ່ເລີ່ມຕົ້ນດ້ວຍຕັນ "genesis" ຍາກລະຫັດ. ເນື່ອງຈາກວ່າທຸກຕັນຫມັ້ນສັນຍາກັບຫນຶ່ງກ່ອນມັນ, ຄໍາສັ່ງໄດ້ຖືກແກ້ໄຂແລະປະຫວັດສາດແມ່ນເຊື່ອມຕໍ່ກັນ.
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ຂັ້ນຕອນທີ 4 - ການກວດສອບລະບົບຕ່ອງໂສ້
ເພື່ອໄວ້ວາງໃຈລະບົບຕ່ອງໂສ້, ທ່ານກວດເບິ່ງມັນຄືນໃຫມ່: ທຸກໆຕັນຕ້ອງຊີ້ໃຫ້ເຫັນເຖິງຈຸດທີ່ແທ້ຈິງຂອງບລັອກທີ່ຜ່ານມາ, ແລະທຸກໆຕັນຕ້ອງປະຕິບັດຕາມກົດລະບຽບການເຮັດວຽກ. ຖ້າການກວດສອບທັງສອງລົ້ມເຫລວຢູ່ບ່ອນໃດກໍ່ຕາມ, ລະບົບຕ່ອງໂສ້ບໍ່ຖືກຕ້ອງ.
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ຂັ້ນຕອນທີ 5 — ດໍາເນີນການມັນແລະພະຍາຍາມ cheat
ຕອນນີ້ເພີ່ມທ່ອນໄມ້ບໍ່ຫຼາຍປານໃດແລະຫຼັງຈາກນັ້ນຂັດກັບທຸລະກໍາເກົ່າ. ເວລາທີ່ທ່ານປ່ຽນຂໍ້ມູນທີ່ຜ່ານມາ, ແຮຊຂອງບລັອກນັ້ນບໍ່ກົງກັບສິ່ງທີ່ບລັອກຕໍ່ໄປຄາດຫວັງ - ແລະການກວດສອບຈະກັບມາເປັນຜິດທັນທີ. ນີ້ແມ່ນ, ໃນຂະຫນາດນ້ອຍ, ເປັນຫຍັງທ່ານບໍ່ສາມາດຂຽນປະຫວັດສາດຂອງ 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!🔑 ເອົາກະແຈ
blockchain ແມ່ນພຽງແຕ່ໂຄງສ້າງຂໍ້ມູນບວກກັບກົດລະບຽບ: hash ແຕ່ລະ block, ເຊື່ອມຕໍ່ມັນກັບສຸດທ້າຍ, ແລະເຮັດໃຫ້ການເພີ່ມ blocks ຄ່າໃຊ້ຈ່າຍໂດຍຜ່ານຫຼັກຖານສະແດງການເຮັດວຽກ. Tampering ທໍາລາຍລະບົບຕ່ອງໂສ້ຂອງ hashes - ເຊິ່ງເປັນວິທີທີ່ Bitcoin ຄົງຢູ່ຢ່າງເຫັນໄດ້ຊັດເຈນໂດຍບໍ່ມີອໍານາດສູນກາງ.
ສິ່ງທີ່ Bitcoin ທີ່ແທ້ຈິງເພີ່ມ
ລະບົບຕ່ອງໂສ້ toy ຂອງພວກເຮົາສອນ skeleton ໄດ້. Bitcoin ທີ່ແທ້ຈິງເພີ່ມເຄືອຂ່າຍ peer-to-peer ທົ່ວໂລກຂອງ nodes, ລາຍເຊັນດິຈິຕອນທີ່ພິສູດວ່າໃຜສາມາດໃຊ້ຫຼຽນ, ການປັບຄວາມຫຍຸ້ງຍາກອັດຕະໂນມັດ, ຮູບແບບ UTXO, ລາງວັນຕັນແລະເຄິ່ງຫນຶ່ງ, ແລະກົດລະບຽບການຕົກລົງທີ່ປ່ອຍໃຫ້ຄົນແປກຫນ້າຕົກລົງໂດຍບໍ່ມີຄວາມໄວ້ວາງໃຈ. ສຳຫຼວດແຕ່ລະຕົວອະທິບາຍຂອງພວກເຮົາຂ້າງລຸ່ມນີ້.
ຄຳຖາມທີ່ມັກຖາມເລື້ອຍໆ
ນີ້ແມ່ນ blockchain ທີ່ແທ້ຈິງຄື Bitcoin?▼
ມັນແມ່ນຮູບແບບການສອນທີ່ງ່າຍດາຍທີ່ແບ່ງປັນແນວຄວາມຄິດຫຼັກຂອງ Bitcoin - ການຕີ, ການສ້າງລະບົບຕ່ອງໂສ້, ແລະຫຼັກຖານສະແດງການເຮັດວຽກ - ແຕ່ອອກຈາກເຄືອຂ່າຍ, ລາຍເຊັນດິຈິຕອນ, ແລະແຮງຈູງໃຈທາງເສດຖະກິດທີ່ເຮັດໃຫ້ Bitcoin ປອດໄພໃນຂອບເຂດທົ່ວໂລກ. ມັນແມ່ນເພື່ອການຮຽນຮູ້, ບໍ່ແມ່ນການແລ່ນເງິນ.
ຂ້ອຍຈໍາເປັນຕ້ອງເປັນນັກຂຽນໂປລແກລມບໍ?▼
ຄວາມຄຸ້ນເຄີຍພື້ນຖານກັບ Python ຊ່ວຍໃຫ້, ແຕ່ຄໍາອະທິບາຍໄດ້ຖືກຂຽນເພື່ອໃຫ້ທຸກຄົນສາມາດປະຕິບັດຕາມເຫດຜົນ. ທ່ານສາມາດອ່ານມັນເພື່ອເຂົ້າໃຈແນວຄວາມຄິດເຖິງແມ່ນວ່າໂດຍບໍ່ມີການແລ່ນລະຫັດ.
ເປັນຫຍັງການຂຸດຄົ້ນບໍ່ແຮ່ພຽງແຕ່ເພີ່ມສູນ?▼
ການຮຽກຮ້ອງໃຫ້ມີ hash ເພື່ອເລີ່ມຕົ້ນດ້ວຍຈໍານວນສູນແມ່ນເປັນເງື່ອນໄຂທີ່ງ່າຍຕໍ່ການກວດສອບແຕ່ຍາກທີ່ຈະຊອກຫາ. ວິທີດຽວທີ່ຈະຊອກຫາ hash ທີ່ຖືກຕ້ອງແມ່ນເພື່ອຮັກສາການຄາດເດົາ (ການປ່ຽນແປງ nonce), ເຊິ່ງແນ່ນອນວ່າການຂຸດຄົ້ນບໍ່ແຮ່ທີ່ແທ້ຈິງມີຄ່າໃຊ້ຈ່າຍພະລັງງານ.
ສິ່ງທີ່ຂາດຫາຍໄປເມື່ອທຽບກັບ Bitcoin ທີ່ແທ້ຈິງ?▼
ເຄືອຂ່າຍທີ່ແທ້ຈິງຂອງ nodes, ລາຍເຊັນດິຈິຕອນພິສູດຄວາມເປັນເຈົ້າຂອງ, ອະນຸສັນຍາ peer-to-peer, ການປັບຄວາມຫຍຸ້ງຍາກ, ຮູບແບບ UTXO, ແລະລາງວັນຕັນ. tutorial ນີ້ສອນໂຄງສ້າງຂໍ້ມູນ; ເບິ່ງຜູ້ອະທິບາຍຂອງພວກເຮົາສໍາລັບລະບົບເຕັມ.