Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
c29d9645
Commit
c29d9645
authored
Sep 06, 2023
by
inphi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
specs: Update dispute game interfaces
parent
eb1d3f50
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
95 additions
and
41 deletions
+95
-41
dispute-game-interface.md
specs/dispute-game-interface.md
+95
-41
No files found.
specs/dispute-game-interface.md
View file @
c29d9645
...
@@ -30,6 +30,13 @@ single dispute game will not result in the bug becoming consensus.
...
@@ -30,6 +30,13 @@ single dispute game will not result in the bug becoming consensus.
For added context, we define a few types that are used in the following snippets.
For added context, we define a few types that are used in the following snippets.
```
solidity
```
solidity
/// @notice A custom type for a generic hash.
type Hash is bytes32;
/// @notice A dedicated timestamp type.
type Timestamp is uint64;
/// @notice The type of proof system being used.
/// @notice The type of proof system being used.
enum GameType {
enum GameType {
/// @dev The game will use a `IDisputeGame` implementation that utilizes fault proofs.
/// @dev The game will use a `IDisputeGame` implementation that utilizes fault proofs.
...
@@ -90,38 +97,74 @@ interface IDisputeGameFactory {
...
@@ -90,38 +97,74 @@ interface IDisputeGameFactory {
/// @param rootClaim The root claim of the dispute game
/// @param rootClaim The root claim of the dispute game
event DisputeGameCreated(address indexed disputeProxy, GameType indexed gameType, Claim indexed rootClaim);
event DisputeGameCreated(address indexed disputeProxy, GameType indexed gameType, Claim indexed rootClaim);
/// @notice `games` queries an internal a mapping that maps the hash of `gameType ++ rootClaim ++ extraData`
/// @notice Emitted when a new game implementation added to the factory
/// to the deployed `DisputeGame` clone.
/// @param impl The implementation contract for the given `GameType`.
/// @param gameType The type of the DisputeGame.
event ImplementationSet(address indexed impl, GameType indexed gameType);
/// @notice The total number of dispute games created by this factory.
/// @return gameCount_ The total number of dispute games created by this factory.
function gameCount() external view returns (uint256 gameCount_);
/// @notice `games` queries an internal mapping that maps the hash of
/// `gameType ++ rootClaim ++ extraData` to the deployed `DisputeGame` clone.
/// @dev `++` equates to concatenation.
/// @dev `++` equates to concatenation.
/// @param gameType The type of the DisputeGame - used to decide the proxy implementation
/// @param _gameType The type of the DisputeGame - used to decide the proxy implementation
/// @param rootClaim The root claim of the DisputeGame.
/// @param _rootClaim The root claim of the DisputeGame.
/// @param extraData Any extra data that should be provided to the created dispute game.
/// @param _extraData Any extra data that should be provided to the created dispute game.
/// @return _proxy The clone of the `DisputeGame` created with the given parameters. Returns `address(0)` if nonexistent.
/// @return proxy_ The clone of the `DisputeGame` created with the given parameters.
function games(GameType gameType, Claim rootClaim, bytes calldata extraData) external view returns (IDisputeGame _proxy);
/// Returns `address(0)` if nonexistent.
/// @return timestamp_ The timestamp of the creation of the dispute game.
/// @notice `gameImpls` is a mapping that maps `GameType`s to their respective `IDisputeGame` implementations.
function games(GameType _gameType, Claim _rootClaim, bytes calldata _extraData)
/// @param gameType The type of the dispute game.
external
/// @return _impl The address of the implementation of the game type. Will be cloned on creation of a new dispute game
view
/// with the given `gameType`.
returns (IDisputeGame proxy_, Timestamp timestamp_);
function gameImpls(GameType gameType) public view returns (IDisputeGame _impl);
/// @notice `gameAtIndex` returns the dispute game contract address and its creation timestamp
/// @notice The owner of the contract.
/// at the given index. Each created dispute game increments the underlying index.
/// @dev Owner Permissions:
/// @param _index The index of the dispute game.
/// - Update the implementation contracts for a given game type.
/// @return gameType_ The type of the DisputeGame - used to decide the proxy implementation.
/// @return _owner The owner of the contract.
/// @return timestamp_ The timestamp of the creation of the dispute game.
function owner() public view returns (address _owner);
/// @return proxy_ The clone of the `DisputeGame` created with the given parameters.
/// Returns `address(0)` if nonexistent.
function gameAtIndex(uint256 _index)
external
view
returns (GameType gameType_, Timestamp timestamp_, IDisputeGame proxy_);
/// @notice `gameImpls` is a mapping that maps `GameType`s to their respective
/// `IDisputeGame` implementations.
/// @param _gameType The type of the dispute game.
/// @return impl_ The address of the implementation of the game type.
/// Will be cloned on creation of a new dispute game with the given `gameType`.
function gameImpls(GameType _gameType) external view returns (IDisputeGame impl_);
/// @notice Creates a new DisputeGame proxy contract.
/// @notice Creates a new DisputeGame proxy contract.
/// @param gameType The type of the DisputeGame - used to decide the proxy implementation
/// @param _gameType The type of the DisputeGame - used to decide the proxy implementation.
/// @param rootClaim The root claim of the DisputeGame.
/// @param _rootClaim The root claim of the DisputeGame.
/// @param extraData Any extra data that should be provided to the created dispute game.
/// @param _extraData Any extra data that should be provided to the created dispute game.
function create(GameType gameType, Claim rootClaim, bytes calldata extraData) external returns (IDisputeGame proxy);
/// @return proxy_ The address of the created DisputeGame proxy.
function create(GameType _gameType, Claim _rootClaim, bytes calldata _extraData)
/// @notice Sets the implementation contract for a specific `GameType`
external
returns (IDisputeGame proxy_);
/// @notice Sets the implementation contract for a specific `GameType`.
/// @dev May only be called by the `owner`.
/// @dev May only be called by the `owner`.
/// @param gameType The type of the DisputeGame
/// @param _gameType The type of the DisputeGame.
/// @param impl The implementation contract for the given `GameType`
/// @param _impl The implementation contract for the given `GameType`.
function setImplementation(GameType gameType, IDisputeGame impl) external;
function setImplementation(GameType _gameType, IDisputeGame _impl) external;
/// @notice Returns a unique identifier for the given dispute game parameters.
/// @dev Hashes the concatenation of `gameType . rootClaim . extraData`
/// without expanding memory.
/// @param _gameType The type of the DisputeGame.
/// @param _rootClaim The root claim of the DisputeGame.
/// @param _extraData Any extra data that should be provided to the created dispute game.
/// @return uuid_ The unique identifier for the given dispute game parameters.
function getGameUUID(GameType _gameType, Claim _rootClaim, bytes memory _extraData)
external
pure
returns (Hash uuid_);
}
}
```
```
...
@@ -146,41 +189,52 @@ interface IDisputeGame {
...
@@ -146,41 +189,52 @@ interface IDisputeGame {
/// @custom:invariant The `initialize` function may only be called once.
/// @custom:invariant The `initialize` function may only be called once.
function initialize() external;
function initialize() external;
/// @notice Returns the semantic version of the DisputeGame contract
/// @notice Emitted when the game is resolved.
function version() external pure returns (string memory _version);
/// @param status The status of the game after resolution.
event Resolved(GameStatus indexed status);
/// @notice Returns the timestamp that the DisputeGame contract was created at.
/// @notice Returns the timestamp that the DisputeGame contract was created at.
function createdAt() external pure returns (Timestamp
_createdAt
);
function createdAt() external pure returns (Timestamp
createdAt_
);
/// @notice Returns the current status of the game.
/// @notice Returns the current status of the game.
function status() external view returns (GameStatus
_status
);
function status() external view returns (GameStatus
status_
);
/// @notice Getter for the game type.
/// @notice Getter for the game type.
/// @dev `clones-with-immutable-args` argument #1
/// @dev `clones-with-immutable-args` argument #1
/// @dev The reference impl should be entirely different depending on the type (fault, validity)
/// @dev The reference impl should be entirely different depending on the type (fault, validity)
/// i.e. The game type should indicate the security model.
/// i.e. The game type should indicate the security model.
/// @return
_gameType
The type of proof system being used.
/// @return
gameType_
The type of proof system being used.
function gameType() external view returns (GameType
_gameType
);
function gameType() external view returns (GameType
gameType_
);
/// @notice Getter for the root claim.
/// @notice Getter for the root claim.
/// @return
_rootClaim
The root claim of the DisputeGame.
/// @return
rootClaim_
The root claim of the DisputeGame.
/// @dev `clones-with-immutable-args` argument #2
/// @dev `clones-with-immutable-args` argument #2
function rootClaim() external view returns (Claim
_rootClaim
);
function rootClaim() external view returns (Claim
rootClaim_
);
/// @notice Getter for the extra data.
/// @notice Getter for the extra data.
/// @dev `clones-with-immutable-args` argument #3
/// @dev `clones-with-immutable-args` argument #3
/// @return
_extraData
Any extra data supplied to the dispute game contract by the creator.
/// @return
extraData_
Any extra data supplied to the dispute game contract by the creator.
function extraData() external view returns (bytes memory
_extraData
);
function extraData() external view returns (bytes memory
extraData_
);
/// @notice Returns the address of the `BondManager` used
/// @notice Returns the address of the `BondManager` used
function bondManager() public view returns (IBondManager
_bondManager
);
function bondManager() public view returns (IBondManager
bondManager_
);
/// @notice If all necessary information has been gathered, this function should mark the game
/// @notice If all necessary information has been gathered, this function should mark the game
/// status as either `CHALLENGER_WINS` or `DEFENDER_WINS` and return the status of
/// status as either `CHALLENGER_WINS` or `DEFENDER_WINS` and return the status of
/// the resolved game. It is at this stage that the bonds should be awarded to the
/// the resolved game. It is at this stage that the bonds should be awarded to the
/// necessary parties.
/// necessary parties.
/// @dev May only be called if the `status` is `IN_PROGRESS`.
/// @dev May only be called if the `status` is `IN_PROGRESS`.
function resolve() public returns (GameStatus _status);
/// @return status_ The status of the game after resolution.
function resolve() public returns (GameStatus status_);
/// @notice A compliant implementation of this interface should return the components of the
/// game UUID's preimage provided in the cwia payload. The preimage of the UUID is
/// constructed as `keccak256(gameType . rootClaim . extraData)` where `.` denotes
/// concatenation.
/// @return gameType_ The type of proof system being used.
/// @return rootClaim_ The root claim of the DisputeGame.
/// @return extraData_ Any extra data supplied to the dispute game contract by the creator.
function gameData() external view returns (GameType gameType_, Claim rootClaim_, bytes memory extraData_);
}
}
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment