主页 > imtoken钱包官网大陆苹果怎么下载 > 比特币那些事(一)——入门
比特币那些事(一)——入门
原文链接
图片
概述
2008年11月1日,中本聪在metzdowd加密技术邮件列表上发表比特币白皮书:《比特币:一种点对点电子现金系统》,首次提出了比特币(BitCoin,BTC)的概念。 概念。
2009 年 1 月 3 日,中本聪在芬兰赫尔辛基的一个小型服务器上挖出了第一批 50 个比特币。 至此,比特币电子现金系统正式诞生。
比特币是一种完全去中心化的电子现金系统,不依赖中央机构进行货币发行、结算和交易验证。 区块链是支撑比特币系统的核心技术。
例子
下面,我们通过一个具体的例子来介绍比特币的工作原理和相关概念。
假设,有A、B、C、D四个人,他们之间发生了三笔交易:
然后,通过在比特币网络中广播,比特币网络中的所有节点都会获得这一系列的交易信息。
图片
这些交易信息最终会被一个节点组装成一个区块(Block),这个区块会被加入到全球区块链中。 请注意,每个节点都维护着完整的全球区块链。
这里,出现了三个问题:
下面,我们将依次回答这些问题,并介绍相关概念。
为什么节点工作?
为什么比特币网络的节点要创建和添加区块? 因为,有奖励,奖励由两部分组成:
关于系统的奖励规则,系统规定:
由此,我们可以计算出系统中包含的比特币总数。
比特币总数 = ((60 分钟 × 24 小时 × 365 天 × 4 年) / 10 分钟) × 50 比特币 × (1 + 1/2 + (1/2)² + (1/2)³ ...) ≈ 2100 万
如何选择节点?
如何选择节点? 因为比特币是一个典型的分布式系统,分布式系统采用共识算法(Consensus Algorithm)来选择节点。
分布式系统的共识算法有很多,常见的有以下几种:
比特币系统使用工作量证明共识算法。 关于工作量证明的详细原理,首先要介绍一下哈希函数。
哈希函数
哈希函数可以为任何内容计算出相同长度的特征值。 比特币区块链采用SHA256算法作为哈希函数,其哈希特征值长度为256位。 不管原始内容如何,最终计算出一个256位的二进制值。 如下图,是字符串123基于SHA256算法的十六进制哈希值:
SHA256("123") = 0xa8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0
哈希函数有一个重要特征:
什么意思? 以下面这道数学题为例,我们通过已知的x来计算y的值是非常简单的。 但是从已知的 y 中计算出 x 的值是非常困难的。 所以,如果想通过hash值求解出原值,只能暴力求解,一一尝试。
x³ * ln(ln(x)) + x² * sin(x) = y
工作证明
工作量证明需要做的其实就是把哈希值倒过来。 由于只能使用蛮力,这是一个非常耗时的过程。 但是,一旦某个节点在整个比特币网络中第一个计算出正确的值,就会获得丰厚的奖励,因此工作量证明也被称为挖矿(Mining)。
那么工作量证明要解决什么样的问题呢? 我们需要从块结构开始。
如下图所示,就是区块链的基本结构——区块。 一个块主要由两部分组成:
块体
图片
了解了区块结构之后,我们再来看看Proof of Work要解决什么问题。 主题如下:
SHA256(字符串) -> 符合某个条件的哈希值(小于某个目标值)
其中,字符串由当前区块头+当前区块体+生成时间+一个随机数组成。 求解字符串中的一个随机数,使得最终的哈希值小于一个目标值(Target)。 这里的某个随机数也称为Nonce。
Nonce 是一个 32 位的二进制值,很难猜测。 目前只能通过穷举法逐一尝试。
难易程度
在比特币系统中,难度系数(Difficulty)可以控制区块的生成速度。 难易程度可以决定上述目标值的大小。
目标值与难度系数的计算关系如下。 可以看出,难度系数越大,目标值越小。 因此,符合条件的哈希值范围越小,难度越大。
目标值 = 理论最大哈希值 / 难度系数
恒定速度
比特币系统将块生成速率设置为每 10 分钟 1 个块。 那么比特币可以做哪些事情呢,这怎么可能呢?
其实本质上是难度系数的动态调整。 由于目标值决定了满足条件的取值范围,我们可以计算出任意一个随机数满足条件的概率:
任意一个随机数符合条件的概率 = 目标值 / 理论最大哈希值 = 1 / 难度系数
那么,这如何实现对时间的控制呢?
假设全球有10000台矿机,每台矿机的计算速度为20T/s,即每秒可以进行20T的哈希运算。 因此可以计算出,整个世界的计算能力为2×10^17次/s。 那么10分钟的算力为:
十分钟的算力 = 10 × 60 × 2 × 10^17 = 1.2 × 10^20 次哈希运算
由于10分钟内只能成功一次,所以我们可以推导出以下等式得出最终的难度系数。
10 分钟的算力 × 符合条件的概率 = 1 次
即:
1.2 × 10^20 × (1 / 难度系数) = 1
求解 -> 难度系数?
由于世界的算力总是在变化,为了将输出速度控制在10分钟以内比特币可以做哪些事情呢,比特币系统规定每两周调整一次难度系数。 如果这两周的平均出块速度为 9 分钟(即比法定速度快 10%),则将难度系数提高 10%。 反之亦然。
如何验证交易内容的真实性?
举个例子,交易内容的真实性主要包括两个问题:
对于第一个问题,我们需要简单了解一下比特币账户地址的概念。
当比特币用户注册账户时,系统会自动生成一个随机数。 使用随机数,系统可以生成一对非对称密钥(公钥+私钥)。 比特币账户地址是一个 160 位(20 字节)的字符串,由公钥经过一系列哈希和编码操作生成。
当用户A发起一笔交易时,他会先对交易内容进行哈希运算,得到一个摘要(Digest); 然后用私钥对摘要进行加密,得到数字签名(Signature)。 最后向比特币网络广播的内容为:交易内容+公钥+数字签名。
图片
当比特币网络的其他节点收到消息时,他们会验证它:
对交易内容进行哈希运算得到摘要1.用公钥解密数字签名得到摘要2.判断摘要1和摘要2是否一致
图片
如果摘要 1 和摘要 2 一致,则证明交易内容是真实的,在广播过程中没有被篡改。 那么如何证明消息的发起者也是A呢? 毕竟,我们不能同意 B 发送消息说 C 支付了 B 10 BTC。 消息的发件人必须是付款人。
为了解释这一点,我们需要了解交易生成。 事实上,每笔交易都需要包含多个输入和输出。 未花费的交易输出(UTXO)可以被新交易引用作为它们的合法输入。 已被引用的已用交易输出(STXO)不能被新交易引用作为其合法输入。
因此,比特币网络中的合法交易必须引用一些已有交易的UTXO(必须属于支付方才能被合法引用)作为新交易的输入,并生成新的UTXO(将属于接收方) ) 正方形)。
一些简单的交易示例如下所示。
交易目的输入输出签名差异
T0
甲乙
别人对A交易的输出
B可以引用交易
签名确认
输入减去输出就是交易服务费
T1
B到C
T0 的输出
C可以引用交易
B 签名确认
输入减去输出就是交易服务费
T2
X 到 Y
别人输出到X交易
Y可以引用交易
X 签名确认
输入减去输出就是交易服务费
至此,第一个问题已经解决。 注意:这里的解释比较简单。 更深入的细节请参考《比特币那些事(二)——交易》
.
第二个问题,A是否真的拥有10个BTC以上的资产。
这个问题的验证非常简单,在全球区块链中回溯即可验证。
其他问题经济博弈
图片
假设全球区块链有一个区块,记录了A转100个BTC给B的交易内容,但是比特币网络中存在一个恶意节点。 恶意节点希望篡改这个区块的交易记录,所以在这个区块之前开了一个分叉。 那么它最终会奏效吗?
为了解释这个问题,我们需要介绍一下比特币系统的最长链原理。
最长链原则:所有节点默认信任全局区块链中最长的分支。
根据最长链原则,除恶意节点外的所有节点都会信任区块链的最长分支。 一个恶意节点如果想让自己的分支成为最长的分支,就必须占据全球51%以上的算力才能打败所有其他节点。 从经济角度看,需要付出巨大的代价,却只能得到很小的收益,投入与产出严重不匹配。
总结
比特币使用区块链等分布式数据库作为底层支持。 它从2009年开始运行,经历了大规模、长期的测试。 证明它有效。
区块链虽然具有去中心化、解决信任问题等优点,但也有明显的缺点:
因此,我们不能偏执地认为新技术或科技产品一定是先进的,而是需要理性看待其优缺点。
最后,比特币包含的区块链技术可以在很多场景下进行扩展和应用,值得学习。 此外,比特币所蕴含的分布式系统设计思想和密码学原理也值得我们深入研究。
参考比特币