主页 > imtoken靠谱吗 > 比特币白皮书阅读笔记

比特币白皮书阅读笔记

imtoken靠谱吗 2023-05-11 05:34:59

官方文档,包括开发指南。

我阅读的pdf和评论:

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

概括

一种完全通过点对点技术实现的电子现金系统比特币如何避免双花,使一方可以直接向另一方支付,同时无需第三方信任系统即可防止重复支付。 通过工作量证明机制有效保证交易的可靠性,除非全网一半以上的算力被攻击者控制。

1 简介

互联网交易的核心问题是信任问题。 虽然可以通过第三方很好的解决,但是双方的信息都在第三方的掌控之中。 由此产生的隐私问题和相关的成本问题是不可避免的。 因此,需要一种基于密码学而不是信任的方法,让交易双方可以直接交易,并消除回滚支付交易的可能性(避免买方撤回之前交付的货币进行双花),保护卖方. 对于买家来说,在这种环境下更容易建立第三方担保机制。

综上所述,保护卖家,即保护资金的可靠性,使用比特币系统; 为了保护买家,即保护商品的可靠性,在比特币系统上建立了第三方担保机制。 我举个例子,暗网丝绸之路(暗网淘宝)使用比特币支付。 那么比特币系统就是为了保护买家,丝绸之路作为第三方担保机制就是为了保护买家。

2 交易流程

如果a和b想进行比特币交易,那么a用a自己的私钥对之前的交易(比特币数据块)和b的公钥进行数字签名。 然后发给b。 b可以这样继续和c交易。 带有时间戳的交易记录逐渐加长。 为防止双花,通过查询交易记录,确认该币种为所有者首次交易。

就好比a拿出一个比特币,然后在比特币上的owner栏写上b的名字(公钥),然后在转账文件上签上自己的名字(数字签名,具有不可否认性,不可伪造性),然后b就得到了他的比特币。 如果b想交易给c,那就把owner栏的名字改成c,然后自己写并签个转让函。 值得注意的是,这一系列的转账文件必须用比特币进行交易。 供收款人检查以确保此货币之前没有交给其他人(双重支出)。

比特币每十分钟产生多少个比特币_比特币如何避免双花_比特币分叉影响比特币总量

这里有个问题,就是A开始用一个比特币1美元,几经周折,又换回了A。 那么当A使用$1进行交易时,收款人查看交易记录,发现A已经使用了$1。 他会认为双花吗?

其实不是比特币如何避免双花,因为比特币包含时间戳信息,a在1点有$1,开始交易,5点返回a。 这时A手里的$1已经不是原来的$1了,时间戳变了,包含的交易记录(一叠转账合约)也变多了。 所以没有双重支出。 这里要慎重考虑,不要犯形而上的思维错误。

比特币分叉影响比特币总量_比特币每十分钟产生多少个比特币_比特币如何避免双花

比特币如何避免双花_比特币每十分钟产生多少个比特币_比特币分叉影响比特币总量

3 时间戳服务器

一组交易数据形成一个区块。 block的形成是通过大量CPU的计算得到的,后面会详细说明。 区块链就是把这些区块链起来,就像一条条的军舰。 为了防止区块链被伪造、重用、改造等,在提出工作量证明机制之前,首先是时间戳服务器。 时间戳服务器为所有区块打上时间戳并发布哈希,这样就可以证明当时确实存在交易,相关交易几乎不可能被篡改和伪造。

这里不仅英文和中文的文章不是很清楚,我也弄了半天。

比特币每十分钟产生多少个比特币_比特币如何避免双花_比特币分叉影响比特币总量

4 工作证明机制

前面说过,为了防止攻击者伪造和篡改区块,需要相应的证明机制来让攻击者难以伪造。 这就是工作量证明机制:找到一个随机数,使得该数字的随机散列以一个或多个零开头。 随着零的数量增加,找到这个解决方案的工作将呈指数增长。 但是只需要一次哈希运算就可以检查结果。 寻找随机数的过程通常被称为“挖掘”。

此外,工作量证明机制还解决了集体投票时谁占多数的问题。 它的本质是一个CPU,一票,诚实的节点会选择最长的链,然后被多数人认可。 最长的链代表最大的工作量。 如果攻击者想要篡改某个区块,他需要相应地更改所有后续区块,并且还必须获得大多数 CPU 的支持。 所以攻击难度很大。

比特币如何避免双花_比特币分叉影响比特币总量_比特币每十分钟产生多少个比特币

这里有个问题没说清楚,0开头指的是hash

32个字符以0开头? 还是二进制0? 还是十六进制的0?

我按照1写了部分代码试试,发现很容易找到“0”开头,几毫秒。 但是“00”开头的非常难找,找了好几个小时也没找到。

比特币分叉影响比特币总量_比特币如何避免双花_比特币每十分钟产生多少个比特币

def sha_find_str2(basicstr='123456', target='00'):

sha256 = 基本字符串

开始=时间。 时间()

打印 '开始于 %s' %start

打印“搜索...”

while True:#11000000000,大约 35 分钟

sha256 = hashlib.sha256(sha256).hexdigest()

if sha256[0].startswith(target): #一个0,10次会被发现

打印 sha256

休息

打印 time.time() - 开始

5 网络进程

比特币如何避免双花_比特币分叉影响比特币总量_比特币每十分钟产生多少个比特币

工作过程:

新交易广播到全网; 每个节点将接收到的交易信息合并到一个块中; 每个节点都试图在区块中找到工作量证明(挖矿); 当节点找到工作量证明时,向全网广播; 当且仅当区块中包含的所有交易都有效且之前不存在时,其他节点才同意该区块的有效性。 其他节点接受块:块被打包,在它的末尾制作一个新块,回到2。

