11 个版本 (5 个稳定版)
4.1.1 | 2024 年 4 月 17 日 |
---|---|
4.1.0 | 2024 年 4 月 10 日 |
4.0.2 | 2024 年 3 月 14 日 |
4.0.0-rc.3 | 2024 年 2 月 29 日 |
3.1.0 |
|
#279 in 魔法豆
1,201 每月下载
在 4 个crate中使用 (3 个直接使用)
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 build
和 cargo contract upload
命令以生成合同工件。此命令只有在没有此代码的合同实例的情况下才会成功。已从该代码实例化的合同必须自行 terminate
或通过向 pallet_contracts
的 set_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