cosmos跨链ammswap

- 1 min

视频url: youtube 6:42开始

核心功能: 通过IBC将Gaia上的atom token跨链到OKC上进行交易

  1. OkexApp 是继承了BaseApp的
  2. 因为要修改很多性能方面的东西, 所以直接吧cosmos-sdk和tendermint拷贝到项目目录中进行修改(改动比较大), 这样改起来效率高. exchain/libs/tendermint and exchain/libs/cosmos-sdk

主要文件(每个模块):

主流程源码

libs/tendermint/state/execution_parallel.go

func execBlockOnProxyAppAsync
1. 执行beiginblock
2. for循环执行deliverTx
3. 执行endBlock

exchain自己开发的模块

1. checkTx

nonce检查, gas费用是否够等等, 在发送到mempool之前的检查

2. initChain

不重要

3. beginBlock(app layer)

准备工作, 遍历所有模块, 在moduleManager里面.

app.go:

func beginBlocker

在cosmos-sdk中要修改先执行交易的beginBlock, 然后再执行其他的.

4. deliverTx

执行每笔交易, 调用每个模块自己的handler.

共识结束, tendermint收到一个区块, 调用applyblock的时候触发.

5. endBlock(app layer)

区块执行结束后, app层

6. commit

所有对缓存的写(落库)

initGenesis = block 0

genesisState, 可以提前设置哪些账户有钱等等

keeper.go是什么?

执行读写store

一个模块通过keeper注册到了你的app layer

定义这个模块依赖

storekey

avl tree: 自平衡二叉树(搜索)

每一个storekey对应一个store. 在底层有个avl树, 每个树都有一个root, 每个模块的树的root最后组成一个state root

ignite生成了什么?

keepertypes

types/params里面可以修改参数, 比如刚上线的时候, 某个模块的参数是disable的, 上线之后再通过社区治理投票来开启.