主页 > 放imtoken钱包安全吗 > 腾讯云高可扩展区块链平台原理解析

腾讯云高可扩展区块链平台原理解析

放imtoken钱包安全吗 2023-02-25 06:30:42

一、新基建下的区块链

区块链融合了密码学和分布式数据库技术,可以有效、安全地实现跨组织的数据共享和协作,从而在新基建中发挥作用。 新基建下的区块链具有以下四个特点:

首先是服务范围更广。 不再像前几年只有少数企业联盟建设信息化设施,要求能够进行分区治理。 每个区域和业务可以构建一个相对独立的区块链,同时支持与其他区域集成,业务的区块链进行跨链协作。 第二个特点是分级治理。 在区块链的新基建场景中,节点并不是完全平等的,而是分层的,以满足政府或企业现有的治理体系。 三是身份实名制。 最好有一个统一的身份系统,类似于国民身份证,即使跨地区、跨业务也可以通过身份进行授权和验证。 第四个特点是支持敏感数据的跨链传输。 在保证数据跨机构共享的同时,也要保护好数据的隐私。 下面举个例子来说明新基建的区块链应用场景是什么样的。 在教育领域,区块链可以用来管理学籍和档案。 这些都是需要长期管理的重要数据,以保证以后不被篡改,数据可追溯。 通常不同省市都会有自己的区块链系统来维护本地数据,但如果学生入学或转学,就会涉及到跨区块链数据传输。 政务领域也有很多这样的例子,比如户口迁移或者社保,都涉及到跨区域的数据流转,也会有很多跨业务的信息协同场景。 简而言之,会出现很多按地域或业务划分的分区链,这就涉及到跨链协作。

腾讯云高可扩展性区块链平台原理剖析_java

2. 如何构建一个高度可扩展的区块链平台

区块链内部数据不可篡改,变更过程可追溯。 但是,跨链链接时,分区链之间是平行的,无法验证对方的数据是否可靠。 在这种情况下,为了保护区块链的基本特性,就需要引入跨链治理平台。 其功能包括跨链身份管理和跨链交易管理。 现在区块链被引入新基建场景,将要求区块链能够服务更广泛的用户群体,管理更多的数据。 这些最终将归结为区块链能否实现更高的可靠性。 扩张。 目前区块链在可扩展性方面主要面临三个问题:

为了追求去中心化和数据不可篡改可追溯的特性,区块链的成本和价格远高于我们平时使用的数据库。 因此,用单一的区块链来承载整个工业互联网的数据是不现实的。 第二点,产业区块链中的各个业务会有不同的管理模式,比如不同的共识机制和策略。 在这种情况下,将所有不同的业务放在同一个区块链中是不现实的。 的。 第三个问题是每个地区和企业都会建立自己的区块链。 比如每个城市都会有自己独立的区块链,但是又涉及到跨区域、跨业务的协同,这在可扩展性上也是一个很大的问题。 针对这些问题,目前的解决方案是通过跨链解决区块链横向扩展的问题,进而通过分层解决跨链的效率监管。

3. 区块链去中心化与效率的权衡

1. 分级治理

因为区块链强调去中心化,要求所有参与者相互验证。 在工业互联网场景下,由于数据量大,不同业务、不同地域的链是平行平等的,没有办法验证其他业务链的数据是否正确,所以有分层的概念。 分层治理模型可以提高效率并满足监管要求。 这类似于我们整个社会机制,包括政府和企业都是分级管理的。 之所以分层可以提高区块链的效率,是因为分层就相当于牺牲了一些去中心化的特性。 如果没有分层,整个区块链就是一个完全扁平化的结构,就像大家熟知的公链一样,每个节点都是平等的。 做共识需要大家投票或者竞争,共识节点会很多。 如果我们把区块链分层,共识的范围可以限制在少数节点,共识的规模会小很多。 比如在比特币中,为了提高比特币应用的效率,会在比特币上搭建一个二层网络,这也是一种分层的思想。 腾讯云区块链的分层方案在体系中主要分为两大层,上层为应用层,下层为治理层。 (1) 应用层 应用层可以构建大量并行的应用子链。 应用子链可以实现不同的业务,采用不同的治理模型。 子链只需要专注于自己的区块链应用,提供相关的API即可。 它不需要关心复杂的跨链过程如何实现,也不需要关心与其他链通信时如何实现,因为跨链过程是由负责治理的人来实现的。

