Presenting tiny, new tooling for the cosmos-sdk that:
aims to be integrated directly into the cosmos-sdk repository
aims to solve the kinds of integration testing problems facing cosmwasm and ibc go when faced with a fast-moving cosmos codebase
provides a full application template in the cosmos-sdk, instead of just simapp
treats cosmwasm and ibc-go (and hopefully, x/evm, gnolang, and agoric) as first-class citizens of the cosmos ecosystem by ensuring that tests against them happen directly in the cosmo-sdk
opened 03:48AM - 20 May 22 UTC
Hey guys, so there's been a decision upstream that has pretty deep effects on cr… aft.
antehandler -> middleware -> antehandler
So basically we've got to rework craft and the promise of not breaking api's well, it won't be fulfilled. But that's okay, we won't dwell on that part.
In fact, Craft has become all of Notional's chains, will soon become Dig, and we'd like it to kick off a few hundred, or thousand chains.
Here's some relevant context, but it is fair to say that there are affects across the entire cosmos stack.
https://github.com/cosmos/cosmos-sdk/pull/11979
https://github.com/cosmos/cosmos-sdk/issues/11955
Specifcally, the SDK team has decided to revert to the antehandler pattern from middleware.
Here are the pieces of craft that are affected by this decision:
* exp module
* cosmwasm
* ibc 3.0
* groups module
* app.go
* nfts
So, that's to say that we're going to need to do significant rework here, I'd like to say that we need to give ourselves at least two weeks to sort that out, and then return to the previous release cadence.
Since Osmosis is sponsoring the use of craft as a template to be included in the sdk, and because I really want to see live integration tests across cosmos like the one that I made for Gaia that state syncs Gaia with numerous databases, I don't want to significantly change our plan or direction.
Cosmos SDK 46 reached v0.46.0-beta2, and had reached a stage where there were not supposed to be further large api breaking changes. We were actually ahead of schedule with craft, and the SDK itself was ahead of schedule, too (well, ahead of my anticipated schedule, anyhow).
Because of the reversion, some stuff will get easier, and other stuff is going to get harder.
* ibc-go v3.1.0 should work natively I think. The only changes will be to gov stuff, but not to middleware because it won't exist anymore. Here's relevant work:
* https://github.com/cosmos/ibc-go/pull/1274
* https://github.com/cosmos/ibc-go/pull/1205
* CosmWasm v1.0.0 in wasmd v0.27.0 should work, with only governance changes.
* https://github.com/CosmWasm/wasmd/pull/863
I'd like to circle back here, and really focus in on the templating aspect of the work here:
https://github.com/notional-labs/craft/issues/108
Yesterday and the day before and today as well I spent a whole lot of time pulling starport out of Juno.
https://github.com/CosmosContracts/juno/pull/207
So, let's run through our next steps, given all of this new information:
* Wait for the middleware reversion to be merged in the cosmos sdk:
- https://github.com/cosmos/cosmos-sdk/pull/11985
- https://github.com/cosmos/cosmos-sdk/pull/11979
* complete #108 by removing x/exp form craft, and adding "the base"
- cosmwasm
- ibc-go
- all modules, default in all the ways
We won't do an sdk 45 version of the base, to limit the scope of the work and lower our future technical debt.
* make a pull request of #108 to the cosmos sdk
## wait there's more? Yes, there are downstream consumers
* Sei (pending confirm)
* Would use this to "trade through" osmosis liquidity
* Passage3d (pending confirm)
* base for chain
* An1 (confirmed)
* "trade through" + base for chain
* Smol (pending confirm)
* base for chain
So basically, the way that we'll be able to maintain all this code, and help others to maintain their code, is by separating the parts of developing a cosmos chain into two:
1) base
The base will include tendermint, cosmos-sdk, and ibc-go. There will be a cosmwasm flavored base, and a base without cosmwasm.
2) Features
First of all it is notable that if all features are in cosmwasm, you spin up a base, make a genesis, and just "go". Juno is a reasonable example of that playing out though I suspect that Juno will retain dominance in unpermissioned and that others will want to be a "flavored base" weather permissioned or not. We can think of osmosis as an app platform that is highly specalized around providing amm pools. It has features written in both cw and go.
2 Likes