Weekly Meetup 21 July 2022 | 20.30 PM

Hashpire Meetup: Bitcoin Whitepaper

Meetup ในครั้งนี้จัดขึ้นในวันพฤหัสบดีที่ 14 กรกฏาคม 2565 เวลา 20.30 น.

โดยเนื้อหาหลักจะเป็นเรื่องเกี่ยวกับ Bitcoin Whitepaper หากท่านใดสนใจเข้าร่วม Meetup ในครั้งนี้ กรุณาอ่าน Bitcoin Whitepaper ให้เรียบร้อยเพื่อประโยชน์สูงสุดของผู้เข้าร่วม Meetup เอง และทางเราอยากให้ท่านเขียนคอมเมนต์สรุปความรู้ที่ท่านได้อ่านจาก Bitcoin Whitepaper ลงด้านล่างโพสต์นี้

และหากท่านใดมีคำถามหรือข้อสงสัยเกี่ยวกับรายละเอียดเนื้อหาภายใน Bitcoin Whitepaper ก็สามารถคอมเมนต์ทิ้งไว้ด้านล่างโพสต์นี้ได้เช่นกัน โดยทาง Speaker จะพยายามตอบคำถามทุกข้อสงสัยของท่านอย่างดีที่สุด :tada: :tada: :tada:

ปล. ทาง Speaker อาจเลือกตอบเฉพาะคอมเมนต์ที่ถูกเขียนก่อนเวลาเริ่ม Meetup จึงอยากให้ทุกท่านคอมเมนต์ก่อนวันพฤหัสบดีที่ 14 กรกฏาคม เวลา 20.30 น.

Intro

  • แก้ไขปัญหา Double spending ด้วยการบันทึกเวลาที่ทำธุรกรรมแล้วเข้า Hash ธุรกรรมนั้น และนำไปต่อเข้ากับ Hash chain อื่นๆ
    โดยการบันทึกธุรกรรมเหล่านี้ได้จะต้องผ่านการ Proof-of-work เท่านั้น
  • วิธีการสื่อสารภายในเครือข่ายจะเป็นแบบ best effort โดยแต่ละ Node สามารถออกจากเครือข่าย และกลับเข้ามาเมื่อไรก็ได้
    เพราะว่าห่วงโซ่ที่ยาวที่สุดจะคอยบอกเสมอว่าเกิดอะไรขึ้นบ้างในช่วงที่ Node เหล่านั้นหายไป

ธุรกรรม (Transactions)

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

เวลาที่บันทึก (Timestamp Server)

  • timestamp server คือข้อมูลที่แสดงถึงเวลาในการทำธุรกรรมที่อยู่ในรูปแบบ Hash ซึ่งในการที่จะได้เลข Hash นี้
    timestamp แต่ละอันจะต้องมี timestamp อันก่อนหน้าเสมอ

Proof-of-Work

  • Proof of work คือการประมวลผลโดยใช้ CPU ถูกนำมาใช้ในส่วนของการตรวจสอบค่าที่ถูก Hash เช่นอัลกอริทึ่ม SHA-256
    โดยเบื้องหลังการสร้างระบบ Proof of work นั้นเป็นการคำนวณค่า Nouce

Network

  • ระบบ Network ของ Bitcoin มีขั้นตอนการทำงานดังนี้
  1. เมื่อธุรกรรมเกิดขึ้นจะถูกกระจายไปยังทุกๆ Node ในเครือข่าย
  2. แต่ละ Node จะนำธุรกรรม เหล่านีลงไปเก็บใน Block
  3. แต่ละโหนดจะประมวลผลด้วย Proof of work เพื่อหาคำตอบของค่าใน Difficult ใน Block
  4. เมื่อ Node สามารถหาคำตอบด้วย Proof of work ได้แล้ว Node จะกระจาย Block ที่ตนเองประมวลผลไปยังทุกๆ Node
  5. Node ที่เหลือจะยอบรับใน Block ที่ส่งมาถ้าทุกธุรกรรมใน Block นั้นถูกตรวจสอบแล้วว่าไม่เคยถูกใช้มาก่อน (Double spending)
  6. Node ที่ยอมรับ Block ที่ส่งมาจะสร้าง Block นั้นลงบนห่วงโซ่ของตัวเอง โดยใช้เลข Hash ของ Block ที่ส่งมาใช้เป็นเลข previous hash
  • Node ในระบบนั้นจะเชื่อว่า hash chain ที่ยาวที่สุดจะเป็นสายโซ่ที่ถูกต้องเสมอและจะสร้าง Block ถัดไปๆจาก hash chain นั้นๆ
  • ธุรกรรมเหล่านั้นไม่จำเป็นต้องกระจายไปถึง Node ทุก Node ตราบใดที่มันยังถูกส่งไปยัง Node ส่วนใหญ่
    ถ้ามี Block ใดที่ Node ได้รับแล้วมีการส่งมาซ้ำ Node ก็จะปฎิเสธ Block นั้นๆ แต่ถ้ามีกรณีที่ Node ไม่ได้รับ Block ที่ส่งมา
    Node นั้นจะขอ Block ที่ไม่ได้รับมาจาก Node อื่นๆ ในตอนที่ได้รับ Block ถัดไป เพราะเมื่อ Node นั้นได้ Block ใหม่มา Node นั้นจะรู้ว่ามี block ที่หายไป