(二)治理层面

治理层为应用层的跨链协作或数据流通提供底层支持。 功能主要分为两部分:跨链交易管理和跨链身份管理。 跨链交易管理需要对一个交易在多个不同链之间的执行状态进行管理,以保证数据的一致性。 也就是说,在多个区块链上,所有的交易都执行成功或者全部失败,从而保证数据的一致性。 与传统的分布式交易不同,跨链交易处理的过程需要保证去中心化,因为它是基于区块链来管理交易,所以称为交易链。 这里采用的两阶段去中心化跨链互操作是一种可以实现灵活性和大规模跨链互联的区块链系统。 最底层是跨链身份管理,为区块链上层应用提供可信的身份服务。 我们称之为身份链,用于管理子链的身份和用户的身份。 子链的身份就是上层应用子链的身份。 应用子链如果需要与其他平行子链进行跨链操作,首先要在身份链上注册自己的身份。 这个身份包括子链暴露的一些资源管理API,实现基于身份的服务发现。 因此,身份链相当于一个公共通讯录,管理着各种身份信息。 有两种类型的身份信息。 首先是区块链应用的用户身份。 身份链在上层为所有子链颁发统一的身份,以便子链验证其他子链的用户身份。 通过身份链,我们可以打通数据拥有者、管理者和访问者不同权限之间的验证过程,为安全的跨链互操作提供信任基础。 在联盟链中,身份是信任的基石。 基本上所有的授权验证都是基于身份的。 统一的身份体系是跨链的关键。 身份信息主要包括以下几类:

这里的关键是身份服务,它记录了与身份关联的网络服务地址、API等信息。 以个人身份为例,比如“我”现在在深圳比特币扩展公钥,那么“我”的个人身份可能是深圳某个应用链上的对外服务地址,这些身份以区块链的形式进行管理,形成身份链。 身份链相当于提供一个统一的身份,类似于现实中的身份证,可以为跨链提供身份注册查询、验证等功能。 有了身份链,您就可以迈出跨链、基于身份的区块链服务发现的第一步。 身份链作为一个公开透明的身份注册中心,身份链为身份提供信任背书,同时因为我们的身份包含对外服务的API,所以提供区块链服务发现功能。 比如我有一个区块链服务,如果我要提供我的服务,我需要在区块链上注册我的身份,服务的调用者可以在相关链上查询我的服务并发起调用。

腾讯云高可扩展性区块链平台原理剖析_java_02

以查询某项个人资料为例。 某APP想用个体A的身份查询其在身份链上的身份服务,身份链会返回该个体的身份服务,即应用子链的身份ID,APP获取身份应用子链的ID 然后去区块链查询该链的身份服务。 找到之后,就相当于找到了外网服务地址,也就是查询API或者更新API。 这样,APP可以直接调用API访问应用链,对个人用户发起数据查询或更新操作。 应用子链还可以审核和执行操作权限,这就是服务发现的功能。 通过服务发现,可以实现跨链查询。

2.跨链查询

跨链查询只是跨链的一小步,那么如何通过身份服务实现跨链查询呢? 如图所示,图中有四个角色。 最底层是身份链,最上面是申请者C和两条应用链A、B。这个场景说明一个用户的数据托管在蓝色区块链A链上,但是现在用户需要授权B链查询托管在A上的数据。在这种场景下,A、B、C都需要去身份链上查询对方的身份信息,验证对方的身份是否合法,以及对方的数字签名是否合法请求或授权是正确的。 身份链找到对方的服务地址后,可以根据身份链上的服务地址直接访问对方。 一般来说,身份链由监管部门管理。 比如发现某个身份有问题,监管部门可以冻结。 冻结后,身份信息相当于作废。

(1) 甲骨文

