显示软件包…
1 个稳定版本
2.0.0 | 2021年4月4日 |
---|
#36 在 #tetcoin
28 每月下载量
用于 8 个软件包(4 直接使用)
2MB
37K SLoC
合约模块
合约模块为运行时提供部署和执行WebAssembly智能合约的功能。
概述
此模块扩展了基于Currency
特质的账户以具有智能合约功能。它可以与实现基于Currency
的账户的其他模块一起使用。这些“智能合约账户”能够实例化智能合约并调用其他合约和非合约账户。
智能合约代码在code_cache
中存储一次,以后可以通过其code_hash
检索。这意味着可以从相同的code_cache
中实例化多个智能合约,而不需要每次都复制代码。
当调用智能合约时,通过代码哈希检索其相关代码并执行。此调用可以更改智能合约账户的存储条目、实例化新的智能合约或调用其他智能合约。
最后,当账户被回收时,其关联的智能合约代码和存储也将被删除。
气体
发送者必须为每次调用指定一个气体限制,因为所有由智能合约引发的指令都需要气体。未使用的气体在调用后无论执行结果如何都将被退还。
如果达到气体限制,那么所有调用和状态更改(包括余额转移)仅在当前调用的合约级别回滚。例如,如果合约A调用B,而B在调用中途耗尽气体,那么B的所有调用都将被回滚。假设合约A正确处理了错误,A的其他调用和状态更改仍然存在。
值得注意的情况
合约调用失败不一定具有级联效应。当子调用中出现故障时,它们不会“冒泡”,调用将仅在特定的合约级别回滚。例如,如果合约A调用合约B,而B失败,A可以决定如何处理该故障,要么继续执行,要么回滚A的更改。
接口
可调用的函数
put_code
- 将给定的二进制Wasm代码存储到链的存储中并返回其code_hash
。instantiate
- 从给定的code_hash
部署新的合约,可选地转移一些余额。这会实例化一个新的智能合约账户,并调用其合约部署处理器以初始化合约。call
- 对账户进行调用,可选地转移一些余额。
用法
合约模块正在开发中。以下示例展示了如何使用此合约模块实例化和调用合约。
相关模块
许可证:Apache-2.0
依赖关系
~4–12MB
~149K SLoC