-
Notifications
You must be signed in to change notification settings - Fork 373
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor: reorganize project, isolate components (tm2, gnovm, gno.land, ...) #585
Conversation
Current thinking: GnoVM can be run independently of Tendermint2, such as with Tendermint1 as a module or with a custom implementation outside of the Cosmos ecosystem. Therefore, GnoVM should not rely on any imports from T2. We have a shared package named My goal is to compete with Cosmos-SDK by providing a way to customize a blockchain with contracts. This does not preclude the possibility of adding Cosmos-SDK as well. I suggest that we maintain If it is essential that T2 does not rely on GnoVM, I can create an interface for the |
I would like to suggest the following regarding a global monorepo architecture:
|
In pkgs/std, most files are needed for Tendermint2 only, not Gno.
I think TM2/std should act as a type of "common" type. This goes along with TM2's goal of being a swiss army (#2 in https://github.com/tendermint/tendermint2 for now anyways). When we need to we can create adapters between TM1 and TM2, but TM2/std is an opportunity to make breaking changes and imagine what is a good "common" from a blank slate. So I would say that GnoVM and gno.land should import from TM2/std. |
Also suggest gnovm -> gno and tendermint2 -> tm2 for succinctness, tm2 to be renamed later. |
Eventually, but still by keeping a fork in the |
I think |
I had the same thought as you while I was implementing it. The name of -> |
793a122
to
a8d28ce
Compare
6e12961
to
11825ff
Compare
Summary of the last discussion:
|
3d6c3df
to
adc6b95
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. 💯
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm a bit late to the party, but this looks great 💯
I love that it's much more streamlined now and easier to follow, especially for new contributors. I also had to look up the syntax in the nested Makefiles and learned something new 🙂
Thank you all for the review; I'll make a last rebase with |
…d, ...) Signed-off-by: Manfred Touron <[email protected]>
Co-authored-by: Morgan <[email protected]>
Signed-off-by: Manfred Touron <[email protected]>
Co-authored-by: Thomas Bruyelle <[email protected]>
Signed-off-by: Manfred Touron <[email protected]>
Co-authored-by: Morgan <[email protected]>
Signed-off-by: Manfred Touron <[email protected]>
Signed-off-by: Manfred Touron <[email protected]>
Signed-off-by: Manfred Touron <[email protected]>
088ecfa
to
81ea276
Compare
Signed-off-by: Manfred Touron <[email protected]>
…d, ...) (gnolang#585) Co-authored-by: Morgan <[email protected]> Co-authored-by: Thomas Bruyelle <[email protected]>
<!-- please provide a detailed description of the changes made in this pull request. --> <details><summary>Original text from #825</summary> <p> # Description Part of #692 #585 BREAKING CHANGE: In GitHub Action Flow, the build script needs to be updated on moving tm2txsync from tm2/cmd to gno.land/cmd ## gno.land/ It provides information and tools necessary for running gno.land node. It includes - a node application for starting gnoland nodes to deliver an RPC endpoint - gnoweb for web access to the chain. - tools to interact with gno nodes. - a cosmos SDK gno VM module with keeper and handler. In the future, we plan to consolidate tools for node deployment and monitoring. The future plan also includes supporting both IBC and ICS. ## gnovm/ Gnovm is agnostic to any SDK or chain. It is intended for gno contract developers and gno VM developers. It includes - a gno development CLI - gnolang language - virtual machine implementation. - standard libraries for gno contracts, - examples and test cases. Future plans include making gnovm compatible with IBC ## tm2/ Tendermint2 is a BFT consensus engine and a set of tools for blockchain builders More details can be found at [https://github.com/tendermint/tendermint2#readme](https://github.com/tendermint/tendermint2#readme) In the future, tm2 plans to: - Remain synchronized with the tendermint2 repository. - Port issue fixes between Tendermint v0.23.4 and v0.34. - Ensure compatibility with IBC and ABCI2. # The dependences among tm2, gnovm and gno.land - gno.land depends on tm2 and gnovm - gnovm depends on tm2 - tm2 is independent to gnovm and gno.land ```mermaid flowchart LR A[gno.land]--> B[gnovm] --> C[tm2] A --> C ``` # Discussion ## client commands We aim to establish a clear dependency structure between these components as outlined earlier. Ideally we'd like to have clear dependency between these components as listed above At present, tm2/pkg/crypto/keys/client/root.go is dependent on gno.land/pkg/sdk/vm. We're considering moving the following commands to gno.land/cmd/gnokey/ and eliminating the newMakeTxCmd() from cmd.AddSubCommands() in tm2/pkg/crypto/client/root.go: - addpkg.go - call.go - send.go - maketx.go However, these files rely on the private config structure and private methods defined in tm2/pkg/crypto/keys/client/. Until we decide the next steps, these files will remain in tm2, which means that tm2/ continues to depend on gno.lang/ for now. ## genproto As for the genproto, we need to decide where misc/genproto/genproto.go should be placed. ## sample tendermint2 program Since we've moved out applications that depend on gno in tm2, we need to consider whether we should reintroduce the sample tendermint application or create a new one. [tendermint classic main.go](https://github.com/tendermint/classic/tree/master/cmd/tendermint) </p> </details> <details><summary>Contributors' checklist...</summary> - [ ] Added new tests, or not needed, or not feasible - [ ] Provided an example (e.g. screenshot) to aid review or the PR is self-explanatory - [ ] Updated the official documentation or not needed - [ ] No breaking changes were made, or a `BREAKING CHANGE: xxx` message was included in the description - [ ] Added references to related issues and PRs - [ ] Provided any useful hints for running manual tests - [ ] Added new benchmarks to [generated graphs](https://gnoland.github.io/benchmarks), if any. More info [here](https://github.com/gnolang/gno/blob/master/.benchmarks/README.md). </details> --------- Co-authored-by: piux2 <> Co-authored-by: Manfred Touron <[email protected]>
Months after the renaming `gnodev` to `gno` (in #585), I still found some references of gnodev. Fixed it.
Months after the renaming `gnodev` to `gno` (in gnolang#585), I still found some references of gnodev. Fixed it.
BREAKING CHANGES:
gnovm
,gno.land
,tendermint2
folders. No more top-levelpkgs
,cmd
folders.pkgs/std
(see comments below).Next steps (new PRs):
tm2/pkg/sdk/vm
andpkg/crypto/keys/client
parts depending ongnovm
either ingnovm
orgno.land
.go mod workspaces
.tm2
and "the rest".tm2
won't depend on nothing "gno*", i.e., grep gnovm from dedicated go.mod.Addresses #577