Redspot v0.4 提案部分调整,支持多合约、Docker 编译等
我们当前对 Redspot v0.4的规划跟之前的早期规划有比较大的改变。在早期的v0.4规格中,我们预计的计划当前不适用:
1.对于合约的 Typescript 支持:我们经过讨论并与Jacob 沟通后(polkadot.js 中的 api-contract 支持 Typescript 的规划),认为其重要性并不高且不影响当前的使用,因此对于合约 Typescript 的支持放在 api-contract 支持这个功能之后。
2.集成多语言的 SDK:由于 pallet-contracts 在3.0.0中改变了调用接口且近期改动巨大,因此 Patract 的 Himalia 项目当前只有 Go 版本的追上了最新的变更,Python 版本还未及时更新。而且 Java 版本和 c# 版本还未启动,因此多语言的 SDK 还未准备充分,从而暂时无法在这个版本中集成到 Redspot 中。
因此在本 Redspot v0.4 的计划中,我们主要的规划变更为如下:
1.多合约支持:在 ink! 与 cargo-contracts 近期的更新中终于能正常编译多合约。因此 Redspot 将会重新修正关于多合约的支持系统。
2.支持 Docker 编译:由于当前在不同环境下,Wasm 编译结果会不一致(例如Substrate 的Runtime为了解决这个问题采用了Srtool注1,另一方面在不同的操作系统下搭建编译环境可能存在困难(例如Windows),因此支持 Docker 可以解决很多环境问题。
3.Redspot 的 Web 界面:虽然 Redspot 基本上是一个命令行工具,但是对于刚入门的程序员来说并没有很大的吸引力。因此 Redspot 计划引入一个类似于 Canvas-UI 的合约部署操作界面,并在这个界面上附加丰富的功能,在产品设计上强化和合约相关的属性并将 Redspot 的一些功能变得可视化。而且这个界面还可以增加额外的功能例如调用 polkadot.js 插件进行交易签名(命令行的 Redspot 中无法调用浏览器插件)。
4.增加一些其他的插件,丰富 Redspot 生态,例如针对链的 Types 支持,监控文件变更插件等等。
Redspot v0.4 的详细规划
1. 多合约支持
ink! 与 cargo-contracts 编译多合约的问题在 cargo-contract PR#199注2提交后获得了修正。因此 Redspot 可以重新开始支持多合约编译的项目(Redspot 曾经一定程度支持多合约组织结构,但是由于无法编译而被搁置)。
Redspot 的多合约支持将会从以下几个方面入手:
多合约文件结构索引与识别
redspot.config.ts 支持文件索引的配置方式
编译产物的判定与整理(包括重名合约的编译产物的处理)
支持使用多种语言混合编译
Redspot 会通过配置的查找目录,自动的查找该目录下的所有合约文件。然后通过配置的编译工具进行编译处理,最终会将所有编译产物输出到 Artifacts 目录中。同时会生成一个 BuildInfo 文件,里面记录着编译前的项目目录结构。
2. 支持 Docker 编译
在 Redspot 内支持 Docker 的调用可以解决很多与环境搭建相关的问题。相关的讨论见 Patract 提交的 cargo-contract issue #188注3 与 cargo-contract issue #184注4。因此当我们注意到当 Scripts 的 ci 中出现了 cargo-contracts 的 Dockerfile 之后,contracts! CI for Linux Distributions注5就可以给 Redspot 添加调用 Docker 的相关功能了。
Redspot 将检测是否存在 Docker 环境。并自动拉取指定的版本的 Docker Image。另一方面 Redspot 将会维护一个 Docker Image 作为默认的测试网。
3. Redspot 的 Web 界面
由于 Redspot 的主体功能已经比较完善,因此 Redspot 的后续可以在产品上做更多的易用化方面的开发。例如给 Redspot 提供合约相关的 UI 界面,可以让初学者更容易的上手合约开发过程,另一方面 Redspot 中存在一些功能需要唤起浏览器参与相应操作(例如调用 polkadot.js extension 进行签名),因此可以一起集成到 Web 界面中。
另一方面如 Truffle 一样,Redspot 也将设计为可以用于生产环境中进行部署合约,因此 Redspot 需要提供安全的签署交易的手段。例如将来能使用 Ledger,parity-signer 等硬件钱包进行部署和调用合约的交易签署。这样开发者使用类似 Development 的配置,配置测试秘钥在测试环境中测试合约后,然后切换生产环境,配置生产环境的秘钥进行合约部署即可。为了兼顾所有环境,我们认为唤起浏览器进行交互是比较好的一种手段。因此本次我们尝试将集成 polkadot.js extension 的调用。
总结而言,Redspot 的 Web 界面将会给初学者提供丰富的信息入门合约操作,并且也集成了一些无法在 CLI 环境下处理的操作:
界面将会包含链的区块,交易,事件等基础信息,同时合约操作界面类似于 Canvas-UI。
Web将会扫描或记录(根据不同的链有不同的策略)已经存在的合约,并读取 Redspot 的 Config 环境与已有的秘钥进行关联。
Web 界面将会在合约界面详细展示与合约操作相关的信息,例如某次合约调用中的 Gas,Selector,参数内容等等。
Web 界面将会对 Redspot 的一些操作做可视化,例如引入 Redspot 的控制台界面,显示执行操作的日志,或者能显示测试、脚本信息,并通过界面调用执行。
当在 Redspot 的 Config 中配置为安全性的秘钥时,会需要 Web 界面调用 polkadot.js 进行交易签署。
支持合约的 Storage 查询。
将会自动上传本地的最新编译产物。方便手动部署和调用合约。
Redspot-Watcher
Balances 精度插件
Default Blockchain Types 插件
1.Srtool 链接:https://github.com/paritytech/srtool
2.Cargo-contract PR##199 链接:
https://github.com/paritytech/cargo-contract/pull/199
3.cargo-contract issue #188 链接:
https://github.com/paritytech/cargo-contract/issues/188
4.cargo-contract issue #184链接:
https://github.com/paritytech/cargo-contract/issues/184
5.contracts! CI for Linux Distributions链接:
https://github.com/paritytech/scripts/tree/master/dockerfiles/contracts-ci-linux
6.Canvas-UI 链接:https://paritytech.github.io/canvas-ui/#/
7.Polkadot Apps 链接:https://polkadot.js.org/apps
About Patract
How to join Patract
//波卡的Wasm和以太坊2.0的eWasm相对于EVM虚拟机的绝对优势