├── .github └── workflows │ └── test.yml ├── .gitignore ├── .gitmodules ├── README.md ├── broadcast └── Deploy.s.sol │ └── 10143 │ ├── run-1743147792.json │ ├── run-1743152781.json │ ├── run-1743408572.json │ ├── run-1743496583.json │ ├── run-1743498025.json │ ├── run-1745469906.json │ ├── run-1745556899.json │ ├── run-1746797402.json │ ├── run-1747028257.json │ └── run-latest.json ├── foundry.toml ├── script └── Deploy.s.sol ├── src ├── LibBoard.sol └── Monad2048.sol └── test ├── LibBoardTest.t.sol └── Monad2048Test.t.sol /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | pull_request: 6 | workflow_dispatch: 7 | 8 | env: 9 | FOUNDRY_PROFILE: ci 10 | 11 | jobs: 12 | check: 13 | strategy: 14 | fail-fast: true 15 | 16 | name: Foundry project 17 | runs-on: ubuntu-latest 18 | steps: 19 | - uses: actions/checkout@v4 20 | with: 21 | submodules: recursive 22 | 23 | - name: Install Foundry 24 | uses: foundry-rs/foundry-toolchain@v1 25 | 26 | - name: Show Forge version 27 | run: | 28 | forge --version 29 | 30 | - name: Run Forge fmt 31 | run: | 32 | forge fmt --check 33 | id: fmt 34 | 35 | - name: Run Forge build 36 | run: | 37 | forge build --sizes 38 | id: build 39 | 40 | - name: Run Forge tests 41 | run: | 42 | forge test -vvv 43 | id: test 44 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiler files 2 | cache/ 3 | out/ 4 | 5 | # Ignores development broadcast logs 6 | !/broadcast 7 | /broadcast/*/31337/ 8 | /broadcast/**/dry-run/ 9 | 10 | # Docs 11 | docs/ 12 | 13 | # Dotenv file 14 | .env 15 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/forge-std"] 2 | path = lib/forge-std 3 | url = https://github.com/foundry-rs/forge-std 4 | [submodule "lib/solady"] 5 | path = lib/solady 6 | url = https://github.com/Vectorized/solady 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Play 2048 on Monad 2 | 3 | **Check out a full writeup of how we built this [here](https://blog.monad.xyz/blog/build-2048).** 4 | 5 | Smart contracts that let you play a game of 2048 entirely on-chain. The game is deployed on [Monad testnet](https://testnet.monad.xyz/) to showcase how Monad is well suited for building fast paced games with a high volume of interactions. 6 | 7 | ### About the game 8 | 9 | From the [2048 Wikipedia]() page: 10 | 11 | - 2048 is a single-player sliding tile puzzle video game. 12 | - 2048 is played on a plain 4×4 grid, with numbered tiles that slide when a player moves them using the four arrow keys. 13 | - The game begins with two tiles already in the grid, having a value of either 2 or 4, and another such tile appears in a random empty space after each turn. - Tiles with a value of 2 appear 90% of the time, and tiles with a value of 4 appear 10% of the time. 14 | - Tiles slide as far as possible in the chosen direction until they are stopped by either another tile or the edge of the grid. If two tiles of the same number collide while moving, they will merge into a tile with the total value of the two tiles that collided. 15 | - The resulting tile cannot merge with another tile again in the same move. 16 | 17 | ## Deployments 18 | 19 | `Monad2048.sol` is deployed on Monad testnet: [0xe0FA8195AE92b9C473c0c0c12c2D6bCbd245De47](https://testnet.monadexplorer.com/address/0xe0FA8195AE92b9C473c0c0c12c2D6bCbd245De47). 20 | 21 | ## Development 22 | 23 | This is a Foundry project. You can find installation instructions for foundry, [here](https://book.getfoundry.sh/getting-started/installation). Clone the repository and run the following commands: 24 | 25 | ### Install 26 | 27 | ```shell 28 | $ forge install 29 | ``` 30 | 31 | ### Build 32 | 33 | ```shell 34 | $ forge build 35 | ``` 36 | 37 | ### Test 38 | 39 | ```shell 40 | $ forge test 41 | ``` 42 | 43 | ### Format 44 | 45 | ```shell 46 | $ forge fmt 47 | ``` 48 | 49 | ## Documentation 50 | 51 | The `Monad2048.sol` smart contract contains the API to play a game of 2048. 52 | 53 | - `startGame`: Starts a new game of 2048 for a player (`msg.sender`). The player reveals and reserves the first 4 boards of the game and the contract validates that this is a legal game of 2048. 54 | - `play`: Lets a player make a move for a game by providing the game's session ID and the result board or applying a move (UP, DOWN, LEFT or RIGHT) on the latest board of the game. The contract then validates that the player has made a valid move (board transformation). 55 | 56 | The `LiBoard` library implements the logic of board transformations, and other helper functions for extracting information about a given board position. 57 | 58 | The contract has no permissions or privileged actors. 59 | 60 | ## Feedback 61 | 62 | Please open issues or PRs on this repositories for any feedback. 63 | -------------------------------------------------------------------------------- /broadcast/Deploy.s.sol/10143/run-1743152781.json: -------------------------------------------------------------------------------- 1 | { 2 | "transactions": [ 3 | { 4 | "hash": "0x5312b1db067c3d897105e51f9e823e3d6f63f1d75678681a2c54295c50185087", 5 | "transactionType": "CREATE2", 6 | "contractName": "Board", 7 | "contractAddress": "0xc08a3e243288827586e0c3a590290593b2977e6b", 8 | "function": null, 9 | "arguments": null, 10 | "transaction": { 11 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 12 | "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", 13 | "gas": "0x24f8c1", 14 | "input": "0x0000000000000000000000000000000000000000000000000000000000000000611ebb61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100f3575f3560e01c806337afd9641161009557806365b559b01161006f57806365b559b01461028f5780637e8dbaf6146102bf578063f173e012146102ef578063f54a36eb1461031f576100f3565b806337afd964146102115780633b9f7a1f1461024157806364cd159514610271576100f3565b806324f4ec51116100d157806324f4ec51146101635780632c5f3c4514610181578063312ffe40146101b157806335e37c72146101e1576100f3565b806301df1995146100f757806319c14718146101155780631af4f97014610145575b5f5ffd5b6100ff61034f565b60405161010c919061191d565b60405180910390f35b61012f600480360381019061012a9190611964565b610354565b60405161013c91906119a9565b60405180910390f35b61014d61045f565b60405161015a919061191d565b60405180910390f35b61016b610464565b604051610178919061191d565b60405180910390f35b61019b60048036038101906101969190611964565b610468565b6040516101a8919061191d565b60405180910390f35b6101cb60048036038101906101c69190611964565b610798565b6040516101d8919061191d565b60405180910390f35b6101fb60048036038101906101f691906119f8565b610ac8565b6040516102089190611a45565b60405180910390f35b61022b60048036038101906102269190611a91565b610af3565b604051610238919061191d565b60405180910390f35b61025b60048036038101906102569190611964565b610d60565b604051610268919061191d565b60405180910390f35b61027961117c565b604051610286919061191d565b60405180910390f35b6102a960048036038101906102a49190611ae1565b611181565b6040516102b691906119a9565b60405180910390f35b6102d960048036038101906102d49190611b1f565b61135d565b6040516102e6919061191d565b60405180910390f35b61030960048036038101906103049190611b4a565b611467565b604051610316919061191d565b60405180910390f35b61033960048036038101906103349190611964565b6114b7565b604051610346919061191d565b60405180910390f35b600181565b5f5f6082600284901b901c14610396576040517f5f23b72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f90505b60108160ff16101561041a575f6103b38583610ac8565b905060038160ff16106103f2576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160ff16111561040c57828061040890611bc7565b9350505b50808060010191505061039c565b5060028114610455576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001915050919050565b600381565b5f81565b5f5f5f90505b60048160ff16101561078f576104826118e3565b5f5f90505b60048160ff1610156104e8576104b485826004866104a59190611c0e565b6104af9190611c4a565b610ac8565b828260ff16600481106104ca576104c9611c7e565b5b602002019060ff16908160ff16815250508080600101915050610487565b506104f16118e3565b5f5f90505f5f90505b60048160ff161015610586575f848260ff166004811061051d5761051c611c7e565b5b602002015160ff161461057957838160ff16600481106105405761053f611c7e565b5b602002015183838061055190611cab565b945060ff166004811061056757610566611c7e565b5b602002019060ff16908160ff16815250505b80806001019150506104fa565b505f5f90505b60038160ff161015610683575f838260ff16600481106105af576105ae611c7e565b5b602002015160ff161415801561060a5750826001826105ce9190611c4a565b60ff16600481106105e2576105e1611c7e565b5b602002015160ff16838260ff1660048110610600576105ff611c7e565b5b602002015160ff16145b1561067657828160ff166004811061062557610624611c7e565b5b60200201805180919061063790611cab565b60ff1660ff16815250505f836001836106509190611c4a565b60ff166004811061066457610663611c7e565b5b602002019060ff16908160ff16815250505b808060010191505061058c565b5061068c6118e3565b5f91505f5f90505b60048160ff161015610720575f848260ff16600481106106b7576106b6611c7e565b5b602002015160ff161461071357838160ff16600481106106da576106d9611c7e565b5b60200201518284806106eb90611cab565b955060ff166004811061070157610700611c7e565b5b602002019060ff16908160ff16815250505b8080600101915050610694565b505f5f90505b60048160ff16101561077d5761076e88826004896107449190611c0e565b61074e9190611c4a565b848460ff166004811061076457610763611c7e565b5b6020020151611467565b97508080600101915050610726565b5050505050808060010191505061046e565b50819050919050565b5f5f5f90505b60048160ff161015610abf576107b26118e3565b5f5f90505b60048160ff161015610818576107e485846004846107d59190611c0e565b6107df9190611c4a565b610ac8565b828260ff16600481106107fa576107f9611c7e565b5b602002019060ff16908160ff168152505080806001019150506107b7565b506108216118e3565b5f5f90505f5f90505b60048160ff1610156108b6575f848260ff166004811061084d5761084c611c7e565b5b602002015160ff16146108a957838160ff16600481106108705761086f611c7e565b5b602002015183838061088190611cab565b945060ff166004811061089757610896611c7e565b5b602002019060ff16908160ff16815250505b808060010191505061082a565b505f5f90505b60038160ff1610156109b3575f838260ff16600481106108df576108de611c7e565b5b602002015160ff161415801561093a5750826001826108fe9190611c4a565b60ff166004811061091257610911611c7e565b5b602002015160ff16838260ff16600481106109305761092f611c7e565b5b602002015160ff16145b156109a657828160ff166004811061095557610954611c7e565b5b60200201805180919061096790611cab565b60ff1660ff16815250505f836001836109809190611c4a565b60ff166004811061099457610993611c7e565b5b602002019060ff16908160ff16815250505b80806001019150506108bc565b506109bc6118e3565b5f91505f5f90505b60048160ff161015610a50575f848260ff16600481106109e7576109e6611c7e565b5b602002015160ff1614610a4357838160ff1660048110610a0a57610a09611c7e565b5b6020020151828480610a1b90611cab565b955060ff1660048110610a3157610a30611c7e565b5b602002019060ff16908160ff16815250505b80806001019150506109c4565b505f5f90505b60048160ff161015610aad57610a9e8887600484610a749190611c0e565b610a7e9190611c4a565b848460ff1660048110610a9457610a93611c7e565b5b6020020151611467565b97508080600101915050610a56565b5050505050808060010191505061079e565b50819050919050565b5f60ff600883600f610ada9190611cd3565b610ae49190611c0e565b60ff1684901c16905092915050565b5f60048310610b2e576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8303610b4557610b3e84610798565b9050610b8c565b60018303610b5d57610b56846114b7565b9050610b8b565b60038303610b7557610b6e84610d60565b9050610b8a565b60028303610b8957610b8684610468565b90505b5b5b5b608081901b608085901b03610bcd576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505f5f90505b60108160ff161015610c11575f610bed8483610ac8565b60ff1603610c04578180610c0090611bc7565b9250505b8080600101915050610bd6565b505f811115610d58575f85858486604051602001610c329493929190611d47565b604051602081830303815290604052805190602001205f1c90505f8267ffffffffffffffff811115610c6757610c66611d94565b5b604051908082528060200260200182016040528015610c955781602001602082028036833780820191505090505b5090505f5f90505f5f90505b60108160ff161015610d04575f610cb88783610ac8565b60ff1603610cf75780838381518110610cd457610cd3611c7e565b5b602002602001019060ff16908160ff16815250508180610cf390611bc7565b9250505b8080600101915050610ca1565b50610d5285838686610d169190611dee565b81518110610d2757610d26611c7e565b5b6020026020010151605a606487610d3e9190611dee565b11610d4a576001610d4d565b60025b611467565b94505050505b509392505050565b5f5f5f90505b60048160ff16101561117357610d7a6118e3565b5f5f90505b60048160ff161015610de057610dac8582600486610d9d9190611c0e565b610da79190611c4a565b610ac8565b828260ff1660048110610dc257610dc1611c7e565b5b602002019060ff16908160ff16815250508080600101915050610d7f565b50610de96118e3565b5f5f90505b60048160ff161015610e555782816003610e089190611cd3565b60ff1660048110610e1c57610e1b611c7e565b5b6020020151828260ff1660048110610e3757610e36611c7e565b5b602002019060ff16908160ff16815250508080600101915050610dee565b50610e5e6118e3565b5f5f90505f5f90505b60048160ff161015610ef3575f848260ff1660048110610e8a57610e89611c7e565b5b602002015160ff1614610ee657838160ff1660048110610ead57610eac611c7e565b5b6020020151838380610ebe90611cab565b945060ff1660048110610ed457610ed3611c7e565b5b602002019060ff16908160ff16815250505b8080600101915050610e67565b505f5f90505b60038160ff161015610ff0575f838260ff1660048110610f1c57610f1b611c7e565b5b602002015160ff1614158015610f77575082600182610f3b9190611c4a565b60ff1660048110610f4f57610f4e611c7e565b5b602002015160ff16838260ff1660048110610f6d57610f6c611c7e565b5b602002015160ff16145b15610fe357828160ff1660048110610f9257610f91611c7e565b5b602002018051809190610fa490611cab565b60ff1660ff16815250505f83600183610fbd9190611c4a565b60ff1660048110610fd157610fd0611c7e565b5b602002019060ff16908160ff16815250505b8080600101915050610ef9565b50610ff96118e3565b5f91505f5f90505b60048160ff16101561108d575f848260ff166004811061102457611023611c7e565b5b602002015160ff161461108057838160ff166004811061104757611046611c7e565b5b602002015182848061105890611cab565b955060ff166004811061106e5761106d611c7e565b5b602002019060ff16908160ff16815250505b8080600101915050611001565b506110966118e3565b5f5f90505b60048160ff16101561110257828160036110b59190611cd3565b60ff16600481106110c9576110c8611c7e565b5b6020020151828260ff16600481106110e4576110e3611c7e565b5b602002019060ff16908160ff1681525050808060010191505061109b565b505f5f90505b60048160ff16101561115f576111508a8260048b6111269190611c0e565b6111309190611c4a565b848460ff166004811061114657611145611c7e565b5b6020020151611467565b99508080600101915050611108565b505050505050508080600101915050610d66565b50819050919050565b600281565b5f5f6088600885901b901c146111c3576040517f5f23b72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6088600884901b901c14611204576040517f5f23b72600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f61120f846118d3565b90505f8160ff160361122b5761122485610798565b915061127b565b60018160ff16036112465761123f856114b7565b915061127a565b60038160ff16036112615761125a85610d60565b9150611279565b60028160ff16036112785761127585610468565b91505b5b5b5b5f5f90505f5f90505f5f90505b60108160ff1610156112d25761129e8782610ac8565b60ff166112ab8683610ac8565b60ff16146112c55781806112be90611cab565b9250508092505b8080600101915050611288565b505f6112de8784610ac8565b60ff1690505f6112ee8685610ac8565b60ff161480156112fd57505f81115b80156113095750600381105b8015611318575060018260ff16145b61134e576040517f62417ce600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60019550505050505092915050565b5f5f826040516020016113709190611e1e565b604051602081830303815290604052805190602001205f1c90505f6010826113989190611dee565b9050816040516020016113ab9190611e38565b604051602081830303815290604052805190602001205f1c91505f6010836113d39190611dee565b90505b8181036113fd5760106001826113ec9190611e52565b6113f69190611dee565b90506113d6565b5f5f90505b60108160ff16101561145e57828160ff1614806114215750818160ff16145b156114515761144e8582605a60648861143a9190611dee565b11611446576001611449565b60025b611467565b94505b8080600101915050611402565b50505050919050565b5f600883600f6114779190611cd3565b6114819190611c0e565b60ff168260ff16901b600884600f6114999190611cd3565b6114a39190611c0e565b60ff1660ff901b1985161790509392505050565b5f5f5f90505b60048160ff1610156118ca576114d16118e3565b5f5f90505b60048160ff1610156115375761150385846004846114f49190611c0e565b6114fe9190611c4a565b610ac8565b828260ff166004811061151957611518611c7e565b5b602002019060ff16908160ff168152505080806001019150506114d6565b506115406118e3565b5f5f90505b60048160ff1610156115ac578281600361155f9190611cd3565b60ff166004811061157357611572611c7e565b5b6020020151828260ff166004811061158e5761158d611c7e565b5b602002019060ff16908160ff16815250508080600101915050611545565b506115b56118e3565b5f5f90505f5f90505b60048160ff16101561164a575f848260ff16600481106115e1576115e0611c7e565b5b602002015160ff161461163d57838160ff166004811061160457611603611c7e565b5b602002015183838061161590611cab565b945060ff166004811061162b5761162a611c7e565b5b602002019060ff16908160ff16815250505b80806001019150506115be565b505f5f90505b60038160ff161015611747575f838260ff166004811061167357611672611c7e565b5b602002015160ff16141580156116ce5750826001826116929190611c4a565b60ff16600481106116a6576116a5611c7e565b5b602002015160ff16838260ff16600481106116c4576116c3611c7e565b5b602002015160ff16145b1561173a57828160ff16600481106116e9576116e8611c7e565b5b6020020180518091906116fb90611cab565b60ff1660ff16815250505f836001836117149190611c4a565b60ff166004811061172857611727611c7e565b5b602002019060ff16908160ff16815250505b8080600101915050611650565b506117506118e3565b5f91505f5f90505b60048160ff1610156117e4575f848260ff166004811061177b5761177a611c7e565b5b602002015160ff16146117d757838160ff166004811061179e5761179d611c7e565b5b60200201518284806117af90611cab565b955060ff16600481106117c5576117c4611c7e565b5b602002019060ff16908160ff16815250505b8080600101915050611758565b506117ed6118e3565b5f5f90505b60048160ff161015611859578281600361180c9190611cd3565b60ff16600481106118205761181f611c7e565b5b6020020151828260ff166004811061183b5761183a611c7e565b5b602002019060ff16908160ff168152505080806001019150506117f2565b505f5f90505b60048160ff1610156118b6576118a78a8960048461187d9190611c0e565b6118879190611c4a565b848460ff166004811061189d5761189c611c7e565b5b6020020151611467565b9950808060010191505061185f565b5050505050505080806001019150506114bd565b50819050919050565b5f60ff60f883901c169050919050565b6040518060800160405280600490602082028036833780820191505090505090565b5f819050919050565b61191781611905565b82525050565b5f6020820190506119305f83018461190e565b92915050565b5f5ffd5b61194381611905565b811461194d575f5ffd5b50565b5f8135905061195e8161193a565b92915050565b5f6020828403121561197957611978611936565b5b5f61198684828501611950565b91505092915050565b5f8115159050919050565b6119a38161198f565b82525050565b5f6020820190506119bc5f83018461199a565b92915050565b5f60ff82169050919050565b6119d7816119c2565b81146119e1575f5ffd5b50565b5f813590506119f2816119ce565b92915050565b5f5f60408385031215611a0e57611a0d611936565b5b5f611a1b85828601611950565b9250506020611a2c858286016119e4565b9150509250929050565b611a3f816119c2565b82525050565b5f602082019050611a585f830184611a36565b92915050565b5f819050919050565b611a7081611a5e565b8114611a7a575f5ffd5b50565b5f81359050611a8b81611a67565b92915050565b5f5f5f60608486031215611aa857611aa7611936565b5b5f611ab586828701611950565b9350506020611ac686828701611950565b9250506040611ad786828701611a7d565b9150509250925092565b5f5f60408385031215611af757611af6611936565b5b5f611b0485828601611950565b9250506020611b1585828601611950565b9150509250929050565b5f60208284031215611b3457611b33611936565b5b5f611b4184828501611a7d565b91505092915050565b5f5f5f60608486031215611b6157611b60611936565b5b5f611b6e86828701611950565b9350506020611b7f868287016119e4565b9250506040611b90868287016119e4565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611bd182611905565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c0357611c02611b9a565b5b600182019050919050565b5f611c18826119c2565b9150611c23836119c2565b9250828202611c31816119c2565b9150808214611c4357611c42611b9a565b5b5092915050565b5f611c54826119c2565b9150611c5f836119c2565b9250828201905060ff811115611c7857611c77611b9a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611cb5826119c2565b915060ff8203611cc857611cc7611b9a565b5b600182019050919050565b5f611cdd826119c2565b9150611ce8836119c2565b9250828203905060ff811115611d0157611d00611b9a565b5b92915050565b5f819050919050565b611d21611d1c82611905565b611d07565b82525050565b5f819050919050565b611d41611d3c82611a5e565b611d27565b82525050565b5f611d528287611d10565b602082019150611d628286611d10565b602082019150611d728285611d10565b602082019150611d828284611d30565b60208201915081905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611df882611905565b9150611e0383611905565b925082611e1357611e12611dc1565b5b828206905092915050565b5f611e298284611d30565b60208201915081905092915050565b5f611e438284611d10565b60208201915081905092915050565b5f611e5c82611905565b9150611e6783611905565b9250828201905080821115611e7f57611e7e611b9a565b5b9291505056fea2646970667358221220fa867ae34d8048e805af2679dd7ddcb1b030217712915ccfb6b220636c10087564736f6c634300081c0033", 15 | "nonce": "0x2", 16 | "chainId": "0x279f" 17 | }, 18 | "additionalContracts": [], 19 | "isFixedGasLimit": false 20 | }, 21 | { 22 | "hash": "0x4e5b8bf263f57523a18296132cd4dfbe75e254e8a942a9a965ebf5f201f74f81", 23 | "transactionType": "CREATE", 24 | "contractName": "Play2048", 25 | "contractAddress": "0xbb9378705e67a5439f4aef160ceaac7d932bf119", 26 | "function": null, 27 | "arguments": [ 28 | "0x234828a40de63d21072D1218cFb5D208654C12Bb" 29 | ], 30 | "transaction": { 31 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 32 | "gas": "0x148ad1", 33 | "value": "0x0", 34 | "input": "0x60806040527f3230343800000000000000000000000000000000000000000000000000000000600155348015610033575f5ffd5b5060405161129f38038061129f83398181016040528101906100559190610198565b6100648161006a60201b60201c565b506101c3565b61007861013660201b60201c565b156100dd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b8217815550610133565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b5f90565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101678261013e565b9050919050565b6101778161015d565b8114610181575f5ffd5b50565b5f815190506101928161016e565b92915050565b5f602082840312156101ad576101ac61013a565b5b5f6101ba84828501610184565b91505092915050565b6110cf806101d05f395ff3fe608060405260043610610113575f3560e01c806354d1f13d1161009f578063bedb86fb11610063578063bedb86fb14610345578063d65ab5f21461036d578063f04e283e14610397578063f2fde38b146103b3578063fee81cf4146103cf57610113565b806354d1f13d146102a1578063715018a6146102ab57806375b238fc146102b55780638da5cb5b146102df578063ac88036c1461030957610113565b806325692962116100e657806325692962146101c75780632de94807146101d15780633e98ab541461020d5780634a4ee7b114610249578063514e62fc1461026557610113565b80630ea30f4814610117578063183a4f6e146101535780631c10893f1461016f5780631cd64df41461018b575b5f5ffd5b348015610122575f5ffd5b5061013d60048036038101906101389190610c8a565b61040b565b60405161014a9190610cf4565b60405180910390f35b61016d60048036038101906101689190610d40565b61043b565b005b61018960048036038101906101849190610d95565b610448565b005b348015610196575f5ffd5b506101b160048036038101906101ac9190610d95565b61045e565b6040516101be9190610ded565b60405180910390f35b6101cf610474565b005b3480156101dc575f5ffd5b506101f760048036038101906101f29190610e06565b6104c5565b6040516102049190610e40565b60405180910390f35b348015610218575f5ffd5b50610233600480360381019061022e9190610e59565b6104de565b6040516102409190610e40565b60405180910390f35b610263600480360381019061025e9190610d95565b610729565b005b348015610270575f5ffd5b5061028b60048036038101906102869190610d95565b61073f565b6040516102989190610ded565b60405180910390f35b6102a9610756565b005b6102b361078f565b005b3480156102c0575f5ffd5b506102c96107a2565b6040516102d69190610e40565b60405180910390f35b3480156102ea575f5ffd5b506102f36107a7565b6040516103009190610cf4565b60405180910390f35b348015610314575f5ffd5b5061032f600480360381019061032a9190610c8a565b6107cf565b60405161033c9190610e40565b60405180910390f35b348015610350575f5ffd5b5061036b60048036038101906103669190610ec1565b6107e4565b005b348015610378575f5ffd5b50610381610842565b60405161038e9190610e40565b60405180910390f35b6103b160048036038101906103ac9190610e06565b610a1c565b005b6103cd60048036038101906103c89190610e06565b610a5a565b005b3480156103da575f5ffd5b506103f560048036038101906103f09190610e06565b610a83565b6040516104029190610e40565b60405180910390f35b6003602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6104453382610a9c565b50565b610450610aab565b61045a8282610ae2565b5050565b5f818261046a856104c5565b1614905092915050565b5f61047d610af2565b67ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b5f638b78c6d8600c52815f526020600c20549050919050565b5f5f5f9054906101000a900460ff1615610524576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b43600154604051602001610539929190610f2c565b604051602081830303815290604052805190602001206001819055505f33905060035f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105ee576040517f2db47d5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60025f8681526020019081526020015f205490505f811161063c576040517f3a5f7b5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73c08a3e243288827586e0c3a590290593b2977e6b6337afd96482866001546040518463ffffffff1660e01b815260040161067993929190610f75565b602060405180830381865af4158015610694573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b89190610fbe565b92508260025f8781526020019081526020015f2081905550848273ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce8428686604051610719929190610fe9565b60405180910390a3505092915050565b610731610aab565b61073b8282610a9c565b5050565b5f5f8261074b856104c5565b161415905092915050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b610797610aab565b6107a05f610afc565b565b600181565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754905090565b6002602052805f5260405f205f915090505481565b60016107ef81610bc2565b815f5f6101000a81548160ff0219169083151502179055507f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd2826040516108369190610ded565b60405180910390a15050565b5f5f5f9054906101000a900460ff1615610888576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4360015460405160200161089d929190610f2c565b604051602081830303815290604052805190602001206001819055505f3390505f33436040516020016108d1929190611055565b6040516020818303038152906040528051906020012090508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c08a3e243288827586e0c3a590290593b2977e6b637e8dbaf66001546040518263ffffffff1660e01b81526004016109719190611080565b602060405180830381865af415801561098c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b09190610fbe565b92508260025f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff167f0d0a2245f107bccacfa55be58c1202917e494b61aae007897d04dc991442408d85604051610a0f9190610e40565b60405180910390a3505090565b610a24610aab565b63389a75e1600c52805f526020600c208054421115610a4a57636f5e88185f526004601cfd5b5f815550610a5781610afc565b50565b610a62610aab565b8060601b610a7757637448fbae5f526004601cfd5b610a8081610afc565b50565b5f63389a75e1600c52815f526020600c20549050919050565b610aa782825f610bf7565b5050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610ae0576382b429005f526004601cfd5b565b610aee82826001610bf7565b5050565b5f6202a300905090565b610b04610c4f565b15610b69577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b8217815550610bbf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b638b78c6d819543314610bf457638b78c6d8600c52335f52806020600c205416610bf3576382b429005f526004601cfd5b5b50565b638b78c6d8600c52825f526020600c20805483811783610c1957848216821890505b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f5fa3505050505050565b5f90565b5f5ffd5b5f819050919050565b610c6981610c57565b8114610c73575f5ffd5b50565b5f81359050610c8481610c60565b92915050565b5f60208284031215610c9f57610c9e610c53565b5b5f610cac84828501610c76565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610cde82610cb5565b9050919050565b610cee81610cd4565b82525050565b5f602082019050610d075f830184610ce5565b92915050565b5f819050919050565b610d1f81610d0d565b8114610d29575f5ffd5b50565b5f81359050610d3a81610d16565b92915050565b5f60208284031215610d5557610d54610c53565b5b5f610d6284828501610d2c565b91505092915050565b610d7481610cd4565b8114610d7e575f5ffd5b50565b5f81359050610d8f81610d6b565b92915050565b5f5f60408385031215610dab57610daa610c53565b5b5f610db885828601610d81565b9250506020610dc985828601610d2c565b9150509250929050565b5f8115159050919050565b610de781610dd3565b82525050565b5f602082019050610e005f830184610dde565b92915050565b5f60208284031215610e1b57610e1a610c53565b5b5f610e2884828501610d81565b91505092915050565b610e3a81610d0d565b82525050565b5f602082019050610e535f830184610e31565b92915050565b5f5f60408385031215610e6f57610e6e610c53565b5b5f610e7c85828601610c76565b9250506020610e8d85828601610d2c565b9150509250929050565b610ea081610dd3565b8114610eaa575f5ffd5b50565b5f81359050610ebb81610e97565b92915050565b5f60208284031215610ed657610ed5610c53565b5b5f610ee384828501610ead565b91505092915050565b5f819050919050565b610f06610f0182610d0d565b610eec565b82525050565b5f819050919050565b610f26610f2182610c57565b610f0c565b82525050565b5f610f378285610ef5565b602082019150610f478284610f15565b6020820191508190509392505050565b610f6081610d0d565b82525050565b610f6f81610c57565b82525050565b5f606082019050610f885f830186610f57565b610f956020830185610f57565b610fa26040830184610f66565b949350505050565b5f81519050610fb881610d16565b92915050565b5f60208284031215610fd357610fd2610c53565b5b5f610fe084828501610faa565b91505092915050565b5f604082019050610ffc5f830185610e31565b6110096020830184610e31565b9392505050565b5f8160601b9050919050565b5f61102682611010565b9050919050565b5f6110378261101c565b9050919050565b61104f61104a82610cd4565b61102d565b82525050565b5f611060828561103e565b6014820191506110708284610ef5565b6020820191508190509392505050565b5f6020820190506110935f830184610f66565b9291505056fea2646970667358221220076da121549df007ff18bc47594cab292d48362a6178c5268b07a1ed56dd708e64736f6c634300081c0033000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb", 35 | "nonce": "0x3", 36 | "chainId": "0x279f" 37 | }, 38 | "additionalContracts": [], 39 | "isFixedGasLimit": false 40 | } 41 | ], 42 | "receipts": [ 43 | { 44 | "status": "0x1", 45 | "cumulativeGasUsed": "0x1a93f35", 46 | "logs": [], 47 | "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 48 | "type": "0x2", 49 | "transactionHash": "0x5312b1db067c3d897105e51f9e823e3d6f63f1d75678681a2c54295c50185087", 50 | "transactionIndex": "0x75", 51 | "blockHash": "0xc0324854ff5e70727aa2d8535bd4c8620b99fb1160fa1c4f7dc34df30747a6f9", 52 | "blockNumber": "0x959a27", 53 | "gasUsed": "0x24f8c1", 54 | "effectiveGasPrice": "0xba43b7401", 55 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 56 | "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", 57 | "contractAddress": null 58 | }, 59 | { 60 | "status": "0x1", 61 | "cumulativeGasUsed": "0x3061871", 62 | "logs": [ 63 | { 64 | "address": "0xbb9378705e67a5439f4aef160ceaac7d932bf119", 65 | "topics": [ 66 | "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", 67 | "0x0000000000000000000000000000000000000000000000000000000000000000", 68 | "0x000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb" 69 | ], 70 | "data": "0x", 71 | "blockHash": "0x15d2226870555edb745a544a748c39dfe1c5f1d216a5d864dd96c0564c90aed0", 72 | "blockNumber": "0x959a2a", 73 | "blockTimestamp": "0x67e6668c", 74 | "transactionHash": "0x4e5b8bf263f57523a18296132cd4dfbe75e254e8a942a9a965ebf5f201f74f81", 75 | "transactionIndex": "0x5b", 76 | "logIndex": "0xb4", 77 | "removed": false 78 | } 79 | ], 80 | "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000004000000000000008000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000020000040000400000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000000000000000000000000000000000000000000000000000000000000000", 81 | "type": "0x2", 82 | "transactionHash": "0x4e5b8bf263f57523a18296132cd4dfbe75e254e8a942a9a965ebf5f201f74f81", 83 | "transactionIndex": "0x5b", 84 | "blockHash": "0x15d2226870555edb745a544a748c39dfe1c5f1d216a5d864dd96c0564c90aed0", 85 | "blockNumber": "0x959a2a", 86 | "gasUsed": "0x148ad1", 87 | "effectiveGasPrice": "0xba43b7401", 88 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 89 | "to": null, 90 | "contractAddress": "0xbb9378705e67a5439f4aef160ceaac7d932bf119" 91 | } 92 | ], 93 | "libraries": [ 94 | "src/LibBoard.sol:Board:0xc08a3e243288827586e0c3a590290593b2977e6b" 95 | ], 96 | "pending": [], 97 | "returns": { 98 | "gameContract": { 99 | "internal_type": "address", 100 | "value": "0xBb9378705E67a5439f4AEF160cEAaC7D932BF119" 101 | } 102 | }, 103 | "timestamp": 1743152781, 104 | "chain": 10143, 105 | "commit": "36b502f" 106 | } -------------------------------------------------------------------------------- /broadcast/Deploy.s.sol/10143/run-1743408572.json: -------------------------------------------------------------------------------- 1 | { 2 | "transactions": [ 3 | { 4 | "hash": "0x4ec9c4d142533240d28ad1c92c374b550d14f26c9656a914dcf61a9b8aee5d24", 5 | "transactionType": "CREATE", 6 | "contractName": "Play2048", 7 | "contractAddress": "0xe1e5f226f8dac0bac6b363c6e0b8a38a5dc7f1fb", 8 | "function": null, 9 | "arguments": [ 10 | "0x234828a40de63d21072D1218cFb5D208654C12Bb" 11 | ], 12 | "transaction": { 13 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 14 | "gas": "0x179d94", 15 | "value": "0x0", 16 | "input": "0x60806040527f3230343800000000000000000000000000000000000000000000000000000000600155348015610033575f5ffd5b5060405161156d38038061156d83398181016040528101906100559190610198565b6100648161006a60201b60201c565b506101c3565b61007861013660201b60201c565b156100dd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b8217815550610133565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b5f90565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101678261013e565b9050919050565b6101778161015d565b8114610181575f5ffd5b50565b5f815190506101928161016e565b92915050565b5f602082840312156101ad576101ac61013a565b5b5f6101ba84828501610184565b91505092915050565b61139d806101d05f395ff3fe60806040526004361061011e575f3560e01c8063715018a61161009f578063d65ab5f211610063578063d65ab5f214610378578063e51b891f146103a2578063f04e283e146103de578063f2fde38b146103fa578063fee81cf4146104165761011e565b8063715018a6146102b657806375b238fc146102c05780638da5cb5b146102ea578063ac88036c14610314578063bedb86fb146103505761011e565b80632de94807116100e65780632de94807146101dc5780633e98ab54146102185780634a4ee7b114610254578063514e62fc1461027057806354d1f13d146102ac5761011e565b80630ea30f4814610122578063183a4f6e1461015e5780631c10893f1461017a5780631cd64df41461019657806325692962146101d2575b5f5ffd5b34801561012d575f5ffd5b5061014860048036038101906101439190610dd5565b610452565b6040516101559190610e3f565b60405180910390f35b61017860048036038101906101739190610e8b565b610482565b005b610194600480360381019061018f9190610ee0565b61048f565b005b3480156101a1575f5ffd5b506101bc60048036038101906101b79190610ee0565b6104a5565b6040516101c99190610f38565b60405180910390f35b6101da6104bb565b005b3480156101e7575f5ffd5b5061020260048036038101906101fd9190610f51565b61050c565b60405161020f9190610f8b565b60405180910390f35b348015610223575f5ffd5b5061023e60048036038101906102399190610fa4565b610525565b60405161024b9190610f8b565b60405180910390f35b61026e60048036038101906102699190610ee0565b610770565b005b34801561027b575f5ffd5b5061029660048036038101906102919190610ee0565b610786565b6040516102a39190610f38565b60405180910390f35b6102b461079d565b005b6102be6107d6565b005b3480156102cb575f5ffd5b506102d46107e9565b6040516102e19190610f8b565b60405180910390f35b3480156102f5575f5ffd5b506102fe6107ee565b60405161030b9190610e3f565b60405180910390f35b34801561031f575f5ffd5b5061033a60048036038101906103359190610dd5565b610816565b6040516103479190610f8b565b60405180910390f35b34801561035b575f5ffd5b506103766004803603810190610371919061100c565b61082b565b005b348015610383575f5ffd5b5061038c610889565b6040516103999190610f8b565b60405180910390f35b3480156103ad575f5ffd5b506103c860048036038101906103c39190610dd5565b610a63565b6040516103d591906110e8565b60405180910390f35b6103f860048036038101906103f39190610f51565b610b44565b005b610414600480360381019061040f9190610f51565b610b82565b005b348015610421575f5ffd5b5061043c60048036038101906104379190610f51565b610bab565b6040516104499190610f8b565b60405180910390f35b6003602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61048c3382610bc4565b50565b610497610bd3565b6104a18282610c0a565b5050565b5f81826104b18561050c565b1614905092915050565b5f6104c4610c1a565b67ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b5f638b78c6d8600c52815f526020600c20549050919050565b5f5f5f9054906101000a900460ff161561056b576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b43600154604051602001610580929190611142565b604051602081830303815290604052805190602001206001819055505f33905060035f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610635576040517f2db47d5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60025f8681526020019081526020015f205490505f8111610683576040517f3a5f7b5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73c08a3e243288827586e0c3a590290593b2977e6b6337afd96482866001546040518463ffffffff1660e01b81526004016106c09392919061118b565b602060405180830381865af41580156106db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ff91906111d4565b92508260025f8781526020019081526020015f2081905550848273ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce84286866040516107609291906111ff565b60405180910390a3505092915050565b610778610bd3565b6107828282610bc4565b5050565b5f5f826107928561050c565b161415905092915050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b6107de610bd3565b6107e75f610c24565b565b600181565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754905090565b6002602052805f5260405f205f915090505481565b600161083681610cea565b815f5f6101000a81548160ff0219169083151502179055507f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd28260405161087d9190610f38565b60405180910390a15050565b5f5f5f9054906101000a900460ff16156108cf576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b436001546040516020016108e4929190611142565b604051602081830303815290604052805190602001206001819055505f3390505f334360405160200161091892919061126b565b6040516020818303038152906040528051906020012090508160035f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c08a3e243288827586e0c3a590290593b2977e6b637e8dbaf66001546040518263ffffffff1660e01b81526004016109b89190611296565b602060405180830381865af41580156109d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f791906111d4565b92508260025f8381526020019081526020015f2081905550808273ffffffffffffffffffffffffffffffffffffffff167f0d0a2245f107bccacfa55be58c1202917e494b61aae007897d04dc991442408d85604051610a569190610f8b565b60405180910390a3505090565b610a6b610d7b565b5f60025f8481526020019081526020015f205490505f5f90505b60108160ff161015610b3d5773c08a3e243288827586e0c3a590290593b2977e6b6335e37c7283836040518363ffffffff1660e01b8152600401610aca9291906112be565b602060405180830381865af4158015610ae5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b09919061130f565b838260ff1660108110610b1f57610b1e61133a565b5b602002019060ff16908160ff16815250508080600101915050610a85565b5050919050565b610b4c610bd3565b63389a75e1600c52805f526020600c208054421115610b7257636f5e88185f526004601cfd5b5f815550610b7f81610c24565b50565b610b8a610bd3565b8060601b610b9f57637448fbae5f526004601cfd5b610ba881610c24565b50565b5f63389a75e1600c52815f526020600c20549050919050565b610bcf82825f610d1f565b5050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610c08576382b429005f526004601cfd5b565b610c1682826001610d1f565b5050565b5f6202a300905090565b610c2c610d77565b15610c91577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b8217815550610ce7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b638b78c6d819543314610d1c57638b78c6d8600c52335f52806020600c205416610d1b576382b429005f526004601cfd5b5b50565b638b78c6d8600c52825f526020600c20805483811783610d4157848216821890505b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f5fa3505050505050565b5f90565b604051806102000160405280601090602082028036833780820191505090505090565b5f5ffd5b5f819050919050565b610db481610da2565b8114610dbe575f5ffd5b50565b5f81359050610dcf81610dab565b92915050565b5f60208284031215610dea57610de9610d9e565b5b5f610df784828501610dc1565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e2982610e00565b9050919050565b610e3981610e1f565b82525050565b5f602082019050610e525f830184610e30565b92915050565b5f819050919050565b610e6a81610e58565b8114610e74575f5ffd5b50565b5f81359050610e8581610e61565b92915050565b5f60208284031215610ea057610e9f610d9e565b5b5f610ead84828501610e77565b91505092915050565b610ebf81610e1f565b8114610ec9575f5ffd5b50565b5f81359050610eda81610eb6565b92915050565b5f5f60408385031215610ef657610ef5610d9e565b5b5f610f0385828601610ecc565b9250506020610f1485828601610e77565b9150509250929050565b5f8115159050919050565b610f3281610f1e565b82525050565b5f602082019050610f4b5f830184610f29565b92915050565b5f60208284031215610f6657610f65610d9e565b5b5f610f7384828501610ecc565b91505092915050565b610f8581610e58565b82525050565b5f602082019050610f9e5f830184610f7c565b92915050565b5f5f60408385031215610fba57610fb9610d9e565b5b5f610fc785828601610dc1565b9250506020610fd885828601610e77565b9150509250929050565b610feb81610f1e565b8114610ff5575f5ffd5b50565b5f8135905061100681610fe2565b92915050565b5f6020828403121561102157611020610d9e565b5b5f61102e84828501610ff8565b91505092915050565b5f60109050919050565b5f81905092915050565b5f819050919050565b5f60ff82169050919050565b61106981611054565b82525050565b5f61107a8383611060565b60208301905092915050565b5f602082019050919050565b61109b81611037565b6110a58184611041565b92506110b08261104b565b805f5b838110156110e05781516110c7878261106f565b96506110d283611086565b9250506001810190506110b3565b505050505050565b5f610200820190506110fc5f830184611092565b92915050565b5f819050919050565b61111c61111782610e58565b611102565b82525050565b5f819050919050565b61113c61113782610da2565b611122565b82525050565b5f61114d828561110b565b60208201915061115d828461112b565b6020820191508190509392505050565b61117681610e58565b82525050565b61118581610da2565b82525050565b5f60608201905061119e5f83018661116d565b6111ab602083018561116d565b6111b8604083018461117c565b949350505050565b5f815190506111ce81610e61565b92915050565b5f602082840312156111e9576111e8610d9e565b5b5f6111f6848285016111c0565b91505092915050565b5f6040820190506112125f830185610f7c565b61121f6020830184610f7c565b9392505050565b5f8160601b9050919050565b5f61123c82611226565b9050919050565b5f61124d82611232565b9050919050565b61126561126082610e1f565b611243565b82525050565b5f6112768285611254565b601482019150611286828461110b565b6020820191508190509392505050565b5f6020820190506112a95f83018461117c565b92915050565b6112b881611054565b82525050565b5f6040820190506112d15f83018561116d565b6112de60208301846112af565b9392505050565b6112ee81611054565b81146112f8575f5ffd5b50565b5f81519050611309816112e5565b92915050565b5f6020828403121561132457611323610d9e565b5b5f611331848285016112fb565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea26469706673582212206eb2140d818a06e17fbf6832092a2b64520372157ea53bb8f730f02744e7b01664736f6c634300081c0033000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb", 17 | "nonce": "0x4", 18 | "chainId": "0x279f" 19 | }, 20 | "additionalContracts": [], 21 | "isFixedGasLimit": false 22 | } 23 | ], 24 | "receipts": [ 25 | { 26 | "status": "0x1", 27 | "cumulativeGasUsed": "0x7ed3ce", 28 | "logs": [ 29 | { 30 | "address": "0xe1e5f226f8dac0bac6b363c6e0b8a38a5dc7f1fb", 31 | "topics": [ 32 | "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", 33 | "0x0000000000000000000000000000000000000000000000000000000000000000", 34 | "0x000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb" 35 | ], 36 | "data": "0x", 37 | "blockHash": "0x51d8694ecc291b0c7c8ba82999a7320a0b893702946a1d6911f0b7cfe82c3d03", 38 | "blockNumber": "0x9c209a", 39 | "blockTimestamp": "0x67ea4db9", 40 | "transactionHash": "0x4ec9c4d142533240d28ad1c92c374b550d14f26c9656a914dcf61a9b8aee5d24", 41 | "transactionIndex": "0x42", 42 | "logIndex": "0x6d", 43 | "removed": false 44 | } 45 | ], 46 | "logsBloom": "0x00000200000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000800800000000000000000000020000040000400000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000000000000000000000000000000000000000000000000000000000000000", 47 | "type": "0x2", 48 | "transactionHash": "0x4ec9c4d142533240d28ad1c92c374b550d14f26c9656a914dcf61a9b8aee5d24", 49 | "transactionIndex": "0x42", 50 | "blockHash": "0x51d8694ecc291b0c7c8ba82999a7320a0b893702946a1d6911f0b7cfe82c3d03", 51 | "blockNumber": "0x9c209a", 52 | "gasUsed": "0x179d94", 53 | "effectiveGasPrice": "0xba43b7401", 54 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 55 | "to": null, 56 | "contractAddress": "0xe1e5f226f8dac0bac6b363c6e0b8a38a5dc7f1fb" 57 | } 58 | ], 59 | "libraries": [ 60 | "src/LibBoard.sol:Board:0xc08a3e243288827586e0c3a590290593b2977e6b" 61 | ], 62 | "pending": [], 63 | "returns": { 64 | "gameContract": { 65 | "internal_type": "address", 66 | "value": "0xe1E5f226f8DAC0baC6b363c6e0B8A38a5DC7F1fB" 67 | } 68 | }, 69 | "timestamp": 1743408572, 70 | "chain": 10143, 71 | "commit": "331b054" 72 | } -------------------------------------------------------------------------------- /broadcast/Deploy.s.sol/10143/run-1743498025.json: -------------------------------------------------------------------------------- 1 | { 2 | "transactions": [ 3 | { 4 | "hash": "0xe8f70907839f066358d5fe8d30e1ddc2fe954c8e89241aa3c9a2bdd2fabb067f", 5 | "transactionType": "CREATE", 6 | "contractName": "Play2048", 7 | "contractAddress": "0xd9d6c523bf597e82d5247ab7ca1104215b73e5bc", 8 | "function": null, 9 | "arguments": [ 10 | "0x234828a40de63d21072D1218cFb5D208654C12Bb" 11 | ], 12 | "transaction": { 13 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 14 | "gas": "0x1c793f", 15 | "value": "0x0", 16 | "input": "0x608060405234801561000f575f5ffd5b50604051611a2b380380611a2b83398181016040528101906100319190610174565b6100408161004660201b60201c565b5061019f565b61005461011260201b60201c565b156100b9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b821781555061010f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b5f90565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101438261011a565b9050919050565b61015381610139565b811461015d575f5ffd5b50565b5f8151905061016e8161014a565b92915050565b5f6020828403121561018957610188610116565b5b5f61019684828501610160565b91505092915050565b61187f806101ac5f395ff3fe608060405260043610610133575f3560e01c806354d1f13d116100aa578063bedb86fb1161006e578063bedb86fb146103b5578063e51b891f146103dd578063f04e283e14610419578063f2fde38b14610435578063f3618a2214610451578063fee81cf41461047957610133565b806354d1f13d14610311578063715018a61461031b57806375b238fc146103255780638da5cb5b1461034f578063ac88036c1461037957610133565b806325692962116100fc57806325692962146102235780632de948071461022d57806339b9e19f146102695780633e98ab54146102915780634a4ee7b1146102b9578063514e62fc146102d557610133565b80622a0c3d146101375780630ea30f4814610173578063183a4f6e146101af5780631c10893f146101cb5780631cd64df4146101e7575b5f5ffd5b348015610142575f5ffd5b5061015d6004803603810190610158919061121a565b6104b5565b60405161016a9190611254565b60405180910390f35b34801561017e575f5ffd5b506101996004803603810190610194919061121a565b6104ca565b6040516101a691906112ac565b60405180910390f35b6101c960048036038101906101c491906112f8565b6104fa565b005b6101e560048036038101906101e0919061134d565b610507565b005b3480156101f2575f5ffd5b5061020d6004803603810190610208919061134d565b61051d565b60405161021a91906113a5565b60405180910390f35b61022b610533565b005b348015610238575f5ffd5b50610253600480360381019061024e91906113be565b610584565b60405161026091906113f8565b60405180910390f35b348015610274575f5ffd5b5061028f600480360381019061028a9190611436565b61059d565b005b34801561029c575f5ffd5b506102b760048036038101906102b29190611474565b61094d565b005b6102d360048036038101906102ce919061134d565b610b9c565b005b3480156102e0575f5ffd5b506102fb60048036038101906102f6919061134d565b610bb2565b60405161030891906113a5565b60405180910390f35b610319610bc9565b005b610323610c02565b005b348015610330575f5ffd5b50610339610c15565b60405161034691906113f8565b60405180910390f35b34801561035a575f5ffd5b50610363610c1a565b60405161037091906112ac565b60405180910390f35b348015610384575f5ffd5b5061039f600480360381019061039a919061121a565b610c42565b6040516103ac91906113f8565b60405180910390f35b3480156103c0575f5ffd5b506103db60048036038101906103d691906114dc565b610c57565b005b3480156103e8575f5ffd5b5061040360048036038101906103fe919061121a565b610cb5565b60405161041091906115b8565b60405180910390f35b610433600480360381019061042e91906113be565b610d96565b005b61044f600480360381019061044a91906113be565b610dd4565b005b34801561045c575f5ffd5b50610477600480360381019061047291906115d2565b610dfd565b005b348015610484575f5ffd5b5061049f600480360381019061049a91906113be565b610fe0565b6040516104ac91906113f8565b60405180910390f35b6002602052805f5260405f205f915090505481565b6003602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105043382610ff9565b50565b61050f611008565b610519828261103f565b5050565b5f818261052985610584565b1614905092915050565b5f61053c61104f565b67ffffffffffffffff164201905063389a75e1600c52335f52806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f5fa250565b5f638b78c6d8600c52815f526020600c20549050919050565b5f5f9054906101000a900460ff16156105e2576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f33905060035f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461067b576040517f11d0328c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260025f846040516020016106909190611629565b6040516020818303038152906040528051906020012081526020019081526020015f2054146106eb576040517f41c1ac5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7318c3a7837feee1d838dba085611d3a0903ceed726319c14718835f6004811061071857610717611643565b5b60200201356040518263ffffffff1660e01b8152600401610739919061167f565b602060405180830381865af4158015610754573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077891906116ac565b6107ae576040517f854817c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600190505b60048110156108b2577318c3a7837feee1d838dba085611d3a0903ceed726365b559b0846001846107e59190611704565b600481106107f6576107f5611643565b5b602002013585846004811061080e5761080d611643565b5b60200201356040518363ffffffff1660e01b8152600401610830929190611737565b602060405180830381865af415801561084b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086f91906116ac565b6108a5576040517f854817c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80806001019150506107b4565b50816003600481106108c7576108c6611643565b5b602002013560015f8581526020019081526020015f2081905550828173ffffffffffffffffffffffffffffffffffffffff167f0d0a2245f107bccacfa55be58c1202917e494b61aae007897d04dc991442408d8460036004811061092e5761092d611643565b5b602002013560405161094091906113f8565b60405180910390a3505050565b5f5f9054906101000a900460ff1615610992576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f33905060035f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a2b576040517f11d0328c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f8581526020019081526020015f205490505f8111610a79576040517f3a5f7b5700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7318c3a7837feee1d838dba085611d3a0903ceed726365b559b082856040518363ffffffff1660e01b8152600401610ab2929190611737565b602060405180830381865af4158015610acd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af191906116ac565b610b27576040517f854817c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260015f8681526020019081526020015f2081905550838273ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce842610b7f86611059565b86604051610b8e929190611797565b60405180910390a350505050565b610ba4611008565b610bae8282610ff9565b5050565b5f5f82610bbe85610584565b161415905092915050565b63389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f5fa2565b610c0a611008565b610c135f611069565b565b600181565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754905090565b6001602052805f5260405f205f915090505481565b6001610c628161112f565b815f5f6101000a81548160ff0219169083151502179055507f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd282604051610ca991906113a5565b60405180910390a15050565b610cbd6111c0565b5f60015f8481526020019081526020015f205490505f5f90505b60108160ff161015610d8f577318c3a7837feee1d838dba085611d3a0903ceed726335e37c7283836040518363ffffffff1660e01b8152600401610d1c9291906117cd565b602060405180830381865af4158015610d37573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5b919061181e565b838260ff1660108110610d7157610d70611643565b5b602002019060ff16908160ff16815250508080600101915050610cd7565b5050919050565b610d9e611008565b63389a75e1600c52805f526020600c208054421115610dc457636f5e88185f526004601cfd5b5f815550610dd181611069565b50565b610ddc611008565b8060601b610df157637448fbae5f526004601cfd5b610dfa81611069565b50565b5f5f9054906101000a900460ff1615610e42576040517f379a7ed900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f3390505f73ffffffffffffffffffffffffffffffffffffffff1660035f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610edb576040517f11d0328c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f1b60025f8481526020019081526020015f205414610f27576040517fb47f114500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060035f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260025f8481526020019081526020015f2081905550828173ffffffffffffffffffffffffffffffffffffffff167f69e448b11dc6d1d2b599edbb4ea0476b0c8c2e107efe06064092199bedaf94aa84604051610fd39190611254565b60405180910390a3505050565b5f63389a75e1600c52815f526020600c20549050919050565b61100482825f611164565b5050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754331461103d576382b429005f526004601cfd5b565b61104b82826001611164565b5050565b5f6202a300905090565b5f60ff60f883901c169050919050565b6110716111bc565b156110d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3811560ff1b821781555061112c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278160601b60601c91508181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f5fa3818155505b50565b638b78c6d81954331461116157638b78c6d8600c52335f52806020600c205416611160576382b429005f526004601cfd5b5b50565b638b78c6d8600c52825f526020600c2080548381178361118657848216821890505b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f5fa3505050505050565b5f90565b604051806102000160405280601090602082028036833780820191505090505090565b5f5ffd5b5f819050919050565b6111f9816111e7565b8114611203575f5ffd5b50565b5f81359050611214816111f0565b92915050565b5f6020828403121561122f5761122e6111e3565b5b5f61123c84828501611206565b91505092915050565b61124e816111e7565b82525050565b5f6020820190506112675f830184611245565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6112968261126d565b9050919050565b6112a68161128c565b82525050565b5f6020820190506112bf5f83018461129d565b92915050565b5f819050919050565b6112d7816112c5565b81146112e1575f5ffd5b50565b5f813590506112f2816112ce565b92915050565b5f6020828403121561130d5761130c6111e3565b5b5f61131a848285016112e4565b91505092915050565b61132c8161128c565b8114611336575f5ffd5b50565b5f8135905061134781611323565b92915050565b5f5f60408385031215611363576113626111e3565b5b5f61137085828601611339565b9250506020611381858286016112e4565b9150509250929050565b5f8115159050919050565b61139f8161138b565b82525050565b5f6020820190506113b85f830184611396565b92915050565b5f602082840312156113d3576113d26111e3565b5b5f6113e084828501611339565b91505092915050565b6113f2816112c5565b82525050565b5f60208201905061140b5f8301846113e9565b92915050565b5f5ffd5b5f819050826020600402820111156114305761142f611411565b5b92915050565b5f5f60a0838503121561144c5761144b6111e3565b5b5f61145985828601611206565b925050602061146a85828601611415565b9150509250929050565b5f5f6040838503121561148a576114896111e3565b5b5f61149785828601611206565b92505060206114a8858286016112e4565b9150509250929050565b6114bb8161138b565b81146114c5575f5ffd5b50565b5f813590506114d6816114b2565b92915050565b5f602082840312156114f1576114f06111e3565b5b5f6114fe848285016114c8565b91505092915050565b5f60109050919050565b5f81905092915050565b5f819050919050565b5f60ff82169050919050565b61153981611524565b82525050565b5f61154a8383611530565b60208301905092915050565b5f602082019050919050565b61156b81611507565b6115758184611511565b92506115808261151b565b805f5b838110156115b0578151611597878261153f565b96506115a283611556565b925050600181019050611583565b505050505050565b5f610200820190506115cc5f830184611562565b92915050565b5f5f604083850312156115e8576115e76111e3565b5b5f6115f585828601611206565b925050602061160685828601611206565b9150509250929050565b82818337505050565b61162560808383611610565b5050565b5f6116348284611619565b60808201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b611679816112c5565b82525050565b5f6020820190506116925f830184611670565b92915050565b5f815190506116a6816114b2565b92915050565b5f602082840312156116c1576116c06111e3565b5b5f6116ce84828501611698565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61170e826112c5565b9150611719836112c5565b9250828203905081811115611731576117306116d7565b5b92915050565b5f60408201905061174a5f830185611670565b6117576020830184611670565b9392505050565b5f819050919050565b5f61178161177c61177784611524565b61175e565b6112c5565b9050919050565b61179181611767565b82525050565b5f6040820190506117aa5f830185611788565b6117b760208301846113e9565b9392505050565b6117c781611524565b82525050565b5f6040820190506117e05f830185611670565b6117ed60208301846117be565b9392505050565b6117fd81611524565b8114611807575f5ffd5b50565b5f81519050611818816117f4565b92915050565b5f60208284031215611833576118326111e3565b5b5f6118408482850161180a565b9150509291505056fea2646970667358221220ea05155d57f8f0a1a4563a313ce6e5384a237a920df6698c967017492f9b0b9b64736f6c634300081c0033000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb", 17 | "nonce": "0x8", 18 | "chainId": "0x279f" 19 | }, 20 | "additionalContracts": [], 21 | "isFixedGasLimit": false 22 | } 23 | ], 24 | "receipts": [ 25 | { 26 | "status": "0x1", 27 | "cumulativeGasUsed": "0xd4ae68", 28 | "logs": [ 29 | { 30 | "address": "0xd9d6c523bf597e82d5247ab7ca1104215b73e5bc", 31 | "topics": [ 32 | "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", 33 | "0x0000000000000000000000000000000000000000000000000000000000000000", 34 | "0x000000000000000000000000234828a40de63d21072d1218cfb5d208654c12bb" 35 | ], 36 | "data": "0x", 37 | "blockHash": "0x02bfe853820f6d0e05b6507ea93ea2f070caddaf3dba217b6c88a5c7d83aa51c", 38 | "blockNumber": "0x9e465f", 39 | "blockTimestamp": "0x67ebab27", 40 | "transactionHash": "0xe8f70907839f066358d5fe8d30e1ddc2fe954c8e89241aa3c9a2bdd2fabb067f", 41 | "transactionIndex": "0x69", 42 | "logIndex": "0xd8", 43 | "removed": false 44 | } 45 | ], 46 | "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001000000000000000000000000000020000000000000000000810000000000000000000020000040000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800000000000000000000000000000000000000000000000000000000000000000", 47 | "type": "0x2", 48 | "transactionHash": "0xe8f70907839f066358d5fe8d30e1ddc2fe954c8e89241aa3c9a2bdd2fabb067f", 49 | "transactionIndex": "0x69", 50 | "blockHash": "0x02bfe853820f6d0e05b6507ea93ea2f070caddaf3dba217b6c88a5c7d83aa51c", 51 | "blockNumber": "0x9e465f", 52 | "gasUsed": "0x1c793f", 53 | "effectiveGasPrice": "0xba43b7401", 54 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 55 | "to": null, 56 | "contractAddress": "0xd9d6c523bf597e82d5247ab7ca1104215b73e5bc" 57 | } 58 | ], 59 | "libraries": [ 60 | "src/LibBoard.sol:Board:0x18c3a7837FEeE1d838DbA085611D3A0903CEEd72" 61 | ], 62 | "pending": [], 63 | "returns": { 64 | "gameContract": { 65 | "internal_type": "address", 66 | "value": "0xD9d6C523BF597e82D5247aB7CA1104215B73e5Bc" 67 | } 68 | }, 69 | "timestamp": 1743498025, 70 | "chain": 10143, 71 | "commit": "11be9e2" 72 | } -------------------------------------------------------------------------------- /broadcast/Deploy.s.sol/10143/run-1745469906.json: -------------------------------------------------------------------------------- 1 | { 2 | "transactions": [ 3 | { 4 | "hash": "0x05b57c8bb053fc9268ab43934143ee7a6050b9bd0a1e91513bdfaeffc68a2574", 5 | "transactionType": "CREATE2", 6 | "contractName": "Board", 7 | "contractAddress": "0x3a98ff59f451f16dc5201ad287073202d82aba6e", 8 | "function": null, 9 | "arguments": null, 10 | "transaction": { 11 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 12 | "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", 13 | "gas": "0x253d0a", 14 | "input": "0x0000000000000000000000000000000000000000000000000000000000000000611ef761004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100f3575f3560e01c806337afd9641161009557806365b559b01161006f57806365b559b01461028f5780637e8dbaf6146102bf578063f173e012146102ef578063f54a36eb1461031f576100f3565b806337afd964146102115780633b9f7a1f1461024157806364cd159514610271576100f3565b806324f4ec51116100d157806324f4ec51146101635780632c5f3c4514610181578063312ffe40146101b157806335e37c72146101e1576100f3565b806301df1995146100f757806319c14718146101155780631af4f97014610145575b5f5ffd5b6100ff61034f565b60405161010c9190611959565b60405180910390f35b61012f600480360381019061012a91906119a0565b610354565b60405161013c91906119e5565b60405180910390f35b61014d61045b565b60405161015a9190611959565b60405180910390f35b61016b610460565b6040516101789190611959565b60405180910390f35b61019b600480360381019061019691906119a0565b610464565b6040516101a89190611959565b60405180910390f35b6101cb60048036038101906101c691906119a0565b610794565b6040516101d89190611959565b60405180910390f35b6101fb60048036038101906101f69190611a34565b610ac4565b6040516102089190611a81565b60405180910390f35b61022b60048036038101906102269190611acd565b610aef565b6040516102389190611959565b60405180910390f35b61025b600480360381019061025691906119a0565b610d66565b6040516102689190611959565b60405180910390f35b610279611182565b6040516102869190611959565b60405180910390f35b6102a960048036038101906102a49190611b1d565b611187565b6040516102b691906119e5565b60405180910390f35b6102d960048036038101906102d49190611b5b565b611399565b6040516102e69190611959565b60405180910390f35b61030960048036038101906103049190611b86565b6114a3565b6040516103169190611959565b60405180910390f35b610339600480360381019061033491906119a0565b6114f3565b6040516103469190611959565b60405180910390f35b600181565b5f5f608083901c14610392576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f90505b60108160ff161015610416575f6103af8583610ac4565b905060038160ff16106103ee576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160ff16111561040857828061040490611c03565b9350505b508080600101915050610398565b5060028114610451576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001915050919050565b600381565b5f81565b5f5f5f90505b60048160ff16101561078b5761047e61191f565b5f5f90505b60048160ff1610156104e4576104b085826004866104a19190611c4a565b6104ab9190611c86565b610ac4565b828260ff16600481106104c6576104c5611cba565b5b602002019060ff16908160ff16815250508080600101915050610483565b506104ed61191f565b5f5f90505f5f90505b60048160ff161015610582575f848260ff166004811061051957610518611cba565b5b602002015160ff161461057557838160ff166004811061053c5761053b611cba565b5b602002015183838061054d90611ce7565b945060ff166004811061056357610562611cba565b5b602002019060ff16908160ff16815250505b80806001019150506104f6565b505f5f90505b60038160ff16101561067f575f838260ff16600481106105ab576105aa611cba565b5b602002015160ff16141580156106065750826001826105ca9190611c86565b60ff16600481106105de576105dd611cba565b5b602002015160ff16838260ff16600481106105fc576105fb611cba565b5b602002015160ff16145b1561067257828160ff166004811061062157610620611cba565b5b60200201805180919061063390611ce7565b60ff1660ff16815250505f8360018361064c9190611c86565b60ff16600481106106605761065f611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610588565b5061068861191f565b5f91505f5f90505b60048160ff16101561071c575f848260ff16600481106106b3576106b2611cba565b5b602002015160ff161461070f57838160ff16600481106106d6576106d5611cba565b5b60200201518284806106e790611ce7565b955060ff16600481106106fd576106fc611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610690565b505f5f90505b60048160ff1610156107795761076a88826004896107409190611c4a565b61074a9190611c86565b848460ff16600481106107605761075f611cba565b5b60200201516114a3565b97508080600101915050610722565b5050505050808060010191505061046a565b50819050919050565b5f5f5f90505b60048160ff161015610abb576107ae61191f565b5f5f90505b60048160ff161015610814576107e085846004846107d19190611c4a565b6107db9190611c86565b610ac4565b828260ff16600481106107f6576107f5611cba565b5b602002019060ff16908160ff168152505080806001019150506107b3565b5061081d61191f565b5f5f90505f5f90505b60048160ff1610156108b2575f848260ff166004811061084957610848611cba565b5b602002015160ff16146108a557838160ff166004811061086c5761086b611cba565b5b602002015183838061087d90611ce7565b945060ff166004811061089357610892611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610826565b505f5f90505b60038160ff1610156109af575f838260ff16600481106108db576108da611cba565b5b602002015160ff16141580156109365750826001826108fa9190611c86565b60ff166004811061090e5761090d611cba565b5b602002015160ff16838260ff166004811061092c5761092b611cba565b5b602002015160ff16145b156109a257828160ff166004811061095157610950611cba565b5b60200201805180919061096390611ce7565b60ff1660ff16815250505f8360018361097c9190611c86565b60ff16600481106109905761098f611cba565b5b602002019060ff16908160ff16815250505b80806001019150506108b8565b506109b861191f565b5f91505f5f90505b60048160ff161015610a4c575f848260ff16600481106109e3576109e2611cba565b5b602002015160ff1614610a3f57838160ff1660048110610a0657610a05611cba565b5b6020020151828480610a1790611ce7565b955060ff1660048110610a2d57610a2c611cba565b5b602002019060ff16908160ff16815250505b80806001019150506109c0565b505f5f90505b60048160ff161015610aa957610a9a8887600484610a709190611c4a565b610a7a9190611c86565b848460ff1660048110610a9057610a8f611cba565b5b60200201516114a3565b97508080600101915050610a52565b5050505050808060010191505061079a565b50819050919050565b5f60ff600883600f610ad69190611d0f565b610ae09190611c4a565b60ff1684901c16905092915050565b5f60048310610b2a576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8303610b4157610b3a84610794565b9050610b88565b60018303610b5957610b52846114f3565b9050610b87565b60038303610b7157610b6a84610d66565b9050610b86565b60028303610b8557610b8284610464565b90505b5b5b5b608081901b608085901b03610bc9576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505f5f90505b60108160ff161015610c0d575f610be98483610ac4565b60ff1603610c00578180610bfc90611c03565b9250505b8080600101915050610bd2565b505f811115610d54575f85858486604051602001610c2e9493929190611d83565b604051602081830303815290604052805190602001205f1c90505f8267ffffffffffffffff811115610c6357610c62611dd0565b5b604051908082528060200260200182016040528015610c915781602001602082028036833780820191505090505b5090505f5f90505f5f90505b60108160ff161015610d00575f610cb48783610ac4565b60ff1603610cf35780838381518110610cd057610ccf611cba565b5b602002602001019060ff16908160ff16815250508180610cef90611c03565b9250505b8080600101915050610c9d565b50610d4e85838686610d129190611e2a565b81518110610d2357610d22611cba565b5b6020026020010151605a606487610d3a9190611e2a565b11610d46576001610d49565b60025b6114a3565b94505050505b60808083901b901c9150509392505050565b5f5f5f90505b60048160ff16101561117957610d8061191f565b5f5f90505b60048160ff161015610de657610db28582600486610da39190611c4a565b610dad9190611c86565b610ac4565b828260ff1660048110610dc857610dc7611cba565b5b602002019060ff16908160ff16815250508080600101915050610d85565b50610def61191f565b5f5f90505b60048160ff161015610e5b5782816003610e0e9190611d0f565b60ff1660048110610e2257610e21611cba565b5b6020020151828260ff1660048110610e3d57610e3c611cba565b5b602002019060ff16908160ff16815250508080600101915050610df4565b50610e6461191f565b5f5f90505f5f90505b60048160ff161015610ef9575f848260ff1660048110610e9057610e8f611cba565b5b602002015160ff1614610eec57838160ff1660048110610eb357610eb2611cba565b5b6020020151838380610ec490611ce7565b945060ff1660048110610eda57610ed9611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610e6d565b505f5f90505b60038160ff161015610ff6575f838260ff1660048110610f2257610f21611cba565b5b602002015160ff1614158015610f7d575082600182610f419190611c86565b60ff1660048110610f5557610f54611cba565b5b602002015160ff16838260ff1660048110610f7357610f72611cba565b5b602002015160ff16145b15610fe957828160ff1660048110610f9857610f97611cba565b5b602002018051809190610faa90611ce7565b60ff1660ff16815250505f83600183610fc39190611c86565b60ff1660048110610fd757610fd6611cba565b5b602002019060ff16908160ff16815250505b8080600101915050610eff565b50610fff61191f565b5f91505f5f90505b60048160ff161015611093575f848260ff166004811061102a57611029611cba565b5b602002015160ff161461108657838160ff166004811061104d5761104c611cba565b5b602002015182848061105e90611ce7565b955060ff166004811061107457611073611cba565b5b602002019060ff16908160ff16815250505b8080600101915050611007565b5061109c61191f565b5f5f90505b60048160ff16101561110857828160036110bb9190611d0f565b60ff16600481106110cf576110ce611cba565b5b6020020151828260ff16600481106110ea576110e9611cba565b5b602002019060ff16908160ff168152505080806001019150506110a1565b505f5f90505b60048160ff161015611165576111568a8260048b61112c9190611c4a565b6111369190611c86565b848460ff166004811061114c5761114b611cba565b5b60200201516114a3565b9950808060010191505061110e565b505050505050508080600101915050610d6c565b50819050919050565b600281565b5f5f6088600885901b901c146111c9576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6088600884901b901c1461120a576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f6112158461190f565b90505f8160ff16036112315761122a85610794565b91506112b7565b60018160ff160361124c57611245856114f3565b91506112b6565b60038160ff16036112675761126085610d66565b91506112b5565b60028160ff16036112825761127b85610464565b91506112b4565b6040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b5b5f5f90505f5f90505f5f90505b60108160ff16101561130e576112da8782610ac4565b60ff166112e78683610ac4565b60ff16146113015781806112fa90611ce7565b9250508092505b80806001019150506112c4565b505f61131a8784610ac4565b60ff1690505f61132a8685610ac4565b60ff1614801561133957505f81115b80156113455750600381105b8015611354575060018260ff16145b61138a576040517f62417ce600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60019550505050505092915050565b5f5f826040516020016113ac9190611e5a565b604051602081830303815290604052805190602001205f1c90505f6010826113d49190611e2a565b9050816040516020016113e79190611e74565b604051602081830303815290604052805190602001205f1c91505f60108361140f9190611e2a565b90505b8181036114395760106001826114289190611e8e565b6114329190611e2a565b9050611412565b5f5f90505b60108160ff16101561149a57828160ff16148061145d5750818160ff16145b1561148d5761148a8582605a6064886114769190611e2a565b11611482576001611485565b60025b6114a3565b94505b808060010191505061143e565b50505050919050565b5f600883600f6114b39190611d0f565b6114bd9190611c4a565b60ff168260ff16901b600884600f6114d59190611d0f565b6114df9190611c4a565b60ff1660ff901b1985161790509392505050565b5f5f5f90505b60048160ff1610156119065761150d61191f565b5f5f90505b60048160ff1610156115735761153f85846004846115309190611c4a565b61153a9190611c86565b610ac4565b828260ff166004811061155557611554611cba565b5b602002019060ff16908160ff16815250508080600101915050611512565b5061157c61191f565b5f5f90505b60048160ff1610156115e8578281600361159b9190611d0f565b60ff16600481106115af576115ae611cba565b5b6020020151828260ff16600481106115ca576115c9611cba565b5b602002019060ff16908160ff16815250508080600101915050611581565b506115f161191f565b5f5f90505f5f90505b60048160ff161015611686575f848260ff166004811061161d5761161c611cba565b5b602002015160ff161461167957838160ff16600481106116405761163f611cba565b5b602002015183838061165190611ce7565b945060ff166004811061166757611666611cba565b5b602002019060ff16908160ff16815250505b80806001019150506115fa565b505f5f90505b60038160ff161015611783575f838260ff16600481106116af576116ae611cba565b5b602002015160ff161415801561170a5750826001826116ce9190611c86565b60ff16600481106116e2576116e1611cba565b5b602002015160ff16838260ff1660048110611700576116ff611cba565b5b602002015160ff16145b1561177657828160ff166004811061172557611724611cba565b5b60200201805180919061173790611ce7565b60ff1660ff16815250505f836001836117509190611c86565b60ff166004811061176457611763611cba565b5b602002019060ff16908160ff16815250505b808060010191505061168c565b5061178c61191f565b5f91505f5f90505b60048160ff161015611820575f848260ff16600481106117b7576117b6611cba565b5b602002015160ff161461181357838160ff16600481106117da576117d9611cba565b5b60200201518284806117eb90611ce7565b955060ff166004811061180157611800611cba565b5b602002019060ff16908160ff16815250505b8080600101915050611794565b5061182961191f565b5f5f90505b60048160ff16101561189557828160036118489190611d0f565b60ff166004811061185c5761185b611cba565b5b6020020151828260ff166004811061187757611876611cba565b5b602002019060ff16908160ff1681525050808060010191505061182e565b505f5f90505b60048160ff1610156118f2576118e38a896004846118b99190611c4a565b6118c39190611c86565b848460ff16600481106118d9576118d8611cba565b5b60200201516114a3565b9950808060010191505061189b565b5050505050505080806001019150506114f9565b50819050919050565b5f60ff60f883901c169050919050565b6040518060800160405280600490602082028036833780820191505090505090565b5f819050919050565b61195381611941565b82525050565b5f60208201905061196c5f83018461194a565b92915050565b5f5ffd5b61197f81611941565b8114611989575f5ffd5b50565b5f8135905061199a81611976565b92915050565b5f602082840312156119b5576119b4611972565b5b5f6119c28482850161198c565b91505092915050565b5f8115159050919050565b6119df816119cb565b82525050565b5f6020820190506119f85f8301846119d6565b92915050565b5f60ff82169050919050565b611a13816119fe565b8114611a1d575f5ffd5b50565b5f81359050611a2e81611a0a565b92915050565b5f5f60408385031215611a4a57611a49611972565b5b5f611a578582860161198c565b9250506020611a6885828601611a20565b9150509250929050565b611a7b816119fe565b82525050565b5f602082019050611a945f830184611a72565b92915050565b5f819050919050565b611aac81611a9a565b8114611ab6575f5ffd5b50565b5f81359050611ac781611aa3565b92915050565b5f5f5f60608486031215611ae457611ae3611972565b5b5f611af18682870161198c565b9350506020611b028682870161198c565b9250506040611b1386828701611ab9565b9150509250925092565b5f5f60408385031215611b3357611b32611972565b5b5f611b408582860161198c565b9250506020611b518582860161198c565b9150509250929050565b5f60208284031215611b7057611b6f611972565b5b5f611b7d84828501611ab9565b91505092915050565b5f5f5f60608486031215611b9d57611b9c611972565b5b5f611baa8682870161198c565b9350506020611bbb86828701611a20565b9250506040611bcc86828701611a20565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c0d82611941565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611c3f57611c3e611bd6565b5b600182019050919050565b5f611c54826119fe565b9150611c5f836119fe565b9250828202611c6d816119fe565b9150808214611c7f57611c7e611bd6565b5b5092915050565b5f611c90826119fe565b9150611c9b836119fe565b9250828201905060ff811115611cb457611cb3611bd6565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611cf1826119fe565b915060ff8203611d0457611d03611bd6565b5b600182019050919050565b5f611d19826119fe565b9150611d24836119fe565b9250828203905060ff811115611d3d57611d3c611bd6565b5b92915050565b5f819050919050565b611d5d611d5882611941565b611d43565b82525050565b5f819050919050565b611d7d611d7882611a9a565b611d63565b82525050565b5f611d8e8287611d4c565b602082019150611d9e8286611d4c565b602082019150611dae8285611d4c565b602082019150611dbe8284611d6c565b60208201915081905095945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611e3482611941565b9150611e3f83611941565b925082611e4f57611e4e611dfd565b5b828206905092915050565b5f611e658284611d6c565b60208201915081905092915050565b5f611e7f8284611d4c565b60208201915081905092915050565b5f611e9882611941565b9150611ea383611941565b9250828201905080821115611ebb57611eba611bd6565b5b9291505056fea264697066735822122081c4f02de77760543541f4da94bd17b5c1b08600a7b2b25c36652ccc9f957fdd64736f6c634300081c0033", 15 | "nonce": "0x3d", 16 | "chainId": "0x279f" 17 | }, 18 | "additionalContracts": [], 19 | "isFixedGasLimit": false 20 | }, 21 | { 22 | "hash": "0xbda58aa32e7c0b48f95b2994726c126d67fd385b388263546b5abf5daa5b83cb", 23 | "transactionType": "CREATE", 24 | "contractName": "Monad2048", 25 | "contractAddress": "0x8d9fd1cffe6e549803285c3ff990faec1d49ee7f", 26 | "function": null, 27 | "arguments": null, 28 | "transaction": { 29 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 30 | "gas": "0xff8ed", 31 | "value": "0x0", 32 | "input": "0x6080604052348015600e575f5ffd5b50610da28061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806339b9e19f146100645780633e98ab541461008057806379cbd2331461009c578063ac88036c146100cc578063e51b891f146100fc578063ed8052691461012c575b5f5ffd5b61007e600480360381019061007991906108c5565b61015c565b005b61009a60048036038101906100959190610936565b610531565b005b6100b660048036038101906100b19190610974565b6106fc565b6040516100c391906109ae565b60405180910390f35b6100e660048036038101906100e19190610974565b610711565b6040516100f391906109d6565b60405180910390f35b61011660048036038101906101119190610974565b610726565b6040516101239190610aa0565b60405180910390f35b61014660048036038101906101419190610974565b610807565b6040516101539190610af9565b60405180910390f35b5f3390505f73ffffffffffffffffffffffffffffffffffffffff165f5f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146101f4576040517f25434c8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826040516020016102069190610b2b565b6040516020818303038152906040528051906020012090505f5f1b60025f8381526020019081526020015f20541461026a576040517f6e3ca80500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b733a98ff59f451f16dc5201ad287073202d82aba6e6319c14718845f6004811061029757610296610b45565b5b60200201356040518263ffffffff1660e01b81526004016102b89190610b81565b602060405180830381865af41580156102d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102f79190610bcf565b61032d576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600190505b600481101561043157733a98ff59f451f16dc5201ad287073202d82aba6e6365b559b0856001846103649190610c27565b6004811061037557610374610b45565b5b602002013586846004811061038d5761038c610b45565b5b60200201356040518363ffffffff1660e01b81526004016103af929190610c5a565b602060405180830381865af41580156103ca573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ee9190610bcf565b610424576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8080600101915050610333565b50815f5f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360025f8381526020019081526020015f2081905550826003600481106104aa576104a9610b45565b5b602002013560015f8681526020019081526020015f2081905550838273ffffffffffffffffffffffffffffffffffffffff167f3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e38560036004811061051157610510610b45565b5b602002013560405161052391906109d6565b60405180910390a350505050565b5f3390505f5f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105c9576040517faed8b1cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b733a98ff59f451f16dc5201ad287073202d82aba6e6365b559b060015f8681526020019081526020015f2054846040518363ffffffff1660e01b8152600401610613929190610c5a565b602060405180830381865af415801561062e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106529190610bcf565b610688576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160015f8581526020019081526020015f2081905550828173ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce8426106e085610836565b856040516106ef929190610cba565b60405180910390a3505050565b6002602052805f5260405f205f915090505481565b6001602052805f5260405f205f915090505481565b61072e610846565b5f60015f8481526020019081526020015f205490505f5f90505b60108160ff16101561080057733a98ff59f451f16dc5201ad287073202d82aba6e6335e37c7283836040518363ffffffff1660e01b815260040161078d929190610cf0565b602060405180830381865af41580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107cc9190610d41565b838260ff16601081106107e2576107e1610b45565b5b602002019060ff16908160ff16815250508080600101915050610748565b5050919050565b5f602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60ff60f883901c169050919050565b604051806102000160405280601090602082028036833780820191505090505090565b5f5ffd5b5f819050919050565b61087f8161086d565b8114610889575f5ffd5b50565b5f8135905061089a81610876565b92915050565b5f5ffd5b5f819050826020600402820111156108bf576108be6108a0565b5b92915050565b5f5f60a083850312156108db576108da610869565b5b5f6108e88582860161088c565b92505060206108f9858286016108a4565b9150509250929050565b5f819050919050565b61091581610903565b811461091f575f5ffd5b50565b5f813590506109308161090c565b92915050565b5f5f6040838503121561094c5761094b610869565b5b5f6109598582860161088c565b925050602061096a85828601610922565b9150509250929050565b5f6020828403121561098957610988610869565b5b5f6109968482850161088c565b91505092915050565b6109a88161086d565b82525050565b5f6020820190506109c15f83018461099f565b92915050565b6109d081610903565b82525050565b5f6020820190506109e95f8301846109c7565b92915050565b5f60109050919050565b5f81905092915050565b5f819050919050565b5f60ff82169050919050565b610a2181610a0c565b82525050565b5f610a328383610a18565b60208301905092915050565b5f602082019050919050565b610a53816109ef565b610a5d81846109f9565b9250610a6882610a03565b805f5b83811015610a98578151610a7f8782610a27565b9650610a8a83610a3e565b925050600181019050610a6b565b505050505050565b5f61020082019050610ab45f830184610a4a565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ae382610aba565b9050919050565b610af381610ad9565b82525050565b5f602082019050610b0c5f830184610aea565b92915050565b82818337505050565b610b2760808383610b12565b5050565b5f610b368284610b1b565b60808201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b610b7b81610903565b82525050565b5f602082019050610b945f830184610b72565b92915050565b5f8115159050919050565b610bae81610b9a565b8114610bb8575f5ffd5b50565b5f81519050610bc981610ba5565b92915050565b5f60208284031215610be457610be3610869565b5b5f610bf184828501610bbb565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c3182610903565b9150610c3c83610903565b9250828203905081811115610c5457610c53610bfa565b5b92915050565b5f604082019050610c6d5f830185610b72565b610c7a6020830184610b72565b9392505050565b5f819050919050565b5f610ca4610c9f610c9a84610a0c565b610c81565b610903565b9050919050565b610cb481610c8a565b82525050565b5f604082019050610ccd5f830185610cab565b610cda60208301846109c7565b9392505050565b610cea81610a0c565b82525050565b5f604082019050610d035f830185610b72565b610d106020830184610ce1565b9392505050565b610d2081610a0c565b8114610d2a575f5ffd5b50565b5f81519050610d3b81610d17565b92915050565b5f60208284031215610d5657610d55610869565b5b5f610d6384828501610d2d565b9150509291505056fea2646970667358221220ff08ee24743ce9fae6f450cf1e77bcc4b1ef9440b44868c00f27e1696ee4cc8464736f6c634300081c0033", 33 | "nonce": "0x3e", 34 | "chainId": "0x279f" 35 | }, 36 | "additionalContracts": [], 37 | "isFixedGasLimit": false 38 | } 39 | ], 40 | "receipts": [ 41 | { 42 | "status": "0x1", 43 | "cumulativeGasUsed": "0xabef24", 44 | "logs": [], 45 | "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 46 | "type": "0x2", 47 | "transactionHash": "0x05b57c8bb053fc9268ab43934143ee7a6050b9bd0a1e91513bdfaeffc68a2574", 48 | "transactionIndex": "0x45", 49 | "blockHash": "0x8c9f210e1de95b1656512f2751c43bcb36e53f8da77e7e725e63aa3138896fbf", 50 | "blockNumber": "0xd137a7", 51 | "gasUsed": "0x253d0a", 52 | "effectiveGasPrice": "0xba43b7401", 53 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 54 | "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", 55 | "contractAddress": null 56 | }, 57 | { 58 | "status": "0x1", 59 | "cumulativeGasUsed": "0xbbe811", 60 | "logs": [], 61 | "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 62 | "type": "0x2", 63 | "transactionHash": "0xbda58aa32e7c0b48f95b2994726c126d67fd385b388263546b5abf5daa5b83cb", 64 | "transactionIndex": "0x46", 65 | "blockHash": "0x8c9f210e1de95b1656512f2751c43bcb36e53f8da77e7e725e63aa3138896fbf", 66 | "blockNumber": "0xd137a7", 67 | "gasUsed": "0xff8ed", 68 | "effectiveGasPrice": "0xba43b7401", 69 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 70 | "to": null, 71 | "contractAddress": "0x8d9fd1cffe6e549803285c3ff990faec1d49ee7f" 72 | } 73 | ], 74 | "libraries": [ 75 | "src/LibBoard.sol:Board:0x3A98ff59F451f16DC5201Ad287073202d82abA6e" 76 | ], 77 | "pending": [], 78 | "returns": { 79 | "gameContract": { 80 | "internal_type": "address", 81 | "value": "0x8d9fD1cFFe6e549803285C3Ff990faec1D49eE7f" 82 | } 83 | }, 84 | "timestamp": 1745469906, 85 | "chain": 10143, 86 | "commit": "58bbd3d" 87 | } -------------------------------------------------------------------------------- /broadcast/Deploy.s.sol/10143/run-1745556899.json: -------------------------------------------------------------------------------- 1 | { 2 | "transactions": [ 3 | { 4 | "hash": "0x16bd9f5d4a735cd2928e2ad6fc6aa0f32a0ed359b6efc6ae860540ea9ebf4db3", 5 | "transactionType": "CREATE2", 6 | "contractName": "Board", 7 | "contractAddress": "0x71a332c446d06a33a12e7f5c42b5bdd2c74aea64", 8 | "function": null, 9 | "arguments": null, 10 | "transaction": { 11 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 12 | "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", 13 | "gas": "0x22c4b9", 14 | "input": "0x0000000000000000000000000000000000000000000000000000000000000000611cd761004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100f3575f3560e01c806335e37c72116100955780637e8dbaf61161006f5780637e8dbaf61461028f578063f173e012146102bf578063f3750466146102ef578063f54a36eb1461031f576100f3565b806335e37c72146102115780633b9f7a1f1461024157806364cd159514610271576100f3565b80631af4f970116100d15780631af4f9701461017557806324f4ec51146101935780632c5f3c45146101b1578063312ffe40146101e1576100f3565b806301df1995146100f757806303ee233d1461011557806319c1471814610145575b5f5ffd5b6100ff61034f565b60405161010c91906117c4565b60405180910390f35b61012f600480360381019061012a919061180b565b610354565b60405161013c9190611875565b60405180910390f35b61015f600480360381019061015a919061188e565b610404565b60405161016c9190611875565b60405180910390f35b61017d61050b565b60405161018a91906117c4565b60405180910390f35b61019b610510565b6040516101a891906117c4565b60405180910390f35b6101cb60048036038101906101c6919061188e565b610514565b6040516101d891906117c4565b60405180910390f35b6101fb60048036038101906101f6919061188e565b610844565b60405161020891906117c4565b60405180910390f35b61022b600480360381019061022691906118ef565b610b74565b604051610238919061193c565b60405180910390f35b61025b6004803603810190610256919061188e565b610b9f565b60405161026891906117c4565b60405180910390f35b610279610fbb565b60405161028691906117c4565b60405180910390f35b6102a960048036038101906102a49190611988565b610fc0565b6040516102b691906117c4565b60405180910390f35b6102d960048036038101906102d491906119b3565b6110ca565b6040516102e691906117c4565b60405180910390f35b6103096004803603810190610304919061180b565b61111a565b60405161031691906117c4565b60405180910390f35b6103396004803603810190610334919061188e565b61135e565b60405161034691906117c4565b60405180910390f35b600181565b5f5f6088600886901b901c14610396576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6088600885901b901c146103d7576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6103ee856103e58661177a565b60ff168561111a565b905060088085901b901c81149150509392505050565b5f5f608083901c14610442576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f90505b60108160ff1610156104c6575f61045f8583610b74565b905060038160ff161061049e576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160ff1611156104b85782806104b490611a30565b9350505b508080600101915050610448565b5060028114610501576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001915050919050565b600381565b5f81565b5f5f5f90505b60048160ff16101561083b5761052e61178a565b5f5f90505b60048160ff1610156105945761056085826004866105519190611a77565b61055b9190611ab3565b610b74565b828260ff166004811061057657610575611ae7565b5b602002019060ff16908160ff16815250508080600101915050610533565b5061059d61178a565b5f5f90505f5f90505b60048160ff161015610632575f848260ff16600481106105c9576105c8611ae7565b5b602002015160ff161461062557838160ff16600481106105ec576105eb611ae7565b5b60200201518383806105fd90611b14565b945060ff166004811061061357610612611ae7565b5b602002019060ff16908160ff16815250505b80806001019150506105a6565b505f5f90505b60038160ff16101561072f575f838260ff166004811061065b5761065a611ae7565b5b602002015160ff16141580156106b657508260018261067a9190611ab3565b60ff166004811061068e5761068d611ae7565b5b602002015160ff16838260ff16600481106106ac576106ab611ae7565b5b602002015160ff16145b1561072257828160ff16600481106106d1576106d0611ae7565b5b6020020180518091906106e390611b14565b60ff1660ff16815250505f836001836106fc9190611ab3565b60ff16600481106107105761070f611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610638565b5061073861178a565b5f91505f5f90505b60048160ff1610156107cc575f848260ff166004811061076357610762611ae7565b5b602002015160ff16146107bf57838160ff166004811061078657610785611ae7565b5b602002015182848061079790611b14565b955060ff16600481106107ad576107ac611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610740565b505f5f90505b60048160ff1610156108295761081a88826004896107f09190611a77565b6107fa9190611ab3565b848460ff16600481106108105761080f611ae7565b5b60200201516110ca565b975080806001019150506107d2565b5050505050808060010191505061051a565b50819050919050565b5f5f5f90505b60048160ff161015610b6b5761085e61178a565b5f5f90505b60048160ff1610156108c45761089085846004846108819190611a77565b61088b9190611ab3565b610b74565b828260ff16600481106108a6576108a5611ae7565b5b602002019060ff16908160ff16815250508080600101915050610863565b506108cd61178a565b5f5f90505f5f90505b60048160ff161015610962575f848260ff16600481106108f9576108f8611ae7565b5b602002015160ff161461095557838160ff166004811061091c5761091b611ae7565b5b602002015183838061092d90611b14565b945060ff166004811061094357610942611ae7565b5b602002019060ff16908160ff16815250505b80806001019150506108d6565b505f5f90505b60038160ff161015610a5f575f838260ff166004811061098b5761098a611ae7565b5b602002015160ff16141580156109e65750826001826109aa9190611ab3565b60ff16600481106109be576109bd611ae7565b5b602002015160ff16838260ff16600481106109dc576109db611ae7565b5b602002015160ff16145b15610a5257828160ff1660048110610a0157610a00611ae7565b5b602002018051809190610a1390611b14565b60ff1660ff16815250505f83600183610a2c9190611ab3565b60ff1660048110610a4057610a3f611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610968565b50610a6861178a565b5f91505f5f90505b60048160ff161015610afc575f848260ff1660048110610a9357610a92611ae7565b5b602002015160ff1614610aef57838160ff1660048110610ab657610ab5611ae7565b5b6020020151828480610ac790611b14565b955060ff1660048110610add57610adc611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610a70565b505f5f90505b60048160ff161015610b5957610b4a8887600484610b209190611a77565b610b2a9190611ab3565b848460ff1660048110610b4057610b3f611ae7565b5b60200201516110ca565b97508080600101915050610b02565b5050505050808060010191505061084a565b50819050919050565b5f60ff600883600f610b869190611b3c565b610b909190611a77565b60ff1684901c16905092915050565b5f5f5f90505b60048160ff161015610fb257610bb961178a565b5f5f90505b60048160ff161015610c1f57610beb8582600486610bdc9190611a77565b610be69190611ab3565b610b74565b828260ff1660048110610c0157610c00611ae7565b5b602002019060ff16908160ff16815250508080600101915050610bbe565b50610c2861178a565b5f5f90505b60048160ff161015610c945782816003610c479190611b3c565b60ff1660048110610c5b57610c5a611ae7565b5b6020020151828260ff1660048110610c7657610c75611ae7565b5b602002019060ff16908160ff16815250508080600101915050610c2d565b50610c9d61178a565b5f5f90505f5f90505b60048160ff161015610d32575f848260ff1660048110610cc957610cc8611ae7565b5b602002015160ff1614610d2557838160ff1660048110610cec57610ceb611ae7565b5b6020020151838380610cfd90611b14565b945060ff1660048110610d1357610d12611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610ca6565b505f5f90505b60038160ff161015610e2f575f838260ff1660048110610d5b57610d5a611ae7565b5b602002015160ff1614158015610db6575082600182610d7a9190611ab3565b60ff1660048110610d8e57610d8d611ae7565b5b602002015160ff16838260ff1660048110610dac57610dab611ae7565b5b602002015160ff16145b15610e2257828160ff1660048110610dd157610dd0611ae7565b5b602002018051809190610de390611b14565b60ff1660ff16815250505f83600183610dfc9190611ab3565b60ff1660048110610e1057610e0f611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610d38565b50610e3861178a565b5f91505f5f90505b60048160ff161015610ecc575f848260ff1660048110610e6357610e62611ae7565b5b602002015160ff1614610ebf57838160ff1660048110610e8657610e85611ae7565b5b6020020151828480610e9790611b14565b955060ff1660048110610ead57610eac611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050610e40565b50610ed561178a565b5f5f90505b60048160ff161015610f415782816003610ef49190611b3c565b60ff1660048110610f0857610f07611ae7565b5b6020020151828260ff1660048110610f2357610f22611ae7565b5b602002019060ff16908160ff16815250508080600101915050610eda565b505f5f90505b60048160ff161015610f9e57610f8f8a8260048b610f659190611a77565b610f6f9190611ab3565b848460ff1660048110610f8557610f84611ae7565b5b60200201516110ca565b99508080600101915050610f47565b505050505050508080600101915050610ba5565b50819050919050565b600281565b5f5f82604051602001610fd39190611b90565b604051602081830303815290604052805190602001205f1c90505f601082610ffb9190611bd7565b90508160405160200161100e9190611c27565b604051602081830303815290604052805190602001205f1c91505f6010836110369190611bd7565b90505b81810361106057601060018261104f9190611c41565b6110599190611bd7565b9050611039565b5f5f90505b60108160ff1610156110c157828160ff1614806110845750818160ff16145b156110b4576110b18582605a60648861109d9190611bd7565b116110a95760016110ac565b60025b6110ca565b94505b8080600101915050611065565b50505050919050565b5f600883600f6110da9190611b3c565b6110e49190611a77565b60ff168260ff16901b600884600f6110fc9190611b3c565b6111069190611a77565b60ff1660ff901b1985161790509392505050565b5f60048310611155576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f830361116c5761116584610844565b90506111b3565b600183036111845761117d8461135e565b90506111b2565b6003830361119c5761119584610b9f565b90506111b1565b600283036111b0576111ad84610514565b90505b5b5b5b608081901b608085901b036111f4576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f90505f5f90505b60108160ff161015611238575f6112148483610b74565b60ff160361122b57818061122790611a30565b9250505b80806001019150506111fd565b505f81111561134c575f8167ffffffffffffffff81111561125c5761125b611c74565b5b60405190808252806020026020018201604052801561128a5781602001602082028036833780820191505090505b5090505f5f90505f5f90505b60108160ff1610156112f9575f6112ad8683610b74565b60ff16036112ec57808383815181106112c9576112c8611ae7565b5b602002602001019060ff16908160ff168152505081806112e890611a30565b9250505b8080600101915050611296565b506113478483858861130b9190611bd7565b8151811061131c5761131b611ae7565b5b6020026020010151605a6064896113339190611bd7565b1161133f576001611342565b60025b6110ca565b935050505b60808083901b901c9150509392505050565b5f5f5f90505b60048160ff1610156117715761137861178a565b5f5f90505b60048160ff1610156113de576113aa858460048461139b9190611a77565b6113a59190611ab3565b610b74565b828260ff16600481106113c0576113bf611ae7565b5b602002019060ff16908160ff1681525050808060010191505061137d565b506113e761178a565b5f5f90505b60048160ff16101561145357828160036114069190611b3c565b60ff166004811061141a57611419611ae7565b5b6020020151828260ff166004811061143557611434611ae7565b5b602002019060ff16908160ff168152505080806001019150506113ec565b5061145c61178a565b5f5f90505f5f90505b60048160ff1610156114f1575f848260ff166004811061148857611487611ae7565b5b602002015160ff16146114e457838160ff16600481106114ab576114aa611ae7565b5b60200201518383806114bc90611b14565b945060ff16600481106114d2576114d1611ae7565b5b602002019060ff16908160ff16815250505b8080600101915050611465565b505f5f90505b60038160ff1610156115ee575f838260ff166004811061151a57611519611ae7565b5b602002015160ff16141580156115755750826001826115399190611ab3565b60ff166004811061154d5761154c611ae7565b5b602002015160ff16838260ff166004811061156b5761156a611ae7565b5b602002015160ff16145b156115e157828160ff16600481106115905761158f611ae7565b5b6020020180518091906115a290611b14565b60ff1660ff16815250505f836001836115bb9190611ab3565b60ff16600481106115cf576115ce611ae7565b5b602002019060ff16908160ff16815250505b80806001019150506114f7565b506115f761178a565b5f91505f5f90505b60048160ff16101561168b575f848260ff166004811061162257611621611ae7565b5b602002015160ff161461167e57838160ff166004811061164557611644611ae7565b5b602002015182848061165690611b14565b955060ff166004811061166c5761166b611ae7565b5b602002019060ff16908160ff16815250505b80806001019150506115ff565b5061169461178a565b5f5f90505b60048160ff16101561170057828160036116b39190611b3c565b60ff16600481106116c7576116c6611ae7565b5b6020020151828260ff16600481106116e2576116e1611ae7565b5b602002019060ff16908160ff16815250508080600101915050611699565b505f5f90505b60048160ff16101561175d5761174e8a896004846117249190611a77565b61172e9190611ab3565b848460ff166004811061174457611743611ae7565b5b60200201516110ca565b99508080600101915050611706565b505050505050508080600101915050611364565b50819050919050565b5f60ff60f883901c169050919050565b6040518060800160405280600490602082028036833780820191505090505090565b5f819050919050565b6117be816117ac565b82525050565b5f6020820190506117d75f8301846117b5565b92915050565b5f5ffd5b6117ea816117ac565b81146117f4575f5ffd5b50565b5f81359050611805816117e1565b92915050565b5f5f5f60608486031215611822576118216117dd565b5b5f61182f868287016117f7565b9350506020611840868287016117f7565b9250506040611851868287016117f7565b9150509250925092565b5f8115159050919050565b61186f8161185b565b82525050565b5f6020820190506118885f830184611866565b92915050565b5f602082840312156118a3576118a26117dd565b5b5f6118b0848285016117f7565b91505092915050565b5f60ff82169050919050565b6118ce816118b9565b81146118d8575f5ffd5b50565b5f813590506118e9816118c5565b92915050565b5f5f60408385031215611905576119046117dd565b5b5f611912858286016117f7565b9250506020611923858286016118db565b9150509250929050565b611936816118b9565b82525050565b5f60208201905061194f5f83018461192d565b92915050565b5f819050919050565b61196781611955565b8114611971575f5ffd5b50565b5f813590506119828161195e565b92915050565b5f6020828403121561199d5761199c6117dd565b5b5f6119aa84828501611974565b91505092915050565b5f5f5f606084860312156119ca576119c96117dd565b5b5f6119d7868287016117f7565b93505060206119e8868287016118db565b92505060406119f9868287016118db565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611a3a826117ac565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a6c57611a6b611a03565b5b600182019050919050565b5f611a81826118b9565b9150611a8c836118b9565b9250828202611a9a816118b9565b9150808214611aac57611aab611a03565b5b5092915050565b5f611abd826118b9565b9150611ac8836118b9565b9250828201905060ff811115611ae157611ae0611a03565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f611b1e826118b9565b915060ff8203611b3157611b30611a03565b5b600182019050919050565b5f611b46826118b9565b9150611b51836118b9565b9250828203905060ff811115611b6a57611b69611a03565b5b92915050565b5f819050919050565b611b8a611b8582611955565b611b70565b82525050565b5f611b9b8284611b79565b60208201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611be1826117ac565b9150611bec836117ac565b925082611bfc57611bfb611baa565b5b828206905092915050565b5f819050919050565b611c21611c1c826117ac565b611c07565b82525050565b5f611c328284611c10565b60208201915081905092915050565b5f611c4b826117ac565b9150611c56836117ac565b9250828201905080821115611c6e57611c6d611a03565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffdfea2646970667358221220b39a864d6d2d2a7a8e5f00ccf0b77940d19dc2b9fe937acf5c466c45f6d11f0864736f6c634300081c0033", 15 | "nonce": "0x51", 16 | "chainId": "0x279f" 17 | }, 18 | "additionalContracts": [], 19 | "isFixedGasLimit": false 20 | }, 21 | { 22 | "hash": "0xb6f0df98cf0eafde5111bdcf2d62326697dea923943e30b8a462cdf71478725e", 23 | "transactionType": "CREATE", 24 | "contractName": "Monad2048", 25 | "contractAddress": "0xd58a47b87a49d260a437693d330dfb59d379b74a", 26 | "function": null, 27 | "arguments": null, 28 | "transaction": { 29 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 30 | "gas": "0x121444", 31 | "value": "0x0", 32 | "input": "0x6080604052348015600e575f5ffd5b50610f8d8061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061007b575f3560e01c80639a987475116100595780639a987475146100e7578063ac88036c14610117578063e51b891f14610147578063ed805269146101785761007b565b806339b9e19f1461007f5780633e98ab541461009b57806379cbd233146100b7575b5f5ffd5b610099600480360381019061009491906109e1565b6101a8565b005b6100b560048036038101906100b09190610a52565b6105c0565b005b6100d160048036038101906100cc9190610a90565b6107ee565b6040516100de9190610aca565b60405180910390f35b61010160048036038101906100fc9190610a90565b610803565b60405161010e9190610af2565b60405180910390f35b610131600480360381019061012c9190610a90565b610818565b60405161013e9190610af2565b60405180910390f35b610161600480360381019061015c9190610a90565b61082d565b60405161016f929190610bbc565b60405180910390f35b610192600480360381019061018d9190610a90565b610923565b60405161019f9190610c24565b60405180910390f35b5f3390505f73ffffffffffffffffffffffffffffffffffffffff165f5f8581526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610240576040517f25434c8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826040516020016102529190610c56565b6040516020818303038152906040528051906020012090505f5f1b60035f8381526020019081526020015f2054146102b6576040517f6e3ca80500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7371a332c446d06a33a12e7f5c42b5bdd2c74aea646319c14718845f600481106102e3576102e2610c70565b5b60200201356040518263ffffffff1660e01b81526004016103049190610cac565b602060405180830381865af415801561031f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103439190610cfa565b610379576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600190505b60048110156104a9577371a332c446d06a33a12e7f5c42b5bdd2c74aea646303ee233d856001846103b09190610d52565b600481106103c1576103c0610c70565b5b60200201358684600481106103d9576103d8610c70565b5b602002013588856040516020016103f1929190610dc5565b604051602081830303815290604052805190602001205f1c6040518463ffffffff1660e01b815260040161042793929190610df0565b602060405180830381865af4158015610442573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104669190610cfa565b61049c576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808060010191505061037f565b50815f5f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460025f8681526020019081526020015f20819055508360035f8381526020019081526020015f20819055508260036004811061053957610538610c70565b5b602002013560015f8681526020019081526020015f2081905550838273ffffffffffffffffffffffffffffffffffffffff167f3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e3856003600481106105a05761059f610c70565b5b60200201356040516105b29190610af2565b60405180910390a350505050565b5f3390505f5f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610658576040517faed8b1cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7371a332c446d06a33a12e7f5c42b5bdd2c74aea646303ee233d60015f8681526020019081526020015f2054848660025f8981526020019081526020015f20546040516020016106a9929190610dc5565b604051602081830303815290604052805190602001205f1c6040518463ffffffff1660e01b81526004016106df93929190610df0565b602060405180830381865af41580156106fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061071e9190610cfa565b610754576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160015f8581526020019081526020015f208190555060025f8481526020019081526020015f205f81548092919061078b90610e25565b9190505550828173ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce8426107d285610952565b856040516107e1929190610ea5565b60405180910390a3505050565b6003602052805f5260405f205f915090505481565b6002602052805f5260405f205f915090505481565b6001602052805f5260405f205f915090505481565b610835610962565b5f5f60015f8581526020019081526020015f205490505f5f90505b60108160ff161015610908577371a332c446d06a33a12e7f5c42b5bdd2c74aea646335e37c7283836040518363ffffffff1660e01b8152600401610895929190610edb565b602060405180830381865af41580156108b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d49190610f2c565b848260ff16601081106108ea576108e9610c70565b5b602002019060ff16908160ff16815250508080600101915050610850565b5060025f8581526020019081526020015f2054915050915091565b5f602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60ff60f883901c169050919050565b604051806102000160405280601090602082028036833780820191505090505090565b5f5ffd5b5f819050919050565b61099b81610989565b81146109a5575f5ffd5b50565b5f813590506109b681610992565b92915050565b5f5ffd5b5f819050826020600402820111156109db576109da6109bc565b5b92915050565b5f5f60a083850312156109f7576109f6610985565b5b5f610a04858286016109a8565b9250506020610a15858286016109c0565b9150509250929050565b5f819050919050565b610a3181610a1f565b8114610a3b575f5ffd5b50565b5f81359050610a4c81610a28565b92915050565b5f5f60408385031215610a6857610a67610985565b5b5f610a75858286016109a8565b9250506020610a8685828601610a3e565b9150509250929050565b5f60208284031215610aa557610aa4610985565b5b5f610ab2848285016109a8565b91505092915050565b610ac481610989565b82525050565b5f602082019050610add5f830184610abb565b92915050565b610aec81610a1f565b82525050565b5f602082019050610b055f830184610ae3565b92915050565b5f60109050919050565b5f81905092915050565b5f819050919050565b5f60ff82169050919050565b610b3d81610b28565b82525050565b5f610b4e8383610b34565b60208301905092915050565b5f602082019050919050565b610b6f81610b0b565b610b798184610b15565b9250610b8482610b1f565b805f5b83811015610bb4578151610b9b8782610b43565b9650610ba683610b5a565b925050600181019050610b87565b505050505050565b5f61022082019050610bd05f830185610b66565b610bde610200830184610ae3565b9392505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c0e82610be5565b9050919050565b610c1e81610c04565b82525050565b5f602082019050610c375f830184610c15565b92915050565b82818337505050565b610c5260808383610c3d565b5050565b5f610c618284610c46565b60808201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b610ca681610a1f565b82525050565b5f602082019050610cbf5f830184610c9d565b92915050565b5f8115159050919050565b610cd981610cc5565b8114610ce3575f5ffd5b50565b5f81519050610cf481610cd0565b92915050565b5f60208284031215610d0f57610d0e610985565b5b5f610d1c84828501610ce6565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d5c82610a1f565b9150610d6783610a1f565b9250828203905081811115610d7f57610d7e610d25565b5b92915050565b5f819050919050565b610d9f610d9a82610989565b610d85565b82525050565b5f819050919050565b610dbf610dba82610a1f565b610da5565b82525050565b5f610dd08285610d8e565b602082019150610de08284610dae565b6020820191508190509392505050565b5f606082019050610e035f830186610c9d565b610e106020830185610c9d565b610e1d6040830184610c9d565b949350505050565b5f610e2f82610a1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610e6157610e60610d25565b5b600182019050919050565b5f819050919050565b5f610e8f610e8a610e8584610b28565b610e6c565b610a1f565b9050919050565b610e9f81610e75565b82525050565b5f604082019050610eb85f830185610e96565b610ec56020830184610ae3565b9392505050565b610ed581610b28565b82525050565b5f604082019050610eee5f830185610c9d565b610efb6020830184610ecc565b9392505050565b610f0b81610b28565b8114610f15575f5ffd5b50565b5f81519050610f2681610f02565b92915050565b5f60208284031215610f4157610f40610985565b5b5f610f4e84828501610f18565b9150509291505056fea26469706673582212206910acfb4b24932d85f52ba1d30ae8ff1ad231bd7ab3fe1d7d714d5754147c2764736f6c634300081c0033", 33 | "nonce": "0x52", 34 | "chainId": "0x279f" 35 | }, 36 | "additionalContracts": [], 37 | "isFixedGasLimit": false 38 | } 39 | ], 40 | "receipts": [ 41 | { 42 | "status": "0x1", 43 | "cumulativeGasUsed": "0xd4a4a9", 44 | "logs": [], 45 | "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 46 | "type": "0x2", 47 | "transactionHash": "0x16bd9f5d4a735cd2928e2ad6fc6aa0f32a0ed359b6efc6ae860540ea9ebf4db3", 48 | "transactionIndex": "0x55", 49 | "blockHash": "0x01092e4362a1c77f17357b54288d7dd573f7b659e4640fd9d9d058abf3aae4d3", 50 | "blockNumber": "0xd39cb7", 51 | "gasUsed": "0x22c4b9", 52 | "effectiveGasPrice": "0xba43b7401", 53 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 54 | "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", 55 | "contractAddress": null 56 | }, 57 | { 58 | "status": "0x1", 59 | "cumulativeGasUsed": "0xe6b8ed", 60 | "logs": [], 61 | "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 62 | "type": "0x2", 63 | "transactionHash": "0xb6f0df98cf0eafde5111bdcf2d62326697dea923943e30b8a462cdf71478725e", 64 | "transactionIndex": "0x56", 65 | "blockHash": "0x01092e4362a1c77f17357b54288d7dd573f7b659e4640fd9d9d058abf3aae4d3", 66 | "blockNumber": "0xd39cb7", 67 | "gasUsed": "0x121444", 68 | "effectiveGasPrice": "0xba43b7401", 69 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 70 | "to": null, 71 | "contractAddress": "0xd58a47b87a49d260a437693d330dfb59d379b74a" 72 | } 73 | ], 74 | "libraries": [ 75 | "src/LibBoard.sol:Board:0x71A332C446d06A33A12e7f5C42B5BdD2c74AEa64" 76 | ], 77 | "pending": [], 78 | "returns": { 79 | "gameContract": { 80 | "internal_type": "address", 81 | "value": "0xd58A47b87A49D260A437693D330dFb59d379B74a" 82 | } 83 | }, 84 | "timestamp": 1745556899, 85 | "chain": 10143, 86 | "commit": "8d121b9" 87 | } -------------------------------------------------------------------------------- /broadcast/Deploy.s.sol/10143/run-1746797402.json: -------------------------------------------------------------------------------- 1 | { 2 | "transactions": [ 3 | { 4 | "hash": "0x8554f0cf080cbd8c7785e0ad0794bd4762d19fc709856ee89dd743a539f70a49", 5 | "transactionType": "CREATE2", 6 | "contractName": "Board", 7 | "contractAddress": "0x8fa02ad884b2a60f47ccf5850e242e72f5131450", 8 | "function": null, 9 | "arguments": null, 10 | "transaction": { 11 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 12 | "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", 13 | "gas": "0x149572", 14 | "input": "0x0000000000000000000000000000000000000000000000000000000000000000610fbc61004d600b8282823980515f1a6073146041577f4e487b71000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b305f52607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b2575f3560e01c80632e1a2b221161007a5780632e1a2b221461017057806335e37c72146101a057806364cd1595146101d05780637e8dbaf6146101ee578063f173e0121461021e578063f37504661461024e576100b2565b806301df1995146100b657806303ee233d146100d457806319c14718146101045780631af4f9701461013457806324f4ec5114610152575b5f5ffd5b6100be61027e565b6040516100cb9190610aa4565b60405180910390f35b6100ee60048036038101906100e99190610aeb565b610283565b6040516100fb9190610b55565b60405180910390f35b61011e60048036038101906101199190610b6e565b610333565b60405161012b9190610b55565b60405180910390f35b61013c61043a565b6040516101499190610aa4565b60405180910390f35b61015a61043f565b6040516101679190610aa4565b60405180910390f35b61018a60048036038101906101859190610bc3565b610443565b6040516101979190610aa4565b60405180910390f35b6101ba60048036038101906101b59190610c49565b610512565b6040516101c79190610c96565b60405180910390f35b6101d861053d565b6040516101e59190610aa4565b60405180910390f35b61020860048036038101906102039190610ce2565b610542565b6040516102159190610aa4565b60405180910390f35b61023860048036038101906102339190610d0d565b61063a565b6040516102459190610aa4565b60405180910390f35b61026860048036038101906102639190610aeb565b61068a565b6040516102759190610aa4565b60405180910390f35b600181565b5f5f6088600886901b901c146102c5576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6088600885901b901c14610306576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61031d85610314866107f2565b60ff168561068a565b905060088085901b901c81149150509392505050565b5f5f608083901c14610371576040517ff561181200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5f5f90505b60108160ff1610156103f5575f61038e8583610512565b905060038160ff16106103cd576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8160ff1611156103e75782806103e390610d8a565b9350505b508080600101915050610377565b5060028114610430576040517f7646c39a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001915050919050565b600381565b5f81565b5f5f5f90506fffffffffffffffffffffffffffffffff8016851694505f8461046f5763ffffffff61047e565b6cff000000ff000000ff000000ff5b6cffffffffffffffffffffffffff1690505f5f90505b6004811015610508575f6104ab8884168888610802565b90505f6104b98289896108f8565b90508481901b86179550876104cf5760206104d2565b60085b60ff16856104e09190610dd1565b9450876104ee5760206104f1565b60085b60ff1689901c985050508080600101915050610494565b5050509392505050565b5f60ff600883600f6105249190610e04565b61052e9190610e38565b60ff1684901c16905092915050565b600281565b5f5f826040516020016105559190610e94565b604051602081830303815290604052805190602001205f1c90505f60108261057d9190610edb565b9050816040516020016105909190610f2b565b604051602081830303815290604052805190602001205f1c91505f600f836105b89190610edb565b90508181106105d05780806105cc90610d8a565b9150505b5f5f90505b60108160ff16101561063157828160ff1614806105f45750818160ff16145b15610624576106218582605a60648861060d9190610edb565b1161061957600161061c565b60025b61063a565b94505b80806001019150506105d5565b50505050919050565b5f600883600f61064a9190610e04565b6106549190610e38565b60ff168260ff16901b600884600f61066c9190610e04565b6106769190610e38565b60ff1660ff901b1985161790509392505050565b5f600483106106c5576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106e28460018511155f6002876106dc9190610edb565b14610443565b9050608081901b608085901b03610725576040517f35405e3c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6fff00000000000000000000000000000090505f5f5f5b5f8414610788575f8486160361076e57818061075890610d8a565b925060086107669190610f45565b81901b831792505b600884901c9350808061078090610d8a565b91505061073d565b5f8211156107dd575f60ff838861079f9190610edb565b60086107ab9190610f45565b85901c1690506107d98682605a60648b6107c59190610edb565b116107d15760016107d4565b60025b61063a565b9550505b60808086901b901c9450505050509392505050565b5f60ff60f883901c169050919050565b5f5f83610810576008610813565b60205b60ff1690505f836108255760ff610844565b846108345763ff000000610843565b6cff0000000000000000000000005b5b6cffffffffffffffffffffffffff1690505f856108655763ffffffff610874565b6cff000000ff000000ff000000ff5b6cffffffffffffffffffffffffff1690505b5f821415801561089657505f8714155b156108ee575b5f8188161180156108ae57505f828816145b156108cd57846108c1578287901c6108c6565b8287901b5b965061089c565b81871684179350846108e2578282901b6108e7565b8282901c5b9150610886565b5050509392505050565b5f5f83610906576008610909565b60205b60ff1690505f8361091b5760ff61093a565b8461092a5763ff000000610939565b6cff0000000000000000000000005b5b6cffffffffffffffffffffffffff1690505f8561095b5763ffffffff61096a565b6cff000000ff000000ff000000ff5b6cffffffffffffffffffffffffff1690505f8561098a578383901b61098f565b8383901c5b90505f8661099e5760016109bd565b876109ad5763010000006109bc565b6c010000000000000000000000005b5b6cffffffffffffffffffffffffff1690505b5f89841614610a80575f876109e95785838b16901c6109f0565b85838b16901b5b905080858b1603610a1f5787610a0957858a901c610a0e565b858a901b5b9950818a610a1c9190610dd1565b99505b848a168717965087610a34578585901b610a39565b8585901c5b945087610a49578583901b610a4e565b8583901c5b925087610a5e578582901b610a63565b8582901c5b915087610a73578584901b610a78565b8584901c5b9350506109cf565b50505050509392505050565b5f819050919050565b610a9e81610a8c565b82525050565b5f602082019050610ab75f830184610a95565b92915050565b5f5ffd5b610aca81610a8c565b8114610ad4575f5ffd5b50565b5f81359050610ae581610ac1565b92915050565b5f5f5f60608486031215610b0257610b01610abd565b5b5f610b0f86828701610ad7565b9350506020610b2086828701610ad7565b9250506040610b3186828701610ad7565b9150509250925092565b5f8115159050919050565b610b4f81610b3b565b82525050565b5f602082019050610b685f830184610b46565b92915050565b5f60208284031215610b8357610b82610abd565b5b5f610b9084828501610ad7565b91505092915050565b610ba281610b3b565b8114610bac575f5ffd5b50565b5f81359050610bbd81610b99565b92915050565b5f5f5f60608486031215610bda57610bd9610abd565b5b5f610be786828701610ad7565b9350506020610bf886828701610baf565b9250506040610c0986828701610baf565b9150509250925092565b5f60ff82169050919050565b610c2881610c13565b8114610c32575f5ffd5b50565b5f81359050610c4381610c1f565b92915050565b5f5f60408385031215610c5f57610c5e610abd565b5b5f610c6c85828601610ad7565b9250506020610c7d85828601610c35565b9150509250929050565b610c9081610c13565b82525050565b5f602082019050610ca95f830184610c87565b92915050565b5f819050919050565b610cc181610caf565b8114610ccb575f5ffd5b50565b5f81359050610cdc81610cb8565b92915050565b5f60208284031215610cf757610cf6610abd565b5b5f610d0484828501610cce565b91505092915050565b5f5f5f60608486031215610d2457610d23610abd565b5b5f610d3186828701610ad7565b9350506020610d4286828701610c35565b9250506040610d5386828701610c35565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610d9482610a8c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610dc657610dc5610d5d565b5b600182019050919050565b5f610ddb82610a8c565b9150610de683610a8c565b9250828201905080821115610dfe57610dfd610d5d565b5b92915050565b5f610e0e82610c13565b9150610e1983610c13565b9250828203905060ff811115610e3257610e31610d5d565b5b92915050565b5f610e4282610c13565b9150610e4d83610c13565b9250828202610e5b81610c13565b9150808214610e6d57610e6c610d5d565b5b5092915050565b5f819050919050565b610e8e610e8982610caf565b610e74565b82525050565b5f610e9f8284610e7d565b60208201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610ee582610a8c565b9150610ef083610a8c565b925082610f0057610eff610eae565b5b828206905092915050565b5f819050919050565b610f25610f2082610a8c565b610f0b565b82525050565b5f610f368284610f14565b60208201915081905092915050565b5f610f4f82610a8c565b9150610f5a83610a8c565b9250828202610f6881610a8c565b91508282048414831517610f7f57610f7e610d5d565b5b509291505056fea26469706673582212207a69099fdb98d08816a23c71ad6b6619a446a1f429dcce2bd59508ec3ecbc24564736f6c634300081c0033", 15 | "nonce": "0x72", 16 | "chainId": "0x279f" 17 | }, 18 | "additionalContracts": [], 19 | "isFixedGasLimit": false 20 | }, 21 | { 22 | "hash": "0x7993fa7ab600911367fd2042fdf8c7dfd162c1b02de6256c1271343c244513e2", 23 | "transactionType": "CREATE", 24 | "contractName": "Monad2048", 25 | "contractAddress": "0x01bccdccdecafe3f357e8df9ae5b9af002939d1c", 26 | "function": null, 27 | "arguments": null, 28 | "transaction": { 29 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 30 | "gas": "0x10cfd1", 31 | "value": "0x0", 32 | "input": "0x6080604052348015600e575f5ffd5b50610e678061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806339b9e19f146100645780633e98ab541461008057806379cbd2331461009c5780639a987475146100cc578063ac88036c146100fc578063e51b891f1461012c575b5f5ffd5b61007e60048036038101906100799190610913565b61015d565b005b61009a60048036038101906100959190610984565b61054a565b005b6100b660048036038101906100b191906109c2565b610751565b6040516100c391906109fc565b60405180910390f35b6100e660048036038101906100e191906109c2565b610766565b6040516100f39190610a24565b60405180910390f35b610116600480360381019061011191906109c2565b61077b565b6040516101239190610a24565b60405180910390f35b610146600480360381019061014191906109c2565b61078f565b604051610154929190610aee565b60405180910390f35b33826060815f1c901c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146101ca576040517faed8b1cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f3390505f5f5f8781526020019081526020015f205414610217576040517f25434c8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f846040516020016102299190610b30565b6040516020818303038152906040528051906020012090505f5f1b60025f8381526020019081526020015f20541461028d576040517f6e3ca80500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b738fa02ad884b2a60f47ccf5850e242e72f51314506319c14718865f600481106102ba576102b9610b4a565b5b60200201356040518263ffffffff1660e01b81526004016102db9190610b86565b602060405180830381865af41580156102f6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031a9190610bd4565b610350576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600190505b600481101561048057738fa02ad884b2a60f47ccf5850e242e72f51314506303ee233d876001846103879190610c2c565b6004811061039857610397610b4a565b5b60200201358884600481106103b0576103af610b4a565b5b60200201358a856040516020016103c8929190610c9f565b604051602081830303815290604052805190602001205f1c6040518463ffffffff1660e01b81526004016103fe93929190610cca565b602060405180830381865af4158015610419573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043d9190610bd4565b610473576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8080600101915050610356565b50600460015f8881526020019081526020015f20819055508560025f8381526020019081526020015f2081905550846003600481106104c2576104c1610b4a565b5b60200201355f5f8881526020019081526020015f2081905550858273ffffffffffffffffffffffffffffffffffffffff167f3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e38760036004811061052857610527610b4a565b5b602002013560405161053a9190610a24565b60405180910390a3505050505050565b33826060815f1c901c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146105b7576040517faed8b1cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f339050738fa02ad884b2a60f47ccf5850e242e72f51314506303ee233d5f5f8881526020019081526020015f2054868860015f8b81526020019081526020015f205460405160200161060b929190610c9f565b604051602081830303815290604052805190602001205f1c6040518463ffffffff1660e01b815260040161064193929190610cca565b602060405180830381865af415801561065c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106809190610bd4565b6106b6576040517f2b977ce300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835f5f8781526020019081526020015f208190555060015f8681526020019081526020015f205f8154809291906106ec90610cff565b9190505550848173ffffffffffffffffffffffffffffffffffffffff167f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce84261073387610884565b87604051610742929190610d7f565b60405180910390a35050505050565b6002602052805f5260405f205f915090505481565b6001602052805f5260405f205f915090505481565b5f602052805f5260405f205f915090505481565b610797610894565b5f5f5f5f8581526020019081526020015f205490505f5f90505b60108160ff16101561086957738fa02ad884b2a60f47ccf5850e242e72f51314506335e37c7283836040518363ffffffff1660e01b81526004016107f6929190610db5565b602060405180830381865af4158015610811573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108359190610e06565b848260ff166010811061084b5761084a610b4a565b5b602002019060ff16908160ff168152505080806001019150506107b1565b5060015f8581526020019081526020015f2054915050915091565b5f60ff60f883901c169050919050565b604051806102000160405280601090602082028036833780820191505090505090565b5f5ffd5b5f819050919050565b6108cd816108bb565b81146108d7575f5ffd5b50565b5f813590506108e8816108c4565b92915050565b5f5ffd5b5f8190508260206004028201111561090d5761090c6108ee565b5b92915050565b5f5f60a08385031215610929576109286108b7565b5b5f610936858286016108da565b9250506020610947858286016108f2565b9150509250929050565b5f819050919050565b61096381610951565b811461096d575f5ffd5b50565b5f8135905061097e8161095a565b92915050565b5f5f6040838503121561099a576109996108b7565b5b5f6109a7858286016108da565b92505060206109b885828601610970565b9150509250929050565b5f602082840312156109d7576109d66108b7565b5b5f6109e4848285016108da565b91505092915050565b6109f6816108bb565b82525050565b5f602082019050610a0f5f8301846109ed565b92915050565b610a1e81610951565b82525050565b5f602082019050610a375f830184610a15565b92915050565b5f60109050919050565b5f81905092915050565b5f819050919050565b5f60ff82169050919050565b610a6f81610a5a565b82525050565b5f610a808383610a66565b60208301905092915050565b5f602082019050919050565b610aa181610a3d565b610aab8184610a47565b9250610ab682610a51565b805f5b83811015610ae6578151610acd8782610a75565b9650610ad883610a8c565b925050600181019050610ab9565b505050505050565b5f61022082019050610b025f830185610a98565b610b10610200830184610a15565b9392505050565b82818337505050565b610b2c60808383610b17565b5050565b5f610b3b8284610b20565b60808201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b610b8081610951565b82525050565b5f602082019050610b995f830184610b77565b92915050565b5f8115159050919050565b610bb381610b9f565b8114610bbd575f5ffd5b50565b5f81519050610bce81610baa565b92915050565b5f60208284031215610be957610be86108b7565b5b5f610bf684828501610bc0565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610c3682610951565b9150610c4183610951565b9250828203905081811115610c5957610c58610bff565b5b92915050565b5f819050919050565b610c79610c74826108bb565b610c5f565b82525050565b5f819050919050565b610c99610c9482610951565b610c7f565b82525050565b5f610caa8285610c68565b602082019150610cba8284610c88565b6020820191508190509392505050565b5f606082019050610cdd5f830186610b77565b610cea6020830185610b77565b610cf76040830184610b77565b949350505050565b5f610d0982610951565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610d3b57610d3a610bff565b5b600182019050919050565b5f819050919050565b5f610d69610d64610d5f84610a5a565b610d46565b610951565b9050919050565b610d7981610d4f565b82525050565b5f604082019050610d925f830185610d70565b610d9f6020830184610a15565b9392505050565b610daf81610a5a565b82525050565b5f604082019050610dc85f830185610b77565b610dd56020830184610da6565b9392505050565b610de581610a5a565b8114610def575f5ffd5b50565b5f81519050610e0081610ddc565b92915050565b5f60208284031215610e1b57610e1a6108b7565b5b5f610e2884828501610df2565b9150509291505056fea26469706673582212204407ab850bb713c8f65c96ab9b993b3f15a6884bd6dbedac751a114ffce6420c64736f6c634300081c0033", 33 | "nonce": "0x73", 34 | "chainId": "0x279f" 35 | }, 36 | "additionalContracts": [], 37 | "isFixedGasLimit": false 38 | } 39 | ], 40 | "receipts": [ 41 | { 42 | "status": "0x1", 43 | "cumulativeGasUsed": "0xb2bbf9", 44 | "logs": [], 45 | "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 46 | "type": "0x2", 47 | "transactionHash": "0x8554f0cf080cbd8c7785e0ad0794bd4762d19fc709856ee89dd743a539f70a49", 48 | "transactionIndex": "0x2f", 49 | "blockHash": "0x4466c9bfaacd7db50fd939b8f0f5af1df1d88aaf2851a96787cc07f64ef37197", 50 | "blockNumber": "0xf4db1a", 51 | "gasUsed": "0x149572", 52 | "effectiveGasPrice": "0xba43b7401", 53 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 54 | "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", 55 | "contractAddress": null 56 | }, 57 | { 58 | "status": "0x1", 59 | "cumulativeGasUsed": "0x7eaa8b", 60 | "logs": [], 61 | "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 62 | "type": "0x2", 63 | "transactionHash": "0x7993fa7ab600911367fd2042fdf8c7dfd162c1b02de6256c1271343c244513e2", 64 | "transactionIndex": "0x24", 65 | "blockHash": "0x2f095e1d762c94987e0e53a327ddca24f100c2fe455705dabcc98d3f0cae5851", 66 | "blockNumber": "0xf4db1b", 67 | "gasUsed": "0x10cfd1", 68 | "effectiveGasPrice": "0xba43b7401", 69 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 70 | "to": null, 71 | "contractAddress": "0x01bccdccdecafe3f357e8df9ae5b9af002939d1c" 72 | } 73 | ], 74 | "libraries": [ 75 | "src/LibBoard.sol:Board:0x8fa02Ad884b2a60f47ccf5850E242e72F5131450" 76 | ], 77 | "pending": [], 78 | "returns": { 79 | "gameContract": { 80 | "internal_type": "address", 81 | "value": "0x01BCCDccDEcAFe3F357e8DF9aE5b9aF002939D1c" 82 | } 83 | }, 84 | "timestamp": 1746797402, 85 | "chain": 10143, 86 | "commit": "80040d4" 87 | } -------------------------------------------------------------------------------- /broadcast/Deploy.s.sol/10143/run-1747028257.json: -------------------------------------------------------------------------------- 1 | { 2 | "transactions": [ 3 | { 4 | "hash": "0x7ead7b3b3c7cfac064d2445ffb4aeef5936c7b4247c66cbd1edfd878361f6c79", 5 | "transactionType": "CREATE2", 6 | "contractName": "Board", 7 | "contractAddress": "0xa3fd3e8866875524e08fb158a7287c642da53fa8", 8 | "function": null, 9 | "arguments": null, 10 | "transaction": { 11 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 12 | "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", 13 | "gas": "0x125701", 14 | "input": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234601957610de6908161001e823930815050f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816301df1995146104c7575080630be27a04146104435780631af4f9701461040f57806324f4ec51146103dc5780632b2f6a121461039657806354c30fd91461032e57806364cd1595146102fa5780637e8dbaf6146101a65780638def51a11461014f578063918a2a65146100fb57639aff28fe14610095575f80fd5b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206100dd6100cc6104f9565b6100d4610518565b60443591610ba6565b6fffffffffffffffffffffffffffffffff60405191168152f35b5f80fd5b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75761012d6104f9565b610135610518565b9060443560ff811681036100f7576020926100dd92610b36565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f7576101816104f9565b6024359081151582036100f75760443580151581036100f7576020926100dd92610656565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760405160208101906004358252602081526040810181811067ffffffffffffffff8211176102cd57604052519020600f81169060101c60ff600f820616908282101561028c575b906020926fffffffffffffffffffffffffffffffff605a60646100dd95061192835f1461027c5760ff6102636102568260025b61025b610256876105fe565b61060f565b5016936105fe565b161b16911561027457600291610b36565b600191610b36565b60ff61026361025682600161024a565b60ff82146102a05760019190910190610217565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f757602060405160028152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206103626104f9565b60ff80610378610256610373610518565b6105fe565b166fffffffffffffffffffffffffffffffff6040519316901c168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206103d26103cd6104f9565b610528565b6040519015158152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206040515f8152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f757602060405160038152f35b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f7576104756104f9565b61047d610518565b90604435906fffffffffffffffffffffffffffffffff82168092036100f7576104bd6fffffffffffffffffffffffffffffffff9160209460643591610ba6565b1614604051908152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75780600160209252f35b600435906fffffffffffffffffffffffffffffffff821682036100f757565b6024359060ff821682036100f757565b6ffcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc8116158015906105dd575b6105d8575f905b6fffffffffffffffffffffffffffffffff811680156105d0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906fffffffffffffffffffffffffffffffff82116102a05716907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146102a0576001019061054b565b505060021490565b505f90565b50600181901c81166f7fffffffffffffffffffffffffffffff161515610544565b60ff16600f039060ff82116102a057565b60031b906107f860f88316921682036102a057565b906fffffffffffffffffffffffffffffffff809116911601906fffffffffffffffffffffffffffffffff82116102a057565b5f93928492908115610b28576cff000000ff000000ff000000ff929391935b5f925b6004841061068857505050505050565b90919294966cffffffffffffffffffffffffff838698961616915f93895f14610b1f5760ff60205b16978615610b0a578a15610af2576cffffffffffffffffffffffffff6cff0000000000000000000000005b169a8015610ae4576cff000000ff000000ff000000ff989590955b6fffffffffffffffffffffffffffffffff8d169b8c151580610ac9575b156107bb57915b808b166cffffffffffffffffffffffffff1615158e8161079e575b5015610767576fffffffffffffffffffffffffffffffff80918b5f1461075e57168c1b1661071a565b168c1c1661071a565b96919b976fffffffffffffffffffffffffffffffff919d88161797895f14610796578b1c165b9b9590956106f6565b8b1b1661078d565b6fffffffffffffffffffffffffffffffff9150821616158e610735565b99509a505093959491995096505f90855f14610ac05760ff60205b168515610aab578615610a93576cffffffffffffffffffffffffff6cff0000000000000000000000005b16918715610a7b576cffffffffffffffffffffffffff6cff000000ff000000ff000000ff5b168715610a61576fffffffffffffffffffffffffffffffff84841c165b8815610a48578915610a30576cffffffffffffffffffffffffff6c010000000000000000000000005b908a969392915b16925b6fffffffffffffffffffffffffffffffff858416166108fa57505050505050506108ca6001926fffffffffffffffffffffffffffffffff80809416818d161b161799865f146108f15760ff60085b1690610624565b9685156108e65760ff826008925b1691161c1691019294610678565b60ff826020926108d8565b60ff60206108c3565b8697875f14610a0f5786886fffffffffffffffffffffffffffffffff8080878b1616841b165b166fffffffffffffffffffffffffffffffff858a1616146109bc575b50506fffffffffffffffffffffffffffffffff8080809581808781989782988e16179f5f146109b357168c1c165b9b156109aa5716891c165b958d156109a15716871c165b928b156109985716851c165b918995929192610875565b16851b1661098d565b16871b16610981565b16891b16610975565b168c1b1661096a565b6fffffffffffffffffffffffffffffffff809581808781989c976109f28d84809b9a81809c819c5f14610a065716901b16610624565b9d509750975050509550505050868861093c565b16901c16610624565b86886fffffffffffffffffffffffffffffffff8080878b1616841c16610920565b6cffffffffffffffffffffffffff630100000061086b565b889491906cffffffffffffffffffffffffff6001610872565b6fffffffffffffffffffffffffffffffff84841b16610842565b6cffffffffffffffffffffffffff63ffffffff610825565b6cffffffffffffffffffffffffff63ff000000610800565b6cffffffffffffffffffffffffff60ff610800565b60ff60086107d6565b506fffffffffffffffffffffffffffffffff83161515610713565b63ffffffff989590956106f6565b6cffffffffffffffffffffffffff63ff0000006106db565b6cffffffffffffffffffffffffff60ff6106db565b60ff60086106b0565b63ffffffff92939193610675565b6fffffffffffffffffffffffffffffffff809260ff610b6c61025682858180610b61610256896105fe565b161b169816936105fe565b161b16921916161790565b6fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff81146102a05760010190565b92919060ff81166004811015610d8857600180610bc893161591111585610656565b926fffffffffffffffffffffffffffffffff808516911614610d88575f80806fff0000000000000000000000000000005b6fffffffffffffffffffffffffffffffff8116610cef5750506fffffffffffffffffffffffffffffffff1680158015610c33575b50505050565b5f959293949550610cc2578306927f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841684036102a057610c9f93605a606460ff9306115f14610ca9576fffffffffffffffffffffffffffffffff6002945b169060031b1c1690610b36565b905f808080610c2d565b6fffffffffffffffffffffffffffffffff600194610c92565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6fffffffffffffffffffffffffffffffff8188161615610d2e575b6effffffffffffffffffffffffffffff610d289160081c1691610b77565b90610bf9565b92610d3883610b77565b9260031b7007fffffffffffffffffffffffffffffff86ffffffffffffffffffffffffffffffff88216911681036102a0576fffffffffffffffffffffffffffffffff83811690911b161792610d0a565b7f35405e3c000000000000000000000000000000000000000000000000000000005f5260045ffdfea264697066735822122070d2381bf6b7305009885b5d725b8c1ff99d3898b0fb599b437862fde33fd38464736f6c634300081c0033", 15 | "nonce": "0x74", 16 | "chainId": "0x279f" 17 | }, 18 | "additionalContracts": [], 19 | "isFixedGasLimit": false 20 | }, 21 | { 22 | "hash": "0xb4da45a9779ecbe40764ea86e96a0a34df76a9388b1af1cf0a7338cb86c7290a", 23 | "transactionType": "CREATE", 24 | "contractName": "Monad2048", 25 | "contractAddress": "0xe0fa8195ae92b9c473c0c0c12c2d6bcbd245de47", 26 | "function": null, 27 | "arguments": null, 28 | "transaction": { 29 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 30 | "gas": "0xd16d0", 31 | "value": "0x0", 32 | "input": "0x60808060405234601557610b06908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816325c09963146107e35750806361d585da1461077657806379cbd2331461072e5780639a987475146106d3578063ac88036c14610689578063bb9df307146101eb5763e51b891f14610069575f80fd5b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576040516102006004356100ab8284610a29565b81368437805f525f60205260405f205460801c905f9173a3fd3e8866875524e08fb158a7287c642da53fa8925b60ff8116601081101561019457604051907f54c30fd90000000000000000000000000000000000000000000000000000000082528360048301526024820152602081604481885af4908115610189575f91610149575b5060ff918260019216611fe08260051b1689015201166100d8565b90506020813d8211610181575b8161016360209383610a29565b8101031261017d575160ff8116810361017d5760ff61012e565b5f80fd5b3d9150610156565b6040513d5f823e3d90fd5b8686855f525f6020526effffffffffffffffffffffffffffff60405f205460081c1660405191825f905b601082106101d25750506102209350820152f35b60208060019260ff8951168152019601910190946101be565b3461017d576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004353660a41161017d57366101041161017d578060601c330361066157805f525f60205260405f205460801c6106395760405160208101905f6024835b60048310610607575050506080815261027360a082610a29565b519020805f52600160205260405f20546105df5773a3fd3e8866875524e08fb158a7287c642da53fa86024356fffffffffffffffffffffffffffffffff81169081810361017d5750604051907f2b2f6a120000000000000000000000000000000000000000000000000000000082526004820152602081602481855af4908115610189575f916105c0575b50156105105760015b600481106104015750505f5260016020528060405f205560e43560ff81169081810361017d5750610336610a94565b60405191610343836109e0565b825260208201600481526fffffffffffffffffffffffffffffffff6040840192168252835f525f6020527fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffff0060ff60405f20955116925160081b16925160801b1691171790556103c1610a94565b6fffffffffffffffffffffffffffffffff604051911681527f3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e360203392a3005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116105935761043c61043782610a82565b610ab3565b9060038110156105665760051b60a4013560ff8116810361017d5760209061046661043785610a82565b926104ef604051848101908a825287604082015260408152610489606082610a29565b51902060405195869485947f0be27a0400000000000000000000000000000000000000000000000000000000865260048601909493926fffffffffffffffffffffffffffffffff9060ff6060948360808601991685521660208401521660408201520152565b0381865af4908115610189575f91610538575b501561051057600101610307565b7f2b977ce3000000000000000000000000000000000000000000000000000000005f5260045ffd5b610559915060203d811161055f575b6105518183610a29565b810190610a6a565b85610502565b503d610547565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6105d9915060203d60201161055f576105518183610a29565b846102fe565b7f6e3ca805000000000000000000000000000000000000000000000000000000005f5260045ffd5b8135906fffffffffffffffffffffffffffffffff821680920361017d5760208160019382935201920192019190610259565b7f25434c83000000000000000000000000000000000000000000000000000000005f5260045ffd5b7faed8b1cf000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f525f602052602060405f205460801c604051908152f35b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f525f60205260206effffffffffffffffffffffffffffff60405f205460081c16604051908152f35b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f526001602052602060405f2054604051908152f35b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f525f602052606060405f20546040519060ff811682526effffffffffffffffffffffffffffff8160081c16602083015260801c6040820152f35b3461017d5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004359060243560ff81169182820361017d576044356fffffffffffffffffffffffffffffffff81169283820361017d578560601c330361066157602090865f525f825260406108b2815f20610867876109e0565b549560ff871681526effffffffffffffffffffffffffffff8760081c16908581019782895260801c9384910152604051858101918b8352604082015260408152610489606082610a29565b038173a3fd3e8866875524e08fb158a7287c642da53fa85af4908115610189575f916109c1575b5015610510576effffffffffffffffffffffffffffff6001915116016effffffffffffffffffffffffffffff81116105935760405190610918826109e0565b8382526effffffffffffffffffffffffffffff60208301911681526040820190838252855f525f6020527fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffff0060ff60405f20955116925160081b16925160801b16911717905560405191825260208201527f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce84260403392a3005b6109da915060203d60201161055f576105518183610a29565b856108d9565b6060810190811067ffffffffffffffff8211176109fc57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109fc57604052565b9081602091031261017d5751801515810361017d5790565b60048110156105665760051b60240190565b6084356fffffffffffffffffffffffffffffffff8116810361017d5790565b356fffffffffffffffffffffffffffffffff8116810361017d579056fea2646970667358221220969a7f7c514aa734f294aa96245a7452aa46ed6a1a3ce4c0584d3af116f7bc9264736f6c634300081c0033", 33 | "nonce": "0x75", 34 | "chainId": "0x279f" 35 | }, 36 | "additionalContracts": [], 37 | "isFixedGasLimit": false 38 | } 39 | ], 40 | "receipts": [ 41 | { 42 | "status": "0x1", 43 | "cumulativeGasUsed": "0x738dea", 44 | "logs": [], 45 | "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 46 | "type": "0x2", 47 | "transactionHash": "0x7ead7b3b3c7cfac064d2445ffb4aeef5936c7b4247c66cbd1edfd878361f6c79", 48 | "transactionIndex": "0x1d", 49 | "blockHash": "0x6bd47e8728e72317d73af02f6e77e3da404f771620b34fe265f7b80cb0ec474e", 50 | "blockNumber": "0xfb8abb", 51 | "gasUsed": "0x125701", 52 | "effectiveGasPrice": "0xba43b7401", 53 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 54 | "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", 55 | "contractAddress": null 56 | }, 57 | { 58 | "status": "0x1", 59 | "cumulativeGasUsed": "0x8fe6fa", 60 | "logs": [], 61 | "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 62 | "type": "0x2", 63 | "transactionHash": "0xb4da45a9779ecbe40764ea86e96a0a34df76a9388b1af1cf0a7338cb86c7290a", 64 | "transactionIndex": "0x1f", 65 | "blockHash": "0x6bd47e8728e72317d73af02f6e77e3da404f771620b34fe265f7b80cb0ec474e", 66 | "blockNumber": "0xfb8abb", 67 | "gasUsed": "0xd16d0", 68 | "effectiveGasPrice": "0xba43b7401", 69 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 70 | "to": null, 71 | "contractAddress": "0xe0fa8195ae92b9c473c0c0c12c2d6bcbd245de47" 72 | } 73 | ], 74 | "libraries": [ 75 | "src/LibBoard.sol:Board:0xa3Fd3e8866875524E08FB158A7287c642dA53fA8" 76 | ], 77 | "pending": [], 78 | "returns": { 79 | "gameContract": { 80 | "internal_type": "address", 81 | "value": "0xe0FA8195AE92b9C473c0c0c12c2D6bCbd245De47" 82 | } 83 | }, 84 | "timestamp": 1747028257, 85 | "chain": 10143, 86 | "commit": "d3c1d31" 87 | } -------------------------------------------------------------------------------- /broadcast/Deploy.s.sol/10143/run-latest.json: -------------------------------------------------------------------------------- 1 | { 2 | "transactions": [ 3 | { 4 | "hash": "0x7ead7b3b3c7cfac064d2445ffb4aeef5936c7b4247c66cbd1edfd878361f6c79", 5 | "transactionType": "CREATE2", 6 | "contractName": "Board", 7 | "contractAddress": "0xa3fd3e8866875524e08fb158a7287c642da53fa8", 8 | "function": null, 9 | "arguments": null, 10 | "transaction": { 11 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 12 | "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", 13 | "gas": "0x125701", 14 | "input": "0x000000000000000000000000000000000000000000000000000000000000000060808060405234601957610de6908161001e823930815050f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816301df1995146104c7575080630be27a04146104435780631af4f9701461040f57806324f4ec51146103dc5780632b2f6a121461039657806354c30fd91461032e57806364cd1595146102fa5780637e8dbaf6146101a65780638def51a11461014f578063918a2a65146100fb57639aff28fe14610095575f80fd5b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206100dd6100cc6104f9565b6100d4610518565b60443591610ba6565b6fffffffffffffffffffffffffffffffff60405191168152f35b5f80fd5b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75761012d6104f9565b610135610518565b9060443560ff811681036100f7576020926100dd92610b36565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f7576101816104f9565b6024359081151582036100f75760443580151581036100f7576020926100dd92610656565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760405160208101906004358252602081526040810181811067ffffffffffffffff8211176102cd57604052519020600f81169060101c60ff600f820616908282101561028c575b906020926fffffffffffffffffffffffffffffffff605a60646100dd95061192835f1461027c5760ff6102636102568260025b61025b610256876105fe565b61060f565b5016936105fe565b161b16911561027457600291610b36565b600191610b36565b60ff61026361025682600161024a565b60ff82146102a05760019190910190610217565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f757602060405160028152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206103626104f9565b60ff80610378610256610373610518565b6105fe565b166fffffffffffffffffffffffffffffffff6040519316901c168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206103d26103cd6104f9565b610528565b6040519015158152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75760206040515f8152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f757602060405160038152f35b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f7576104756104f9565b61047d610518565b90604435906fffffffffffffffffffffffffffffffff82168092036100f7576104bd6fffffffffffffffffffffffffffffffff9160209460643591610ba6565b1614604051908152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100f75780600160209252f35b600435906fffffffffffffffffffffffffffffffff821682036100f757565b6024359060ff821682036100f757565b6ffcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfc8116158015906105dd575b6105d8575f905b6fffffffffffffffffffffffffffffffff811680156105d0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01906fffffffffffffffffffffffffffffffff82116102a05716907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146102a0576001019061054b565b505060021490565b505f90565b50600181901c81166f7fffffffffffffffffffffffffffffff161515610544565b60ff16600f039060ff82116102a057565b60031b906107f860f88316921682036102a057565b906fffffffffffffffffffffffffffffffff809116911601906fffffffffffffffffffffffffffffffff82116102a057565b5f93928492908115610b28576cff000000ff000000ff000000ff929391935b5f925b6004841061068857505050505050565b90919294966cffffffffffffffffffffffffff838698961616915f93895f14610b1f5760ff60205b16978615610b0a578a15610af2576cffffffffffffffffffffffffff6cff0000000000000000000000005b169a8015610ae4576cff000000ff000000ff000000ff989590955b6fffffffffffffffffffffffffffffffff8d169b8c151580610ac9575b156107bb57915b808b166cffffffffffffffffffffffffff1615158e8161079e575b5015610767576fffffffffffffffffffffffffffffffff80918b5f1461075e57168c1b1661071a565b168c1c1661071a565b96919b976fffffffffffffffffffffffffffffffff919d88161797895f14610796578b1c165b9b9590956106f6565b8b1b1661078d565b6fffffffffffffffffffffffffffffffff9150821616158e610735565b99509a505093959491995096505f90855f14610ac05760ff60205b168515610aab578615610a93576cffffffffffffffffffffffffff6cff0000000000000000000000005b16918715610a7b576cffffffffffffffffffffffffff6cff000000ff000000ff000000ff5b168715610a61576fffffffffffffffffffffffffffffffff84841c165b8815610a48578915610a30576cffffffffffffffffffffffffff6c010000000000000000000000005b908a969392915b16925b6fffffffffffffffffffffffffffffffff858416166108fa57505050505050506108ca6001926fffffffffffffffffffffffffffffffff80809416818d161b161799865f146108f15760ff60085b1690610624565b9685156108e65760ff826008925b1691161c1691019294610678565b60ff826020926108d8565b60ff60206108c3565b8697875f14610a0f5786886fffffffffffffffffffffffffffffffff8080878b1616841b165b166fffffffffffffffffffffffffffffffff858a1616146109bc575b50506fffffffffffffffffffffffffffffffff8080809581808781989782988e16179f5f146109b357168c1c165b9b156109aa5716891c165b958d156109a15716871c165b928b156109985716851c165b918995929192610875565b16851b1661098d565b16871b16610981565b16891b16610975565b168c1b1661096a565b6fffffffffffffffffffffffffffffffff809581808781989c976109f28d84809b9a81809c819c5f14610a065716901b16610624565b9d509750975050509550505050868861093c565b16901c16610624565b86886fffffffffffffffffffffffffffffffff8080878b1616841c16610920565b6cffffffffffffffffffffffffff630100000061086b565b889491906cffffffffffffffffffffffffff6001610872565b6fffffffffffffffffffffffffffffffff84841b16610842565b6cffffffffffffffffffffffffff63ffffffff610825565b6cffffffffffffffffffffffffff63ff000000610800565b6cffffffffffffffffffffffffff60ff610800565b60ff60086107d6565b506fffffffffffffffffffffffffffffffff83161515610713565b63ffffffff989590956106f6565b6cffffffffffffffffffffffffff63ff0000006106db565b6cffffffffffffffffffffffffff60ff6106db565b60ff60086106b0565b63ffffffff92939193610675565b6fffffffffffffffffffffffffffffffff809260ff610b6c61025682858180610b61610256896105fe565b161b169816936105fe565b161b16921916161790565b6fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff81146102a05760010190565b92919060ff81166004811015610d8857600180610bc893161591111585610656565b926fffffffffffffffffffffffffffffffff808516911614610d88575f80806fff0000000000000000000000000000005b6fffffffffffffffffffffffffffffffff8116610cef5750506fffffffffffffffffffffffffffffffff1680158015610c33575b50505050565b5f959293949550610cc2578306927f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841684036102a057610c9f93605a606460ff9306115f14610ca9576fffffffffffffffffffffffffffffffff6002945b169060031b1c1690610b36565b905f808080610c2d565b6fffffffffffffffffffffffffffffffff600194610c92565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6fffffffffffffffffffffffffffffffff8188161615610d2e575b6effffffffffffffffffffffffffffff610d289160081c1691610b77565b90610bf9565b92610d3883610b77565b9260031b7007fffffffffffffffffffffffffffffff86ffffffffffffffffffffffffffffffff88216911681036102a0576fffffffffffffffffffffffffffffffff83811690911b161792610d0a565b7f35405e3c000000000000000000000000000000000000000000000000000000005f5260045ffdfea264697066735822122070d2381bf6b7305009885b5d725b8c1ff99d3898b0fb599b437862fde33fd38464736f6c634300081c0033", 15 | "nonce": "0x74", 16 | "chainId": "0x279f" 17 | }, 18 | "additionalContracts": [], 19 | "isFixedGasLimit": false 20 | }, 21 | { 22 | "hash": "0xb4da45a9779ecbe40764ea86e96a0a34df76a9388b1af1cf0a7338cb86c7290a", 23 | "transactionType": "CREATE", 24 | "contractName": "Monad2048", 25 | "contractAddress": "0xe0fa8195ae92b9c473c0c0c12c2d6bcbd245de47", 26 | "function": null, 27 | "arguments": null, 28 | "transaction": { 29 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 30 | "gas": "0xd16d0", 31 | "value": "0x0", 32 | "input": "0x60808060405234601557610b06908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816325c09963146107e35750806361d585da1461077657806379cbd2331461072e5780639a987475146106d3578063ac88036c14610689578063bb9df307146101eb5763e51b891f14610069575f80fd5b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576040516102006004356100ab8284610a29565b81368437805f525f60205260405f205460801c905f9173a3fd3e8866875524e08fb158a7287c642da53fa8925b60ff8116601081101561019457604051907f54c30fd90000000000000000000000000000000000000000000000000000000082528360048301526024820152602081604481885af4908115610189575f91610149575b5060ff918260019216611fe08260051b1689015201166100d8565b90506020813d8211610181575b8161016360209383610a29565b8101031261017d575160ff8116810361017d5760ff61012e565b5f80fd5b3d9150610156565b6040513d5f823e3d90fd5b8686855f525f6020526effffffffffffffffffffffffffffff60405f205460081c1660405191825f905b601082106101d25750506102209350820152f35b60208060019260ff8951168152019601910190946101be565b3461017d576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004353660a41161017d57366101041161017d578060601c330361066157805f525f60205260405f205460801c6106395760405160208101905f6024835b60048310610607575050506080815261027360a082610a29565b519020805f52600160205260405f20546105df5773a3fd3e8866875524e08fb158a7287c642da53fa86024356fffffffffffffffffffffffffffffffff81169081810361017d5750604051907f2b2f6a120000000000000000000000000000000000000000000000000000000082526004820152602081602481855af4908115610189575f916105c0575b50156105105760015b600481106104015750505f5260016020528060405f205560e43560ff81169081810361017d5750610336610a94565b60405191610343836109e0565b825260208201600481526fffffffffffffffffffffffffffffffff6040840192168252835f525f6020527fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffff0060ff60405f20955116925160081b16925160801b1691171790556103c1610a94565b6fffffffffffffffffffffffffffffffff604051911681527f3d6c02e74ba05913874ba8d477497510df840bf93bfa5a2a8d8943766678a0e360203392a3005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018181116105935761043c61043782610a82565b610ab3565b9060038110156105665760051b60a4013560ff8116810361017d5760209061046661043785610a82565b926104ef604051848101908a825287604082015260408152610489606082610a29565b51902060405195869485947f0be27a0400000000000000000000000000000000000000000000000000000000865260048601909493926fffffffffffffffffffffffffffffffff9060ff6060948360808601991685521660208401521660408201520152565b0381865af4908115610189575f91610538575b501561051057600101610307565b7f2b977ce3000000000000000000000000000000000000000000000000000000005f5260045ffd5b610559915060203d811161055f575b6105518183610a29565b810190610a6a565b85610502565b503d610547565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6105d9915060203d60201161055f576105518183610a29565b846102fe565b7f6e3ca805000000000000000000000000000000000000000000000000000000005f5260045ffd5b8135906fffffffffffffffffffffffffffffffff821680920361017d5760208160019382935201920192019190610259565b7f25434c83000000000000000000000000000000000000000000000000000000005f5260045ffd5b7faed8b1cf000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f525f602052602060405f205460801c604051908152f35b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f525f60205260206effffffffffffffffffffffffffffff60405f205460081c16604051908152f35b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f526001602052602060405f2054604051908152f35b3461017d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004355f525f602052606060405f20546040519060ff811682526effffffffffffffffffffffffffffff8160081c16602083015260801c6040820152f35b3461017d5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017d576004359060243560ff81169182820361017d576044356fffffffffffffffffffffffffffffffff81169283820361017d578560601c330361066157602090865f525f825260406108b2815f20610867876109e0565b549560ff871681526effffffffffffffffffffffffffffff8760081c16908581019782895260801c9384910152604051858101918b8352604082015260408152610489606082610a29565b038173a3fd3e8866875524e08fb158a7287c642da53fa85af4908115610189575f916109c1575b5015610510576effffffffffffffffffffffffffffff6001915116016effffffffffffffffffffffffffffff81116105935760405190610918826109e0565b8382526effffffffffffffffffffffffffffff60208301911681526040820190838252855f525f6020527fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffff0060ff60405f20955116925160081b16925160801b16911717905560405191825260208201527f14fe4197a69dbcc73d79fcfd259bd1f097640dd2c2fe016ff232c416e17ce84260403392a3005b6109da915060203d60201161055f576105518183610a29565b856108d9565b6060810190811067ffffffffffffffff8211176109fc57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109fc57604052565b9081602091031261017d5751801515810361017d5790565b60048110156105665760051b60240190565b6084356fffffffffffffffffffffffffffffffff8116810361017d5790565b356fffffffffffffffffffffffffffffffff8116810361017d579056fea2646970667358221220969a7f7c514aa734f294aa96245a7452aa46ed6a1a3ce4c0584d3af116f7bc9264736f6c634300081c0033", 33 | "nonce": "0x75", 34 | "chainId": "0x279f" 35 | }, 36 | "additionalContracts": [], 37 | "isFixedGasLimit": false 38 | } 39 | ], 40 | "receipts": [ 41 | { 42 | "status": "0x1", 43 | "cumulativeGasUsed": "0x738dea", 44 | "logs": [], 45 | "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 46 | "type": "0x2", 47 | "transactionHash": "0x7ead7b3b3c7cfac064d2445ffb4aeef5936c7b4247c66cbd1edfd878361f6c79", 48 | "transactionIndex": "0x1d", 49 | "blockHash": "0x6bd47e8728e72317d73af02f6e77e3da404f771620b34fe265f7b80cb0ec474e", 50 | "blockNumber": "0xfb8abb", 51 | "gasUsed": "0x125701", 52 | "effectiveGasPrice": "0xba43b7401", 53 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 54 | "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", 55 | "contractAddress": null 56 | }, 57 | { 58 | "status": "0x1", 59 | "cumulativeGasUsed": "0x8fe6fa", 60 | "logs": [], 61 | "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", 62 | "type": "0x2", 63 | "transactionHash": "0xb4da45a9779ecbe40764ea86e96a0a34df76a9388b1af1cf0a7338cb86c7290a", 64 | "transactionIndex": "0x1f", 65 | "blockHash": "0x6bd47e8728e72317d73af02f6e77e3da404f771620b34fe265f7b80cb0ec474e", 66 | "blockNumber": "0xfb8abb", 67 | "gasUsed": "0xd16d0", 68 | "effectiveGasPrice": "0xba43b7401", 69 | "from": "0x234828a40de63d21072d1218cfb5d208654c12bb", 70 | "to": null, 71 | "contractAddress": "0xe0fa8195ae92b9c473c0c0c12c2d6bcbd245de47" 72 | } 73 | ], 74 | "libraries": [ 75 | "src/LibBoard.sol:Board:0xa3Fd3e8866875524E08FB158A7287c642dA53fA8" 76 | ], 77 | "pending": [], 78 | "returns": { 79 | "gameContract": { 80 | "internal_type": "address", 81 | "value": "0xe0FA8195AE92b9C473c0c0c12c2D6bCbd245De47" 82 | } 83 | }, 84 | "timestamp": 1747028257, 85 | "chain": 10143, 86 | "commit": "d3c1d31" 87 | } -------------------------------------------------------------------------------- /foundry.toml: -------------------------------------------------------------------------------- 1 | [profile.default] 2 | src = "src" 3 | out = "out" 4 | libs = ["lib"] 5 | metadata = true 6 | metadata_hash = "none" # disable ipfs 7 | use_literal_content = true # use source code 8 | eth-rpc-url="https://testnet-rpc.monad.xyz" 9 | chain_id = 10143 10 | via_ir = true 11 | optimizer = true 12 | optimizer_runs = 2000000 13 | 14 | # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options 15 | -------------------------------------------------------------------------------- /script/Deploy.s.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity >=0.8.28 <0.9.0; 3 | 4 | // Base 5 | import {Script} from "lib/forge-std/src/Script.sol"; 6 | import {StdUtils} from "lib/forge-std/src/StdUtils.sol"; 7 | 8 | // Targets 9 | import {Monad2048} from "src/Monad2048.sol"; 10 | 11 | contract Deploy is StdUtils, Script { 12 | uint256 internal deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); 13 | 14 | function run() public returns (address gameContract) { 15 | address deployer = vm.addr(deployerPrivateKey); 16 | 17 | vm.startBroadcast(deployer); 18 | gameContract = address(new Monad2048()); 19 | vm.stopBroadcast(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/LibBoard.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.28; 3 | 4 | import {console} from "lib/forge-std/src/Test.sol"; 5 | 6 | library Board { 7 | // =============================================================// 8 | // ERRORS // 9 | // =============================================================// 10 | 11 | error MoveInvalid(); 12 | 13 | // =============================================================// 14 | // CONSTANTS // 15 | // =============================================================// 16 | 17 | uint8 public constant UP = 0; 18 | uint8 public constant DOWN = 1; 19 | uint8 public constant LEFT = 2; 20 | uint8 public constant RIGHT = 3; 21 | 22 | // =============================================================// 23 | // START // 24 | // =============================================================// 25 | 26 | function getStartPosition(bytes32 seed) public pure returns (uint128 position) { 27 | // Generate pseudo-random seed and get first tile to populate. 28 | uint256 rseed = uint256(keccak256(abi.encodePacked(seed))); 29 | uint8 pos1 = uint8(rseed % 16); 30 | rseed >>= 16; 31 | 32 | // Get second tile to populate. 33 | uint8 pos2 = uint8(rseed % 15); 34 | if (pos2 >= pos1) { 35 | pos2++; 36 | } 37 | 38 | position = setTile(setTile(position, pos2, (rseed % 100) > 90 ? 2 : 1), pos1, (rseed % 100) > 90 ? 2 : 1); 39 | } 40 | 41 | // =============================================================// 42 | // VALIDATIONS // 43 | // =============================================================// 44 | 45 | function validateStartPosition(uint128 board) public pure returns (bool) { 46 | uint128 mask = 0x03030303030303030303030303030303; 47 | 48 | // any bit except last two bits in a slot cannot be active 49 | // also, both of the last two cannot be active at the same time 50 | if (board & ~mask != 0 || board & (board >> 1) != 0) { 51 | return false; 52 | } 53 | 54 | uint256 count; 55 | while (board != 0) { 56 | // eliminate last active bit 57 | board &= board - 1; 58 | count++; 59 | } 60 | 61 | return count == 2; 62 | } 63 | 64 | function validateTransformation(uint128 prevBoard, uint8 move, uint128 nextBoard, uint256 seed) 65 | public 66 | pure 67 | returns (bool) 68 | { 69 | return processMove(prevBoard, move, seed) == nextBoard; 70 | } 71 | 72 | // =============================================================// 73 | // TRANSFORMATIONS // 74 | // =============================================================// 75 | 76 | function processMove(uint128 board, uint8 move, uint256 seed) public pure returns (uint128 result) { 77 | // Check: the move is valid. 78 | require(move < 4, MoveInvalid()); 79 | 80 | // Perform transformation on board to get resultant 81 | result = processMove(board, move <= DOWN, move % 2 == 0); 82 | 83 | // Check: the move is playable. 84 | require(board != result, MoveInvalid()); 85 | 86 | uint128 slotMask = 0xFF000000000000000000000000000000; 87 | 88 | uint128 emptyIndices; 89 | uint128 emptySlots; 90 | uint128 index; 91 | 92 | while (slotMask != 0) { 93 | if (result & slotMask == 0) { 94 | emptyIndices |= index << (8 * emptySlots++); 95 | } 96 | slotMask >>= 8; 97 | index++; 98 | } 99 | 100 | if (emptySlots > 0) { 101 | // Set a 2 (90% probability) or a 4 (10% probability) on the randomly chosen tile. 102 | uint8 tile = uint8((emptyIndices >> (8 * (seed % emptySlots))) & 0xFF); 103 | result = setTile(result, tile, (seed % 100) > 90 ? 2 : 1); 104 | } 105 | } 106 | 107 | function processMove(uint128 board, bool isVertical, bool isLeft) public pure returns (uint128 result) { 108 | uint128 shift = 0; 109 | uint128 extractMask = isVertical ? 0x000000FF000000FF000000FF000000FF : 0xFFFFFFFF; 110 | for (uint256 i = 0; i < 4; i++) { 111 | uint128 compressed = compress(extractMask & board, isVertical, isLeft); 112 | uint128 merged = merge(compressed, isVertical, isLeft); 113 | 114 | result |= (merged << shift); 115 | shift += isVertical ? 8 : 32; 116 | 117 | board >>= isVertical ? 8 : 32; 118 | } 119 | } 120 | 121 | function compress(uint128 data, bool isVertical, bool isLeft) internal pure returns (uint128 compressed) { 122 | uint128 shift = isVertical ? 32 : 8; 123 | uint128 mask = isLeft ? (isVertical ? 0x000000FF000000000000000000000000 : 0xFF000000) : 0xFF; 124 | uint128 reminderMask = isVertical ? 0x000000FF000000FF000000FF000000FF : 0xFFFFFFFF; 125 | while (mask != 0 && data != 0) { 126 | while (data & reminderMask > 0 && data & mask == 0) { 127 | data = isLeft ? data << shift : data >> shift; 128 | } 129 | compressed |= data & mask; 130 | mask = isLeft ? mask >> shift : mask << shift; 131 | } 132 | } 133 | 134 | function merge(uint128 compressed, bool isVertical, bool isLeft) internal pure returns (uint128 merged) { 135 | uint128 shift = isVertical ? 32 : 8; 136 | 137 | uint128 mask = isLeft ? (isVertical ? 0x000000FF000000000000000000000000 : 0xFF000000) : 0xFF; 138 | uint128 reminderMask = isVertical ? 0x000000FF000000FF000000FF000000FF : 0xFFFFFFFF; 139 | uint128 frontMask = isLeft ? mask >> shift : mask << shift; 140 | uint128 addition = isLeft ? (isVertical ? 0x00000001000000000000000000000000 : 0x01000000) : 0x01; 141 | 142 | while (reminderMask & compressed != 0) { 143 | uint128 front = isLeft ? (compressed & frontMask) << shift : (compressed & frontMask) >> shift; 144 | if (compressed & mask == front) { 145 | compressed = isLeft ? compressed << shift : compressed >> shift; 146 | compressed += addition; 147 | } 148 | merged |= (compressed & mask); 149 | 150 | mask = isLeft ? mask >> shift : mask << shift; 151 | frontMask = isLeft ? frontMask >> shift : frontMask << shift; 152 | addition = isLeft ? addition >> shift : addition << shift; 153 | reminderMask = isLeft ? reminderMask >> shift : reminderMask << shift; 154 | } 155 | } 156 | 157 | function getTile(uint128 board, uint8 pos) public pure returns (uint8) { 158 | return uint8((board >> ((15 - pos) * 8)) & 0xFF); 159 | } 160 | 161 | function setTile(uint128 board, uint8 pos, uint8 value) public pure returns (uint128) { 162 | uint128 mask = uint128(0xFF) << ((15 - pos) * 8); 163 | uint128 tile = uint128(value) << ((15 - pos) * 8); 164 | return (board & ~mask) | tile; 165 | } 166 | } 167 | -------------------------------------------------------------------------------- /src/Monad2048.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.28; 3 | 4 | import {Board} from "src/LibBoard.sol"; 5 | 6 | struct GameState { 7 | uint8 move; 8 | uint120 nextMove; 9 | uint128 board; 10 | } 11 | 12 | /** 13 | * @title Monad 2048 14 | * @author Monad Foundation (github.com/monad-developers) 15 | * @notice Play 2048 onchain! Also read: https://blog.monad.xyz 16 | */ 17 | contract Monad2048 { 18 | // =============================================================// 19 | // ERRORS // 20 | // =============================================================// 21 | 22 | /// @dev Emitted when starting a game with a used ID. 23 | error GameIdUsed(); 24 | /// @dev Emitted when starting a game that has already been played. 25 | error GamePlayed(); 26 | /// @dev Emitted when submitting an invalid game board. 27 | error GameBoardInvalid(); 28 | /// @dev Emitted when someone other than a game's player makes a move. 29 | error GamePlayerInvalid(); 30 | 31 | // =============================================================// 32 | // EVENT // 33 | // =============================================================// 34 | 35 | /// @dev Emitted when a game is started. 36 | event NewGame(address indexed player, bytes32 indexed id, uint256 board); 37 | /// @dev Emitted when a new valid move is played. 38 | event NewMove(address indexed player, bytes32 indexed id, uint256 move, uint256 result); 39 | 40 | // =============================================================// 41 | // STORAGE // 42 | // =============================================================// 43 | 44 | /// @notice Mapping from game ID to the latest board state. 45 | mapping(bytes32 gameId => GameState state) public state; 46 | /// @notice Mapping from a hash of start position plus first 3 moves to game ID. 47 | mapping(bytes32 gameHash => bytes32 gameId) public gameHashOf; 48 | 49 | // =============================================================// 50 | // MODIFIERS // 51 | // =============================================================// 52 | 53 | modifier correctGameId(address player, bytes32 gameId) { 54 | require(player == address(uint160(uint256(gameId) >> 96)), GamePlayerInvalid()); 55 | _; 56 | } 57 | 58 | // =============================================================// 59 | // VIEW // 60 | // =============================================================// 61 | 62 | function nextMove(bytes32 gameId) public view returns (uint120) { 63 | return state[gameId].nextMove; 64 | } 65 | 66 | function latestBoard(bytes32 gameId) public view returns (uint128) { 67 | return state[gameId].board; 68 | } 69 | 70 | /** 71 | * @notice Returns the latest board position of a game. 72 | * @dev Each array position stores the log_2 of that tile's value. 73 | * @param gameId The unique ID of a game. 74 | */ 75 | function getBoard(bytes32 gameId) external view returns (uint8[16] memory boardArr, uint256 nextMoveNumber) { 76 | uint128 b = latestBoard(gameId); 77 | for (uint8 i = 0; i < 16; i++) { 78 | boardArr[i] = Board.getTile(b, i); 79 | } 80 | nextMoveNumber = nextMove(gameId); 81 | } 82 | 83 | // =============================================================// 84 | // EXTERNAL // 85 | // =============================================================// 86 | 87 | /** 88 | * @notice Starts a new game for a player. 89 | * 90 | * @param gameId The unique ID of the game. 91 | * @param boards An ordered series of a start board and the result boards 92 | * of the first three moves. 93 | */ 94 | function startGame(bytes32 gameId, uint128[4] calldata boards, uint8[3] calldata moves) 95 | external 96 | correctGameId(msg.sender, gameId) 97 | { 98 | require(state[gameId].board == 0, GameIdUsed()); 99 | 100 | // Check: this exact sequence of boards has not been played. 101 | bytes32 hashedBoards = keccak256(abi.encodePacked(boards)); 102 | require(gameHashOf[hashedBoards] == bytes32(0), GamePlayed()); 103 | 104 | // Check: game has a valid start board. 105 | require(Board.validateStartPosition(boards[0]), GameBoardInvalid()); 106 | 107 | // Check: game has valid board transformations. 108 | for (uint256 i = 1; i < 4; i++) { 109 | require( 110 | Board.validateTransformation( 111 | boards[i - 1], moves[i - 1], boards[i], uint256(keccak256(abi.encodePacked(gameId, i))) 112 | ), 113 | GameBoardInvalid() 114 | ); 115 | } 116 | 117 | // Mark the game-start as played. 118 | gameHashOf[hashedBoards] = gameId; 119 | 120 | state[gameId] = GameState({move: moves[2], nextMove: uint120(4), board: boards[3]}); 121 | 122 | emit NewGame(msg.sender, gameId, boards[3]); 123 | } 124 | 125 | /** 126 | * @notice Makes a new move in a game. 127 | * @param gameId The unique ID of the game. 128 | * @param resultBoard The result of applying a move on the latest board. 129 | */ 130 | function play(bytes32 gameId, uint8 move, uint128 resultBoard) external correctGameId(msg.sender, gameId) { 131 | GameState memory latestState = state[gameId]; 132 | 133 | // Check: playing a valid move. 134 | require( 135 | Board.validateTransformation( 136 | latestState.board, 137 | move, 138 | resultBoard, 139 | uint256(keccak256(abi.encodePacked(gameId, uint256(latestState.nextMove)))) 140 | ), 141 | GameBoardInvalid() 142 | ); 143 | 144 | // Update board. 145 | state[gameId] = GameState({move: move, nextMove: latestState.nextMove + 1, board: resultBoard}); 146 | 147 | emit NewMove(msg.sender, gameId, move, resultBoard); 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /test/LibBoardTest.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.28; 3 | 4 | import {Test} from "lib/forge-std/src/Test.sol"; 5 | import {Board} from "src/LibBoard.sol"; 6 | 7 | contract LibBoardTest is Test { 8 | // Helper function to print values for debugging. 9 | function boardBitsToArray(uint256 b) internal pure returns (uint8[16] memory boardArr) { 10 | for (uint8 i = 0; i < 16; i++) { 11 | boardArr[i] = uint8((b >> (120 - (i * 8))) & 0xFF); 12 | } 13 | } 14 | 15 | // Helper function to print values for debugging. 16 | function boardArrayToBits(uint8[16] memory b) internal pure returns (uint128 result) { 17 | for (uint8 i = 0; i < 16; i++) { 18 | result <<= 8; 19 | result |= b[i]; 20 | } 21 | } 22 | 23 | function testValidateStartBoard() public { 24 | /** 25 | * [0,0,0,0] 26 | * [0,0,0,0] 27 | * [0,2,0,0] 28 | * [0,0,2,0] 29 | */ 30 | uint8[16] memory goodBoard1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0]; 31 | 32 | /** 33 | * [0,0,4,0] 34 | * [0,0,0,0] 35 | * [0,2,0,0] 36 | * [0,0,0,0] 37 | */ 38 | uint8[16] memory goodBoard2 = [0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]; 39 | 40 | /** 41 | * [0,0,4,0] 42 | * [0,0,0,0] 43 | * [0,4,0,0] 44 | * [0,0,0,0] 45 | */ 46 | uint8[16] memory goodBoard3 = [0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0]; 47 | 48 | assertTrue(Board.validateStartPosition(boardArrayToBits(goodBoard1))); 49 | assertTrue(Board.validateStartPosition(boardArrayToBits(goodBoard2))); 50 | assertTrue(Board.validateStartPosition(boardArrayToBits(goodBoard3))); 51 | 52 | /** 53 | * [0,0,2,0] 54 | * [0,0,0,0] 55 | * [0,2,0,0] 56 | * [0,0,2,0] 57 | */ 58 | uint8[16] memory badBoard1 = [0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0]; 59 | 60 | assertEq(Board.validateStartPosition(boardArrayToBits(badBoard1)), false); 61 | 62 | /** 63 | * [0,0,0,0] 64 | * [0,0,0,0] 65 | * [0,0,0,0] 66 | * [0,0,0,0] 67 | */ 68 | uint8[16] memory badBoard2 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; 69 | 70 | assertEq(Board.validateStartPosition(boardArrayToBits(badBoard2)), false); 71 | } 72 | 73 | function testValidateTransformation() public pure { 74 | /** 75 | * [0,0,1,1] 76 | * [0,0,2,4] 77 | * [2,1,3,2] 78 | * [0,1,3,2] 79 | */ 80 | uint8[16] memory board = [0, 0, 1, 1, 0, 0, 2, 4, 2, 1, 3, 2, 0, 1, 3, 2]; 81 | 82 | /** 83 | * [0,0,0,0] 84 | * [0,0,1,1] 85 | * [0,0,2,4] 86 | * [2,2,4,3] 87 | */ 88 | uint8[16] memory expectedResultDown = [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 4, 2, 2, 4, 3]; 89 | 90 | // Populate random tile. 91 | uint256 seed = uint256(keccak256("random")); 92 | uint8[] memory emptyIndices = new uint8[](8); 93 | uint256 idx = 0; 94 | for (uint8 i = 0; i < 16; i++) { 95 | if (expectedResultDown[i] == 0) { 96 | emptyIndices[idx] = i; 97 | idx++; 98 | } 99 | } 100 | expectedResultDown[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 101 | 102 | assertTrue( 103 | Board.validateTransformation(boardArrayToBits(board), 0x01, boardArrayToBits(expectedResultDown), seed) 104 | ); 105 | } 106 | 107 | function testGameOver() public { 108 | /** 109 | * [1,2,3,4] 110 | * [2,3,4,1] 111 | * [3,4,1,2] 112 | * [4,1,2,3] 113 | */ 114 | uint8[16] memory board = [1, 2, 3, 4, 2, 3, 4, 1, 3, 4, 1, 2, 4, 1, 2, 3]; 115 | 116 | vm.expectRevert(Board.MoveInvalid.selector); 117 | Board.processMove(boardArrayToBits(board), Board.UP, uint256(keccak256("random"))); 118 | 119 | vm.expectRevert(Board.MoveInvalid.selector); 120 | Board.processMove(boardArrayToBits(board), Board.DOWN, uint256(keccak256("random"))); 121 | 122 | vm.expectRevert(Board.MoveInvalid.selector); 123 | Board.processMove(boardArrayToBits(board), Board.LEFT, uint256(keccak256("random"))); 124 | 125 | vm.expectRevert(Board.MoveInvalid.selector); 126 | Board.processMove(boardArrayToBits(board), Board.RIGHT, uint256(keccak256("random"))); 127 | } 128 | 129 | function testValidateProcessMovesUpSimple() public pure { 130 | /** 131 | * [0,0,0,0] 132 | * [0,0,2,0] 133 | * [0,0,2,0] 134 | * [0,0,0,0] 135 | */ 136 | uint8[16] memory board1 = [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0]; 137 | assertTrue(Board.validateStartPosition(boardArrayToBits(board1))); 138 | 139 | // Move: UP 140 | /** 141 | * [0,0,4,0] 142 | * [0,0,0,0] 143 | * [0,0,0,0] 144 | * [0,0,0,0] 145 | */ 146 | uint8[16] memory expectedResultUp = [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; 147 | 148 | // Populate random tile. 149 | uint256 seed = uint256(keccak256("random")); 150 | uint8[] memory emptyIndices = new uint8[](15); 151 | uint256 idx = 0; 152 | for (uint8 i = 0; i < 16; i++) { 153 | if (expectedResultUp[i] == 0) { 154 | emptyIndices[idx] = i; 155 | idx++; 156 | } 157 | } 158 | expectedResultUp[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 159 | 160 | uint128 result = Board.processMove(boardArrayToBits(board1), Board.UP, seed); 161 | assertEq(boardArrayToBits(expectedResultUp), result); 162 | } 163 | 164 | function testValidateProcessMovesUpComplexMerges() public pure { 165 | /** 166 | * [2,4,1,0] 167 | * [3,2,0,0] 168 | * [1,2,1,0] 169 | * [0,0,0,0] 170 | */ 171 | uint8[16] memory board1 = [2, 4, 1, 0, 3, 2, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0]; 172 | 173 | // Move: UP 174 | /** 175 | * [2,4,2,0] 176 | * [3,3,0,0] 177 | * [1,0,0,0] 178 | * [0,0,0,0] 179 | */ 180 | uint8[16] memory expectedResultUp = [2, 4, 2, 0, 3, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]; 181 | 182 | // Populate random tile. 183 | uint256 seed = uint256(keccak256("random")); 184 | uint8[] memory emptyIndices = new uint8[](10); 185 | uint256 idx = 0; 186 | for (uint8 i = 0; i < 16; i++) { 187 | if (expectedResultUp[i] == 0) { 188 | emptyIndices[idx] = i; 189 | idx++; 190 | } 191 | } 192 | expectedResultUp[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 193 | 194 | uint256 result = Board.processMove(boardArrayToBits(board1), Board.UP, seed); 195 | assertEq(boardArrayToBits(expectedResultUp), result); 196 | } 197 | 198 | function testValidateProcessMovesUpComplexNoMerges() public pure { 199 | /** 200 | * [0,0,0,0] 201 | * [0,0,1,4] 202 | * [0,0,3,2] 203 | * [0,1,2,1] 204 | */ 205 | uint8[16] memory board1 = [0, 0, 0, 0, 0, 0, 1, 4, 0, 0, 3, 2, 0, 1, 2, 1]; 206 | 207 | // Move: UP 208 | /** 209 | * [0,1,1,4] 210 | * [0,0,3,2] 211 | * [0,0,2,1] 212 | * [0,0,0,0] 213 | */ 214 | uint8[16] memory expectedResultUp = [0, 1, 1, 4, 0, 0, 3, 2, 0, 0, 2, 1, 0, 0, 0, 0]; 215 | 216 | // Populate random tile. 217 | uint256 seed = uint256(keccak256("random")); 218 | uint8[] memory emptyIndices = new uint8[](9); 219 | uint256 idx = 0; 220 | for (uint8 i = 0; i < 16; i++) { 221 | if (expectedResultUp[i] == 0) { 222 | emptyIndices[idx] = i; 223 | idx++; 224 | } 225 | } 226 | expectedResultUp[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 227 | 228 | uint256 result = Board.processMove(boardArrayToBits(board1), Board.UP, seed); 229 | assertEq(boardArrayToBits(expectedResultUp), result); 230 | } 231 | 232 | function testValidateProcessMovesDownSimple() public pure { 233 | /** 234 | * [0,0,0,0] 235 | * [2,0,0,0] 236 | * [0,0,2,0] 237 | * [0,0,0,0] 238 | */ 239 | uint8[16] memory board1 = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]; 240 | assertTrue(Board.validateStartPosition(boardArrayToBits(board1))); 241 | 242 | // Move: DOWN 243 | /** 244 | * [0,0,0,0] 245 | * [0,0,0,0] 246 | * [0,0,0,0] 247 | * [2,0,2,0] 248 | */ 249 | uint8[16] memory expectedResultDown = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0]; 250 | 251 | // Populate random tile. 252 | uint256 seed = uint256(keccak256("random")); 253 | uint8[] memory emptyIndices = new uint8[](14); 254 | uint256 idx = 0; 255 | for (uint8 i = 0; i < 16; i++) { 256 | if (expectedResultDown[i] == 0) { 257 | emptyIndices[idx] = i; 258 | idx++; 259 | } 260 | } 261 | expectedResultDown[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 262 | 263 | uint256 result = Board.processMove(boardArrayToBits(board1), Board.DOWN, seed); 264 | assertEq(boardArrayToBits(expectedResultDown), result); 265 | } 266 | 267 | function testValidateProcessMovesDownComplexNoMerges() public pure { 268 | /** 269 | * [1,1,3,1] 270 | * [0,2,0,2] 271 | * [0,0,0,1] 272 | * [0,0,0,0] 273 | */ 274 | uint8[16] memory board1 = [1, 1, 3, 1, 0, 2, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0]; 275 | 276 | // Move: DOWN 277 | /** 278 | * [0,0,0,0] 279 | * [0,0,0,1] 280 | * [0,1,0,2] 281 | * [1,2,3,1] 282 | */ 283 | uint8[16] memory expectedResultDown = [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 1, 2, 3, 1]; 284 | 285 | // Populate random tile. 286 | uint256 seed = uint256(keccak256("random")); 287 | uint8[] memory emptyIndices = new uint8[](9); 288 | uint256 idx = 0; 289 | for (uint8 i = 0; i < 16; i++) { 290 | if (expectedResultDown[i] == 0) { 291 | emptyIndices[idx] = i; 292 | idx++; 293 | } 294 | } 295 | expectedResultDown[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 296 | 297 | uint256 result = Board.processMove(boardArrayToBits(board1), Board.DOWN, seed); 298 | assertEq(boardArrayToBits(expectedResultDown), result); 299 | } 300 | 301 | function testValidateProcessMovesDownComplexMerges() public pure { 302 | /** 303 | * [0,0,1,1] 304 | * [0,0,2,4] 305 | * [2,1,3,2] 306 | * [0,1,3,2] 307 | */ 308 | uint8[16] memory board1 = [0, 0, 1, 1, 0, 0, 2, 4, 2, 1, 3, 2, 0, 1, 3, 2]; 309 | 310 | // Move: DOWN 311 | /** 312 | * [0,0,0,0] 313 | * [0,0,1,1] 314 | * [0,0,2,4] 315 | * [2,2,4,3] 316 | */ 317 | uint8[16] memory expectedResultDown = [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 2, 4, 2, 2, 4, 3]; 318 | 319 | // Populate random tile. 320 | uint256 seed = uint256(keccak256("random")); 321 | uint8[] memory emptyIndices = new uint8[](8); 322 | uint256 idx = 0; 323 | for (uint8 i = 0; i < 16; i++) { 324 | if (expectedResultDown[i] == 0) { 325 | emptyIndices[idx] = i; 326 | idx++; 327 | } 328 | } 329 | expectedResultDown[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 330 | 331 | uint256 result = Board.processMove(boardArrayToBits(board1), Board.DOWN, seed); 332 | assertEq(boardArrayToBits(expectedResultDown), result); 333 | } 334 | 335 | function testValidateProcessMovesRightSimple() public pure { 336 | /** 337 | * [0,0,0,0] 338 | * [2,0,0,0] 339 | * [0,0,2,0] 340 | * [0,0,0,0] 341 | */ 342 | uint8[16] memory board1 = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]; 343 | assertTrue(Board.validateStartPosition(boardArrayToBits(board1))); 344 | 345 | // Move: DOWN 346 | /** 347 | * [0,0,0,0] 348 | * [0,0,0,2] 349 | * [0,0,0,2] 350 | * [0,0,0,0] 351 | */ 352 | uint8[16] memory expectedResultRight = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0]; 353 | 354 | // Populate random tile. 355 | uint256 seed = uint256(keccak256("random")); 356 | uint8[] memory emptyIndices = new uint8[](14); 357 | uint256 idx = 0; 358 | for (uint8 i = 0; i < 16; i++) { 359 | if (expectedResultRight[i] == 0) { 360 | emptyIndices[idx] = i; 361 | idx++; 362 | } 363 | } 364 | expectedResultRight[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 365 | 366 | uint256 result = Board.processMove(boardArrayToBits(board1), Board.RIGHT, seed); 367 | assertEq(boardArrayToBits(expectedResultRight), result); 368 | } 369 | 370 | function testValidateProcessMovesRightComplexNoMerges() public pure { 371 | /** 372 | * [1,2,0,1] 373 | * [0,1,0,2] 374 | * [0,0,0,1] 375 | * [0,3,0,0] 376 | */ 377 | uint8[16] memory board1 = [1, 2, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 3, 0, 0]; 378 | 379 | /** 380 | * [0,1,2,1] 381 | * [0,0,1,2] 382 | * [0,0,0,1] 383 | * [0,0,0,3] 384 | */ 385 | uint8[16] memory expectedResultRight = [0, 1, 2, 1, 0, 0, 1, 2, 0, 0, 0, 1, 0, 0, 0, 3]; 386 | 387 | // Populate random tile. 388 | uint256 seed = uint256(keccak256("random")); 389 | uint8[] memory emptyIndices = new uint8[](9); 390 | uint256 idx = 0; 391 | for (uint8 i = 0; i < 16; i++) { 392 | if (expectedResultRight[i] == 0) { 393 | emptyIndices[idx] = i; 394 | idx++; 395 | } 396 | } 397 | expectedResultRight[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 398 | 399 | uint256 result = Board.processMove(boardArrayToBits(board1), Board.RIGHT, seed); 400 | assertEq(boardArrayToBits(expectedResultRight), result); 401 | } 402 | 403 | function testValidateProcessMovesRightComplexMerges() public pure { 404 | /** 405 | * [1,1,3,1] 406 | * [0,2,0,2] 407 | * [0,0,0,1] 408 | * [0,0,0,0] 409 | */ 410 | uint8[16] memory board1 = [1, 1, 3, 1, 0, 2, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0]; 411 | 412 | /** 413 | * [0,2,3,1] 414 | * [0,0,0,3] 415 | * [0,0,0,1] 416 | * [0,0,0,0] 417 | */ 418 | uint8[16] memory expectedResultRight = [0, 2, 3, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0]; 419 | 420 | // Populate random tile. 421 | uint256 seed = uint256(keccak256("random")); 422 | uint8[] memory emptyIndices = new uint8[](11); 423 | uint256 idx = 0; 424 | for (uint8 i = 0; i < 16; i++) { 425 | if (expectedResultRight[i] == 0) { 426 | emptyIndices[idx] = i; 427 | idx++; 428 | } 429 | } 430 | expectedResultRight[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 431 | 432 | uint256 result = Board.processMove(boardArrayToBits(board1), Board.RIGHT, seed); 433 | assertEq(boardArrayToBits(expectedResultRight), result); 434 | } 435 | 436 | function testValidateProcessMovesLeftSimple() public pure { 437 | /** 438 | * [0,0,0,0] 439 | * [2,0,0,0] 440 | * [0,0,2,0] 441 | * [0,0,0,0] 442 | */ 443 | uint8[16] memory board1 = [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]; 444 | assertTrue(Board.validateStartPosition(boardArrayToBits(board1))); 445 | 446 | // Move: DOWN 447 | /** 448 | * [0,0,0,0] 449 | * [2,0,0,0] 450 | * [2,0,0,0] 451 | * [0,0,0,0] 452 | */ 453 | uint8[16] memory expectedResultLeft = [0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]; 454 | 455 | // Populate random tile. 456 | uint256 seed = uint256(keccak256("random")); 457 | uint8[] memory emptyIndices = new uint8[](14); 458 | uint256 idx = 0; 459 | for (uint8 i = 0; i < 16; i++) { 460 | if (expectedResultLeft[i] == 0) { 461 | emptyIndices[idx] = i; 462 | idx++; 463 | } 464 | } 465 | expectedResultLeft[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 466 | 467 | uint256 result = Board.processMove(boardArrayToBits(board1), Board.LEFT, seed); 468 | assertEq(boardArrayToBits(expectedResultLeft), result); 469 | } 470 | 471 | function testValidateProcessMovesLeftComplexNoMerges() public pure { 472 | /** 473 | * [1,2,0,1] 474 | * [0,1,0,2] 475 | * [0,0,0,1] 476 | * [0,3,0,0] 477 | */ 478 | uint8[16] memory board1 = [1, 2, 0, 1, 0, 1, 0, 2, 0, 0, 0, 1, 0, 3, 0, 0]; 479 | 480 | /** 481 | * [1,2,1,0] 482 | * [1,2,0,0] 483 | * [1,0,0,0] 484 | * [3,0,0,0] 485 | */ 486 | uint8[16] memory expectedResultLeft = [1, 2, 1, 0, 1, 2, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0]; 487 | 488 | // Populate random tile. 489 | uint256 seed = uint256(keccak256("random")); 490 | uint8[] memory emptyIndices = new uint8[](9); 491 | uint256 idx = 0; 492 | for (uint8 i = 0; i < 16; i++) { 493 | if (expectedResultLeft[i] == 0) { 494 | emptyIndices[idx] = i; 495 | idx++; 496 | } 497 | } 498 | expectedResultLeft[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 499 | 500 | uint256 result = Board.processMove(boardArrayToBits(board1), Board.LEFT, seed); 501 | assertEq(boardArrayToBits(expectedResultLeft), result); 502 | } 503 | 504 | function testValidateProcessMovesLeftComplexMerges() public pure { 505 | /** 506 | * [1,1,3,1] 507 | * [0,2,0,2] 508 | * [0,0,0,1] 509 | * [0,0,0,0] 510 | */ 511 | uint8[16] memory board1 = [1, 1, 3, 1, 0, 2, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0]; 512 | 513 | /** 514 | * [2,3,1,0] 515 | * [3,0,0,0] 516 | * [1,0,0,0] 517 | * [0,0,0,0] 518 | */ 519 | uint8[16] memory expectedResultLeft = [2, 3, 1, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]; 520 | 521 | // Populate random tile. 522 | uint256 seed = uint256(keccak256("random")); 523 | uint8[] memory emptyIndices = new uint8[](11); 524 | uint256 idx = 0; 525 | for (uint8 i = 0; i < 16; i++) { 526 | if (expectedResultLeft[i] == 0) { 527 | emptyIndices[idx] = i; 528 | idx++; 529 | } 530 | } 531 | expectedResultLeft[emptyIndices[seed % emptyIndices.length]] = (seed % 100) > 90 ? 2 : 1; 532 | 533 | uint256 result = Board.processMove(boardArrayToBits(board1), Board.LEFT, seed); 534 | assertEq(boardArrayToBits(expectedResultLeft), result); 535 | } 536 | 537 | function testCompressRow() public pure { 538 | assertEq(Board.compress(0x00010001, false, true), 0x01010000); 539 | assertEq(Board.compress(0x00020101, false, true), 0x02010100); 540 | assertEq(Board.compress(0x02010201, false, true), 0x02010201); 541 | assertEq(Board.compress(0x00010001, false, false), 0x00000101); 542 | assertEq(Board.compress(0x00020101, false, false), 0x00020101); 543 | assertEq(Board.compress(0x02010201, false, false), 0x02010201); 544 | assertEq(Board.compress(0, false, true), 0); 545 | assertEq(Board.compress(0, false, false), 0); 546 | } 547 | 548 | function testMergeRowTiles() public pure { 549 | assertEq(Board.merge(0x01010000, false, true), 0x02000000); 550 | assertEq(Board.merge(0x02010100, false, true), 0x02020000); 551 | assertEq(Board.merge(0x01000000, false, true), 0x01000000); 552 | assertEq(Board.merge(0x00000101, false, false), 0x00000002); 553 | assertEq(Board.merge(0x00020101, false, false), 0x00000202); 554 | assertEq(Board.merge(0x00000001, false, false), 0x00000001); 555 | assertEq(Board.merge(0, false, true), 0); 556 | assertEq(Board.merge(0, false, false), 0); 557 | } 558 | 559 | function testCompressColumn() public pure { 560 | assertEq(Board.compress(0x00000001000000000000000000000001, true, true), 0x00000001000000010000000000000000); 561 | assertEq(Board.compress(0x00000001000000000000000100000000, true, false), 0x00000000000000000000000100000001); 562 | } 563 | 564 | function testMergeColumnTiles() public pure { 565 | assertEq(Board.merge(0x00000001000000010000000000000000, true, true), 0x00000002000000000000000000000000); 566 | assertEq(Board.merge(0x00000000000000000000000100000001, true, false), 0x00000000000000000000000000000002); 567 | } 568 | 569 | //0x000000FF000000FF000000FF000000FF 570 | } 571 | -------------------------------------------------------------------------------- /test/Monad2048Test.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.28; 3 | 4 | import {Test, console} from "lib/forge-std/src/Test.sol"; 5 | import {Monad2048} from "src/Monad2048.sol"; 6 | import {Board} from "src/LibBoard.sol"; 7 | 8 | contract Monad2048Test is Test { 9 | // Target game contract. 10 | Monad2048 internal game; 11 | 12 | // Game player 13 | address player; 14 | 15 | function setUp() public { 16 | // Setup actors. 17 | player = makeAddr("Player"); 18 | 19 | // Deploy game. 20 | game = new Monad2048(); 21 | } 22 | 23 | function testShowcase() public { 24 | // Come up with a game ID. 25 | bytes32 gameId = 26 | bytes32((uint256(uint160(player)) << 96) + (uint256(keccak256(abi.encodePacked(player, "random"))) >> 160)); 27 | 28 | uint8[3] memory moves = [Board.UP, Board.DOWN, Board.RIGHT]; 29 | uint128[4] memory boards; 30 | 31 | // The new tile on every move uses the seed `uint256(keccak256(abi.encodePacked(gameId, moveNumber)))` where moveNumber starts at `1`. 32 | boards[0] = Board.getStartPosition(bytes32("random")); 33 | boards[1] = Board.processMove(boards[0], moves[0], uint256(keccak256(abi.encodePacked(gameId, uint256(1))))); 34 | boards[2] = Board.processMove(boards[1], moves[1], uint256(keccak256(abi.encodePacked(gameId, uint256(2))))); 35 | boards[3] = Board.processMove(boards[2], moves[2], uint256(keccak256(abi.encodePacked(gameId, uint256(3))))); 36 | 37 | bytes32 gameHash = keccak256(abi.encodePacked(boards)); 38 | 39 | assertEq(game.gameHashOf(gameHash), bytes32(0)); 40 | 41 | // Start game by revealing commited boards. 42 | vm.prank(player); 43 | game.startGame(gameId, boards, moves); 44 | 45 | assertEq(game.gameHashOf(gameHash), gameId); 46 | 47 | assertEq(game.latestBoard(gameId), boards[3]); 48 | 49 | // Play move. 50 | uint128 board4 = 51 | Board.processMove(boards[3], Board.LEFT, uint256(keccak256(abi.encodePacked(gameId, uint256(4))))); 52 | 53 | // Submit move for validation. 54 | vm.prank(player); 55 | game.play(gameId, Board.LEFT, board4); 56 | 57 | assertEq(game.latestBoard(gameId), board4); 58 | } 59 | 60 | function testLongerGame() public { 61 | // Come up with a game ID. 62 | bytes32 gameId = 63 | bytes32((uint256(uint160(player)) << 96) + (uint256(keccak256(abi.encodePacked(player, "random"))) >> 160)); 64 | 65 | uint8[3] memory moves = [Board.UP, Board.DOWN, Board.RIGHT]; 66 | uint128[4] memory boards; 67 | 68 | // The new tile on every move uses the seed `uint256(keccak256(abi.encodePacked(gameId, moveNumber)))` where moveNumber starts at `1`. 69 | boards[0] = Board.getStartPosition(bytes32("random")); 70 | boards[1] = Board.processMove(boards[0], moves[0], uint256(keccak256(abi.encodePacked(gameId, uint256(1))))); 71 | boards[2] = Board.processMove(boards[1], moves[1], uint256(keccak256(abi.encodePacked(gameId, uint256(2))))); 72 | boards[3] = Board.processMove(boards[2], moves[2], uint256(keccak256(abi.encodePacked(gameId, uint256(3))))); 73 | 74 | bytes32 gameHash = keccak256(abi.encodePacked(boards)); 75 | assertEq(game.gameHashOf(gameHash), bytes32(0)); 76 | 77 | // Start game by revealing committed boards. 78 | vm.prank(player); 79 | game.startGame(gameId, boards, moves); 80 | 81 | uint128 boardState = boards[3]; 82 | uint256 movesTotal = 4; 83 | uint8[4] memory playMoves = [Board.DOWN, Board.LEFT, Board.UP, Board.RIGHT]; 84 | bool gameOver; 85 | while (!gameOver) { 86 | assertEq(game.latestBoard(gameId), boardState); 87 | 88 | uint256 i = 0; 89 | 90 | // find move 91 | while ( 92 | i < 4 && boardState == Board.processMove(boardState, playMoves[i] <= Board.DOWN, playMoves[i] % 2 == 0) 93 | ) { 94 | i++; 95 | } 96 | 97 | if (i < 4) { 98 | boardState = Board.processMove( 99 | boardState, playMoves[i], uint256(keccak256(abi.encodePacked(gameId, movesTotal++))) 100 | ); 101 | vm.prank(player); 102 | game.play(gameId, playMoves[i], boardState); 103 | } else { 104 | gameOver = true; 105 | } 106 | } 107 | } 108 | } 109 | --------------------------------------------------------------------------------