专栏首页区块链深度享云链关键技术源代码追踪及关键函数试拆解
原创

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

继享云链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是如何设计和执行合约代码。

总结

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 智能合约是怎样运作的?三分钟读懂智能合约

    当今社会,执行合约需要耗费大量社会资源。比方说,A、B两家公司签订合同,后来A违反合同条约,导致B损失重大。B想要拿回属于自己的东西,于是向法院起诉。就算B打官...

    互链脉搏
  • 互链脉搏对话IPFS布道者董天一:继比特币、以太坊、EOS之后又一个区块链现象级应用

    在历经沸沸扬扬的超级节点竞选后,EOS热潮逐渐退却,但在业界,另一个被称为区块链中拜火教的IPFS正受到越来越多人的关注。

    互链脉搏
  • 码农看享云链多资产token技术的原理与应用

    企业为什么需要多资产token? 区块链上token是安全、可流通的数字权益证明,它可以代表任何的权益,比如使用权、股权等等。现实生活中的各种权益证明,不管是所...

    互链脉搏
  • leetcode-11-盛最多水的容器

    给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai...

    chenjx85
  • 大神总结的机器学习的数学基础,掌握这些足够

    机器学习AI算法工程
  • 多表查询经典例子

    create table students (sid char(8) primary key not null comment ‘学号’,name varcha...

    苦咖啡
  • 推送-远程通知推送教程

    本文翻译自:raywenderlich.com,原文作者:Jack Wu,译者:JMStack

    進无尽
  • libevent源码深度剖析(五) libevent的核心:事件event

    (1)libevent源码深度剖析一 序 (2)libevent源码深度剖析二 Reactor模式 (3)libevent源码深度剖析三 libevent基...

    范蠡
  • [技术分享]携程App的网络性能优化实践

    在4月23日~25日举行的QCon全球软件开发大会(北京站)上,携程技术中心无线开发总监陈浩然分享了《移动开发网络性能优化实践》,总结了携程在App网络性能优化...

    携程技术
  • 【大咖说】工信部副部长:工业互联网成制造业转型关键

    导读:在第十六届中国经济论坛上,工信部副部长陈肇雄指出,当前我国经济传统动力衰减,制造业供给结构错配问题也日益凸显,急需利用网络化、信息化手段加快推动制造业结...

    钱塘数据

扫码关注云+社区

领取腾讯云代金券