这里说一个细节,比如应用链B要查询身份链,他还需要查询子链A,这就涉及到区块链的跨链查询功能。 对于区块链来说,如果想在链外查询数据,目前还不容易实现。 对于外部数据,其有效性是无法验证的,所以如果要查询外部数据,就必须引入区块链的oracle功能,这也是区块链中一个比较新的技术方向。 简单来说,预言机就是一种将区块链外的信息写入区块链的机制。 我们把区块链分为两种类型的节点,一种是普通的区块链节点,一种是预言机节点。 oracle节点内置了oracle模块。 当我们要访问链外数据时,通常会调用预言机的智能合约,让预言机读取链外数据写入区块链,然后同步到区块链。 其他区块链节点。 其他节点会将这些数据写入自己的状态数据库,然后这些普通的智能合约就可以使用这些链下数据。 区块链没有内置预言机功能,因为大部分智能合约无法直接访问外部网络资源。 一些智能合约使用通用编程语言,如Java、GO,可以调用网络接口来访问外界,但通常智能合约不会直接调用外部接口,因为它们不是很规范。 因此,网络接口的调用通常由预言机统一管理,然后将外部数据最终写入区块链。 统一管理更加规范,二是可以直接将链外数据写入区块,外部数据写入区块后才能追溯。

(2) 预言机的简化

这个过程比较复杂,联盟链有更简单的方案。 由于联盟链的节点规模不会太大,可以简化智能合约的开发流程和部署。 如下图,验证节点和预言机节点融合在一起,验证节点和预言机节点没有单独区分。 它们都是通用的区块链节点。 智能合约不区分预言机的智能合约和普通的智能合约,而是将其视为一个统一的智能合约,使得智能合约可以像普通智能合约一样访问本地状态数据库,也可以访问到 oracle 模块。 智能合约的调用过程也需要通过共识。 简化了整个数据流,比如从外部调用智能合约,然后在智能合约执行的过程中,如果有查询外部数据的指令,指令会发送到oracle模块,oracle会代理合约到外部查询数据,oracle获取外部数据后直接返回数据给智能合约,智能合约可以根据外部数据进行下一步计算,并将计算结果写入state数据库。 最终智能合约的处理结果和预言机得到的中间结果会一起写入区块链。

(3) 预言机可信机制

这里有一个重点,使用预言机后如何保证可信度? 可信性主要包括两个方面,一是去中心化,二是数据可验证性。 去中心化是指可以部署多个不同组织的预言机节点,通过区块链来保证去中心化。 比如超过2/3的预言机节点返回相同的结果,我们就认为预言机得到的结果是可信的。 预言机合约已经和普通的预言机合约融合在一起,所以也是通过共识。 只是因为它读取的是链外数据,所以本地没有办法验证这个数据,需要依赖预言机节点背书比特币扩展公钥,这和本地数据是不一样的。 二是数据可验证性,即如何验证外部数据是否有效。 这个过程就是预言机的链下数据也需要其他节点验证提交,必须写入区块文件。 链外数据需要对其数据格式进行标准化,以保证其可验证性。 首先是链外服务也必须有一个身份,即证书,它属于哪个组织或链,从哪个路径访问数据。 一,链外服务可能会提供 URL 等。 除了数据的原始内容外,还有数据的签名。 链下服务身份的私钥对原始数据进行签名。 这样,预言机的可信度就得到了保证。

3. 跨链互操作性

预言机只能解决链外数据读取的问题,但还有一个更复杂的问题,就是跨链互通。 跨链互操作不是简单的读取,而是指一笔交易可能同时修改多条链上的数据,这比跨链查询更复杂。 跨链互操作性面临三个挑战:

在现有的分布式系统中,已经有比较成熟的解决一致性问题的方案,比如通过协调器实现两阶段提交。 但问题是区块链需要去中心化,所以需要多个协调者做公证人,将公证人的集合做成一个联盟链,公证人以联盟链的形式进行协调。 三是跨链数据的可验证性。 对于区块链来说,很重要的一点就是数据可验证。 如果数据不可验证,则与常用的数据库没有区别。 比如在使用数据库的时候,客户端提交一个请求,数据库返回给我们一个成功的响应。 比如返回OK,我们就认为数据库中已经提交了数据。 这种方式对于区块链来说是不可验证的,因为对于区块链来说,它认为数据是不可信的。 因此,采用去中心化的、两阶段提交的方式来实现跨链互操作,保证交易的一致性。

腾讯云高可扩展性区块链平台原理剖析_java_03

