Bitcoin ตามที่เข้าใจ

Sanparith Marukatat
3 min readFeb 12, 2016

--

ปัญหาของระบบธุรกรรม online แบบปกติตามบทความตั้งต้นของ Satoshi คือ

  1. ต้องเชื่อในตัวกลางที่จัดการ (ธนาคาร, paypal, …)
  2. ธุรกรรมนั้นย้อนกลับได้ (reversible) เผื่อกรณีที่มีการโกงโดยการนำหมายเลขบัตรเครดิตไปใช้ เราสามารถแจ้งกับทางธนาคารให้ยกเลิกได้ เป็นต้น
  3. เพื่อลดปัญหาการปลอมแปลงบางครั้งผู้ใช้งานระบบจำเป็นต้องเปิดเผยข้อมูลส่วนตัว เช่น สำหรับระบุตัวตนเวลาแจ้งเรื่องบัตรเครดิต

Bitcoin เป็น digital currency ถูกเสนอเพื่อแก้ปัญหาเหล่านี้ หลักการคร่าวๆ คือ

  1. ใช้ network ของคอมพิวเตอร์หลายตัว โดยแต่ละตัวทำการจดบันทึก transactions เหมือนๆ กัน
  2. ให้การจดแต่ละครั้งอิงอยู่บนข้อมูลก่อนหน้านี้
  3. ใช้ระบบ private key/public key ในการระบุตัวตนของเจ้าของเงิน

แต่ทั้งนี้การใช้งาน bitcoin นั้นไม่ซับซ้อนแต่อย่างใด เช่นสมมติว่า นาย A ต้องการซื้อสินค้าราคา 3 BTC จาก นาย B สิ่งที่เขาต้องทำคือขอ payment address จาก นาย B เช่นในรูปของ QR code จากนั้นก็นำเข้าระบบจ่ายเงิน ซึ่งจะออกคำสั่งจ่ายเป็น “transaction” ใหม่เข้าไปใน bitcoin network เพื่อทำการตรวจสอบ ซึ่ง นาย B จะได้รับข้อความรอจ่าย จากนั้นประมาณ 10 นาที เมื่อการตรวจสอบเสร็จสิ้น สิทธิในเงิน 3 BTC ของ นาย A นั้นก็จะถูกโอนไปให้ นาย B

กลไกหลังบ้าน

Transaction

ในการสั่งจ่ายประกอบด้วย

  1. id ขอPayment address ของผู้รับ
  2. Signature ของเจ้าของเงิน
  3. จำนวนเงินสั่งจ่าย และจำนวนเงินเรียกเก็บปลายทาง

Confirmation

  • Network ของ bitcoin นั้นประกอบด้วย “miners”
  • Miner ต่างๆ ในระบบจะทำการจัด unconfirm transaction ต่างๆ ใน network ร่วมกับข้อมูลสุ่มที่เรียกว่า “nonce” เข้าเป็น “ก้อน” ที่เรียกว่า “merkle root” (หรือบางทีก็เรียกสั้นๆ ว่า block) และทำการตรวจ validity ของก้อนใหม่นี้ (เราจะดูรายละเอียดในส่วน Miner) เมื่อ miner สามารถสร้างก้อนที่ valid ได้ก็จะทำการเพิ่มข้อมูล (header, timestamp, hash, …) เข้าเป็น block ใหม่ และทำการ submit block ใหม่นี้เข้าสู่ bitcoin network หากก้อนใหม่นี้ไม่ valid miner ก็จะทำการสุ่ม nonce ใหม่และตรวจสอบ validity ใหม่ไปเรื่อยๆ (การค้นหา nonce ที่เหมาะสมนี้เองที่ถูกนำไปเทียบกับการทำเหมือง)
  • Miner ในระบบเมื่อได้ block ใหม่จะตรวจสอบ block ว่ายัง valid หรือไม่ หากยัง valid อยู่ก็จะ apply transactions ในนั้นเข้าในฐานข้อมูล local ของตน

Blockchain

ใน block หนึ่งๆ นั้นประกอบด้วย

  • Timestamp
  • Hash ของ block ก่อนหน้านี้
  • Merkle root ของ transactions ของ block นี้
  • Target
  • Hash ของ block นี้

โดย block ทั้งหมดของระบบนั้นเกิดมาจาก “genesis block” อันเดียวกัน และสร้างต่อกันมาเรื่อยๆ เราจึงเรียกมันว่า blockchain

