昨晚 8 点,Nervos 首场「开发工具大揭秘」系列直播顺利举办,CKB 核心开发者 Ash 为大家直播了如何吃蟹。
Oh,不。做吃播太不容易了,还是来为大家演示吃开发工具的螃蟹吧
这次的 Tech Session,Ash 和大家介绍了 Mandrake 这个工具如何通过代码的模组化,在使用极少代码的情况下,构建一个可以查询 Nervos DAO 余额的 dApp。
什么是 Mandrake
Mandrake 是 CKB 开发工具的新成员,一个基于 Animagus 特化的 GUI 工具。可以通过图像化的形式,将 Animagus 的树根结构展现出来。他能让开发者将自己想要实现的功能设计为可视化的 AST(Abstract Syntax Tree)。
AST 树根包含 Call 节点和 Stream 节点两种节点,Call 节点可以供 App 查询 CKB 数据 ;Stream 节点可以提供订阅接口,主动向 App 发送符合条件的事件。Mandrake 支持跨平台使用,目前支持 Web,macOS 和 Windows (Alpha quality)。构建 AST 并生成 Animagus 所需的 Protocol Buffers 格式的文件,可供各种编程语言和框架使用。
Demo 实现
我们可以通过 Mandrake 来构建一些查询和事件的 AST,使用 Animagus 来为一个桌面 DAO App 提供数据。我们注意到,影响 DAO 锁定总额的事件有只有两个,一个是 deposit,一个是 phase 2 unlock(更多关于 DAO 的内容请查看:Nervos DAO 中的存入和取出)。Cell #1和 Cell #2 可以忽略 data,只用 DAO type script 条件来简化查询。
通过 Mandrake,Ash 用 Animagus 的 AST 读取 CKB 状态并为符合预定义条件的 Nervos DAO Cell 建立索引,方便用户可以在同步节点之后,索引他所有 Nervos DAO 中的 Cell,让 UTXO 结构下的各个散落的 Cell 可以像在 Account Model 中一样,便于用户做集中查询。
本次实现的 dApp Demo 在同步后可以实时显示当前锁定的 DAO 总额和区块哈希,并对历史数据进行取样,绘成趋势图,可以列出存入、锁定与解锁取出的事件。