我们将从交易链中选择多个节点作为一组公证人,公证人将协调不同子链之间的互操作。 为了保证跨链过程的可验证性,公证人集和子链之间需要相互验证。 相互验证包括两个部分。 一个是公证人会发起一个提案,就是双方都会按照我的提案来,所以这个提案需要验证。 因为它是由一组公证人发起的,而不是某个公证人,所以提案的可验证性是为了防止公证人作恶,双方的应用子链都需要验证公证人提案的有效性。 第二个方面是提交的可验证性。 提交可验证性是为了防止双方的应用子链作恶。 它需要一组公证人来验证应用子链交易的执行结果。 需要验证交易所在的区块是否已经确认提交,是否已经通过哈希形成一条链。 比如A链的用户要转10元给B链的用户,中间有一套公证人。 如果要完成交易,首先公证人聚集起来发起提案。 建议是左边的链A减去10元,右边的链B加10元。 发起的提案也是在区块链上进行的,区块链A和B都必须验证提案是否有效。 如果公证人作恶,给链A的提议是链A减10元,给B的提议是减20元,就会有问题。 这就是公证人作恶,所以公证人也必须去中心化,通过区块链进行投票。 另一方面,public collection也需要验证A和B是否真的提交了。 如何实现可验证性需要使用交易链。 交易链是由公证人组成的联盟链,管理跨链交易状态,公开记录跨链凭证。 跨链证书分为两部分,一是应用子链的跨链证书,二是公链的跨链证书。 子链的跨链证书包括子链的元信息和交易提交证书。 子链的元信息需要提前在交易链上公开。 在跨链过程中,公证人必须验证子链的区块和子链的交易凭证是否满足子链的提交条件。 公证人和公证人集的跨链证书,包括公证人提案的签名策略,提案的签名集。 因此,公证人需要提前将同意的提案写入交易链,以收集提案。 提案策略会规定一个有效的策略应该满足什么样的公证和条件,比如需要哪些公证人一起签名才是有效的提案,或者必须满足多少比例的签名才有效。 因此,在跨链过程中,子链也会验证公证集提案的签名是否符合提案策略,这是跨链互操作中数据可验证性的一些细节。

腾讯云高可扩展性区块链平台原理剖析_java_04

交易链作为一个去中心化的协调者,以两阶段的方式协调多个不同的应用链,以保持数据的一致性。 两阶段提交的第一阶段是预执行。 一笔交易必须由交易链中的智能合约发起,最终会触发应用链中智能合约的执行,调用应用链。 应用链智能合约执行过程中,会调用智能合约的API,读写本地区块链的账本。 当然,第一阶段只是预执行,并不是真正的提交。 所以当应用链的合约要调用API修改key时,需要先备份key。 原因是在跨链的过程中,可能提交成功了,其他链却执行不成功,这就需要后续回滚操作的支持。 所以需要提前做好备份,同时锁住key,防止在当前事务执行过程中被其他事务修改。 也就是说,当我的事务还没有提交的时候,其他事务也修改了这个key的值。 如果不加锁,回滚操作时就会出问题。 所以我们将把它变成 4 个操作。 第一步是查询key的原始值,第二步是锁定key,第三步是备份key的原始值,最后一步是真正修改key。 第二阶段有两种情况。 如果应用链在预执行阶段顺利,将进入第二阶段的确认分支。 确认分支相对简单。 第一阶段预先执行的备份会先被删除,然后解锁钥匙的锁定状态,完成交易。 如果一条应用链的第一步失败,则需要回滚其他链的预执行操作。 在回滚过程中,需要找出key的备份。 比如先取回备份,重置key的数据,最后释放锁。 这里会涉及到一个key的修改机制,换成4次读写操作。 为了减少开销,接下来的三个操作都是写操作,即接下来的三个写操作可以分批提交。 最终相当于一次读,一次写,两次请求。 添加两个阶段后,为了防止跨链交易逻辑侵入应用合约的开发过程,两个阶段执行过程的细节由系统完成。 比如一个合约要修改某个key,它其实并不知道底层做了多少步。 这样做的好处是可以支持不同的异构区块链。

腾讯云高可扩展性区块链平台原理剖析_java_05

