1、简单介绍一下你自己/团队和这个项目。 目前有两个成员,目前我俩也是substrate开发者,但参赛是个人身份出来的,所以也没用想好名字。 目前这个项目主要是想提供一个辅助开发substrate的工具,解决在substrate开发方面的一些便捷性,能够方便快捷地集成社区的pallet。 2、你的参赛项目名称和所属参赛类别是? 名称:cargo-pallet 类别:类别 4:区块链工具 3、请描述你的项目要解决的问题。 随着substrate生态越来越好,所以会有越来越多的社区优秀的pallet出来。如果某些pallet正是自己项目所需的,这样就不需要我们自己去开发了,可以集成社区的pallet。 但要把别人的pallet集成到我们自己的runtime里面来,则会稍微不那么方便,而且也需要对substrate的开发有一定的了解,才能快速地集成进来。所以我们想,提供一个工具和一些规范化的模版来,方便开发者集成社区的pallet。 4、描述你的项目解决方案,大概架构。 cargo-pallet工具主要会提供一些子命令: 1. cargo pallet add pallet_name source 2. cargo pallet rm pallet_name 3. cargo pallet update 4. cargo pallet patch commit 5. ... 大致的架构: 那cargo-pallet来说。 作为编写pallet的人,要提供一套pallet的metadata信息的metadata.toml文件,比如可能的信息是如此: ``` [package] name = "example-pallet" [source] git = false crates-io = true [new-types] AssetId = "u32" Balance = "u128" [config] AssetId = "" Balance = "" MintDuration = "Get<u32>" [constants] MintDuration = "100_000u32" [benchmark] disable = false ``` 目前还没有定案这个metadata的格式,但大致形式是如此。 当比如我自己想集成这个pallet,cargo-pallet工具就可以先读取到这个pallet的metadata信息,然后把这个pallet加入到runtime的Cargo.toml文件里,然后自动生成如下代码: ``` impl example_pallet::Config for Runtime { type A = A; type B = B; type C = C; } ``` 加入到runtime代码里面,并spec_version + 1。所以这里能看出,这里关键的是要开发这个pallet的人提供这个pallet的元信息。如果不提供,就没有办法了。只能自己手动去添加了。 还有别的一些功能: cargo pallet rm就是这个的逆过程。 cargo pallet update主要是升级pallet的版本,针对crates.io里面的版本。 cargo pallet patch主要是对于那些紧跟最新的substrate的开发者和项目,能够指定升级某一个commit,针对GitHub里面的版本。 未来可能还有更多的功能,主要是看社区的开发需求和开发者反馈的痛点。而且也不知道这个工具可行性如何,如果社区的生态不够丰富,或者这类规范化的事情,开发者不去遵循,其实这个工具的作用也不大。个人感觉这类规范化的事情可能需要官方去力推,才会有效果。 5、有什么行业应用场景用到你的方案。 这个项目做的是substrate工具类,所以场景也是希望能够为社区开发者通过方便的工具,解决痛点,提高生产力。