GovShuttle 模块是一个定制的治理模块,可以对部署到 EVM 的应用程序进行网络级治理。 在功能层面,该模块将来自 Cosmos SDK 治理建议的信息传递到 EVM 上的一个预言机地址,该地址可以被免费公共基础设施 DApps 读取和实施。
GovShuttle 模块是一个统一网络和 DApp 治理的 Cosmos SDK 模块。 该模块允许 Canto 的利益相关者创建治理提案并对其进行投票,这些提案可以传输到 Canto EVM 上名为 Port 的提案存储合约。 在初始化时,GovShuttle 的 keeper 检查端口是否存在。 如果还没有部署,keeper 会使用 DeployMapContract 函数来部署 Port。
if nonce == 0 {
*k.mapContractAddr, err = k.DeployMapContract(ctx, lm)
if err != nil {
return nil, err
}
return lm, nil
}
端口部署后,用户可以选择提交路由到 GovShuttle 的特殊提案类型。 通过时,GovShuttle 的守护者调用一个名为 AppendProposal 的函数,该函数使用 Geth 的 Call 函数将提案的数据添加到端口。 然后,Port 可以将这些提案传播到 EVM 上的 DApp。
func handleLendingMarketProposal(ctx sdk.Context, k *keeper.Keeper, p *types.LendingMarketProposal) error {
err := p.ValidateBasic()
if err != nil {
return err
}
_, err = k.AppendProposal(ctx, p)
if err != nil {
return err
}
return nil
}
读取写入端口的提案就像使用函数 QueryProp 查询合约一样简单。 此函数将提案 ID 作为参数并返回相应提案的数据。 这样一来,Canto 的 EVM 上的合约现在可以从 Cosmos SDK 传递的提案中读取数据。 这允许任何应用程序通过将其治理直接集成到网络治理中而只需很少的修改就可以成为免费的公共产品。 从技术上讲,该系统可以推广到任何形式的跨运行时信息传递,包括允许高度灵活、应用程序不可知的接口的附加提案类型。