Comments (5)
I'm very skeptical that state should be reverted when an error is returned from a top level realm function; it seems inconsistent with go's behavior. For example, if I modify a value in go that exists in a scope outside of the function from which it is modified, I would expect that value to be persisted regardless of whether or not the function that modified it later returns an error. Returning an error usually means that the operation could not be fully completed as intended and any state modifications outside the scope of the function that returned the error will remain. Panicking means something went horribly wrong and we need to get rid of all state unless the panic is recovered. It seems like the current implementation most closely aligns with how the terms are used in go.
from gno.
I'm with @deelawn here for several reasons:
- Consistency: rollback only when returning an error on top-level methods but not on the rest is not consistent. It might mislead users.
- Unexpected: as @deelawn said, is not consistent with Go behavior.
- Limiting choices: We already have a way to roll back the Realm state, that is, throwing a panic. I can see use cases where a Realm's dev wants to return an error without rollbacking the whole state, like when saving some metadata about who voted, or metrics about the amount of people that used the Realm, as examples.
from gno.
Errors are just values, they have no special semantics within the language.
Just like you can return an integer, you can return an error. We shouldn't rollback when people create integers, right?
Panic, on the other hand, is special and does what you suggested. This proposal is basically to make errors be treated as panics. I am against.
from gno.
Okay. got it. Documentation already states that panics
revert state, but I will make sure to add mentions and examples of errors not reverting state, which might be what blockchain developers could expect. Thanks.
from gno.
Thank you for giving your thoughts @deelawn @ajnavarro @petar-dambovaliev
I think we can find good middle ground here -- don't introduce this top-level error logic, but make it clear in the documentation that panics
are equivalent to reverts. @leohhhn, what do you think?
from gno.
Related Issues (20)
- amino.WithTypes accepts types being given the same name
- Public key format mismatch between `gnoland secrets init` and `gnoland genesis validator add` HOT 6
- [GnoVM]: Do not allow realms to store references to objects owned by other realms
- RFC(philosophy): Limiting depth of commands and subcommands in CLIs HOT 1
- RFC(philosophy): Merge some standalone repos into this monorepo
- [Discussion/Request] Add a way to catch emitted events in `gno test`
- `Time.Now()` always return initial UNIX time HOT 2
- [gnokey] Make `gnokey query` more convenient HOT 1
- main README should disambiguate with gnosis project
- Oracle VRF HOT 2
- out of gas error is unclear `(VM call panic {WritePerByte})` HOT 1
- Incompatibility of `gnoland secrets init` with Read-Only mounted k8s Secrets
- [GnoVM] `TestSetRealm` not working properly in `gno test`
- contribs/gnokeykc has only tm2 features (missing thinkgs like maketx addpkg)
- RFC(gnovm): make all gno unit tests independent (and parallel)
- Validators cannot discover P2P peers when running as `StatefulSet` in k8s HOT 4
- [gnoland] Add `namespace` RPC endpoint HOT 2
- bug(gnovm): incorrect type comparison HOT 3
- Add/append balances and txs when genesis exists
- [docs] Update outdated images & gifs
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gno.