#run-time #smart-contracts #functional #architecture #substrate #testing #playground

no-std drink-next

允许完全功能 ink! 合同开发的最小足够架构

6 个版本

0.8.12 2024 年 2 月 6 日
0.8.11 2024 年 2 月 6 日

#40 in #playground

Download history 1/week @ 2024-06-29 9/week @ 2024-07-06 69/week @ 2024-07-27

78 每月下载次数

Apache-2.0GPL-3.0-only

94KB
1.5K SLoC

Rust checks Built for ink!

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