---
# System prepended metadata

title: Untitled

---

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工具类，所以场景也是希望能够为社区开发者通过方便的工具，解决痛点，提高生产力。