2 个版本

0.4.1 2024年2月27日
0.4.0 2024年2月27日
0.1.0-dev.0 2024年2月22日
0.0.0 2024年1月19日

#1921 in 神奇豆子

Download history 13/week @ 2024-04-22 7/week @ 2024-04-29 11/week @ 2024-05-06 21/week @ 2024-05-13 49/week @ 2024-05-20 48/week @ 2024-05-27 33/week @ 2024-06-03 32/week @ 2024-06-10 31/week @ 2024-06-17 28/week @ 2024-06-24 43/week @ 2024-07-08 43/week @ 2024-07-15 23/week @ 2024-07-22 24/week @ 2024-07-29 25/week @ 2024-08-05

每月 117 下载量
7 crates 中使用

Apache-2.0

77KB
958

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 = { version = "0.4", 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
~246K SLoC