diff --git a/op-proposer/bindings/anchorstateregistry.go b/op-proposer/bindings/anchorstateregistry.go new file mode 100644 index 000000000..c166cc0e3 --- /dev/null +++ b/op-proposer/bindings/anchorstateregistry.go @@ -0,0 +1,498 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// AnchorStateRegistryStartingAnchorRoot is an auto generated low-level Go binding around an user-defined struct. +type AnchorStateRegistryStartingAnchorRoot struct { + GameType uint32 + OutputRoot OutputRoot +} + +// OutputRoot is an auto generated low-level Go binding around an user-defined struct. +type OutputRoot struct { + Root [32]byte + L2BlockNumber *big.Int +} + +// AnchorStateRegistryMetaData contains all meta data concerning the AnchorStateRegistry contract. +var AnchorStateRegistryMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_disputeGameFactory\",\"type\":\"address\",\"internalType\":\"contractIDisputeGameFactory\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"anchors\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"outputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDisputeGameFactory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_startingAnchorRoots\",\"type\":\"tuple[]\",\"internalType\":\"structAnchorStateRegistry.StartingAnchorRoot[]\",\"components\":[{\"name\":\"gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"outputRoot\",\"type\":\"tuple\",\"internalType\":\"structOutputRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tryUpdateAnchorState\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162000fc938038062000fc983398101604081905262000034916200026b565b6001600160a01b0381166080526040805160008082526020820190925262000081916200007a565b620000666200022d565b8152602001906001900390816200005c5790505b5062000088565b50620002db565b600054610100900460ff1615808015620000a95750600054600160ff909116105b80620000d95750620000c6306200021e60201b620007c61760201c565b158015620000d9575060005460ff166001145b620001415760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff19166001179055801562000165576000805461ff0019166101001790555b60005b8251811015620001d25760008382815181106200018957620001896200029d565b60209081029190910181015180820151905163ffffffff166000908152600180845260409091208251815591909201519101555080620001c981620002b3565b91505062000168565b5080156200021a576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b6040518060400160405280600063ffffffff16815260200162000266604051806040016040528060008019168152602001600081525090565b905290565b6000602082840312156200027e57600080fd5b81516001600160a01b03811681146200029657600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b600060018201620002d457634e487b7160e01b600052601160045260246000fd5b5060010190565b608051610ccb620002fe6000396000818161013101526102000152610ccb6000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063838c2d1e11610050578063838c2d1e146100fa578063c303f0df14610104578063f2b4e6171461011757600080fd5b806354fd4d501461006c5780637258a807146100be575b600080fd5b6100a86040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516100b5919061085c565b60405180910390f35b6100e56100cc36600461088b565b6001602081905260009182526040909120805491015482565b604080519283526020830191909152016100b5565b61010261015b565b005b61010261011236600461094f565b6105d4565b60405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100b5565b600033905060008060008373ffffffffffffffffffffffffffffffffffffffff1663fa24f7436040518163ffffffff1660e01b8152600401600060405180830381865afa1580156101b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526101f69190810190610a68565b92509250925060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635f0150cb8585856040518463ffffffff1660e01b815260040161025b93929190610b39565b6040805180830381865afa158015610277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061029b9190610b67565b5090508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f416e63686f72537461746552656769737472793a206661756c7420646973707560448201527f74652067616d65206e6f7420726567697374657265642077697468206661637460648201527f6f72790000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b600160008563ffffffff1663ffffffff168152602001908152602001600020600101548573ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104169190610bc7565b11610422575050505050565b60028573ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561046f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104939190610c0f565b60028111156104a4576104a4610be0565b146104b0575050505050565b60405180604001604052806105308773ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052d9190610bc7565b90565b81526020018673ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a49190610bc7565b905263ffffffff909416600090815260016020818152604090922086518155959091015194019390935550505050565b600054610100900460ff16158080156105f45750600054600160ff909116105b8061060e5750303b15801561060e575060005460ff166001145b61069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161037b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156106f857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60005b825181101561075e57600083828151811061071857610718610c30565b60209081029190910181015180820151905163ffffffff16600090815260018084526040909120825181559190920151910155508061075681610c5f565b9150506106fb565b5080156107c257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60005b838110156107fd5781810151838201526020016107e5565b8381111561080c576000848401525b50505050565b6000815180845261082a8160208601602086016107e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061086f6020830184610812565b9392505050565b63ffffffff8116811461088857600080fd5b50565b60006020828403121561089d57600080fd5b813561086f81610876565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156108fa576108fa6108a8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610947576109476108a8565b604052919050565b6000602080838503121561096257600080fd5b823567ffffffffffffffff8082111561097a57600080fd5b818501915085601f83011261098e57600080fd5b8135818111156109a0576109a06108a8565b6109ae848260051b01610900565b818152848101925060609182028401850191888311156109cd57600080fd5b938501935b82851015610a5c57848903818112156109eb5760008081fd5b6109f36108d7565b86356109fe81610876565b815260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301811315610a325760008081fd5b610a3a6108d7565b888a0135815290880135898201528189015285525093840193928501926109d2565b50979650505050505050565b600080600060608486031215610a7d57600080fd5b8351610a8881610876565b60208501516040860151919450925067ffffffffffffffff80821115610aad57600080fd5b818601915086601f830112610ac157600080fd5b815181811115610ad357610ad36108a8565b610b0460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610900565b9150808252876020828501011115610b1b57600080fd5b610b2c8160208401602086016107e2565b5080925050509250925092565b63ffffffff84168152826020820152606060408201526000610b5e6060830184610812565b95945050505050565b60008060408385031215610b7a57600080fd5b825173ffffffffffffffffffffffffffffffffffffffff81168114610b9e57600080fd5b602084015190925067ffffffffffffffff81168114610bbc57600080fd5b809150509250929050565b600060208284031215610bd957600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215610c2157600080fd5b81516003811061086f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610cb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c634300080f000a", +} + +// AnchorStateRegistryABI is the input ABI used to generate the binding from. +// Deprecated: Use AnchorStateRegistryMetaData.ABI instead. +var AnchorStateRegistryABI = AnchorStateRegistryMetaData.ABI + +// AnchorStateRegistryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use AnchorStateRegistryMetaData.Bin instead. +var AnchorStateRegistryBin = AnchorStateRegistryMetaData.Bin + +// DeployAnchorStateRegistry deploys a new Ethereum contract, binding an instance of AnchorStateRegistry to it. +func DeployAnchorStateRegistry(auth *bind.TransactOpts, backend bind.ContractBackend, _disputeGameFactory common.Address) (common.Address, *types.Transaction, *AnchorStateRegistry, error) { + parsed, err := AnchorStateRegistryMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(AnchorStateRegistryBin), backend, _disputeGameFactory) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &AnchorStateRegistry{AnchorStateRegistryCaller: AnchorStateRegistryCaller{contract: contract}, AnchorStateRegistryTransactor: AnchorStateRegistryTransactor{contract: contract}, AnchorStateRegistryFilterer: AnchorStateRegistryFilterer{contract: contract}}, nil +} + +// AnchorStateRegistry is an auto generated Go binding around an Ethereum contract. +type AnchorStateRegistry struct { + AnchorStateRegistryCaller // Read-only binding to the contract + AnchorStateRegistryTransactor // Write-only binding to the contract + AnchorStateRegistryFilterer // Log filterer for contract events +} + +// AnchorStateRegistryCaller is an auto generated read-only Go binding around an Ethereum contract. +type AnchorStateRegistryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AnchorStateRegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AnchorStateRegistryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AnchorStateRegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AnchorStateRegistryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AnchorStateRegistrySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AnchorStateRegistrySession struct { + Contract *AnchorStateRegistry // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AnchorStateRegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AnchorStateRegistryCallerSession struct { + Contract *AnchorStateRegistryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AnchorStateRegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AnchorStateRegistryTransactorSession struct { + Contract *AnchorStateRegistryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AnchorStateRegistryRaw is an auto generated low-level Go binding around an Ethereum contract. +type AnchorStateRegistryRaw struct { + Contract *AnchorStateRegistry // Generic contract binding to access the raw methods on +} + +// AnchorStateRegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AnchorStateRegistryCallerRaw struct { + Contract *AnchorStateRegistryCaller // Generic read-only contract binding to access the raw methods on +} + +// AnchorStateRegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AnchorStateRegistryTransactorRaw struct { + Contract *AnchorStateRegistryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAnchorStateRegistry creates a new instance of AnchorStateRegistry, bound to a specific deployed contract. +func NewAnchorStateRegistry(address common.Address, backend bind.ContractBackend) (*AnchorStateRegistry, error) { + contract, err := bindAnchorStateRegistry(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AnchorStateRegistry{AnchorStateRegistryCaller: AnchorStateRegistryCaller{contract: contract}, AnchorStateRegistryTransactor: AnchorStateRegistryTransactor{contract: contract}, AnchorStateRegistryFilterer: AnchorStateRegistryFilterer{contract: contract}}, nil +} + +// NewAnchorStateRegistryCaller creates a new read-only instance of AnchorStateRegistry, bound to a specific deployed contract. +func NewAnchorStateRegistryCaller(address common.Address, caller bind.ContractCaller) (*AnchorStateRegistryCaller, error) { + contract, err := bindAnchorStateRegistry(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AnchorStateRegistryCaller{contract: contract}, nil +} + +// NewAnchorStateRegistryTransactor creates a new write-only instance of AnchorStateRegistry, bound to a specific deployed contract. +func NewAnchorStateRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*AnchorStateRegistryTransactor, error) { + contract, err := bindAnchorStateRegistry(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AnchorStateRegistryTransactor{contract: contract}, nil +} + +// NewAnchorStateRegistryFilterer creates a new log filterer instance of AnchorStateRegistry, bound to a specific deployed contract. +func NewAnchorStateRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*AnchorStateRegistryFilterer, error) { + contract, err := bindAnchorStateRegistry(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AnchorStateRegistryFilterer{contract: contract}, nil +} + +// bindAnchorStateRegistry binds a generic wrapper to an already deployed contract. +func bindAnchorStateRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := AnchorStateRegistryMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AnchorStateRegistry *AnchorStateRegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AnchorStateRegistry.Contract.AnchorStateRegistryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AnchorStateRegistry *AnchorStateRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AnchorStateRegistry.Contract.AnchorStateRegistryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AnchorStateRegistry *AnchorStateRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AnchorStateRegistry.Contract.AnchorStateRegistryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AnchorStateRegistry *AnchorStateRegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AnchorStateRegistry.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AnchorStateRegistry *AnchorStateRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AnchorStateRegistry.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AnchorStateRegistry *AnchorStateRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AnchorStateRegistry.Contract.contract.Transact(opts, method, params...) +} + +// Anchors is a free data retrieval call binding the contract method 0x7258a807. +// +// Solidity: function anchors(uint32 ) view returns(bytes32 root, uint256 l2BlockNumber) +func (_AnchorStateRegistry *AnchorStateRegistryCaller) Anchors(opts *bind.CallOpts, arg0 uint32) (struct { + Root [32]byte + L2BlockNumber *big.Int +}, error) { + var out []interface{} + err := _AnchorStateRegistry.contract.Call(opts, &out, "anchors", arg0) + + outstruct := new(struct { + Root [32]byte + L2BlockNumber *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.Root = *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + outstruct.L2BlockNumber = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// Anchors is a free data retrieval call binding the contract method 0x7258a807. +// +// Solidity: function anchors(uint32 ) view returns(bytes32 root, uint256 l2BlockNumber) +func (_AnchorStateRegistry *AnchorStateRegistrySession) Anchors(arg0 uint32) (struct { + Root [32]byte + L2BlockNumber *big.Int +}, error) { + return _AnchorStateRegistry.Contract.Anchors(&_AnchorStateRegistry.CallOpts, arg0) +} + +// Anchors is a free data retrieval call binding the contract method 0x7258a807. +// +// Solidity: function anchors(uint32 ) view returns(bytes32 root, uint256 l2BlockNumber) +func (_AnchorStateRegistry *AnchorStateRegistryCallerSession) Anchors(arg0 uint32) (struct { + Root [32]byte + L2BlockNumber *big.Int +}, error) { + return _AnchorStateRegistry.Contract.Anchors(&_AnchorStateRegistry.CallOpts, arg0) +} + +// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. +// +// Solidity: function disputeGameFactory() view returns(address) +func (_AnchorStateRegistry *AnchorStateRegistryCaller) DisputeGameFactory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AnchorStateRegistry.contract.Call(opts, &out, "disputeGameFactory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. +// +// Solidity: function disputeGameFactory() view returns(address) +func (_AnchorStateRegistry *AnchorStateRegistrySession) DisputeGameFactory() (common.Address, error) { + return _AnchorStateRegistry.Contract.DisputeGameFactory(&_AnchorStateRegistry.CallOpts) +} + +// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. +// +// Solidity: function disputeGameFactory() view returns(address) +func (_AnchorStateRegistry *AnchorStateRegistryCallerSession) DisputeGameFactory() (common.Address, error) { + return _AnchorStateRegistry.Contract.DisputeGameFactory(&_AnchorStateRegistry.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_AnchorStateRegistry *AnchorStateRegistryCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _AnchorStateRegistry.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_AnchorStateRegistry *AnchorStateRegistrySession) Version() (string, error) { + return _AnchorStateRegistry.Contract.Version(&_AnchorStateRegistry.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_AnchorStateRegistry *AnchorStateRegistryCallerSession) Version() (string, error) { + return _AnchorStateRegistry.Contract.Version(&_AnchorStateRegistry.CallOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc303f0df. +// +// Solidity: function initialize((uint32,(bytes32,uint256))[] _startingAnchorRoots) returns() +func (_AnchorStateRegistry *AnchorStateRegistryTransactor) Initialize(opts *bind.TransactOpts, _startingAnchorRoots []AnchorStateRegistryStartingAnchorRoot) (*types.Transaction, error) { + return _AnchorStateRegistry.contract.Transact(opts, "initialize", _startingAnchorRoots) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc303f0df. +// +// Solidity: function initialize((uint32,(bytes32,uint256))[] _startingAnchorRoots) returns() +func (_AnchorStateRegistry *AnchorStateRegistrySession) Initialize(_startingAnchorRoots []AnchorStateRegistryStartingAnchorRoot) (*types.Transaction, error) { + return _AnchorStateRegistry.Contract.Initialize(&_AnchorStateRegistry.TransactOpts, _startingAnchorRoots) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc303f0df. +// +// Solidity: function initialize((uint32,(bytes32,uint256))[] _startingAnchorRoots) returns() +func (_AnchorStateRegistry *AnchorStateRegistryTransactorSession) Initialize(_startingAnchorRoots []AnchorStateRegistryStartingAnchorRoot) (*types.Transaction, error) { + return _AnchorStateRegistry.Contract.Initialize(&_AnchorStateRegistry.TransactOpts, _startingAnchorRoots) +} + +// TryUpdateAnchorState is a paid mutator transaction binding the contract method 0x838c2d1e. +// +// Solidity: function tryUpdateAnchorState() returns() +func (_AnchorStateRegistry *AnchorStateRegistryTransactor) TryUpdateAnchorState(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AnchorStateRegistry.contract.Transact(opts, "tryUpdateAnchorState") +} + +// TryUpdateAnchorState is a paid mutator transaction binding the contract method 0x838c2d1e. +// +// Solidity: function tryUpdateAnchorState() returns() +func (_AnchorStateRegistry *AnchorStateRegistrySession) TryUpdateAnchorState() (*types.Transaction, error) { + return _AnchorStateRegistry.Contract.TryUpdateAnchorState(&_AnchorStateRegistry.TransactOpts) +} + +// TryUpdateAnchorState is a paid mutator transaction binding the contract method 0x838c2d1e. +// +// Solidity: function tryUpdateAnchorState() returns() +func (_AnchorStateRegistry *AnchorStateRegistryTransactorSession) TryUpdateAnchorState() (*types.Transaction, error) { + return _AnchorStateRegistry.Contract.TryUpdateAnchorState(&_AnchorStateRegistry.TransactOpts) +} + +// AnchorStateRegistryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the AnchorStateRegistry contract. +type AnchorStateRegistryInitializedIterator struct { + Event *AnchorStateRegistryInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *AnchorStateRegistryInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(AnchorStateRegistryInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(AnchorStateRegistryInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *AnchorStateRegistryInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AnchorStateRegistryInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AnchorStateRegistryInitialized represents a Initialized event raised by the AnchorStateRegistry contract. +type AnchorStateRegistryInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_AnchorStateRegistry *AnchorStateRegistryFilterer) FilterInitialized(opts *bind.FilterOpts) (*AnchorStateRegistryInitializedIterator, error) { + + logs, sub, err := _AnchorStateRegistry.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &AnchorStateRegistryInitializedIterator{contract: _AnchorStateRegistry.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_AnchorStateRegistry *AnchorStateRegistryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *AnchorStateRegistryInitialized) (event.Subscription, error) { + + logs, sub, err := _AnchorStateRegistry.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(AnchorStateRegistryInitialized) + if err := _AnchorStateRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_AnchorStateRegistry *AnchorStateRegistryFilterer) ParseInitialized(log types.Log) (*AnchorStateRegistryInitialized, error) { + event := new(AnchorStateRegistryInitialized) + if err := _AnchorStateRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-proposer/bindings/disputegamefactory.go b/op-proposer/bindings/disputegamefactory.go index 1bfb6a73d..b0f071e83 100644 --- a/op-proposer/bindings/disputegamefactory.go +++ b/op-proposer/bindings/disputegamefactory.go @@ -26,6 +26,7 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // IDisputeGameFactoryGameSearchResult is an auto generated low-level Go binding around an user-defined struct. @@ -39,8 +40,8 @@ type IDisputeGameFactoryGameSearchResult struct { // DisputeGameFactoryMetaData contains all meta data concerning the DisputeGameFactory contract. var DisputeGameFactoryMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"create\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"proxy_\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"findLatestGames\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_n\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"games_\",\"type\":\"tuple[]\",\"internalType\":\"structIDisputeGameFactory.GameSearchResult[]\",\"components\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"metadata\",\"type\":\"bytes32\",\"internalType\":\"GameId\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"},{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameAtIndex\",\"inputs\":[{\"name\":\"_index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"timestamp_\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"},{\"name\":\"proxy_\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameCount\",\"inputs\":[],\"outputs\":[{\"name\":\"gameCount_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameImpls\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"games\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"proxy_\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"},{\"name\":\"timestamp_\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGameUUID\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"uuid_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"initBonds\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setImplementation\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_impl\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setInitBond\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_initBond\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DisputeGameCreated\",\"inputs\":[{\"name\":\"disputeProxy\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"gameType\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"GameType\"},{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"Claim\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ImplementationSet\",\"inputs\":[{\"name\":\"impl\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"gameType\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"GameType\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InitBondUpdated\",\"inputs\":[{\"name\":\"gameType\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"GameType\"},{\"name\":\"newBond\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"GameAlreadyExists\",\"inputs\":[{\"name\":\"uuid\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}]},{\"type\":\"error\",\"name\":\"IncorrectBondAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoImplementation\",\"inputs\":[{\"name\":\"gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"}]}]", - Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000292565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016260201b62000cdd1760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b6200010c62000171565b6200011782620001d9565b80156200015e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001cd5760405162461bcd60e51b815260206004820152602b60248201526000805160206200185283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b620001d76200022b565b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16620002875760405162461bcd60e51b815260206004820152602b60248201526000805160206200185283398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b620001d733620001d9565b6115b080620002a26000396000f3fe6080604052600436106100e85760003560e01c80636593dc6e1161008a57806396cd97201161005957806396cd972014610313578063bb8aa1fc14610333578063c4d66de814610394578063f2fde38b146103b457600080fd5b80636593dc6e14610293578063715018a6146102c057806382ecf2f6146102d55780638da5cb5b146102e857600080fd5b8063254bd683116100c6578063254bd6831461019c5780634d1975b4146101c957806354fd4d50146101e85780635f0150cb1461023e57600080fd5b806314f6b1a3146100ed5780631b685b9e1461010f5780631e3342401461017c575b600080fd5b3480156100f957600080fd5b5061010d6101083660046110bf565b6103d4565b005b34801561011b57600080fd5b5061015261012a3660046110f6565b60656020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061010d610197366004611111565b61045e565b3480156101a857600080fd5b506101bc6101b736600461113b565b6104aa565b60405161017391906111e8565b3480156101d557600080fd5b506068545b604051908152602001610173565b3480156101f457600080fd5b506102316040518060400160405280600581526020017f302e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161017391906112a5565b34801561024a57600080fd5b5061025e6102593660046112b8565b6106ee565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff909116602083015201610173565b34801561029f57600080fd5b506101da6102ae3660046110f6565b60666020526000908152604090205481565b3480156102cc57600080fd5b5061010d610741565b6101526102e33660046112b8565b610755565b3480156102f457600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff16610152565b34801561031f57600080fd5b506101da61032e3660046112b8565b6109ef565b34801561033f57600080fd5b5061035361034e36600461133f565b610a28565b6040805163ffffffff909416845267ffffffffffffffff909216602084015273ffffffffffffffffffffffffffffffffffffffff1690820152606001610173565b3480156103a057600080fd5b5061010d6103af366004611358565b610a8a565b3480156103c057600080fd5b5061010d6103cf366004611358565b610c26565b6103dc610cf9565b63ffffffff821660008181526065602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de91a35050565b610466610cf9565b63ffffffff8216600081815260666020526040808220849055518392917f74d6665c4b26d5596a5aa13d3014e0c06af4d322075a797f87b03cd4c5bc91ca91a35050565b606854606090831015806104bc575081155b6106e7575060408051600583901b8101602001909152825b8381116106e5576000606882815481106104f0576104f0611375565b600091825260209091200154905060e081901c60a082901c67ffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff831663ffffffff891683036106b6576001865101865260008173ffffffffffffffffffffffffffffffffffffffff1663609d33346040518163ffffffff1660e01b8152600401600060405180830381865afa15801561058a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d091908101906113d3565b905060008273ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561061f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610643919061149e565b90506040518060a001604052808881526020018781526020018567ffffffffffffffff168152602001828152602001838152508860018a5161068591906114b7565b8151811061069557610695611375565b6020026020010181905250888851106106b3575050505050506106e5565b50505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191506104d49050565b505b9392505050565b60008060006106ff878787876109ef565b60009081526067602052604090205473ffffffffffffffffffffffffffffffffffffffff81169860a09190911c67ffffffffffffffff16975095505050505050565b610749610cf9565b6107536000610d7a565b565b63ffffffff841660009081526065602052604081205473ffffffffffffffffffffffffffffffffffffffff16806107c5576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff871660048201526024015b60405180910390fd5b63ffffffff86166000908152606660205260409020543414610813576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006108206001436114b7565b40905061088a338783888860405160200161083f9594939291906114f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff841690610df1565b92508273ffffffffffffffffffffffffffffffffffffffff16638129fc1c346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050505060006108fb888888886109ef565b60008181526067602052604090205490915015610947576040517f014f6fe5000000000000000000000000000000000000000000000000000000008152600481018290526024016107bc565b60004260a01b60e08a901b178517600083815260676020526040808220839055606880546001810182559083527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977530183905551919250899163ffffffff8c169173ffffffffffffffffffffffffffffffffffffffff8916917f5b565efe82411da98814f356d0e7bcb8f0219b8d970307c5afb4a6903a8b2e359190a450505050949350505050565b600084848484604051602001610a089493929190611542565b604051602081830303815290604052805190602001209050949350505050565b6000806000610a7d60688581548110610a4357610a43611375565b906000526020600020015460e081901c9160a082901c67ffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff1690565b9196909550909350915050565b600054610100900460ff1615808015610aaa5750600054600160ff909116105b80610ac45750303b158015610ac4575060005460ff166001145b610b50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107bc565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610bae57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610bb6610dff565b610bbf82610d7a565b8015610c2257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610c2e610cf9565b73ffffffffffffffffffffffffffffffffffffffff8116610cd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107bc565b610cda81610d7a565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff163314610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107bc565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006106e760008484610e9e565b600054610100900460ff16610e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107bc565b610753610fe4565b600060608203516040830351602084035184518060208701018051600283016c5af43d3d93803e606057fd5bf3895289600d8a035278593da1005b363d3d373d3d3d3d610000806062363936013d738160481b1760218a03527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff603a8a035272fd6100003d81600a3d39f336602c57343d527f6062820160781b1761ff9e82106059018a03528060f01b8352606c8101604c8a038cf097505086610f6a5763301164256000526004601cfd5b905285527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09092019190915292915050565b600054610100900460ff1661107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107bc565b61075333610d7a565b803563ffffffff8116811461109857600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610cda57600080fd5b600080604083850312156110d257600080fd5b6110db83611084565b915060208301356110eb8161109d565b809150509250929050565b60006020828403121561110857600080fd5b6106e782611084565b6000806040838503121561112457600080fd5b61112d83611084565b946020939093013593505050565b60008060006060848603121561115057600080fd5b61115984611084565b95602085013595506040909401359392505050565b60005b83811015611189578181015183820152602001611171565b83811115611198576000848401525b50505050565b600081518084526111b681602086016020860161116e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611297578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001855281518051845287810151888501528681015167ffffffffffffffff16878501526060808201519085015260809081015160a0918501829052906112838186018361119e565b96890196945050509086019060010161120f565b509098975050505050505050565b6020815260006106e7602083018461119e565b600080600080606085870312156112ce57600080fd5b6112d785611084565b935060208501359250604085013567ffffffffffffffff808211156112fb57600080fd5b818701915087601f83011261130f57600080fd5b81358181111561131e57600080fd5b88602082850101111561133057600080fd5b95989497505060200194505050565b60006020828403121561135157600080fd5b5035919050565b60006020828403121561136a57600080fd5b81356106e78161109d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156113e557600080fd5b815167ffffffffffffffff808211156113fd57600080fd5b818401915084601f83011261141157600080fd5b815181811115611423576114236113a4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611469576114696113a4565b8160405282815287602084870101111561148257600080fd5b61149383602083016020880161116e565b979650505050505050565b6000602082840312156114b057600080fd5b5051919050565b6000828210156114f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008660601b1681528460148201528360348201528183605483013760009101605401908152949350505050565b63ffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101939250505056fea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"create\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"proxy_\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"createZkFaultDisputeGame\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_claims\",\"type\":\"bytes32[]\",\"internalType\":\"Claim[]\"},{\"name\":\"_parentGameIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_l2BlockNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"proxy_\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"findLatestGames\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_start\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_n\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"games_\",\"type\":\"tuple[]\",\"internalType\":\"structIDisputeGameFactory.GameSearchResult[]\",\"components\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"metadata\",\"type\":\"bytes32\",\"internalType\":\"GameId\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"},{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameAtIndex\",\"inputs\":[{\"name\":\"_index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"timestamp_\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"},{\"name\":\"proxy_\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameCount\",\"inputs\":[],\"outputs\":[{\"name\":\"gameCount_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameImpls\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"games\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"proxy_\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"},{\"name\":\"timestamp_\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGameUUID\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"uuid_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"initBonds\",\"inputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setImplementation\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_impl\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setInitBond\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_initBond\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DisputeGameCreated\",\"inputs\":[{\"name\":\"disputeProxy\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"gameType\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"GameType\"},{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"Claim\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ImplementationSet\",\"inputs\":[{\"name\":\"impl\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"gameType\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"GameType\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InitBondUpdated\",\"inputs\":[{\"name\":\"gameType\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"GameType\"},{\"name\":\"newBond\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ZkDisputeGameIndexUpdated\",\"inputs\":[{\"name\":\"gameIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"GameAlreadyExists\",\"inputs\":[{\"name\":\"uuid\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}]},{\"type\":\"error\",\"name\":\"IncorrectBondAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParentGameIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParentGameStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidParentGameType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoClaims\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoImplementation\",\"inputs\":[{\"name\":\"gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"}]}]", + Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000292565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016260201b6200107d1760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b6200010c62000171565b6200011782620001d9565b80156200015e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001cd5760405162461bcd60e51b815260206004820152602b6024820152600080516020620021f583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b620001d76200022b565b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16620002875760405162461bcd60e51b815260206004820152602b6024820152600080516020620021f583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b620001d733620001d9565b611f5380620002a26000396000f3fe6080604052600436106100f35760003560e01c8063715018a61161008a57806396cd97201161005957806396cd972014610331578063bb8aa1fc14610351578063c4d66de8146103b2578063f2fde38b146103d257600080fd5b8063715018a6146102cb57806377f63c84146102e057806382ecf2f6146102f35780638da5cb5b1461030657600080fd5b80634d1975b4116100c65780634d1975b4146101d457806354fd4d50146101f35780635f0150cb146102495780636593dc6e1461029e57600080fd5b806314f6b1a3146100f85780631b685b9e1461011a5780631e33424014610187578063254bd683146101a7575b600080fd5b34801561010457600080fd5b50610118610113366004611763565b6103f2565b005b34801561012657600080fd5b5061015d61013536600461179a565b60656020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561019357600080fd5b506101186101a23660046117b5565b61047c565b3480156101b357600080fd5b506101c76101c23660046117df565b6104c8565b60405161017e919061188c565b3480156101e057600080fd5b506068545b60405190815260200161017e565b3480156101ff57600080fd5b5061023c6040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161017e9190611949565b34801561025557600080fd5b506102696102643660046119a5565b61070c565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161017e565b3480156102aa57600080fd5b506101e56102b936600461179a565b60666020526000908152604090205481565b3480156102d757600080fd5b50610118610794565b61015d6102ee366004611a17565b6107a8565b61015d6103013660046119a5565b610ac1565b34801561031257600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661015d565b34801561033d57600080fd5b506101e561034c366004611bac565b610d8b565b34801561035d57600080fd5b5061037161036c366004611c46565b610dc1565b6040805163ffffffff909416845267ffffffffffffffff909216602084015273ffffffffffffffffffffffffffffffffffffffff169082015260600161017e565b3480156103be57600080fd5b506101186103cd366004611c5f565b610e2a565b3480156103de57600080fd5b506101186103ed366004611c5f565b610fc6565b6103fa611099565b63ffffffff821660008181526065602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de91a35050565b610484611099565b63ffffffff8216600081815260666020526040808220849055518392917f74d6665c4b26d5596a5aa13d3014e0c06af4d322075a797f87b03cd4c5bc91ca91a35050565b606854606090831015806104da575081155b610705575060408051600583901b8101602001909152825b8381116107035760006068828154811061050e5761050e611c7c565b600091825260209091200154905060e081901c60a082901c67ffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff831663ffffffff891683036106d4576001865101865260008173ffffffffffffffffffffffffffffffffffffffff1663609d33346040518163ffffffff1660e01b8152600401600060405180830381865afa1580156105a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105ee9190810190611cab565b905060008273ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106619190611d19565b90506040518060a001604052808881526020018781526020018567ffffffffffffffff168152602001828152602001838152508860018a516106a39190611d32565b815181106106b3576106b3611c7c565b6020026020010181905250888851106106d157505050505050610703565b50505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191506104f29050565b505b9392505050565b6000806000610752878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d8b92505050565b60009081526067602052604090205473ffffffffffffffffffffffffffffffffffffffff81169860a09190911c67ffffffffffffffff16975095505050505050565b61079c611099565b6107a6600061111a565b565b63ffffffff871660009081526065602052604081205473ffffffffffffffffffffffffffffffffffffffff16816107e28a8a8a8a86611191565b9050600089896107f3600182611d32565b81811061080257610802611c7c565b905060200201359050600061088a8867ffffffffffffffff168c8c8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8e018190048102820181019092528c815289935091508c908c908190840183828082843760009201919091525061143492505050565b90506108fc338361089c600143611d32565b40846040516020016108b19493929190611d70565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff861690611495565b9450600061090b8d8484610d8b565b6000818152606760205260409020549091501561095c576040517f014f6fe5000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b60004260a01b60e08f901b178717600083815260676020526040808220839055606880546001810182559083527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977530183905580517f8129fc1c000000000000000000000000000000000000000000000000000000008152905192935073ffffffffffffffffffffffffffffffffffffffff8a1692638129fc1c9234926004808201939182900301818588803b158015610a1457600080fd5b505af1158015610a28573d6000803e3d6000fd5b5050505050838e63ffffffff168873ffffffffffffffffffffffffffffffffffffffff167f5b565efe82411da98814f356d0e7bcb8f0219b8d970307c5afb4a6903a8b2e3560405160405180910390a4606854610a8790600190611d32565b6040517f7f249330224069fd9ed3c8a5c950189cfffe694f864f1cd53bb8813ebea28e5b90600090a2505050505050979650505050505050565b63ffffffff841660009081526065602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610b2c576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff87166004820152602401610953565b63ffffffff86166000908152606660205260409020543414610b7a576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b87600143611d32565b409050610bf13387838888604051602001610ba6959493929190611dc9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905273ffffffffffffffffffffffffffffffffffffffff841690611495565b92508273ffffffffffffffffffffffffffffffffffffffff16638129fc1c346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c3b57600080fd5b505af1158015610c4f573d6000803e3d6000fd5b50505050506000610c97888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610d8b92505050565b60008181526067602052604090205490915015610ce3576040517f014f6fe500000000000000000000000000000000000000000000000000000000815260048101829052602401610953565b60004260a01b60e08a901b178517600083815260676020526040808220839055606880546001810182559083527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977530183905551919250899163ffffffff8c169173ffffffffffffffffffffffffffffffffffffffff8916917f5b565efe82411da98814f356d0e7bcb8f0219b8d970307c5afb4a6903a8b2e359190a450505050949350505050565b6000838383604051602001610da293929190611e16565b6040516020818303038152906040528051906020012090509392505050565b600080600080600080610e1a60688881548110610de057610de0611c7c565b906000526020600020015460e081901c9160a082901c67ffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff1690565b9199909850909650945050505050565b600054610100900460ff1615808015610e4a5750600054600160ff909116105b80610e645750303b158015610e64575060005460ff166001145b610ef0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610953565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610f4e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610f566114a3565b610f5f8261111a565b8015610fc257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610fce611099565b73ffffffffffffffffffffffffffffffffffffffff8116611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610953565b61107a8161111a565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60335473ffffffffffffffffffffffffffffffffffffffff1633146107a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610953565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600073ffffffffffffffffffffffffffffffffffffffff82166111e8576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff87166004820152602401610953565b63ffffffff86166000908152606660205260409020543414611236576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000849003611271576040517fe120557300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff83811614801590611297575060685467ffffffffffffffff841610155b156112ce576040517fd56dc5b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff838116146114275760008061130260688667ffffffffffffffff1681548110610de057610de0611c7c565b92505091508092506113178863ffffffff1690565b63ffffffff1661132a8363ffffffff1690565b63ffffffff1614611367576040517f7af5628400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d89190611e6a565b60028111156113e9576113e9611e3b565b03611420576040517f4a99819c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505061142b565b5060005b95945050505050565b60606000846040516020016114499190611e8b565b60405160208183030381529060405280519060200120905085818651868660405160200161147b959493929190611ec1565b604051602081830303815290604052915050949350505050565b600061070560008484611542565b600054610100900460ff1661153a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610953565b6107a6611688565b600060608203516040830351602084035184518060208701018051600283016c5af43d3d93803e606057fd5bf3895289600d8a035278593da1005b363d3d373d3d3d3d610000806062363936013d738160481b1760218a03527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff603a8a035272fd6100003d81600a3d39f336602c57343d527f6062820160781b1761ff9e82106059018a03528060f01b8352606c8101604c8a038cf09750508661160e5763301164256000526004601cfd5b905285527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09092019190915292915050565b600054610100900460ff1661171f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610953565b6107a63361111a565b803563ffffffff8116811461173c57600080fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461107a57600080fd5b6000806040838503121561177657600080fd5b61177f83611728565b9150602083013561178f81611741565b809150509250929050565b6000602082840312156117ac57600080fd5b61070582611728565b600080604083850312156117c857600080fd5b6117d183611728565b946020939093013593505050565b6000806000606084860312156117f457600080fd5b6117fd84611728565b95602085013595506040909401359392505050565b60005b8381101561182d578181015183820152602001611815565b8381111561183c576000848401525b50505050565b6000815180845261185a816020860160208601611812565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561193b578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001855281518051845287810151888501528681015167ffffffffffffffff16878501526060808201519085015260809081015160a09185018290529061192781860183611842565b9689019694505050908601906001016118b3565b509098975050505050505050565b6020815260006107056020830184611842565b60008083601f84011261196e57600080fd5b50813567ffffffffffffffff81111561198657600080fd5b60208301915083602082850101111561199e57600080fd5b9250929050565b600080600080606085870312156119bb57600080fd5b6119c485611728565b935060208501359250604085013567ffffffffffffffff8111156119e757600080fd5b6119f38782880161195c565b95989497509550505050565b803567ffffffffffffffff8116811461173c57600080fd5b600080600080600080600060a0888a031215611a3257600080fd5b611a3b88611728565b9650602088013567ffffffffffffffff80821115611a5857600080fd5b818a0191508a601f830112611a6c57600080fd5b813581811115611a7b57600080fd5b8b60208260051b8501011115611a9057600080fd5b6020830198509650611aa460408b016119ff565b9550611ab260608b016119ff565b945060808a0135915080821115611ac857600080fd5b50611ad58a828b0161195c565b989b979a50959850939692959293505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611b5e57611b5e611ae8565b604052919050565b600067ffffffffffffffff821115611b8057611b80611ae8565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600080600060608486031215611bc157600080fd5b611bca84611728565b925060208401359150604084013567ffffffffffffffff811115611bed57600080fd5b8401601f81018613611bfe57600080fd5b8035611c11611c0c82611b66565b611b17565b818152876020838501011115611c2657600080fd5b816020840160208301376000602083830101528093505050509250925092565b600060208284031215611c5857600080fd5b5035919050565b600060208284031215611c7157600080fd5b813561070581611741565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215611cbd57600080fd5b815167ffffffffffffffff811115611cd457600080fd5b8201601f81018413611ce557600080fd5b8051611cf3611c0c82611b66565b818152856020838501011115611d0857600080fd5b61142b826020830160208601611812565b600060208284031215611d2b57600080fd5b5051919050565b600082821015611d6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008560601b16815283601482015282603482015260008251611db9816054850160208701611812565b9190910160540195945050505050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008660601b1681528460148201528360348201528183605483013760009101605401908152949350505050565b63ffffffff8416815282602082015260606040820152600061142b6060830184611842565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611e7c57600080fd5b81516003811061070557600080fd5b815160009082906020808601845b83811015611eb557815185529382019390820190600101611e99565b50929695505050505050565b8581528460208201527fffffffff000000000000000000000000000000000000000000000000000000008460e01b1660408201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008360601b16604482015260008251611f35816058850160208701611812565b91909101605801969550505050505056fea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", } // DisputeGameFactoryABI is the input ABI used to generate the binding from. @@ -165,11 +166,11 @@ func NewDisputeGameFactoryFilterer(address common.Address, filterer bind.Contrac // bindDisputeGameFactory binds a generic wrapper to an already deployed contract. func bindDisputeGameFactory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(DisputeGameFactoryABI)) + parsed, err := DisputeGameFactoryMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -543,6 +544,27 @@ func (_DisputeGameFactory *DisputeGameFactoryTransactorSession) Create(_gameType return _DisputeGameFactory.Contract.Create(&_DisputeGameFactory.TransactOpts, _gameType, _rootClaim, _extraData) } +// CreateZkFaultDisputeGame is a paid mutator transaction binding the contract method 0x77f63c84. +// +// Solidity: function createZkFaultDisputeGame(uint32 _gameType, bytes32[] _claims, uint64 _parentGameIndex, uint64 _l2BlockNumber, bytes _extraData) payable returns(address proxy_) +func (_DisputeGameFactory *DisputeGameFactoryTransactor) CreateZkFaultDisputeGame(opts *bind.TransactOpts, _gameType uint32, _claims [][32]byte, _parentGameIndex uint64, _l2BlockNumber uint64, _extraData []byte) (*types.Transaction, error) { + return _DisputeGameFactory.contract.Transact(opts, "createZkFaultDisputeGame", _gameType, _claims, _parentGameIndex, _l2BlockNumber, _extraData) +} + +// CreateZkFaultDisputeGame is a paid mutator transaction binding the contract method 0x77f63c84. +// +// Solidity: function createZkFaultDisputeGame(uint32 _gameType, bytes32[] _claims, uint64 _parentGameIndex, uint64 _l2BlockNumber, bytes _extraData) payable returns(address proxy_) +func (_DisputeGameFactory *DisputeGameFactorySession) CreateZkFaultDisputeGame(_gameType uint32, _claims [][32]byte, _parentGameIndex uint64, _l2BlockNumber uint64, _extraData []byte) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.CreateZkFaultDisputeGame(&_DisputeGameFactory.TransactOpts, _gameType, _claims, _parentGameIndex, _l2BlockNumber, _extraData) +} + +// CreateZkFaultDisputeGame is a paid mutator transaction binding the contract method 0x77f63c84. +// +// Solidity: function createZkFaultDisputeGame(uint32 _gameType, bytes32[] _claims, uint64 _parentGameIndex, uint64 _l2BlockNumber, bytes _extraData) payable returns(address proxy_) +func (_DisputeGameFactory *DisputeGameFactoryTransactorSession) CreateZkFaultDisputeGame(_gameType uint32, _claims [][32]byte, _parentGameIndex uint64, _l2BlockNumber uint64, _extraData []byte) (*types.Transaction, error) { + return _DisputeGameFactory.Contract.CreateZkFaultDisputeGame(&_DisputeGameFactory.TransactOpts, _gameType, _claims, _parentGameIndex, _l2BlockNumber, _extraData) +} + // Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. // // Solidity: function initialize(address _owner) returns() @@ -1402,3 +1424,147 @@ func (_DisputeGameFactory *DisputeGameFactoryFilterer) ParseOwnershipTransferred event.Raw = log return event, nil } + +// DisputeGameFactoryZkDisputeGameIndexUpdatedIterator is returned from FilterZkDisputeGameIndexUpdated and is used to iterate over the raw logs and unpacked data for ZkDisputeGameIndexUpdated events raised by the DisputeGameFactory contract. +type DisputeGameFactoryZkDisputeGameIndexUpdatedIterator struct { + Event *DisputeGameFactoryZkDisputeGameIndexUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *DisputeGameFactoryZkDisputeGameIndexUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(DisputeGameFactoryZkDisputeGameIndexUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(DisputeGameFactoryZkDisputeGameIndexUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *DisputeGameFactoryZkDisputeGameIndexUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *DisputeGameFactoryZkDisputeGameIndexUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// DisputeGameFactoryZkDisputeGameIndexUpdated represents a ZkDisputeGameIndexUpdated event raised by the DisputeGameFactory contract. +type DisputeGameFactoryZkDisputeGameIndexUpdated struct { + GameIndex *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterZkDisputeGameIndexUpdated is a free log retrieval operation binding the contract event 0x7f249330224069fd9ed3c8a5c950189cfffe694f864f1cd53bb8813ebea28e5b. +// +// Solidity: event ZkDisputeGameIndexUpdated(uint256 indexed gameIndex) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) FilterZkDisputeGameIndexUpdated(opts *bind.FilterOpts, gameIndex []*big.Int) (*DisputeGameFactoryZkDisputeGameIndexUpdatedIterator, error) { + + var gameIndexRule []interface{} + for _, gameIndexItem := range gameIndex { + gameIndexRule = append(gameIndexRule, gameIndexItem) + } + + logs, sub, err := _DisputeGameFactory.contract.FilterLogs(opts, "ZkDisputeGameIndexUpdated", gameIndexRule) + if err != nil { + return nil, err + } + return &DisputeGameFactoryZkDisputeGameIndexUpdatedIterator{contract: _DisputeGameFactory.contract, event: "ZkDisputeGameIndexUpdated", logs: logs, sub: sub}, nil +} + +// WatchZkDisputeGameIndexUpdated is a free log subscription operation binding the contract event 0x7f249330224069fd9ed3c8a5c950189cfffe694f864f1cd53bb8813ebea28e5b. +// +// Solidity: event ZkDisputeGameIndexUpdated(uint256 indexed gameIndex) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) WatchZkDisputeGameIndexUpdated(opts *bind.WatchOpts, sink chan<- *DisputeGameFactoryZkDisputeGameIndexUpdated, gameIndex []*big.Int) (event.Subscription, error) { + + var gameIndexRule []interface{} + for _, gameIndexItem := range gameIndex { + gameIndexRule = append(gameIndexRule, gameIndexItem) + } + + logs, sub, err := _DisputeGameFactory.contract.WatchLogs(opts, "ZkDisputeGameIndexUpdated", gameIndexRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(DisputeGameFactoryZkDisputeGameIndexUpdated) + if err := _DisputeGameFactory.contract.UnpackLog(event, "ZkDisputeGameIndexUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseZkDisputeGameIndexUpdated is a log parse operation binding the contract event 0x7f249330224069fd9ed3c8a5c950189cfffe694f864f1cd53bb8813ebea28e5b. +// +// Solidity: event ZkDisputeGameIndexUpdated(uint256 indexed gameIndex) +func (_DisputeGameFactory *DisputeGameFactoryFilterer) ParseZkDisputeGameIndexUpdated(log types.Log) (*DisputeGameFactoryZkDisputeGameIndexUpdated, error) { + event := new(DisputeGameFactoryZkDisputeGameIndexUpdated) + if err := _DisputeGameFactory.contract.UnpackLog(event, "ZkDisputeGameIndexUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-proposer/bindings/zkfaultdisputegame.go b/op-proposer/bindings/zkfaultdisputegame.go new file mode 100644 index 000000000..a479b5cdd --- /dev/null +++ b/op-proposer/bindings/zkfaultdisputegame.go @@ -0,0 +1,2148 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ZKFaultDisputeGameMetaData contains all meta data concerning the ZKFaultDisputeGame contract. +var ZKFaultDisputeGameMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"_maxGenerateProofDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_maxDetectFaultDuration\",\"type\":\"uint64\",\"internalType\":\"Duration\"},{\"name\":\"_PROPOSER_BOND\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_CHALLENGER_BOND\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_FEE_VAULT_ADDRESS\",\"type\":\"address\",\"internalType\":\"addresspayable\"},{\"name\":\"_CHALLENGER_REWARD_PERCENTAGE\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_PROVER_REWARD_PERCENTAGE\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_weth\",\"type\":\"address\",\"internalType\":\"contractIDelayedWETH\"},{\"name\":\"_anchorStateRegistry\",\"type\":\"address\",\"internalType\":\"contractIAnchorStateRegistry\"},{\"name\":\"_config\",\"type\":\"address\",\"internalType\":\"contractZkFaultProofConfig\"},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"CHALLENGER_BOND\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CHALLENGER_REWARD_PERCENTAGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FEE_VAULT_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"addresspayable\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PERCENTAGE_DIVISOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PROPOSER_BOND\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PROVER_REWARD_PERCENTAGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"anchorStateRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"registry_\",\"type\":\"address\",\"internalType\":\"contractIAnchorStateRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"challengeByProof\",\"inputs\":[{\"name\":\"_disputeClaimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_expectedClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"_originalClaims\",\"type\":\"bytes32[]\",\"internalType\":\"Claim[]\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeBySignal\",\"inputs\":[{\"name\":\"_disputeClaimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"challengedClaimIndexes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"challengedClaimIndexesLen\",\"inputs\":[],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"challengedClaims\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"challengedClaimsTimestamp\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"challengers\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"addresspayable\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimCredit\",\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimsHash\",\"inputs\":[],\"outputs\":[{\"name\":\"claimsHash_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"claimsLength\",\"inputs\":[],\"outputs\":[{\"name\":\"claimsLength_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"config\",\"inputs\":[],\"outputs\":[{\"name\":\"config_\",\"type\":\"address\",\"internalType\":\"contractZkFaultProofConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createdAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"credit\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"extraData\",\"inputs\":[],\"outputs\":[{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"faultProofProver\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"addresspayable\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameCreator\",\"inputs\":[],\"outputs\":[{\"name\":\"creator_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gameData\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"},{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"},{\"name\":\"extraData_\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameType\",\"inputs\":[],\"outputs\":[{\"name\":\"gameType_\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gameWinner\",\"inputs\":[],\"outputs\":[{\"name\":\"gameWinner_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"invalidChallengeClaimIndexes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"invalidChallengeClaims\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isChallengeSuccess\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1Head\",\"inputs\":[],\"outputs\":[{\"name\":\"l1Head_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2BlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"l2BlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"l2ChainId_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxClockDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"maxClockDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxDetectFaultDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"maxDetectFaultDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxGenerateProofDuration\",\"inputs\":[],\"outputs\":[{\"name\":\"maxGenerateProofDuration_\",\"type\":\"uint64\",\"internalType\":\"Duration\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"parentGameProxy\",\"inputs\":[],\"outputs\":[{\"name\":\"parentGameProxy_\",\"type\":\"address\",\"internalType\":\"contractIZkFaultDisputeGame\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"resolve\",\"inputs\":[],\"outputs\":[{\"name\":\"status_\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolveClaim\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resolvedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"Timestamp\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rootClaim\",\"inputs\":[],\"outputs\":[{\"name\":\"rootClaim_\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"startingBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"startingBlockNumber_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"startingOutputRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"Hash\"},{\"name\":\"l2BlockNumber\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"startingRootHash\",\"inputs\":[],\"outputs\":[{\"name\":\"startingRootHash_\",\"type\":\"bytes32\",\"internalType\":\"Hash\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"status\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumGameStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submitProofForSignal\",\"inputs\":[{\"name\":\"_disputeClaimIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_originalClaims\",\"type\":\"bytes32[]\",\"internalType\":\"Claim[]\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"successfulChallengeIndex\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validityProofProvers\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"addresspayable\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"weth\",\"inputs\":[],\"outputs\":[{\"name\":\"weth_\",\"type\":\"address\",\"internalType\":\"contractIDelayedWETH\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ChallengeBySignalCreated\",\"inputs\":[{\"name\":\"_disputeClaimIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Resolved\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumGameStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SubmitProofForSignalCreated\",\"inputs\":[{\"name\":\"_disputeClaimIndex\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AnchorRootNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BondTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChallengeAlreadyInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimAlreadyChallenged\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClaimNotChallenged\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockNotExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ClockTimeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameChallengeSucceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GameNotInProgress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IncorrectBondAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimsLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDisputeClaimIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidExpectedClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGameStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOriginClaims\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRewardPercentage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoCreditToClaim\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoExpiredChallenges\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ParentGameIsInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ParentGameNotResolved\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRootClaim\",\"inputs\":[{\"name\":\"rootClaim\",\"type\":\"bytes32\",\"internalType\":\"Claim\"}]},{\"type\":\"error\",\"name\":\"UnresolvedChallenges\",\"inputs\":[]}]", + Bin: "0x6102206040523480156200001257600080fd5b50604051620040b2380380620040b2833981016040819052620000359162000169565b63ffffffff8c1660e0526001600160401b03808c1660a0528a1660c0526101808990526101a08890526001600160a01b0387166101c0526101e086905261020085905261271062000087868862000251565b1115620000a757604051632b72818d60e01b815260040160405180910390fd5b620000c860c0516001600160401b03166200013160201b62000ea31760201c565b620000e960a0516001600160401b03166200013160201b62000ea31760201c565b620000f591906200026c565b6001600160401b03166080526001600160a01b0393841661010052918316610120529091166101405261016052506200029a9650505050505050565b90565b80516001600160401b03811681146200014c57600080fd5b919050565b80516001600160a01b03811681146200014c57600080fd5b6000806000806000806000806000806000806101808d8f0312156200018d57600080fd5b8c5163ffffffff81168114620001a257600080fd5b9b50620001b260208e0162000134565b9a50620001c260408e0162000134565b995060608d0151985060808d01519750620001e060a08e0162000151565b965060c08d0151955060e08d01519450620001ff6101008e0162000151565b9350620002106101208e0162000151565b9250620002216101408e0162000151565b91506101608d015190509295989b509295989b509295989b565b634e487b7160e01b600052601160045260246000fd5b600082198211156200026757620002676200023b565b500190565b60006001600160401b038281168482168083038211156200029157620002916200023b565b01949350505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051613c786200043a60003960008181610ae201528181611a5e0152611af60152600081816107d401526119a00152600081816103400152611c79015260008181610901015281816119070152818161193001528181611b17015261302401526000818161043f01528181611bed0152611c16015260008181610b13015281816110a90152612c7801526000818161079601528181610f7c015281816110cf01528181611163015281816111f9015281816112a60152818161269d01528181612b6901528181612c9e01528181612d3201528181612dc80152612e7501526000818161067601528181611d8e015261239a015260008181610542015281816117d701528181612188015281816127e70152818161307d015261366101526000818161093a01528181612356015261344c0152600081816105e001526131c201526000818161064301528181610dd70152611f5b015260008181610b46015281816116b1015261293d0152613c786000f3fe6080604052600436106103295760003560e01c80638129fc1c116101a5578063c94f598b116100ec578063d6ae3cd511610095578063e5d5f2e71161006f578063e5d5f2e714610b8a578063edcf913b14610ba4578063f1126de114610bdb578063fa24f74314610c1b57600080fd5b8063d6ae3cd514610b04578063dabd396d14610b37578063db8cb96214610b6a57600080fd5b8063cf09e0d0116100c6578063cf09e0d014610a82578063d5d44d8014610aa3578063d60d026d14610ad057600080fd5b8063c94f598b14610a27578063caf2976514610a3c578063cd4fb3fc14610a5257600080fd5b8063aa23fddc1161014e578063bcef3b5511610128578063bcef3b5514610964578063c1eee53e146109a4578063c6f647b8146109e757600080fd5b8063aa23fddc146108ac578063bb825afc146108ef578063bbdc02db1461092357600080fd5b80638b85902b1161017f5780638b85902b146108395780638e0386ba146108795780639ba51b731461089957600080fd5b80638129fc1c146107ba578063853b7f3f146107c2578063864cbb35146107f657600080fd5b80634bf8f32711610274578063609d33341161021d5780636b45ebcb116101f75780636b45ebcb1461070f57806370872aa5146107525780637720772d1461076757806379502c551461078757600080fd5b8063609d33341461069a57806360e27464146106af5780636361506d146106cf57600080fd5b806357da950e1161024e57806357da950e146106045780635ba42ed4146106345780635c0cba331461066757600080fd5b80634bf8f3271461056657806354fd4d501461057b57806357335705146105d157600080fd5b8063200d2ed2116102d657806335a66eba116102b057806335a66eba146104c657806337b1b229146104f35780633fc8cef31461053357600080fd5b8063200d2ed21461046157806325fc2ace1461049c5780632810e1d6146104b157600080fd5b80631ad7e0e2116103075780631ad7e0e2146103f65780631b720f3f146104185780631ef7a1f71461042d57600080fd5b8063126db75e1461032e57806319effeb41461038c5780631a27d158146103d2575b600080fd5b34801561033a57600080fd5b506103627f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561039857600080fd5b506000546103b99068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610383565b3480156103de57600080fd5b506103e8600b5481565b604051908152602001610383565b34801561040257600080fd5b506104166104113660046137a1565b610c3f565b005b34801561042457600080fd5b506003546103e8565b34801561043957600080fd5b506103e87f000000000000000000000000000000000000000000000000000000000000000081565b34801561046d57600080fd5b5060005461048f90700100000000000000000000000000000000900460ff1681565b604051610383919061384a565b3480156104a857600080fd5b50600c546103e8565b3480156104bd57600080fd5b5061048f6114bc565b3480156104d257600080fd5b506006546103629073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104ff57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c610362565b34801561053f57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610362565b34801561057257600080fd5b50610416611e16565b34801561058757600080fd5b506105c46040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161038391906138f6565b3480156105dd57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103b9565b34801561061057600080fd5b50600c54600d5461061f919082565b60408051928352602083019190915201610383565b34801561064057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103b9565b34801561067357600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610362565b3480156106a657600080fd5b506105c46120c9565b3480156106bb57600080fd5b506104166106ca366004613932565b6120d7565b3480156106db57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003603401356103e8565b34801561071b57600080fd5b5061036261072a36600461394f565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561075e57600080fd5b50600d546103e8565b34801561077357600080fd5b506103e861078236600461394f565b612283565b34801561079357600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610362565b6104166122a4565b3480156107ce57600080fd5b506103e87f000000000000000000000000000000000000000000000000000000000000000081565b34801561080257600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036098013560601c610362565b34801561084557600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003605401356103e8565b34801561088557600080fd5b50610416610894366004613968565b61287f565b6104166108a736600461394f565b613022565b3480156108b857600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036094013560e01c6103e8565b3480156108fb57600080fd5b506103e87f000000000000000000000000000000000000000000000000000000000000000081565b34801561092f57600080fd5b5060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610383565b34801561097057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003601401356103e8565b3480156109b057600080fd5b506103626109bf36600461394f565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156109f357600080fd5b50610a17610a0236600461394f565b60086020526000908152604090205460ff1681565b6040519015158152602001610383565b348015610a3357600080fd5b506103626133e3565b348015610a4857600080fd5b506103e861271081565b348015610a5e57600080fd5b50610a17610a6d36600461394f565b60026020526000908152604090205460ff1681565b348015610a8e57600080fd5b506000546103b99067ffffffffffffffff1681565b348015610aaf57600080fd5b506103e8610abe366004613932565b60016020526000908152604090205481565b348015610adc57600080fd5b506103e87f000000000000000000000000000000000000000000000000000000000000000081565b348015610b1057600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103e8565b348015610b4357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006103b9565b348015610b7657600080fd5b506103e8610b8536600461394f565b61343a565b348015610b9657600080fd5b50600a54610a179060ff1681565b348015610bb057600080fd5b506103b9610bbf36600461394f565b60046020526000908152604090205467ffffffffffffffff1681565b348015610be757600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003607401356103e8565b348015610c2757600080fd5b50610c3061344a565b604051610383939291906139eb565b60008054700100000000000000000000000000000000900460ff166002811115610c6b57610c6b61381b565b14610ca2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001610cac6134aa565b6002811115610cbd57610cbd61381b565b03610cf4576040517fee72c13500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5460ff1615610d31576040517fb5cb2c6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526002602052604090205460ff16610d79576040517fa0c6986900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526008602052604090205460ff1615610dc2576040517f40e2452900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085815260046020526040902054610e06907f00000000000000000000000000000000000000000000000000000000000000009067ffffffffffffffff16613586565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036094013560e01c8314610e6f576040517ff309b94f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ea6367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013590565b90565b8484604051602001610eb9929190613a19565b6040516020818303038152906040528051906020012014610f06576040517fb481ac5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828510610f3f576040517f1ddafb1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085600003610f525750600c54610f78565b8484610f5f600189613a77565b818110610f6e57610f6e613a8e565b9050602002013590505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166337416d826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110099190613abd565b611014886001613ad6565b61101e9190613aee565b600d5461102b9190613ad6565b905060006040518060e00160405280611072610ea360347ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b815260200184815260200161109c89898c81811061109257611092613a8e565b9050602002013590565b81526020018381526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636d9a1c8b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190613abd565b81526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632b31841e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f09190613abd565b815250905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fb3c491c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112869190613b2b565b90508073ffffffffffffffffffffffffffffffffffffffff166341493c607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c32e4e3e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113339190613abd565b8460405160200161138d9190600060e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b60405160208183030381529060405289896040518563ffffffff1660e01b81526004016113bd9493929190613b48565b60006040518083038186803b1580156113d557600080fd5b505afa1580156113e9573d6000803e3d6000fd5b50505060008a815260076020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055600890915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560098054918201815583527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af018c9055518b92507f4c8916d6922facb329b3384e6c6b8441702f97ae6320597e1c5d0c245e5402ec9190a2505050505050505050565b600080600054700100000000000000000000000000000000900460ff1660028111156114ea576114ea61381b565b14611521576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061152b6134aa565b905060008160028111156115415761154161381b565b03611578576040517f92c506ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600181600281111561158c5761158c61381b565b0361167a5760019150367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036098013560601c73ffffffffffffffffffffffffffffffffffffffff1663c94f598b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116349190613b2b565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790555b600a5460ff161561168a57600191505b600182600281111561169e5761169e61381b565b146117a65760005467ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116916116de911642613a77565b11611715576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b6003548110156117a057600860006003838154811061173957611739613a8e565b6000918252602080832090910154835282019290925260400190205460ff1661178e576040517f965022d700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061179881613bb3565b915050611718565b50600291505b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118579190613abd565b9050600183600281111561186d5761186d61381b565b03611ac65760005b60035481101561196a57600860006003838154811061189657611896613a8e565b6000918252602080832090910154835282019290925260400190205460ff166119585761192b60056000600384815481106118d3576118d3613a8e565b6000918252602080832090910154835282019290925260400190205473ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000000000000000000000000000000000000000000006135db565b6119557f000000000000000000000000000000000000000000000000000000000000000083613a77565b91505b8061196281613bb3565b915050611875565b50600a54819060ff1680156119915750600183600281111561198e5761198e61381b565b14155b15611a545760006127106119c57f000000000000000000000000000000000000000000000000000000000000000085613aee565b6119cf9190613beb565b600b5460009081526002602052604090205490915060ff1615611a2357600b54600090815260056020526040902054611a1e9073ffffffffffffffffffffffffffffffffffffffff16826135db565b611a46565b600654611a469073ffffffffffffffffffffffffffffffffffffffff16826135db565b611a508184613a77565b9250505b6000612710611a837f000000000000000000000000000000000000000000000000000000000000000084613aee565b611a8d9190613beb565b600654909150611ab39073ffffffffffffffffffffffffffffffffffffffff16826135db565b611abd8184613a77565b92505050611c74565b6002836002811115611ada57611ada61381b565b03611c425760005b600954811015611bb9576000612710611b3b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613aee565b611b459190613beb565b9050611b996007600060098581548110611b6157611b61613a8e565b6000918252602080832090910154835282019290925260400190205473ffffffffffffffffffffffffffffffffffffffff16826135db565b611ba38184613a77565b9250508080611bb190613bb3565b915050611ae2565b50611c11367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560601c7f00000000000000000000000000000000000000000000000000000000000000006135db565b611c3b7f000000000000000000000000000000000000000000000000000000000000000082613a77565b9050611c74565b6040517f8f8af25f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c9e7f0000000000000000000000000000000000000000000000000000000000000000826135db565b600080547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8116680100000000000000004267ffffffffffffffff160290811783558592917fffffffffffffffffffffffffffffff000000000000000000ffffffffffffffff167fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff90911617700100000000000000000000000000000000836002811115611d4e57611d4e61381b565b021790556002811115611d6357611d6361381b565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a27f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663838c2d1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611df457600080fd5b505af1158015611e08573d6000803e3d6000fd5b50505050505090565b905090565b60008054700100000000000000000000000000000000900460ff166002811115611e4257611e4261381b565b14611e79576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001611e836134aa565b6002811115611e9457611e9461381b565b03611ecb576040517fee72c13500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5460ff1615611f08576040517fb5cb2c6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b60035481101561208e576008600060038381548110611f2d57611f2d613a8e565b6000918252602080832090910154835282019290925260400190205460ff1661207c5767ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001667ffffffffffffffff166004600060038481548110611f9c57611f9c613a8e565b60009182526020808320909101548352820192909252604001902054611fcc9067ffffffffffffffff1642613a77565b111561207c57600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055600380548290811061201157612011613a8e565b6000918252602080832090910154600b8190558252600590526040902054600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556001915061208e565b8061208681613bb3565b915050611f0c565b50806120c6576040517f4d35406900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b6060611e11605460586136c1565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081208054908290559081900361213c576040517f17bfe5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a390604401600060405180830381600087803b1580156121cc57600080fd5b505af11580156121e0573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d806000811461223e576040519150601f19603f3d011682016040523d82523d6000602084013e612243565b606091505b505090508061227e576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6003818154811061229357600080fd5b600091825260209091200154905081565b60005471010000000000000000000000000000000000900460ff16156122f6576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036098013560601c6040517f7258a80700000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820152909150600090819073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637258a807906024016040805180830381865afa1580156123e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124049190613c26565b909250905073ffffffffffffffffffffffffffffffffffffffff83161561255c576124978373ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612473573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea39190613abd565b91508273ffffffffffffffffffffffffffffffffffffffff16638b85902b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125089190613abd565b905060016125146134aa565b60028111156125255761252561381b565b0361255c576040517fee72c13500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81612593576040517f6a6bc3b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152828152602001819052600c829055600d8190553660b2146125c657639824bdab6000526004601cfd5b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360540135818111612660576040517ff40239db000000000000000000000000000000000000000000000000000000008152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360140135600482015260240160405180910390fd5b61266a8282613a77565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036094013560e01c7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166337416d826040518163ffffffff1660e01b8152600401602060405180830381865afa158015612706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272a9190613abd565b6127349190613aee565b1461276b576040517ff309b94f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff1671010000000000000000000000000000000000178155604080517fd0e30db0000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263d0e30db09234926004808301939282900301818588803b15801561282c57600080fd5b505af1158015612840573d6000803e3d6000fd5b5050600080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000164267ffffffffffffffff1617905550505050505050565b60008054700100000000000000000000000000000000900460ff1660028111156128ab576128ab61381b565b146128e2576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016128ec6134aa565b60028111156128fd576128fd61381b565b03612934576040517fee72c13500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005461296c907f00000000000000000000000000000000000000000000000000000000000000009067ffffffffffffffff16613586565b600a5460ff16156129a9576040517fb5cb2c6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036094013560e01c8314612a12576040517ff309b94f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a46367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036074013590565b8484604051602001612a59929190613a19565b6040516020818303038152906040528051906020012014612aa6576040517fb481ac5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828610612adf576040517f1ddafb1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612af484848881811061109257611092613a8e565b8503612b2c576040517f2b9890d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600086600003612b3f5750600c54612b65565b8484612b4c60018a613a77565b818110612b5b57612b5b613a8e565b9050602002013590505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166337416d826040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf69190613abd565b612c01896001613ad6565b612c0b9190613aee565b600d54612c189190613ad6565b905060006040518060e00160405280612c5f610ea360347ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c9003013590565b81526020018481526020018981526020018381526020017f000000000000000000000000000000000000000000000000000000000000000081526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636d9a1c8b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2b9190613abd565b81526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632b31841e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbf9190613abd565b815250905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fb3c491c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e559190613b2b565b90508073ffffffffffffffffffffffffffffffffffffffff166341493c607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c32e4e3e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f029190613abd565b84604051602001612f5c9190600060e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b60405160208183030381529060405289896040518563ffffffff1660e01b8152600401612f8c9493929190613b48565b60006040518083038186803b158015612fa457600080fd5b505afa158015612fb8573d6000803e3d6000fd5b5050600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050600b989098555050600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000341461307b576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130e357600080fd5b505af11580156130f7573d6000803e3d6000fd5b506000935061310592505050565b600054700100000000000000000000000000000000900460ff1660028111156131305761313061381b565b14613167576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016131716134aa565b60028111156131825761318261381b565b036131b9576040517fee72c13500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546131f1907f00000000000000000000000000000000000000000000000000000000000000009067ffffffffffffffff16613586565b600a5460ff161561322e576040517fb5cb2c6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526002602052604090205460ff1615613277576040517f85c345b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036094013560e01c81106132e0576040517f1ddafb1c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915560048352818420805467ffffffffffffffff42167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909116179055600590925280832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163317905560038054928301815583527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9091018390555182917f5d0aa65efd6bc0b5d87c52082ef77498d3d4a1fcbc8b89a0ab8fd3a14ed8516191a250565b60006001600054700100000000000000000000000000000000900460ff1660028111156134125761341261381b565b1461341d5750600090565b5060065473ffffffffffffffffffffffffffffffffffffffff1690565b6009818154811061229357600080fd5b7f0000000000000000000000000000000000000000000000000000000000000000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036014013560606134a36120c9565b9050909192565b6000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036098013560601c6134e75750600290565b367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036098013560601c73ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015613562573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e119190613c4a565b67ffffffffffffffff8281169061359f90831642613a77565b11156135d7576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081208054839290613610908490613ad6565b90915550506040517f7eee288d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f00000000000000000000000000000000000000000000000000000000000000001690637eee288d90604401600060405180830381600087803b1580156136a557600080fd5b505af11580156136b9573d6000803e3d6000fd5b505050505050565b604051818152367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90038284820160208401378260208301016000815260208101604052505092915050565b60008083601f84011261372557600080fd5b50813567ffffffffffffffff81111561373d57600080fd5b6020830191508360208260051b850101111561375857600080fd5b9250929050565b60008083601f84011261377157600080fd5b50813567ffffffffffffffff81111561378957600080fd5b60208301915083602082850101111561375857600080fd5b6000806000806000606086880312156137b957600080fd5b85359450602086013567ffffffffffffffff808211156137d857600080fd5b6137e489838a01613713565b909650945060408801359150808211156137fd57600080fd5b5061380a8882890161375f565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310613885577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000815180845260005b818110156138b157602081850181015186830182015201613895565b818111156138c3576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613909602083018461388b565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146120c657600080fd5b60006020828403121561394457600080fd5b813561390981613910565b60006020828403121561396157600080fd5b5035919050565b6000806000806000806080878903121561398157600080fd5b8635955060208701359450604087013567ffffffffffffffff808211156139a757600080fd5b6139b38a838b01613713565b909650945060608901359150808211156139cc57600080fd5b506139d989828a0161375f565b979a9699509497509295939492505050565b63ffffffff84168152826020820152606060408201526000613a10606083018461388b565b95945050505050565b60008184825b85811015613a3d578135835260209283019290910190600101613a1f565b509095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015613a8957613a89613a48565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215613acf57600080fd5b5051919050565b60008219821115613ae957613ae9613a48565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b2657613b26613a48565b500290565b600060208284031215613b3d57600080fd5b815161390981613910565b848152606060208201526000613b61606083018661388b565b82810360408401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011682010191505095945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613be457613be4613a48565b5060010190565b600082613c21577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008060408385031215613c3957600080fd5b505080516020909101519092909150565b600060208284031215613c5c57600080fd5b81516003811061390957600080fdfea164736f6c634300080f000a", +} + +// ZKFaultDisputeGameABI is the input ABI used to generate the binding from. +// Deprecated: Use ZKFaultDisputeGameMetaData.ABI instead. +var ZKFaultDisputeGameABI = ZKFaultDisputeGameMetaData.ABI + +// ZKFaultDisputeGameBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ZKFaultDisputeGameMetaData.Bin instead. +var ZKFaultDisputeGameBin = ZKFaultDisputeGameMetaData.Bin + +// DeployZKFaultDisputeGame deploys a new Ethereum contract, binding an instance of ZKFaultDisputeGame to it. +func DeployZKFaultDisputeGame(auth *bind.TransactOpts, backend bind.ContractBackend, _gameType uint32, _maxGenerateProofDuration uint64, _maxDetectFaultDuration uint64, _PROPOSER_BOND *big.Int, _CHALLENGER_BOND *big.Int, _FEE_VAULT_ADDRESS common.Address, _CHALLENGER_REWARD_PERCENTAGE *big.Int, _PROVER_REWARD_PERCENTAGE *big.Int, _weth common.Address, _anchorStateRegistry common.Address, _config common.Address, _l2ChainId *big.Int) (common.Address, *types.Transaction, *ZKFaultDisputeGame, error) { + parsed, err := ZKFaultDisputeGameMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZKFaultDisputeGameBin), backend, _gameType, _maxGenerateProofDuration, _maxDetectFaultDuration, _PROPOSER_BOND, _CHALLENGER_BOND, _FEE_VAULT_ADDRESS, _CHALLENGER_REWARD_PERCENTAGE, _PROVER_REWARD_PERCENTAGE, _weth, _anchorStateRegistry, _config, _l2ChainId) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ZKFaultDisputeGame{ZKFaultDisputeGameCaller: ZKFaultDisputeGameCaller{contract: contract}, ZKFaultDisputeGameTransactor: ZKFaultDisputeGameTransactor{contract: contract}, ZKFaultDisputeGameFilterer: ZKFaultDisputeGameFilterer{contract: contract}}, nil +} + +// ZKFaultDisputeGame is an auto generated Go binding around an Ethereum contract. +type ZKFaultDisputeGame struct { + ZKFaultDisputeGameCaller // Read-only binding to the contract + ZKFaultDisputeGameTransactor // Write-only binding to the contract + ZKFaultDisputeGameFilterer // Log filterer for contract events +} + +// ZKFaultDisputeGameCaller is an auto generated read-only Go binding around an Ethereum contract. +type ZKFaultDisputeGameCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZKFaultDisputeGameTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ZKFaultDisputeGameTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZKFaultDisputeGameFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ZKFaultDisputeGameFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZKFaultDisputeGameSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ZKFaultDisputeGameSession struct { + Contract *ZKFaultDisputeGame // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ZKFaultDisputeGameCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ZKFaultDisputeGameCallerSession struct { + Contract *ZKFaultDisputeGameCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ZKFaultDisputeGameTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ZKFaultDisputeGameTransactorSession struct { + Contract *ZKFaultDisputeGameTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ZKFaultDisputeGameRaw is an auto generated low-level Go binding around an Ethereum contract. +type ZKFaultDisputeGameRaw struct { + Contract *ZKFaultDisputeGame // Generic contract binding to access the raw methods on +} + +// ZKFaultDisputeGameCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ZKFaultDisputeGameCallerRaw struct { + Contract *ZKFaultDisputeGameCaller // Generic read-only contract binding to access the raw methods on +} + +// ZKFaultDisputeGameTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ZKFaultDisputeGameTransactorRaw struct { + Contract *ZKFaultDisputeGameTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewZKFaultDisputeGame creates a new instance of ZKFaultDisputeGame, bound to a specific deployed contract. +func NewZKFaultDisputeGame(address common.Address, backend bind.ContractBackend) (*ZKFaultDisputeGame, error) { + contract, err := bindZKFaultDisputeGame(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ZKFaultDisputeGame{ZKFaultDisputeGameCaller: ZKFaultDisputeGameCaller{contract: contract}, ZKFaultDisputeGameTransactor: ZKFaultDisputeGameTransactor{contract: contract}, ZKFaultDisputeGameFilterer: ZKFaultDisputeGameFilterer{contract: contract}}, nil +} + +// NewZKFaultDisputeGameCaller creates a new read-only instance of ZKFaultDisputeGame, bound to a specific deployed contract. +func NewZKFaultDisputeGameCaller(address common.Address, caller bind.ContractCaller) (*ZKFaultDisputeGameCaller, error) { + contract, err := bindZKFaultDisputeGame(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ZKFaultDisputeGameCaller{contract: contract}, nil +} + +// NewZKFaultDisputeGameTransactor creates a new write-only instance of ZKFaultDisputeGame, bound to a specific deployed contract. +func NewZKFaultDisputeGameTransactor(address common.Address, transactor bind.ContractTransactor) (*ZKFaultDisputeGameTransactor, error) { + contract, err := bindZKFaultDisputeGame(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ZKFaultDisputeGameTransactor{contract: contract}, nil +} + +// NewZKFaultDisputeGameFilterer creates a new log filterer instance of ZKFaultDisputeGame, bound to a specific deployed contract. +func NewZKFaultDisputeGameFilterer(address common.Address, filterer bind.ContractFilterer) (*ZKFaultDisputeGameFilterer, error) { + contract, err := bindZKFaultDisputeGame(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ZKFaultDisputeGameFilterer{contract: contract}, nil +} + +// bindZKFaultDisputeGame binds a generic wrapper to an already deployed contract. +func bindZKFaultDisputeGame(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ZKFaultDisputeGameMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ZKFaultDisputeGame *ZKFaultDisputeGameRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZKFaultDisputeGame.Contract.ZKFaultDisputeGameCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ZKFaultDisputeGame *ZKFaultDisputeGameRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.ZKFaultDisputeGameTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZKFaultDisputeGame *ZKFaultDisputeGameRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.ZKFaultDisputeGameTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZKFaultDisputeGame.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.contract.Transact(opts, method, params...) +} + +// CHALLENGERBOND is a free data retrieval call binding the contract method 0xbb825afc. +// +// Solidity: function CHALLENGER_BOND() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) CHALLENGERBOND(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "CHALLENGER_BOND") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CHALLENGERBOND is a free data retrieval call binding the contract method 0xbb825afc. +// +// Solidity: function CHALLENGER_BOND() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) CHALLENGERBOND() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.CHALLENGERBOND(&_ZKFaultDisputeGame.CallOpts) +} + +// CHALLENGERBOND is a free data retrieval call binding the contract method 0xbb825afc. +// +// Solidity: function CHALLENGER_BOND() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) CHALLENGERBOND() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.CHALLENGERBOND(&_ZKFaultDisputeGame.CallOpts) +} + +// CHALLENGERREWARDPERCENTAGE is a free data retrieval call binding the contract method 0x853b7f3f. +// +// Solidity: function CHALLENGER_REWARD_PERCENTAGE() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) CHALLENGERREWARDPERCENTAGE(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "CHALLENGER_REWARD_PERCENTAGE") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// CHALLENGERREWARDPERCENTAGE is a free data retrieval call binding the contract method 0x853b7f3f. +// +// Solidity: function CHALLENGER_REWARD_PERCENTAGE() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) CHALLENGERREWARDPERCENTAGE() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.CHALLENGERREWARDPERCENTAGE(&_ZKFaultDisputeGame.CallOpts) +} + +// CHALLENGERREWARDPERCENTAGE is a free data retrieval call binding the contract method 0x853b7f3f. +// +// Solidity: function CHALLENGER_REWARD_PERCENTAGE() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) CHALLENGERREWARDPERCENTAGE() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.CHALLENGERREWARDPERCENTAGE(&_ZKFaultDisputeGame.CallOpts) +} + +// FEEVAULTADDRESS is a free data retrieval call binding the contract method 0x126db75e. +// +// Solidity: function FEE_VAULT_ADDRESS() view returns(address) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) FEEVAULTADDRESS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "FEE_VAULT_ADDRESS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// FEEVAULTADDRESS is a free data retrieval call binding the contract method 0x126db75e. +// +// Solidity: function FEE_VAULT_ADDRESS() view returns(address) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) FEEVAULTADDRESS() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.FEEVAULTADDRESS(&_ZKFaultDisputeGame.CallOpts) +} + +// FEEVAULTADDRESS is a free data retrieval call binding the contract method 0x126db75e. +// +// Solidity: function FEE_VAULT_ADDRESS() view returns(address) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) FEEVAULTADDRESS() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.FEEVAULTADDRESS(&_ZKFaultDisputeGame.CallOpts) +} + +// PERCENTAGEDIVISOR is a free data retrieval call binding the contract method 0xcaf29765. +// +// Solidity: function PERCENTAGE_DIVISOR() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) PERCENTAGEDIVISOR(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "PERCENTAGE_DIVISOR") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// PERCENTAGEDIVISOR is a free data retrieval call binding the contract method 0xcaf29765. +// +// Solidity: function PERCENTAGE_DIVISOR() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) PERCENTAGEDIVISOR() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.PERCENTAGEDIVISOR(&_ZKFaultDisputeGame.CallOpts) +} + +// PERCENTAGEDIVISOR is a free data retrieval call binding the contract method 0xcaf29765. +// +// Solidity: function PERCENTAGE_DIVISOR() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) PERCENTAGEDIVISOR() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.PERCENTAGEDIVISOR(&_ZKFaultDisputeGame.CallOpts) +} + +// PROPOSERBOND is a free data retrieval call binding the contract method 0x1ef7a1f7. +// +// Solidity: function PROPOSER_BOND() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) PROPOSERBOND(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "PROPOSER_BOND") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// PROPOSERBOND is a free data retrieval call binding the contract method 0x1ef7a1f7. +// +// Solidity: function PROPOSER_BOND() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) PROPOSERBOND() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.PROPOSERBOND(&_ZKFaultDisputeGame.CallOpts) +} + +// PROPOSERBOND is a free data retrieval call binding the contract method 0x1ef7a1f7. +// +// Solidity: function PROPOSER_BOND() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) PROPOSERBOND() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.PROPOSERBOND(&_ZKFaultDisputeGame.CallOpts) +} + +// PROVERREWARDPERCENTAGE is a free data retrieval call binding the contract method 0xd60d026d. +// +// Solidity: function PROVER_REWARD_PERCENTAGE() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) PROVERREWARDPERCENTAGE(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "PROVER_REWARD_PERCENTAGE") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// PROVERREWARDPERCENTAGE is a free data retrieval call binding the contract method 0xd60d026d. +// +// Solidity: function PROVER_REWARD_PERCENTAGE() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) PROVERREWARDPERCENTAGE() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.PROVERREWARDPERCENTAGE(&_ZKFaultDisputeGame.CallOpts) +} + +// PROVERREWARDPERCENTAGE is a free data retrieval call binding the contract method 0xd60d026d. +// +// Solidity: function PROVER_REWARD_PERCENTAGE() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) PROVERREWARDPERCENTAGE() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.PROVERREWARDPERCENTAGE(&_ZKFaultDisputeGame.CallOpts) +} + +// AnchorStateRegistry is a free data retrieval call binding the contract method 0x5c0cba33. +// +// Solidity: function anchorStateRegistry() view returns(address registry_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) AnchorStateRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "anchorStateRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// AnchorStateRegistry is a free data retrieval call binding the contract method 0x5c0cba33. +// +// Solidity: function anchorStateRegistry() view returns(address registry_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) AnchorStateRegistry() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.AnchorStateRegistry(&_ZKFaultDisputeGame.CallOpts) +} + +// AnchorStateRegistry is a free data retrieval call binding the contract method 0x5c0cba33. +// +// Solidity: function anchorStateRegistry() view returns(address registry_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) AnchorStateRegistry() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.AnchorStateRegistry(&_ZKFaultDisputeGame.CallOpts) +} + +// ChallengedClaimIndexes is a free data retrieval call binding the contract method 0x7720772d. +// +// Solidity: function challengedClaimIndexes(uint256 ) view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) ChallengedClaimIndexes(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "challengedClaimIndexes", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ChallengedClaimIndexes is a free data retrieval call binding the contract method 0x7720772d. +// +// Solidity: function challengedClaimIndexes(uint256 ) view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ChallengedClaimIndexes(arg0 *big.Int) (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.ChallengedClaimIndexes(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// ChallengedClaimIndexes is a free data retrieval call binding the contract method 0x7720772d. +// +// Solidity: function challengedClaimIndexes(uint256 ) view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) ChallengedClaimIndexes(arg0 *big.Int) (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.ChallengedClaimIndexes(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// ChallengedClaimIndexesLen is a free data retrieval call binding the contract method 0x1b720f3f. +// +// Solidity: function challengedClaimIndexesLen() view returns(uint256 len_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) ChallengedClaimIndexesLen(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "challengedClaimIndexesLen") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ChallengedClaimIndexesLen is a free data retrieval call binding the contract method 0x1b720f3f. +// +// Solidity: function challengedClaimIndexesLen() view returns(uint256 len_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ChallengedClaimIndexesLen() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.ChallengedClaimIndexesLen(&_ZKFaultDisputeGame.CallOpts) +} + +// ChallengedClaimIndexesLen is a free data retrieval call binding the contract method 0x1b720f3f. +// +// Solidity: function challengedClaimIndexesLen() view returns(uint256 len_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) ChallengedClaimIndexesLen() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.ChallengedClaimIndexesLen(&_ZKFaultDisputeGame.CallOpts) +} + +// ChallengedClaims is a free data retrieval call binding the contract method 0xcd4fb3fc. +// +// Solidity: function challengedClaims(uint256 ) view returns(bool) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) ChallengedClaims(opts *bind.CallOpts, arg0 *big.Int) (bool, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "challengedClaims", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// ChallengedClaims is a free data retrieval call binding the contract method 0xcd4fb3fc. +// +// Solidity: function challengedClaims(uint256 ) view returns(bool) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ChallengedClaims(arg0 *big.Int) (bool, error) { + return _ZKFaultDisputeGame.Contract.ChallengedClaims(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// ChallengedClaims is a free data retrieval call binding the contract method 0xcd4fb3fc. +// +// Solidity: function challengedClaims(uint256 ) view returns(bool) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) ChallengedClaims(arg0 *big.Int) (bool, error) { + return _ZKFaultDisputeGame.Contract.ChallengedClaims(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// ChallengedClaimsTimestamp is a free data retrieval call binding the contract method 0xedcf913b. +// +// Solidity: function challengedClaimsTimestamp(uint256 ) view returns(uint64) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) ChallengedClaimsTimestamp(opts *bind.CallOpts, arg0 *big.Int) (uint64, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "challengedClaimsTimestamp", arg0) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// ChallengedClaimsTimestamp is a free data retrieval call binding the contract method 0xedcf913b. +// +// Solidity: function challengedClaimsTimestamp(uint256 ) view returns(uint64) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ChallengedClaimsTimestamp(arg0 *big.Int) (uint64, error) { + return _ZKFaultDisputeGame.Contract.ChallengedClaimsTimestamp(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// ChallengedClaimsTimestamp is a free data retrieval call binding the contract method 0xedcf913b. +// +// Solidity: function challengedClaimsTimestamp(uint256 ) view returns(uint64) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) ChallengedClaimsTimestamp(arg0 *big.Int) (uint64, error) { + return _ZKFaultDisputeGame.Contract.ChallengedClaimsTimestamp(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// Challengers is a free data retrieval call binding the contract method 0x6b45ebcb. +// +// Solidity: function challengers(uint256 ) view returns(address) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) Challengers(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "challengers", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Challengers is a free data retrieval call binding the contract method 0x6b45ebcb. +// +// Solidity: function challengers(uint256 ) view returns(address) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) Challengers(arg0 *big.Int) (common.Address, error) { + return _ZKFaultDisputeGame.Contract.Challengers(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// Challengers is a free data retrieval call binding the contract method 0x6b45ebcb. +// +// Solidity: function challengers(uint256 ) view returns(address) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) Challengers(arg0 *big.Int) (common.Address, error) { + return _ZKFaultDisputeGame.Contract.Challengers(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// ClaimsHash is a free data retrieval call binding the contract method 0xf1126de1. +// +// Solidity: function claimsHash() pure returns(bytes32 claimsHash_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) ClaimsHash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "claimsHash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ClaimsHash is a free data retrieval call binding the contract method 0xf1126de1. +// +// Solidity: function claimsHash() pure returns(bytes32 claimsHash_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ClaimsHash() ([32]byte, error) { + return _ZKFaultDisputeGame.Contract.ClaimsHash(&_ZKFaultDisputeGame.CallOpts) +} + +// ClaimsHash is a free data retrieval call binding the contract method 0xf1126de1. +// +// Solidity: function claimsHash() pure returns(bytes32 claimsHash_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) ClaimsHash() ([32]byte, error) { + return _ZKFaultDisputeGame.Contract.ClaimsHash(&_ZKFaultDisputeGame.CallOpts) +} + +// ClaimsLength is a free data retrieval call binding the contract method 0xaa23fddc. +// +// Solidity: function claimsLength() pure returns(uint256 claimsLength_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) ClaimsLength(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "claimsLength") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ClaimsLength is a free data retrieval call binding the contract method 0xaa23fddc. +// +// Solidity: function claimsLength() pure returns(uint256 claimsLength_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ClaimsLength() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.ClaimsLength(&_ZKFaultDisputeGame.CallOpts) +} + +// ClaimsLength is a free data retrieval call binding the contract method 0xaa23fddc. +// +// Solidity: function claimsLength() pure returns(uint256 claimsLength_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) ClaimsLength() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.ClaimsLength(&_ZKFaultDisputeGame.CallOpts) +} + +// Config is a free data retrieval call binding the contract method 0x79502c55. +// +// Solidity: function config() view returns(address config_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) Config(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "config") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Config is a free data retrieval call binding the contract method 0x79502c55. +// +// Solidity: function config() view returns(address config_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) Config() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.Config(&_ZKFaultDisputeGame.CallOpts) +} + +// Config is a free data retrieval call binding the contract method 0x79502c55. +// +// Solidity: function config() view returns(address config_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) Config() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.Config(&_ZKFaultDisputeGame.CallOpts) +} + +// CreatedAt is a free data retrieval call binding the contract method 0xcf09e0d0. +// +// Solidity: function createdAt() view returns(uint64) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) CreatedAt(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "createdAt") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// CreatedAt is a free data retrieval call binding the contract method 0xcf09e0d0. +// +// Solidity: function createdAt() view returns(uint64) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) CreatedAt() (uint64, error) { + return _ZKFaultDisputeGame.Contract.CreatedAt(&_ZKFaultDisputeGame.CallOpts) +} + +// CreatedAt is a free data retrieval call binding the contract method 0xcf09e0d0. +// +// Solidity: function createdAt() view returns(uint64) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) CreatedAt() (uint64, error) { + return _ZKFaultDisputeGame.Contract.CreatedAt(&_ZKFaultDisputeGame.CallOpts) +} + +// Credit is a free data retrieval call binding the contract method 0xd5d44d80. +// +// Solidity: function credit(address ) view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) Credit(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "credit", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Credit is a free data retrieval call binding the contract method 0xd5d44d80. +// +// Solidity: function credit(address ) view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) Credit(arg0 common.Address) (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.Credit(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// Credit is a free data retrieval call binding the contract method 0xd5d44d80. +// +// Solidity: function credit(address ) view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) Credit(arg0 common.Address) (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.Credit(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// ExtraData is a free data retrieval call binding the contract method 0x609d3334. +// +// Solidity: function extraData() pure returns(bytes extraData_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) ExtraData(opts *bind.CallOpts) ([]byte, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "extraData") + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +// ExtraData is a free data retrieval call binding the contract method 0x609d3334. +// +// Solidity: function extraData() pure returns(bytes extraData_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ExtraData() ([]byte, error) { + return _ZKFaultDisputeGame.Contract.ExtraData(&_ZKFaultDisputeGame.CallOpts) +} + +// ExtraData is a free data retrieval call binding the contract method 0x609d3334. +// +// Solidity: function extraData() pure returns(bytes extraData_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) ExtraData() ([]byte, error) { + return _ZKFaultDisputeGame.Contract.ExtraData(&_ZKFaultDisputeGame.CallOpts) +} + +// FaultProofProver is a free data retrieval call binding the contract method 0x35a66eba. +// +// Solidity: function faultProofProver() view returns(address) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) FaultProofProver(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "faultProofProver") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// FaultProofProver is a free data retrieval call binding the contract method 0x35a66eba. +// +// Solidity: function faultProofProver() view returns(address) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) FaultProofProver() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.FaultProofProver(&_ZKFaultDisputeGame.CallOpts) +} + +// FaultProofProver is a free data retrieval call binding the contract method 0x35a66eba. +// +// Solidity: function faultProofProver() view returns(address) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) FaultProofProver() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.FaultProofProver(&_ZKFaultDisputeGame.CallOpts) +} + +// GameCreator is a free data retrieval call binding the contract method 0x37b1b229. +// +// Solidity: function gameCreator() pure returns(address creator_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) GameCreator(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "gameCreator") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GameCreator is a free data retrieval call binding the contract method 0x37b1b229. +// +// Solidity: function gameCreator() pure returns(address creator_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) GameCreator() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.GameCreator(&_ZKFaultDisputeGame.CallOpts) +} + +// GameCreator is a free data retrieval call binding the contract method 0x37b1b229. +// +// Solidity: function gameCreator() pure returns(address creator_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) GameCreator() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.GameCreator(&_ZKFaultDisputeGame.CallOpts) +} + +// GameData is a free data retrieval call binding the contract method 0xfa24f743. +// +// Solidity: function gameData() view returns(uint32 gameType_, bytes32 rootClaim_, bytes extraData_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) GameData(opts *bind.CallOpts) (struct { + GameType uint32 + RootClaim [32]byte + ExtraData []byte +}, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "gameData") + + outstruct := new(struct { + GameType uint32 + RootClaim [32]byte + ExtraData []byte + }) + if err != nil { + return *outstruct, err + } + + outstruct.GameType = *abi.ConvertType(out[0], new(uint32)).(*uint32) + outstruct.RootClaim = *abi.ConvertType(out[1], new([32]byte)).(*[32]byte) + outstruct.ExtraData = *abi.ConvertType(out[2], new([]byte)).(*[]byte) + + return *outstruct, err + +} + +// GameData is a free data retrieval call binding the contract method 0xfa24f743. +// +// Solidity: function gameData() view returns(uint32 gameType_, bytes32 rootClaim_, bytes extraData_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) GameData() (struct { + GameType uint32 + RootClaim [32]byte + ExtraData []byte +}, error) { + return _ZKFaultDisputeGame.Contract.GameData(&_ZKFaultDisputeGame.CallOpts) +} + +// GameData is a free data retrieval call binding the contract method 0xfa24f743. +// +// Solidity: function gameData() view returns(uint32 gameType_, bytes32 rootClaim_, bytes extraData_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) GameData() (struct { + GameType uint32 + RootClaim [32]byte + ExtraData []byte +}, error) { + return _ZKFaultDisputeGame.Contract.GameData(&_ZKFaultDisputeGame.CallOpts) +} + +// GameType is a free data retrieval call binding the contract method 0xbbdc02db. +// +// Solidity: function gameType() view returns(uint32 gameType_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) GameType(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "gameType") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// GameType is a free data retrieval call binding the contract method 0xbbdc02db. +// +// Solidity: function gameType() view returns(uint32 gameType_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) GameType() (uint32, error) { + return _ZKFaultDisputeGame.Contract.GameType(&_ZKFaultDisputeGame.CallOpts) +} + +// GameType is a free data retrieval call binding the contract method 0xbbdc02db. +// +// Solidity: function gameType() view returns(uint32 gameType_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) GameType() (uint32, error) { + return _ZKFaultDisputeGame.Contract.GameType(&_ZKFaultDisputeGame.CallOpts) +} + +// GameWinner is a free data retrieval call binding the contract method 0xc94f598b. +// +// Solidity: function gameWinner() view returns(address gameWinner_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) GameWinner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "gameWinner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GameWinner is a free data retrieval call binding the contract method 0xc94f598b. +// +// Solidity: function gameWinner() view returns(address gameWinner_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) GameWinner() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.GameWinner(&_ZKFaultDisputeGame.CallOpts) +} + +// GameWinner is a free data retrieval call binding the contract method 0xc94f598b. +// +// Solidity: function gameWinner() view returns(address gameWinner_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) GameWinner() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.GameWinner(&_ZKFaultDisputeGame.CallOpts) +} + +// InvalidChallengeClaimIndexes is a free data retrieval call binding the contract method 0xdb8cb962. +// +// Solidity: function invalidChallengeClaimIndexes(uint256 ) view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) InvalidChallengeClaimIndexes(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "invalidChallengeClaimIndexes", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// InvalidChallengeClaimIndexes is a free data retrieval call binding the contract method 0xdb8cb962. +// +// Solidity: function invalidChallengeClaimIndexes(uint256 ) view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) InvalidChallengeClaimIndexes(arg0 *big.Int) (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.InvalidChallengeClaimIndexes(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// InvalidChallengeClaimIndexes is a free data retrieval call binding the contract method 0xdb8cb962. +// +// Solidity: function invalidChallengeClaimIndexes(uint256 ) view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) InvalidChallengeClaimIndexes(arg0 *big.Int) (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.InvalidChallengeClaimIndexes(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// InvalidChallengeClaims is a free data retrieval call binding the contract method 0xc6f647b8. +// +// Solidity: function invalidChallengeClaims(uint256 ) view returns(bool) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) InvalidChallengeClaims(opts *bind.CallOpts, arg0 *big.Int) (bool, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "invalidChallengeClaims", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// InvalidChallengeClaims is a free data retrieval call binding the contract method 0xc6f647b8. +// +// Solidity: function invalidChallengeClaims(uint256 ) view returns(bool) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) InvalidChallengeClaims(arg0 *big.Int) (bool, error) { + return _ZKFaultDisputeGame.Contract.InvalidChallengeClaims(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// InvalidChallengeClaims is a free data retrieval call binding the contract method 0xc6f647b8. +// +// Solidity: function invalidChallengeClaims(uint256 ) view returns(bool) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) InvalidChallengeClaims(arg0 *big.Int) (bool, error) { + return _ZKFaultDisputeGame.Contract.InvalidChallengeClaims(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// IsChallengeSuccess is a free data retrieval call binding the contract method 0xe5d5f2e7. +// +// Solidity: function isChallengeSuccess() view returns(bool) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) IsChallengeSuccess(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "isChallengeSuccess") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsChallengeSuccess is a free data retrieval call binding the contract method 0xe5d5f2e7. +// +// Solidity: function isChallengeSuccess() view returns(bool) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) IsChallengeSuccess() (bool, error) { + return _ZKFaultDisputeGame.Contract.IsChallengeSuccess(&_ZKFaultDisputeGame.CallOpts) +} + +// IsChallengeSuccess is a free data retrieval call binding the contract method 0xe5d5f2e7. +// +// Solidity: function isChallengeSuccess() view returns(bool) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) IsChallengeSuccess() (bool, error) { + return _ZKFaultDisputeGame.Contract.IsChallengeSuccess(&_ZKFaultDisputeGame.CallOpts) +} + +// L1Head is a free data retrieval call binding the contract method 0x6361506d. +// +// Solidity: function l1Head() pure returns(bytes32 l1Head_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) L1Head(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "l1Head") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// L1Head is a free data retrieval call binding the contract method 0x6361506d. +// +// Solidity: function l1Head() pure returns(bytes32 l1Head_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) L1Head() ([32]byte, error) { + return _ZKFaultDisputeGame.Contract.L1Head(&_ZKFaultDisputeGame.CallOpts) +} + +// L1Head is a free data retrieval call binding the contract method 0x6361506d. +// +// Solidity: function l1Head() pure returns(bytes32 l1Head_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) L1Head() ([32]byte, error) { + return _ZKFaultDisputeGame.Contract.L1Head(&_ZKFaultDisputeGame.CallOpts) +} + +// L2BlockNumber is a free data retrieval call binding the contract method 0x8b85902b. +// +// Solidity: function l2BlockNumber() pure returns(uint256 l2BlockNumber_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) L2BlockNumber(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "l2BlockNumber") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2BlockNumber is a free data retrieval call binding the contract method 0x8b85902b. +// +// Solidity: function l2BlockNumber() pure returns(uint256 l2BlockNumber_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) L2BlockNumber() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.L2BlockNumber(&_ZKFaultDisputeGame.CallOpts) +} + +// L2BlockNumber is a free data retrieval call binding the contract method 0x8b85902b. +// +// Solidity: function l2BlockNumber() pure returns(uint256 l2BlockNumber_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) L2BlockNumber() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.L2BlockNumber(&_ZKFaultDisputeGame.CallOpts) +} + +// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. +// +// Solidity: function l2ChainId() view returns(uint256 l2ChainId_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) L2ChainId(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "l2ChainId") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. +// +// Solidity: function l2ChainId() view returns(uint256 l2ChainId_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) L2ChainId() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.L2ChainId(&_ZKFaultDisputeGame.CallOpts) +} + +// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. +// +// Solidity: function l2ChainId() view returns(uint256 l2ChainId_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) L2ChainId() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.L2ChainId(&_ZKFaultDisputeGame.CallOpts) +} + +// MaxClockDuration is a free data retrieval call binding the contract method 0xdabd396d. +// +// Solidity: function maxClockDuration() view returns(uint64 maxClockDuration_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) MaxClockDuration(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "maxClockDuration") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MaxClockDuration is a free data retrieval call binding the contract method 0xdabd396d. +// +// Solidity: function maxClockDuration() view returns(uint64 maxClockDuration_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) MaxClockDuration() (uint64, error) { + return _ZKFaultDisputeGame.Contract.MaxClockDuration(&_ZKFaultDisputeGame.CallOpts) +} + +// MaxClockDuration is a free data retrieval call binding the contract method 0xdabd396d. +// +// Solidity: function maxClockDuration() view returns(uint64 maxClockDuration_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) MaxClockDuration() (uint64, error) { + return _ZKFaultDisputeGame.Contract.MaxClockDuration(&_ZKFaultDisputeGame.CallOpts) +} + +// MaxDetectFaultDuration is a free data retrieval call binding the contract method 0x57335705. +// +// Solidity: function maxDetectFaultDuration() view returns(uint64 maxDetectFaultDuration_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) MaxDetectFaultDuration(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "maxDetectFaultDuration") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MaxDetectFaultDuration is a free data retrieval call binding the contract method 0x57335705. +// +// Solidity: function maxDetectFaultDuration() view returns(uint64 maxDetectFaultDuration_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) MaxDetectFaultDuration() (uint64, error) { + return _ZKFaultDisputeGame.Contract.MaxDetectFaultDuration(&_ZKFaultDisputeGame.CallOpts) +} + +// MaxDetectFaultDuration is a free data retrieval call binding the contract method 0x57335705. +// +// Solidity: function maxDetectFaultDuration() view returns(uint64 maxDetectFaultDuration_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) MaxDetectFaultDuration() (uint64, error) { + return _ZKFaultDisputeGame.Contract.MaxDetectFaultDuration(&_ZKFaultDisputeGame.CallOpts) +} + +// MaxGenerateProofDuration is a free data retrieval call binding the contract method 0x5ba42ed4. +// +// Solidity: function maxGenerateProofDuration() view returns(uint64 maxGenerateProofDuration_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) MaxGenerateProofDuration(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "maxGenerateProofDuration") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MaxGenerateProofDuration is a free data retrieval call binding the contract method 0x5ba42ed4. +// +// Solidity: function maxGenerateProofDuration() view returns(uint64 maxGenerateProofDuration_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) MaxGenerateProofDuration() (uint64, error) { + return _ZKFaultDisputeGame.Contract.MaxGenerateProofDuration(&_ZKFaultDisputeGame.CallOpts) +} + +// MaxGenerateProofDuration is a free data retrieval call binding the contract method 0x5ba42ed4. +// +// Solidity: function maxGenerateProofDuration() view returns(uint64 maxGenerateProofDuration_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) MaxGenerateProofDuration() (uint64, error) { + return _ZKFaultDisputeGame.Contract.MaxGenerateProofDuration(&_ZKFaultDisputeGame.CallOpts) +} + +// ParentGameProxy is a free data retrieval call binding the contract method 0x864cbb35. +// +// Solidity: function parentGameProxy() pure returns(address parentGameProxy_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) ParentGameProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "parentGameProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ParentGameProxy is a free data retrieval call binding the contract method 0x864cbb35. +// +// Solidity: function parentGameProxy() pure returns(address parentGameProxy_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ParentGameProxy() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.ParentGameProxy(&_ZKFaultDisputeGame.CallOpts) +} + +// ParentGameProxy is a free data retrieval call binding the contract method 0x864cbb35. +// +// Solidity: function parentGameProxy() pure returns(address parentGameProxy_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) ParentGameProxy() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.ParentGameProxy(&_ZKFaultDisputeGame.CallOpts) +} + +// ResolvedAt is a free data retrieval call binding the contract method 0x19effeb4. +// +// Solidity: function resolvedAt() view returns(uint64) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) ResolvedAt(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "resolvedAt") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// ResolvedAt is a free data retrieval call binding the contract method 0x19effeb4. +// +// Solidity: function resolvedAt() view returns(uint64) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ResolvedAt() (uint64, error) { + return _ZKFaultDisputeGame.Contract.ResolvedAt(&_ZKFaultDisputeGame.CallOpts) +} + +// ResolvedAt is a free data retrieval call binding the contract method 0x19effeb4. +// +// Solidity: function resolvedAt() view returns(uint64) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) ResolvedAt() (uint64, error) { + return _ZKFaultDisputeGame.Contract.ResolvedAt(&_ZKFaultDisputeGame.CallOpts) +} + +// RootClaim is a free data retrieval call binding the contract method 0xbcef3b55. +// +// Solidity: function rootClaim() pure returns(bytes32 rootClaim_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) RootClaim(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "rootClaim") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// RootClaim is a free data retrieval call binding the contract method 0xbcef3b55. +// +// Solidity: function rootClaim() pure returns(bytes32 rootClaim_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) RootClaim() ([32]byte, error) { + return _ZKFaultDisputeGame.Contract.RootClaim(&_ZKFaultDisputeGame.CallOpts) +} + +// RootClaim is a free data retrieval call binding the contract method 0xbcef3b55. +// +// Solidity: function rootClaim() pure returns(bytes32 rootClaim_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) RootClaim() ([32]byte, error) { + return _ZKFaultDisputeGame.Contract.RootClaim(&_ZKFaultDisputeGame.CallOpts) +} + +// StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. +// +// Solidity: function startingBlockNumber() view returns(uint256 startingBlockNumber_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) StartingBlockNumber(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "startingBlockNumber") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. +// +// Solidity: function startingBlockNumber() view returns(uint256 startingBlockNumber_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) StartingBlockNumber() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.StartingBlockNumber(&_ZKFaultDisputeGame.CallOpts) +} + +// StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. +// +// Solidity: function startingBlockNumber() view returns(uint256 startingBlockNumber_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) StartingBlockNumber() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.StartingBlockNumber(&_ZKFaultDisputeGame.CallOpts) +} + +// StartingOutputRoot is a free data retrieval call binding the contract method 0x57da950e. +// +// Solidity: function startingOutputRoot() view returns(bytes32 root, uint256 l2BlockNumber) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) StartingOutputRoot(opts *bind.CallOpts) (struct { + Root [32]byte + L2BlockNumber *big.Int +}, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "startingOutputRoot") + + outstruct := new(struct { + Root [32]byte + L2BlockNumber *big.Int + }) + if err != nil { + return *outstruct, err + } + + outstruct.Root = *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + outstruct.L2BlockNumber = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +// StartingOutputRoot is a free data retrieval call binding the contract method 0x57da950e. +// +// Solidity: function startingOutputRoot() view returns(bytes32 root, uint256 l2BlockNumber) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) StartingOutputRoot() (struct { + Root [32]byte + L2BlockNumber *big.Int +}, error) { + return _ZKFaultDisputeGame.Contract.StartingOutputRoot(&_ZKFaultDisputeGame.CallOpts) +} + +// StartingOutputRoot is a free data retrieval call binding the contract method 0x57da950e. +// +// Solidity: function startingOutputRoot() view returns(bytes32 root, uint256 l2BlockNumber) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) StartingOutputRoot() (struct { + Root [32]byte + L2BlockNumber *big.Int +}, error) { + return _ZKFaultDisputeGame.Contract.StartingOutputRoot(&_ZKFaultDisputeGame.CallOpts) +} + +// StartingRootHash is a free data retrieval call binding the contract method 0x25fc2ace. +// +// Solidity: function startingRootHash() view returns(bytes32 startingRootHash_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) StartingRootHash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "startingRootHash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// StartingRootHash is a free data retrieval call binding the contract method 0x25fc2ace. +// +// Solidity: function startingRootHash() view returns(bytes32 startingRootHash_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) StartingRootHash() ([32]byte, error) { + return _ZKFaultDisputeGame.Contract.StartingRootHash(&_ZKFaultDisputeGame.CallOpts) +} + +// StartingRootHash is a free data retrieval call binding the contract method 0x25fc2ace. +// +// Solidity: function startingRootHash() view returns(bytes32 startingRootHash_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) StartingRootHash() ([32]byte, error) { + return _ZKFaultDisputeGame.Contract.StartingRootHash(&_ZKFaultDisputeGame.CallOpts) +} + +// Status is a free data retrieval call binding the contract method 0x200d2ed2. +// +// Solidity: function status() view returns(uint8) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) Status(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "status") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Status is a free data retrieval call binding the contract method 0x200d2ed2. +// +// Solidity: function status() view returns(uint8) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) Status() (uint8, error) { + return _ZKFaultDisputeGame.Contract.Status(&_ZKFaultDisputeGame.CallOpts) +} + +// Status is a free data retrieval call binding the contract method 0x200d2ed2. +// +// Solidity: function status() view returns(uint8) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) Status() (uint8, error) { + return _ZKFaultDisputeGame.Contract.Status(&_ZKFaultDisputeGame.CallOpts) +} + +// SuccessfulChallengeIndex is a free data retrieval call binding the contract method 0x1a27d158. +// +// Solidity: function successfulChallengeIndex() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) SuccessfulChallengeIndex(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "successfulChallengeIndex") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// SuccessfulChallengeIndex is a free data retrieval call binding the contract method 0x1a27d158. +// +// Solidity: function successfulChallengeIndex() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) SuccessfulChallengeIndex() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.SuccessfulChallengeIndex(&_ZKFaultDisputeGame.CallOpts) +} + +// SuccessfulChallengeIndex is a free data retrieval call binding the contract method 0x1a27d158. +// +// Solidity: function successfulChallengeIndex() view returns(uint256) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) SuccessfulChallengeIndex() (*big.Int, error) { + return _ZKFaultDisputeGame.Contract.SuccessfulChallengeIndex(&_ZKFaultDisputeGame.CallOpts) +} + +// ValidityProofProvers is a free data retrieval call binding the contract method 0xc1eee53e. +// +// Solidity: function validityProofProvers(uint256 ) view returns(address) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) ValidityProofProvers(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "validityProofProvers", arg0) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ValidityProofProvers is a free data retrieval call binding the contract method 0xc1eee53e. +// +// Solidity: function validityProofProvers(uint256 ) view returns(address) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ValidityProofProvers(arg0 *big.Int) (common.Address, error) { + return _ZKFaultDisputeGame.Contract.ValidityProofProvers(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// ValidityProofProvers is a free data retrieval call binding the contract method 0xc1eee53e. +// +// Solidity: function validityProofProvers(uint256 ) view returns(address) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) ValidityProofProvers(arg0 *big.Int) (common.Address, error) { + return _ZKFaultDisputeGame.Contract.ValidityProofProvers(&_ZKFaultDisputeGame.CallOpts, arg0) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) Version() (string, error) { + return _ZKFaultDisputeGame.Contract.Version(&_ZKFaultDisputeGame.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) Version() (string, error) { + return _ZKFaultDisputeGame.Contract.Version(&_ZKFaultDisputeGame.CallOpts) +} + +// Weth is a free data retrieval call binding the contract method 0x3fc8cef3. +// +// Solidity: function weth() view returns(address weth_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCaller) Weth(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZKFaultDisputeGame.contract.Call(opts, &out, "weth") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Weth is a free data retrieval call binding the contract method 0x3fc8cef3. +// +// Solidity: function weth() view returns(address weth_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) Weth() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.Weth(&_ZKFaultDisputeGame.CallOpts) +} + +// Weth is a free data retrieval call binding the contract method 0x3fc8cef3. +// +// Solidity: function weth() view returns(address weth_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameCallerSession) Weth() (common.Address, error) { + return _ZKFaultDisputeGame.Contract.Weth(&_ZKFaultDisputeGame.CallOpts) +} + +// ChallengeByProof is a paid mutator transaction binding the contract method 0x8e0386ba. +// +// Solidity: function challengeByProof(uint256 _disputeClaimIndex, bytes32 _expectedClaim, bytes32[] _originalClaims, bytes _proof) returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactor) ChallengeByProof(opts *bind.TransactOpts, _disputeClaimIndex *big.Int, _expectedClaim [32]byte, _originalClaims [][32]byte, _proof []byte) (*types.Transaction, error) { + return _ZKFaultDisputeGame.contract.Transact(opts, "challengeByProof", _disputeClaimIndex, _expectedClaim, _originalClaims, _proof) +} + +// ChallengeByProof is a paid mutator transaction binding the contract method 0x8e0386ba. +// +// Solidity: function challengeByProof(uint256 _disputeClaimIndex, bytes32 _expectedClaim, bytes32[] _originalClaims, bytes _proof) returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ChallengeByProof(_disputeClaimIndex *big.Int, _expectedClaim [32]byte, _originalClaims [][32]byte, _proof []byte) (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.ChallengeByProof(&_ZKFaultDisputeGame.TransactOpts, _disputeClaimIndex, _expectedClaim, _originalClaims, _proof) +} + +// ChallengeByProof is a paid mutator transaction binding the contract method 0x8e0386ba. +// +// Solidity: function challengeByProof(uint256 _disputeClaimIndex, bytes32 _expectedClaim, bytes32[] _originalClaims, bytes _proof) returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactorSession) ChallengeByProof(_disputeClaimIndex *big.Int, _expectedClaim [32]byte, _originalClaims [][32]byte, _proof []byte) (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.ChallengeByProof(&_ZKFaultDisputeGame.TransactOpts, _disputeClaimIndex, _expectedClaim, _originalClaims, _proof) +} + +// ChallengeBySignal is a paid mutator transaction binding the contract method 0x9ba51b73. +// +// Solidity: function challengeBySignal(uint256 _disputeClaimIndex) payable returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactor) ChallengeBySignal(opts *bind.TransactOpts, _disputeClaimIndex *big.Int) (*types.Transaction, error) { + return _ZKFaultDisputeGame.contract.Transact(opts, "challengeBySignal", _disputeClaimIndex) +} + +// ChallengeBySignal is a paid mutator transaction binding the contract method 0x9ba51b73. +// +// Solidity: function challengeBySignal(uint256 _disputeClaimIndex) payable returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ChallengeBySignal(_disputeClaimIndex *big.Int) (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.ChallengeBySignal(&_ZKFaultDisputeGame.TransactOpts, _disputeClaimIndex) +} + +// ChallengeBySignal is a paid mutator transaction binding the contract method 0x9ba51b73. +// +// Solidity: function challengeBySignal(uint256 _disputeClaimIndex) payable returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactorSession) ChallengeBySignal(_disputeClaimIndex *big.Int) (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.ChallengeBySignal(&_ZKFaultDisputeGame.TransactOpts, _disputeClaimIndex) +} + +// ClaimCredit is a paid mutator transaction binding the contract method 0x60e27464. +// +// Solidity: function claimCredit(address _recipient) returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactor) ClaimCredit(opts *bind.TransactOpts, _recipient common.Address) (*types.Transaction, error) { + return _ZKFaultDisputeGame.contract.Transact(opts, "claimCredit", _recipient) +} + +// ClaimCredit is a paid mutator transaction binding the contract method 0x60e27464. +// +// Solidity: function claimCredit(address _recipient) returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ClaimCredit(_recipient common.Address) (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.ClaimCredit(&_ZKFaultDisputeGame.TransactOpts, _recipient) +} + +// ClaimCredit is a paid mutator transaction binding the contract method 0x60e27464. +// +// Solidity: function claimCredit(address _recipient) returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactorSession) ClaimCredit(_recipient common.Address) (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.ClaimCredit(&_ZKFaultDisputeGame.TransactOpts, _recipient) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() payable returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactor) Initialize(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZKFaultDisputeGame.contract.Transact(opts, "initialize") +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() payable returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) Initialize() (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.Initialize(&_ZKFaultDisputeGame.TransactOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// +// Solidity: function initialize() payable returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactorSession) Initialize() (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.Initialize(&_ZKFaultDisputeGame.TransactOpts) +} + +// Resolve is a paid mutator transaction binding the contract method 0x2810e1d6. +// +// Solidity: function resolve() returns(uint8 status_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactor) Resolve(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZKFaultDisputeGame.contract.Transact(opts, "resolve") +} + +// Resolve is a paid mutator transaction binding the contract method 0x2810e1d6. +// +// Solidity: function resolve() returns(uint8 status_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) Resolve() (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.Resolve(&_ZKFaultDisputeGame.TransactOpts) +} + +// Resolve is a paid mutator transaction binding the contract method 0x2810e1d6. +// +// Solidity: function resolve() returns(uint8 status_) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactorSession) Resolve() (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.Resolve(&_ZKFaultDisputeGame.TransactOpts) +} + +// ResolveClaim is a paid mutator transaction binding the contract method 0x4bf8f327. +// +// Solidity: function resolveClaim() returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactor) ResolveClaim(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZKFaultDisputeGame.contract.Transact(opts, "resolveClaim") +} + +// ResolveClaim is a paid mutator transaction binding the contract method 0x4bf8f327. +// +// Solidity: function resolveClaim() returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) ResolveClaim() (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.ResolveClaim(&_ZKFaultDisputeGame.TransactOpts) +} + +// ResolveClaim is a paid mutator transaction binding the contract method 0x4bf8f327. +// +// Solidity: function resolveClaim() returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactorSession) ResolveClaim() (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.ResolveClaim(&_ZKFaultDisputeGame.TransactOpts) +} + +// SubmitProofForSignal is a paid mutator transaction binding the contract method 0x1ad7e0e2. +// +// Solidity: function submitProofForSignal(uint256 _disputeClaimIndex, bytes32[] _originalClaims, bytes _proof) returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactor) SubmitProofForSignal(opts *bind.TransactOpts, _disputeClaimIndex *big.Int, _originalClaims [][32]byte, _proof []byte) (*types.Transaction, error) { + return _ZKFaultDisputeGame.contract.Transact(opts, "submitProofForSignal", _disputeClaimIndex, _originalClaims, _proof) +} + +// SubmitProofForSignal is a paid mutator transaction binding the contract method 0x1ad7e0e2. +// +// Solidity: function submitProofForSignal(uint256 _disputeClaimIndex, bytes32[] _originalClaims, bytes _proof) returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameSession) SubmitProofForSignal(_disputeClaimIndex *big.Int, _originalClaims [][32]byte, _proof []byte) (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.SubmitProofForSignal(&_ZKFaultDisputeGame.TransactOpts, _disputeClaimIndex, _originalClaims, _proof) +} + +// SubmitProofForSignal is a paid mutator transaction binding the contract method 0x1ad7e0e2. +// +// Solidity: function submitProofForSignal(uint256 _disputeClaimIndex, bytes32[] _originalClaims, bytes _proof) returns() +func (_ZKFaultDisputeGame *ZKFaultDisputeGameTransactorSession) SubmitProofForSignal(_disputeClaimIndex *big.Int, _originalClaims [][32]byte, _proof []byte) (*types.Transaction, error) { + return _ZKFaultDisputeGame.Contract.SubmitProofForSignal(&_ZKFaultDisputeGame.TransactOpts, _disputeClaimIndex, _originalClaims, _proof) +} + +// ZKFaultDisputeGameChallengeBySignalCreatedIterator is returned from FilterChallengeBySignalCreated and is used to iterate over the raw logs and unpacked data for ChallengeBySignalCreated events raised by the ZKFaultDisputeGame contract. +type ZKFaultDisputeGameChallengeBySignalCreatedIterator struct { + Event *ZKFaultDisputeGameChallengeBySignalCreated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZKFaultDisputeGameChallengeBySignalCreatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZKFaultDisputeGameChallengeBySignalCreated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZKFaultDisputeGameChallengeBySignalCreated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZKFaultDisputeGameChallengeBySignalCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZKFaultDisputeGameChallengeBySignalCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZKFaultDisputeGameChallengeBySignalCreated represents a ChallengeBySignalCreated event raised by the ZKFaultDisputeGame contract. +type ZKFaultDisputeGameChallengeBySignalCreated struct { + DisputeClaimIndex *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterChallengeBySignalCreated is a free log retrieval operation binding the contract event 0x5d0aa65efd6bc0b5d87c52082ef77498d3d4a1fcbc8b89a0ab8fd3a14ed85161. +// +// Solidity: event ChallengeBySignalCreated(uint256 indexed _disputeClaimIndex) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameFilterer) FilterChallengeBySignalCreated(opts *bind.FilterOpts, _disputeClaimIndex []*big.Int) (*ZKFaultDisputeGameChallengeBySignalCreatedIterator, error) { + + var _disputeClaimIndexRule []interface{} + for _, _disputeClaimIndexItem := range _disputeClaimIndex { + _disputeClaimIndexRule = append(_disputeClaimIndexRule, _disputeClaimIndexItem) + } + + logs, sub, err := _ZKFaultDisputeGame.contract.FilterLogs(opts, "ChallengeBySignalCreated", _disputeClaimIndexRule) + if err != nil { + return nil, err + } + return &ZKFaultDisputeGameChallengeBySignalCreatedIterator{contract: _ZKFaultDisputeGame.contract, event: "ChallengeBySignalCreated", logs: logs, sub: sub}, nil +} + +// WatchChallengeBySignalCreated is a free log subscription operation binding the contract event 0x5d0aa65efd6bc0b5d87c52082ef77498d3d4a1fcbc8b89a0ab8fd3a14ed85161. +// +// Solidity: event ChallengeBySignalCreated(uint256 indexed _disputeClaimIndex) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameFilterer) WatchChallengeBySignalCreated(opts *bind.WatchOpts, sink chan<- *ZKFaultDisputeGameChallengeBySignalCreated, _disputeClaimIndex []*big.Int) (event.Subscription, error) { + + var _disputeClaimIndexRule []interface{} + for _, _disputeClaimIndexItem := range _disputeClaimIndex { + _disputeClaimIndexRule = append(_disputeClaimIndexRule, _disputeClaimIndexItem) + } + + logs, sub, err := _ZKFaultDisputeGame.contract.WatchLogs(opts, "ChallengeBySignalCreated", _disputeClaimIndexRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZKFaultDisputeGameChallengeBySignalCreated) + if err := _ZKFaultDisputeGame.contract.UnpackLog(event, "ChallengeBySignalCreated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseChallengeBySignalCreated is a log parse operation binding the contract event 0x5d0aa65efd6bc0b5d87c52082ef77498d3d4a1fcbc8b89a0ab8fd3a14ed85161. +// +// Solidity: event ChallengeBySignalCreated(uint256 indexed _disputeClaimIndex) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameFilterer) ParseChallengeBySignalCreated(log types.Log) (*ZKFaultDisputeGameChallengeBySignalCreated, error) { + event := new(ZKFaultDisputeGameChallengeBySignalCreated) + if err := _ZKFaultDisputeGame.contract.UnpackLog(event, "ChallengeBySignalCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZKFaultDisputeGameResolvedIterator is returned from FilterResolved and is used to iterate over the raw logs and unpacked data for Resolved events raised by the ZKFaultDisputeGame contract. +type ZKFaultDisputeGameResolvedIterator struct { + Event *ZKFaultDisputeGameResolved // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZKFaultDisputeGameResolvedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZKFaultDisputeGameResolved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZKFaultDisputeGameResolved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZKFaultDisputeGameResolvedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZKFaultDisputeGameResolvedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZKFaultDisputeGameResolved represents a Resolved event raised by the ZKFaultDisputeGame contract. +type ZKFaultDisputeGameResolved struct { + Status uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterResolved is a free log retrieval operation binding the contract event 0x5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da60. +// +// Solidity: event Resolved(uint8 indexed status) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameFilterer) FilterResolved(opts *bind.FilterOpts, status []uint8) (*ZKFaultDisputeGameResolvedIterator, error) { + + var statusRule []interface{} + for _, statusItem := range status { + statusRule = append(statusRule, statusItem) + } + + logs, sub, err := _ZKFaultDisputeGame.contract.FilterLogs(opts, "Resolved", statusRule) + if err != nil { + return nil, err + } + return &ZKFaultDisputeGameResolvedIterator{contract: _ZKFaultDisputeGame.contract, event: "Resolved", logs: logs, sub: sub}, nil +} + +// WatchResolved is a free log subscription operation binding the contract event 0x5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da60. +// +// Solidity: event Resolved(uint8 indexed status) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameFilterer) WatchResolved(opts *bind.WatchOpts, sink chan<- *ZKFaultDisputeGameResolved, status []uint8) (event.Subscription, error) { + + var statusRule []interface{} + for _, statusItem := range status { + statusRule = append(statusRule, statusItem) + } + + logs, sub, err := _ZKFaultDisputeGame.contract.WatchLogs(opts, "Resolved", statusRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZKFaultDisputeGameResolved) + if err := _ZKFaultDisputeGame.contract.UnpackLog(event, "Resolved", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseResolved is a log parse operation binding the contract event 0x5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da60. +// +// Solidity: event Resolved(uint8 indexed status) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameFilterer) ParseResolved(log types.Log) (*ZKFaultDisputeGameResolved, error) { + event := new(ZKFaultDisputeGameResolved) + if err := _ZKFaultDisputeGame.contract.UnpackLog(event, "Resolved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZKFaultDisputeGameSubmitProofForSignalCreatedIterator is returned from FilterSubmitProofForSignalCreated and is used to iterate over the raw logs and unpacked data for SubmitProofForSignalCreated events raised by the ZKFaultDisputeGame contract. +type ZKFaultDisputeGameSubmitProofForSignalCreatedIterator struct { + Event *ZKFaultDisputeGameSubmitProofForSignalCreated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZKFaultDisputeGameSubmitProofForSignalCreatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZKFaultDisputeGameSubmitProofForSignalCreated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZKFaultDisputeGameSubmitProofForSignalCreated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZKFaultDisputeGameSubmitProofForSignalCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZKFaultDisputeGameSubmitProofForSignalCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZKFaultDisputeGameSubmitProofForSignalCreated represents a SubmitProofForSignalCreated event raised by the ZKFaultDisputeGame contract. +type ZKFaultDisputeGameSubmitProofForSignalCreated struct { + DisputeClaimIndex *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSubmitProofForSignalCreated is a free log retrieval operation binding the contract event 0x4c8916d6922facb329b3384e6c6b8441702f97ae6320597e1c5d0c245e5402ec. +// +// Solidity: event SubmitProofForSignalCreated(uint256 indexed _disputeClaimIndex) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameFilterer) FilterSubmitProofForSignalCreated(opts *bind.FilterOpts, _disputeClaimIndex []*big.Int) (*ZKFaultDisputeGameSubmitProofForSignalCreatedIterator, error) { + + var _disputeClaimIndexRule []interface{} + for _, _disputeClaimIndexItem := range _disputeClaimIndex { + _disputeClaimIndexRule = append(_disputeClaimIndexRule, _disputeClaimIndexItem) + } + + logs, sub, err := _ZKFaultDisputeGame.contract.FilterLogs(opts, "SubmitProofForSignalCreated", _disputeClaimIndexRule) + if err != nil { + return nil, err + } + return &ZKFaultDisputeGameSubmitProofForSignalCreatedIterator{contract: _ZKFaultDisputeGame.contract, event: "SubmitProofForSignalCreated", logs: logs, sub: sub}, nil +} + +// WatchSubmitProofForSignalCreated is a free log subscription operation binding the contract event 0x4c8916d6922facb329b3384e6c6b8441702f97ae6320597e1c5d0c245e5402ec. +// +// Solidity: event SubmitProofForSignalCreated(uint256 indexed _disputeClaimIndex) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameFilterer) WatchSubmitProofForSignalCreated(opts *bind.WatchOpts, sink chan<- *ZKFaultDisputeGameSubmitProofForSignalCreated, _disputeClaimIndex []*big.Int) (event.Subscription, error) { + + var _disputeClaimIndexRule []interface{} + for _, _disputeClaimIndexItem := range _disputeClaimIndex { + _disputeClaimIndexRule = append(_disputeClaimIndexRule, _disputeClaimIndexItem) + } + + logs, sub, err := _ZKFaultDisputeGame.contract.WatchLogs(opts, "SubmitProofForSignalCreated", _disputeClaimIndexRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZKFaultDisputeGameSubmitProofForSignalCreated) + if err := _ZKFaultDisputeGame.contract.UnpackLog(event, "SubmitProofForSignalCreated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseSubmitProofForSignalCreated is a log parse operation binding the contract event 0x4c8916d6922facb329b3384e6c6b8441702f97ae6320597e1c5d0c245e5402ec. +// +// Solidity: event SubmitProofForSignalCreated(uint256 indexed _disputeClaimIndex) +func (_ZKFaultDisputeGame *ZKFaultDisputeGameFilterer) ParseSubmitProofForSignalCreated(log types.Log) (*ZKFaultDisputeGameSubmitProofForSignalCreated, error) { + event := new(ZKFaultDisputeGameSubmitProofForSignalCreated) + if err := _ZKFaultDisputeGame.contract.UnpackLog(event, "SubmitProofForSignalCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-proposer/bindings/zkfaultproofconfig.go b/op-proposer/bindings/zkfaultproofconfig.go new file mode 100644 index 000000000..a5829f190 --- /dev/null +++ b/op-proposer/bindings/zkfaultproofconfig.go @@ -0,0 +1,1528 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ZKFaultProofConfigMetaData contains all meta data concerning the ZKFaultProofConfig contract. +var ZKFaultProofConfigMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"aggregationVkey\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blockDistance\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"chainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"historicBlockHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_blockDistance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_aggregationVkey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_rangeVkeyCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_verifierGateway\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_rollupConfigHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rangeVkeyCommitment\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rollupConfigHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAggregationVKey\",\"inputs\":[{\"name\":\"_aggregationVKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateRangeVkeyCommitment\",\"inputs\":[{\"name\":\"_rangeVkeyCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateRollupConfigHash\",\"inputs\":[{\"name\":\"_rollupConfigHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateVerifierGateway\",\"inputs\":[{\"name\":\"_verifierGateway\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifierGateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSP1VerifierGateway\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedAggregationVKey\",\"inputs\":[{\"name\":\"oldVkey\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newVkey\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedRangeVkeyCommitment\",\"inputs\":[{\"name\":\"oldRangeVkeyCommitment\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newRangeVkeyCommitment\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedRollupConfigHash\",\"inputs\":[{\"name\":\"oldRollupConfigHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newRollupConfigHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedVerifierGateway\",\"inputs\":[{\"name\":\"oldVerifierGateway\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newVerifierGateway\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", + Bin: "0x608060405234801561001057600080fd5b506109fd806100206000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063bc91ce3311610066578063bc91ce331461023a578063c32e4e3e1461024d578063f2fde38b14610256578063fb3c491c1461026957600080fd5b80638da5cb5b146101bf5780639a8a0592146101fe578063a196b52514610207578063a660743b1461022757600080fd5b806354fd4d50116100d357806354fd4d50146101525780636d9a1c8b1461019b578063715018a6146101a457806380fdb3e1146101ac57600080fd5b80631bdd450c146101055780632b31841e1461011a57806337416d82146101365780634418db5e1461013f575b600080fd5b6101186101133660046108b6565b610289565b005b61012360695481565b6040519081526020015b60405180910390f35b61012360655481565b61011861014d3660046108f8565b6102c6565b61018e6040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161012d919061091a565b61012360665481565b61011861033f565b6101186101ba3660046108b6565b610353565b60335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012d565b61012360675481565b6101236102153660046108b6565b606b6020526000908152604090205481565b61011861023536600461098d565b610390565b6101186102483660046108b6565b610590565b61012360685481565b6101186102643660046108f8565b6105cd565b606a546101d99073ffffffffffffffffffffffffffffffffffffffff1681565b610291610684565b6066819055604051819081907fda2f5f014ada26cff39a0f2a9dc6fa4fca1581376fc91ec09506c8fb8657bc3590600090a350565b6102ce610684565b606a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405181907f1379941631ff0ed9178ab16ab67a2e5db3aeada7f87e518f761e79c8e38377e390600090a350565b610347610684565b6103516000610705565b565b61035b610684565b6068819055604051819081907fb81f9c41933b730a90fba96ab14541de7cab774f762ea0c183054947bc49aee790600090a350565b600054610100900460ff16158080156103b05750600054600160ff909116105b806103ca5750303b1580156103ca575060005460ff166001145b61045b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156104b957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6104c161077c565b6104ca886105cd565b6065879055606786905560688590556069849055606a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790556066829055801561058657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b610598610684565b6069819055604051819081907f1035606f0606905acdf851342466a5b64406fa798b7440235cd5811cea2850fd90600090a350565b6105d5610684565b73ffffffffffffffffffffffffffffffffffffffff8116610678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610452565b61068181610705565b50565b60335473ffffffffffffffffffffffffffffffffffffffff163314610351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610452565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610452565b610351600054610100900460ff166108ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610452565b61035133610705565b6000602082840312156108c857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146108f357600080fd5b919050565b60006020828403121561090a57600080fd5b610913826108cf565b9392505050565b600060208083528351808285015260005b818110156109475785810183015185820160400152820161092b565b81811115610959576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600080600080600080600060e0888a0312156109a857600080fd5b6109b1886108cf565b9650602088013595506040880135945060608801359350608088013592506109db60a089016108cf565b915060c088013590509295989194975092955056fea164736f6c634300080f000a", +} + +// ZKFaultProofConfigABI is the input ABI used to generate the binding from. +// Deprecated: Use ZKFaultProofConfigMetaData.ABI instead. +var ZKFaultProofConfigABI = ZKFaultProofConfigMetaData.ABI + +// ZKFaultProofConfigBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ZKFaultProofConfigMetaData.Bin instead. +var ZKFaultProofConfigBin = ZKFaultProofConfigMetaData.Bin + +// DeployZKFaultProofConfig deploys a new Ethereum contract, binding an instance of ZKFaultProofConfig to it. +func DeployZKFaultProofConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ZKFaultProofConfig, error) { + parsed, err := ZKFaultProofConfigMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ZKFaultProofConfigBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ZKFaultProofConfig{ZKFaultProofConfigCaller: ZKFaultProofConfigCaller{contract: contract}, ZKFaultProofConfigTransactor: ZKFaultProofConfigTransactor{contract: contract}, ZKFaultProofConfigFilterer: ZKFaultProofConfigFilterer{contract: contract}}, nil +} + +// ZKFaultProofConfig is an auto generated Go binding around an Ethereum contract. +type ZKFaultProofConfig struct { + ZKFaultProofConfigCaller // Read-only binding to the contract + ZKFaultProofConfigTransactor // Write-only binding to the contract + ZKFaultProofConfigFilterer // Log filterer for contract events +} + +// ZKFaultProofConfigCaller is an auto generated read-only Go binding around an Ethereum contract. +type ZKFaultProofConfigCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZKFaultProofConfigTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ZKFaultProofConfigTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZKFaultProofConfigFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ZKFaultProofConfigFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ZKFaultProofConfigSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ZKFaultProofConfigSession struct { + Contract *ZKFaultProofConfig // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ZKFaultProofConfigCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ZKFaultProofConfigCallerSession struct { + Contract *ZKFaultProofConfigCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ZKFaultProofConfigTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ZKFaultProofConfigTransactorSession struct { + Contract *ZKFaultProofConfigTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ZKFaultProofConfigRaw is an auto generated low-level Go binding around an Ethereum contract. +type ZKFaultProofConfigRaw struct { + Contract *ZKFaultProofConfig // Generic contract binding to access the raw methods on +} + +// ZKFaultProofConfigCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ZKFaultProofConfigCallerRaw struct { + Contract *ZKFaultProofConfigCaller // Generic read-only contract binding to access the raw methods on +} + +// ZKFaultProofConfigTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ZKFaultProofConfigTransactorRaw struct { + Contract *ZKFaultProofConfigTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewZKFaultProofConfig creates a new instance of ZKFaultProofConfig, bound to a specific deployed contract. +func NewZKFaultProofConfig(address common.Address, backend bind.ContractBackend) (*ZKFaultProofConfig, error) { + contract, err := bindZKFaultProofConfig(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ZKFaultProofConfig{ZKFaultProofConfigCaller: ZKFaultProofConfigCaller{contract: contract}, ZKFaultProofConfigTransactor: ZKFaultProofConfigTransactor{contract: contract}, ZKFaultProofConfigFilterer: ZKFaultProofConfigFilterer{contract: contract}}, nil +} + +// NewZKFaultProofConfigCaller creates a new read-only instance of ZKFaultProofConfig, bound to a specific deployed contract. +func NewZKFaultProofConfigCaller(address common.Address, caller bind.ContractCaller) (*ZKFaultProofConfigCaller, error) { + contract, err := bindZKFaultProofConfig(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ZKFaultProofConfigCaller{contract: contract}, nil +} + +// NewZKFaultProofConfigTransactor creates a new write-only instance of ZKFaultProofConfig, bound to a specific deployed contract. +func NewZKFaultProofConfigTransactor(address common.Address, transactor bind.ContractTransactor) (*ZKFaultProofConfigTransactor, error) { + contract, err := bindZKFaultProofConfig(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ZKFaultProofConfigTransactor{contract: contract}, nil +} + +// NewZKFaultProofConfigFilterer creates a new log filterer instance of ZKFaultProofConfig, bound to a specific deployed contract. +func NewZKFaultProofConfigFilterer(address common.Address, filterer bind.ContractFilterer) (*ZKFaultProofConfigFilterer, error) { + contract, err := bindZKFaultProofConfig(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ZKFaultProofConfigFilterer{contract: contract}, nil +} + +// bindZKFaultProofConfig binds a generic wrapper to an already deployed contract. +func bindZKFaultProofConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ZKFaultProofConfigMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ZKFaultProofConfig *ZKFaultProofConfigRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZKFaultProofConfig.Contract.ZKFaultProofConfigCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ZKFaultProofConfig *ZKFaultProofConfigRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.ZKFaultProofConfigTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZKFaultProofConfig *ZKFaultProofConfigRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.ZKFaultProofConfigTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ZKFaultProofConfig *ZKFaultProofConfigCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ZKFaultProofConfig.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.contract.Transact(opts, method, params...) +} + +// AggregationVkey is a free data retrieval call binding the contract method 0xc32e4e3e. +// +// Solidity: function aggregationVkey() view returns(bytes32) +func (_ZKFaultProofConfig *ZKFaultProofConfigCaller) AggregationVkey(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZKFaultProofConfig.contract.Call(opts, &out, "aggregationVkey") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// AggregationVkey is a free data retrieval call binding the contract method 0xc32e4e3e. +// +// Solidity: function aggregationVkey() view returns(bytes32) +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) AggregationVkey() ([32]byte, error) { + return _ZKFaultProofConfig.Contract.AggregationVkey(&_ZKFaultProofConfig.CallOpts) +} + +// AggregationVkey is a free data retrieval call binding the contract method 0xc32e4e3e. +// +// Solidity: function aggregationVkey() view returns(bytes32) +func (_ZKFaultProofConfig *ZKFaultProofConfigCallerSession) AggregationVkey() ([32]byte, error) { + return _ZKFaultProofConfig.Contract.AggregationVkey(&_ZKFaultProofConfig.CallOpts) +} + +// BlockDistance is a free data retrieval call binding the contract method 0x37416d82. +// +// Solidity: function blockDistance() view returns(uint256) +func (_ZKFaultProofConfig *ZKFaultProofConfigCaller) BlockDistance(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultProofConfig.contract.Call(opts, &out, "blockDistance") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BlockDistance is a free data retrieval call binding the contract method 0x37416d82. +// +// Solidity: function blockDistance() view returns(uint256) +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) BlockDistance() (*big.Int, error) { + return _ZKFaultProofConfig.Contract.BlockDistance(&_ZKFaultProofConfig.CallOpts) +} + +// BlockDistance is a free data retrieval call binding the contract method 0x37416d82. +// +// Solidity: function blockDistance() view returns(uint256) +func (_ZKFaultProofConfig *ZKFaultProofConfigCallerSession) BlockDistance() (*big.Int, error) { + return _ZKFaultProofConfig.Contract.BlockDistance(&_ZKFaultProofConfig.CallOpts) +} + +// ChainId is a free data retrieval call binding the contract method 0x9a8a0592. +// +// Solidity: function chainId() view returns(uint256) +func (_ZKFaultProofConfig *ZKFaultProofConfigCaller) ChainId(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ZKFaultProofConfig.contract.Call(opts, &out, "chainId") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ChainId is a free data retrieval call binding the contract method 0x9a8a0592. +// +// Solidity: function chainId() view returns(uint256) +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) ChainId() (*big.Int, error) { + return _ZKFaultProofConfig.Contract.ChainId(&_ZKFaultProofConfig.CallOpts) +} + +// ChainId is a free data retrieval call binding the contract method 0x9a8a0592. +// +// Solidity: function chainId() view returns(uint256) +func (_ZKFaultProofConfig *ZKFaultProofConfigCallerSession) ChainId() (*big.Int, error) { + return _ZKFaultProofConfig.Contract.ChainId(&_ZKFaultProofConfig.CallOpts) +} + +// HistoricBlockHashes is a free data retrieval call binding the contract method 0xa196b525. +// +// Solidity: function historicBlockHashes(uint256 ) view returns(bytes32) +func (_ZKFaultProofConfig *ZKFaultProofConfigCaller) HistoricBlockHashes(opts *bind.CallOpts, arg0 *big.Int) ([32]byte, error) { + var out []interface{} + err := _ZKFaultProofConfig.contract.Call(opts, &out, "historicBlockHashes", arg0) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// HistoricBlockHashes is a free data retrieval call binding the contract method 0xa196b525. +// +// Solidity: function historicBlockHashes(uint256 ) view returns(bytes32) +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) HistoricBlockHashes(arg0 *big.Int) ([32]byte, error) { + return _ZKFaultProofConfig.Contract.HistoricBlockHashes(&_ZKFaultProofConfig.CallOpts, arg0) +} + +// HistoricBlockHashes is a free data retrieval call binding the contract method 0xa196b525. +// +// Solidity: function historicBlockHashes(uint256 ) view returns(bytes32) +func (_ZKFaultProofConfig *ZKFaultProofConfigCallerSession) HistoricBlockHashes(arg0 *big.Int) ([32]byte, error) { + return _ZKFaultProofConfig.Contract.HistoricBlockHashes(&_ZKFaultProofConfig.CallOpts, arg0) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ZKFaultProofConfig *ZKFaultProofConfigCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZKFaultProofConfig.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) Owner() (common.Address, error) { + return _ZKFaultProofConfig.Contract.Owner(&_ZKFaultProofConfig.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_ZKFaultProofConfig *ZKFaultProofConfigCallerSession) Owner() (common.Address, error) { + return _ZKFaultProofConfig.Contract.Owner(&_ZKFaultProofConfig.CallOpts) +} + +// RangeVkeyCommitment is a free data retrieval call binding the contract method 0x2b31841e. +// +// Solidity: function rangeVkeyCommitment() view returns(bytes32) +func (_ZKFaultProofConfig *ZKFaultProofConfigCaller) RangeVkeyCommitment(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZKFaultProofConfig.contract.Call(opts, &out, "rangeVkeyCommitment") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// RangeVkeyCommitment is a free data retrieval call binding the contract method 0x2b31841e. +// +// Solidity: function rangeVkeyCommitment() view returns(bytes32) +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) RangeVkeyCommitment() ([32]byte, error) { + return _ZKFaultProofConfig.Contract.RangeVkeyCommitment(&_ZKFaultProofConfig.CallOpts) +} + +// RangeVkeyCommitment is a free data retrieval call binding the contract method 0x2b31841e. +// +// Solidity: function rangeVkeyCommitment() view returns(bytes32) +func (_ZKFaultProofConfig *ZKFaultProofConfigCallerSession) RangeVkeyCommitment() ([32]byte, error) { + return _ZKFaultProofConfig.Contract.RangeVkeyCommitment(&_ZKFaultProofConfig.CallOpts) +} + +// RollupConfigHash is a free data retrieval call binding the contract method 0x6d9a1c8b. +// +// Solidity: function rollupConfigHash() view returns(bytes32) +func (_ZKFaultProofConfig *ZKFaultProofConfigCaller) RollupConfigHash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ZKFaultProofConfig.contract.Call(opts, &out, "rollupConfigHash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// RollupConfigHash is a free data retrieval call binding the contract method 0x6d9a1c8b. +// +// Solidity: function rollupConfigHash() view returns(bytes32) +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) RollupConfigHash() ([32]byte, error) { + return _ZKFaultProofConfig.Contract.RollupConfigHash(&_ZKFaultProofConfig.CallOpts) +} + +// RollupConfigHash is a free data retrieval call binding the contract method 0x6d9a1c8b. +// +// Solidity: function rollupConfigHash() view returns(bytes32) +func (_ZKFaultProofConfig *ZKFaultProofConfigCallerSession) RollupConfigHash() ([32]byte, error) { + return _ZKFaultProofConfig.Contract.RollupConfigHash(&_ZKFaultProofConfig.CallOpts) +} + +// VerifierGateway is a free data retrieval call binding the contract method 0xfb3c491c. +// +// Solidity: function verifierGateway() view returns(address) +func (_ZKFaultProofConfig *ZKFaultProofConfigCaller) VerifierGateway(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ZKFaultProofConfig.contract.Call(opts, &out, "verifierGateway") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// VerifierGateway is a free data retrieval call binding the contract method 0xfb3c491c. +// +// Solidity: function verifierGateway() view returns(address) +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) VerifierGateway() (common.Address, error) { + return _ZKFaultProofConfig.Contract.VerifierGateway(&_ZKFaultProofConfig.CallOpts) +} + +// VerifierGateway is a free data retrieval call binding the contract method 0xfb3c491c. +// +// Solidity: function verifierGateway() view returns(address) +func (_ZKFaultProofConfig *ZKFaultProofConfigCallerSession) VerifierGateway() (common.Address, error) { + return _ZKFaultProofConfig.Contract.VerifierGateway(&_ZKFaultProofConfig.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ZKFaultProofConfig *ZKFaultProofConfigCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ZKFaultProofConfig.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) Version() (string, error) { + return _ZKFaultProofConfig.Contract.Version(&_ZKFaultProofConfig.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ZKFaultProofConfig *ZKFaultProofConfigCallerSession) Version() (string, error) { + return _ZKFaultProofConfig.Contract.Version(&_ZKFaultProofConfig.CallOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0xa660743b. +// +// Solidity: function initialize(address _owner, uint256 _blockDistance, uint256 _chainId, bytes32 _aggregationVkey, bytes32 _rangeVkeyCommitment, address _verifierGateway, bytes32 _rollupConfigHash) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _blockDistance *big.Int, _chainId *big.Int, _aggregationVkey [32]byte, _rangeVkeyCommitment [32]byte, _verifierGateway common.Address, _rollupConfigHash [32]byte) (*types.Transaction, error) { + return _ZKFaultProofConfig.contract.Transact(opts, "initialize", _owner, _blockDistance, _chainId, _aggregationVkey, _rangeVkeyCommitment, _verifierGateway, _rollupConfigHash) +} + +// Initialize is a paid mutator transaction binding the contract method 0xa660743b. +// +// Solidity: function initialize(address _owner, uint256 _blockDistance, uint256 _chainId, bytes32 _aggregationVkey, bytes32 _rangeVkeyCommitment, address _verifierGateway, bytes32 _rollupConfigHash) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) Initialize(_owner common.Address, _blockDistance *big.Int, _chainId *big.Int, _aggregationVkey [32]byte, _rangeVkeyCommitment [32]byte, _verifierGateway common.Address, _rollupConfigHash [32]byte) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.Initialize(&_ZKFaultProofConfig.TransactOpts, _owner, _blockDistance, _chainId, _aggregationVkey, _rangeVkeyCommitment, _verifierGateway, _rollupConfigHash) +} + +// Initialize is a paid mutator transaction binding the contract method 0xa660743b. +// +// Solidity: function initialize(address _owner, uint256 _blockDistance, uint256 _chainId, bytes32 _aggregationVkey, bytes32 _rangeVkeyCommitment, address _verifierGateway, bytes32 _rollupConfigHash) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactorSession) Initialize(_owner common.Address, _blockDistance *big.Int, _chainId *big.Int, _aggregationVkey [32]byte, _rangeVkeyCommitment [32]byte, _verifierGateway common.Address, _rollupConfigHash [32]byte) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.Initialize(&_ZKFaultProofConfig.TransactOpts, _owner, _blockDistance, _chainId, _aggregationVkey, _rangeVkeyCommitment, _verifierGateway, _rollupConfigHash) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZKFaultProofConfig.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) RenounceOwnership() (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.RenounceOwnership(&_ZKFaultProofConfig.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.RenounceOwnership(&_ZKFaultProofConfig.TransactOpts) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _ZKFaultProofConfig.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.TransferOwnership(&_ZKFaultProofConfig.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.TransferOwnership(&_ZKFaultProofConfig.TransactOpts, newOwner) +} + +// UpdateAggregationVKey is a paid mutator transaction binding the contract method 0x80fdb3e1. +// +// Solidity: function updateAggregationVKey(bytes32 _aggregationVKey) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactor) UpdateAggregationVKey(opts *bind.TransactOpts, _aggregationVKey [32]byte) (*types.Transaction, error) { + return _ZKFaultProofConfig.contract.Transact(opts, "updateAggregationVKey", _aggregationVKey) +} + +// UpdateAggregationVKey is a paid mutator transaction binding the contract method 0x80fdb3e1. +// +// Solidity: function updateAggregationVKey(bytes32 _aggregationVKey) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) UpdateAggregationVKey(_aggregationVKey [32]byte) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.UpdateAggregationVKey(&_ZKFaultProofConfig.TransactOpts, _aggregationVKey) +} + +// UpdateAggregationVKey is a paid mutator transaction binding the contract method 0x80fdb3e1. +// +// Solidity: function updateAggregationVKey(bytes32 _aggregationVKey) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactorSession) UpdateAggregationVKey(_aggregationVKey [32]byte) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.UpdateAggregationVKey(&_ZKFaultProofConfig.TransactOpts, _aggregationVKey) +} + +// UpdateRangeVkeyCommitment is a paid mutator transaction binding the contract method 0xbc91ce33. +// +// Solidity: function updateRangeVkeyCommitment(bytes32 _rangeVkeyCommitment) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactor) UpdateRangeVkeyCommitment(opts *bind.TransactOpts, _rangeVkeyCommitment [32]byte) (*types.Transaction, error) { + return _ZKFaultProofConfig.contract.Transact(opts, "updateRangeVkeyCommitment", _rangeVkeyCommitment) +} + +// UpdateRangeVkeyCommitment is a paid mutator transaction binding the contract method 0xbc91ce33. +// +// Solidity: function updateRangeVkeyCommitment(bytes32 _rangeVkeyCommitment) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) UpdateRangeVkeyCommitment(_rangeVkeyCommitment [32]byte) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.UpdateRangeVkeyCommitment(&_ZKFaultProofConfig.TransactOpts, _rangeVkeyCommitment) +} + +// UpdateRangeVkeyCommitment is a paid mutator transaction binding the contract method 0xbc91ce33. +// +// Solidity: function updateRangeVkeyCommitment(bytes32 _rangeVkeyCommitment) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactorSession) UpdateRangeVkeyCommitment(_rangeVkeyCommitment [32]byte) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.UpdateRangeVkeyCommitment(&_ZKFaultProofConfig.TransactOpts, _rangeVkeyCommitment) +} + +// UpdateRollupConfigHash is a paid mutator transaction binding the contract method 0x1bdd450c. +// +// Solidity: function updateRollupConfigHash(bytes32 _rollupConfigHash) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactor) UpdateRollupConfigHash(opts *bind.TransactOpts, _rollupConfigHash [32]byte) (*types.Transaction, error) { + return _ZKFaultProofConfig.contract.Transact(opts, "updateRollupConfigHash", _rollupConfigHash) +} + +// UpdateRollupConfigHash is a paid mutator transaction binding the contract method 0x1bdd450c. +// +// Solidity: function updateRollupConfigHash(bytes32 _rollupConfigHash) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) UpdateRollupConfigHash(_rollupConfigHash [32]byte) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.UpdateRollupConfigHash(&_ZKFaultProofConfig.TransactOpts, _rollupConfigHash) +} + +// UpdateRollupConfigHash is a paid mutator transaction binding the contract method 0x1bdd450c. +// +// Solidity: function updateRollupConfigHash(bytes32 _rollupConfigHash) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactorSession) UpdateRollupConfigHash(_rollupConfigHash [32]byte) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.UpdateRollupConfigHash(&_ZKFaultProofConfig.TransactOpts, _rollupConfigHash) +} + +// UpdateVerifierGateway is a paid mutator transaction binding the contract method 0x4418db5e. +// +// Solidity: function updateVerifierGateway(address _verifierGateway) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactor) UpdateVerifierGateway(opts *bind.TransactOpts, _verifierGateway common.Address) (*types.Transaction, error) { + return _ZKFaultProofConfig.contract.Transact(opts, "updateVerifierGateway", _verifierGateway) +} + +// UpdateVerifierGateway is a paid mutator transaction binding the contract method 0x4418db5e. +// +// Solidity: function updateVerifierGateway(address _verifierGateway) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigSession) UpdateVerifierGateway(_verifierGateway common.Address) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.UpdateVerifierGateway(&_ZKFaultProofConfig.TransactOpts, _verifierGateway) +} + +// UpdateVerifierGateway is a paid mutator transaction binding the contract method 0x4418db5e. +// +// Solidity: function updateVerifierGateway(address _verifierGateway) returns() +func (_ZKFaultProofConfig *ZKFaultProofConfigTransactorSession) UpdateVerifierGateway(_verifierGateway common.Address) (*types.Transaction, error) { + return _ZKFaultProofConfig.Contract.UpdateVerifierGateway(&_ZKFaultProofConfig.TransactOpts, _verifierGateway) +} + +// ZKFaultProofConfigInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ZKFaultProofConfig contract. +type ZKFaultProofConfigInitializedIterator struct { + Event *ZKFaultProofConfigInitialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZKFaultProofConfigInitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZKFaultProofConfigInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZKFaultProofConfigInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZKFaultProofConfigInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZKFaultProofConfigInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZKFaultProofConfigInitialized represents a Initialized event raised by the ZKFaultProofConfig contract. +type ZKFaultProofConfigInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) FilterInitialized(opts *bind.FilterOpts) (*ZKFaultProofConfigInitializedIterator, error) { + + logs, sub, err := _ZKFaultProofConfig.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ZKFaultProofConfigInitializedIterator{contract: _ZKFaultProofConfig.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ZKFaultProofConfigInitialized) (event.Subscription, error) { + + logs, sub, err := _ZKFaultProofConfig.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZKFaultProofConfigInitialized) + if err := _ZKFaultProofConfig.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) ParseInitialized(log types.Log) (*ZKFaultProofConfigInitialized, error) { + event := new(ZKFaultProofConfigInitialized) + if err := _ZKFaultProofConfig.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZKFaultProofConfigOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ZKFaultProofConfig contract. +type ZKFaultProofConfigOwnershipTransferredIterator struct { + Event *ZKFaultProofConfigOwnershipTransferred // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZKFaultProofConfigOwnershipTransferredIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZKFaultProofConfigOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZKFaultProofConfigOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZKFaultProofConfigOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZKFaultProofConfigOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZKFaultProofConfigOwnershipTransferred represents a OwnershipTransferred event raised by the ZKFaultProofConfig contract. +type ZKFaultProofConfigOwnershipTransferred struct { + PreviousOwner common.Address + NewOwner common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ZKFaultProofConfigOwnershipTransferredIterator, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ZKFaultProofConfig.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &ZKFaultProofConfigOwnershipTransferredIterator{contract: _ZKFaultProofConfig.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ZKFaultProofConfigOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { + + var previousOwnerRule []interface{} + for _, previousOwnerItem := range previousOwner { + previousOwnerRule = append(previousOwnerRule, previousOwnerItem) + } + var newOwnerRule []interface{} + for _, newOwnerItem := range newOwner { + newOwnerRule = append(newOwnerRule, newOwnerItem) + } + + logs, sub, err := _ZKFaultProofConfig.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZKFaultProofConfigOwnershipTransferred) + if err := _ZKFaultProofConfig.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. +// +// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) ParseOwnershipTransferred(log types.Log) (*ZKFaultProofConfigOwnershipTransferred, error) { + event := new(ZKFaultProofConfigOwnershipTransferred) + if err := _ZKFaultProofConfig.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZKFaultProofConfigUpdatedAggregationVKeyIterator is returned from FilterUpdatedAggregationVKey and is used to iterate over the raw logs and unpacked data for UpdatedAggregationVKey events raised by the ZKFaultProofConfig contract. +type ZKFaultProofConfigUpdatedAggregationVKeyIterator struct { + Event *ZKFaultProofConfigUpdatedAggregationVKey // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZKFaultProofConfigUpdatedAggregationVKeyIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZKFaultProofConfigUpdatedAggregationVKey) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZKFaultProofConfigUpdatedAggregationVKey) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZKFaultProofConfigUpdatedAggregationVKeyIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZKFaultProofConfigUpdatedAggregationVKeyIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZKFaultProofConfigUpdatedAggregationVKey represents a UpdatedAggregationVKey event raised by the ZKFaultProofConfig contract. +type ZKFaultProofConfigUpdatedAggregationVKey struct { + OldVkey [32]byte + NewVkey [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedAggregationVKey is a free log retrieval operation binding the contract event 0xb81f9c41933b730a90fba96ab14541de7cab774f762ea0c183054947bc49aee7. +// +// Solidity: event UpdatedAggregationVKey(bytes32 indexed oldVkey, bytes32 indexed newVkey) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) FilterUpdatedAggregationVKey(opts *bind.FilterOpts, oldVkey [][32]byte, newVkey [][32]byte) (*ZKFaultProofConfigUpdatedAggregationVKeyIterator, error) { + + var oldVkeyRule []interface{} + for _, oldVkeyItem := range oldVkey { + oldVkeyRule = append(oldVkeyRule, oldVkeyItem) + } + var newVkeyRule []interface{} + for _, newVkeyItem := range newVkey { + newVkeyRule = append(newVkeyRule, newVkeyItem) + } + + logs, sub, err := _ZKFaultProofConfig.contract.FilterLogs(opts, "UpdatedAggregationVKey", oldVkeyRule, newVkeyRule) + if err != nil { + return nil, err + } + return &ZKFaultProofConfigUpdatedAggregationVKeyIterator{contract: _ZKFaultProofConfig.contract, event: "UpdatedAggregationVKey", logs: logs, sub: sub}, nil +} + +// WatchUpdatedAggregationVKey is a free log subscription operation binding the contract event 0xb81f9c41933b730a90fba96ab14541de7cab774f762ea0c183054947bc49aee7. +// +// Solidity: event UpdatedAggregationVKey(bytes32 indexed oldVkey, bytes32 indexed newVkey) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) WatchUpdatedAggregationVKey(opts *bind.WatchOpts, sink chan<- *ZKFaultProofConfigUpdatedAggregationVKey, oldVkey [][32]byte, newVkey [][32]byte) (event.Subscription, error) { + + var oldVkeyRule []interface{} + for _, oldVkeyItem := range oldVkey { + oldVkeyRule = append(oldVkeyRule, oldVkeyItem) + } + var newVkeyRule []interface{} + for _, newVkeyItem := range newVkey { + newVkeyRule = append(newVkeyRule, newVkeyItem) + } + + logs, sub, err := _ZKFaultProofConfig.contract.WatchLogs(opts, "UpdatedAggregationVKey", oldVkeyRule, newVkeyRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZKFaultProofConfigUpdatedAggregationVKey) + if err := _ZKFaultProofConfig.contract.UnpackLog(event, "UpdatedAggregationVKey", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedAggregationVKey is a log parse operation binding the contract event 0xb81f9c41933b730a90fba96ab14541de7cab774f762ea0c183054947bc49aee7. +// +// Solidity: event UpdatedAggregationVKey(bytes32 indexed oldVkey, bytes32 indexed newVkey) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) ParseUpdatedAggregationVKey(log types.Log) (*ZKFaultProofConfigUpdatedAggregationVKey, error) { + event := new(ZKFaultProofConfigUpdatedAggregationVKey) + if err := _ZKFaultProofConfig.contract.UnpackLog(event, "UpdatedAggregationVKey", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZKFaultProofConfigUpdatedRangeVkeyCommitmentIterator is returned from FilterUpdatedRangeVkeyCommitment and is used to iterate over the raw logs and unpacked data for UpdatedRangeVkeyCommitment events raised by the ZKFaultProofConfig contract. +type ZKFaultProofConfigUpdatedRangeVkeyCommitmentIterator struct { + Event *ZKFaultProofConfigUpdatedRangeVkeyCommitment // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZKFaultProofConfigUpdatedRangeVkeyCommitmentIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZKFaultProofConfigUpdatedRangeVkeyCommitment) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZKFaultProofConfigUpdatedRangeVkeyCommitment) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZKFaultProofConfigUpdatedRangeVkeyCommitmentIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZKFaultProofConfigUpdatedRangeVkeyCommitmentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZKFaultProofConfigUpdatedRangeVkeyCommitment represents a UpdatedRangeVkeyCommitment event raised by the ZKFaultProofConfig contract. +type ZKFaultProofConfigUpdatedRangeVkeyCommitment struct { + OldRangeVkeyCommitment [32]byte + NewRangeVkeyCommitment [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedRangeVkeyCommitment is a free log retrieval operation binding the contract event 0x1035606f0606905acdf851342466a5b64406fa798b7440235cd5811cea2850fd. +// +// Solidity: event UpdatedRangeVkeyCommitment(bytes32 indexed oldRangeVkeyCommitment, bytes32 indexed newRangeVkeyCommitment) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) FilterUpdatedRangeVkeyCommitment(opts *bind.FilterOpts, oldRangeVkeyCommitment [][32]byte, newRangeVkeyCommitment [][32]byte) (*ZKFaultProofConfigUpdatedRangeVkeyCommitmentIterator, error) { + + var oldRangeVkeyCommitmentRule []interface{} + for _, oldRangeVkeyCommitmentItem := range oldRangeVkeyCommitment { + oldRangeVkeyCommitmentRule = append(oldRangeVkeyCommitmentRule, oldRangeVkeyCommitmentItem) + } + var newRangeVkeyCommitmentRule []interface{} + for _, newRangeVkeyCommitmentItem := range newRangeVkeyCommitment { + newRangeVkeyCommitmentRule = append(newRangeVkeyCommitmentRule, newRangeVkeyCommitmentItem) + } + + logs, sub, err := _ZKFaultProofConfig.contract.FilterLogs(opts, "UpdatedRangeVkeyCommitment", oldRangeVkeyCommitmentRule, newRangeVkeyCommitmentRule) + if err != nil { + return nil, err + } + return &ZKFaultProofConfigUpdatedRangeVkeyCommitmentIterator{contract: _ZKFaultProofConfig.contract, event: "UpdatedRangeVkeyCommitment", logs: logs, sub: sub}, nil +} + +// WatchUpdatedRangeVkeyCommitment is a free log subscription operation binding the contract event 0x1035606f0606905acdf851342466a5b64406fa798b7440235cd5811cea2850fd. +// +// Solidity: event UpdatedRangeVkeyCommitment(bytes32 indexed oldRangeVkeyCommitment, bytes32 indexed newRangeVkeyCommitment) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) WatchUpdatedRangeVkeyCommitment(opts *bind.WatchOpts, sink chan<- *ZKFaultProofConfigUpdatedRangeVkeyCommitment, oldRangeVkeyCommitment [][32]byte, newRangeVkeyCommitment [][32]byte) (event.Subscription, error) { + + var oldRangeVkeyCommitmentRule []interface{} + for _, oldRangeVkeyCommitmentItem := range oldRangeVkeyCommitment { + oldRangeVkeyCommitmentRule = append(oldRangeVkeyCommitmentRule, oldRangeVkeyCommitmentItem) + } + var newRangeVkeyCommitmentRule []interface{} + for _, newRangeVkeyCommitmentItem := range newRangeVkeyCommitment { + newRangeVkeyCommitmentRule = append(newRangeVkeyCommitmentRule, newRangeVkeyCommitmentItem) + } + + logs, sub, err := _ZKFaultProofConfig.contract.WatchLogs(opts, "UpdatedRangeVkeyCommitment", oldRangeVkeyCommitmentRule, newRangeVkeyCommitmentRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZKFaultProofConfigUpdatedRangeVkeyCommitment) + if err := _ZKFaultProofConfig.contract.UnpackLog(event, "UpdatedRangeVkeyCommitment", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedRangeVkeyCommitment is a log parse operation binding the contract event 0x1035606f0606905acdf851342466a5b64406fa798b7440235cd5811cea2850fd. +// +// Solidity: event UpdatedRangeVkeyCommitment(bytes32 indexed oldRangeVkeyCommitment, bytes32 indexed newRangeVkeyCommitment) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) ParseUpdatedRangeVkeyCommitment(log types.Log) (*ZKFaultProofConfigUpdatedRangeVkeyCommitment, error) { + event := new(ZKFaultProofConfigUpdatedRangeVkeyCommitment) + if err := _ZKFaultProofConfig.contract.UnpackLog(event, "UpdatedRangeVkeyCommitment", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZKFaultProofConfigUpdatedRollupConfigHashIterator is returned from FilterUpdatedRollupConfigHash and is used to iterate over the raw logs and unpacked data for UpdatedRollupConfigHash events raised by the ZKFaultProofConfig contract. +type ZKFaultProofConfigUpdatedRollupConfigHashIterator struct { + Event *ZKFaultProofConfigUpdatedRollupConfigHash // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZKFaultProofConfigUpdatedRollupConfigHashIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZKFaultProofConfigUpdatedRollupConfigHash) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZKFaultProofConfigUpdatedRollupConfigHash) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZKFaultProofConfigUpdatedRollupConfigHashIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZKFaultProofConfigUpdatedRollupConfigHashIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZKFaultProofConfigUpdatedRollupConfigHash represents a UpdatedRollupConfigHash event raised by the ZKFaultProofConfig contract. +type ZKFaultProofConfigUpdatedRollupConfigHash struct { + OldRollupConfigHash [32]byte + NewRollupConfigHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedRollupConfigHash is a free log retrieval operation binding the contract event 0xda2f5f014ada26cff39a0f2a9dc6fa4fca1581376fc91ec09506c8fb8657bc35. +// +// Solidity: event UpdatedRollupConfigHash(bytes32 indexed oldRollupConfigHash, bytes32 indexed newRollupConfigHash) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) FilterUpdatedRollupConfigHash(opts *bind.FilterOpts, oldRollupConfigHash [][32]byte, newRollupConfigHash [][32]byte) (*ZKFaultProofConfigUpdatedRollupConfigHashIterator, error) { + + var oldRollupConfigHashRule []interface{} + for _, oldRollupConfigHashItem := range oldRollupConfigHash { + oldRollupConfigHashRule = append(oldRollupConfigHashRule, oldRollupConfigHashItem) + } + var newRollupConfigHashRule []interface{} + for _, newRollupConfigHashItem := range newRollupConfigHash { + newRollupConfigHashRule = append(newRollupConfigHashRule, newRollupConfigHashItem) + } + + logs, sub, err := _ZKFaultProofConfig.contract.FilterLogs(opts, "UpdatedRollupConfigHash", oldRollupConfigHashRule, newRollupConfigHashRule) + if err != nil { + return nil, err + } + return &ZKFaultProofConfigUpdatedRollupConfigHashIterator{contract: _ZKFaultProofConfig.contract, event: "UpdatedRollupConfigHash", logs: logs, sub: sub}, nil +} + +// WatchUpdatedRollupConfigHash is a free log subscription operation binding the contract event 0xda2f5f014ada26cff39a0f2a9dc6fa4fca1581376fc91ec09506c8fb8657bc35. +// +// Solidity: event UpdatedRollupConfigHash(bytes32 indexed oldRollupConfigHash, bytes32 indexed newRollupConfigHash) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) WatchUpdatedRollupConfigHash(opts *bind.WatchOpts, sink chan<- *ZKFaultProofConfigUpdatedRollupConfigHash, oldRollupConfigHash [][32]byte, newRollupConfigHash [][32]byte) (event.Subscription, error) { + + var oldRollupConfigHashRule []interface{} + for _, oldRollupConfigHashItem := range oldRollupConfigHash { + oldRollupConfigHashRule = append(oldRollupConfigHashRule, oldRollupConfigHashItem) + } + var newRollupConfigHashRule []interface{} + for _, newRollupConfigHashItem := range newRollupConfigHash { + newRollupConfigHashRule = append(newRollupConfigHashRule, newRollupConfigHashItem) + } + + logs, sub, err := _ZKFaultProofConfig.contract.WatchLogs(opts, "UpdatedRollupConfigHash", oldRollupConfigHashRule, newRollupConfigHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZKFaultProofConfigUpdatedRollupConfigHash) + if err := _ZKFaultProofConfig.contract.UnpackLog(event, "UpdatedRollupConfigHash", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedRollupConfigHash is a log parse operation binding the contract event 0xda2f5f014ada26cff39a0f2a9dc6fa4fca1581376fc91ec09506c8fb8657bc35. +// +// Solidity: event UpdatedRollupConfigHash(bytes32 indexed oldRollupConfigHash, bytes32 indexed newRollupConfigHash) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) ParseUpdatedRollupConfigHash(log types.Log) (*ZKFaultProofConfigUpdatedRollupConfigHash, error) { + event := new(ZKFaultProofConfigUpdatedRollupConfigHash) + if err := _ZKFaultProofConfig.contract.UnpackLog(event, "UpdatedRollupConfigHash", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ZKFaultProofConfigUpdatedVerifierGatewayIterator is returned from FilterUpdatedVerifierGateway and is used to iterate over the raw logs and unpacked data for UpdatedVerifierGateway events raised by the ZKFaultProofConfig contract. +type ZKFaultProofConfigUpdatedVerifierGatewayIterator struct { + Event *ZKFaultProofConfigUpdatedVerifierGateway // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ZKFaultProofConfigUpdatedVerifierGatewayIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ZKFaultProofConfigUpdatedVerifierGateway) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ZKFaultProofConfigUpdatedVerifierGateway) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ZKFaultProofConfigUpdatedVerifierGatewayIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ZKFaultProofConfigUpdatedVerifierGatewayIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ZKFaultProofConfigUpdatedVerifierGateway represents a UpdatedVerifierGateway event raised by the ZKFaultProofConfig contract. +type ZKFaultProofConfigUpdatedVerifierGateway struct { + OldVerifierGateway common.Address + NewVerifierGateway common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdatedVerifierGateway is a free log retrieval operation binding the contract event 0x1379941631ff0ed9178ab16ab67a2e5db3aeada7f87e518f761e79c8e38377e3. +// +// Solidity: event UpdatedVerifierGateway(address indexed oldVerifierGateway, address indexed newVerifierGateway) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) FilterUpdatedVerifierGateway(opts *bind.FilterOpts, oldVerifierGateway []common.Address, newVerifierGateway []common.Address) (*ZKFaultProofConfigUpdatedVerifierGatewayIterator, error) { + + var oldVerifierGatewayRule []interface{} + for _, oldVerifierGatewayItem := range oldVerifierGateway { + oldVerifierGatewayRule = append(oldVerifierGatewayRule, oldVerifierGatewayItem) + } + var newVerifierGatewayRule []interface{} + for _, newVerifierGatewayItem := range newVerifierGateway { + newVerifierGatewayRule = append(newVerifierGatewayRule, newVerifierGatewayItem) + } + + logs, sub, err := _ZKFaultProofConfig.contract.FilterLogs(opts, "UpdatedVerifierGateway", oldVerifierGatewayRule, newVerifierGatewayRule) + if err != nil { + return nil, err + } + return &ZKFaultProofConfigUpdatedVerifierGatewayIterator{contract: _ZKFaultProofConfig.contract, event: "UpdatedVerifierGateway", logs: logs, sub: sub}, nil +} + +// WatchUpdatedVerifierGateway is a free log subscription operation binding the contract event 0x1379941631ff0ed9178ab16ab67a2e5db3aeada7f87e518f761e79c8e38377e3. +// +// Solidity: event UpdatedVerifierGateway(address indexed oldVerifierGateway, address indexed newVerifierGateway) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) WatchUpdatedVerifierGateway(opts *bind.WatchOpts, sink chan<- *ZKFaultProofConfigUpdatedVerifierGateway, oldVerifierGateway []common.Address, newVerifierGateway []common.Address) (event.Subscription, error) { + + var oldVerifierGatewayRule []interface{} + for _, oldVerifierGatewayItem := range oldVerifierGateway { + oldVerifierGatewayRule = append(oldVerifierGatewayRule, oldVerifierGatewayItem) + } + var newVerifierGatewayRule []interface{} + for _, newVerifierGatewayItem := range newVerifierGateway { + newVerifierGatewayRule = append(newVerifierGatewayRule, newVerifierGatewayItem) + } + + logs, sub, err := _ZKFaultProofConfig.contract.WatchLogs(opts, "UpdatedVerifierGateway", oldVerifierGatewayRule, newVerifierGatewayRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ZKFaultProofConfigUpdatedVerifierGateway) + if err := _ZKFaultProofConfig.contract.UnpackLog(event, "UpdatedVerifierGateway", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdatedVerifierGateway is a log parse operation binding the contract event 0x1379941631ff0ed9178ab16ab67a2e5db3aeada7f87e518f761e79c8e38377e3. +// +// Solidity: event UpdatedVerifierGateway(address indexed oldVerifierGateway, address indexed newVerifierGateway) +func (_ZKFaultProofConfig *ZKFaultProofConfigFilterer) ParseUpdatedVerifierGateway(log types.Log) (*ZKFaultProofConfigUpdatedVerifierGateway, error) { + event := new(ZKFaultProofConfigUpdatedVerifierGateway) + if err := _ZKFaultProofConfig.contract.UnpackLog(event, "UpdatedVerifierGateway", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-proposer/flags/flags.go b/op-proposer/flags/flags.go index 40311f745..4b1781a07 100644 --- a/op-proposer/flags/flags.go +++ b/op-proposer/flags/flags.go @@ -55,6 +55,11 @@ var ( Usage: "Address of the DisputeGameFactory contract", EnvVars: prefixEnvVars("GAME_FACTORY_ADDRESS"), } + AnchorStateRegistryAddressFlag = &cli.StringFlag{ + Name: "anchor-state-registry-address", + Usage: "Address of the AnchorStateRegistry contract", + EnvVars: prefixEnvVars("ANCHOR_STATE_REGISTRY_ADDRESS"), + } ProposalIntervalFlag = &cli.DurationFlag{ Name: "proposal-interval", Usage: "Interval between submitting L2 output proposals when the dispute game factory address is set", @@ -66,6 +71,22 @@ var ( Value: 0, EnvVars: prefixEnvVars("GAME_TYPE"), } + ZKProposalBatchSizeFlag = &cli.UintFlag{ + Name: "zk-proposal-batch-size", + Usage: "When the game type is zk dispute game, you can specify how many block outputRoots are submitted per batch", + Value: 3600, + EnvVars: prefixEnvVars("ZK_PROPOSAL_BATCH_SIZE"), + } + ZKProposalParentGameAddressFlag = &cli.StringFlag{ + Name: "zk-proposal-parent-game-address", + Usage: "When the game type is zk dispute game, you can specify the address of the parent game to use at startup", + EnvVars: prefixEnvVars("ZK_PROPOSAL_PARENT_GAME_ADDRESS"), + } + ZKProposalLastGameCachePathFlag = &cli.StringFlag{ + Name: "zk-proposal-last-game-cache-path", + Usage: "When the game type is zk dispute game, you can specify a path to cache the game information from the last submission, so that you can quickly resume from where you left off after restarting", + EnvVars: prefixEnvVars("ZK_PROPOSAL_PARENT_GAME_ADDRESS"), + } ActiveSequencerCheckDurationFlag = &cli.DurationFlag{ Name: "active-sequencer-check-duration", Usage: "The duration between checks to determine the active sequencer endpoint.", @@ -94,10 +115,14 @@ var optionalFlags = []cli.Flag{ AllowNonFinalizedFlag, L2OutputHDPathFlag, DisputeGameFactoryAddressFlag, + AnchorStateRegistryAddressFlag, ProposalIntervalFlag, DisputeGameTypeFlag, ActiveSequencerCheckDurationFlag, WaitNodeSyncFlag, + ZKProposalBatchSizeFlag, + ZKProposalParentGameAddressFlag, + ZKProposalLastGameCachePathFlag, } func init() { diff --git a/op-proposer/proposer/config.go b/op-proposer/proposer/config.go index 8786da0c0..d0df58b74 100644 --- a/op-proposer/proposer/config.go +++ b/op-proposer/proposer/config.go @@ -50,6 +50,9 @@ type CLIConfig struct { // DGFAddress is the DisputeGameFactory contract address. DGFAddress string + // AnchorStateRegistryAddr is the AnchorStateRegistry contract address. + AnchorStateRegistryAddr string + // ProposalInterval is the delay between submitting L2 output proposals when the DGFAddress is set. ProposalInterval time.Duration @@ -61,6 +64,12 @@ type CLIConfig struct { // Whether to wait for the sequencer to sync to a recent block at startup. WaitNodeSync bool + // ZKProposalBatchSize is defined as the number of block heights of outputRoot submitted in a batch when the game type is zk dispute game. + ZKProposalBatchSize uint64 + // ZKParentGameAddress specifies the address of the parent game to be used at startup when the game type is a zk dispute game. + ZKParentGameAddress string + // ZKProposalLastGameCachePathFlag specifies the storage path for the last game's cache + ZKProposalLastGameCachePathFlag string } func (c *CLIConfig) Check() error { @@ -86,6 +95,9 @@ func (c *CLIConfig) Check() error { if c.DGFAddress != "" && c.ProposalInterval == 0 { return errors.New("the `DisputeGameFactory` address was provided but the `ProposalInterval` was not set") } + if c.DGFAddress != "" && c.DisputeGameType == zkDisputeGameType && c.AnchorStateRegistryAddr == "" { + return errors.New("when setting `DisputeGameFactory` and the game type == 3, the `AnchorStateRegistry` address must be set") + } if c.ProposalInterval != 0 && c.DGFAddress == "" { return errors.New("the `ProposalInterval` was provided but the `DisputeGameFactory` address was not set") } @@ -103,15 +115,19 @@ func NewConfig(ctx *cli.Context) *CLIConfig { PollInterval: ctx.Duration(flags.PollIntervalFlag.Name), TxMgrConfig: txmgr.ReadCLIConfig(ctx), // Optional Flags - AllowNonFinalized: ctx.Bool(flags.AllowNonFinalizedFlag.Name), - RPCConfig: oprpc.ReadCLIConfig(ctx), - LogConfig: oplog.ReadCLIConfig(ctx), - MetricsConfig: opmetrics.ReadCLIConfig(ctx), - PprofConfig: oppprof.ReadCLIConfig(ctx), - DGFAddress: ctx.String(flags.DisputeGameFactoryAddressFlag.Name), - ProposalInterval: ctx.Duration(flags.ProposalIntervalFlag.Name), - DisputeGameType: uint32(ctx.Uint(flags.DisputeGameTypeFlag.Name)), - ActiveSequencerCheckDuration: ctx.Duration(flags.ActiveSequencerCheckDurationFlag.Name), - WaitNodeSync: ctx.Bool(flags.WaitNodeSyncFlag.Name), + AllowNonFinalized: ctx.Bool(flags.AllowNonFinalizedFlag.Name), + RPCConfig: oprpc.ReadCLIConfig(ctx), + LogConfig: oplog.ReadCLIConfig(ctx), + MetricsConfig: opmetrics.ReadCLIConfig(ctx), + PprofConfig: oppprof.ReadCLIConfig(ctx), + DGFAddress: ctx.String(flags.DisputeGameFactoryAddressFlag.Name), + AnchorStateRegistryAddr: ctx.String(flags.AnchorStateRegistryAddressFlag.Name), + ProposalInterval: ctx.Duration(flags.ProposalIntervalFlag.Name), + DisputeGameType: uint32(ctx.Uint(flags.DisputeGameTypeFlag.Name)), + ZKProposalBatchSize: uint64(ctx.Uint(flags.ZKProposalBatchSizeFlag.Name)), + ZKParentGameAddress: ctx.String(flags.ZKProposalParentGameAddressFlag.Name), + ZKProposalLastGameCachePathFlag: ctx.String(flags.ZKProposalLastGameCachePathFlag.Name), + ActiveSequencerCheckDuration: ctx.Duration(flags.ActiveSequencerCheckDurationFlag.Name), + WaitNodeSync: ctx.Bool(flags.WaitNodeSyncFlag.Name), } } diff --git a/op-proposer/proposer/driver.go b/op-proposer/proposer/driver.go index a6c3e0a74..e30358a66 100644 --- a/op-proposer/proposer/driver.go +++ b/op-proposer/proposer/driver.go @@ -15,6 +15,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum-optimism/optimism/op-proposer/bindings" @@ -25,8 +26,18 @@ import ( ) var ( - supportedL2OutputVersion = eth.Bytes32{} - ErrProposerNotRunning = errors.New("proposer is not running") + supportedL2OutputVersion = eth.Bytes32{} + ErrProposerNotRunning = errors.New("proposer is not running") + DisputeGameCreatedABI = "DisputeGameCreated(address,uint32,bytes32)" + DisputeGameCreatedABIHash = crypto.Keccak256Hash([]byte(DisputeGameCreatedABI)) + ZkDisputeGameIndexUpdatedABI = "ZkDisputeGameIndexUpdated(uint256)" + ZkDisputeGameIndexUpdatedABIHash = crypto.Keccak256Hash([]byte(ZkDisputeGameIndexUpdatedABI)) +) + +const ( + inProgress = 0 + challengerWins = 1 + defenderWins = 2 ) type L1Client interface { @@ -72,8 +83,13 @@ type L2OutputSubmitter struct { l2ooContract *bindings.L2OutputOracleCaller l2ooABI *abi.ABI - dgfContract *bindings.DisputeGameFactoryCaller - dgfABI *abi.ABI + dgfContract *bindings.DisputeGameFactoryCaller + dgfABI *abi.ABI + anchorStateRegistryContract *bindings.AnchorStateRegistryCaller + outputRootCacheHandler *OutputRootCacheHandler + lastSubmittedGame *common.Address + lastSubmittedGameIdx *big.Int + zkLastGamePersistenceCache *LastGamePersistenceCache } // NewL2OutputSubmitter creates a new L2 Output Submitter @@ -146,21 +162,46 @@ func newDGFSubmitter(ctx context.Context, cancel context.CancelFunc, setup Drive } log.Info("Connected to DisputeGameFactory", "address", setup.Cfg.DisputeGameFactoryAddr, "version", version) + var anchorStateRegistryContract *bindings.AnchorStateRegistryCaller + if setup.Cfg.IsZKDisputeGame { + anchorStateRegistryCaller, err := bindings.NewAnchorStateRegistryCaller(*setup.Cfg.AnchorStateRegistryAddr, setup.L1Client) + if err != nil { + cancel() + return nil, fmt.Errorf("failed to create AnchorStateRegistry at address %s: %w", setup.Cfg.AnchorStateRegistryAddr, err) + } + anchorStateRegistryContract = anchorStateRegistryCaller + } parsed, err := bindings.DisputeGameFactoryMetaData.GetAbi() if err != nil { cancel() return nil, err } - return &L2OutputSubmitter{ + l := &L2OutputSubmitter{ DriverSetup: setup, done: make(chan struct{}), ctx: ctx, cancel: cancel, - dgfContract: dgfCaller, - dgfABI: parsed, - }, nil + dgfContract: dgfCaller, + dgfABI: parsed, + anchorStateRegistryContract: anchorStateRegistryContract, + } + if setup.Cfg.IsZKDisputeGame { + l.outputRootCacheHandler = newOutputRootCacheHandler(ctx, l.Log, l.BatchFetchOutput, setup.Cfg.ZKProposalBatchSize) + if setup.Cfg.ZKProposalLastGameCachePathFlag != "" { + l.zkLastGamePersistenceCache = NewLastGamePersistenceCache(setup.Cfg.ZKProposalLastGameCachePathFlag) + lastGameInfo, err := l.zkLastGamePersistenceCache.loadFile() + if err != nil { + log.Warn("read zk last game cache file fail", "err", err, "path", setup.Cfg.ZKProposalLastGameCachePathFlag) + } else { + l.lastSubmittedGame = lastGameInfo.Address + l.lastSubmittedGameIdx = lastGameInfo.Idx + log.Info("read zk last game cache file", "path", setup.Cfg.ZKProposalLastGameCachePathFlag, "address", lastGameInfo.Address, "idx", lastGameInfo.Idx) + } + } + } + return l, nil } func (l *L2OutputSubmitter) StartL2OutputSubmitting() error { @@ -203,6 +244,14 @@ func (l *L2OutputSubmitter) StopL2OutputSubmitting() error { l.cancel() close(l.done) l.wg.Wait() + if l.zkLastGamePersistenceCache != nil && l.lastSubmittedGame != nil { + err := l.zkLastGamePersistenceCache.cacheFile(l.lastSubmittedGame, l.lastSubmittedGameIdx) + if err != nil { + l.Log.Warn("zk last game cache file fail", "err", err, "lastSubmittedGame", l.lastSubmittedGame) + } else { + l.Log.Info("cache zk last game file", "lastSubmittedGame", l.lastSubmittedGame) + } + } l.Log.Info("Proposer stopped") return nil @@ -477,24 +526,75 @@ func (l *L2OutputSubmitter) loopL2OO(ctx context.Context) { } func (l *L2OutputSubmitter) loopDGF(ctx context.Context) { - ticker := time.NewTicker(l.Cfg.ProposalInterval) - defer ticker.Stop() - for { - select { - case <-ticker.C: - blockNumber, err := l.FetchCurrentBlockNumber(ctx) - if err != nil { - break - } - - output, shouldPropose, err := l.FetchOutput(ctx, blockNumber) - if err != nil || !shouldPropose { - break + if l.Cfg.IsZKDisputeGame { + l.loopZKDGF(ctx) + } else { + ticker := time.NewTicker(l.Cfg.ProposalInterval) + defer ticker.Stop() + for { + select { + case <-ticker.C: + blockNumber, err := l.FetchCurrentBlockNumber(ctx) + if err != nil { + break + } + + output, shouldPropose, err := l.FetchOutput(ctx, blockNumber) + if err != nil || !shouldPropose { + break + } + + l.proposeOutput(ctx, output) + case <-l.done: + return } + } + } +} - l.proposeOutput(ctx, output) +func (l *L2OutputSubmitter) loopZKDGF(ctx context.Context) { + for { + select { + case readyBatchData := <-l.outputRootCacheHandler.readyChan: + l.submitZKDGFOutputData(ctx, readyBatchData) case <-l.done: return + default: + if !l.outputRootCacheHandler.isStart.Load() { + parentGame := l.findValidParentGame(ctx) + if parentGame != nil { + l.Log.Debug("found parent game,will start getting outputRoot from it", "idx", parentGame.game.Index.Uint64()) + gameImpls, err := l.dgfContract.GameImpls(&bind.CallOpts{}, zkDisputeGameType) + if err != nil { + l.Log.Error("get current GameImpls failed", "err", err) + continue + } + gameCaller, err := bindings.NewZKFaultDisputeGameCaller(gameImpls, l.L1Client) + if err != nil { + l.Log.Error("get current GameImpls failed", "err", err) + continue + } + config, err := gameCaller.Config(&bind.CallOpts{}) + if err != nil { + l.Log.Error("get current Config failed", "err", err) + continue + } + configCaller, err := bindings.NewZKFaultProofConfigCaller(config, l.L1Client) + if err != nil { + l.Log.Error("get current Config caller failed", "err", err) + continue + } + blockDistance, err := configCaller.BlockDistance(&bind.CallOpts{}) + if err != nil { + l.Log.Error("get current blockDistance from Config failed", "err", err) + continue + } + l.outputRootCacheHandler.startFrom(parentGame, blockDistance) + } else { + l.Log.Warn("fail find valid parent game data,will retry later") + time.Sleep(500 * time.Millisecond) + } + } } } } @@ -513,3 +613,386 @@ func (l *L2OutputSubmitter) proposeOutput(ctx context.Context, output *eth.Outpu } l.Metr.RecordL2BlocksProposed(output.BlockRef) } + +type ZkDisputeGameExtraData struct { + allClaimsHash common.Hash + lengthClaims *big.Int + parentGameAddress common.Address + endL2BlockNumber *big.Int +} + +type GameInformation struct { + game *bindings.IDisputeGameFactoryGameSearchResult + extraData *ZkDisputeGameExtraData + isDummy bool +} + +func (l *L2OutputSubmitter) findValidParentGame(ctx context.Context) *GameInformation { + if l.lastSubmittedGame != nil { + information, err := l.getGameInformationByAddr(l.lastSubmittedGame, l.lastSubmittedGameIdx) + if err != nil { + l.Log.Error("Failed to get parent game information", "err", err, "addr", l.lastSubmittedGame) + return nil + } + return information + } + + anchors, err := l.anchorStateRegistryContract.Anchors(&bind.CallOpts{}, zkDisputeGameType) + if err != nil { + l.Log.Error("failed to get anchor state", "err", err) + return nil + } + latestValidBlockNumber := anchors.L2BlockNumber + + if l.Cfg.ZKParentGameAddress != "" { + if l.Cfg.ZKParentGameAddress == "dummy" { + return makeDummyParentGame(latestValidBlockNumber) + } + address := common.HexToAddress(l.Cfg.ZKParentGameAddress) + information, err := l.getGameInformationByAddr(&address, nil) + if err != nil { + l.Log.Error("Failed to get parent game information by config", "err", err, "addr", l.Cfg.ZKParentGameAddress) + return nil + } + return information + } + + gameCount, err := l.dgfContract.GameCount(&bind.CallOpts{}) + if err != nil { + l.Log.Error("failed to get game count", "err", err) + return nil + } + if gameCount.Cmp(big.NewInt(0)) <= 0 { + l.Log.Warn("game count <= 0, will use dummy game") + return makeDummyParentGame(latestValidBlockNumber) + } + currentIdx := gameCount.Sub(gameCount, big.NewInt(1)) + for { + l.Log.Debug("findValidParentGame", "gameType", l.Cfg.DisputeGameType, "currentIdx", currentIdx) + games, err := l.dgfContract.FindLatestGames(&bind.CallOpts{}, l.Cfg.DisputeGameType, currentIdx, big.NewInt(100)) + if err != nil { + l.Log.Error("failed to find latest games", "err", err) + return nil + } + if len(games) == 0 { + break + } + for _, game := range games { + currentIdx = game.Index + gameExtraData, err := parseExtraData(game.ExtraData) + if err != nil { + l.Log.Error("failed to parse extra data", "err", err) + continue + } + if gameExtraData.endL2BlockNumber.Cmp(latestValidBlockNumber) < 0 { + l.Log.Debug("game endL2BlockNumber output.Status.FinalizedL2.Number && (!l.Cfg.AllowNonFinalized || output.BlockRef.Number > output.Status.SafeL2.Number) { + l.Log.Debug("not proposing yet, L2 block is not ready for proposal", + "l2_proposal", output.BlockRef, + "l2_safe", output.Status.SafeL2, + "l2_finalized", output.Status.FinalizedL2, + "allow_non_finalized", l.Cfg.AllowNonFinalized) + return nil, false, nil + } + } + + return outputs, true, nil +} + +func proposeL2OutputZKDGFTxData(dgfABI *abi.ABI, gameType uint32, data *outputRootBatchData) ([]byte, error) { + return dgfABI.Pack("createZkFaultDisputeGame", gameType, data.outputRootList, data.parentGameIndex.Uint64(), data.l2BlockNumber.Uint64(), []byte{}) +} + +func parseExtraData(data []byte) (*ZkDisputeGameExtraData, error) { + if len(data) < 88 { + return nil, errors.New("extra data len<88") + } + allClaimsHash := common.BytesToHash(data[32 : 32+common.HashLength]) + parentGameAddress := common.BytesToAddress(data[68 : 68+common.AddressLength]) + return &ZkDisputeGameExtraData{ + endL2BlockNumber: new(big.Int).SetBytes(data[0:32]), + allClaimsHash: allClaimsHash, + lengthClaims: new(big.Int).SetBytes(data[64:68]), + parentGameAddress: parentGameAddress, + }, nil +} diff --git a/op-proposer/proposer/last_game_persistence_cache.go b/op-proposer/proposer/last_game_persistence_cache.go new file mode 100644 index 000000000..f1c5142ae --- /dev/null +++ b/op-proposer/proposer/last_game_persistence_cache.go @@ -0,0 +1,85 @@ +package proposer + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "math/big" + "os" + "path/filepath" + "sync" + + "github.com/ethereum/go-ethereum/common" +) + +type LastGameInfo struct { + Address *common.Address `json:"address,omitempty"` + Idx *big.Int `json:"idx,omitempty"` +} + +type LastGamePersistenceCache struct { + lock sync.Mutex + file string +} + +func (c *LastGamePersistenceCache) loadFile() (*LastGameInfo, error) { + c.lock.Lock() + defer c.lock.Unlock() + data, err := os.ReadFile(c.file) + if errors.Is(err, os.ErrNotExist) { + // persistedState.SequencerStarted == nil: SequencerState() will return StateUnset if no state is found + return nil, err + } else if err != nil { + return nil, fmt.Errorf("read config file (%v): %w", c.file, err) + } + var config LastGameInfo + dec := json.NewDecoder(bytes.NewReader(data)) + dec.DisallowUnknownFields() + if err = dec.Decode(&config); err != nil { + return nil, fmt.Errorf("invalid config file (%v): %w", c.file, err) + } + if config.Address == nil { + return nil, fmt.Errorf("missing address value in config file (%v)", c.file) + } + return &config, nil +} + +func (c *LastGamePersistenceCache) cacheFile(address *common.Address, idx *big.Int) error { + c.lock.Lock() + defer c.lock.Unlock() + data, err := json.Marshal(&LastGameInfo{Address: address, Idx: idx}) + if err != nil { + return fmt.Errorf("marshall new config: %w", err) + } + dir := filepath.Dir(c.file) + if err := os.MkdirAll(dir, 0755); err != nil { + return fmt.Errorf("create config dir (%v): %w", c.file, err) + } + // Write the new content to a temp file first, then rename into place + // Avoids corrupting the content if the disk is full or there are IO errors + tmpFile := c.file + ".tmp" + file, err := os.OpenFile(tmpFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) + if err != nil { + return fmt.Errorf("open file (%v) for writing: %w", tmpFile, err) + } + defer file.Close() // Ensure file is closed even if write or sync fails + if _, err = file.Write(data); err != nil { + return fmt.Errorf("write new config to temp file (%v): %w", tmpFile, err) + } + if err := file.Sync(); err != nil { + return fmt.Errorf("sync new config temp file (%v): %w", tmpFile, err) + } + if err := file.Close(); err != nil { + return fmt.Errorf("close new config temp file (%v): %w", tmpFile, err) + } + // Rename to replace the previous file + if err := os.Rename(tmpFile, c.file); err != nil { + return fmt.Errorf("rename temp config file to final destination: %w", err) + } + return nil +} + +func NewLastGamePersistenceCache(file string) *LastGamePersistenceCache { + return &LastGamePersistenceCache{file: file} +} diff --git a/op-proposer/proposer/output_cache.go b/op-proposer/proposer/output_cache.go new file mode 100644 index 000000000..87872d346 --- /dev/null +++ b/op-proposer/proposer/output_cache.go @@ -0,0 +1,95 @@ +package proposer + +import ( + "context" + "math/big" + "sync/atomic" + "time" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum/go-ethereum/log" +) + +type OutputRootCacheHandler struct { + ctx context.Context + log log.Logger + isStart *atomic.Bool + readyChan chan *outputRootBatchData + outputRootFetchFunc func(ctx context.Context, block []*big.Int) ([]*eth.OutputResponse, bool, error) + batchSize uint64 +} + +type outputRootBatchData struct { + outputRootList []eth.Bytes32 + lastSyncStatus *eth.SyncStatus + lastL2BlockRef *eth.L2BlockRef + parentGameIndex *big.Int + l2BlockNumber *big.Int +} + +func newOutputRootCacheHandler( + ctx context.Context, + log log.Logger, + outputRootFetchFunc func(ctx context.Context, block []*big.Int) ([]*eth.OutputResponse, bool, error), + batchSize uint64, +) *OutputRootCacheHandler { + return &OutputRootCacheHandler{ + ctx: ctx, + log: log, + isStart: &atomic.Bool{}, + readyChan: make(chan *outputRootBatchData, 1), + outputRootFetchFunc: outputRootFetchFunc, + batchSize: batchSize, + } +} + +func (h *OutputRootCacheHandler) startFrom(parentGame *GameInformation, distance *big.Int) { + if !h.isStart.CompareAndSwap(false, true) { + return + } + go h.loop(parentGame, distance) +} + +func (h *OutputRootCacheHandler) loop(parentGame *GameInformation, distance *big.Int) { + currentBlockNumber := new(big.Int).Add(parentGame.extraData.endL2BlockNumber, distance) + endBlockNumber := new(big.Int).Add(parentGame.extraData.endL2BlockNumber, new(big.Int).SetUint64(h.batchSize)) + outputRootList := make([]eth.Bytes32, 0, h.batchSize/distance.Uint64()) + h.log.Debug("outputRoot loop", "parentGame index", parentGame.game.Index.Uint64(), + "currentBlockNumber", currentBlockNumber, "endBlockNumber", endBlockNumber, "stepBigInt", distance) + var blockList []*big.Int + var lastSyncStatus *eth.SyncStatus + var lastBlockRef *eth.L2BlockRef + for currentBlockNumber.Cmp(endBlockNumber) <= 0 { + blockList = append(blockList, currentBlockNumber) + currentBlockNumber = new(big.Int).Add(currentBlockNumber, distance) + } + + for { + outputRootResponses, shouldPropose, err := h.outputRootFetchFunc(h.ctx, blockList) + if err != nil { + h.log.Error("failed to fetch outputRoot", "err", err, "blockList", blockList) + time.Sleep(100 * time.Millisecond) + continue + } + if !shouldPropose { + h.log.Warn("the block number cannot submit the output root yet; it needs to wait for a while") + time.Sleep(1 * time.Second) + continue + } + for _, outputRootResp := range outputRootResponses { + outputRootList = append(outputRootList, outputRootResp.OutputRoot) + lastSyncStatus = outputRootResp.Status + lastBlockRef = &outputRootResp.BlockRef + } + break + } + h.readyChan <- &outputRootBatchData{ + outputRootList: outputRootList, + lastSyncStatus: lastSyncStatus, + lastL2BlockRef: lastBlockRef, + parentGameIndex: parentGame.game.Index, + l2BlockNumber: endBlockNumber, + } + h.isStart.CompareAndSwap(true, false) + h.log.Debug("outputRoot loop end", "currentBlockNumber", currentBlockNumber, "outputRootListSize", len(outputRootList)) +} diff --git a/op-proposer/proposer/service.go b/op-proposer/proposer/service.go index d4100cf1b..e9b7757e6 100644 --- a/op-proposer/proposer/service.go +++ b/op-proposer/proposer/service.go @@ -27,6 +27,8 @@ import ( var ErrAlreadyStopped = errors.New("already stopped") +const zkDisputeGameType = 3 + type ProposerConfig struct { // How frequently to poll L2 for new finalized outputs PollInterval time.Duration @@ -38,6 +40,7 @@ type ProposerConfig struct { L2OutputOracleAddr *common.Address DisputeGameFactoryAddr *common.Address DisputeGameType uint32 + IsZKDisputeGame bool // AllowNonFinalized enables the proposal of safe, but non-finalized L2 blocks. // The L1 block-hash embedded in the proposal TX is checked and should ensure the proposal @@ -45,7 +48,11 @@ type ProposerConfig struct { // This option is not necessary when higher proposal latency is acceptable and L1 is healthy. AllowNonFinalized bool - WaitNodeSync bool + WaitNodeSync bool + AnchorStateRegistryAddr *common.Address + ZKProposalBatchSize uint64 + ZKParentGameAddress string + ZKProposalLastGameCachePathFlag string } type ProposerService struct { @@ -74,7 +81,12 @@ type ProposerService struct { // ProposerServiceFromCLIConfig creates a new ProposerService from a CLIConfig. // The service components are fully started, except for the driver, // which will not be submitting state (if it was configured to) until the Start part of the lifecycle. -func ProposerServiceFromCLIConfig(ctx context.Context, version string, cfg *CLIConfig, log log.Logger) (*ProposerService, error) { +func ProposerServiceFromCLIConfig( + ctx context.Context, + version string, + cfg *CLIConfig, + log log.Logger, +) (*ProposerService, error) { var ps ProposerService if err := ps.initFromCLIConfig(ctx, version, cfg, log); err != nil { return nil, errors.Join(err, ps.Stop(ctx)) // try to clean up our failed initialization attempt @@ -82,7 +94,12 @@ func ProposerServiceFromCLIConfig(ctx context.Context, version string, cfg *CLIC return &ps, nil } -func (ps *ProposerService) initFromCLIConfig(ctx context.Context, version string, cfg *CLIConfig, log log.Logger) error { +func (ps *ProposerService) initFromCLIConfig( + ctx context.Context, + version string, + cfg *CLIConfig, + log log.Logger, +) error { ps.Version = version ps.Log = log @@ -221,6 +238,17 @@ func (ps *ProposerService) initDGF(cfg *CLIConfig) { ps.DisputeGameFactoryAddr = &dgfAddress ps.ProposalInterval = cfg.ProposalInterval ps.DisputeGameType = cfg.DisputeGameType + if cfg.DisputeGameType == zkDisputeGameType { + ps.IsZKDisputeGame = true + address, err := opservice.ParseAddress(cfg.AnchorStateRegistryAddr) + if err != nil { + panic(fmt.Errorf("failed to parse anchor state registry address: %w", err)) + } + ps.AnchorStateRegistryAddr = &address + ps.ZKProposalBatchSize = cfg.ZKProposalBatchSize + ps.ZKParentGameAddress = cfg.ZKParentGameAddress + ps.ZKProposalLastGameCachePathFlag = cfg.ZKProposalLastGameCachePathFlag + } } func (ps *ProposerService) initDriver() error { diff --git a/op-service/dial/rollupclient_interface.go b/op-service/dial/rollupclient_interface.go index e83619bab..d8d4ff029 100644 --- a/op-service/dial/rollupclient_interface.go +++ b/op-service/dial/rollupclient_interface.go @@ -13,6 +13,7 @@ import ( type RollupClientInterface interface { SyncStatusProvider OutputAtBlock(ctx context.Context, blockNum uint64) (*eth.OutputResponse, error) + BatchOutputAtBlock(ctx context.Context, blocks []uint64) ([]*eth.OutputResponse, error) RollupConfig(ctx context.Context) (*rollup.Config, error) StartSequencer(ctx context.Context, unsafeHead common.Hash) error SequencerActive(ctx context.Context) (bool, error) diff --git a/op-service/sources/rollupclient.go b/op-service/sources/rollupclient.go index 96cd16673..79d34928f 100644 --- a/op-service/sources/rollupclient.go +++ b/op-service/sources/rollupclient.go @@ -2,7 +2,10 @@ package sources import ( "context" + "io" + "github.com/ethereum-optimism/optimism/op-service/sources/batching" + "github.com/ethereum/go-ethereum/rpc" "golang.org/x/exp/slog" "github.com/ethereum/go-ethereum/common" @@ -27,6 +30,28 @@ func (r *RollupClient) OutputAtBlock(ctx context.Context, blockNum uint64) (*eth return output, err } +func (r *RollupClient) BatchOutputAtBlock(ctx context.Context, blocks []uint64) ([]*eth.OutputResponse, error) { + var result []*eth.OutputResponse + batchCall := batching.NewIterativeBatchCall[uint64, *eth.OutputResponse](blocks, func(block uint64) (*eth.OutputResponse, rpc.BatchElem) { + var response eth.OutputResponse + elem := rpc.BatchElem{ + Method: "optimism_outputAtBlock", + Args: []interface{}{hexutil.Uint64(block)}, + Result: &response, + } + result = append(result, &response) + return &response, elem + }, r.rpc.BatchCallContext, r.rpc.CallContext, 100) + for { + if err := batchCall.Fetch(ctx); err == io.EOF { + break + } else if err != nil { + return nil, err + } + } + return batchCall.Result() +} + func (r *RollupClient) SafeHeadAtL1Block(ctx context.Context, blockNum uint64) (*eth.SafeHeadResponse, error) { var output *eth.SafeHeadResponse err := r.rpc.CallContext(ctx, &output, "optimism_safeHeadAtL1Block", hexutil.Uint64(blockNum)) diff --git a/op-service/testutils/mock_rollup_client.go b/op-service/testutils/mock_rollup_client.go index a7a42e878..dcec6809a 100644 --- a/op-service/testutils/mock_rollup_client.go +++ b/op-service/testutils/mock_rollup_client.go @@ -22,6 +22,15 @@ func (m *MockRollupClient) ExpectOutputAtBlock(blockNum uint64, response *eth.Ou m.Mock.On("OutputAtBlock", blockNum).Once().Return(response, err) } +func (m *MockRollupClient) BatchOutputAtBlock(ctx context.Context, blocks []uint64) ([]*eth.OutputResponse, error) { + out := m.Mock.Called(blocks) + return out.Get(0).([]*eth.OutputResponse), out.Error(1) +} + +func (m *MockRollupClient) ExpectBatchOutputAtBlock(blockNum []uint64, response []*eth.OutputResponse, err error) { + m.Mock.On("BatchOutputAtBlock", blockNum).Once().Return(response, err) +} + func (m *MockRollupClient) SyncStatus(ctx context.Context) (*eth.SyncStatus, error) { out := m.Mock.Called() return out.Get(0).(*eth.SyncStatus), out.Error(1)