我们看到跨链过程非常复杂,整个跨链过程也非常繁琐。 既要遵循去中心化,又要追求数据的可验证性,这导致跨链交易的效率非常低。 交易链作为多个应用链之间的通信中介,即使是简单的跨链操作也会涉及三个链,任何节点都无法独立做出决策。 就像三批人来开会,谁也做不了决定。 所以共识决策的过程是非常低效的。 为了找到平衡去中心化和效率的解决方案。 在某些场景下,我们会跨链成两个进程。 第一个过程是在线过程。 我们假设节点是可信的,没有节点会作恶。 我们可以像传统的中心化系统一样进行通信。 例如,如果在每条链中都找到一个代理,那么链之间的通信就变成了两个代理之间的通信。 在线过程中,任何交付都需要附有证书。 无论您是做出回应还是发起请求,您都将拥有自己的数字签名,以及提交过程中可验证的数据结构。 虽然为了简化流程不会实时进行验证,但在线过程中生成的各种凭证将在离线过程的第二部分进行验证。 因为是离线的,所以不会影响效率。 在追求效率的情况下,可以利用联盟链的实名制特点,将跨链过程分为线上和线下两部分,将一些复杂的东西放到线下对账过程中。

4. 区块链技术前景

除了上面提到的可扩展的跨链互联之外,还有一些更重要的区块链技术。 1. 链上链下协同

首先是链上和链下协作。 为了安全可靠,区块链牺牲了一定的效率。 如果想用这种低效的处理方式,将一个业务完全上链,场景是有限的。 区块链只能解决链上数据的可信问题,但在现实世界中,肯定需要考虑链上链下数据的协调。 比如,如何保证现实世界的数据映射到链上,是可信的。 例如,基于可信硬件的方法是先对链下数据进行预处理,处理完后再上传到链上。 也可以用一些可信系统做背书,就是一些链上链下协同相关的技术。

2.隐私保护

二是隐私保护。 区块链为跨组织的数据共享和协作带来便利。 与中心化的互联网业务相比,区块链在可靠性和隐私性方面将面临更大的挑战。 因为原始数据只需要在内部访问,现在可能会公开给其他联盟链的成员,所以会有很多数学方法,比如同站加密和零知识证明相关的技术。 但是复杂的计算需要用可信的硬件来实现。 可信硬件的原理是在可信硬件模块上运行一些我们保护的逻辑,这就要求硬件必须是可信的。 在外部,无法窥探或篡改内存中的运行逻辑和数据。 3.领域特定语言的智能合约第三种是领域特定语言的智能合约。 智能合约实际上是多方约定的规则或合约,本质上越简单越好。 一方面,简单意味着代码中的错误更少,另一方面,审计合约也很简单。 合约不像普通的程序,它会被更多人看到,不同的组织和公司必须共同审核它是否安全。 所以,在实际应用中,你会遇到成百上千行的智能合约。 这个逻辑非常复杂,对审核员的技术背景要求也比较高。 所以未来可能会有针对特定场景的智能合约。 因为针对特定的场景,开发部分会比较少,审计难度和bug都会有很大的改善。

问答

问:在知识产权保护方面有没有应用案例? A:在证书存储方面,腾讯云区块链与中网安、北明等多家外部厂商合作,打造了一个名为“智信链”的项目来保护知识产权。 Q:不同底层框架的区块链可以跨链吗? A:可以跨链,但是需要重新定义跨链协议。 比如基于Hyperledger或者Ethereum,协议之间是不互通的,需要另外一层封装才能进行异构跨链。 不同的区块链需要对协议进行适配,增加一个适配层。 There are currently many cross-chain solutions that support different underlying frameworks. But to do this, you need to adapt each blockchain yourself, or use an already adapted solution. Q: How to increase the speed of chain generation? A: The speed of chain generation should be the speed of transactions on the chain. The transaction performance of the blockchain in the alliance chain is not bad. If the main reason is that the consensus is relatively slow and there are many nodes, there are several solutions. For example, layering, or randomly selecting a part of nodes for consensus. There are fewer people who agree, and the speed of consensus is faster. Q: Verification is getting more and more complicated, how to ensure the speed? A: Part of the verification can be performed offline, which is very common in today's Internet scenarios. For example, there are often reconciliations between different business systems, such as reconciliation with banks, which are usually reconciled the next day, which is also an offline reconciliation. Because there is no way to completely guarantee that the data is consistent when online. Q: Can the public key be sent to anyone? A: The public key is public and stored in the identity. Anyone can see your public key in the identity chain. Only those who can see your public key can verify that your signature is correct. Q: How to build the alliance chain to ensure credibility? A: This question is quite typical. The most credible construction scheme of the alliance chain is that everyone deploys a node, then generates their own public-private key pair, keeps their own private key, and shares the public key. When the blockchain is not yet available, it needs to be shared in other ways, such as collecting all public keys by email, writing the consensus information into the blockchain, and the first transaction in the blockchain is born up.