Incentive (แรงจูงใจ, รางวัล)

  • Worker จะได้ค่าตอบแทนที่มาจาก 2 ส่วนคือ
    1.ขุดเจอเหรียญเองในระบบ
    2.ค่าธรรมเนียมการทำธุรกรรม

คำถาม

  • ไม่เข้าใจระบบ Proof of work ว่าการคำนวณค่า Nouce คืออะไร ?
  • ถ้าเหรียญในระบบถูกขุดออกมาทั้งหมดแล้ว Worker จะได้ค่าตอบแทนจากค่าธรรมเนียมการทำธุรรกรรมเพียงช่องทางเดียว ?

Transaction without 3rd party

  • Each owner transfer coin by signing the hash to the previous transaction and the public key of the next owner.

  • The main problem is Payee can’t verify the ”Previous Transaction” / the payee cannot make sure that the hash they got is the earliest one and that one of the owners did not double-spend coin.

  • According to the BTC concept - the earliest transaction is the one that counts. But which one is the earliest?

  • So, the mint-based model (3rd party) is formed. Its function is to make aware of all of the transactions and decides which arrived first.

  • To perform this without a trusted 3rd party = transaction must be publicly announced.

  • Problem: The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received.


Timestamp Server (The solution purpose for the above problem)

  • Timestamp proves that

    • Data must exist at the time
    • In chronological order to get into the hash
  • Each timestamp includes the previous timestamp (The one before it)/ forming a chain.


Proof-of-Work

  • // todo

Network (Step to run the network)

  • New transaction form

  • Then, broadcast transactions to all nodes (Transaction broadcasts do not have to reach all nodes, just broadcast until the transaction gets into a block)

  • Each node collect new transaction to its block

  • Node works on finding the difficult POW to its block — Q: Why difficult one?

  • When the node finds POW, then broadcast the block to all nodes.

  • Nodes will accept the block when the transaction is valid and not already spent — Q: What is meant by not already spent?

  • Nodes express their acceptance of the block by working on creating the next block in the chain.

  • Node Function = Collect new transaction + work on finding the difficult POW


Incentive

  • Q: What is meant by this "*the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block.*" → Distribute coin into circulation.

  • Incentives can be funded in 2 ways

      1. Block rewards
      1. Transaction fees
  • Q: What is meant by "*If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction.*"

  • Incentives help encourage nodes to stay honest

  • If the attacker has power over all the honest nodes // (51% attack) the attacker can choose btw

    • Using it to defraud people - steal their payment
    • Or use it to generate a new coin → Q: How?

Reclaiming Disk Space

  • Reclaiming disk space by discarding the old transaction.

  • To facilitate this without breaking the block’s hash → hash transaction in a Merkle Tree (by keeping only the root in the block hash)

  • Old blocks can be combined and cut off twigs of the tree and keep only the big branches.


Simplified Payment Verification

  • It is possible to verify payment without running a full network node. By keeping a copy of the block headers of the longest POW

  • BUT can’t track back the transaction. Can only link to the chain, and see that the network node has accepted by further confirming the network.


Combining and Splitting Value

  • It would be massively if we make a separate transaction for every cent in a transfer. So, allowing “Split and Combined” transactions helps contain multiple input and output. Q: What is meant by multiple input and output?

  • No need to extract a complete standalone copy of the transaction’s history.


Privacy

  • The traditional banking model builds privacy by limiting access to information which controls by third parties.

  • Publishing all transactions is the key to cutting off the third parties BUT this makes transactions not private.

  • So, keeping public keys anonymous can keep all transactions private.

  • Q: Need an explanation for the diagram.

  • As an additional firewall, a new key pair should be used for each transaction to keep them from being linked to a common owner.

    • We should not always use the same pub key because people can really trace back and know who you are.

คำถาม 1 : ถ้าใช้ timestamp ในการแก้ปัญหา เรื่อง Transactions ว่าอันไหนเกิดขึ้นก่อนหรือเกิดขึ้นที่หลัง แล้วมีเวลาบันทึกไว้ แบบนี้ time zone ของแต่ละประเทศที่ไม่ตรงกันจะมีผลไหม ?

คำถาม 2 : timestamp สร้าง Proof of work โดยเพิ่มจำนวน Nonce ใน Block หมายถึงเพิ่มอะไร คำนวณจากอะไร

