/liquid

Primary LanguageRustApache License 2.0Apache-2.0

Liquid - Makes Smart Contract Smarter

GitHub license Code Lines Latest release Language

Liquid 由微众银行区块链团队开发并完全开源,是一种嵌入式领域特定语言( embedded Domain Specific Language,eDSL),能够用来编写运行于区块链底层平台FISCO BCOS的智能合约。

关键特性

安全(Security)

  • 支持在智能合约内部便捷地编写单元测试用例,可通过内嵌的区块链模拟环境直接在本地执行;

  • 算数溢出及内存越界安全检查;

  • 能够结合模糊测试等工具进行深度测试;

  • 未来将进一步集成形式化验证及数据隐私保护技术。

性能(Performance)

  • 配合 LLVM 优化器,支持将智能合约代码编译为可移植、体积小、加载快 Wasm 格式字节码;

  • 对 Wasm 执行引擎进行了深度优化,并支持交易并行化等技术;

  • 结合 Tree-Shaking 等技术,进一步压缩智能合约体积。

体验(Experience)

  • 支持使用大部分现代语言特性(如移动语义及自动类型推导等);

  • 提供专有开发工具及编辑器插件辅助开发;

  • 丰富的标准库及第三方组件。

可定制(Customization)

  • 能够根据业务需求对编程模型、语言文法的进行深度定制。

  • 未来还将进一步探索如何与隐私保护、跨链协同等功能相结合。

合约示例

使用 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 版本(Minimum Supported Rust Version,MSRV)

Rust Nightly 1.52 或更高。

License

Liquid 的开源协议为 Apache License 2.0,详情请参考LICENSE