Liquid 由微众银行区块链团队开发并完全开源,是一种嵌入式领域特定语言( embedded Domain Specific Language,eDSL),能够用来编写运行于区块链底层平台FISCO BCOS的智能合约。
-
支持在智能合约内部便捷地编写单元测试用例,可通过内嵌的区块链模拟环境直接在本地执行;
-
算数溢出及内存越界安全检查;
-
能够结合模糊测试等工具进行深度测试;
-
未来将进一步集成形式化验证及数据隐私保护技术。
-
配合 LLVM 优化器,支持将智能合约代码编译为可移植、体积小、加载快 Wasm 格式字节码;
-
对 Wasm 执行引擎进行了深度优化,并支持交易并行化等技术;
-
结合 Tree-Shaking 等技术,进一步压缩智能合约体积。
-
支持使用大部分现代语言特性(如移动语义及自动类型推导等);
-
提供专有开发工具及编辑器插件辅助开发;
-
丰富的标准库及第三方组件。
-
能够根据业务需求对编程模型、语言文法的进行深度定制。
-
未来还将进一步探索如何与隐私保护、跨链协同等功能相结合。
使用 Liquid 编写的 HelloWorld 合约如下所示:
#![cfg_attr(not(feature = "std"), no_std)]
use liquid::storage;
use liquid_lang as liquid;
#[liquid::contract]
mod hello_world {
use super::*;
#[liquid(storage)]
struct HelloWorld {
name: storage::Value<String>,
}
#[liquid(methods)]
impl HelloWorld {
pub fn new(&mut self) {
self.name.initialize(String::from("Alice"));
}
pub fn get(&self) -> String {
self.name.clone()
}
pub fn set(&mut self, name: String) {
self.name.set(name)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn get_works() {
let contract = HelloWorld::new();
assert_eq!(contract.get(), "Alice");
}
#[test]
fn set_works() {
let mut contract = HelloWorld::new();
let new_name = String::from("Bob");
contract.set(new_name.clone());
assert_eq!(contract.get(), "Bob");
}
}
}
阅读Liquid 在线技术文档,详细了解如何使用 Liquid。
Rust Nightly 1.52 或更高。
Liquid 的开源协议为 Apache License 2.0,详情请参考LICENSE。