IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 区块链论文笔记0x01:Bitcoin: A Peer-to-Peer Electronic Cash System -> 正文阅读

[区块链]区块链论文笔记0x01:Bitcoin: A Peer-to-Peer Electronic Cash System

writer: Satoshi Nakamoto @ 2008
在2008年的作者看来,BTC系统最大的魅力在于:“在不需要第三方可信机构”的前提下,实现“抵抗双花攻击”+“交易不可逆”。这篇论文感觉对很多机制的具体工程实践细节方面,没有很清晰的描述,但是让我感到很舒服的一点就是,你能够跟着作者的思路,看看为了设计比特币这样一个系统,他考虑了哪些方面。

1. 交易(Transaction)

????首先,作者考虑了如何记录一笔交易。收款人的收款地址,可以用对方的公钥的表示。于是,将上一笔交易与收款人公钥进行哈希,将哈希用汇款人的私钥进行签名,即可表示一笔交易。并且下一笔交易可以继续引用当前的交易,从而形成一条完善的交易链。请注意,这里的链并非BTC区块链,而只是交易形成的链,可以用它来记录数字货币在交易过程中的来龙去脉,就好像一枚硬币被花来花去一样。

在这里插入图片描述

????然后,作者又考虑到,如果只是这样的机制,那么没有办法确保一枚币是否被花了两次,即双花(double-spend)。他给出的解决方案是,既然硬币的一次花费过程可以被表示为一次交易,那么就让人记录下所有的交易,对于这枚币的某个拥有者而言,我们只认可这枚币第一次被花费的交易。
????每个交易,最重要的两个参数便是输入和输出。输入指定了花费的币从何而来(是之前某个交易的输出),输出指定了币发给谁(然后收款人可以用这个输出继续去消费)。

2. 时戳服务器(TimeStamp Server)

????BTC采用的是P2P网络,交易产生之后会在全网进行广播,那么我们怎么确认交易的发生前后关系呢?作者的解决方案是提供时戳服务器,来确定交易的时间先后顺序。

3. POW共识协议

????比特币作为一个分布式系统,所有节点之间势必要达成某种共识。要尽可能避免不同节点,区块链的内容不同的情况,这就要求禁止任何人在任何时刻都有发布区块的权力。因此作者采用POW作为BTC的共识协议,该协议要求所有节点必须通过求解符合要求的nonce值来争夺出块权力。只要你块里的交易没问题,nonce值也符合要求,其他节点就认可,随着确认节点增多和时间推移,你出的块里交易内容、顺序都将成为共识。

在这里插入图片描述

4. 网络

????作者在这一小节给出了比特币网络的运行步骤:
????① 向所有节点广播新交易。
????② 每个节点将新交易收集到一个块里。
????③ 当节点找到POW所需要的nonce值时,它会块打包好,并广播给所有节点。
????④ 只有当块中的所有交易都有效,且交易中的输入都未花费时,节点才会接收该块。
????⑤ 节点通过创建链中的下一个块,并引用当前块来表示对该块的接受。
???? 作者考虑到,可能有两个块甚至更多同时出块,这些块被所有节点的接受程度也不一样,但是在任何时间,所有节点都认为最长链是合法的。因此一旦接受到在更长链上拓展出的块后,节点就会抛弃当前链,而转换到最长链上。

5. 激励机制

????在BTC网络中,参与的节点越多,也就越安全。但是如何调动社区的积极性,让大家自愿投身出块任务呢?作者设计了两方面的奖励。其一就是出块奖励,每一个成功出块的节点,都可以在该块中包含一个特殊交易(CoinBase铸币交易),该交易没有输入,只有输出指向出块人自己,这也是比特币唯一的发行方法,新创建的这些比特币都归出块的矿工所有。其二,每一笔交易(除了铸币交易),都有输入输出,如果输出比输入大,那么多的这部分比特币将作为交易费归出块矿工所有。
????铸币交易奖励的比特币最开始是50个BTC,每21万个区块(大约四年)削减一半,由此可以预见终有一天比特币将被挖干,到那时,作者说交易费将成为唯一的激励机制。

6. 硬盘空间回收机制

????BTC网络的平均出块时间被设定在平均10分钟。由此可见,随着链上数据的不断增多,系统占用的磁盘资源也将越来越多。但是考虑到不是所有节点都有挖矿的打算,因此作者给出了解决方案:轻节点只保存块头即可,块头中没有交易列表,只有交易列表merkle tree的根。只有全节点才需要承担完整的存储压力。

在这里插入图片描述

7. 简单交易验证机制(SPV)

????因为轻节点没有全部数据,因此轻节点如何验证交易的真实性是一个问题。作者给出的解决方案是:通过向全节点请求目标交易所在merkle树分支,只需要很少的merkle树节点,便可以通过计算哈希值验证交易完整性。此外,当全节点检测到无效交易时,会主动警示轻节点下载完整的块来完成验证目标交易。作者在本节最后吐槽道,商用公司希望可以自己创建全节点加入BTC网络,验证的时候最好都能问自己人,这样又快又安全。

在这里插入图片描述

8. 币的合并与分裂

????比特币没有完整的账户概念,每份比特币无论面额大小,都以UTXO(未花费的输出)的形式存在着。一个交易,需要引用这些UTXO作为输入,产生新的UTXO输出,而作为输入的UTXO将作废。比如A有10个BTC,给B转5个,那么A要在交易中引用所拥有的总面额大于10BTC的UTXO作为输入,然后产生给B的5BTC的新UTXO和给自己的5BTC的新UTXO(找零)作为输出,差额将送给交易费当矿工。由于BTC存在这样的拆分合并机制,因此作者规定一个交易可以有多个输入,类似古代的碎银子,需要凑很多块才能达到规定面额,但是最多只能有两个输出,一个给收款方,另一个用来给自己找零。

在这里插入图片描述

9. 比特币隐私性

????比特币账户由一对公私钥组成,私钥用来做签名,公钥用来收款。链上交易的内容是每个节点都可以查验的,交易之中包含收款者的公钥,但是一般不会有人知道公钥的所属者,这也是BTC匿名性的最大保障。但是保不准会被别人给分析出来,因此作者推荐用户最好有几个公钥轮着使用。另外,作者提到,如果你在一个交易里引用了很多UTXO,那么别人就可以据此推断出这些UTXO所属交易的收款方都是你,这也是某种程度上的隐私泄露。

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:02:39  更:2022-10-31 12:02:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/23 16:09:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码