我正在使用sdk coins模块,并且每当我尝试铸造带有大写符号的硬币时,它都会失败并给我一个无效的tx错误。我希望你能解释一下为什么会这样。这里是宇宙sdk代码的链接,在那里一切都爆炸了。我正在查看sdk代码,似乎regex应该允许大写和小写字母符号https://github.com/cosmos/cosmos-sdk/blob/a6c3c5d0909cc5ab0426129503d8585c3af430ce/types/coin.go#L601
我们可以在造币之前调用一个函数来接受大写正则表达式,但是这在区块链层面上是不可配置的,并且会导致问题,因为我们在代码库中有很多地方可以造币和烧币。这应该是在区块链级别上可配置的,这样我们就不必在任何时候设置正则表达式字符串,我们想要在cosmos上铸造和燃烧硬币。
您可以在命令二进制中设置自定义验证规则,如下所示:
func main() {
cdc := app.MakeCodec()
sdk.CoinDenomRegex = func() string {
return validation.ReDnmString
}
这个例子从外部文件导入RegEx规则,只允许默认规则加上所有的表情符号。
确切的格式可能已经使用此PR进行了更新,但通过覆盖/cmd/{binary}/main.go
中的默认正则表达式,其概念应该是相同的。