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
124799db
Unverified
Commit
124799db
authored
Jun 13, 2023
by
mergify[bot]
Committed by
GitHub
Jun 13, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #6005 from ethereum-optimism/refcell/array/factory
feat(ctb): Append Only Array in DisputeGameFactory
parents
dee1d2fe
9b126419
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
98 additions
and
12 deletions
+98
-12
disputegamefactory.go
op-bindings/bindings/disputegamefactory.go
+64
-2
.gas-snapshot
packages/contracts-bedrock/.gas-snapshot
+5
-5
.storage-layout
packages/contracts-bedrock/.storage-layout
+6
-5
DisputeGameFactory.sol
...ontracts-bedrock/contracts/dispute/DisputeGameFactory.sol
+15
-0
IDisputeGameFactory.sol
...rock/contracts/dispute/interfaces/IDisputeGameFactory.sol
+6
-0
DisputeGameFactory.t.sol
...contracts-bedrock/contracts/test/DisputeGameFactory.t.sol
+2
-0
No files found.
op-bindings/bindings/disputegamefactory.go
View file @
124799db
...
@@ -30,8 +30,8 @@ var (
...
@@ -30,8 +30,8 @@ var (
// DisputeGameFactoryMetaData contains all meta data concerning the DisputeGameFactory contract.
// DisputeGameFactoryMetaData contains all meta data concerning the DisputeGameFactory contract.
var
DisputeGameFactoryMetaData
=
&
bind
.
MetaData
{
var
DisputeGameFactoryMetaData
=
&
bind
.
MetaData
{
ABI
:
"[{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
_owner
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
constructor
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
Hash
\"
,
\"
name
\"
:
\"
uuid
\"
,
\"
type
\"
:
\"
bytes32
\"
}],
\"
name
\"
:
\"
GameAlreadyExists
\"
,
\"
type
\"
:
\"
error
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
}],
\"
name
\"
:
\"
NoImplementation
\"
,
\"
type
\"
:
\"
error
\"
},{
\"
anonymous
\"
:false,
\"
inputs
\"
:[{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
disputeProxy
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
},{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
Claim
\"
,
\"
name
\"
:
\"
rootClaim
\"
,
\"
type
\"
:
\"
bytes32
\"
}],
\"
name
\"
:
\"
DisputeGameCreated
\"
,
\"
type
\"
:
\"
event
\"
},{
\"
anonymous
\"
:false,
\"
inputs
\"
:[{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
impl
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
}],
\"
name
\"
:
\"
ImplementationSet
\"
,
\"
type
\"
:
\"
event
\"
},{
\"
anonymous
\"
:false,
\"
inputs
\"
:[{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
previousOwner
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
newOwner
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
name
\"
:
\"
OwnershipTransferred
\"
,
\"
type
\"
:
\"
event
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
},{
\"
internalType
\"
:
\"
Claim
\"
,
\"
name
\"
:
\"
rootClaim
\"
,
\"
type
\"
:
\"
bytes32
\"
},{
\"
internalType
\"
:
\"
bytes
\"
,
\"
name
\"
:
\"
extraData
\"
,
\"
type
\"
:
\"
bytes
\"
}],
\"
name
\"
:
\"
create
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
contractIDisputeGame
\"
,
\"
name
\"
:
\"
proxy
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
uint8
\"
}],
\"
name
\"
:
\"
gameImpls
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
contractIDisputeGame
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
},{
\"
internalType
\"
:
\"
Claim
\"
,
\"
name
\"
:
\"
rootClaim
\"
,
\"
type
\"
:
\"
bytes32
\"
},{
\"
internalType
\"
:
\"
bytes
\"
,
\"
name
\"
:
\"
extraData
\"
,
\"
type
\"
:
\"
bytes
\"
}],
\"
name
\"
:
\"
games
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
contractIDisputeGame
\"
,
\"
name
\"
:
\"
_proxy
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
},{
\"
internalType
\"
:
\"
Claim
\"
,
\"
name
\"
:
\"
rootClaim
\"
,
\"
type
\"
:
\"
bytes32
\"
},{
\"
internalType
\"
:
\"
bytes
\"
,
\"
name
\"
:
\"
extraData
\"
,
\"
type
\"
:
\"
bytes
\"
}],
\"
name
\"
:
\"
getGameUUID
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
Hash
\"
,
\"
name
\"
:
\"
_uuid
\"
,
\"
type
\"
:
\"
bytes32
\"
}],
\"
stateMutability
\"
:
\"
pure
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
owner
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
renounceOwnership
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
},{
\"
internalType
\"
:
\"
contractIDisputeGame
\"
,
\"
name
\"
:
\"
impl
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
name
\"
:
\"
setImplementation
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
newOwner
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
name
\"
:
\"
transferOwnership
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
}]"
,
ABI
:
"[{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
_owner
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
constructor
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
Hash
\"
,
\"
name
\"
:
\"
uuid
\"
,
\"
type
\"
:
\"
bytes32
\"
}],
\"
name
\"
:
\"
GameAlreadyExists
\"
,
\"
type
\"
:
\"
error
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
}],
\"
name
\"
:
\"
NoImplementation
\"
,
\"
type
\"
:
\"
error
\"
},{
\"
anonymous
\"
:false,
\"
inputs
\"
:[{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
disputeProxy
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
},{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
Claim
\"
,
\"
name
\"
:
\"
rootClaim
\"
,
\"
type
\"
:
\"
bytes32
\"
}],
\"
name
\"
:
\"
DisputeGameCreated
\"
,
\"
type
\"
:
\"
event
\"
},{
\"
anonymous
\"
:false,
\"
inputs
\"
:[{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
impl
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
}],
\"
name
\"
:
\"
ImplementationSet
\"
,
\"
type
\"
:
\"
event
\"
},{
\"
anonymous
\"
:false,
\"
inputs
\"
:[{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
previousOwner
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
newOwner
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
name
\"
:
\"
OwnershipTransferred
\"
,
\"
type
\"
:
\"
event
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
},{
\"
internalType
\"
:
\"
Claim
\"
,
\"
name
\"
:
\"
rootClaim
\"
,
\"
type
\"
:
\"
bytes32
\"
},{
\"
internalType
\"
:
\"
bytes
\"
,
\"
name
\"
:
\"
extraData
\"
,
\"
type
\"
:
\"
bytes
\"
}],
\"
name
\"
:
\"
create
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
contractIDisputeGame
\"
,
\"
name
\"
:
\"
proxy
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
uint256
\"
}],
\"
name
\"
:
\"
disputeGameList
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
contractIDisputeGame
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
gameCount
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
_gameCount
\"
,
\"
type
\"
:
\"
uint256
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
uint8
\"
}],
\"
name
\"
:
\"
gameImpls
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
contractIDisputeGame
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
},{
\"
internalType
\"
:
\"
Claim
\"
,
\"
name
\"
:
\"
rootClaim
\"
,
\"
type
\"
:
\"
bytes32
\"
},{
\"
internalType
\"
:
\"
bytes
\"
,
\"
name
\"
:
\"
extraData
\"
,
\"
type
\"
:
\"
bytes
\"
}],
\"
name
\"
:
\"
games
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
contractIDisputeGame
\"
,
\"
name
\"
:
\"
_proxy
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
},{
\"
internalType
\"
:
\"
Claim
\"
,
\"
name
\"
:
\"
rootClaim
\"
,
\"
type
\"
:
\"
bytes32
\"
},{
\"
internalType
\"
:
\"
bytes
\"
,
\"
name
\"
:
\"
extraData
\"
,
\"
type
\"
:
\"
bytes
\"
}],
\"
name
\"
:
\"
getGameUUID
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
Hash
\"
,
\"
name
\"
:
\"
_uuid
\"
,
\"
type
\"
:
\"
bytes32
\"
}],
\"
stateMutability
\"
:
\"
pure
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
owner
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
renounceOwnership
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
enumGameType
\"
,
\"
name
\"
:
\"
gameType
\"
,
\"
type
\"
:
\"
uint8
\"
},{
\"
internalType
\"
:
\"
contractIDisputeGame
\"
,
\"
name
\"
:
\"
impl
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
name
\"
:
\"
setImplementation
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
newOwner
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
name
\"
:
\"
transferOwnership
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
}]"
,
Bin
:
"0x608060405234801561001057600080fd5b50604051610
d8b380380610d8b83398101604081905261002f91610171565b61003833610047565b61004181610097565b506101a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61009f610115565b6001600160a01b0381166101095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61011281610047565b50565b6000546001600160a01b0316331461016f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610100565b565b60006020828403121561018357600080fd5b81516001600160a01b038116811461019a57600080fd5b9392505050565b610bdb806101b06000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b14610194578063c49d5271146101b2578063dfa162d3146101c5578063f2fde38b146101fb57600080fd5b806326daafbe1461008d5780633142e55e1461013f57806345583b7a14610177578063715018a61461018c575b600080fd5b61012c61009b36600461093c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0830180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08086018051988652968352606087529451609f0190941683209190925291905291905290565b6040519081526020015b60405180910390f35b61015261014d366004610a25565b61020e565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610136565b61018a610185366004610ace565b6104ba565b005b61018a61058d565b60005473ffffffffffffffffffffffffffffffffffffffff16610152565b6101526101c0366004610a25565b6105a1565b6101526101d3366004610b05565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b61018a610209366004610b27565b610618565b6000806001600087600281111561022757610227610b44565b600281111561023857610238610b44565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff169050806102a357856040517f44265d6f00000000000000000000000000000000000000000000000000000000815260040161029a9190610b73565b60405180910390fd5b6103068585856040516020016102bb93929190610bb4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff8316906106cf565b91508173ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561035057600080fd5b505af1158015610364573d6000803e3d6000fd5b5050505060006103ab878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061009b92505050565b60008181526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff161561040d576040517f014f6fe50000000000000000000000000000000000000000000000000000000081526004810182905260240161029a565b600081815260026020819052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790558690889081111561046f5761046f610b44565b60405173ffffffffffffffffffffffffffffffffffffffff8616907ffad0599ff449d8d9685eadecca8cb9e00924c5fd8367c1c09469824939e1ffec90600090a45050949350505050565b6104c2610803565b80600160008460028111156104d9576104d9610b44565b60028111156104ea576104ea610b44565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600281111561054857610548610b44565b60405173ffffffffffffffffffffffffffffffffffffffff8316907f623713f72f6e427a8044bb8b3bd6834357cf285decbaa21bcc73c1d0632c4d8490600090a35050565b610595610803565b61059f6000610884565b565b6000600260006105e8878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061009b92505050565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1695945050505050565b610620610803565b73ffffffffffffffffffffffffffffffffffffffff81166106c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161029a565b6106cc81610884565b50565b60006002825101603f8101600a81036040518360581b8260e81b177f6100003d81600a3d39f3363d3d373d3d3d3d610000806035363936013d7300001781528660601b601e8201527f5af43d3d93803e603357fd5bf300000000000000000000000000000000000000603282015285519150603f8101602087015b6020841061078757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909301926020918201910161074a565b517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602085900360031b1b16815260f085901b9083015282816000f09450846107f4577febfef1880000000000000000000000000000000000000000000000000000000060005260206000fd5b90910160405250909392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161029a565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356003811061090857600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561095157600080fd5b61095a846108f9565b925060208401359150604084013567ffffffffffffffff8082111561097e57600080fd5b818601915086601f83011261099257600080fd5b8135818111156109a4576109a461090d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156109ea576109ea61090d565b81604052828152896020848701011115610a0357600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60008060008060608587031215610a3b57600080fd5b610a44856108f9565b935060208501359250604085013567ffffffffffffffff80821115610a6857600080fd5b818701915087601f830112610a7c57600080fd5b813581811115610a8b57600080fd5b886020828501011115610a9d57600080fd5b95989497505060200194505050565b73ffffffffffffffffffffffffffffffffffffffff811681146106cc57600080fd5b60008060408385031215610ae157600080fd5b610aea836108f9565b91506020830135610afa81610aac565b809150509250929050565b600060208284031215610b1757600080fd5b610b20826108f9565b9392505050565b600060208284031215610b3957600080fd5b8135610b2081610aac565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310610bae
577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b83815281836020830137600091016020019081529291505056fea164736f6c634300080f000a"
,
Bin
:
"0x608060405234801561001057600080fd5b50604051610
e68380380610e6883398101604081905261002f91610171565b61003833610047565b61004181610097565b506101a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61009f610115565b6001600160a01b0381166101095760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61011281610047565b50565b6000546001600160a01b0316331461016f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610100565b565b60006020828403121561018357600080fd5b81516001600160a01b038116811461019a57600080fd5b9392505050565b610cb8806101b06000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063763014a611610076578063c49d52711161005b578063c49d527114610203578063dfa162d314610216578063f2fde38b1461024c57600080fd5b8063763014a6146101d25780638da5cb5b146101e557600080fd5b806345583b7a116100a757806345583b7a146101ad5780634d1975b4146101c2578063715018a6146101ca57600080fd5b806326daafbe146100c35780633142e55e14610175575b600080fd5b6101626100d1366004610a00565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0810180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0830180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08086018051988652968352606087529451609f0190941683209190925291905291905290565b6040519081526020015b60405180910390f35b610188610183366004610ae9565b61025f565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161016c565b6101c06101bb366004610b92565b610547565b005b600354610162565b6101c061061a565b6101886101e0366004610bc9565b61062e565b60005473ffffffffffffffffffffffffffffffffffffffff16610188565b610188610211366004610ae9565b610665565b610188610224366004610be2565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101c061025a366004610c04565b6106dc565b6000806001600087600281111561027857610278610c21565b600281111561028957610289610c21565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff169050806102f457856040517f44265d6f0000000000000000000000000000000000000000000000000000000081526004016102eb9190610c50565b60405180910390fd5b61035785858560405160200161030c93929190610c91565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff831690610793565b91508173ffffffffffffffffffffffffffffffffffffffff16638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156103a157600080fd5b505af11580156103b5573d6000803e3d6000fd5b5050505060006103fc878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506100d192505050565b60008181526002602052604090205490915073ffffffffffffffffffffffffffffffffffffffff161561045e576040517f014f6fe5000000000000000000000000000000000000000000000000000000008152600481018290526024016102eb565b60008181526002602081905260408220805473ffffffffffffffffffffffffffffffffffffffff87167fffffffffffffffffffffffff000000000000000000000000000000000000000091821681179092556003805460018101825594527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b909301805490931617909155869088908111156104fc576104fc610c21565b60405173ffffffffffffffffffffffffffffffffffffffff8616907ffad0599ff449d8d9685eadecca8cb9e00924c5fd8367c1c09469824939e1ffec90600090a45050949350505050565b61054f6108c7565b806001600084600281111561056657610566610c21565b600281111561057757610577610c21565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160028111156105d5576105d5610c21565b60405173ffffffffffffffffffffffffffffffffffffffff8316907f623713f72f6e427a8044bb8b3bd6834357cf285decbaa21bcc73c1d0632c4d8490600090a35050565b6106226108c7565b61062c6000610948565b565b6003818154811061063e57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b6000600260006106ac878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506100d192505050565b815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff1695945050505050565b6106e46108c7565b73ffffffffffffffffffffffffffffffffffffffff8116610787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102eb565b61079081610948565b50565b60006002825101603f8101600a81036040518360581b8260e81b177f6100003d81600a3d39f3363d3d373d3d3d3d610000806035363936013d7300001781528660601b601e8201527f5af43d3d93803e603357fd5bf300000000000000000000000000000000000000603282015285519150603f8101602087015b6020841061084b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909301926020918201910161080e565b517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602085900360031b1b16815260f085901b9083015282816000f09450846108b8577febfef1880000000000000000000000000000000000000000000000000000000060005260206000fd5b90910160405250909392505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461062c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102eb565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8035600381106109cc57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060608486031215610a1557600080fd5b610a1e846109bd565b925060208401359150604084013567ffffffffffffffff80821115610a4257600080fd5b818601915086601f830112610a5657600080fd5b813581811115610a6857610a686109d1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610aae57610aae6109d1565b81604052828152896020848701011115610ac757600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60008060008060608587031215610aff57600080fd5b610b08856109bd565b935060208501359250604085013567ffffffffffffffff80821115610b2c57600080fd5b818701915087601f830112610b4057600080fd5b813581811115610b4f57600080fd5b886020828501011115610b6157600080fd5b95989497505060200194505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461079057600080fd5b60008060408385031215610ba557600080fd5b610bae836109bd565b91506020830135610bbe81610b70565b809150509250929050565b600060208284031215610bdb57600080fd5b5035919050565b600060208284031215610bf457600080fd5b610bfd826109bd565b9392505050565b600060208284031215610c1657600080fd5b8135610bfd81610b70565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310610c8b
577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b83815281836020830137600091016020019081529291505056fea164736f6c634300080f000a"
,
}
}
// DisputeGameFactoryABI is the input ABI used to generate the binding from.
// DisputeGameFactoryABI is the input ABI used to generate the binding from.
...
@@ -201,6 +201,68 @@ func (_DisputeGameFactory *DisputeGameFactoryTransactorRaw) Transact(opts *bind.
...
@@ -201,6 +201,68 @@ func (_DisputeGameFactory *DisputeGameFactoryTransactorRaw) Transact(opts *bind.
return
_DisputeGameFactory
.
Contract
.
contract
.
Transact
(
opts
,
method
,
params
...
)
return
_DisputeGameFactory
.
Contract
.
contract
.
Transact
(
opts
,
method
,
params
...
)
}
}
// DisputeGameList is a free data retrieval call binding the contract method 0x763014a6.
//
// Solidity: function disputeGameList(uint256 ) view returns(address)
func
(
_DisputeGameFactory
*
DisputeGameFactoryCaller
)
DisputeGameList
(
opts
*
bind
.
CallOpts
,
arg0
*
big
.
Int
)
(
common
.
Address
,
error
)
{
var
out
[]
interface
{}
err
:=
_DisputeGameFactory
.
contract
.
Call
(
opts
,
&
out
,
"disputeGameList"
,
arg0
)
if
err
!=
nil
{
return
*
new
(
common
.
Address
),
err
}
out0
:=
*
abi
.
ConvertType
(
out
[
0
],
new
(
common
.
Address
))
.
(
*
common
.
Address
)
return
out0
,
err
}
// DisputeGameList is a free data retrieval call binding the contract method 0x763014a6.
//
// Solidity: function disputeGameList(uint256 ) view returns(address)
func
(
_DisputeGameFactory
*
DisputeGameFactorySession
)
DisputeGameList
(
arg0
*
big
.
Int
)
(
common
.
Address
,
error
)
{
return
_DisputeGameFactory
.
Contract
.
DisputeGameList
(
&
_DisputeGameFactory
.
CallOpts
,
arg0
)
}
// DisputeGameList is a free data retrieval call binding the contract method 0x763014a6.
//
// Solidity: function disputeGameList(uint256 ) view returns(address)
func
(
_DisputeGameFactory
*
DisputeGameFactoryCallerSession
)
DisputeGameList
(
arg0
*
big
.
Int
)
(
common
.
Address
,
error
)
{
return
_DisputeGameFactory
.
Contract
.
DisputeGameList
(
&
_DisputeGameFactory
.
CallOpts
,
arg0
)
}
// GameCount is a free data retrieval call binding the contract method 0x4d1975b4.
//
// Solidity: function gameCount() view returns(uint256 _gameCount)
func
(
_DisputeGameFactory
*
DisputeGameFactoryCaller
)
GameCount
(
opts
*
bind
.
CallOpts
)
(
*
big
.
Int
,
error
)
{
var
out
[]
interface
{}
err
:=
_DisputeGameFactory
.
contract
.
Call
(
opts
,
&
out
,
"gameCount"
)
if
err
!=
nil
{
return
*
new
(
*
big
.
Int
),
err
}
out0
:=
*
abi
.
ConvertType
(
out
[
0
],
new
(
*
big
.
Int
))
.
(
**
big
.
Int
)
return
out0
,
err
}
// GameCount is a free data retrieval call binding the contract method 0x4d1975b4.
//
// Solidity: function gameCount() view returns(uint256 _gameCount)
func
(
_DisputeGameFactory
*
DisputeGameFactorySession
)
GameCount
()
(
*
big
.
Int
,
error
)
{
return
_DisputeGameFactory
.
Contract
.
GameCount
(
&
_DisputeGameFactory
.
CallOpts
)
}
// GameCount is a free data retrieval call binding the contract method 0x4d1975b4.
//
// Solidity: function gameCount() view returns(uint256 _gameCount)
func
(
_DisputeGameFactory
*
DisputeGameFactoryCallerSession
)
GameCount
()
(
*
big
.
Int
,
error
)
{
return
_DisputeGameFactory
.
Contract
.
GameCount
(
&
_DisputeGameFactory
.
CallOpts
)
}
// GameImpls is a free data retrieval call binding the contract method 0xdfa162d3.
// GameImpls is a free data retrieval call binding the contract method 0xdfa162d3.
//
//
// Solidity: function gameImpls(uint8 ) view returns(address)
// Solidity: function gameImpls(uint8 ) view returns(address)
...
...
packages/contracts-bedrock/.gas-snapshot
View file @
124799db
...
@@ -27,11 +27,11 @@ CrossDomainOwnable_Test:test_onlyOwner_notOwner_reverts() (gas: 10597)
...
@@ -27,11 +27,11 @@ CrossDomainOwnable_Test:test_onlyOwner_notOwner_reverts() (gas: 10597)
CrossDomainOwnable_Test:test_onlyOwner_succeeds() (gas: 34883)
CrossDomainOwnable_Test:test_onlyOwner_succeeds() (gas: 34883)
DeployerWhitelist_Test:test_owner_succeeds() (gas: 7582)
DeployerWhitelist_Test:test_owner_succeeds() (gas: 7582)
DeployerWhitelist_Test:test_storageSlots_succeeds() (gas: 33395)
DeployerWhitelist_Test:test_storageSlots_succeeds() (gas: 33395)
DisputeGameFactory_Test:test_owner_succeeds() (gas: 7
582
)
DisputeGameFactory_Test:test_owner_succeeds() (gas: 7
627
)
DisputeGameFactory_Test:test_setImplementation_notOwner_reverts() (gas: 111
91
)
DisputeGameFactory_Test:test_setImplementation_notOwner_reverts() (gas: 111
69
)
DisputeGameFactory_Test:test_setImplementation_succeeds() (gas: 387
65
)
DisputeGameFactory_Test:test_setImplementation_succeeds() (gas: 387
43
)
DisputeGameFactory_Test:test_transferOwnership_notOwner_reverts() (gas: 10979)
DisputeGameFactory_Test:test_transferOwnership_notOwner_reverts() (gas: 10979)
DisputeGameFactory_Test:test_transferOwnership_succeeds() (gas: 13
180
)
DisputeGameFactory_Test:test_transferOwnership_succeeds() (gas: 13
225
)
FeeVault_Test:test_constructor_succeeds() (gas: 18185)
FeeVault_Test:test_constructor_succeeds() (gas: 18185)
GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 352135)
GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 352135)
GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2950342)
GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2950342)
...
@@ -435,4 +435,4 @@ SystemConfig_Setters_TestFail:test_setResourceConfig_notOwner_reverts() (gas: 11
...
@@ -435,4 +435,4 @@ SystemConfig_Setters_TestFail:test_setResourceConfig_notOwner_reverts() (gas: 11
SystemConfig_Setters_TestFail:test_setResourceConfig_zeroDenominator_reverts() (gas: 13039)
SystemConfig_Setters_TestFail:test_setResourceConfig_zeroDenominator_reverts() (gas: 13039)
SystemConfig_Setters_TestFail:test_setUnsafeBlockSigner_notOwner_reverts() (gas: 10616)
SystemConfig_Setters_TestFail:test_setUnsafeBlockSigner_notOwner_reverts() (gas: 10616)
TransferOnionTest:test_constructor_succeeds() (gas: 564855)
TransferOnionTest:test_constructor_succeeds() (gas: 564855)
TransferOnionTest:test_unwrap_succeeds() (gas: 724955)
TransferOnionTest:test_unwrap_succeeds() (gas: 724955)
\ No newline at end of file
packages/contracts-bedrock/.storage-layout
View file @
124799db
...
@@ -253,11 +253,12 @@
...
@@ -253,11 +253,12 @@
➡ contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory
➡ contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory
=======================
=======================
| Name | Type | Slot | Offset | Bytes | Contract |
| Name | Type | Slot | Offset | Bytes | Contract |
|--------------|-------------------------------------------------|------|--------|-------|-------------------------------------------------------------|
|-----------------|-------------------------------------------------|------|--------|-------|-------------------------------------------------------------|
| _owner | address | 0 | 0 | 20 | contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| _owner | address | 0 | 0 | 20 | contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| gameImpls | mapping(enum GameType => contract IDisputeGame) | 1 | 0 | 32 | contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| gameImpls | mapping(enum GameType => contract IDisputeGame) | 1 | 0 | 32 | contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| disputeGames | mapping(Hash => contract IDisputeGame) | 2 | 0 | 32 | contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| disputeGames | mapping(Hash => contract IDisputeGame) | 2 | 0 | 32 | contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| disputeGameList | contract IDisputeGame[] | 3 | 0 | 32 | contracts/dispute/DisputeGameFactory.sol:DisputeGameFactory |
=======================
=======================
➡ contracts/dispute/BondManager.sol:BondManager
➡ contracts/dispute/BondManager.sol:BondManager
...
...
packages/contracts-bedrock/contracts/dispute/DisputeGameFactory.sol
View file @
124799db
...
@@ -32,6 +32,13 @@ contract DisputeGameFactory is Ownable, IDisputeGameFactory {
...
@@ -32,6 +32,13 @@ contract DisputeGameFactory is Ownable, IDisputeGameFactory {
*/
*/
mapping(Hash => IDisputeGame) internal disputeGames;
mapping(Hash => IDisputeGame) internal disputeGames;
/**
* @notice An append-only array of disputeGames that have been created.
* @dev This accessor is used by offchain game solvers to efficiently
* track dispute games
*/
IDisputeGame[] public disputeGameList;
/**
/**
* @notice Constructs a new DisputeGameFactory contract.
* @notice Constructs a new DisputeGameFactory contract.
* @param _owner The owner of the contract.
* @param _owner The owner of the contract.
...
@@ -40,6 +47,13 @@ contract DisputeGameFactory is Ownable, IDisputeGameFactory {
...
@@ -40,6 +47,13 @@ contract DisputeGameFactory is Ownable, IDisputeGameFactory {
transferOwnership(_owner);
transferOwnership(_owner);
}
}
/**
* @inheritdoc IDisputeGameFactory
*/
function gameCount() external view returns (uint256 _gameCount) {
_gameCount = disputeGameList.length;
}
/**
/**
* @inheritdoc IDisputeGameFactory
* @inheritdoc IDisputeGameFactory
*/
*/
...
@@ -81,6 +95,7 @@ contract DisputeGameFactory is Ownable, IDisputeGameFactory {
...
@@ -81,6 +95,7 @@ contract DisputeGameFactory is Ownable, IDisputeGameFactory {
// Store the dispute game in the mapping & emit the `DisputeGameCreated` event.
// Store the dispute game in the mapping & emit the `DisputeGameCreated` event.
disputeGames[uuid] = proxy;
disputeGames[uuid] = proxy;
disputeGameList.push(proxy);
emit DisputeGameCreated(address(proxy), gameType, rootClaim);
emit DisputeGameCreated(address(proxy), gameType, rootClaim);
}
}
...
...
packages/contracts-bedrock/contracts/dispute/interfaces/IDisputeGameFactory.sol
View file @
124799db
...
@@ -29,6 +29,12 @@ interface IDisputeGameFactory {
...
@@ -29,6 +29,12 @@ interface IDisputeGameFactory {
*/
*/
event ImplementationSet(address indexed impl, GameType indexed gameType);
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 a mapping that maps the hash of
* @notice `games` queries an internal a mapping that maps the hash of
* `gameType ++ rootClaim ++ extraData` to the deployed `DisputeGame` clone.
* `gameType ++ rootClaim ++ extraData` to the deployed `DisputeGame` clone.
...
...
packages/contracts-bedrock/contracts/test/DisputeGameFactory.t.sol
View file @
124799db
...
@@ -48,6 +48,8 @@ contract DisputeGameFactory_Test is Test {
...
@@ -48,6 +48,8 @@ contract DisputeGameFactory_Test is Test {
// Ensure that the dispute game was assigned to the `disputeGames` mapping.
// Ensure that the dispute game was assigned to the `disputeGames` mapping.
assertEq(address(factory.games(gt, rootClaim, extraData)), address(proxy));
assertEq(address(factory.games(gt, rootClaim, extraData)), address(proxy));
assertEq(factory.gameCount(), 1);
assertEq(address(factory.disputeGameList(0)), address(proxy));
}
}
/**
/**
...
...
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