1.比特币运行机理概述
账本(区块)
掌握核心概念是学习任何学科的关键。
区块,区块链,交易单,比特币,交易是比特币体系中的重要概念。
比特币区块链可以看做是全世界唯一的一个账本。
区块可看做是账本中的一页。
交易单就是一页当中一条交易记录。
只要账本收支记得清楚,不需要单独的货币也可以交易。就像现在的刷卡付款,或者支付宝,微信支付一样,不需要现金。
节点上的比特币系统会将10分钟里的交易先临时记录下来(存在内存中),然后再用这些交易创建一个区块
比特币的由来
比特币是货币,是账本上记录的钱,那初始的钱从哪来?商品货币时代,有多少黄金制造多少货币,信用货币时代,政府说开印钞机,那货币就有了。比特币世界中,初始的货币是“谁创建了账本(区块),就给谁钱”,一箭双雕,既能激励别人创建账本,又解决了比特币的发行问题。创建一个区块,奖励50个比特币,注意没有独立的钱,只有数字,“50”记录在交易单里。
旷工挖矿除了有新币奖励外,还有交易费,也称旷工费。
交易过程(Transaction)
假设张三转给李四10个币,张三用比特币交易软件给李四的地址转10个币,那么在区块中的交易单会是这样的:
张三资金的来源(比如王二给的)
王二对这笔资金的签名
李四的收款账号
金额10个币
张三的签名
每个用户在比特币世界中都用一串数字表示,可以查到任何一笔交易的来源与去向,但不知道对应现实中的谁
比特币世界里的钱根本上是创建区块奖励的钱。
每个人的钱的来源有3种:创建区块奖励的,旷工费,别人转给你的
2.安全机制
中心化机构发行的信用货币有诸多弊端,依靠银行等中介结构提供的金融服务也有诸多不便和高昂的成本,假如通货不再膨胀,假如可以像发送email一样直接交易,显示世界会变得更好一点。
去中心化交易的前提是安全,否则一切无从谈起。
想象一个场景,张三给李四转10元钱,要安全交易,需要达成下面的条件:钱确实是张三付的;张三有10元钱(类似生活中的钱是真的,不是假的);张三没有把这10元钱给了别人(生活中的纸币没有这个问题,因为给了一个人就不能给了另一个人,这是数字货币独有的问题)
SHA-256是一个散列函数,输入可以是任意长度的字符串,输出是固定的256位长度的字符串。2^256是一个非常大的数,比地球上所有的沙粒数还多。
256bit,32Byte,64个16进制数
数字签名
签名者有一个只有他自己知道密码的密钥(私钥),可以对任何信息进行签名,签名者向别人发布一个公开的密钥(公钥),用公钥可以解密用私钥加密的信息。如果加密的明文在解密之前是知道的,那么解密后的内容如果和明文一致,这能证明签名确实是私钥拥有者的,且私钥拥有者无法抵赖。
解决是否是某个人支付的问题
对交易单的签名和验证
签名:
A像B付款,构建交易单T;
交易单T上有B的“公钥”(这里加引号,表明实际并不是公钥,而是公钥的散列值),有A资金来源的交易单的数据;
用B的公钥和前一个交易单得出一个哈希值h
A用私钥对哈希值 h 进行签名,得到 s,签名信息保存在交易单上
验证:
B拿到交易单T后,从前一个交易单拿到A的公钥,对签名 s 解密,得到 x
B用自己的公钥和前一个交易数据进行哈希运算,得到哈希值 y
如果 x 等于 y ,就证明交易单确实是 A 签字的,且 A 无法抵赖,因为全世界只有 A 有能力进行这个签名,因为这个私钥别人是不会得到的。
解决是否有足够的钱支付
因为资金来源索引到之前的交易单,对资金来源的交易单进行回溯,直到证明这些钱来源于挖矿奖励
解决重复支付
禁止重复支付,是比特币技术要解决的核心问题。它的核心,就是在 P2P 网络体系下, 创 建一套全世界统一且唯一的 有前后次序的 交易记录。
3. P2P 中建立全世界统一交易记录的解决 方案
没有统一的交易记录的账本是没有意义的(账簿数据不一致),生活中这样的统一交易记录的账本由中央节点保证,那P2P网络中如何做到呢?
统一交易记录的核心数据包括每笔交易内容,和每笔交易的前后次序。
交易顺序确定,就可以解决双花问题(双重支付),已经已经支付出去的钱,不可能再支付出去一次。
决定账簿前后关系的机制,采用了 时间戳机制( TimeStamps),用某种算法把区块的顺序固定下来,且记录,并且可以验证。
比特币采用的是将前一个区块的hash值保存在后一个区块中。
比特币解决交易的时序问题,以及防止被作弊者破坏,其是基于算法安全,而不是基于信任,法律,集权,强迫,惩罚等手段。
对比特币的工作量证明算法的形象描述
1,得到这个世界中已经创建好的账簿链中最后一个账簿,用这个账簿内容做数据,计算一 个 hash 值
2,不断接收这个世界被广播出来,且没有被放入账簿链的交易单。检验这些交易单(根据 交易单链信息和支付款项等信息),剔除掉不合理的(比如账户余额不足的支付)。
3,猜一个幸运随机数 n(比如从 0 一直到 999999.... )
4,把 1-3 步骤得到的数据都组织起来成为一个数据 buffer,送入 sha256,得到一个 256bit 的散列值 x
5,检查 x 这个整数,前面若干 bit(比如 96bit)是否都是 0?如果是,这个 x 符合“工作 量证明难度”么? 如果符合,那么“工作量证明”游戏结束!
6,如果不是,从步骤 2 开始不断重复。假如这个时候收到了一个其他节点发来的新的账簿 数据块。 还没有猜出满足要求的随机数,需要重新开始游戏。
得到幸运随机数 n ,工作量证明结束, 工作量证明 的目的是为了证明节点的诚实,为了获取记账权,将区块放到最长链的末尾。
获得记账权并不能保证打包的区块会被加入到最长链,如果你打包的交易单有问题呢,如果同时其他节点也得到幸运随机数呢。
区块的创建的过程:
1.通过工作量证明获得记账权
2.打包区块,全网广播
3.重复支付检测。其他节点对收到的区块中的交易单进行重复支持检测,根据已经创建的世界账簿链中交易单,逐一查找,以判断这个临时 账簿内所有的交易单,在世界中已经发生的所有交易中从来没有出现过。如果检测交易单都合法后,节点会把收到的这个账簿 , 临时挂接到本地备份的世界账簿链的最后
4.区块链分支判断。全网到处广播着被新创建出来的临时账簿。一个节点在收到多个区块后,会在本地自己维护的账本上建立分支,之后此节点在先收到的账本后面继续工作量证明工作。当节点收到最长的工作链账簿时,会抛弃掉比较短的分支。转为在最长的链条上工作。
创建账簿的过程,也就是检测交易单正确性和顺序的过程,也是保存交易单的过程。同时 它还是创建比特币的过程。创建账簿的机制是比特币的核心。
交易确认过程:
1.交易单全网广播
2.挖矿节点收集所有的新有效交易单,放到一个新区块
3.节点根据新区块数据和上一个区块的散列值,计算一个随机数(工作量证明)
4.工作量证明成功,打包区块,全网广播
5.其他节点验证新区块的有效性
6.验证成功,正式挂到区块链的末尾,在此区块继续创建新账本
交易单被打包到区块,挂到区块链的末尾后,其后再挂6个账本就能确认交易成功。因为要推翻6个区块,几乎不可能。这保证了比特币体系的不可逆,不可篡改。
读后感
这篇文章,用通俗易懂的的例子,讲解了比特币区块链的运行原理。看完后对比特币区块链的理解更深入了。
但对技术细节,这篇文章没有仔细交代,更多技术实现细节在《精通比特币》中有描述。