သင်၏ကိုယ်ပိုင် Blockchain ကိုတည်ဆောက်ပါ။
📖 12 မိနစ်ဖတ်ပါ။ · 🐍 Python
Quick Answer
blockchain တစ်ခုကို နားလည်ရန် အကောင်းဆုံးနည်းလမ်းမှာ တစ်ခုတည်ဆောက်ရန်ဖြစ်သည်။ Python ၏ စာကြောင်း 50 ခန့်တွင် သင်သည် Bitcoin ကို လုံခြုံစေသည့် တူညီသော အိုင်ဒီယာများကို လုံခြုံစေမည့် တူညီသော အိုင်ဒီယာများဖြစ်သော လုပ်ကွက်ကွင်းဆက်တစ်ခု၊ လုပ်ကွက်ကွင်းဆက်များ၊ လုပ်ကွက်များ တူးဖော်ခြင်းနှင့် ဆော့ကစားခြင်းတို့ကို ဖန်တီးနိုင်သည်။ ကြိုတင် blockchain အသိပညာမလိုအပ်ပါ။
⚠️ ၎င်းသည် ထုတ်လုပ်မှုကုဒ်မဟုတ်ဘဲ သင်ယူမှုပုံစံတစ်ခုဖြစ်သည်။ ၎င်းသည် Bitcoin ၏နောက်ကွယ်ရှိ ဒေတာဖွဲ့စည်းပုံကို သင်ကြားပေးသည် — ၎င်းသည် လုံခြုံသောငွေမဟုတ်သည့်အပြင် စစ်မှန်သောတန်ဖိုးကို ဘယ်တော့မှမကိုင်သင့်ပါ။
အဆင့် 1 — ဘလောက်တစ်ခုနှင့် ၎င်း၏လက်ဗွေ
ဘလောက်တစ်ခုသည် အချို့သောဒေတာ (ငွေပေးငွေယူများ)၊ ယခင်ပိတ်ဆို့ထားသောလင့်ခ်၊ နှင့် "nonce" (ကျွန်ုပ်တို့ပြောင်းလဲနိုင်သော နံပါတ်တစ်ခု) ရှိသည်။ ၎င်း၏ဝိသေသလက္ခဏာသည် ၎င်း၏အကြောင်းအရာအားလုံး၏ SHA-256 hash တစ်ခုဖြစ်သည် — ဇာတ်ကောင်တစ်ခုပြောင်းပြီး 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 လုပ်ပါ။ အဖြေတစ်ခုကို စစ်ကြည့်ခြင်းသည် ချက်ချင်းပင်၊ သို့သော် တစ်ခုရှာဖွေခြင်းသည် အလုပ်ဖြစ်သည်။ ထိုအချိုးမညီမှုသည် အလုပ်သက်သေ၏ နှလုံးသားဖြစ်သည်။
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 ကိုသိမ်းဆည်းထားပြီး hard-coded "genesis" block ဖြင့်စတင်သည့် ကွင်းဆက်တစ်ခုအဖြစ် ၎င်းတို့ကို ဂဟေဆက်သည်။ ပိတ်ဆို့ခြင်းတိုင်းသည် ၎င်းမတိုင်မီက တစ်ဦးကို ကတိပြုသောကြောင့်၊ အမှာစာကို ပြင်ဆင်ပြီး မှတ်တမ်းကို အတူတကွ ချိတ်ဆက်ထားသည်။
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 — ၎င်းကို run ပြီးလှည့်စားရန်ကြိုးစားပါ။
ယခု ဘလောက်အနည်းငယ်ထည့်ပြီးနောက် ငွေပေးငွေယူအဟောင်းကို လက်ဝါးကြီးအုပ်လိုက်ပါ။ သင်အတိတ်ဒေတာကို ပြောင်းလဲလိုက်သည့်အခိုက်တွင်၊ ထိုဘလောက်၏ ဟက်ရှ်သည် နောက်ဘလောက်တွင် မျှော်လင့်ထားသည့်အရာနှင့် မကိုက်ညီတော့ဘဲ — နှင့် အတည်ပြုချက်သည် ချက်ချင်း False ပြန်ဖြစ်လာသည်။ ဤအရာသည် သေးငယ်သောအားဖြင့်၊ အဘယ်ကြောင့် 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၊ ၎င်းကို နောက်ဆုံးသို့ လင့်ခ်လုပ်ပြီး အထောက်အထား-of-work မှတဆင့် ငွေကုန်ကြေးကျခံပြီး blocks ပေါင်းထည့်ပါ။ ခိုးယူခြင်းသည် ဗဟိုအာဏာပိုင်မပါဘဲ Bitcoin သည် ခိုးကြောင်ခိုးဝှက်တည်ရှိနေပုံဖြစ်သည့် hashe ကွင်းဆက်ကို ချိုးဖျက်ပေးသည်။
Bitcoin အစစ်အမှန်က ဘာထပ်ပေးလဲ။
ကျွန်ုပ်တို့၏အရုပ်ကြိုးသည် အရိုးစုကို သင်ပေးသည်။ Real Bitcoin သည် ဒင်္ဂါးပြားများကို သုံးစွဲနိုင်သူ၊ အလိုအလျောက် အခက်အခဲ ချိန်ညှိမှု၊ UTXO မော်ဒယ်၊ ဆုလာဘ်များ ပိတ်ဆို့ခြင်းနှင့် တစ်ဝက်တစ်ပျက် နှင့် သူစိမ်းများ သဘောတူခွင့်ပြုသည့် အများသဘောတူ စည်းမျဥ်းများ နှင့် သူစိမ်းများ သဘောတူခွင့်ပြုသည့် သဘောတူညီမှု စည်းမျဉ်းများ တို့ကို သက်သေပြသည့် ကမ္ဘာလုံးဆိုင်ရာ ရွယ်တူအချင်းချင်း ကွန်ရက် ကွန်ရက်ကို ပေါင်းထည့်ပါသည်။ အောက်တွင် ကျွန်ုပ်တို့၏ ရှင်းပြချက်များထဲမှ တစ်ခုစီကို လေ့လာပါ။
မေးလေ့ရှိသောမေးခွန်းများ
၎င်းသည် Bitcoin ကဲ့သို့ တကယ့် blockchain ဖြစ်ပါသလား။▼
၎င်းသည် Bitcoin ၏ အဓိက အယူအဆများ — hashing, chaining, and proof-of-work — မျှဝေသည့် ရိုးရှင်းသော သင်ကြားမှုပုံစံတစ်ခုဖြစ်ပြီး Bitcoin သည် ကမ္ဘာလုံးဆိုင်ရာအတိုင်းအတာတွင် လုံခြုံစေသည့် ကွန်ရက်ချိတ်ဆက်မှု၊ ဒစ်ဂျစ်တယ်လက်မှတ်များနှင့် စီးပွားရေးမက်လုံးများကို ချန်ထားခဲ့သည်။ ပိုက်ဆံရှာဖို့မဟုတ်ဘဲ သင်ယူဖို့ပါ။
ငါ ပရိုဂရမ်မာတစ်ယောက်ဖြစ်ဖို့ လိုသလား။▼
Python နှင့် အခြေခံရင်းနှီးကျွမ်းဝင်မှုက အထောက်အကူဖြစ်စေသော်လည်း မည်သူမဆို ယုတ္တိဗေဒကို လိုက်နာနိုင်စေရန် ရှင်းလင်းချက်များကို ရေးသားထားသည်။ ကုဒ်ကိုအသုံးမပြုဘဲ သဘောတရားများကို နားလည်ရန် ၎င်းကိုဖတ်နိုင်သည်။
သတ္တုတွင်းက ဘာကြောင့် သုညကို ပေါင်းထည့်တာလဲ။▼
သုညအရေအတွက်ဖြင့် အစပြုရန် hash ကို လိုအပ်ခြင်းသည် စစ်ဆေးရန်လွယ်ကူသော်လည်း ရှာဖွေရခက်သော အခြေအနေတစ်ခုဖြစ်သည်။ မှန်ကန်သော hash တစ်ခုကို ရှာဖွေရန် တစ်ခုတည်းသောနည်းလမ်းမှာ မှန်းဆခြင်း (nonce ကို ပြောင်းလဲခြင်း) ဖြစ်သည်၊ ထို့ကြောင့် အမှန်တကယ် သတ္တုတွင်းသည် စွမ်းအင်ကုန်ကျစရိတ်ကို အဘယ်ကြောင့် အတိအကျ ပေးရသနည်း။
အစစ်အမှန် Bitcoin နှင့်နှိုင်းယှဉ်ပါကဘာများပျောက်ဆုံးနေသနည်း။▼
Node များ၏ တကယ့်ကွန်ရက်၊ ပိုင်ဆိုင်မှုကို သက်သေပြသည့် ဒစ်ဂျစ်တယ် လက်မှတ်များ၊ ရွယ်တူချင်းမှ လုပ်ဖော်ကိုင်ဖက် ပရိုတိုကော၊ အခက်အခဲ ချိန်ညှိမှု၊ UTXO မော်ဒယ်နှင့် ပိတ်ဆို့ခြင်း ဆုလာဘ်များ။ ဤသင်ခန်းစာသည် ဒေတာဖွဲ့စည်းပုံကို သင်ကြားပေးသည်။ စနစ်အပြည့်အစုံအတွက် ကျွန်ုပ်တို့၏ရှင်းပြချက်များကို ကြည့်ပါ။