8 เกี่ยวกับธุรกรรม

แปลโดย : Claude 3 Opus (Pro)

8

เกี่ยวกับธุรกรรม

โพสต์นี้ครอบคลุมหลายคำถามและคำตอบ โดย Hal Finney ผู้รับธุรกรรมบิทคอยน์คนแรก เป็นผู้ตั้งคำถาม

ในส่วนแรก ซาโตชิอธิบายว่าเหมืองจะเก็บธุรกรรมไว้จนกว่าจะรวมเป็นบล็อกได้อย่างไร

ในส่วนที่สอง เขาอธิบายว่าการใช้จ่ายซ้ำซ้อน (double spending) ไม่สามารถเกิดขึ้นบนบล็อกเชนเฉพาะได้อย่างไร และเหตุใดจึงมีบล็อกเชนเดียวเท่านั้นที่จะเป็นฉันทามติ หากมีเหมืองสองรายที่ขุดบล็อกพร้อมกัน ยังครอบคลุมด้วยว่า ผู้รับจะต้องเก็บธุรกรรมไว้หนึ่งชั่วโมง จนกว่ามันจะได้รับการยืนยันอย่างเป็นทางการในบล็อกเชน ซาโตชิกล่าวว่า 6 บล็อก (10 นาทีต่อบล็อก คูณ 6 บล็อก เท่ากับ 1 ชั่วโมง) เป็นเวลาที่เหมาะสมให้ธุรกรรมได้รับการยืนยัน และกลายเป็นส่วนหนึ่งของบล็อกเชนตลอดไป

สำหรับคำถามที่สาม เขาอธิบายว่าผู้โจมตีจะต้องทำอย่างไร เพื่อ "แก้ไขประวัติศาสตร์" นั่นคือการสร้างและเปลี่ยนแปลงบล็อกเชนใหม่ การจะเพิ่มหรือลบธุรกรรมในบล็อกที่ผ่านมา ต้องเขียนใหม่ให้เร็วกว่าเหมืองทั้งหมดบนเครือข่ายที่ยังทำงานบนบล็อกเชนเดิมอยู่ จงจำไว้จากการอภิปรายเรื่องบล็อกกำพร้าว่า บล็อกเชนที่ยาวที่สุดคือสิ่งที่เครือข่ายใช้ ซาโตชิกล่าวว่า: พลังการโหวต proof-of-work ของ CPU จะต้องมีคำตัดสินสุดท้าย วิธีเดียวที่ทุกคนจะอยู่ในหน้าเดียวกันได้คือ เชื่อว่าเชนที่ยาวที่สุดเป็นเชนที่ถูกต้องเสมอ ไม่ว่าอะไรก็ตาม

คำถามที่สี่เกี่ยวข้องกับการตรวจสอบยืนยันธุรกรรมการโอนเงินของผู้รับ

คำถามที่ห้าเกี่ยวกับบทบาทของโหนด (เหมือง) ในระบบ เมื่อเหมืองหนึ่งค้นพบ proof-of-work (แฮชที่มีจำนวนเลข 0 นำหน้าเหมาะสม) มันจะกระจายบล็อกที่มันเพิ่ง "ขุด" ออกไป ซึ่งบล็อกนั้นจะประกอบด้วยธุรกรรมหลายรายการ เหมืองแต่ละรายบนเครือข่ายที่ได้รับบล็อกนี้ จะต้องตรวจสอบความถูกต้องของแต่ละธุรกรรมในบล็อกนั้น

สุดท้าย ซาโตชิรายงานว่าเขาเขียนโค้ดก่อนที่จะเขียนเอกสารไวท์เปเปอร์ประกาศเปิดตัว Bitcoin เพื่อพิสูจน์ต่อตัวเองว่าได้แก้ปัญหาทุกอย่างแล้ว

Re: บทความเกี่ยวกับ Bitcoin P2P e-cash

ซาโตชิ นาคาโมโต อา., 09 พ.ย. 2008 11:13:340800

