本仓库为substrate入门课第五期作业.
主要修改集中于poe模块中,其余的在runtime模块中初始化,并在整个项目的Cargo.toml
将poe引入.
在polkadot.js
中查询链上POE
模块存储的值时,无法对作为KEY
的Bytes数据做出反应.除了0x
,其余输入均只能返回<unknown>
.所以我们无法查询到单个凭证的信息.
当输入为0x
时:
此时前端页面会正确地根据输入值0x
返回encoded storage key
和encoded key details
,查询结果也是Option
的合法返回值:None
.
可对于除此之外的输入,前端页面既不会返回encoded storage key
和encoded key details
的信息,查询结果也是不合法的unknown
:
好在我们可以通过关闭included option
选项直接得到整个模块的存储信息.
由于我们还未添加任何凭证,s所以此时链上是没有相应信息的.
对于这个BUG,由于不清楚Substrate前后端的联动,所以我有些漫无目的地尝试了修改:
- 修改
StorageMap
的Hash方式,像是Blake2_128
和Identify
等. - 参照官方代码库中v0.9.30分支,修改
BoundedVec
的声明方式. - 将框架代码升级到最新版本
很可惜这些方法都没有效果.
通过poeModule
的createClaim
方法创建凭证:
再在chain state中查询该模块的信息:
可以看到已经生成了相应凭证,其持有地址为之前的申请人Alice的地址.
先尝试转移不存在的凭证:
前端返回错误:
将之前的凭证转移给Bob:
查询可知凭证已转移给Bob:
先尝试让Alice撤销凭证,不过由于凭证已转移,所以Alice不再持有该凭证,无权撤销:
再让Bob撤销凭证:
查询可知凭证已被撤销:
所有成功执行的extrinsics
都可以在Network
的Chain info
中查看,其按时间顺序记录了这些调用: