比特币:一种点对点电子现金系统

โดย Satoshi Nakamoto · 2008

โหมดเดี่ยว PDF bitcoin.org

Abstract

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

Abstract

一种完全的点对点电子现金系统将允许在线支付从一方直接发送到另一方,而无需通过金融机构。数字签名提供了部分解决方案,但如果仍然需要一个可信赖的第三方来防止双重支付,那么其主要优势就会丧失。我们提出一种使用点对点网络来解决双重支付问题的方案。该网络通过将交易 hash 到一条基于 hash 的 proof-of-work 的持续增长的链中来为交易打上时间戳,形成一份不重做 proof-of-work 就无法更改的记录。最长的链不仅作为所见证事件序列的证明,而且证明它来自最大的 CPU 算力池。只要大多数 CPU 算力由不合谋攻击网络的节点控制,它们就会生成最长的链并超过攻击者。该网络本身只需要最小化的结构。消息以尽最大努力的方式广播,节点可以随时离开和重新加入网络,并接受最长的 proof-of-work 链作为其离开期间所发生事件的证明。

Introduction

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

สิ่งที่จำเป็นคือระบบการชำระเงินอิเล็กทรอนิกส์ที่อิงหลักฐานการเข้ารหัสแทนความไว้วางใจ ซึ่งอนุญาตให้สองฝ่ายที่เต็มใจทำธุรกรรมโดยตรงกับกันโดยไม่ต้องการบุคคลที่สามที่เชื่อถือได้ ธุรกรรมที่ไม่สามารถย้อนกลับได้ในทางคอมพิวเตอร์จะปกป้องผู้ขายจากการฉ้อโกง และกลไก escrow ตามปกติสามารถนำมาใช้ได้อย่างง่ายดายเพื่อปกป้องผู้ซื้อ ในบทความนี้ เราเสนอวิธีแก้ปัญหา double-spending โดยใช้เซิร์ฟเวอร์ประทับเวลาแบบกระจาย peer-to-peer เพื่อสร้างหลักฐานทางการคำนวณของลำดับเวลาของธุรกรรม ระบบจะปลอดภัยตราบใดที่ node ที่ซื่อสัตย์ร่วมกันควบคุมพลังงาน CPU มากกว่ากลุ่ม node ผู้โจมตีใดๆ ที่ร่วมมือกัน

Introduction

互联网上的商业活动已经几乎完全依赖金融机构作为可信赖的第三方来处理电子支付。虽然该系统对于大多数交易运行得足够好,但它仍然受制于基于信任模型的固有弱点。完全不可逆的交易实际上是不可能的,因为金融机构无法避免调解纠纷。调解成本增加了交易成本,限制了最小实际交易规模,并切断了小额临时交易的可能性,而且在无法为不可逆服务进行不可逆支付方面存在更广泛的成本。由于存在逆转的可能性,对信任的需求就会蔓延。商家必须对客户保持警惕,向他们索要比其他情况下更多的信息。一定比例的欺诈被认为是不可避免的。这些成本和支付的不确定性可以通过使用实物货币进行面对面交易来避免,但不存在一种无需可信赖方就能通过通信渠道进行支付的机制。

所需要的是一种基于密码学证明而非信任的电子支付系统,允许任何两个有意愿的当事方直接进行交易,而无需可信赖的第三方。在计算上不可行的逆转交易将保护卖家免受欺诈,而常规的托管机制可以很容易地实施以保护买家。在本文中,我们提出一种使用点对点分布式时间戳服务器来生成交易时间顺序的计算证明的双重支付问题解决方案。只要诚实节点共同控制的 CPU 算力超过任何合谋的攻击者节点群组,该系统就是安全的。

Transactions

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

Bitcoin transaction chain showing the signature-linked ownership transfer model

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

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

Transactions

我们将一枚电子货币定义为一条数字签名链。每个所有者通过对前一笔交易的 hash 和下一个所有者的公钥进行数字签名,并将这些附加到该货币的末尾,从而将货币转移给下一个所有者。收款人可以验证签名以验证所有权链。

Bitcoin transaction chain showing the signature-linked ownership transfer model

当然,问题在于收款人无法验证某个所有者是否对该货币进行了双重支付。一个常见的解决方案是引入一个可信赖的中央权威机构,即铸币厂,来检查每笔交易是否存在双重支付。每次交易后,该货币必须返回铸币厂以发行新的货币,并且只有直接从铸币厂发行的货币才被信任未被双重支付。这个方案的问题是,整个货币系统的命运取决于运营铸币厂的公司,每笔交易都必须经过他们,就像银行一样。

我们需要一种方式让收款人知道前任所有者没有签署任何更早的交易。就我们的目的而言,最早的交易是算数的那个,所以我们不关心后来的双重支付尝试。确认一笔交易不存在的唯一方法是了解所有交易。在基于铸币厂的模型中,铸币厂了解所有交易并决定哪个先到达。为了在没有可信赖方的情况下实现这一点,交易必须被公开宣布 [^1],并且我们需要一个系统让参与者就它们被接收的顺序的单一历史达成一致。收款人需要证明在每笔交易发生时,大多数节点都同意它是第一个被接收的。

Timestamp Server

วิธีแก้ปัญหาที่เราเสนอเริ่มต้นด้วยเซิร์ฟเวอร์ประทับเวลา เซิร์ฟเวอร์ประทับเวลาทำงานโดยการนำ hash ของบล็อกรายการที่จะถูกประทับเวลาและเผยแพร่ hash อย่างกว้างขวาง เช่น ในหนังสือพิมพ์หรือโพสต์ Usenet [^2] [^3] [^4] [^5] การประทับเวลาพิสูจน์ว่าข้อมูลต้องมีอยู่ในเวลานั้น อย่างเห็นได้ชัด เพื่อที่จะเข้าไปใน hash ได้ แต่ละการประทับเวลารวมการประทับเวลาก่อนหน้าไว้ใน hash ของมัน สร้างเป็นห่วงโซ่ โดยแต่ละการประทับเวลาเพิ่มเติมจะเสริมความแข็งแกร่งให้กับการประทับเวลาก่อนหน้า

Bitcoin timestamp server hash-chain diagram linking blocks and items

Timestamp Server

我们提出的解决方案从一个时间戳服务器开始。时间戳服务器通过对要加时间戳的一个数据区进行 hash 并广泛发布该 hash 来工作,例如在报纸或 Usenet 帖子中 [^2] [^3] [^4] [^5]。时间戳证明了数据在当时必然已经存在,显然,这是为了能够进入该 hash。每个时间戳在其 hash 中包含前一个时间戳,形成一条链,每个额外的时间戳都加强了之前的时间戳。

Bitcoin timestamp server hash-chain diagram linking blocks and items

Proof-of-Work

ในการนำเซิร์ฟเวอร์ประทับเวลาแบบกระจายมาใช้บนพื้นฐาน peer-to-peer เราจะต้องใช้ระบบ proof-of-work ที่คล้ายกับ Hashcash ของ Adam Back [^6] แทนที่จะใช้หนังสือพิมพ์หรือโพสต์ Usenet proof-of-work เกี่ยวข้องกับการสแกนหาค่าที่เมื่อถูก hash เช่น ด้วย SHA-256 แล้ว hash จะเริ่มต้นด้วยจำนวนบิตศูนย์ที่กำหนด งานเฉลี่ยที่ต้องการจะเพิ่มขึ้นแบบเลขยกกำลังตามจำนวนบิตศูนย์ที่ต้องการ และสามารถตรวจสอบได้โดยการรัน hash เพียงครั้งเดียว

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

Bitcoin proof-of-work block chain diagram with previous hash transaction set and nonce

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

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

Proof-of-Work

为了在点对点的基础上实现分布式时间戳服务器,我们需要使用类似于 Adam Back 的 Hashcash [^6] 的 proof-of-work 系统,而不是报纸或 Usenet 帖子。proof-of-work 涉及扫描一个值,使得对该值进行 hash(例如使用 SHA-256)时,hash 以一定数量的零位开头。所需的平均工作量随所需零位数呈指数增长,并且可以通过执行一次 hash 来验证。

对于我们的时间戳网络,我们通过在区中递增一个 nonce 来实现 proof-of-work,直到找到一个使区块的 hash 满足所需零位数的值。一旦 CPU 花费了足够的努力使其满足 proof-of-work,该区块就无法在不重做工作的情况下被更改。随着后续区块被链接在其后,更改该区块的工作将包括重做其后所有区块的工作。

