写点什么

微众银行区块链开源基于 Rust 的 Wasm 合约语言框架 Liquid

用户头像
Patract
关注
发布于: 2021 年 04 月 01 日
微众银行区块链开源基于Rust的Wasm合约语言框架Liquid

今天微众银行区块链发布了关于《Liquid 智能合约编程语言新探索》的白皮书,Patract 公众号后台回复 Liquid,下载白皮书。


Patract CTO Aten 对此给予了高度评价:


Liquid 是联盟链 FISCO-BCOS 新提出的基于 Rust 的 Wasm 合约语言框架。该合约语言参考了 Parity 的 Wasm 合约语言框架 ink!,并融合了许多 FISCO-BCOS 的合约特性。同时在此基础上根据常用场景设计了线性资产模型(LAM)与可编程分布式协作(PDC)的场景适应型定制能力,减少相同场景下的开发人员的负担。后续隐私和跨链的属性的相关功能在研发中。总体而言,Liquid 证明了 ink! + Wasm 合约的模式在联盟链中的可行性。

 

01 智能合约编程语言现有挑战


不断多样化、复杂化的应用场景给智能合约编程语言提出全新挑战:

  • 进一步重视数据隐私,智能合约下辖的数据需能够明确权限归属;

  • 分布式、不可篡改的执行环境要求智能合约具备更强的鲁棒性;

  • 日渐扩大的服务规模要求智能合约能够更加高效运行;

  • 为了提升开发效率,开发过程需要对开发者更加友好;

  • 不断涌现的跨链等新型计算范式要求能够直接提供原生抽象;

  • 常见的智能合约编程语言在这些方面均存在不同程度的局限性,制约了分布式应用的进一步发展。

 

微众银行区块链着眼于现有挑战,结合在区块链底层核心技术以及分布式商业应用落地的探索实践,提出涵盖安全(Security)、性能(Performance)、体验(Experience)及定制能力(Customization )四个方面的“SPEC”智能合约编程语言设计规范。

 

在“SPEC”设计规范的基础上,微众银行区块链推出全新的智能合约编程语言 Liquid。



02 线性资产模型


当使用区块链上的智能合约管理资产时,我们希望合约语言保证资产能够被灵活管理的同时安全的转移。Liquid 提供一种安全的资产模型,允许用户定义资产类型,资产类型模拟现实中资产的行为,提供一系列安全特性,包括用户声明的资产类型在 Liquid 合约中不可以被复制,代码块中的资产实例在生命周期结束前必须被存储到某个账户,以及资产存储在用户的账户内、自带溢出检查。

 

03 开发者期望更佳体验

 

智能合约编程语言的用户体验可以分别从狭义和广义两个角度进行理解。狭义上,用户体验取决于集 成开发环境(IDE)、智能感知工具、调试器及测试工具等是否完善、好用;广义上,用户体验取决于围绕语言构建的社区以及周边文档、课程等资源是否活跃、丰富。狭义的用户体验负责“硬”,能 够帮助开发者提高开发效率、优雅地完成开发任务;广义的用户体验负责“软”,有助于降低开发者 的学习门槛,快速解决使用问题和激发开发者的反馈热情。只有软硬结合,才能使得智能合约编程语 言生态繁荣,不断在良性发展的道路上前进。

 

纵观历史,任何一门成功的编程语言都必定伴随有强大且多样的周边生态。但在当前智能合约编程语 言中,以使用范围最广的智能合约语言 Solidity 为例,尽管在区块链领域 Solidity 的周边工具配套较 为完善,但相对于通用编程语言而言,其生态建设仍然有很长的路要走。

 

04 新型智能合约语言 Liquid

 安全 

 

在隐私保护方面,Liquid 能够更好地保护特殊数据,并控制隐私数据的访问权限。Liquid 首先使用加密原语对特殊数据进行隐匿,当用户更新数据时,使用非交互式零知识(Non-Interactive ZeroKnowledge,NIZK)证明强制证明状态更新的正确性。具体地,如果 Liquid 开发者想确保合约中的某些变量的值不会被披露在区块链上,只需要在相关的状态变量后面,用 Liquid 提供的加密原语标 注能够读写该状态变量的账户地址即可,即明确数据的归属权。

 

 性能 

 

在合约运行效率方面,Liquid 使用 Wasm 引擎来负责合约的执行。Wasm 是一种可移植、体积小、 加载快的字节码格式,Liquid 支持将合约代码编译为精简的 Wasm 格式字节码,从而使得智能合约 能够以更高的效率在区块链系统中运行。Wasm 目前有多种高性能的虚拟机实现,理想状况下虚拟机 性能可接近本地二进制代码的执行效率。另外,Wasm 最初是为浏览器的运行环境而设计,天然具备 沙盒属性,方便与外界隔离,契合区块链的技术需求。再者,Wasm 设计简洁、安全,能够将可能的 攻击面最小化,这一点同样符合区块链对于安全性的需求。据了解, Wasm 标准仍会不断进步,在未 来还可能会引入并行、多返回值、动态链接等高级特性,选用 Wasm 可持续从其中受益。

 

 体验 

 

基于 Rust 语言繁荣的发展与生态,Liquid 在体验方面,为智能合约开发带来事半功倍的效果。

 

