35个版本

0.5.2-dev.02024年2月20日
0.5.1 2023年12月5日
0.5.0 2023年11月6日
0.4.4 2023年7月10日
0.1.5 2022年2月25日

#2701 in 魔法豆

每月49次下载
5 个crate中(3个直接) 使用

Apache-2.0

80KB
1K SLoC

Phala的ink! - 编写增强型智能合约

Pink! 是一种扩展Parity的 ink! 的智能合约语言。它通过添加额外功能扩展了基本功能,以有效地与Phala的Phat Contract运行时交互。

入门

未经修改的 ink! 合约在Phala的Phat Contract平台上完全兼容并可执行。要了解如何使用 ink! 开始编写合约,请遵循Parity的 ink! 文档

要开始使用Pink!,请将以下依赖项添加到您的 Cargo.toml

[dependencies]
ink = { version = "4", default-features = false }
pink = { package = "pink-extension", version = "0.5", default-features = false }

[features]
std = [
    "ink/std",
    "pink/std",
]

然后,您可以使用 http_get! 宏向远程服务器发出GET请求

#[ink::message]
fn http_get_example(&self) {
    let response = pink::http_get!("https://httpbin.org/get");
    assert_eq!(response.status_code, 200);
}

Phat Contract特定功能

Pink! crate旨在赋予您权力,使您能够利用Phat Contract的独特功能,例如在我们的示例中展示的HTTP请求。此crate提供与Phat Contract运行时无缝交互所需的必要类型和函数。

有三种类型的API用于与运行时通信

  • 触发事件:这些API主要用于可能产生副作用且需要可确定记录并在合约调用执行期间可能回滚的操作情况。有关触发事件API的更多信息,请参阅 PinkEvent 文档

  • 链扩展:这些API主要用于只读操作或不会产生确定性副作用的操作。要深入了解链扩展API,请参阅PinkExt文档

  • 系统合约:每个集群中都有一个特殊的系统合约。系统合约在创建集群时被实例化。ink合约或外部账户都可以调用系统合约来执行某些操作。关于系统合约的更多信息,请参阅系统文档

对于实际实施示例,请探索我们的Phat合约示例仓库。

使用JavaScript与Phat合约

Phat合约通过phat-quickjs合约支持JavaScript。

在合约中使用JavaScript有两种方式

  • 您可以通过标准部署过程部署您的phat-quickjs合约实例。

  • 但是,为了更方便的方法,大多数公共集群应该已经部署了一个公共驱动quickjs合约。您可以使用以下命令获取合约code_hash:System::get_driver("JsDelegate")

  • 对于最简单的集成,考虑使用phat_js crate。它提供了一个eval函数,允许您直接评估JavaScript代码片段。例如

    #[ink::message]
    fn eval_js_example(&self) {
        let result = phat_js::eval("'Hello,' + 'World'", &[]);
        assert_eq!(result, phat_js::Output::String("Hello,World".to_string()));
    }
    

依赖项

~8–19MB
~249K SLoC