6 个版本
0.8.12 | 2024年2月6日 |
---|---|
0.8.11 | 2024年2月6日 |
#3 在 #drink
每月 59 次下载
在 drink-next 中使用
21KB
250 行
DRink!
Dechained Ready-to-play ink! playground
什么是 DRink!?
简述
DRink! 是一个为 ink! 开发者提供的工具箱,允许在不运行任何节点的情况下进行完全功能的 ink! 合约开发。它为你提供了一个独特且非常强大的环境,用于与合约交互
- 同步部署和调用你的合约,没有任何与区块生产或网络相关的延迟
- 访问强大的功能,这些功能在标准方法(如 合约模拟、增强调试和调用跟踪)中不可用
- 同时处理 多个合约
- 使用 任意运行时 配置进行工作,包括自定义链扩展和运行时调用
- 拥有 完全控制运行时状态,包括区块编号、时间戳等。
详细说明
DRink! 背后的关键概念是提供一个无节点环境。为了全面理解它,我们需要对 Substrate 架构有一个高级概述。
注意:虽然在这里我们使用了 Substrate 特定的术语,但这些概念相当普遍,至少适用于大多数区块链设计。
“区块链洋葱”
任何区块链网络参与者都运行一个单一的二进制文件,通常称为 节点 或 主机。它负责基本操作,如
- 与其他节点的通信(网络协议、信息传播、八卦等)
- 区块生产和最终化(共识、区块创作等)
- 存储(区块链状态、数据库等)
- 有时也包括交易池、RPC 等。
当它收到一个新的交易(或一个区块)时,它必须更新区块链状态。为此,它使用一个名为 状态转换函数 的辅助二进制文件,称为 运行时。这是一个辅助二进制文件,它作为核心逻辑函数,接受当前状态和交易作为输入,并返回更新的状态。
如果交易涉及智能合约交互,运行时必须在隔离环境中执行它。(这就是合约模块发挥作用并产生专用沙箱的地方。)
因此,我们有一个类似洋葱的多层架构(实际上,还有更多的层次,但我们不需要深入研究)。
测试策略
根据涉及的技术栈部分,我们可以为智能合约推导出三种主要的测试策略。
在DRink!之前,您可以使用ink!'s本地测试框架执行单元测试(使用#[ink::test]
宏)或端到端测试(使用#[ink_e2e::test]
宏)。DRink!启用了第三种选项,即准端到端测试。
准E2E测试
这种范例是介于其他两种策略之间的特殊折衷。我们放弃了节点层(包括网络、区块生产等),但我们仍然拥有一个带有附加存储的完全功能的运行时。换句话说,我们保留区块链状态的裸状态在内存中,我们可以直接与之交互,无论我们想要怎样。
这样,我们获得了对运行时的完全控制,但牺牲了对区块链环境的真实模拟。然而,通常这对开发过程非常有益,因为它允许有更快的反馈循环,并辅助更好地了解执行外部性。
如何使用DRink!?
您可以使用DRink!的三种方式:
直接作为库
这样,您可以在测试套件中访问DRink!的全部功能。检查我们在examples目录中的有用和详细示例。
drink
库持续发布到crates.io,因此您可以使用它在自己的项目中,通过cargo add drink
或通过将以下行添加到您的Cargo.toml
drink = { version = "0.8" }
完整的库文档可在以下位置找到:https://docs.rs/drink。
快速入门指南在此处提供:here。
作为ink!的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
依赖项
~27–41MB
~702K SLoC