首先,Liquid 拥有完善的开发库,这也得益于 Rust 语言中第三方库的发展非常迅速。通过包管理工 具 Cargo,只要第三方包能够支持“no_std”特性,就能够在 Liquid 项目中使用。开发者仅需要在 项目配置文件中声明所依赖的第三方库名、版本及特性即可在项目中使用。而且,目前在 Rust 语言 生态中,越来越多的第三方库开始支持“no_std”特性,包括可用于 JSON 编解码的 serde、管理全 局静态变量的 lazy_static 等。同时,Cargo 也为项目的打包、发布提供了一键式管理,大大减轻了开 发人员的负担。

 

再则,Liquid 能够和现有开发工具有机结合。在开发 Liquid 项目时,开发者能够使用 GDB、LLDB 等工具对合约进行快速调试,也能够使用 cargo-fuzz 等模糊测试工具对合约进行深入测试,此外,还 可以通过 wasm-opt、wasm-strip 等工具进一步优化字节码的体积与效率。在众工具加持下,开发者 能够以更好的体验开发出更高效、健壮的 Liquid 项目。

 

 定制能力 

 

在实现机制上,Liquid 广泛地使用了 Rust 语言中基于宏的元编程技术,能够在编译阶段对由源代码 生成的 AST 进行任意修饰,因而能够赋予既有语法更多的语义内涵。借助这一特性,Liquid 除了可 以提供传统的智能合约编程模型外,还能够在区块链底层平台提供的接口基础上,结合现实中的业务 需求定制更为简洁、强大的编程模型。例如 PDC 及跨链协同。PDC 能够帮助开发者轻易地模拟现实商业合作中多方缔结合同的行为。在这类多方协作场景中,多涉 及参与方、合同签署、权利授予等概念,而这些概念的实现往往琐碎且复杂,开发者难以驾驭。而且, 这类场景中往往又对编码的正确性十分敏感,因为多个组织通过相同的智能合约进行合作,任何错误都可能会通过链式反应逐级放大,从而造成巨大的商业损失。针对这一痛点,PDC 提供了专门针对商 业合同的高级抽象,通过特定语法帮助开发者直接以自然语言的思维编写合同,例如对于简单的借据 合同,在 Liquid 中可能够如下方式实现:

 

在跨链协同方面,随着区块链适用场景日益增多,链间互操作问题亟需解决。不仅如此,因为不同链 的账户状态由不同链维护,互相不可见,它们的更新也被不同链所驱动,要实现具备原子性的链间 互操作面临巨大挑战。为了解决这个问题,Liquid 使用内部交易封装跨链操作,类似在同一条链上 利用内部交易进行跨合约调用操作,不同的是该内部交易会带有发起跨链操作合约的签名,接着,由 当前链的节点广播进行广播。同时,其它链的节点会监听跨链交易,如果识别到该交易的目的地为自 己,就会像普通交易那样将交易打包上链。待交易执行完成后,所返回的数据将会以回调的形式通知 原合约,以继续执行后续逻辑。开发者无需处理跨链合约调用过程中的验证和异步等,仅需以常见的 async/await 异步编程方式编写合约代码即可。

 

 关于微众银行区块链 2021 年技术路线 :

 

Q1 基 础 版 本: 完 成 Liquid 基 本 合 约 编 程 模 型、LAM、PDC 以 及 cargo-liquid 的 开 发, 并 完 成 Node.js SDK 的适配工作,发布 Liquid 社区体验版;

 

Q2 并行化与隐私保护解决方案:基于 Liquid 社区体验版本,完成合约自动并行化方案及基于 NIZK 的数据确权方案的语言设计及开发;

 

Q3 跨链协同解决方案:在语言层面完成与 WeCross 跨链技术的整合,研究跨系统合约调用、资产 转移的异步化方案,实现跨链流程的轻量化、便捷化;

 

Q4 形式化验证方案:基于前置属性规范、符号执行、数据流分析、代码验证中间语言等技术,在 Liquid 中对合约形式化验证提供支持,帮助开发者编写更加安全、健壮的智能合约。

 

文档地址:

https://liquid-doc.readthedocs.io/zh_CN/latest/

GitHub 代码库地址:

https://github.com/WeBankBlockchain/liquid

Gitee 代码库地址:

https://gitee.com/WeBankBlockchain/liquid

About Patract 


Patract 为波卡 Wasm 合约生态的平行链和 DApp 开发提供解决方案。我们帮助社区平行链设计和开发链上合约模块和 Runtime 支持,并且为 DApp 开发者提供覆盖开发、测试、调试、部署、监控、数据提供和前端开发等阶段的全栈工具和服务支持。


How to join Patract


1.对于合约开发者,可以访问官网 (https://patract.io),熟悉测试链和工具套件。欢迎加入官方开发群:

Elementhttps://app.element.io/#/room/#PatractLabsDev:matrix.org

Discordhttps://discord.gg/wJ8TnTfjcq

搜索“Patract 开放平台”关注 Patract 微信公众号

 

2.对于将要集成 Wasm 合约功能的平行链项目方,或者使用 Wasm 合约开发的 DApp 项目方,商务合作欢迎联系 santry@patract.io

 

3.对于用户,欢迎加入:

Telegramhttps://t.me/patract

Twitterhttps://twitter.com/PatractLabs

 

4.对于求职者,我们在招聘区块链开发工程师、前端/全栈开发工程师、开发者运营等岗位,可以联系 sean@patract.io

用户头像

Patract

关注

还未添加个人签名 2021.03.12 加入

Patract的使命是加速智能合约行业向Wasm技术栈的转变。

评论

发布
暂无评论
微众银行区块链开源基于Rust的Wasm合约语言框架Liquid