Hal Finney เขียนว่า:

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

ใช่ โหนดจะเก็บธุรกรรมไว้ในเซตที่กำลังทำอยู่ จนกว่ามันจะเข้าไปอยู่ในบล็อก ถ้าธุรกรรมไปถึงโหนดได้ 90% ก็หมายความว่า ในแต่ละครั้งที่พบบล็อกใหม่ ธุรกรรมนั้นมีโอกาส 90% ที่จะอยู่ในบล็อก

หรือยกตัวอย่างเช่น จะเป็นอย่างไร ถ้าโหนดเก็บเชนสองเชนหรือมากกว่าไว้ ขณะที่รอดูว่าเชนไหนยาวที่สุด แล้วบล็อกในเชน A ก็มีการใช้เหรียญซ้ำ (double spend) ที่อยู่ในเชน B จะมีการตรวจสอบกรณีนี้ด้วยไหม? (อาจเกิดขึ้นได้ถ้ามีคนใช้เหรียญซ้ำ และมีโหนดคนละกลุ่มได้ยินเกี่ยวกับสองธุรกรรมที่ใช้เหรียญเดียวกัน)

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

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

พวกเขายังสามารถใช้เหรียญใหม่ได้ทันที แต่ควรรอก่อนที่จะดำเนินการ เช่น การจัดส่งสินค้า

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

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

สิ่งนี้แตะประเด็นสำคัญ แม้ว่าทุกคนที่อยู่ตรงนั้นอาจจะเห็นความไม่ซื่อสัตย์ที่กำลังเกิดขึ้น แต่ไม่มีทางที่จะใช้ประโยชน์จากข้อเท็จจริงนั้นได้

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

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

ผู้รับเพียงแค่ต้องตรวจสอบย้อนกลับไปในระดับความลึกที่เพียงพอซึ่งมักจะต้องย้อนกลับเพียง 2 ธุรกรรมเท่านั้น ธุรกรรมทั้งหมดก่อนหน้านั้นสามารถละทิ้งไปได้

โหนดบันทึกเวลา (timestamp nodes) ตรวจสอบธุรกรรมหรือไม่ เพื่อให้แน่ใจว่าธุรกรรมก่อนหน้านี้ของเหรียญอยู่ในห่วงโซ่ ซึ่งบังคับใช้กฎที่ว่าธุรกรรมทั้งหมดในห่วงโซ่นั้นแสดงถึงเหรียญที่ถูกต้อง

ใช่ครับ นั่นแหละ เมื่อโหนดได้รับบล็อก มันจะตรวจสอบลายเซ็นของทุกธุรกรรมในนั้นกับธุรกรรมก่อนหน้าในบล็อก บล็อกสามารถมีเฉพาะธุรกรรมที่ขึ้นอยู่กับธุรกรรมที่ถูกต้องในบล็อกก่อนหน้าหรือบล็อกเดียวกัน ธุรกรรม C สามารถขึ้นอยู่กับธุรกรรม B ในบล็อกเดียวกัน และ B ขึ้นอยู่กับธุรกรรม A ในบล็อกก่อนหน้า

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

ผมขอบคุณสำหรับคำถามของคุณ จริงๆ แล้วผมทำสิ่งนี้ในแบบย้อนกลับ ผมต้องเขียนโค้ดทั้งหมดก่อนที่จะสามารถโน้มน้าวตัวเองได้ว่าผมสามารถแก้ปัญหาทุกอย่างได้ จากนั้นผมก็เขียนบทความ ผมคิดว่าผมจะสามารถปล่อยโค้ดได้เร็วกว่าที่จะเขียนข้อกำหนดอย่างละเอียด คุณคิดถูกแล้วเกี่ยวกับข้อสันนิษฐานส่วนใหญ่ในส่วนที่คุณเติมช่องว่าง

ซาโตชิ นากาโมโต

The Cryptography Mailing List

Last updated