Bitcoin 比特币 Blockchain 区块链 基础技术解释

前言:

好长时间没写Blog了,因为都在搞Bitcoin这玩意,现在网上大部分都是些概念性的东西,真正的实质内容不多,听到最多的词就是去中心化,去第三方,这对于理解比特币或是区块链技术根本没有半毛钱的帮助,因此我在这总结下关于比特币的种种。


比特币,区块链简述:

这个简述主要是为了让大家有个概念,以便能接受接下来的各种解释。

比特币:

首先,什么是比特币?网上传的神乎其技,什么虚拟货币,什么全球通用的加密互联网货币,听上去牛到不行。看上去像是加密型的支付宝,或者电子美元什么的。其实和其余电子货币相比,Paypal,支付宝等属于支付平台,其中的钱都和真实的钱挂钩,存1元,账户才有一元,而比特币一类的电子货币是一种特殊的货币,你可以理解为美元,欧元等外国的货币,但是外国的货币都是有外国国家政府担保,国内的货币有国内政府担保才能发行,能被大家认可。而比特币却是由程序做担保,由程序所创造,一旦比特币一类的货币上线,便不是个人或者创始者能控制的事情了,一切都是按照程序来走,或是按照大家的共识来改变。

另外提一句,各国不承认比特币十有八九就是因为不可控,不能随便印刷。

区块链:

区块链是种技术,刚刚起步的技术,很多地方都需要完善,因此很多东西都很模糊。

上图是一个比特币的交易过程,区块里存的是10分钟之内的所有交易内容,因此每10分钟更新一次,区块间相互联系形成一个链。网络节点可以理解为一个数据库,每个节点都包含了比特币的所有交易信息,而且相互连接,形成一个比特币的区块链。

总结:

总而言之,比特币是一种虚拟的货币,和一切的实体的有价值的东西都不挂钩的虚拟货币。区块链是一种承载比特币网络的技术。


钱包:

支付宝存钱你要有个账户,银行存钱也得有个银行卡,而比特币中用的是钱包。何为比特币钱包,说白了,就是一串随机的256位数字,代表私钥。而一旦你的私钥掉了,任意一人都能随便的使用你的账户。私钥能进一步转换成公钥和比特币的交易地址。


私钥经过椭圆曲线算法得出公钥,这里要提一下,中本聪真的是厉害,棱镜门曝光的双椭圆曲线(Dual Elliptic Curve)算法有认为后面,中本聪不知是运气还是实力,没选用这种国际通用的曲线算法,而是自己另找一条。之后公钥进过哈希能得到地址。地址是比特币交易时唯一暴露的与个人信息有关的东西,而私钥的两次加密方式都是非对称加密,因此完全不用担心任何个人信息被泄露。


交易:

关于交易,首先我们得知道几个比特币中的概念:

UXTO:

又称未花费支出。本质上是一串独一无二的字符串,但是代表了一定面值的比特币,本身可以再分割成面值更小的比特币。在比特币中充当货币的作用,最大分割面值是10^-8,称为1聪。下图就是一笔交易中分割UTXO的演示:


优点:防止货币被二次使用,可以对每个货币进行追踪,防止莫名其妙的出现货币,有人民币上的号码一样的作用。

缺点:交易会收取手续费,分割的太频繁,现在导致区块链的越来越庞大(虽然和现阶段金融领域的一天几T没法比,但是相较于过去数年的数据,现在已经是爆炸性增长了。)

锁定脚本:

一串脚本,用于锁定UTXO,并等待满足解锁条件后再解锁这个UTXO的使用。在比特币领域,用于锁定UTXO,解锁条件为拿出一个签名和被转账公开地址能匹配的,就转给他。发送方进行脚本的制作。


解锁脚本:

用于满足锁定脚本的一系列条件。在比特币中就是签名育公开地址匹配。接收方进行脚本的制作。


交易流程:

假设发送方A要进行交易,转给接收方B比特币。

1.创建交易:

个人用户一般是访问节点,得到钱包中还有哪些UTXO可以使用,寻找,拼凑或分解得到想要交易的UTXO值,并且得到B的地址。使用锁定脚本锁定UTXO的使用权,发布到比特币网络中的任一节点。当然别忘了,每笔交易都是要手续费的。

2.广播:

任一节点收到一条交易信息都会进行广播,给比特币网络中的其余节点,直到所有节点都接收到这条消息。因此就等B连接至进入比特币网络,确认这笔交易,具体步骤就行进行签名,使用解锁脚本,解锁被锁定的UTXO,10分钟之内,所有节点都会记录这笔账,也就真正的成交了。

