diff --git a/README.md b/README.md index 49ede01..f8ae501 100644 --- a/README.md +++ b/README.md @@ -1,96 +1,55 @@ -# squares-next +# squares.gg -This project is generated with the [create-solana-dapp](https://github.com/solana-developers/create-solana-dapp) generator. +This is a Next.js app with an Solana backend (using the Anchor framework) to store game state and handle +payments. I used it to learn the Solana account-based programming model. It never had a code review, so +I'm sure there are things that could be improved. -## Getting Started +I started working on this the day after the NFC/AFC championship games and it was ready for the Super Bowl, +despite only having the time after work and the time on weekends and despite not having worked with the +Solana programming model or Next.js, for that matter. -### Prerequisites +That's why it says "schizobuilt by @rhiza" at the bottom. I was just working as fast as I could to get it +done by the Super Bowl, with no regard for code quality, which I'm usually very adamant about. -- Node v18.18.0 or higher +That said, the app worked fine during the Super Bowl, people won money (ask [@brokenmechanic on twitter](https://twitter.com/MechanicBroken)) +and got their payouts. -- Rust v1.70.0 or higher -- Anchor CLI 0.29.0 or higher -- Solana CLI 1.17.0 or higher +# how it works -### Installation +The game board is a 10x10 grid that represents all possible scores of an NFL game. -#### Clone the repo +You set a price for the cost of each square, let's say 1 SOL per square for simplicity. This means once the +board is filled, there is 100 SOL in the pot. -```shell -git clone -cd -``` +At the end of each quarter, there is a payout for the player who owns the square that represents the score. +(By default, there's also a 5th payout for the final score, to allow for score changes in the event the game goes into overtime.) -#### Install Dependencies +You and your friends buy as many squares as you're comfortable wagering, usually 3 to 10 squares per person. -```shell -npm run install -``` +You have 5 chances to win 1/5th of the pot during the game. 5 chances to win 20 SOL, while usually wagering between +3 and 10 SOL. -#### Start the web app +image -``` -npm run dev -``` +In this game, this fucker `8eTK..kHEd` bought 3 squares and won 2 out of the 5 payouts. -## Apps +Even though the score changed from 3-10 to 13-10, that's the same square (3, 0), which you can see that he owned. -### anchor -This is a Solana program written in Rust using the Anchor framework. +# wat? (FAQ) -#### Commands +Q: how do 100 squares represent all scores in a football game?
+A: the scores are modulus 10, basically meaning you chop off all the numbers but the last one. `14 % 10 == 4` -You can use any normal anchor commands. Either move to the `anchor` directory and run the `anchor` command or prefix the command with `npm run`, eg: `npm run anchor`. +Q: wouldn't the squares with the most common scores like 14 and 7 be more valuable than the others, so it'd be unfair?
+A: yeah, those squares _are_ more valuable than 2 or 9. but the cells aren't numbered by their position in the grid. before +the game starts, there are x and y header rows whose values are randomized once the board's filled in. every square before +randomization has (approx?) the same probability of winning. -#### Sync the program id: +image image -Running this command will create a new keypair in the `anchor/target/deploy` directory and save the address to the Anchor config file and update the `declare_id!` macro in the `./src/lib.rs` file of the program. +# contact -You will manually need to update the constant in `anchor/lib/counter-exports.ts` to match the new program id. - -```shell -npm run anchor keys sync -``` - -#### Build the program: - -```shell -npm run anchor-build -``` - -#### Start the test validator with the program deployed: - -```shell -npm run anchor-localnet -``` - -#### Run the tests - -```shell -npm run anchor-test -``` - -#### Deploy to Devnet - -```shell -npm run anchor deploy --provider.cluster devnet -``` - -### web - -This is a React app that uses the Anchor generated client to interact with the Solana program. - -#### Commands - -Start the web app - -```shell -npm run dev -``` - -Build the web app - -```shell -npm run build -``` +[@rhizanthemum on twitter](https://x.com/rhizanthemum/) +[@rhiza on warpcast](https://warpcast.com/rhiza) +[chunky metro discord](https://discord.gg/invite/3gpAQDuAwy)