การเก็บข้อมูล transactions ในรูป blockchain นี้เองทำให้หากมีคนต้องการโกง เช่นเปลี่ยนชื่อผู้รับของ transaction หนึ่งใน block b เป็นตนเอง นั้นจำต้องตามแก้ block อื่นๆ ที่ derive ต่อจาก block b จนหมด และแก้บน miner ทุกรายด้วย ความยากนี้เองที่ช่วย “ประกัน” non reversibility ของระบบจ่ายเงินนี้

Satoshi คาดว่าหากมีจำนวนผู้ใช้งานระบบที่ซื่อสัตย์มากพอ ระบบจะยังอยู่ได้วยตัวเอง และถึงจะมีกลุ่มคนที่มีความสามารถในการคำนวณสูงการจะแก้ blockchain ก็ยังไม่ง่าย สู้นำพลังในส่วนนี้ไปช่วยทำเหมืองจะได้ค่าตอบแทนที่ดีกว่า

ในบางครั้ง miner อาจได้รับ block มากกว่า 1 ที่มี transactions ซ้ำกัน ในกรณีนี้ miner จะเลือก apply block ที่มี timestamp เก่าก่อน แต่ถ้า timestamp ทั้งคู่เท่าๆ กันเราจะเลือก block ที่ถูกใช้งานต่อยาวกว่า (chain ยาวสุดที่เคยมีปัญหามี 53 block ด้วยกัน)

Miner

Miner หนึ่งๆ จะสร้าง merkle root ขึ้นจาก

  1. hash ของ block ก่อนหน้า
  2. รายการ unconfirmed transactions ในระบบ ที่ถูกนำมาตรวจสอบความถูกต้องก่อน เช่น นาย A มีเงิน 3 BTC ที่เขาสั่งจ่ายจริง
  3. Transaction พิเศษที่สั่งจ่ายให้กับตัวเอง (ตอนนี้ 25 BTC) ถือเป็นค่าตอบแทนในการทำเหมือง และเป็นการสร้างเงินใหม่เข้าสู่ระบบ

Miner จะนำข้อมูลเหล่านี้มารวมกับตัวเลขที่เรียกว่า nonce และนำไปเข้ารหัส SHA256 เพื่อให้ได้ตัวเลข 256-bit จากนั้นจึงนำไปเทียบกับค่า Target ซึ่งเป็นค่ากลางสำหรับทุกๆ miner หากค่าใหม่นั้นมีค่าน้อยกว่า Target ก็จะถือว่า setting นี้ valid และจะนำไปสร้าง block เพื่อนำเข้าสู่ระบบต่อไป

ค่า hash และค่า Target นั้นอยู่ในรูปของตัวเลขที่เริ่มด้วย 00… วิธีง่ายๆ ในการตรวจสอบคือดูว่าค่า hash ใหม่นั้นมีจำนวน 0 ที่นำมากกว่า Target หรอไม่ ถ้ามากกว่าก็ถือว่า valid

ค่า Target นี้จะถูกปรับทุก 2016 block โดย setting ปัจจุบันนั้นจะทำให้เราสามารถสร้าง block ใหม่ได้ในเวลา ~10 นาที

ค่าตอบแทนการสร้าง block ใหม่นั้นจะลดลงเรื่อยๆ ทุกๆ 4 ปี ทำให้จำนวน bitcoin รวมของระบบอยู่ที่ประมาณ 21 ล้าน BTC ควรทราบว่า bitcoin ยังมีหน่วยย่อยอีกเป็น millibitcoin (mBTC) หรือ microbitcoin (uBTC) หรือ satoshi (10^-8 bitcoin) ดังนั้นค่าตอบแทนนั้นจะยังมีได้เรื่อยๆ

ค่า nonce นั้นเมื่อนำมารวมและผ่าน SHA256 แล้วจะเปลี่ยนในรูปแบบที่ทำนายไม่ได้ ดังนั้นในขั้นตอนการทำเหมืองเราจึงเริ่มจาก nonce=0,1,2,… ไปเรื่อยๆ

Fee

ใน transaction ปกติของระบบนั้นจำนวนเงินสั่งจ่ายจะเท่ากับจำนวนเงินเรียกเก็บปลายทาง ในกรณีที่เงินสั่งจ่ายมากกว่าเราจะถือว่าส่วนเกินนั้นเป็นค่าธรรมเนียม (fee) ที่ยกให้กับ miner ที่จัดการ transaction นั้น

