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

[META] Gaming #611

Open
moul opened this issue Mar 17, 2023 · 6 comments
Open

[META] Gaming #611

moul opened this issue Mar 17, 2023 · 6 comments

Comments

@moul
Copy link
Member

moul commented Mar 17, 2023

Let's create a space for discussing all things GNO+Gaming!

The use of gaming and smart contracts is already a growing trend, and we anticipate that this trend will continue to increase in the future.

Gaming will be an official incentivized topic of Game of Realms / Phase 2 (#390). Anyone is welcomed to start exploring now.

@moul
Copy link
Member Author

moul commented Mar 17, 2023

On a personal note, I plan to work on a Tic Tac Toe demo realm, with a focus on improving my own mental picture of everything that will make sense for gaming on gno in general.

Pre-start feeling:

Edit: super WIP -> #613

@grepsuzette
Copy link
Contributor

Cool! A tic tac toe would be interesting indeed.
Speaking of spaces, why not opening an IRC channel somewhere for devs?
I often feel like asking small questions, but Discord is too chaotic and heavy.

For example, a question I have:

Can a realm state be modified concurrently by more than 1 tx?

If Alice and Bob execute a tx at the same time, competing to change a list in the same leaf of an avl.Tree is one tx guaranteed to run AFTER the other one is finished?

@thehowl
Copy link
Member

thehowl commented Mar 17, 2023

One of the ideas I had in the past few weeks was that of trying to do an implementation of chess as a gno smart contract. At least a version of it as async, ie. correspondence chess, could be implemented without too much trouble, though having it with normal time-controls might be slightly harder. I might try giving it a shot especially if there is a sample tic-tac-toe to base myself on :)

@moul
Copy link
Member Author

moul commented Mar 17, 2023

@thehowl I'm excited to try it out!

@grepsuzette By the way, would you be interested in joining us for the next office hour to discuss it?

We just opened a new repo where you’ll be able to find the list of upcoming events soon:
https://github.com/gnolang/meetings

@moul
Copy link
Member Author

moul commented Mar 17, 2023

Can a realm state be modified concurrently by more than 1 tx?

No, it's not currently possible. Transactions (TXs) can arrive concurrently on different validators, which initiates the first round of consensus to determine the order of TXs. After that, TXs are executed sequentially. While we may consider implementing more concurrency features in the future, we will ensure to add all the necessary locking strategies to safely manage them.

@zivkovicmilos
Copy link
Member

Can a realm state be modified concurrently by more than 1 tx?

No, it's not currently possible. Transactions (TXs) can arrive concurrently on different validators, which initiates the first round of consensus to determine the order of TXs. After that, TXs are executed sequentially. While we may consider implementing more concurrency features in the future, we will ensure to add all the necessary locking strategies to safely manage them.

Sort of unrelated to this, but I found it interesting how Solana solved this problem of concurrent transactions (it's about the only part of Solana I actually like 🙃), and it's the key to how they can claim thousands of tps (even though in reality they don't nearly have the throughput).

Solana transactions hold additional metadata information that describes how a transaction will modify state. You don't have this moment with Ethereum, where you don't know how your state transition is going to play out unless you run it first. Solana transactions tell you exactly what they modify and how, and based on this information that you have upfront before putting the transactions to the runtime you can schedule them and run them concurrently without an issue. It's powerful because you can now concurrently execute reads, and shuffle in writes as needed.

You can learn more about it here, just thought it was cool to mention this if we are not bound by sequential txn execution like Ethereum

@moul moul mentioned this issue Aug 16, 2023
6 tasks
@moul moul moved this to 🌟 Wanted for Launch in 🚀 The Launch [DEPRECATED] Sep 5, 2023
@moul moul added this to the 🌟 main.gno.land (wanted) milestone Sep 8, 2023
grepsuzette added a commit to grepsuzette/gno that referenced this issue Jul 9, 2024
- add p/demo/tictactoe (basically @moul's model gnolang#613)
- add p/demo/tictactoe1p (human VS cpu logic, extending the above)
- add p/demo/ternary (to cope w/ not having C `a ? b : c` ternary operator)
- add r/demo/games (start addressing gnolang#611)
- add r/demo/games/tictactoe

This last realm is a playable demo
against a parrot which, somehow learned
how to play Tic-tac-toe.

This is a stateless realm which uses gnoweb
as a webserver and uses css to offer a game-like
experience without javascript.

this depends on gnolang#2553 (improved ufmt)
mvertes added a commit to mvertes/gno that referenced this issue Jul 25, 2024
A very simple game as a smart contract. It's possible to play
against yourself, or another opponent. UI could be improved.

No provision against cheating, no gain or automatic action.

Related to gnolang#611.
mvertes added a commit that referenced this issue Aug 30, 2024
A very simple game as a smart contract. It's possible to play against
yourself, or another opponent. UI could be improved.

No provision against cheating, no gain or automatic action.

Related to #611.

<img width="1003" alt="Screenshot 2024-07-24 at 16 24 28"
src="https://github.com/user-attachments/assets/a7c115ae-26c1-4d3b-9446-8571f1d98efb">

<!-- please provide a detailed description of the changes made in this
pull request. -->

<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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: 🌟 Wanted for Launch
Development

No branches or pull requests

5 participants