cosmos-sdk源码走读001

一、理解四个Apps的作用和关系

最显眼的App

    众所周知,cosmos-sdk是一个基于tendermint基础上允许用户定制功能的blockchain平台。

    普通用户现在可以通过Ignite cli工具能快速,高效的搭建起一个blockchain功能,任何人首先肯定会接触到app/app.go定义了一个App(后面统一称为app.App),“减重”后的代码为:

 type App struct {
	*baseapp.BaseApp
	// ....
}

func New( logger log.Logger, db dbm.DB, traceStore io.Writer,
	// ...,
) *App {
	appCodec := encodingConfig.Marshaler
	cdc := encodingConfig.Amino
	interfaceRegistry := encodingConfig.InterfaceRegistry

	bApp := baseapp.NewBaseApp(
		Name,
		logger,
		// ...
	)
	app := &App{
		BaseApp:           bApp,
		// ...
	}

	app.ParamsKeeper = initParamsKeeper(
		appCodec,
		// ...
	)
	// ...

	return app
}

其它的Apps

    除了上面提到的app.App外,它里面继承的baseapp.BaseApp也通常会吸引笔者再进入去窥探一番,这是第二个也是最重量级的app(称之为baseapp.BaseApp)。

type App struct {
	*baseapp.BaseApp
	// ....
}

    第三个app也很容易猜到,就是tendermint的abci接口规范
    第四个app与应用程序执行有关系,它完美的包装了前面abci接口并在此基础提供启动程序的服务定义,代码为:

type Application interface {
	abci.Application
	RegisterAPIRoutes(*api.Server, config.APIConfig)
	RegisterGRPCServer(grpc.Server)
	RegisterTxService(client.Context)
	RegisterTendermintService(client.Context)
	CommitMultiStore() sdk.CommitMultiStore
}

四个Apps作用是什么

在这里插入图片描述
从上面图可以看出四个Apps作用:

  • abci.Application就是tendermint眼中的应用程序需要实现的接口,标准ABCI程序。
  • types.Application是在abci.Application上增强了注册各种服务和返回存储的功用。
  • baseapp.BaseApp是功能最全的ABIC应用程序,绝大多数神秘功能都在它那里发起。
  • app.App主要实现部分注册服务,以及管理module及串联各个keeper作用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值