cosmos跨链ammswap
- 1 min视频url: youtube 6:42开始
核心功能: 通过IBC将Gaia上的atom token
跨链到OKC上进行交易
- OkexApp 是继承了BaseApp的
- 因为要修改很多性能方面的东西, 所以直接吧cosmos-sdk和tendermint拷贝到项目目录中进行修改(改动比较大), 这样改起来效率高.
exchain/libs/tendermint
andexchain/libs/cosmos-sdk
主要文件(每个模块):
module.go
: 模块的基本实现, beginBlock,endBlock之类的函数实现都在这里;handler.go
: 定义不同交易类型(msg), 每个msg就是一个交易类型. 比如添加流动性什么的keeper.go
: 一个代理,模块的人口cli/tx.go
: 发送命令(添加流动性之类的和handler里面的命令对应)cli/query.go
andkeeper/querier.go
andrest/query.go
: 查询
主流程源码
libs/tendermint/state/execution_parallel.go
func execBlockOnProxyAppAsync
1. 执行beiginblock
2. for循环执行deliverTx
3. 执行endBlock
exchain自己开发的模块
- ammswap
- token
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生成了什么?
keeper
和types
types/params
里面可以修改参数, 比如刚上线的时候, 某个模块的参数是disable的, 上线之后再通过社区治理投票来开启.