Bitcoin proof-of-work block chain diagram with previous hash transaction set and nonce

proof-of-work 还解决了在多数决定中确定代表性的问题。如果多数决定是基于一个 IP 地址一票,那么任何能够分配大量 IP 的人都可以颠覆它。proof-of-work 本质上是一个 CPU 一票。多数决定由最长的链代表,因为它投入了最大的 proof-of-work 努力。如果大多数 CPU 算力由诚实节点控制,诚实链将增长最快并超过任何竞争链。要修改一个过去的区块,攻击者必须重做该区块及其后所有区块的 proof-of-work,然后追上并超过诚实节点的工作。我们将在后面展示,一个较慢的攻击者追上的概率随着后续区块的增加呈指数下降。

为了补偿不断提高的硬件速度和随时间变化的运行节点兴趣,proof-of-work 难度由一个移动平均值确定,目标是每小时平均产出一定数量的区块。如果它们生成得太快,难度就会增加。

Network

ขั้นตอนในการดำเนินเครือข่ายมีดังนี้:

  1. ธุรกรรมใหม่ถูกประกาศไปยัง node ทั้งหมด
  2. แต่ละ node รวบรวมธุรกรรมใหม่เข้าไปในบล็อก
  3. แต่ละ node ทำงานเพื่อหา proof-of-work ที่ยากสำหรับบล็อกของตน
  4. เมื่อ node หนึ่งพบ proof-of-work มันจะประกาศบล็อกไปยัง node ทั้งหมด
  5. Node ยอมรับบล็อกเฉพาะเมื่อธุรกรรมทั้งหมดในนั้นถูกต้องและยังไม่ถูกใช้จ่าย
  6. Node แสดงการยอมรับบล็อกโดยการทำงานสร้างบล็อกถัดไปในห่วงโซ่ โดยใช้ hash ของบล็อกที่ยอมรับเป็น hash ก่อนหน้า

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

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

Network

运行该网络的步骤如下:

  1. 交易被广播到所有节点
  2. 每个节点将新交易收集到一个区中。
  3. 每个节点为其区块寻找一个困难的 proof-of-work。
  4. 当一个节点找到一个 proof-of-work 时,它将该区块广播到所有节点。
  5. 节点只有在区块中所有交易都是有效的且未被花费过的情况下才接受该区块。
  6. 节点通过在链中创建下一个区块来表示对该区块的接受,使用被接受区块的 hash 作为前一个 hash。

节点始终将最长的链视为正确的链,并将继续在其上扩展。如果两个节点同时广播了下一个区块的不同版本,一些节点可能先接收到其中一个或另一个。在这种情况下,它们在先接收到的版本上工作,但保留另一个分支以防它变得更长。当下一个 proof-of-work 被找到且其中一个分支变得更长时,平局将被打破;在另一个分支上工作的节点将切换到更长的那个。

新交易广播不一定需要到达所有节点。只要它们到达足够多的节点,它们不久就会进入一个区块。区块广播也容忍丢失的消息。如果一个节点没有收到一个区块,它会在收到下一个区块并意识到它遗漏了一个时请求该区块。

Incentive

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

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

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

Incentive

按照惯例,区中的第一笔交易是一笔特殊交易,它创建一枚由区块创建者拥有的新货币。这为节点支持网络增加了激励,并提供了一种将货币最初分配到流通中的方式,因为没有中央权威机构来发行它们。稳定地增加固定数量的新货币类似于金矿矿工消耗资源将黄金加入流通。在我们的案例中,消耗的是 CPU 时间和电力。

激励也可以通过交易费来资助。如果一笔交易的输出值小于其输入值,差额就是交易费,它被加到包含该交易的区块的激励值中。一旦预定数量的货币进入流通,激励就可以完全过渡到交易费,并且完全没有通货膨胀

激励可能有助于鼓励节点保持诚实。如果一个贪婪的攻击者能够集结比所有诚实节点更多的 CPU 算力,他将不得不在使用它来通过偷回自己的付款来欺骗人们,或使用它来生成新货币之间做出选择。他应该发现按照规则行事更有利可图,因为这些规则使他获得比所有其他人加起来还多的新货币,而不是破坏系统和他自身财富的有效性。

Reclaiming Disk Space

เมื่อธุรกรรมล่าสุดในเหรียญถูกฝังอยู่ใต้บล็อกจำนวนมากเพียงพอ ธุรกรรมที่ถูกใช้จ่ายก่อนหน้านั้นสามารถถูกทิ้งเพื่อประหยัดพื้นที่ดิสก์ เพื่ออำนวยความสะดวกในเรื่องนี้โดยไม่ทำลาย hash ของบล็อก ธุรกรรมถูก hash ใน Merkle Tree [^7] [^2] [^5] โดยมีเฉพาะ root เท่านั้นที่ถูกรวมไว้ใน hash ของบล็อก บล็อกเก่าสามารถถูกบีบอัดโดยการตัดกิ่งของต้นไม้ออก hash ภายในไม่จำเป็นต้องถูกจัดเก็บ

Bitcoin Merkle Tree diagram showing transaction hashing and block pruning by stubbing off branches

ส่วนหัวบล็อกที่ไม่มีธุรกรรมจะมีขนาดประมาณ 80 ไบต์ หากเราสมมติว่าบล็อกถูกสร้างทุก 10 นาที 80 ไบต์ * 6 * 24 * 365 = 4.2MB ต่อปี ด้วยระบบคอมพิวเตอร์ที่มักจะขายพร้อม RAM 2GB ณ ปี 2008 และกฎของมัวร์ที่คาดการณ์การเติบโตปัจจุบันที่ 1.2GB ต่อปี การจัดเก็บไม่ควรเป็นปัญหาแม้ว่าส่วนหัวบล็อกจะต้องถูกเก็บไว้ในหน่วยความจำ

Reclaiming Disk Space

一旦一枚货币中的最新交易被埋在足够多的区之下,之前已花费的交易就可以被丢弃以节省磁盘空间。为了在不破坏区块 hash 的情况下实现这一点,交易被 hash 到一棵 Merkle Tree [^7] [^2] [^5] 中,只有根节点包含在区块的 hash 中。旧区块随后可以通过裁剪树的分支来压缩。内部 hash 不需要被存储

Bitcoin Merkle Tree diagram showing transaction hashing and block pruning by stubbing off branches

一个没有交易的区块头大约是 80 字节。如果我们假设区块每 10 分钟生成一次,80 字节 * 6 * 24 * 365 = 每年 4.2MB。截至 2008 年,计算机系统通常配备 2GB 的 RAM,而摩尔定律预测当前每年增长 1.2GB,即使区块头必须保存在内存中,存储也不应该成为问题。

Simplified Payment Verification

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

Bitcoin simplified payment verification showing the longest proof-of-work chain with Merkle branch linking to a transaction

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

Simplified Payment Verification

在不运行完整网络节点的情况下验证支付是可能的。用户只需要保留一份最长 proof-of-work 链的区块头副本,他可以通过查询网络节点直到确信自己拥有最长的链来获取它,并获取将交易链接到其被打上时间戳的区的 Merkle 分支。他无法自己检查交易,但通过将其链接到链中的某个位置,他可以看到网络节点已经接受了它,而在其后添加的区块进一步确认了网络已经接受了它。

Bitcoin simplified payment verification showing the longest proof-of-work chain with Merkle branch linking to a transaction

因此,只要诚实节点控制着网络,验证就是可靠的,但如果网络被攻击者制服则更加脆弱。虽然网络节点可以自己验证交易,但只要攻击者能够继续制服网络,简化方法就可能被攻击者伪造的交易所欺骗。一种防御策略是接受来自网络节点的警报,当它们检测到无效区块时,提示用户的软件下载完整区块和被警报的交易以确认不一致性。频繁接收支付的企业可能仍然希望运行自己的节点以获得更独立的安全性和更快的验证。

Combining and Splitting Value

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

Bitcoin transaction combining and splitting value with multiple inputs and outputs

ควรสังเกตว่า fan-out ที่ธุรกรรมขึ้นอยู่กับหลายธุรกรรม และธุรกรรมเหล่านั้นขึ้นอยู่กับอีกมากมาย ไม่ใช่ปัญหาที่นี่ ไม่จำเป็นต้องแยกสำเนาประวัติธุรกรรมที่สมบูรณ์แบบแยกต่างหาก

Combining and Splitting Value

虽然可以单独处理每枚货币,但为转账中的每一分钱都创建一笔单独的交易将是笨拙的。为了允许价值的拆分和合并,交易包含多个输入和输出。通常要么有一个来自较大前序交易的单一输入,要么有多个合并较小金额的输入,最多有两个输出:一个用于支付,另一个将找零(如果有的话)返回给发送者。

Bitcoin transaction combining and splitting value with multiple inputs and outputs

应该注意的是,扇出(即一笔交易依赖于多笔交易,而那些交易又依赖于更多的交易)在这里不是问题。从来不需要提取一笔交易的完整独立历史副本。

Privacy

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

Bitcoin privacy model comparison showing traditional model with trusted third party versus new model with anonymous public keys

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

Privacy

传统的银行模型通过限制相关方和可信赖第三方对信息的访问来实现一定程度的隐私。公开宣布所有交易的必要性排除了这种方法,但隐私仍然可以通过在另一个地方打断信息流来维持:保持公钥匿名。公众可以看到某人正在向其他人发送一笔金额,但没有将交易与任何人关联的信息。这类似于证券交易所发布的信息级别,个别交易的时间和规模,即"行情",是公开的,但不会透露当事方是谁。

Bitcoin privacy model comparison showing traditional model with trusted third party versus new model with anonymous public keys

作为额外的防火墙,每笔交易应使用一对新的密钥,以防止它们被关联到一个共同的所有者。对于多输入交易,某些关联仍然是不可避免的,因为它们必然揭示其输入属于同一所有者。风险在于,如果密钥的所有者被揭露,关联可能会揭示属于同一所有者的其他交易。

Calculations

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

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

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

p = ความน่าจะเป็นที่ node ที่ซื่อสัตย์จะพบบล็อกถัดไป
q = ความน่าจะเป็นที่ผู้โจมตีจะพบบล็อกถัดไป
q = ความน่าจะเป็นที่ผู้โจมตีจะไล่ทันจาก z บล็อกที่ตามหลัง
``````

\[
qz =
\begin{cases}
1 & \text{if } p \leq q \\
\left(\frac{q}{p}\right) z & \text{if } p > q
\end{cases}
\]

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

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

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

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

\[
\lambda = z\frac{q}{p}
\]

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

\[
\sum_{k=0}^{\infty} \frac{\lambda^k e^{-\lambda}}{k!} \cdot \left\{
\begin{array}{cl}
\left(\frac{q}{p}\right)^{(z-k)} & \text{if } k \leq z \\
1 & \text{if } k > z
\end{array}
\right.
\]

จัดเรียงใหม่เพื่อหลีกเลี่ยงการรวมหางอนันต์ของการแจกแจง...

\[
1 - \sum_{k=0}^{z} \frac{\lambda^k e^{-\lambda}}{k!} \left(1-\left(\frac{q}{p}\right)^{(z-k)}\right)
\]

แปลงเป็นโค้ด C...

```c
#include math.h

double AttackerSuccessProbability(double q, int z)
{
    double p = 1.0 - q;
    double lambda = z * (q / p);
    double sum = 1.0;
    int i, k;
    for (k = 0; k = z; k++)
    {
        double poisson = exp(-lambda);
        for (i = 1; i = k; i++)
            poisson *= lambda / i;
        sum -= poisson * (1 - pow(q / p, z - k));
    }
    return sum;
}

เมื่อรันผลลัพธ์บางส่วน เราจะเห็นว่าความน่าจะเป็นลดลงแบบเลขยกกำลังตาม z

q=0.1
z=0 P=1.0000000
z=1 P=0.2045873
z=2 P=0.0509779
z=3 P=0.0131722
z=4 P=0.0034552
z=5 P=0.0009137
z=6 P=0.0002428
z=7 P=0.0000647
z=8 P=0.0000173
z=9 P=0.0000046
z=10 P=0.0000012

q=0.3
z=0 P=1.0000000
z=5 P=0.1773523
z=10 P=0.0416605
z=15 P=0.0101008
z=20 P=0.0024804
z=25 P=0.0006132
z=30 P=0.0001522
z=35 P=0.0000379
z=40 P=0.0000095
z=45 P=0.0000024
z=50 P=0.0000006

แก้สมการสำหรับ P น้อยกว่า 0.1%...

P  0.001
q=0.10 z=5
q=0.15 z=8
q=0.20 z=11
q=0.25 z=15
q=0.30 z=24
q=0.35 z=41
q=0.40 z=89
q=0.45 z=340

Calculations

我们考虑一个攻击者试图比诚实链更快地生成替代链的场景。即使这一目标达成,也不会使系统面临任意更改的风险,例如凭空创造价值或夺取从不属于攻击者的资金。节点不会接受无效交易作为支付,诚实节点永远不会接受包含无效交易的区。攻击者只能尝试更改自己的一笔交易,以收回他最近花费的资金。

诚实链与攻击者链之间的竞赛可以被描述为一个二项随机游走。成功事件是诚实链被延长一个区块,使其领先优势增加 +1,失败事件是攻击者的链被延长一个区块,使差距缩小 -1。

攻击者从给定落后距离追上的概率类似于赌徒破产问题。假设一个拥有无限信用的赌徒从亏损开始,进行潜在的无限次尝试以达到盈亏平衡。我们可以计算他最终达到盈亏平衡的概率,即攻击者追上诚实链的概率,如下 [^8]:

p = probability an honest node finds the next block
q = probability the attacker finds the next block
q = probability the attacker will ever catch up from z blocks behind
``````

\[
qz =
\begin{cases}
1 & \text{if } p \leq q \\
\left(\frac{q}{p}\right) z & \text{if } p > q
\end{cases}
\]

假设 p  q,概率随着攻击者需要追赶的区块数量的增加而呈指数下降。如果他没有在早期幸运地向前冲刺,随着他进一步落后,他的机会变得微乎其微。

我们现在考虑新交易的接收者需要等待多长时间才能充分确定发送者无法更改交易。我们假设发送者是一个攻击者,他想让接收者相信他已经付款了一段时间,然后在一段时间后将其改为支付给自己。接收者在那时会收到警报,但发送者希望那时已经太晚了。

接收者生成一对新密钥,并在签名前不久将公钥提供给发送者。这防止了发送者通过持续在其上工作来提前准备一条区块链,直到他足够幸运地取得足够的领先,然后在那个时刻执行交易。一旦交易发送,不诚实的发送者开始秘密地在一条包含其交易替代版本的并行链上工作。

接收者等待交易被添加到一个区块中,并且在其后链接了 z 个区块。他不知道攻击者已经取得的确切进展,但假设诚实区块按照每个区块的平均预期时间产出,攻击者的潜在进展将是一个期望值为以下值的泊松分布:

\[
\lambda = z\frac{q}{p}
\]

为了获得攻击者现在仍然能够追上的概率,我们将他可能取得的每个进展量的泊松密度乘以他从该点追上的概率:

\[
\sum_{k=0}^{\infty} \frac{\lambda^k e^{-\lambda}}{k!} \cdot \left\{
\begin{array}{cl}
\left(\frac{q}{p}\right)^{(z-k)} & \text{if } k \leq z \\
1 & \text{if } k > z
\end{array}
\right.
\]

重新整理以避免对分布的无穷尾部求和......

\[
1 - \sum_{k=0}^{z} \frac{\lambda^k e^{-\lambda}}{k!} \left(1-\left(\frac{q}{p}\right)^{(z-k)}\right)
\]

转换为 C 代码......

```c
#include math.h

double AttackerSuccessProbability(double q, int z)
{
    double p = 1.0 - q;
    double lambda = z * (q / p);
    double sum = 1.0;
    int i, k;
    for (k = 0; k = z; k++)
    {
        double poisson = exp(-lambda);
        for (i = 1; i = k; i++)
            poisson *= lambda / i;
        sum -= poisson * (1 - pow(q / p, z - k));
    }
    return sum;
}

运行一些结果,我们可以看到概率随 z 呈指数下降。

q=0.1
z=0 P=1.0000000
z=1 P=0.2045873
z=2 P=0.0509779
z=3 P=0.0131722
z=4 P=0.0034552
z=5 P=0.0009137
z=6 P=0.0002428
z=7 P=0.0000647
z=8 P=0.0000173
z=9 P=0.0000046
z=10 P=0.0000012

q=0.3
z=0 P=1.0000000
z=5 P=0.1773523
z=10 P=0.0416605
z=15 P=0.0101008
z=20 P=0.0024804
z=25 P=0.0006132
z=30 P=0.0001522
z=35 P=0.0000379
z=40 P=0.0000095
z=45 P=0.0000024
z=50 P=0.0000006

求解 P 小于 0.1%......

P  0.001
q=0.10 z=5
q=0.15 z=8
q=0.20 z=11
q=0.25 z=15
q=0.30 z=24
q=0.35 z=41
q=0.40 z=89
q=0.45 z=340

Conclusion

เราได้เสนอระบบสำหรับธุรกรรมอิเล็กทรอนิกส์โดยไม่ต้องพึ่งพาความไว้วางใจ เราเริ่มต้นด้วยกรอบการทำงานปกติของเหรียญที่สร้างจากลายเซ็นดิจิทัล ซึ่งให้การควบคุมความเป็นเจ้าของที่แข็งแกร่ง แต่ไม่สมบูรณ์หากไม่มีวิธีป้องกัน double-spending เพื่อแก้ปัญหานี้ เราเสนอเครือข่าย peer-to-peer ที่ใช้ proof-of-work เพื่อบันทึกประวัติสาธารณะของธุรกรรม ซึ่งกลายเป็นสิ่งที่ไม่สามารถทำได้ในทางคำนวณสำหรับผู้โจมตีที่จะเปลี่ยนแปลงอย่างรวดเร็ว หาก node ที่ซื่อสัตย์ควบคุมพลังงาน CPU ส่วนใหญ่ เครือข่ายมีความแข็งแกร่งในความเรียบง่ายที่ไม่มีโครงสร้าง Node ทำงานพร้อมกันทั้งหมดโดยมีการประสานงานเพียงเล็กน้อย พวกเขาไม่จำเป็นต้องถูกระบุตัวตน เนื่องจากข้อความไม่ได้ถูกส่งไปยังสถานที่ใดสถานที่หนึ่งโดยเฉพาะ และเพียงแค่ต้องถูกส่งมอบบนพื้นฐานความพยายามอย่างดีที่สุด Node สามารถออกจากและกลับเข้าร่วมเครือข่ายได้ตามต้องการ โดยยอมรับห่วงโซ่ proof-of-work เป็นหลักฐานของสิ่งที่เกิดขึ้นขณะที่พวกเขาไม่อยู่ พวกเขาลงคะแนนด้วยพลังงาน CPU ของพวกเขา แสดงการยอมรับบล็อกที่ถูกต้องโดยการทำงานขยายมัน และปฏิเสธบล็อกที่ไม่ถูกต้องโดยปฏิเสธที่จะทำงานบนมัน กฎและแรงจูงใจที่จำเป็นใดๆ สามารถบังคับใช้ด้วยกลไกฉันทามตินี้

Conclusion

我们提出了一种不依赖信任的电子交易系统。我们从由数字签名构成的货币的通常框架开始,这提供了对所有权的强有力控制,但如果没有防止双重支付的方法则是不完整的。为了解决这个问题,我们提出了一种使用 proof-of-work 的点对点网络来记录交易的公共历史,如果诚实节点控制了大多数 CPU 算力,对攻击者来说更改记录在计算上很快就变得不可行。该网络在其非结构化的简单性中是健壮的。节点同时工作,几乎不需要协调。它们不需要被识别,因为消息不会被路由到任何特定的地方,只需要以尽最大努力的方式传递。节点可以随时离开和重新加入网络,接受 proof-of-work 链作为其离开期间所发生事件的证明。它们用自己的 CPU 算力投票,通过在有效区块上扩展来表示接受,通过拒绝在无效区块上工作来表示拒绝。任何需要的规则和激励都可以通过这种共识机制来执行。

References


  1. W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.

  2. H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.

  3. S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.

  4. D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.

  5. S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.

  6. A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002.

  7. R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.

  8. W. Feller, "An introduction to probability theory and its applications," 1957.

References


  1. W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.

  2. H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.

  3. S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991.

  4. D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.

  5. S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.

  6. A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002.

  7. R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980.

  8. W. Feller, "An introduction to probability theory and its applications," 1957.