รู้จักกับเทคโนโลยี Blockchain

KongRuksiam Studio
3 min readJan 17, 2022

--

Blockchain คือ เทคโนโลยีการจัดเก็บข้อมูลแบบ Shared Database หรือที่รู้จักกันในชื่อ Distributed Ledger Technology (DLT) เป็นรูปแบบการเก็บข้อมูลที่มีความปลอดภัยสูงซึ่งใช้วิธีการตรวจสอบข้อมูลโดยการเช็คจากข้อมูลที่ถูกจัดเก็บไปก่อนหน้านั้น

ข้อมูลดังกล่าวไม่สามารถที่จะเปลี่ยนแปลงหรือแก้ไขได้ซึ่งผู้ใช้ที่อยู่ในเครือข่ายจะเห็นข้อมูลชุดเดียวกันทั้งหมดเป็นและผู้ตรวจสอบข้อมูลโดยใช้หลักการ Cryptography (การเข้ารหัส)

Block = ที่จัดเก็บข้อมูล
Chain =
ตัวเชื่อมโยง Block แต่ละ Block เพื่อให้ข้อมูลที่เก็บใน Block นั้นมีความปลอดภัยสูงมากขึ้นโดยผ่านการเข้ารหัส

เทคโนโลยี Blockchain เกิดขึ้นและได้รับความนิยมในปี 2008 โดย “Satoshi Nakamoto” ได้เสนอแนวคิดเกี่ยวกับการสร้าง Platform ที่สามารถสร้างความปลอดภัยในการแลกเปลี่ยนเงินสกุลดิจิทัลที่มีชื่อว่า Bitcoin โดยใช้ทฤษฎีเกี่ยวกับการทำ Cryptography และ Distributed Computing โดยอ้างอิงงานวิจัยของ
Stuart Haber, W. Scott Stornetta

สกุลเงิน Bitcoin ไม่จำเป็นต้องมีคนกลางเข้ามาเกี่ยวข้องกับกระบวนการจ่ายเงิน เช่น ธนาคาร หรือหน่วยงานอื่นๆ และได้รับการยอมรับจากผู้เชี่ยวชาญทั่วโลกว่าเป็นเทคโนโลยีที่มีศักยภาพ และสามารถนำไปต่อยอดหรือนำมาประยุกต์ใช้ในภาคธุรกิจอื่น ๆ ได้ไม่ได้จำกัดเฉพาะธุรกิจการเงินและการธนาคารอย่างเดียวเท่านั้น

การทำงานของเทคโนโลยี Blockchain อาศัยการจัดเก็บข้อมูลแบบกระจายศูนย์ (Distributed Ledger Technology) โดยทุกข้อมูลจะมีการเชื่อมโยงกันเป็นเครือข่ายและเมื่อมีข้อมูลใหม่เกิดขึ้นจะมีการประกาศบอกทุกเครื่องในเครือข่ายให้รับรู้ข้อมูลทั้งหมดจะถูกจัดเก็บอยู่ภายใต้เทคโนโลยี Blockchain และถูกกระจายไปยังเครื่องของสมาชิกทุกคนในเครือข่ายเนื่องจากทุกเครื่องที่อยู่ในเครือข่ายมีข้อมูลเหมือนกัน ถ้ามีคนพยายาม Hack หรือทำการเปลี่ยนแปลงข้อมูล ข้อมูลที่ถูกเปลี่ยนแปลงก็จะขัดแย้งกับข้อมูลในเครื่องของสมาชิกอื่น ๆ ในเครือข่ายด้วย

ทุกเครื่องในเครือข่ายมีข้อมูลเหมือนกันทั้งหมด ดังนั้นระบบจะไม่อนุญาตให้สร้างข้อมูลใหม่ โดยจะมีแต่ข้อมูลที่ทุกคนในเครือข่ายยอมรับเท่านั้นที่จะสามารถบันทึกเข้าสู่ระบบ Blockchain ได้

เมื่อข้อมูลถูกจัดเก็บเข้าสู่ระบบ Blockchain แล้ว จะไม่สามารถเปลี่ยนแปลงแก้ไขย้อนหลังได้ จึงทำให้เทคโนโลยี Blockchain ได้รับการยอมรับว่าเป็นเทคโนโลยีการจัดเก็บข้อมูลที่มีความปลอดภัยและมีความน่าเชื่อถือสูง

เข้าเรียนเนื้อหา Blockchain เพิ่มเติมได้ที่

