Blockchain - Bitcoin

比特币支付系统

核心:去中心化(decentralized),没有被任何公司和组织集中控制和操作

实现:区块链 (block chain)(模拟银行系统的核心“账本”),把账本发给所有人。具体来说,每个人都是一个节点,每个节点都有一份所有的交易记录,每次交易都被广播到所有节点

交易成功的条件

其他要素

比特币交易

比特币是虚拟物品,需要一个软件来进行操作,这个软件应该是开源的,可以看到源码,这样大家才能保证里面没有猫腻,危急信息安全,才能放心使用。 市面上也有许多类似的软件选择,比如:Electron,Bitcoin Knots,Copay等等。

钱包

交易平台

交易流程分析

原始阶段我们暂不讨论,考虑区块链已经发展到一定阶段的时候,分为两种人,一种是挖矿的人,一种是交易的人。流程如下:

交易的人写了一个新的区块,发出广播。挖矿的人验证这个区块是有效的之后,开始尝试写入区块链,通过proof of work的验证之后,一个新的区块加到了区块链中,再次发出广播。所有人包括其它挖矿人接受到这个讯息之后,更新一下自己的区块链。

这里有个疑问:同样是挖矿的人,看到别人挖的快挖到了我没挖到白忙活了,我一怒之下不接受他的更新,我只管自己埋头算,然后用我的区块来更新链可以吗?

区分两种情况:

区块链实现

一个Block可以分为如下几个部分

bitcoin

其中最关键的是Input和Output,如果把一个Block理解成一张纸币

可以看出,一个Block代表了一整个交易所有的信息,即交易的时间,交易的双方,交易的数量。

我们知道,Block是由一堆数据组成的,每个人都可以随便写一个Block,但是写出来的Block不一定有效。要想写一个能用过Validation的Block,需要保证”钱的来源是有效的”,即Input是有效的。

怎样保证Input的有效性?需要保证这个Input有与之对应的Valid Output。

举例

Block A:已经被承认了
     Input A/Owner X     Output A/Owner Y

Block B:正在写的一个新区块
     Input B/Owner Y     Output B/Owner Z

Input B给出的信息是,Owner Y有一些比特币可以交易,不信你看Output A。如果去验证Output A,可以发现和Input B是可以通过某种算法Match的。于是Input B是成立的,于是就可以把这些钱转给Owner Z。

这里的算法是通过公钥和私钥做的一个签名。具体的做法是:

Output A用Y的私钥对一串字符M做了加密得到了M’,这个M只有Y知道,其它人都不知道,也猜不到。而在写Input B的时候,需要用到这个M,加上Y的公钥才可以得到M’完成验证,于是保证了只有Y才能写出有效的Input B。

而这个M怎么来的,是用Y的公钥对Y的私钥进行加密得到的。

区块链软件设计

(笔者猜测/分析)为了构建一个区块链交易系统,需要以下模块:

Fork me on GitHub