SHOOK / OFFICIAL PROTOCOLDocumentation
MAINNET EDITIONOpen SHOOK

ShookTicTacToe

Complete compiled interface, including inherited methods.

Solidity 0.8.36+commit.8a079791 · Download ABI ↓ ·

Constructor 1

nonpayableconstructor(address, address, address, uint64, uint64, uint256, uint256)
{
  "type": "constructor",
  "inputs": [
    {
      "name": "shook_",
      "type": "address",
      "internalType": "contract IERC20"
    },
    {
      "name": "coordinator_",
      "type": "address",
      "internalType": "contract ShookRandomnessCoordinator"
    },
    {
      "name": "feeRouter_",
      "type": "address",
      "internalType": "contract IShookGameFeeRouter"
    },
    {
      "name": "lobbyDuration_",
      "type": "uint64",
      "internalType": "uint64"
    },
    {
      "name": "randomnessSafetyDelay_",
      "type": "uint64",
      "internalType": "uint64"
    },
    {
      "name": "minimumWager_",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "maximumWager_",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "stateMutability": "nonpayable"
}

Functions 44

viewapplyMove((uint256,uint32,uint32,uint8,address,uint8,bytes32), uint8)
{
  "type": "function",
  "name": "applyMove",
  "inputs": [
    {
      "name": "previous",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    },
    {
      "name": "cell",
      "type": "uint8",
      "internalType": "uint8"
    }
  ],
  "outputs": [
    {
      "name": "nextState",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    }
  ],
  "stateMutability": "view"
}
viewBPS()
{
  "type": "function",
  "name": "BPS",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "stateMutability": "view"
}
nonpayablecancelUnjoinedGame(uint256)
{
  "type": "function",
  "name": "cancelUnjoinedGame",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
nonpayablecancelUnstartedGame(uint256)
{
  "type": "function",
  "name": "cancelUnstartedGame",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
purecellAt(uint32, uint8)
{
  "type": "function",
  "name": "cellAt",
  "inputs": [
    {
      "name": "board",
      "type": "uint32",
      "internalType": "uint32"
    },
    {
      "name": "cell",
      "type": "uint8",
      "internalType": "uint8"
    }
  ],
  "outputs": [
    {
      "name": "",
      "type": "uint8",
      "internalType": "uint8"
    }
  ],
  "stateMutability": "pure"
}
nonpayablechallengeSettlement(uint256, (uint256,uint32,uint32,uint8,address,uint8,bytes32), bytes, bytes)
{
  "type": "function",
  "name": "challengeSettlement",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "terminal",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    },
    {
      "name": "signatureA",
      "type": "bytes",
      "internalType": "bytes"
    },
    {
      "name": "signatureB",
      "type": "bytes",
      "internalType": "bytes"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
nonpayableclaimRefund(uint256, address)
{
  "type": "function",
  "name": "claimRefund",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "receiver",
      "type": "address",
      "internalType": "address"
    }
  ],
  "outputs": [
    {
      "name": "amount",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "stateMutability": "nonpayable"
}
nonpayableclaimTimeout(uint256)
{
  "type": "function",
  "name": "claimTimeout",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
nonpayableclaimWinnings(uint256, address)
{
  "type": "function",
  "name": "claimWinnings",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "receiver",
      "type": "address",
      "internalType": "address"
    }
  ],
  "outputs": [
    {
      "name": "amount",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "stateMutability": "nonpayable"
}
viewcoordinator()
{
  "type": "function",
  "name": "coordinator",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "address",
      "internalType": "contract ShookRandomnessCoordinator"
    }
  ],
  "stateMutability": "view"
}
nonpayablecreateGame(bytes32, address, uint256)
{
  "type": "function",
  "name": "createGame",
  "inputs": [
    {
      "name": "name",
      "type": "bytes32",
      "internalType": "bytes32"
    },
    {
      "name": "sessionSigner",
      "type": "address",
      "internalType": "address"
    },
    {
      "name": "wager",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "stateMutability": "nonpayable"
}
viewdisputeStates(uint256)
{
  "type": "function",
  "name": "disputeStates",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "sequence",
      "type": "uint32",
      "internalType": "uint32"
    },
    {
      "name": "board",
      "type": "uint32",
      "internalType": "uint32"
    },
    {
      "name": "lastCell",
      "type": "uint8",
      "internalType": "uint8"
    },
    {
      "name": "nextPlayer",
      "type": "address",
      "internalType": "address"
    },
    {
      "name": "outcome",
      "type": "uint8",
      "internalType": "enum ShookTurnBasedGame.Outcome"
    },
    {
      "name": "parentHash",
      "type": "bytes32",
      "internalType": "bytes32"
    }
  ],
  "stateMutability": "view"
}
vieweip712Domain()
{
  "type": "function",
  "name": "eip712Domain",
  "inputs": [],
  "outputs": [
    {
      "name": "fields",
      "type": "bytes1",
      "internalType": "bytes1"
    },
    {
      "name": "name",
      "type": "string",
      "internalType": "string"
    },
    {
      "name": "version",
      "type": "string",
      "internalType": "string"
    },
    {
      "name": "chainId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "verifyingContract",
      "type": "address",
      "internalType": "address"
    },
    {
      "name": "salt",
      "type": "bytes32",
      "internalType": "bytes32"
    },
    {
      "name": "extensions",
      "type": "uint256[]",
      "internalType": "uint256[]"
    }
  ],
  "stateMutability": "view"
}
viewfeeRouter()
{
  "type": "function",
  "name": "feeRouter",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "address",
      "internalType": "contract IShookGameFeeRouter"
    }
  ],
  "stateMutability": "view"
}
nonpayablefinalizeEquivocation(uint256)
{
  "type": "function",
  "name": "finalizeEquivocation",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
nonpayablefinalizeSettlement(uint256)
{
  "type": "function",
  "name": "finalizeSettlement",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
viewgames(uint256)
{
  "type": "function",
  "name": "games",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [
    {
      "name": "id",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "name",
      "type": "bytes32",
      "internalType": "bytes32"
    },
    {
      "name": "playerA",
      "type": "address",
      "internalType": "address"
    },
    {
      "name": "playerB",
      "type": "address",
      "internalType": "address"
    },
    {
      "name": "signerA",
      "type": "address",
      "internalType": "address"
    },
    {
      "name": "signerB",
      "type": "address",
      "internalType": "address"
    },
    {
      "name": "wager",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "joinDeadline",
      "type": "uint64",
      "internalType": "uint64"
    },
    {
      "name": "targetRound",
      "type": "uint64",
      "internalType": "uint64"
    },
    {
      "name": "startDeadline",
      "type": "uint64",
      "internalType": "uint64"
    },
    {
      "name": "responseDeadline",
      "type": "uint64",
      "internalType": "uint64"
    },
    {
      "name": "pendingSequence",
      "type": "uint32",
      "internalType": "uint32"
    },
    {
      "name": "status",
      "type": "uint8",
      "internalType": "enum ShookTurnBasedGame.Status"
    },
    {
      "name": "starter",
      "type": "address",
      "internalType": "address"
    },
    {
      "name": "winner",
      "type": "address",
      "internalType": "address"
    },
    {
      "name": "winnerPayout",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "pendingStateHash",
      "type": "bytes32",
      "internalType": "bytes32"
    },
    {
      "name": "finalOutcome",
      "type": "uint8",
      "internalType": "enum ShookTurnBasedGame.Outcome"
    },
    {
      "name": "winningsClaimed",
      "type": "bool",
      "internalType": "bool"
    }
  ],
  "stateMutability": "view"
}
viewgetDisputeState(uint256)
{
  "type": "function",
  "name": "getDisputeState",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [
    {
      "name": "",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    }
  ],
  "stateMutability": "view"
}
viewgetGame(uint256)
{
  "type": "function",
  "name": "getGame",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [
    {
      "name": "",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.Game",
      "components": [
        {
          "name": "id",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "name",
          "type": "bytes32",
          "internalType": "bytes32"
        },
        {
          "name": "playerA",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "playerB",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "signerA",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "signerB",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "wager",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "joinDeadline",
          "type": "uint64",
          "internalType": "uint64"
        },
        {
          "name": "targetRound",
          "type": "uint64",
          "internalType": "uint64"
        },
        {
          "name": "startDeadline",
          "type": "uint64",
          "internalType": "uint64"
        },
        {
          "name": "responseDeadline",
          "type": "uint64",
          "internalType": "uint64"
        },
        {
          "name": "pendingSequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "status",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Status"
        },
        {
          "name": "starter",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "winner",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "winnerPayout",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "pendingStateHash",
          "type": "bytes32",
          "internalType": "bytes32"
        },
        {
          "name": "finalOutcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "winningsClaimed",
          "type": "bool",
          "internalType": "bool"
        }
      ]
    }
  ],
  "stateMutability": "view"
}
viewhashResignation(uint256, address)
{
  "type": "function",
  "name": "hashResignation",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "player",
      "type": "address",
      "internalType": "address"
    }
  ],
  "outputs": [
    {
      "name": "",
      "type": "bytes32",
      "internalType": "bytes32"
    }
  ],
  "stateMutability": "view"
}
viewhashState((uint256,uint32,uint32,uint8,address,uint8,bytes32))
{
  "type": "function",
  "name": "hashState",
  "inputs": [
    {
      "name": "state",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    }
  ],
  "outputs": [
    {
      "name": "",
      "type": "bytes32",
      "internalType": "bytes32"
    }
  ],
  "stateMutability": "view"
}
viewinitialState(uint256)
{
  "type": "function",
  "name": "initialState",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [
    {
      "name": "state",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    }
  ],
  "stateMutability": "view"
}
nonpayablejoinGame(uint256, address)
{
  "type": "function",
  "name": "joinGame",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "sessionSigner",
      "type": "address",
      "internalType": "address"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
viewlobbyDuration()
{
  "type": "function",
  "name": "lobbyDuration",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "uint64",
      "internalType": "uint64"
    }
  ],
  "stateMutability": "view"
}
viewmaximumWager()
{
  "type": "function",
  "name": "maximumWager",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "stateMutability": "view"
}
viewminimumWager()
{
  "type": "function",
  "name": "minimumWager",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "stateMutability": "view"
}
viewnextGameId()
{
  "type": "function",
  "name": "nextGameId",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "stateMutability": "view"
}
viewONCHAIN_RESPONSE_PERIOD()
{
  "type": "function",
  "name": "ONCHAIN_RESPONSE_PERIOD",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "uint64",
      "internalType": "uint64"
    }
  ],
  "stateMutability": "view"
}
nonpayableopenDispute(uint256, (uint256,uint32,uint32,uint8,address,uint8,bytes32), bytes, bytes)
{
  "type": "function",
  "name": "openDispute",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "checkpoint",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    },
    {
      "name": "signatureA",
      "type": "bytes",
      "internalType": "bytes"
    },
    {
      "name": "signatureB",
      "type": "bytes",
      "internalType": "bytes"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
nonpayableproposeTerminalSettlement(uint256, (uint256,uint32,uint32,uint8,address,uint8,bytes32), bytes, bytes, (uint256,uint32,uint32,uint8,address,uint8,bytes32), bytes)
{
  "type": "function",
  "name": "proposeTerminalSettlement",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "checkpoint",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    },
    {
      "name": "checkpointSignatureA",
      "type": "bytes",
      "internalType": "bytes"
    },
    {
      "name": "checkpointSignatureB",
      "type": "bytes",
      "internalType": "bytes"
    },
    {
      "name": "terminal",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    },
    {
      "name": "moverSignature",
      "type": "bytes",
      "internalType": "bytes"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
nonpayableproveEquivocation(uint256, address, (uint256,uint32,uint32,uint8,address,uint8,bytes32), bytes, (uint256,uint32,uint32,uint8,address,uint8,bytes32), bytes)
{
  "type": "function",
  "name": "proveEquivocation",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "offender",
      "type": "address",
      "internalType": "address"
    },
    {
      "name": "first",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    },
    {
      "name": "firstSignature",
      "type": "bytes",
      "internalType": "bytes"
    },
    {
      "name": "second",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    },
    {
      "name": "secondSignature",
      "type": "bytes",
      "internalType": "bytes"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
viewrandomnessSafetyDelay()
{
  "type": "function",
  "name": "randomnessSafetyDelay",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "uint64",
      "internalType": "uint64"
    }
  ],
  "stateMutability": "view"
}
viewrefundClaimed(uint256, address)
{
  "type": "function",
  "name": "refundClaimed",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "player",
      "type": "address",
      "internalType": "address"
    }
  ],
  "outputs": [
    {
      "name": "claimed",
      "type": "bool",
      "internalType": "bool"
    }
  ],
  "stateMutability": "view"
}
viewRESIGN_TYPEHASH()
{
  "type": "function",
  "name": "RESIGN_TYPEHASH",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "bytes32",
      "internalType": "bytes32"
    }
  ],
  "stateMutability": "view"
}
nonpayableresign(uint256)
{
  "type": "function",
  "name": "resign",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
nonpayableresignWithSignature(uint256, address, bytes)
{
  "type": "function",
  "name": "resignWithSignature",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "player",
      "type": "address",
      "internalType": "address"
    },
    {
      "name": "signature",
      "type": "bytes",
      "internalType": "bytes"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
nonpayablesettleCooperative(uint256, (uint256,uint32,uint32,uint8,address,uint8,bytes32), bytes, bytes)
{
  "type": "function",
  "name": "settleCooperative",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "terminal",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    },
    {
      "name": "signatureA",
      "type": "bytes",
      "internalType": "bytes"
    },
    {
      "name": "signatureB",
      "type": "bytes",
      "internalType": "bytes"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
viewshook()
{
  "type": "function",
  "name": "shook",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "address",
      "internalType": "contract IERC20"
    }
  ],
  "stateMutability": "view"
}
viewSTART_RANDOMNESS_DOMAIN()
{
  "type": "function",
  "name": "START_RANDOMNESS_DOMAIN",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "bytes32",
      "internalType": "bytes32"
    }
  ],
  "stateMutability": "view"
}
nonpayablestart(uint256)
{
  "type": "function",
  "name": "start",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "outputs": [
    {
      "name": "starter",
      "type": "address",
      "internalType": "address"
    }
  ],
  "stateMutability": "nonpayable"
}
nonpayablestartWithSignature(uint256, bytes)
{
  "type": "function",
  "name": "startWithSignature",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "drandSignature",
      "type": "bytes",
      "internalType": "bytes"
    }
  ],
  "outputs": [
    {
      "name": "starter",
      "type": "address",
      "internalType": "address"
    }
  ],
  "stateMutability": "nonpayable"
}
viewSTATE_TYPEHASH()
{
  "type": "function",
  "name": "STATE_TYPEHASH",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "bytes32",
      "internalType": "bytes32"
    }
  ],
  "stateMutability": "view"
}
nonpayablesubmitDisputeMove(uint256, (uint256,uint32,uint32,uint8,address,uint8,bytes32), bytes)
{
  "type": "function",
  "name": "submitDisputeMove",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "internalType": "uint256"
    },
    {
      "name": "nextState",
      "type": "tuple",
      "internalType": "struct ShookTurnBasedGame.GameState",
      "components": [
        {
          "name": "gameId",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "sequence",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "board",
          "type": "uint32",
          "internalType": "uint32"
        },
        {
          "name": "lastCell",
          "type": "uint8",
          "internalType": "uint8"
        },
        {
          "name": "nextPlayer",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "outcome",
          "type": "uint8",
          "internalType": "enum ShookTurnBasedGame.Outcome"
        },
        {
          "name": "parentHash",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ]
    },
    {
      "name": "moverSignature",
      "type": "bytes",
      "internalType": "bytes"
    }
  ],
  "outputs": [],
  "stateMutability": "nonpayable"
}
viewTOTAL_FEE_BPS()
{
  "type": "function",
  "name": "TOTAL_FEE_BPS",
  "inputs": [],
  "outputs": [
    {
      "name": "",
      "type": "uint256",
      "internalType": "uint256"
    }
  ],
  "stateMutability": "view"
}