其中,广播交易不需要到达所有节点,只需要到达足够多的节点,然后全网往往会投票寻找最长的可信链。 如果一个节点发现自己少了一个块(自己错了,少了),可以直接下载这个块。

6 动机

挖矿:在上一节的第4步和第5步中,如果工作量证明被a发现并被所有人接受,那么a就成为下一个区块的发起人,作为奖励,获得下一个区块的第一笔钱交易是专门生成属于a的电子货币。 a就像旷工一样,消耗体力(cpu power和time),挖到了一块金子(bitcoin)。

交易手续费:一笔交易的输出值小于输入值,差额即为交易手续费。 也就是说,每笔交易收取一定的交易手续费,这笔交易手续费加到区块的奖励中。 我猜,挖完矿后,不会再给新的币,但是会得到前一个区块的所有交易手续费。 这样做的好处是当一定数量的比特币在流通时,不需要产生新的货币,这种货币体系可以挖掘通货膨胀。

在激励体系下,拥有强大算力的攻击者可以获得不亚于攻击通过正常工作获得的奖励。

7 块存储:硬盘空间回收

如果最近的一笔交易已经被包含在足够多的区块中(其他节点已经接受了),那么交易之前的数据可以被丢弃以节省空间。 当然,同时也要保证区块的哈希值不被破坏。 这就需要一个树状结构的存储。 它被称为默克尔树(Merkle tree),从下到上成对哈希,区块只需要保存根哈希。

比特币每十分钟产生多少个比特币_比特币如何避免双花_比特币分叉影响比特币总量

没有交易信息的区块头大小只有80字节。 假设每10分钟产生一个区块,那么一年产生的数据就是4.2MB。 根据摩尔定律,内存的增长可以适应块的增长。

注意这里说的block的生成速度,是比较慢的。

比特币如何避免双花_比特币每十分钟产生多少个比特币_比特币分叉影响比特币总量

8 简化付款确认

也可以在不运行完整网络节点的情况下验证支付:用户需要保留一份最长工作量证明链的区块头副本,他可以不断询问网络,直到确定他拥有最长的链。 可以通过在 Merkle 树中查找交易(添加时间戳)来验证它。 如果找到哈希,则表示支付成功并被主流接受。

比特币如何避免双花_比特币每十分钟产生多少个比特币_比特币分叉影响比特币总量

9 值的合并与划分

电子货币是一张一张的,但实际交易可能一次要花好几张。 然后将事务设计为容纳多个输入或输出。 最多有两种输出,一种用于支付,一种可用于找零。 比如我花10个比特币买了一辆价值9.9个比特币的汽车,那么我输入10,输出9.9和0.1,其中0.1用来找零。 也可以看出,比特币并不总是整数。

比特币每十分钟产生多少个比特币_比特币如何避免双花_比特币分叉影响比特币总量

10 隐私

传统第三方无法使用支付宝、网银等,查一下就可以找到。 因为你的信息是在第三方信任平台注册的。 与传统的第三方交易不同,比特币系统可以很好地保护隐私。

回顾第二节的交易过程,交易双方通过公钥判断所有者。 所以比特币交易信心只知道某人将一定数额的货币转给了另一个人,而不知道是谁。 除非你知道公钥属于谁。 为了解决这个问题,可以在交易时生成新的密钥对,确保交易无法追溯到一个共同的所有者。

比特币分叉影响比特币总量_比特币每十分钟产生多少个比特币_比特币如何避免双花

11 安全计算

攻击者a试图改变某笔交易,即篡改某条区块链,需要a计算当前块、下一个块、最新块。 诚实链和攻击者链之间的竞争可以用二叉树随机游走来描述。 成功事件诚实链+1,失败事件攻击者链+1,距离减小。

比特币分叉影响比特币总量_比特币每十分钟产生多少个比特币_比特币如何避免双花

攻击者可以成功填补给定缺口的概率类似于赌徒破产问题。 一个接一个追也罢了,但差距越大,可能性就越低。

比特币每十分钟产生多少个比特币_比特币如何避免双花_比特币分叉影响比特币总量

当 p > q 时,攻击成功的概率由于区块簿的增长而呈指数下降。 也就是说,如果他运气不好,能够迅速成功,随着时间的推移,他成功的机会会越来越渺茫。 由此我们计算出一个人在付款后可以确认安全的时间。

假设攻击者在Z个区块链后成功,那么此时是泊松分布。 可以通过将概率密度乘以概率并对序列求和来计算概率。

比特币分叉影响比特币总量_比特币如何避免双花_比特币每十分钟产生多少个比特币

比特币分叉影响比特币总量_比特币如何避免双花_比特币每十分钟产生多少个比特币

文中有c语言代码和对应的结果。

比特币分叉影响比特币总量_比特币如何避免双花_比特币每十分钟产生多少个比特币

整体结果如下

比特币如何避免双花_比特币分叉影响比特币总量_比特币每十分钟产生多少个比特币

这里要说一下,即使攻击者篡改成功,仍然需要全民投票选出最长的链,也就是说攻击者需要控制51%的算力。 这种民主投票就是拜占庭问题。 但是我想知道是否可以发送小范围攻击? 即山高天子远。 攻击者控制了大部分区域,进而控制了该区域的投票结果。 有待研究。

12 总结

本文提出了一种高效的安全带、良好匿名的点对点电子支付系统。 利用电子签名原理实现交易和匿名,通过工作量证明机制记录公开信息,防止双重支出,确保安全。 同时,通过公开信息,最长链的民主投票方式进一步保证了安全性,使系统更加灵活稳健。 激励措施使系统保持良好运行。

简单回顾一下流程:时间戳服务(哈希区块)、交易信息收发、交易、奖励、区块(链)下载、投票选链(拜占庭)