6 个版本
0.8.12 | 2024 年 2 月 6 日 |
---|---|
0.8.11 | 2024 年 2 月 6 日 |
#40 in #playground
78 每月下载次数
94KB
1.5K SLoC
DRink!
Dechained Ready-to-play ink! playground
什么是 DRink!?
简要介绍
DRink! 是 ink! 开发者的工具箱,允许在没有运行节点的情况下进行完全功能的 ink! 合同开发。它为您提供了一个独特且非常强大的环境,用于与合同进行交互
- 同步部署和调用您的合同,没有任何与区块生产或网络相关的延迟
- 访问标准方法(如合同模拟、增强调试和调用跟踪)不可用的强大功能
- 同时处理 多个合同
- 与 任意运行时 配置一起工作,包括自定义链扩展和运行时调用
- 对运行时状态拥有 完全控制,包括区块号、时间戳等。
详细说明
DRink! 背后的关键概念是提供一个无节点环境。要完全理解它,我们需要对 Substrate 架构有一个高级概述。
注意:虽然这里我们使用 Substrate 特定的术语,但这些概念相当通用,并适用于至少大多数区块链设计。
'区块链洋葱'
任何区块链网络参与者都运行一个二进制文件,通常称为 节点 或 主机。它负责基本操作,如
- 与其他节点通信(网络协议、信息传播、八卦等)
- 区块生产和最终化(共识、区块创建等)
- 存储(区块链状态、数据库等)
- 有时也包含交易池、RPC 等。
当它收到新的交易(或区块)时,它必须更新区块链状态。为此,它使用一个称为 runtime 的 状态转换函数。这是一个辅助二进制文件,充当核心逻辑函数,输入当前状态和交易,并返回更新后的状态。
如果交易是某种智能合约交互,则运行时必须在 隔离环境 中执行它。(这就是 contract pallet 发挥作用并产生专用沙箱的地方。)
因此,我们有一个类似于洋葱的分层架构(实际上还有更多层,但不需要深入研究)。
测试策略
根据涉及的技术栈部分,我们可以推导出三种主要的智能合约测试策略。
在 DRink! 之前,您可以使用 ink!'s 的原生测试框架执行单元测试(使用 #[ink::test]
宏)或端到端测试(使用 #[ink_e2e::test]
宏)。DRink! 增加了第三种选项,即 准端到端 测试。
准端到端测试
这种范式是两种其他策略的独特折衷。我们放弃了节点层(包括网络、区块生产等),但我们仍然有一个具有附加存储的完整功能运行时。换句话说,我们保留在内存中的裸区块链状态,我们可以直接以任何方式与之交互。
这种方式,我们获得了对运行时的完全控制,牺牲了真实模拟区块链环境。然而,通常,这对于开发过程非常有益,因为它允许有更快的反馈循环,并有助于更好地了解执行外部性。
如何使用 DRink!?
您可以使用以下三种方式使用 DRink!
直接作为库
这种方式,您可以在测试套件中获得 DRink! 的全部功能。请查看 examples 目录中的有用且详尽的示例。
drink
库持续发布到 crates.io,因此您可以使用 cargo add drink
或在您的 Cargo.toml
中添加以下行来在项目中使用它:
drink = { version = "0.8" }
完整库文档可在:https://docs.rs/drink 查找。
快速入门指南 可在此处获取:这里。
作为 ink!'s E2E 测试框架的替代后端
DRink! 已与 ink! 集成,可以用作标准 E2E 测试环境的直接替换。只需在测试函数的测试宏中使用相应的参数
#[ink_e2e::test(backend = "runtime_only")]
即可将 E2E 测试用例切换到准 E2E 测试用例,而无需在后台运行任何节点!
有关完整示例,请参阅 ink! 存储库。
使用命令行工具
我们提供了一个 CLI,它将 DRink! 放在友好的 TUI 后面。下面您可以找到它的工作原理的简要演示。有关更多详细信息,请参阅 其 README。
https://github.com/Cardinal-Cryptography/drink/assets/27450471/4a45ef8a-a7ec-4a2f-84ab-0a2a36c1cb4e
类似于 drink
库,drink-cli
也发布到 crates.io。您可以使用以下命令安装它:
cargo install drink-cli
依赖关系
~46–63MB
~1M SLoC