Events 13

eventDisputeMoveAccepted(uint256, uint32, address, bytes32, uint64)
{
  "type": "event",
  "name": "DisputeMoveAccepted",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "indexed": true,
      "internalType": "uint256"
    },
    {
      "name": "sequence",
      "type": "uint32",
      "indexed": true,
      "internalType": "uint32"
    },
    {
      "name": "mover",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "stateHash",
      "type": "bytes32",
      "indexed": false,
      "internalType": "bytes32"
    },
    {
      "name": "responseDeadline",
      "type": "uint64",
      "indexed": false,
      "internalType": "uint64"
    }
  ],
  "anonymous": false
}
eventDisputeOpened(uint256, uint32, address, uint64)
{
  "type": "event",
  "name": "DisputeOpened",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "indexed": true,
      "internalType": "uint256"
    },
    {
      "name": "sequence",
      "type": "uint32",
      "indexed": true,
      "internalType": "uint32"
    },
    {
      "name": "nextPlayer",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "responseDeadline",
      "type": "uint64",
      "indexed": false,
      "internalType": "uint64"
    }
  ],
  "anonymous": false
}
eventEIP712DomainChanged()
{
  "type": "event",
  "name": "EIP712DomainChanged",
  "inputs": [],
  "anonymous": false
}
eventEquivocationProposed(uint256, address, address, uint32, uint64)
{
  "type": "event",
  "name": "EquivocationProposed",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "indexed": true,
      "internalType": "uint256"
    },
    {
      "name": "offender",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "winner",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "sequence",
      "type": "uint32",
      "indexed": false,
      "internalType": "uint32"
    },
    {
      "name": "responseDeadline",
      "type": "uint64",
      "indexed": false,
      "internalType": "uint64"
    }
  ],
  "anonymous": false
}
eventGameCancelled(uint256)
{
  "type": "event",
  "name": "GameCancelled",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "indexed": true,
      "internalType": "uint256"
    }
  ],
  "anonymous": false
}
eventGameCreated(uint256, address, address, bytes32, uint256, uint64)
{
  "type": "event",
  "name": "GameCreated",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "indexed": true,
      "internalType": "uint256"
    },
    {
      "name": "creator",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "sessionSigner",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "name",
      "type": "bytes32",
      "indexed": false,
      "internalType": "bytes32"
    },
    {
      "name": "wager",
      "type": "uint256",
      "indexed": false,
      "internalType": "uint256"
    },
    {
      "name": "joinDeadline",
      "type": "uint64",
      "indexed": false,
      "internalType": "uint64"
    }
  ],
  "anonymous": false
}
eventGameJoined(uint256, address, address, uint64, uint64)
{
  "type": "event",
  "name": "GameJoined",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "indexed": true,
      "internalType": "uint256"
    },
    {
      "name": "opponent",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "sessionSigner",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "targetRound",
      "type": "uint64",
      "indexed": false,
      "internalType": "uint64"
    },
    {
      "name": "startDeadline",
      "type": "uint64",
      "indexed": false,
      "internalType": "uint64"
    }
  ],
  "anonymous": false
}
eventGameSettled(uint256, uint8, address, uint256, bytes32)
{
  "type": "event",
  "name": "GameSettled",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "indexed": true,
      "internalType": "uint256"
    },
    {
      "name": "outcome",
      "type": "uint8",
      "indexed": true,
      "internalType": "enum ShookTurnBasedGame.Outcome"
    },
    {
      "name": "winner",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "winnerPayout",
      "type": "uint256",
      "indexed": false,
      "internalType": "uint256"
    },
    {
      "name": "finalStateHash",
      "type": "bytes32",
      "indexed": false,
      "internalType": "bytes32"
    }
  ],
  "anonymous": false
}
eventGameStarted(uint256, address, bytes32)
{
  "type": "event",
  "name": "GameStarted",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "indexed": true,
      "internalType": "uint256"
    },
    {
      "name": "starter",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "seed",
      "type": "bytes32",
      "indexed": false,
      "internalType": "bytes32"
    }
  ],
  "anonymous": false
}
eventPlayerResigned(uint256, address)
{
  "type": "event",
  "name": "PlayerResigned",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "indexed": true,
      "internalType": "uint256"
    },
    {
      "name": "player",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    }
  ],
  "anonymous": false
}
eventRefundClaimed(uint256, address, address, uint256)
{
  "type": "event",
  "name": "RefundClaimed",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "indexed": true,
      "internalType": "uint256"
    },
    {
      "name": "player",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "receiver",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "amount",
      "type": "uint256",
      "indexed": false,
      "internalType": "uint256"
    }
  ],
  "anonymous": false
}
eventTerminalSettlementProposed(uint256, uint32, address, bytes32, uint64)
{
  "type": "event",
  "name": "TerminalSettlementProposed",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "indexed": true,
      "internalType": "uint256"
    },
    {
      "name": "sequence",
      "type": "uint32",
      "indexed": true,
      "internalType": "uint32"
    },
    {
      "name": "winner",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "stateHash",
      "type": "bytes32",
      "indexed": false,
      "internalType": "bytes32"
    },
    {
      "name": "responseDeadline",
      "type": "uint64",
      "indexed": false,
      "internalType": "uint64"
    }
  ],
  "anonymous": false
}
eventWinningsClaimed(uint256, address, address, uint256)
{
  "type": "event",
  "name": "WinningsClaimed",
  "inputs": [
    {
      "name": "gameId",
      "type": "uint256",
      "indexed": true,
      "internalType": "uint256"
    },
    {
      "name": "winner",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "receiver",
      "type": "address",
      "indexed": true,
      "internalType": "address"
    },
    {
      "name": "amount",
      "type": "uint256",
      "indexed": false,
      "internalType": "uint256"
    }
  ],
  "anonymous": false
}

