Bitcoin and Blockchain
26 March 2018
CJ Ting
CJ Ting
也叫摘要算法,计算 任意长度 输入的摘要,产生一个 固定长度 的输出,这个输出叫做 哈希值。
常见的哈希算法有 MD5
, SHA256
, SHA512
等。
特点:
数字签名和我们传统的签名一样,满足两个性质:
目前使用的数字签名一般由 非对称秘钥 实现,有两把钥匙,一把秘钥,一把公钥,公钥公之于众。
秘钥 + 消息
产生签名公钥 + 消息 + 签名
来验证有效性SK (Secret Key, 秘钥):
f46b86f8d9b7d7008b6a7f940ba782663e2f06eccea272a375ee49d74ec1e9f8
WA (Wallet Address, 钱包地址):
02ab20170e07d7f701ce7c4e5fa30bac0841c0aab6a448c7ee848af3b1a7e1cb7f18SGifBJgDWnARXaHUmM8E3FJAHnLcxZhW
dingxijin
交易由两部分构成,输入相当于汇款方,输出相当于收款方。
输入,可能有多个
UTXO(Unspent Transaction Output)
: 某一个交易的输出解锁脚本
: 用来解锁上述的 UTXO输出,可能有多个
锁定脚本
: 指定了消费这段输出的条件金额
锁定脚本和解锁脚本是一套小型的编程语言,为什么不设计成直接校验签名而要弄一套脚本系统?
因为脚本可以用来指定复杂的消费校验方式。
比特币中绝大部分交易,消费校验都是提供 WA 对应的签名即可。
节点使用 WA + 签名 + 消息 (交易哈希值) 即可确认解锁脚本是否有效。
16比特币没有直接的账户余额,一个 WA 对应的余额需要使用目前所有的交易推导出来。
交易之间形成一个链条,每一笔交易都能追根溯源。如果你要转钱给别人,一定是有人先转钱给你。
25挖矿:节点将交易打包在一起,形成区块的过程。
一个区块由以下部分构成:
由于每个区块都含有上个区块的哈希值,因此,区块之间形成一个链条,也就是所谓的 区块链。
29算法会考虑如下因素
每个节点都可以形成区块,但是形成区块必须满足特定的条件:区块的哈希值(当做整数来解读)必须小于困难度。
由于哈希算法的特性,找到吻合条件哈希值的唯一做法是尝试。尝试的过程就是不停地修改随机数,计算哈希值,检验哈希值是否吻合条件。
一旦某个节点找到了特定的随机数使得哈希值满足条件,也就是所谓的“挖到了矿”,那么这个区块就会被加入到链中,同时广播给网络中其他节点,其他节点收到消息后,校验区块的有效性,然后立刻开始“挖下一个矿”。
36算法很简单,每 2016 个区块以后,节点会根据生成 2016 个区块的实际时间以及理论时间(每 10 分钟一个区块),调整困难度,因此,无论网络节点多少,无论计算能力大小,比特币始终保持在 10 分钟一个区块。
42区块中的交易数量平均值在 2000 左右,因此比特币的交易速率平均为 200笔 / 分钟,作为一个全球货币,这个交易速度非常低,是比特币的一个重大缺陷。
44每个区块的第一个交易是 生成交易(Generation Transaction)。这个交易 没有输入,只有输出。
生成交易将 系统奖励 + 手续费 输出到挖矿人员设定的钱包地址,这就是比特币产生的根源。
45考虑这样一个情景:A与B之间有一笔大额交易,使用比特币支付。
交易为 T1, B 在等到交易进入区块 B2 以后,就交付货品给 A。
此时,A 立刻调用大量计算能力,在 B1 的基础上重新挖矿得到 B3,B3 中有一笔交易 T2,使用和 T1 同样的 UTXO,但是输出为 A 自己的账户。
紧接着在 B3 的基础上挖出 B4(A 掌握了 51% 的计算能力),那么 B2 就会彻底作废。A 同时拿到了钱和货。
52确认度 指的是交易所在的区块前面还有多少区块(包含该区块),确认度越高,链条越长,越无法修改,越安全。
一般 10 以上就十分安全了,要推翻 10 个区块需要巨大的计算量,目前没有个体和团体能做到,这个方法的缺点是需要等待。
57这个交易可以被轻松撤销,只适用于非常小额的交易,比如买一杯咖啡。
假设交易为 A -> B(T1)
,因为交易没有被挖进区块中,A 可以再构造一个交易,A -> A(T2)
,如果 T2 先进入区块(通过增加手续费的方式),那么 T1 就会无效。
到了这里,我想大家应该对比特币的整个系统运作有了一定的理解。
注意,这次分享意在说明比特币的工作原理,希望能帮助大家站在一个整体的角度上去理解比特币,重在概念性解释,因此部分技术细节做了调整方便大家理解,不一定准确。
60CJ Ting