Skip to content
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

feat: new govdao pattern with context #2380

Merged
merged 21 commits into from
Jul 8, 2024

Conversation

moul
Copy link
Member

@moul moul commented Jun 18, 2024

This PR introduces a new pattern for arbitrary govdao proposals using Gno code using contexts. It involves wrapping the provided closure with a system that configures a context.Context with a field indicating that the execution occurs in the context of an approvedByGovDao proposal. This opens the door to a new ACL system, not based on PrevRealm(), but on a context-based "certification" system.

I believe this pattern makes sense to exist; however, here are some drawbacks I can see:

  1. context.Context is not yet needed (no goroutine support), and we may eventually never need this package depending on how we implement goroutines internally. (h/t @thehowl)
  2. context.Context is used like an environment variable, which introduces implicitness—something we usually try to avoid to make Gno a very explicit language. Explicitness brings “simplicity” and “verifiability.”
  3. The usual Go idiomatic way of using context is to pass it as the first argument. If this becomes more common, it will result in more contracts having exposed functions that are not callable by maketx call (though they can be called with maketx run or via an import).

Depends on #2379
Related to #2386

@moul moul self-assigned this Jun 18, 2024
@github-actions github-actions bot added the 🧾 package/realm Tag used for new Realms or Packages. label Jun 18, 2024
@moul moul changed the title dev/moul/govdao blog feat: new govdao pattern Jun 18, 2024
moul added 4 commits June 18, 2024 14:32
Signed-off-by: moul <[email protected]>
Signed-off-by: moul <[email protected]>
Signed-off-by: moul <[email protected]>
Signed-off-by: moul <[email protected]>
@moul moul changed the title feat: new govdao pattern feat: new govdao pattern with context Jun 18, 2024
@moul moul mentioned this pull request Jun 18, 2024
7 tasks
Signed-off-by: moul <[email protected]>
@moul moul marked this pull request as ready for review June 18, 2024 16:36
@moul moul requested review from a team as code owners June 18, 2024 16:36
@moul moul requested review from jaekwon, thehowl and zivkovicmilos and removed request for a team June 18, 2024 16:36
@moul moul enabled auto-merge (squash) June 19, 2024 14:02
@moul moul disabled auto-merge June 19, 2024 14:03
Copy link
Contributor

@ajnavarro ajnavarro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM after two minor changes.

examples/gno.land/p/demo/context/gno.mod Outdated Show resolved Hide resolved
examples/gno.land/p/gov/proposal/proposal.gno Outdated Show resolved Hide resolved
@moul
Copy link
Member Author

moul commented Jul 4, 2024

@ajnavarro, the changes have been applied.

Copy link
Member

@zivkovicmilos zivkovicmilos left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good 💯

I've left a few comments 🙏

I love that I now don't need a custom executor for calling Realm methods

zivkovicmilos added a commit that referenced this pull request Jul 6, 2024
## Description

This PR improves the gno implementation of the `valopers` Realm.

Waiting on #2380 to add a context-based Govdao pattern before merging.

<details><summary>Contributors' checklist...</summary>

- [x] Added new tests, or not needed, or not feasible
- [x] Provided an example (e.g. screenshot) to aid review or the PR is
self-explanatory
- [x] Updated the official documentation or not needed
- [x] No breaking changes were made, or a `BREAKING CHANGE: xxx` message
was included in the description
- [x] 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: Manfred Touron <[email protected]>
@moul moul added this to the 🏗4️⃣ test4.gno.land milestone Jul 8, 2024
@zivkovicmilos zivkovicmilos merged commit a40ac61 into gnolang:master Jul 8, 2024
9 checks passed
gfanton pushed a commit to gfanton/gno that referenced this pull request Jul 23, 2024
## Description

This PR improves the gno implementation of the `valopers` Realm.

Waiting on gnolang#2380 to add a context-based Govdao pattern before merging.

<details><summary>Contributors' checklist...</summary>

- [x] Added new tests, or not needed, or not feasible
- [x] Provided an example (e.g. screenshot) to aid review or the PR is
self-explanatory
- [x] Updated the official documentation or not needed
- [x] No breaking changes were made, or a `BREAKING CHANGE: xxx` message
was included in the description
- [x] 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: Manfred Touron <[email protected]>
gfanton pushed a commit to gfanton/gno that referenced this pull request Jul 23, 2024
This PR introduces a new pattern for arbitrary govdao proposals using
Gno code using contexts. It involves wrapping the provided closure with
a system that configures a `context.Context` with a field indicating
that the execution occurs in the context of an `approvedByGovDao`
proposal. This opens the door to a new ACL system, not based on
`PrevRealm()`, but on a context-based "certification" system.

I believe this pattern makes sense to exist; however, here are some
drawbacks I can see:

1. `context.Context` is not yet needed (no goroutine support), and we
may eventually never need this package depending on how we implement
goroutines internally. (h/t @thehowl)
2. `context.Context` is used like an environment variable, which
introduces implicitness—something we usually try to avoid to make Gno a
very explicit language. Explicitness brings “simplicity” and
“verifiability.”
3. The usual Go idiomatic way of using `context` is to pass it as the
first argument. If this becomes more common, it will result in more
contracts having exposed functions that are not callable by `maketx
call` (though they can be called with `maketx run` or via an import).

Depends on gnolang#2379  
Related to gnolang#2386

---------

Signed-off-by: moul <[email protected]>
Co-authored-by: Antonio Navarro Perez <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🧾 package/realm Tag used for new Realms or Packages.
Projects
Status: Done
Status: ✅ Done
Status: Done
Development

Successfully merging this pull request may close these issues.

3 participants