3.结尾

这样就会被记录在案,这是普通用户所需要知道的交易流程,而身为比特币节点的所有者,也就是矿工,所需要做的也就复杂的多了。


节点:

前面说到,比特币是种凭空被创造出来的货币,那么既然是创造,也得按照基本法来创造。在比特币的世界中,一般是节点上的矿工们能获得被创造的货币。因为有利益,因此矿工乐此不疲的配置节点,帮助完成交易。那么身为一个节点,到底要做哪些事情,怎么得到货币,首先你要了解这些事情:

区块:

首先要了解,交易最基本的储存形式,就是区块。

上图为一个区块的大致结构,其中区块头中有:

总结下,就是说,所有的交易信息,从时间,金额,地址以及交易时的各种参数都是存放在区块中的。


区块链:

多了个链子,顾名思义就是将各个区块以某种方式相连起来,如下图:

随机数是为了工作量证明准备的(后面会提到)。每个新区块都会加上上一区块的哈希散列,并且生成一个新的哈希散列,一是为了节点之间相互验证完整性,二是让交易变得可追溯,使得记录无法修改(或修改成本过高)。这样变形成了一个区块链。


工作量证明:

区块是10分钟生成一个,每人记自己的帐肯定会乱掉,因此记账人只能有一个。现在比特币10分钟25枚,1枚写这篇文章时应该是6000+RMB左右,足以让大家都拼了命的去记账。因此如何确立一个记账人便是个问题,比特币引入了工作量证明系统。

首先区块要使用到散列计算中的随机数,因此当前区块的哈希散列计算是:上一区块的哈希+当前区块+随机数=当前区块的哈希散列。工作量证明便是要求得出的当前区块的哈希散列必须要满足一定条件,比如:前面几位要都是0。因为哈希散列是单向运算,运算结果是什么也是在运算前无法得知的,因此只能通过大量的运算去猜这个随机数,而第一个发布该随机数的便能得到所有节点的认可。


合约:

比特币中有点抽象化的东西,是种大家都认可的规则。就比如说,比特币中工作量证明就是种合约,大家相约好,谁先找到这个随机数,比特币就归谁。即使有人或有节点不认可,但是大部分节点都会认可,因此不认可正确合约的节点就被排除在外了。如果有丧心病狂的攻击者,凑齐了>50%的节点,按照比特币的这种情况,也只会导致攻击成本和收益不成正比。


区块创建步骤:

1.节点接受交易信息,具体接受解锁脚本和锁定脚本,配成一对得到交易信息。

2.与上一块的交易摘要(也就是哈希散列)和随机数一起进行哈希计算,满足工作量证明就广播,没满足继续。

3.如果别的节点优先满足了工作量证明,验证交易信息是否正确,验证工作量证明是否正确,正确遍更新区块。

以上步骤俗称挖矿。


番外:

因为区块链技术也是刚刚起步,比特币也只是作为区块链起步的试验品而已,因此比特币的整个系统也不是特别的完备,也是有很多改进的空间的。这里介绍几种现在比较流行的变体。

区块链:

公有链:

类似比特币的系统,人人满足一定条件就可以做节点,系统对每个人都是开放的。


许可链/联盟链:

节点需要经过认可,因此安全性有保障的区块链,半开放式,外界可以使用,但是可能有一定限制,例如银行之间建立的区块链。


私有链:

顾名思义,类似于公司内部的区块链,私有节点。


工作量证明替代:

权益证明:

这里要引入一个币龄的概念,持有10币2年=20年币龄。区块链以现在的技术,唯一可能攻破的只有双花攻击,而双花攻击的基本条件是要连续算出数个区块。因此权益证明引入了币龄的概念,为了防止同一个节点连续算出区块。权益证明使用币龄来控制工作量的难度,币龄越大,计算量难度越小,币龄越小,计算量难度越大。并且当一个节点更新区块后,此节点的所有币龄都重新计算。


委任权益证明:

更进一步了,只要 算力满足一定条件,便能被投票变成记账人中的一员,轮流进行记账。如果有人错过了记账的时候,或者乱记账,则会被去掉记账人身份。另外,每个记账人都需要预先缴纳100倍的保证金。


交易方式:

比特币中使用的是P2PKH,pay to public key hash,需要发送方一个锁定脚本,接收方一个解锁脚本。而今可以替换成另一种交易方式p2sh,pay to script hash,这种交易方式仅仅需要交易方发送一个Hash散列,接收方生成脚本(赎回脚本),因此极大的减轻了服务器的负担。



阅读更多

更多精彩内容