区块链可能会成为未来10年互联应用的一个底层技术,会应用于各行各业的各种项目。比如:商品溯源,既然区块链会易用到各种系统,QA同学当然有必要了解下区块链该怎么测了。
区块链的特性:
区块链是一个分布式的共享账本和数据库,具有去中心化、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点。这些特点保证了区块链的“诚实”与“透明”,为区块链创造信任奠定基础。
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
区块链平台一般是由分布在不同区域、不同机器上的节点组成,节点间通过网络构成一个分布式系统,区块链实质上就是一个分布式系统软件。
目前业界主要有公有链、联盟链以及私有链三种模式:
一般说来,区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成。
该模型中,基于时间戳的链式区块结构、分布式节点的共识机制、基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点
分布式账本指的是交易记账由分布在不同地方的多个节点共同完成,而且每一个节点记录的是完整的账目,因此它们都可以参与监督交易合法性,同时也可以共同为其作证。
跟传统的分布式存储有所不同,区块链的分布式存储的独特性主要体现在两个方面:
存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私。
共识机制就是所有记账节点之间怎么达成共识,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。区块链提出了四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。
区块链的共识机制具备“少数服从多数”以及“人人平等”的特点:
智能合约是基于这些可信的不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。以保险为例,如果说每个人的信息(包括医疗信息和风险发生的信息)都是真实可信的,那就很容易的在一些标准化的保险产品中,去进行自动化的理赔。在保险公司的日常业务中,虽然交易不像银行和证券行业那样频繁,但是对可信数据的依赖是有增无减。因此,个人认为利用区块链技术,从数据管理的角度切入,能够有效地帮助保险公司提高风险管理能力。具体来讲主要分投保人风险管理和保险公司的风险监督。
节点就是一个区域的服务器。在互联网区域,一个企业所有运行的数据都在一个服务器里,那么这个服务器就是节点。
节点特点
节点功能
每个比特币节点都是路由、区块链数据库、挖矿、钱包服务的功能集合。每个节点都参与全网络的路由功能,同时也可能包含其他功能。每个节点都参与验证并传播交易及区块信息,发现并维持与对等节点的连接。
节点角色
网络中的每个节点都被认为是相等的,但是,某些节点在支持网络的方式上扮演着不同的角色。
在区块链技术中,有价值的信息以数据的形式被永久存储下来,这些用于存储数据信息的载体就称为区块。如果把区块链比作一本总账本,那么区块就是这本总账上的一页。
2.2.1block结构说明
block的header
区块的头部包含内容说明如下:
block的body
Body主要记录交易事物的主体。
block的定义
区块链blockChina的结构
2.2.2叔区块
因为特殊区块的父区块(上一区块)和本区块(包含它们的区块)的爷爷区块(上上个区块)相同,也就是说,这些特殊区块是本区块的叔叔,所以叫“叔区块”。
因为POW机制的“最长区块链”原则,只有最长的那条链才是有效的,这就导致可能某些节点跟在A区块后面创建了很多区块,但后面发现B链条更长,这就很悲催了,这些最终不在B链条的区块,称之为“孤区块”。
区块里包含叔区块,意味着叔区块的工作量也纳入了整个系统,也为安全做出了贡献。既然做了贡献,那肯定要给予奖励。以太坊这个奖励机制也设置得很好,使得大家皆大欢喜。
叔区块奖励 = ( 叔区块高度 + 8 - 本区块的高度 ) * 固定区块奖励 / 8
2.2.3区块与节点的关系
区块组合成链存储于节点中,也就是说 可能一个区块链的交易数据分成多个区块存储在一节点上,同时同样的区块链可能存在多个节点中。
2.2.4区块基础信息
区块高度是区块链接在主链的个数,也就是连接在区块链上的块数。
区块的高度,指的是区块的编号,换句话说,就是一个区块与创世区块之间的块数。创世区块,顾名思义,就是一条区块链上的第一个区块,要注意的是,创世区块的区块高度是0,而不是1。我们查询某个区块信息的时候,除了通过它的哈希,还可以通过它的区块高度进行查询。
区块高度是区块的标示符,区块有两个标示符,一是区块头的哈希值,二是区块高度。区块头的哈希值是通过SHA256算法对区块头进行二次哈希计算而得到的数字。区块哈希值可以唯一、明确地“标识”一个区块,并且任何节点通过简单地对区块头进行哈希计算都可以独立地获取该区块哈希值。区块高度是指该区块在区块链中的位置。区块高度并不是唯一的“标识”符。虽然一个单一的区块总是会有一个明确的、固定的区块高度,但反过来却并不成立,一个区块高度并不总是识别一个单一的区块。两个或两个以上的区块可能有相同的区块高度,在区块链里争夺同一位置。
Token是一种数字化的价值载体,是权益证明,
区块链的token具备三要素:1.数字权益证明;2.加密;3.可流通
其他
矿工会包含尽量多的交易,按照交易给予的fee/kb来排序;
交易数量是有上限的,每个block不能超过1MB;
每个块的第一个交易为coinbase交易,没有input,output地址是矿工的地址
数量是区块奖励和所有交易费用的总和;
用每个交易的TXhash生成merkletree,并生成merkle root hash 放在header中。
区块链是基于密码学代码学组成的自动运行记账系统,每个人都可以在系统上面创建自己的账户。一组账户里面就包括:私钥,助记词,公钥,钱包地址。
私钥是你加了”锁”的钱包,而助记词和明文私钥是完全暴露在外的钱包,没有任何安全性可言,所以在使用助记词和明文私钥时,一定要注意保密。
钱包(Block Chain Wallet):是密钥的管理工具,它只包含密钥而不是确切的某一个代币;钱包中包含成对的私钥和公钥,用户用私钥来签名交易,从而证明该用户拥有交易的输出权;而输出的交易信息则存储在区块链中。
钱包又可以分为冷钱包还有热钱包,两者的区别就在于它们之间的私钥存储方式并不同
作为区块链运转的载体,所有的事情几乎都要节点参与,网络通信、逻辑运算、交易、数据验证等,而区块链一般是由多个节点组成协同工作,因此节点属性及对节点的管理至关重要。根据节点的分工不同,可分为记账节点和观察节点,记账节点负责打包共识,观察节点同步最高块数据,不同节点类型可进行切换。
区块链的显著特点它是一个分布式系统,因此连接尤为重要,节点间任一网络抖动都可能影响到区块链的正常工作。只有连接正常,才能保证后续的交易、共识、同步等功能特性正常展开。
在区块链系统中,涉及到连接的地方主要有节点间p2p连接、节点与客户端的连接,以及链下机构间通过链上节点进行通信。
2.7.1概念
共识可简单理解为,不同群体所寻求的共同的认识、价值、想法等,在某一方面达成的一致意见。共识机制就是确定达成某种共识和维护共识的方式。
在区块链世界中,由于其去中心化的区块链设计,节点是各处分散且平行的,所以必须设计一套制度,来维护系统的运作顺序与公平性,统一区块链的版本,并奖励提供资源维护区块链的使用者,以及惩罚恶意的危害者。这样的制度,必须依赖某种方式来证明,是由谁取得了一个区块链的打包权(或称记帐权),并且可以获取打包这一个区块的奖励;又或者是谁意图进行危害,就会获得一定的惩罚,这就是共识机制。
共识过程一般包括打包、执行、签名、验证、落盘等主要阶段,任一阶段出现问题都会导致流程无法进行,对应节点无法参与共识,甚至整个链无法工作。
一个底层平台选择哪种共识算法,主要与该平台使用的场景以及想解决的问题有关。它能支持的共识机制类型,以及在不同的场景,共识算法是否可插拔,提供便利的算法配置方式。
2.7.2性质
区块链作为一种按时间顺序存储数据的数据结构,可支持不同的共识机制。共识机制是区块链技术的重要组件。区块链共识机制的目标是使所有的诚实节点保存一致的区块链视图,同时满足两个性质:
1)一致性。所有诚实节点保存的区块链的前缀部分完全相同。
2)有效性。由某诚实节点发布的信息终将被其他所有诚实节点记录在自己的区块链中。
2.7.3分类
根据共识算法解决问题的方式,我们可以大致将其分为两类:
代表算法有POW, PoET, 这类算法达到共识只需要等待得到能被验证的结果即可。同时这类算法也有分叉的问题,也就是说如果多个节点同时验证成功,会导致网络需要花时间来解决分叉,也就导致了用户需要等待确认,交易时间过长等问题。
2. 投票型共识算法
代表算法有PBFT, dPOS, Paxos等,这类算法的好处在于交易能被快速确认,但大多数算法因为需要网络中节点互相交换信息,会导致速度不够,扩展性不强等问题。
共识算法
现今区块链的共识机制可分为四大类:工作量证明机制、权益证明机制、股份授权证明机制和Pool验证池
在基于工作量证明机制构建的区块链网络中,节点通过计算随机哈希散列的数值解争夺记账权,求得正确的数值解以生成区块的能力是节点算力的具体表现。工作量证明机制具有完全去中心化的优点,在以工作量证明机制为共识的区块链中,节点可以自由进出。大家所熟知的比特币网络就应用工作量证明机制来生产新的货币。
代表应用:比特币
优点:架构简明扼要、有效可靠;公平,你投入越多的算力,你获得打包权的几率也等比增加。
缺点:造成了大量的资源浪费;达成共识所需要的周期也较长;很难获得同样规模的算力来维持自身的安全。
权益证明要求证明人提供一定数量加密货币的所有权即可。权益证明机制的运作方式是,当创造一个新区块时,矿工需要创建一个“币权”交易,交易会按照预先设定的比例把一些币发送给矿工本身。权益证明机制根据每个节点拥有代币的比例和时间,依据算法等比例地降低节点的挖矿难度,从而加快了寻找随机数的速度。
优点:可以缩短达成共识所需的时间
缺点:但本质上仍然需要网络中的节点进行挖矿运算,攻击成本低。
股份授权证明机制是一种新的保障网络安全的共识机制,在这样的区块链中,全体节点投票选举出一定数量的节点代表,由他们来代理全体节点确认区块、维持系统有序运行。同时,区块链中的全体节点具有随时罢免和任命代表的权力。如果必要,全体节点可以通过投票让现任节点代表失去代表资格,重新选举新的代表,实现实时的民主。
优点:可以大大缩小参与验证和记账节点的数量,从而达到秒级的共识验证
缺点:无法摆脱对于代币的依赖
传统分布式一致性机制原理如下:
我们认为要想达到一致性,只要各节点的初始状态一致、执行过程一致,那么最终一定能够得到一致的答案。于是当某条新信息出现时,各节点初始状态一致,每个节点执行一个“一致性算法”保证处理过程的一致,那么最终就能得到一致的验证结果。
传统方法其实是基于一个假设——分布式系统中没有拜占庭节点,这样看来危害十分明显,只要攻击者控制发现新消息的那个节点,或者发现新消息的节点本身就是恶意节点,就能控制整条验证流程。
Pool验证池基于传统的分布式一致性技术建立,并辅之以数据验证机制,是目前区块链中广泛使用的一种共识机制。即 网络中的A节点发现新区块,A首先对该区块进行合法性验证,当其通过验证后,A节点将该区块广播至其余节点,并使用类似于传统分布式一致性机制的方法,利用“一致性算法”使得各个节点之间的操作保证一致性,就能得到一致结果。
Pool验证池不需要依赖代币就可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础之上,可以实现秒级共识验证,更适合有多方参与的多中心商业模式。不过,Pool验证池也存在一些不足,例如该共识机制能够实现的分布式程度不如PoW机制等。
优点:不需要依赖代币就可以工作;可以实现秒级共识验证;更适合有多方参与的多中心商业模式
缺点:能够实现的分布式程度不如PoW机制
PBFT是一种状态机副本复制算法,即服务作为状态机进行建模,状态机在分布式系统的不同节点进行副本复制。每个状态机的副本都保存了服务的状态,同时也实现了服务的操作。
智能合约是一种自动执行协议,买方和卖方之间的条约被写入分布式区块链网络的代码行中(即区块的body不存储交易信息存储代码)。一旦某个事件触发合约中的条款,代码即自动执行。 因此,智能合约能在无中心授权的情况下允许匿名用户进行交易和协议。
作为区块链2.0的标签,智能合约犹如灵魂,通过代码的运行展示了区块链这种新型技术的独特魅力。如何最大程度发挥合约特性,关键还看区块链平台提供了哪些合约管理能力。
合约的本质是由语言写出来的一些代码,通过区块链平台提供的执行环境,运行其中的代码逻辑,达到预期目标。平台支持的合约语言越丰富,用户实现功能选择的余地就越多,对项目尽早落地能有更好的保障。通用的solidity合约以其语法简单、操作便利等优势而广泛使用,而对于有高性能要求的应用,预编译合约将会是更好的选择。以及逐渐开始流行的rust、go等语言在合约中使用,让项目的合约开发选择有了多样性,满足了不同开发者要求。
区块链系统同步主要包括交易同步、区块同步和状态同步,只有每个场景下的同步始终保持正常,区块链才能正常工作。
连接正常时,客户端发送到节点的交易,应当能同步到网络中其他节点。不同的区块链平台,根据节点的类型,组网模式,会采用不同的同步逻辑。
区块链从狭隘角度看,是一个数据库,可用于存储数据,类比常见的业务存储模式,需要从数据组织模式和数据存储介质,以及容灾等几大块展开测试验证。区块链存储也类似,各种区块的数据在存储前需要进行相应的组织管理再存到介质中,但是区块链数据在落盘存储前要经历较漫长复杂的共识过程,也就是最终的数据都是共识确认过的。
区块链也有许多RPC接口供外部调用,根据实际需要调用合约,去链上读或者写数据,或者直接http协议调用RPC接口。
数据治理,即数据有了,怎么去治理和利用它。链上有大量的数据,怎样管理这些数据以供使用,特别是在业务量大的应用中,面对海量的链上数据,如何做适当的处理,让历史数据归档甚至是删除,而又不影响业务的正常运行。
想要最优化管理和利用链上数据,主要还是看区块链平台自身属性和相关组件能提供什么工具。链上主要有区块数据、交易数据以及状态数据,常见的治理方式有数据导出、数据导入、数据裁剪等,不同的需求对应不同数据治理方式。
对于上层应用来说,区块链上的数据不易查看和使用,可以通过数据导出工具将数据迁移到mysql或者oracle中,后续做成可视化报表或者进行业务对账,就可以利用数据库中的数据完成相关设计。
随着区块链长时间运行,业务产生的数据越来越多,对存储和性能都是很大的考验,但另一方面链上有大量使用率低的冷数据,严重影响查询性能,这时就可以考虑对数据进行裁剪。举个例子,区块链块高到达三万时,可以将前两万块数据进行裁剪,链上只保留最新一万块的数据,同时,被裁剪的数据保存在其他地方能继续被使用。裁剪不仅是工具处理数据的过程,还要保证被裁剪的数据可用性。
在区块链系统中,当有新节点加入组网时,为了和其他节点保持同样状态,需要从其他节点同步数据,直到块高相同。这种同步方式需要考虑两方面的影响,一是在块高很大时,同步完所有数据需要耗费很长时间,另一方面节点从其他节点同步数据过程,也会影响系统性能。通过已导出的全量链上数据,来快速完成这部分同步工作,使新节点快速达到链上最新状态。用这种数据导入的方式能快速完成同步过程,而不对原组网产生影响。除了新入网节点,在遇到突发情况导致组网中节点数据丢失时,采用数据导入让节点快速同步数据。
2.13 区块链浏览器
区块链浏览器,是指提供用户浏览与查询区块链所有信息的工具。
2.14 OpenOcean聚合平台
OpenOcean平台是一个聚合了中心化和去中心化交易的综合性平台,将在 DeFi 和 CeFi 上进一步聚合衍生品、收益生成、借贷、保险产品,并在未来推出我们自己的组合保证金产品和智能理财产品。
其他相关知识可参考该文章《关于区块链100个基础问题答疑》
https://www.jianshu.com/p/96d3cf8a0cc7
参考文献:
区块链如何测试?
区块链如何测试?_zhusongziye的博客-CSDN博客_区块链测试
区块链怎么测试
区块链怎么测试 - 太八神 - 博客园
区块链-百度百科
区块链(数据结构)_百度百科
以太坊区块链的区块(Block)结构
以太坊区块链的区块(Block)结构_luoye4321的专栏-CSDN博客_以太坊区块结构
非对称科技
比特币,区块链,节点的概念? - 知乎