区块链作为比特币的底层技术,其本质上是一个去中心化、去信任的分布
式数据库账本。随着时间的推移,网络中不断有新的交易生成,矿工根据共识算法对交易进行验证,并分布式地存储于各个节点中。
区块链的工作流程具体包含以下几个步骤:
1)发送节点 A 将新产生的数据记录信息广播至全网其他节点;
2)全网中的所有接受节点对收到的来自发送节点 A 的数据记录信息进行核实,例如,该数据记录信息是否合法,如果通过检验,接受节点会把该数据记录信息存储到一个临时区块当中;
3)每一个接受节点都对区块实施共识算法,如权益证明(Proof of Stake, Po S)、工作量证明(Proof of Work, PoW)、实用拜占庭容错算法(Practical Byzantine Fault Tolerance, PBFT);
4)当接受节点找到共识算法的解时(如,工作量证明的解),广播该区块至全网所有节点;
5)当且仅当区块中的所有事务都是有效的并且尚未使用,节点才能接受该区块有成为新区块的资格;
6)新区块被正式存储于当前区块链最长链的末端,全网节点以将该区块的随机散列作为最新一个区块的散列值的方式表示为接受该区块。
网络中所有的节点都将区块链中最长的那条链视为有效链,并将新区块添加到该链上,从而增加它的长度。虽然两个节点可能同时算出区块的工作量证明并广播新区块,但是网络中的其他节点在接收到新区块的时间上存在着先后差异,一般情况下,节点会接收最先看到的区块并在该区块的基础上进行新的挖矿工作。由于不同的节点跟随了不同的分支链,理论上两条分支链的算力是不同的,区块的增长速度也是有区别的,经过一段时间,必然出现某条链的变成了相对较长的链。此时,在另一条分支链上工作的节点会放弃当前链,并在较长的链上继续工作。这就是区块链防止分叉的过程。因此,最终存在区块链分布账本上的数据记录信息是由全网节点共同认证和确认的结果,一旦全网节点达成统一共识,数据记录信息就具备了全网一致性和不可篡改性。
区块链的数据结构主要由区块头和区块体两个部分构成。其中,区块头
包含本区块的 Hash 值、时间戳、难度、上一个区块的 Hash 值、Merkle-root 的Hash 值等相关特性;区块体包含本区块在创建和验证过程中所有交易记录的信息。“区块+链”的数据结构使得各个区块之间以链的形式序相连,前一个区块的信息可由后一个区块通过 Hash 指针获得,以此达到溯源的效果。其密码学方法保障了恶意攻击的无效性。区块链遵循的共识和协议机制使得交易的确认需要通过全网大部分节点的统一认证,保证了数据的正确性。
简单支付验证(Simplified Payment Verification, SPV)是一种无须维护完整的区块链信息,只需要保存所有的区块头部信息即可进行支付验证的技术。
该技术可以大大节省区块链支付验证用户的存储空间,减轻存储负担,降低区块链未来交易量剧增而给用户带来的压力。以比特币为例,节点只需保存所有区块头信息,即可进行交易支付验证。节点虽然不能独立验证交易,但能够从区块链其他节点获取交易验证的必要信息,从而完成交易支付验证,同时还可以得到整个区块链网络对交易的确认数。
SPV 指的是区块链支付验证,与区块链交易验证有着很大差别。区块链交易验证的过程较为复杂,包括余额验证、双重支付判断等,通常由保存区块链完整信息的区块链验证节点来完成。验证节点虽然可以精准无误地验证任何一笔交易,但需要拥有巨大的数据量。目前,比特币的数据量已经超过 100 GB,且随着区块链技术的普及,数据增量将越来越大。以比特币为例:假设节点 A收到来自节点 B 的通知,节点 B 声称自己已经从账户中向节点 A 汇款了一定的金额。
区块链节点 A 进行交易验证的过程:
1)节点 A 从创世区块开始查看全部的区块链公共账本,查找账本中保存的节点 B 的历史交易信息,如节点 B 的汇款账户、历史收款人的地址、签名以及汇款金额等信息,查看节点 B 的账户,判断该账户是否有足够的金额进行汇款,若余额不足,则说明该交易验证失败;
2)节点 A 查看区块链公共账本,判断该笔金额是否存在双重支付,若存在,则说明该交易验证失败;
3)节点 A 判断节点 B 是否是所提供账户的拥有者,若不是,则说明该交易验证失败。
区块链节点 A 利用 SPV 进行支付验证的工作原理:
1)计算待验证支付的交易哈希值;
2)将区块链网络中已知最长链的所有区块头存储至本地;
3)从最长链中获得待验证支付的交易所对应的 Merkle 树 Hash 认证路径;
4)计算路径上 Merkle-root 的 Hash 值,并与本地存储的区块头所包含的Hash 值进行比较,定位到待验证支付交易所在区块;
5)验证该区块的区块头是否已经包含在最长链中,如果是则证明支付真实有效;
6)根据该区块头在链中所处位置,确定该项支付获得的确认数量。
智能合约(Smart Contract)的概念是由计算机科学家、密码学家尼克 萨博(Nick Szabo)在 1994 年首次提出的。但是,智能合约在传统的集中化系统下并没有发挥作用,主要原因是系统管理者对集中化系统拥有第一决定权,可随意删除、修改数据。区块链的出现为其提供了一个良好的发展平台,智能合约能被预先存储到分布式网络中。当合约中的某项条件被触发时,合约会自动执行预设的相应规则,任何人或机构均不能对其执行过程进行控制。
智能合约具有自治、自足和去中心化三个特点。自治表示合约一旦被触发就会按照预先设定好的程序自动执行;自足表示合约可以通过提供服务或者发行资产等方式获取所需资金;去中心化表示合约由全网所有节点共同维护而不是依赖某一节点。
基于区块链的智能合约构建及执行分为以下七步:
1)区块链的多个合法用户共同制定一份智能合约(包含双方应承担的权利与义务),并用私钥对其签名;
2)合约以 P2P 的方式广播至区块链网络,验证节点将一段时间内接收的所有合约打包形成集合,并计算合约的 Hash 值,最后扩散至网络;
3)其他验证节点将收到的集合中存储的 Hash 值与自己保存的 Hash 值进行对比,经过多轮比较以达到合约集合的一致性;
4)达成共识的合约集合以区块形式广播至全网,验证节点对合约集合中每一条合约的私钥签名与账户进行匹配验证,验证通过的合约记入区块链;
5)智能合约定期检查合约的触发条件、状态机和事务,满足条件的事务进入待验证队列,等待共识,不满足的事务存放在链上;
6)全网验证节点对进入待验证队列的事务进行签名认证,通过验证的事务将加入待共识集合,如果被大部分验证节点共同验证,事务将会被执行并通知用户;
7)智能合约对成功执行事务的所属合约状态进行判断,如果合约中的所有事务均成功执行结束,合约状态将变为完成,并从最新区块中移除;否则为进行中,等待下一轮的处理。
智能合约是一段被部署在分布式账本上的代码,可以对接收到的外界信息
进行控制。
Cmndb区块链利用 DAPP 提供的智能合约平台,提升了自身的灵活性和操作性。