3月6日结束的2024年长安链技术路线规划直播中,由两位长安链架构师与社区开发者同步了接下来一年长安链主要的技术迭代规划与商业化支持策略。长安链2023年发布了2.3.x版本作为Lts版本,无论从功能、稳定性、性能和安全性上都更满足生产需求,又以大规模、高安全、广兼容、更易用为目标发布了开源功能版 v3.x。
2024年长安链将面向几个方向做更多工作:可用性、高性能、隐私性和开放性。
可用性
分级按需的同步模型。目前同步节点同步数据是全量数据同步,实际应用中很多业务场景中只需要同步一部分数据。长安链将数据从网络源头控制数据同步,也就是说部分数据同步的情况下即使是网络抓包也看不到全量数据,并且支持不完整数据下的区块验证。
源码安装支持。解决跨平台、跨架构的长安链安装问题。
多模块状态数据查询。目前有很多企业基于长安链做了BaaS等平台产品,支持存储、共识、VM等核心模块的当前状态查询可以增强平台的告警监控能力。
DockerJava合约大小优化。目前3.0版本中把用户用到的jar包都打包进去,jar包相对较大,后面考虑提前加载或帮用户编译的方式降低Docker Java合约大小。
自定义交易优先级。实际场景中用户有时候会希望交易优先上链。目前长安链交易分两种类型,配置类交易和普通交易(即正常的业务交易),配置类交易会优先上链,普通交易占大部分是按照先来先上链的顺序,后面计划增加自定义交易优先级的能力。
性能
长安链一直持续在做性能优化,目前计划有几点优化方向:
流水线模型。主要是针对长安链交易执行过程的调整,长安链的从节点在收到主节点的提案之后就会执行交易,我们发现把交易执行过程放到整个区块的共识之后性能会更高,这就要求我们处理随机函数类交易执行结果不一致的问题。
确定性调度算法。长安链目前主要是非确定性调度算法,一般是主节点把交易的调度DAG确定下来,从节点按照DAG模型支持,主节点和从节点是串行执行,后面增加确定性调度算法使主从串行执行模型调整为主从并行执行模型。
自研嵌入式存储引擎。实际的工作中我们发现,区块链和其他的使用数据库的系统有很大区别,对于区块链而言高度是非常重要的指标,我们利用高度的特点考虑自研区块链专用存储引擎。
Docker引擎优化机制。目前长安链Docker引擎为了处理死循环的问题采用进程的管理机制,实际上一个区块在一段时间内如果调用的合约非常多,就会出现进程启停的情况。我们将优化进程管理机制,尝试协程、线程模型,降低资源消耗,提高合约加载效率和执行性能。
支持Redis存储模型。Redis是市面上比较重要的KV存储模型,适合查询比较多的应用场景,我们将进行支持。
隐私性
敏感数据的隐藏。部分业务方希望上链的数据只有一部分相关方能看到,其他相关方看不到,或部分业务方只希望公开部分数据,针对此类需求我们正在考虑相关的支持方案。
数据落盘加密。目前长安链支持一部分数据落盘加密,后续将支持写入数据库的Value自动加密,从数据库获取后会自动解密。
私有数据集。和敏感数据隐藏有些类似,数据仅在共识时对指定可见方可见,在达成共识后不会存储。
开放性
开放性部分欢迎社区成员的积极参与,可以公众号后台或联系开源社区小助手。
Go合约本地调试。此功能将不需要单独起一条链调试,我们会提供一个模块,按照我们的模板在内部调试我们的合约。
异常注入功能。目前长安链为了安全性考虑已经开发了一套非嵌入式的异常自检机制,可以在不嵌入长安链代码的情况下检查是否有安全性上的异常,目前支持共识、交易池、核心引擎等多个模块。后续计划开源出来,支持外部开发者自定义异常注入,届时欢迎社区贡献。
Binlog数据分发。业务场景上的需求,例如部分业务方由于网络原因,没办法通过同步模块导入数据,会希望以文件的方式导入数据。
直播精彩问答
1、Q:2.0到3.0可以直接升级吗?什么时候3.0开始有LTS版本?
A:3.0以前的版本想要升级到2.3.0以后,需要先升级到2.3.0过渡。具体升级方案见:https://docs.chainmaker.org.cn/v3.0.0/html/instructions/%E7%89%88%E6%9C%AC%E5%8D%87%E7%BA%A7%E8%AF%B4%E6%98%8E.html。目前的v3.0.0就是LTS版本,后续也会支持平滑升级到v3.0.0的后续版本。
2、Q:3.0可以接入remix了,是不是意味着可以使用web3j的工具调用长安链了?
A:需要部署chainmaker-x-web3,就可以兼容现有web3生态。现在是使用一种全新的交易类型,以及交易处理流程来兼容web3生态工具,偏探索性质,建议用户先体验。
3、Q:共识算法动态切换是自发切换吗?
A:不是,需要用户发送共识算法切换的交易,达成共识后才会实际切换成功,建议网络比较稳定时操作,因为切换时会检查节点间的连接状态。
虽然不支持自发切换,但是用户可以自己在外部实现类似功能,例如检查到安全性比较高场合,性能较低时,可以将TBFT切换为RAFT。
4、Q:3.0交易优先级会有什么策略排优先级?
A:尚未完全确定,目前可想到的策略优先级主要包括以下几部分:
1) 按照合约来排序;
2) 按照组织来排序;
3) 用户在交易中自定义优先级;
另外也欢迎社区提供自己的建议。
5、Q:这种流水线模型是那种类似hotstuff的流水线共识吗?
A:类似,现有的长安链执行逻辑是这样的,首先主节点执行一批交易,形成一个提案,广播给从节点,从节点会按照主节点提案中的DAG执行交易,然后共识,最后达成一致。我们在实际测试中发现,如果将从节点执行交易这个流程移动到达成共识后,性能会更高,也就是说共识的仅仅是区块本身(没有执行结果),就会存在类似DockerGo这种合约会出现随机函数类交易的问题,所以方案就是会将这个执行结果伴随着下个区块的提案一起广播,这种处理非常类似于HotStuff的处理思路,所以我们称为流水线模型。
6、Q:兼容性这里比较复杂,需要怎么设计呢?比如执行有个bug,新版本修了,如何让新版本兼容同步老版本的区块执行结果?
A:在长安链中有两个版本号,一个是链版本号,一个是二进制版本号,链版本号指的是目前这条运行的链的版本号,它是写在数据库中的(配置文件),二进制版本号指的是在代码中写的这个二进制的版本号信息。在实际处理兼容性的时候,举个例子,假设在2.3.1发现了一个BUG,在232进行了修复,那么处理逻辑就是判断当前的链版本号是否是231,如果是231就走原逻辑,如果不是,则走新的逻辑。在升级时,需要等全网的所有节点全部替换二进制后,由用户发送一笔升级链配置的交易,实现逻辑处理的调整,在这笔交易生效之前,虽然二进制版本是2.3.2,但逻辑仍然是2.3.1的。
7、Q:Java SDK支不支持同态加密、分层加密等go实现的那些密码学算法?
A:支持分层加密,其他暂不支持。可借鉴分层加密引入的技术路线,自行实现。