#parity #edsl #blockchain #parity-wasm #wasm #define

contract-extrinsics

定义在 substrate 上智能合约的外部数据的库

11 个版本 (5 个稳定版)

4.1.1 2024 年 4 月 17 日
4.1.0 2024 年 4 月 10 日
4.0.2 2024 年 3 月 14 日
4.0.0-rc.32024 年 2 月 29 日
3.1.0 2023 年 7 月 26 日

#279 in 魔法豆

Download history 237/week @ 2024-04-15 203/week @ 2024-04-22 57/week @ 2024-04-29 421/week @ 2024-05-06 319/week @ 2024-05-13 365/week @ 2024-05-20 152/week @ 2024-05-27 191/week @ 2024-06-03 193/week @ 2024-06-10 416/week @ 2024-06-17 566/week @ 2024-06-24 610/week @ 2024-07-01 268/week @ 2024-07-08 96/week @ 2024-07-15 699/week @ 2024-07-22 128/week @ 2024-07-29

1,201 每月下载
4 个crate中使用 (3 个直接使用)

Apache-2.0

600KB
14K SLoC

合约外部数据

定义了针对 substrate 的智能合约的外部数据。

目前是 cargo-contract 的一部分,这是用 ink! 编写的智能合约的构建工具。

常见参数

--suri

用于签名外部数据的秘密 URI。对于开发链,可以使用众所周知的授权账户,例如 //Alice。对于其他账户,必须提供实际的密钥,例如以 0x 前缀的 64 位十六进制字符串,或助记词。请参阅 subkey 的使用示例和文档,以及 解析代码 中预期值的文档。

⚠️ 警告 ⚠️

强烈建议不要在命令行中使用实际价值链中的密钥,因为它们会显示在屏幕上,并且通常会被保存到命令行外壳的历史记录中。目前,这个工具应该仅用于开发和测试网络。在使用价值链之前,优先考虑实现一种更安全的方法来在此处签名。

--password

可选。为 --suri 设置密码,请参阅 https://docs.substrate.io/reference/command-line-tools/subkey/#password-protected-keys

--manifest-path

可选。合约 crate 的 Cargo.toml 路径。使用此路径可以从合约的项目目录外运行命令。

--url

可选。目标链上 RPC 节点的 WebSocket URL。默认为本地运行的节点 "ws://127.0.0.1:9944"。

-x/--execute

可选。默认情况下,所有外联命令都不会改变链状态。此标志指定外联需要在链上执行。

--storage-deposit-limit

可选。可以从调用者那里收取的最大余额,以支付消耗的存储。

命令

upload

将合约的 Wasm 代码上传到目标链。调用 upload_code 可调度。

例如 cargo contract upload --suri //Alice

假设已经运行 cargo contract build 以生成合约工件。

instantiate

在链上创建合约的实例。如果代码已经通过 upload 上传,指定产生的 --code-hash,这将导致调用 instantiate。如果没有指定 --code-hash,它将尝试通过 instantiate_with_code 可调度来上传代码和实例化。

例如:

cargo contract instantiate \
       --constructor new \
       --args false \
       --suri //Alice \
       --code-hash 0xbc1b42256696c8a4187ec3ed79fc602789fc11287c4c30926f5e31ed8169574e
  • --constructor 要调用的合约构造函数方法的名称。
  • --args 接受一个空格分隔的值列表,按顺序编码为要调用的构造函数的参数。
  • --code-hash 上传的代码的哈希值,从 contract upload 调用或之前的 contract instantiate 返回。

call

通过 call 可调度在合约实例上调用消息。

例如:

cargo contract call \
       --contract 5FKy7RwXBCCACCEPjM5WugkhUd787FjdgieTkdj7TPngJzxN \
       --message transfer \
       --args 5FKy7RwXBCCACCEPjM5WugkhUd787FjdgieTkdj7TPngJzxN 1000 \
       --suri //Alice
  • --contract 要调用的合约的账户 ID,在成功执行 contract instantiate 后返回。
  • --message 要调用的合约消息的名称。
  • --args 接受一个空格分隔的值列表,按顺序编码为要调用的消息的参数。

remove

将合约的 Wasm 代码从目标链移除。调用 remove_code 可调度。

例如 cargo contract remove --suri //Alice

假设已运行 cargo contract buildcargo contract upload 命令以生成合同工件。此命令只有在没有此代码的合同实例的情况下才会成功。已从该代码实例化的合同必须自行 terminate 或通过向 pallet_contractsset_code 调用来更改其代码。

cargo contract remove \
       --suri //Alice \
       --code-hash 0xbc1b42256696c8a4187ec3ed79fc602789fc11287c4c30926f5e31ed8169574e
  • --code-hash 上传代码的哈希,由 contract upload 调用返回。如果没有指定,代码哈希将从合同工件中获取。

指定合同工件

上述示例假设工作目录是合同源代码所在的目录,其中包含 Cargo.toml 文件。这用于确定合同工件的位置。或者,每个外设命令都有一个可选的位置参数,可以直接指定合同工件文件。例如:

  • cargoupload ../path/to/mycontract.wasm
  • cargoinstantiate ../path/to/mycontract.contract
  • cargocall ..path/to/mycontract.json

依赖项

~43–62MB
~1M SLoC