享云链关键技术源代码追踪及关键函数试拆解

继享云链7月份发布白皮书之后,享云链“郑和”版本于8月21日开源发布(开源地址:https://github.com/lianxiangcloud/linkchain)。在它的白皮书路线图中描述了该版本支持UTXO和ACCOUNT双账户模型、隐私的UTXO交易、支持EVM和WASM双虚拟机等几大亮点。本着学习的态度来了解一下具体实现原理,然而开源项目中几乎没有这几点的设计说明文档,所以只能跟踪源代码并记录一些关键函数:

代码结构
“郑和”是享云链第二个开源版本,第一个版本在6月份开源(开源地址:https://github.com/lianxiangcloud/lk-chain)。该版本相对于第一次开源代码来说进行了一次模块化设计和开发,丢弃了双进程设计并进行了业务模块的整合,但大部分模块内部代码没变。对照模块图在项目中找到相应代码还算容易,如accounts(账户)、consensus(共识算法)、vm(虚拟机)、p2p等。
在这里插入图片描述
utxo目录乍一看还以为UTXO类型定义、业务逻辑等相关的模块,但其中就一个UTXO交易的存储实现,类型定义和业务逻辑在其他目录,这个单独列出来没明白用意,不知道为什么不和其他数据整合成一个存储模块。
虽然项目进行了模块化设计,但模块化的耦合性比较高,核心模块的二次开发或者替换比较困难,被第三方项目直接引用也不太容易。

双账户模型
双账户模型(ACCOUNT+UTXO)是当前所有区块链公链项目首次支持的功能,听起来比较特别,好不好用就看以后用户端的设计。从代码中看到UTXO模型只用于隐私交易,非隐私交易就需要用ACCOUNT模型,这样设计的目的应该是为了兼容当前享云链上的所有账户数据,同时支持隐私交易,毕竟ACCOUNT账户模型对用户管理资产来说比较友好同时享云链的用户数比较多。
针对当前的ACCOUNT账户,收发隐私交易不需要另外创建和保存UTXO相关的公私钥。享云链根据ACCOUNT账户的私钥自动生成了UTXO隐私交易需要使用的公私钥,即只要有一个ACCOUNT账户私钥就拥有了UTXO交易的公私钥,用户只保存一个私钥文件,这一点说明设计人员还是考虑了用户体验。
在这里插入图片描述
数据类型
除了主要的资产转移的交易,享云链还支持多种其他格式的数据类型,包括合约创建、合约更新、多重签名账户、跨链交易等。每种类型都实现了统一的接口,预留了扩展数据类型的可能性。
在这里插入图片描述
合约创建和合约升级定义了单独了数据类型,这一点和以太坊创建合约方式不同,单独的合约升级数据类型也说明支持业务合约代码在线升级。数据格式中的签名字段可以存储多个,说明支持多个签名;同时定义了跨链交易类型,但没有太多实现细节。

隐私交易
支持隐私交易是享云链亮点之一,通过UTXO交易格式来实现资产转移双方的账户和金额隐藏,避免账户的交易细节被追踪。隐藏账户和金额的实现细节是通过cgo的方式调用Monero(门罗币)相关加解密算法函数,在享云链xcrypto目录下封装了相关的调用函数。该项目中没有隐私交易实现原理的介绍,可以去看门罗币的文章,讲的很清楚,否则理解不了UTXO交易中的字段含义。
在这里插入图片描述
在这里插入图片描述
UTXO交易的INPUT(输入)和OUTPUT(输出)都被扩展了,输入和输出都可以是UTXO和ACCOUNT类型。ACCOUNT类型部分字段也与金额隐藏有关,这个地方有些复杂很不好理解。
隐私交易发生的资产转移手续费,从wallet(钱包)相关代码中看出是动态更新的,再进一步跟踪发现是通过合约来更新。虽然手续费的变更透明且有据可查,但谁来更新手续费当前没有相关说明。
在这里插入图片描述
双虚拟机
享云链支持EVM和WASM双虚拟机,EVM使用了以太坊的开源版本,WASM使用了迅雷链的开源项目tc_wasm。具体实现方式是在执行合约之前先通过合约代码获取对应的虚拟机实例,然后再执行合约调用。这里可以说明一下,WASM编译器编译出来的合约代码是有标识符的,所以通过合约代码可以判断出来是用EVM执行还是用WASM执行。
在这里插入图片描述
虽然是支持了双虚拟机,但都用的开源项目,这一技术创新点不是很足,其他项目如果想实现双虚拟机,估计也就几天时间就支持了。双虚拟机没啥要研究的,想学习技术还是去了解开源项目EVM和WASM是如何设计和执行合约代码。

总结
“郑和”版本是享云链白皮书发布之后的第一个升级版本,从当前的两次开源代码来说,享云链技术团队的效率非常高。项目中隐私交易是核心,交易类型设计的比较复杂,有一定的学习门槛,最好提前看点门罗币文档再深入细节。

发布了5 篇原创文章 · 获赞 1 · 访问量 758

猜你喜欢

转载自blog.csdn.net/qq_26600861/article/details/100099612