Errors 26

errorInvalidConfiguration()
{
  "type": "error",
  "name": "InvalidConfiguration",
  "inputs": []
}
errorInvalidGame()
{
  "type": "error",
  "name": "InvalidGame",
  "inputs": []
}
errorInvalidName()
{
  "type": "error",
  "name": "InvalidName",
  "inputs": []
}
errorInvalidSessionSigner()
{
  "type": "error",
  "name": "InvalidSessionSigner",
  "inputs": []
}
errorInvalidShortString()
{
  "type": "error",
  "name": "InvalidShortString",
  "inputs": []
}
errorInvalidSignature()
{
  "type": "error",
  "name": "InvalidSignature",
  "inputs": []
}
errorInvalidState()
{
  "type": "error",
  "name": "InvalidState",
  "inputs": []
}
errorInvalidStatus()
{
  "type": "error",
  "name": "InvalidStatus",
  "inputs": []
}
errorInvalidTransition()
{
  "type": "error",
  "name": "InvalidTransition",
  "inputs": []
}
errorInvalidWager()
{
  "type": "error",
  "name": "InvalidWager",
  "inputs": []
}
errorLobbyClosed()
{
  "type": "error",
  "name": "LobbyClosed",
  "inputs": []
}
errorLobbyStillOpen()
{
  "type": "error",
  "name": "LobbyStillOpen",
  "inputs": []
}
errorNoEquivocation()
{
  "type": "error",
  "name": "NoEquivocation",
  "inputs": []
}
errorNothingToClaim()
{
  "type": "error",
  "name": "NothingToClaim",
  "inputs": []
}
errorNotOngoing()
{
  "type": "error",
  "name": "NotOngoing",
  "inputs": []
}
errorNotPlayer()
{
  "type": "error",
  "name": "NotPlayer",
  "inputs": []
}
errorNotTerminal()
{
  "type": "error",
  "name": "NotTerminal",
  "inputs": []
}
errorNotWinner()
{
  "type": "error",
  "name": "NotWinner",
  "inputs": []
}
errorRandomnessWindowClosed()
{
  "type": "error",
  "name": "RandomnessWindowClosed",
  "inputs": []
}
errorReentrancyGuardReentrantCall()
{
  "type": "error",
  "name": "ReentrancyGuardReentrantCall",
  "inputs": []
}
errorResponseWindowClosed()
{
  "type": "error",
  "name": "ResponseWindowClosed",
  "inputs": []
}
errorResponseWindowOpen()
{
  "type": "error",
  "name": "ResponseWindowOpen",
  "inputs": []
}
errorSafeCastOverflowedUintDowncast(uint8, uint256)
{
  "type": "error",
  "name": "SafeCastOverflowedUintDowncast",
  "inputs": [
    {
      "name": "bits",
      "type": "uint8",
      "internalType": "uint8"
    },
    {
      "name": "value",
      "type": "uint256",
      "internalType": "uint256"
    }
  ]
}
errorSafeERC20FailedOperation(address)
{
  "type": "error",
  "name": "SafeERC20FailedOperation",
  "inputs": [
    {
      "name": "token",
      "type": "address",
      "internalType": "address"
    }
  ]
}
errorStringTooLong(string)
{
  "type": "error",
  "name": "StringTooLong",
  "inputs": [
    {
      "name": "str",
      "type": "string",
      "internalType": "string"
    }
  ]
}
errorZeroAddress()
{
  "type": "error",
  "name": "ZeroAddress",
  "inputs": []
}

Source and provenance

Imported source files 26

Supporting contracts, interfaces, and libraries imported by the sources above, including their dependencies.

Source fingerprint: 3aa777a77b99551fc33720bc204c6478a4fb635d09b135d6a09dced54b06a637. Download manifest.