โค้ดประกอบการสอน :

import datetime
import json
import hashlib
from flask import Flask , jsonify
class Blockchain:
def __init__(self):
#เก็บกลุ่มของ Block
self.chain = [] #list ที่เก็บ block
self.transaction = 0 #จำนวนเงิน
#genesis block
self.create_block(nonce=1,previous_hash="0")

#สร้าง Block ขึ้นมาในระบบ Blockchain
def create_block(self,nonce,previous_hash):
#เก็บส่วนประกอบของ Block แต่ละ Block
block={
"index":len(self.chain)+1,
"timestamp":str(datetime.datetime.now()),
"nonce":nonce,
"data":self.transaction,
"previous_hash":previous_hash
}
self.chain.append(block)
return block

#ให้บริการเกี่ยวกับ Block ก่อนหน้า
def get_previous_block(self):
return self.chain[-1]

#เข้ารหัส Block
def hash(self,block):
#แปลง python object (dict) = > json object
encode_block=json.dumps(block,sort_keys=True).encode()
#sha-256
return hashlib.sha256(encode_block).hexdigest()

def proof_of_work(self,previous_nonce):

#อยากได้ค่า nonce = ??? ที่ส่งผลให้ได้ target hash => 4 หลักแรก => 0000xxxxxxxxx
new_nonce=1 #ค่า nonce ที่ต้องการ
check_proof = False #ตัวแปรที่เช็คค่า nonce ให้ได้ตาม target ที่กำหนด

#แก้โจทย์ทางคณิตศาสาตร์
while check_proof is False:
#เลขฐาน 16 มา 1 ชุด
hashoperation = hashlib.sha256(str(new_nonce**2 - previous_nonce**2).encode()).hexdigest() #5
if hashoperation[:4] == "0000":
check_proof=True
else:
new_nonce+=1
return new_nonce

#ตรวจสอบ Block
def is_chain_valid(self,chain):
previous_block = chain[0]
block_index = 1
while block_index<len(chain):
block = chain[block_index] #block ที่ตรวจสอบ

if block["previous_hash"] !=self.hash(previous_block):
return False

previous_nonce = previous_block["nonce"] # nonce block ก่อนหน้า
nonce = block["nonce"] # nonce ของ block ที่ตรวจสอบ
hashoperation = hashlib.sha256(str(nonce**2 - previous_nonce**2).encode()).hexdigest() #5

if hashoperation[:4] != "0000":
return False
previous_block=block
block_index+=1
return True

#web server
app = Flask(__name__)
#ใช้งาน Blockchain
blockchain = Blockchain()

#routing
@app.route('/')
def hello():
return "<h1>Hello Blockchain</h1>"

@app.route('/get_chain',methods=["GET"])
def get_chain():
response={
"chain":blockchain.chain,
"length":len(blockchain.chain)
}
return jsonify(response),200

@app.route('/mining',methods=["GET"])
def mining_block():
amount = 1000000 #จำนวนเงินในการทำธุรกรรม
blockchain.transaction = blockchain.transaction+amount
#pow
previous_block = blockchain.get_previous_block()
previous_nonce = previous_block["nonce"]
#nonce
nonce = blockchain.proof_of_work(previous_nonce)
#hash block ก่อนหน้า
previous_hash = blockchain.hash(previous_block)
#update block ใหม่
block=blockchain.create_block(nonce,previous_hash)
response={
"message":"Mining Block เรียบร้อย",
"index":block["index"],
"timestamp":block["timestamp"],
"data":block["data"],
"nonce":block["nonce"],
"previous_hash":block["previous_hash"]
}
return jsonify(response),200

@app.route('/is_valid',methods=["GET"])
def is_valid():
is_valid = blockchain.is_chain_valid(blockchain.chain)
if is_valid:
response={"message":"Blockchain Is Valid"}
else :
response={"message":"Have Problem , Blockchain Is Not Valid"}
return jsonify(response),200

#run server
if __name__ =="__main__":
app.run()

ช่องทางการสนับสนุน
🎓คอร์ส Blockchain & Smart Contract สำหรับผู้เริ่มต้น

🌎 ติดตามข่าวสารเพิ่มเติมได้ที่
Facebook | YouTube | TikTok

--

--

KongRuksiam Studio
KongRuksiam Studio

Written by KongRuksiam Studio

เรียนรู้การเขียนโปรแกรมนอกห้องเรียน

No responses yet