คำถาม 3 : วิธีแบบ fanout คือการรวม Transactions หลาย ๆ อัน แล้วค่อยส่งออกไปทีเดียว ?

สรุปประเดนที่ได้จาก Meetup เมื่อวาน

  • Bitcoin เกิดจากความต้องการสร้างระบบการโอนเงินแบบไร้ตัวกลางแบบธนาคาร
  • แต่ปัญหาหลักๆ ของการทำระบบโอนเงินแบบไร้ตัวกลางเนี่ยมันคือเรื่องการใช้เงินซ้ำ (Double spending)
  • จึงเริ่มจากค่อยๆ แก้ปัญหาไปทีละเรื่องเริ่มจาก Transaction ก่อน โดย transaction นั้นจะใช้ hash ของ transaction ก่อนหน้ามาเป็น input เพื่อสร้าง signature ของ transaction ตัวเองต่อไปเรื่อยๆ ซึ่งจะช่วยให้ผู้รับเงินตรวจสอบจากลายเซ็นได้ว่าเงินถูกสั่งโอนมาให้เราจริงๆ นะ เพราะส่วนประกอบของลายเซ็นจะต้องมี Public key ของผู้รับเงินเป็นส่วนประกอบด้วย
  • มันก็ดูดีนะ แต่มันก็ไม่การันตีว่าจะเกิด Double spending ไม่ได้นิ เพราะการแค่รู้ว่าเราเป็นผู้รับเงินแล้วแน่ๆ ไม่ได้ยืนยันว่าธุรกรรมของเราจะถูก reject ด้วยการทำ Double spending
  • ก็เลยงอกวิธีแก้ไขปัญหาต่อมาเป็น Timestamp server ซึ่งตรงนี้สร้างความสับสนให้คนอ่านมากอาจจะคิดว่าเป็นการบันทึกเวลาการทำธุรกรรมนั้นๆ เป็นเวลาของโลก แต่จริงๆ แล้วไม่ใช่แบบนั้น มันเป็นการเก็บว่า Block ไหนทำงานก่อน Block ไหนต่างหาก ซึ่งวิธีเก็บก็แสนจะง่ายดายคือการผลรวมของ Hash ก่อนหน้ามารวมกับ Hash ของ Block ปัจจุบันเพื่อให้ได้ผลรวมของ Hash ล่าสุด ทำแบบนี้ต่อไปเรื่อย hash(n + hash(n-1 + hash(n-2…)))
  • ท่ีนี้แหละเราสามารถรู้ได้แน่ๆ แล้วว่า block ไหน มาก่อนมาหลังแน่ๆ แต่การรู้ว่าอันไหนมาก่อนมาหลังก็ไม่ได้การันตีว่าธุรกรรมของเราจะไม่ถูก reject จาก Double spending อยู่ดี เพราะถ้าหากคนโอนเงินให้เราเจตนาจะโกงโดยการเร่งทำให้อีก Chain มีขนาดยาวกว่าเพื่อแก้ไขธุรกรรม เราอาจจะถูกโกงได้อยู่ดี
  • มันก็เลยเกิดกระบวนการแก้ไขต่อมาคือ Proof-of-Work ว่าง่ายๆ คือหางานให้ทำก่อนที่จะสร้าง Block ขึ้นมานั่นเอง เจตนาคือเพื่อเพิ่มตัวหน่วงเวลาในการสร้าง Block และเพื่อการใช้ทรัพยากรในการสร้าง Block ด้วย
  • เมื่อมี Proof-of-Work เพิ่มเข้ามาผู้โจมตีจะต้องใช้ทรัพยากร CPU และไฟฟ้าแลกกับการโกง ซึ่งหมายถึงว่าการที่จะสร้าง Chain ฝ่ายโกง ให้ยาวกว่า Chain ฝ่ายดีนั้น จะต้องมีค่าใช้จ่าย เรียกได้ว่าเป็นการสกัดขาโจรแบบสุดๆ
  • ต่อมาคือเรื่อง Network ก็ถูกสร้าง flow มาให้ยอมรับ Chain ที่ยาวที่สุดเท่านั้นไปให้สอดคล้องกับขั้นตอนที่กล่าวถึงข้างบน
  • เรื่องสุดท้ายที่จะขอเล่าคือเรื่อง Incentive ซึ่งมันคือการแก้ไขปัญหาที่สเตปนึงของการทำ Double spending มันไม่ใช่วิธีการแก้ไขแบบตรงๆ แต่มันคือการแก้แบบอ้อมๆ โดยระบบจะมอบ BTC ให้กับคนที่ทำ Proof-of-Work ดังนั้นผู้โจมตีระบบคงต้องนั่งคิดแล้วคิดอีกแล้วแหละว่าจะเอาแรงขุดมหาศาลนั้นมาโกง หรือเอามาตรวจสอบธุรกรรมดีกว่าเผลอๆ ได้ผลตอบแทนมากกว่าเสียอีก :slight_smile: