主页 > 安卓手机怎么下载imtoken > 设计比特币的十个步骤深挖中本聪的思维逻辑

设计比特币的十个步骤深挖中本聪的思维逻辑

安卓手机怎么下载imtoken 2023-08-23 05:10:38

比特币莱特币以太币钱包通用么_win7 怎么删除比特币钱包cpan_比特币钱包代码

文字 | 村长

来源 | 鸵鸟区块链实验室

这两天的心情,大概和过年一样吧。

之前的日子,有人黯然离去,也有人静下心来思考。

不过,不管怎样,静下心来思考一下比特币钱包代码,永远是正确的选择。 一方面,信念不可避免地由价格决定; 另一方面,区块链作为多种技术的结合体,有太多概念可以被窃取、炒作和混淆。

因此,在这个特殊时期,鸵鸟区块链实验室带着一些疑问,回到了比特币的设计逻辑上。 中本聪的伟大之处在于巧妙地结合了一系列技术,并运用经济原理解决了技术上无法解决的问题。 任何单一的技术特征都不构成区块链的本质。

当从不同角度解读区块链成为常态,这让我特别想穿越时空,回到中本聪设计比特币的场景,探究他是怎么想的? 其背后的逻辑是什么? 所以我尝试通过这篇文章来探索中本聪是如何一步步设计出“点对点电子现金系统”,以及如何将这些区块链所使用的核心技术进行逻辑连接:

点对点网络、非对称加密签名、哈希函数、UTXO、智能合约、分布式账本、共识机制、区块链结构等。

其中,中本聪贡献了 UTXO 交易记账方法,并创新地将这些技术与经济激励相结合。

接下来,我们开始用提出问题和解决问题的思路,将这些技术结合起来。

问题一:如何理解电子现金与记账?

既然我们要设计一个电子现金系统,那么我们首先来探讨一下电子现金的概念。

win7 怎么删除比特币钱包cpan_比特币钱包代码_比特币莱特币以太币钱包通用么

如果给了上面的账,我们认为什么情况下可以这样记账呢?

场景1 银行系统中,V神支付1元给本聪

为了响应此交易,银行将在其自己的帐户上执行转帐:

win7 怎么删除比特币钱包cpan_比特币钱包代码_比特币莱特币以太币钱包通用么

这笔记本本质上是一种债务转移。 本来银行欠V神1元,银行欠本聪1元。 也就是说本聪有权使用这个账户向银行兑现1元。

场景2 现实中,本聪找V神借1块钱

这时候V神就会给丛本发白条:

win7 怎么删除比特币钱包cpan_比特币莱特币以太币钱包通用么_比特币钱包代码

以后本聪可以用这张欠条向V神讨回欠款。

场景3 在点对点网络中,Vitalik向本聪发送1元电子现金

win7 怎么删除比特币钱包cpan_比特币莱特币以太币钱包通用么_比特币钱包代码

而这个时候,V神竟然发来了一条账号入口。 如果账户中的每个人都认可这1元,也就是每个人都愿意兑现,那么这个基于比特流的账户就可以作为电子现金在网络中自由流通。 .

场景4 V神付给本中本聪一元现金

比特币钱包代码_win7 怎么删除比特币钱包cpan_比特币莱特币以太币钱包通用么

在这种情况下,实物现金在实物转账后就完成了记账,但货币本质上也是这样一个账户。 本聪持有 1 元现金,最终会将 1 元纸币的价值兑现给社会。

我们可以看到,四种场景虽然不同,但是可以采用相同的记账方式。 本质上,电子现金系统使用账本来记录网络上的价值转移,但网络的自由性使得价值转移变得困难。 带有不可避免的风险。

问题二:电子现金单笔转账可能会出现哪些问题?

为了分析方便,我们使用场景三“V神向本聪发送1元电子现金”,暂且忽略电子现金的问题。

当我们使用以下记账方式在网络中收发电子现金时,会出现哪些问题?

比特币莱特币以太币钱包通用么_比特币钱包代码_win7 怎么删除比特币钱包cpan

这三个问题的本质是:

3、事实不变性:交易发生后,不可篡改。

针对这些问题,我们寻找解决方案。

比特币莱特币以太币钱包通用么_win7 怎么删除比特币钱包cpan_比特币钱包代码

问题三:如何解决交易的真实性? 保证交易不可伪造不可篡改?

1、传统思维:中心化担保记账

我们通常的做法是使用可信的第三方担保,比如V神和本聪叫他们的好朋友BM来做担保:

簿记格式(一式三份)

win7 怎么删除比特币钱包cpan_比特币莱特币以太币钱包通用么_比特币钱包代码

这种记账方法的学术术语是“三次记账”。 基于BM的可信度,BM可以验证V神和本聪身份的真实性,以及双方交易的真实性。 之后,任何篡改交易的一方都可以找到BM的记账副本,从而实现仲裁。

但是,如果 BM 作恶呢?

问题四:如何防止仲裁员作恶?

关于如何防止仲裁者作恶,其实我们在思考如何在一个网络中做免费的点对点支付,既可以避免中介,又可以保证支付的安全。

为了实现这种安全性,我们首先介绍一种技术:非对称加密签名。

先简单说明一下数字签名的生成和验证的过程:

生成:使用generateKeys方法输入keysize生成一对公私钥。

签名:将一条消息和私钥作为输入,输出一条签名消息。

验证:输入一条消息,签名消息和公钥,如果输出为真,则签名为真。

我们可以用非对称加密签名解决两个问题:

1、公私钥即身份,解决了身份问题,具有一定的匿名性。 钱包地址是公钥的哈希值;

2. 使用私钥对应的公钥来验证交易的真实性。

我们使用数字签名来实现以下记账:

win7 怎么删除比特币钱包cpan_比特币莱特币以太币钱包通用么_比特币钱包代码

在这笔支付中,本中本聪可以用V神的公钥验证这笔支付,确认V神支付并签名,实现:

1. 真实性:只有私钥的所有者才能签署他的付款。

2.事实性:公钥验证支付,证明支付已经发生,没有私钥,无法伪造。

3.不可修改:没有私钥,无法修改已确认的交易。

那么还有一个新的问题,私钥的拥有者篡改交易怎么办?

另一方面,上述支付只发生在两个人之间。 事实上,支付发生在一个更大的网络中。 网络中的节点如何确认,支付是否被人篡改,确认账户中是否有足够的余额?

问题五:在P2P网络中,随着节点和交易的增多,如何保证支付的有序性和不可篡改?

假设在第一笔交易的基础上再增加一些交易(交易1“V神付给本聪1元”):

· 交易2 Vitalik向本聪支付2元

· 交易3 中本聪支付1元给V神

· 交易4 本聪向BM支付2元

首先,在P2P网络中,为了让每个节点都能验证全网所有的支付,每笔支付都必须广播给全网,让每个节点接收并记录全网的支付,以供判断。

当V神收到交易2和交易3时,更容易判断交易的有效性,因为是两个节点之间的有限交易。

第三节介绍的时候,当BM收到交易4时,作为新加入的节点,需要重新验证之前所有的交易,判断中本聪的账户是否有余额支付,所以需要检索参考之前的交易. 而本聪也需要在支付4中提供一个证明来证明自己的支付能力。

这时候,为了保证已经发生的交易不能被篡改和验证支付,我们引入另一种技术哈希指针:

比特币钱包代码_win7 怎么删除比特币钱包cpan_比特币莱特币以太币钱包通用么

哈希函数的一个简单解释是,任意长度的输入都可以被哈希生成一个固定长度的输出。

哈希函数具有三个属性:

win7 怎么删除比特币钱包cpan_比特币莱特币以太币钱包通用么_比特币钱包代码

1.输入和输出之间存在唯一的对应关系。 即使两个输入之间的差异很小,也无法获得相同的哈希值。

2. 已知哈希值无法反推输入值。

3.哈希计算不规则。 要得到一个特定的值或特定域的哈希值,只能尝试随机输入。

这些属性可用于轻松链接两个付款:

一方面,哈希指针指向的上一笔支付可以方便地计算出上一笔交易内容的哈希值,判断是否等于当前哈希值,判断上下文;

另一方面,如果之前的交易有任何细微的变化,就无法计算出相同的哈希值,保证了确认支付的不可篡改。

如下,付款1、2、3、4用哈希指针连接成一条链。 一方面可以确认所有支付的顺序,另一方面可以保证已经发生的支付不可篡改。

win7 怎么删除比特币钱包cpan_比特币钱包代码_比特币莱特币以太币钱包通用么

从前三笔交易可以看出,本中本聪的账户中还有支付2收到的2元,本聪可以使用哈希指针直接指向支付4中的支付2,即使用2元神V付给他付BM。

当 BM 收到付款时:

1. 哈希链可以保证之前的每一笔交易都没有被篡改过。

2、如果不放心,也可以使用本聪和V神的公钥来验证所有交易的真实性。

3. 审核所有交易并确认中本聪对付款 2 的引用有效且正确。

至此,我们在有限节点系统中实现了非对称加密技术、P2P网络广播和哈希链结构:

1、非对称签名解决了点对点的支付,没有中间人,保证了支付对应的唯一网络身份(即公钥和私钥)的真实性和不可伪造性。

2. 已经记入账本的支付可以通过哈希指针依次连接,保证不可篡改,同时方便查阅账户中的支付。

但在现实中,我们面临着更大的点对点支付需求,这引发了我们新的思考:

1、支付规模快速增长后,我们应该选择什么样的记账方式来更高效地记录和审计交易。

2、已经发生的交易因为哈希链结构是不可篡改的,但是如何避免现在发生的双重支付呢?

例如:本聪向BM支付2元后,发起支付5给第四个人,并用同样的2元支付给第四个人。 此时,第四个人可能还没有收到支付4的广播,甚至全网其他节点收到双倍支付后无法处理支付4和支付5。

问题六:在大额并行支付需求的情况下比特币钱包代码,交易应该如何记录?

对于这个问题,我们通常会选择以账记账,即对于每笔支付记录,一个账户支付给另一个账户,计算支付后该账户的余额。

比如一开始本聪的账户有3元,V神的账户有0元,当本聪要付给V神1元的时候:

1. 检查中本聪账户余额是否充足,若不足则终止交易。

2、本聪账户减1元,V神账户加1元。

3、此时本聪的账户有2元,V神的账户有1元。

不过,中本聪并没有采用这种记账方式,而是发明了比特币的 UTXO 方案,这也是本文开头中本聪介绍的为数不多的原创技术之一。

UTXO(Unspent Transaction Output)是一种基于交易行为的记账方案。

我们先做一个简单的演示,假设系统奖励中本聪3元,V神0元,那么记账形式为:

比特币钱包代码_win7 怎么删除比特币钱包cpan_比特币莱特币以太币钱包通用么

由于是系统奖励,本次支付的输入(put in)没有上次支付对应的输出(put out),只有V神输出0元,本聪3元。

然后我们以这种格式记录 4 笔付款:

比特币钱包代码_win7 怎么删除比特币钱包cpan_比特币莱特币以太币钱包通用么

让我们分析事务 1:

基于交易记账,需要保证每笔交易都有来源(输入)和目的地(输出)。 本次交易1中的输入源使用哈希指针指向“支付0”中的输出:中本聪的3元。

输出指向V神和本聪的地址。 UTXO 的特点是输入源(即 spent output)作为一个整体被消耗掉,而不是拿走一部分输入。 即在交易1中,输入本聪3元,然后输出1元到V神的地址,输出2元到本聪的地址。

后面三笔支付的思路都是一样的,这里不再赘述。

win7 怎么删除比特币钱包cpan_比特币钱包代码_比特币莱特币以太币钱包通用么

所以我们说,一个人有多少个比特币,是指这个人的地址中有多少个UTXO(未花费的输出),也就是我们可以理解为在UTXO方案中,没有我们通常意义上的货币的概念,只为未花费的输出,一个人可以生成无数个公私钥对,拥有无数个地址,而这些地址中UTXO的总和需要由钱包来管理。 本文不详细介绍钱包。

比特币中UTXO方案的代码如下:

1、元数据:交易大小、输入数量、输出数量、本次交易的哈希值、锁定时间。

2. 输入:对应上一笔交易的某个输出,上一笔交易的哈希值,上一笔输出的地址和签名。

3. 输出:接收地址的公钥哈希值

比特币钱包代码_win7 怎么删除比特币钱包cpan_比特币莱特币以太币钱包通用么

在这种结构中,比特币脚本代码可以自动处理签名验证、支付验证等工作。 对于比特币的脚本代码,其实就是智能合约概念的来源。

在比特币的改进历史上,对脚本代码功能的扩展有过各种假设,即在点对点的电子现金系统中,是否可以使用自动执行的代码来实现“特定时必须执行的代码”?满足条件?” ”和“点对点支付行为”?

这就是后来的以太坊。 本文暂不详细阐述智能合约。 后面的文章有机会推演以太坊的逻辑。

至于为什么使用UTXO方案而不是account-based方案。 本节我们还是回到第四个问题,可能对应解决大规模交易效率和并行交易的问题。

1、如果我们使用基于账户的方案,数据记录的对象是账户的状态,即每个账户对应的交易和对应的余额。 而如果记账是基于交易的话,对象就是UTXO,也就是UTXO对应的地址。

在电子现金系统中,虽然公钥和私钥可以实现部分匿名,但是一旦一个地址对应了特定人的行为,就会失去匿名性,所以大家更愿意使用更多的地址进行支付交易,从而大量将生成无效帐户和冗余数据。

基于UTXO的方案在一定意义上可以保证每条记录的有效性,从数据库层面来说,UTXO方案节省了存储空间,提高了查询效率。

2、如果便当中本聪向V神支付1元,BM同时向本聪支付1元,基于账户的方案无法并行,因为无法同时共享中本聪账户的状态。 UTXO 方案基于每个 UTXO 的状态,因此可以并行处理同一账户上的多笔交易。

关于UTXO方案,当然还有更多可以深入的点,包括一些不足和问题,但本文不展开,而是回归设计逻辑。 中本聪采用这种方案,往往被理解为支付系统对效率的要求,同时也回答了本节讨论的支付系统的大规模效率和并行支付问题。

然后我们开发双重支出的问题。

问题七:如何解决重复支付问题?

我们仔细思考双重支付问题的核心。 事实上,在大规模的对等网络中,我们无法解决分布式账本的一致性问题。 当一个节点不同步最新最准确的账本时,就会受到双重支付攻击。

解决这个问题的本质,谁来记账的问题,就是每个人都能记账; 或有限的已知节点记账(pbft、paxos); 或者选举一个可信的节点来记录每个人公认的公共账本。 所以虽然网络是分布式的,但是要解决双重支付的问题,我们还是选择使用可靠的公共账本来解决。

因为在一个节点可以随意进出的开放网络中:

1.不可能让每个节点都处于持续更新的状态。

2、节点状态未知,无法确认网络中的节点是暂时下线还是永久下线。

3.女巫攻击,公私钥生成成本低。 如果采用一人一票制,大量的低成本节点会破坏共识过程。

因此,无法直接套用有限节点的投票百分比法,只能选择一种机制进行竞争记账。

关于记账节点是有限还是无限,其实涉及到区块链中经常提到的公链、私链、联盟链的问题,以及公链争夺公共账本记账权的共识机制。

这里我们不讨论,但我们将重点讨论。 在一个节点完全自由进出,所有节点都有记账权的分布式网络中,如何设计竞争记账的公式机制,通过可靠的分布式公有账本解决双重支付问题,达成分布式共识。

谈到分布式共识,其实又回到了点对点支付网络的本质,即分布式网络的问题。 分布式网络中有一个CAP定理:

比特币钱包代码_比特币莱特币以太币钱包通用么_win7 怎么删除比特币钱包cpan

分布式系统可以同时实现一致性、可用性和分区容错。

作为交易系统,必须实现其中两个:

可用性:在某些节点故障或恶意活动的情况下,数据是否可以正常更新,即是否可以正常进行支付。

分区容错性:因为账本更新不同步,能否容忍错误分区的产生(即区块链结构的分叉)。

其中,必须要满足可用性,必须要出现分区错误,所以点对点支付系统一定不能满足高一致性的要求。

至此,我们需要解决的是在低一致性网络中解决:

如何避免女巫攻击。

如何争夺记账权(分布式网络的公共账本),达成共识记账,避免双重支付。

问题八:如何解决Sybil Attack的问题?

比特币莱特币以太币钱包通用么_比特币钱包代码_win7 怎么删除比特币钱包cpan

我们可以这样理解Sybil攻击,因为发送邮件的成本很低,所以我们经常会收到垃圾邮件。

因此,解决Sybil攻击的核心是让攻击的成本大于收益,避免大量低成本的恶意节点争夺记账权。 至此我们引入工作量证明(POW)的概念。

我们选择哈希函数 SHA256 作为工作量证明。

此时我们回忆一下哈希函数的第三个性质,如果给定如下哈希函数:

“哈希(给定信息+随机数)=特定领域的哈希值”

在对给定信息和随机数进行哈希运算得到特定值或特定字段值时,随机数只能通过穷举法得到。

即工作量证明POW的特点:

1.很难找到特定域的哈希值对应的随机数。

2、根据给定的信息和随机值计算哈希值非常简单。

下面是一些hash值,有一个直观的感觉

(哈希值的每一位可能是0123456789abcdef)

例子:

6797aed6e76de66dcd7ad5fd3fd2d3f4d567

7f6cdc908f908ddae325da4e5acef5fe675ef5

000006e76de66dcd7ad5fd3fd2ae325da4e5

0000000000000000 dc908cd7ad5fd3fd2ad

一般哈希运算得到的哈希值与前两个类似,但是当需要第三个甚至第四个哈希值时,需要进行大量的穷举操作来试出随机数。 我们通常所说的比特币挖矿就是寻找随机数的过程。

再次总结一下POW的特点:

1.只能用穷举法求随机值。

2. 所以找随机值的过程完全靠运气。

3.可调难度:调整0的个数。

4. 难度调整可以按照一个标准进行:即工作量证明的成本高于作恶的利润

至此,我们已经使用pow机制解决了女巫攻击的问题,使得争夺记账权的行为成本很高。

但同时一个新的问题出现了:

如果成本大于收益,如何激励节点竞争记账?

例如:

有转账1000元,记账工作量成本调整为1000元。 这时,如果你花费500元,你有50%的概率可以得到记账权。 节点根本没有足够的动力来进行这种簿记,更不用说竞争了。

问题九:如何激励节点竞争记账权?

我们想到两种方式:

· 打包交易区块并为区块记账。

· 簿记员的比特币奖励和交易手续费奖励。

打包交易增加了每次包含的交易数量,增加了收益,一定程度上缓解了激励问题,但节点对一个区块内的所有交易进行双重支付攻击一般是不现实的。

因此,中本聪采用奖励比特币的形式,对记账打包的行为进行重金奖励,让节点有足够的动力去记账。

这是比特币最巧妙的设计,它在纯技术组合之上引入了经济激励:

基于这种形式的激励,虽然在技术上双重支付被赋予了巨大的成本,但双重支付问题的最终解决方案是让全网所有节点的利益一致。

1、一开始,为了维护比特币网络,记账节点小心翼翼地记账,避免每个区块出现重复支付等问题,让比特币支付网络具备支付功能和价值,这样的一点——点对点支付网络 比特币本身带来的价值是有价格的,并且由于一定的金融属性,比特币具有价格上涨的金融基础。

2.此时节点矿工拥有比特币和算力。 如果比特币网络不可靠,他们手中的币和挖矿设备就会失去价值。 因此,节点将负责为利益共识和经济激励支付网络记账费用,甚至花费巨大的成本继续争夺记账权。 相应的,全网算力的提升,让比特币网络更加可靠。

win7 怎么删除比特币钱包cpan_比特币钱包代码_比特币莱特币以太币钱包通用么

3. 工作量证明机制和比特币奖励机制相结合,让网络中的所有节点都有共同的利益。 因此,从技术角度来看,工作量证明机制实现了全网记账规则的共识; 从经济学的角度来看,通过工作量证明来竞争记账权的节点形成牢不可破的利益共识。 因此,这两个层面的共识是相辅相成的,缺了其中一个层面,就不可能形成一个统一可靠的全网账本。

比特币莱特币以太币钱包通用么_win7 怎么删除比特币钱包cpan_比特币钱包代码

分析到这里,我们应该对网络的运行规律有了清晰的认识,其运行原理如下:

1、允许任意节点自由进出网络,节点间点对点支付,广播交易。

2. 同时,节点可以参与竞争记账。

3. 竞争节点进行穷举随机数,进行工作量证明,争夺记账权。

4.试用随机数记账节点对交易进行打包,验证交易,生成有效区块,并广播到全网。

5. 其他节点收到广播验证:交易的有效性和区块的有效性。

6. 节点验证区块后,更新账本,终止工作量证明工作,更新未确认交易池。

7.节点在验证块之后寻找新块。

8. 循环永远重复。

我们直接看一下区块链的结构:

比特币钱包代码_比特币莱特币以太币钱包通用么_win7 怎么删除比特币钱包cpan

这个区块链结构的几个关键点:

1、链式结构其实有两层。 一个是每笔交易都指向上一个交易,另一个是打包交易的区块,与上一个区块相连。 我们需要认识到,一笔交易指向的前一笔交易不一定在区块链的前一个区块上。

2.Merkle根,区块体中记录的交易通过哈希指针逐层指向一个Merkle根。 由于区块头小,区块体大,一笔交易只对应一个Merkle根,所以在验证交易时,节点可以通过只下载区块头并寻找Merkle根来验证,提高验证效率效率。

3、在区块体的交易中,第一个是币基交易,记录了奖励比特币的数量和对应记账矿工的地址。 基于货币的交易是比特币的发行方式。 比特币每 10 分钟打包成一个区块,现在每个区块奖励 12.5 个比特币,每四年减半。

说到这里,虽然为了共同的利益,矿工们普遍会选择谨慎记账,杜绝重复支付和问题交易,但仍然存在一个问题:

如何处理两个记账节点同时发现一个有效区块? 这就是分叉问题。

问题10:如何处理区块链的分叉?

这个问题的答案其实是不去处理。 区块链有自己的运行规则。 区块链网络在运行过程中,自然会有一条最长的链,大家把最长的链作为整个网络的有效链。 公共账本:

1. 无人干预,按照交易规则和共识规则自动运行。

2. 节点选择最合理最长的区块链进行交易。

3. 竞争可能会持续多个区块,最后节点切换到更长链的挖矿。

该方法的特点:

1、当前区块不保证交易状态,由最长链决定

2. 确认次数越多,新链的更换成本越高,交易越防篡改。

所以一般我们会等到一些确认之后才认为交易真的成功了,比如比特币的6次确认。

从本质上讲,最长的链实际上是最重的链,是算力最大的链,也是共识更牢不可破的链。

写在最后:

至此,我们已经完成了一个点对点的电子现金系统的设计。

我们选择点对点网络,希望搭建一个不经过第三方,可以自由传递价值的网络;

我们还使用非对称签名来解决点对点网络的身份问题、真实性问题和伪造交易问题(只有窃取私钥才能伪造交易);

在点对点网络中记账和数据存储时,我们使用哈希函数构建链式结构,使得我们的交易有序可追溯,确认的账本难以篡改。 哈希函数不仅链接了支付,还构建了一个区块链账本的基础设施,也是后面工作量证明的技术方案;

在解决谁来保管账本和建立可靠的公共账本时,我们利用工作量证明POW共识机制来竞争保管账本权,并创造性地与经济激励相结合,进一步解决双重支付问题,并在同时使整个网络具有牢不可破的利益共识。 而这条最长的链代表了一种有效的记账机制,自然就解决了区块链分叉的问题。

当然,分叉问题不需要解决。 区块链的世界是一个自由的世界。 只要一组节点愿意同意其他共识或新技术来构建新的区块链,就可以硬分叉新的区块链。 Community, this may be the charm of the blockchain, it is free, it is not afraid of node inconsistency and arbitrary access, we used a whole article to sort out the design ideas, and finally found that consensus is the soul of the blockchain .

And this consensus, as it happens, must also be based on interests. Because it conforms to human nature; because it makes the consensus broad. There is no shortage of collaboration in human society, but few have achieved such a broad and large-scale consensus like Bitcoin. Perhaps this is the significance of the blockchain, changing the way of consensus, reducing the cost of consensus, improving the efficiency of consensus, and generating large-scale consensus. The value of collaboration.