ค่าธรรมเนียมนี้ถือเป็นแรงจูงใจให้กับ miner ในการจัดการ unconfirmed transactions ต่างๆ นอกจากนี้สำหรับ transaction ที่ประกอบด้วย bitcoin จาก address จำนวนมากก็มีค่าธรรมเนียมเช่นกัน โดยค่าธรรมเนียมนี้ยังอาจมีการปรับเพิ่ม/ลด ขึ้นกับจำนวน unconfirmed transactions ในระบบได้อีก

Drama bitcoin

ขนาดของ block นั้นถูกจำกัดไว้ที่ 1MB โดยพื้นที่จัดเก็บ transactions ต่างๆ จะอยู่ที่ ~700KB โดยปกติตัว software มีการกำหนดจำนวน transactions ต่ำสุดอยู่

ปัญหาเกิดขึ้นในกรณีที่มีผู้ใช้งานระบบจำนวนมาก เช่นช่วงเทศกาลต่างๆ นอกจากนี้ยังมีคนคาดว่าหนึ่งในผลการ block Internet ของจีน ทำให้เกิด block ที่มีจำนวน transactions น้อยมากๆ หรือไม่มีเลย (อาจจะพยายามโกง) ทำให้ระบบโดยรวมไม่สามารถสร้าง block ใหม่ได้ทันใน 10 นาที ดังนั้นเวลาในการรอ confirm transactions ต่างก็ต้องถูกยืดไปด้วย โดยกำหนดเวลาไม่ได้

ปัญหานี้ทำให้เกิดการถกเถียงกันในกลุ่ม core developers ของ bitcoin และนำไปสู่การแยก project ด้วย โดยกลุ่มที่แยกเห็นว่าควรเพิ่มขนาด block อีกส่วนไม่ยอมเพิ่ม แต่คิดว่าสามารถใช้กลไกค่าธรรมเนียมในการจัดการได้ ทั้งนี้ปัญหาที่ตามมาคือค่าใช้จ่ายที่เพิ่มขึ้นในฝั่งผู้ซื้อ “ที่ไม่กำหนดแน่ชัดในตอนสั่งจ่าย” หนึ่งในแนวทางแก้ปัญหานี้คือการอนุญาติให้มีการ “แก้” transactions ได้บางส่วน แต่นั่นก็จะขัดกับหลัก non reversibility ตั้งต้นของ bitcoin แนวทางแก้ปัญหานี้ยังไม่ชัดเจนแต่อย่างไร นอกจากนี้ยังมีปัญหาเรื่องการเมืองในกลุ่มนักพัฒนาอีกด้วย

Blockchain และงานอื่น

หนึ่งในเทคโนโลยีพื้นฐานของ bitcoin คือ blockchain กล่าวโดยย่อคือ network ในการเก็บข้อมูล โดยแต่ละ node จะมีฐานข้อมูลเหมือนๆ กัน และสร้างต่อจาก block เดียวกัน ทำให้เราสามารถตรวจสอบ validity ของ transaction ใดๆ ในระบบได้บนแต่ละ node โดยไม่ต้องอิงฐานข้อมูลกลาง นอกจากนี้ transaction ที่ถูก validate แล้วจะถือได้ว่าแก้ไม่ได้อีกแล้ว non reversible หรือ immutable แบบ string ใน Java ซึ่งผลของข้อจำกัดนี้ทำให้เราสามารถรับประกันความถูกต้องของข้อมูลได้ ซึ่งถือว่าสำคัญมากในงานกลุ่ม security เป็นต้น

คุณสมบัติของ blockchain นี้ตอบโจทย์ของ Internet of Things ได้พอดี นั่นคือหากเรามีจำนวน devices เพิ่มขึ้นเรื่อยๆ การจัดการผ่านส่วนกลางอาจทำได้ยากขึ้น ฐานข้อมูลแบบ distributed และทำงานร่วมกันได้อย่าง consistant แบบ blockchain นี้ทำให้การ scale up เพื่อเพิ่ม devices ต่างๆ ที่ทำงานร่วมกันในอนาคตนั้นดูจะเป็นไปได้ง่ายขึ้น

เร็วๆ นี้ IBM กับ Samsung ก็ร่วมมือกันพัฒนา ADEPT ที่ใช้ blockchain ในการจัดการ IoT devices

นอกจากนี้ตอนนี้ดูจะมี startups หลายอันที่เกิดขึ้นจากเทคโนโลยีนี้ ทั้งที่เกี่ยวและไม่เกี่ยวกับ bitcoin

อ้างอิง

--

--

No responses yet