diff --git a/contracts/bindings/gen_allowlist.go b/contracts/bindings/gen_allowlist.go deleted file mode 100644 index d4f8b4c72f..0000000000 --- a/contracts/bindings/gen_allowlist.go +++ /dev/null @@ -1,606 +0,0 @@ -// 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/ava-labs/libevm" - "github.com/ava-labs/libevm/accounts/abi" - "github.com/ava-labs/libevm/accounts/abi/bind" - "github.com/ava-labs/libevm/common" - "github.com/ava-labs/libevm/core/types" - "github.com/ava-labs/libevm/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 -) - -// AllowListMetaData contains all meta data concerning the AllowList contract. -var AllowListMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"precompileAddr\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f5ffd5b50604051610d39380380610d3983398181016040528101906100319190610217565b335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100999190610251565b60405180910390fd5b6100b1816100f860201b60201c565b508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061026a565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101e6826101bd565b9050919050565b6101f6816101dc565b8114610200575f5ffd5b50565b5f81519050610211816101ed565b92915050565b5f6020828403121561022c5761022b6101b9565b5b5f61023984828501610203565b91505092915050565b61024b816101dc565b82525050565b5f6020820190506102645f830184610242565b92915050565b610ac2806102775f395ff3fe608060405234801561000f575f5ffd5b506004361061009c575f3560e01c80638da5cb5b116100645780638da5cb5b1461012e5780639015d3711461014c578063d0ebdbe71461017c578063f2fde38b14610198578063f3ae2415146101b45761009c565b80630aaf7043146100a057806324d7806c146100bc578063704b6c02146100ec578063715018a61461010857806374a8f10314610112575b5f5ffd5b6100ba60048036038101906100b59190610930565b6101e4565b005b6100d660048036038101906100d19190610930565b6101f8565b6040516100e39190610975565b60405180910390f35b61010660048036038101906101019190610930565b6102a1565b005b6101106102b5565b005b61012c60048036038101906101279190610930565b6102c8565b005b6101366102dc565b604051610143919061099d565b60405180910390f35b61016660048036038101906101619190610930565b610303565b6040516101739190610975565b60405180910390f35b61019660048036038101906101919190610930565b6103ac565b005b6101b260048036038101906101ad9190610930565b6103c0565b005b6101ce60048036038101906101c99190610930565b610444565b6040516101db9190610975565b60405180910390f35b6101ec6104ed565b6101f581610574565b50565b5f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eb54dae1846040518263ffffffff1660e01b8152600401610254919061099d565b602060405180830381865afa15801561026f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029391906109e9565b905060028114915050919050565b6102a96104ed565b6102b2816105fe565b50565b6102bd6104ed565b6102c65f610688565b565b6102d06104ed565b6102d981610749565b50565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eb54dae1846040518263ffffffff1660e01b815260040161035f919061099d565b602060405180830381865afa15801561037a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039e91906109e9565b90505f811415915050919050565b6103b46104ed565b6103bd81610841565b50565b6103c86104ed565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610438575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161042f919061099d565b60405180910390fd5b61044181610688565b50565b5f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eb54dae1846040518263ffffffff1660e01b81526004016104a0919061099d565b602060405180830381865afa1580156104bb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104df91906109e9565b905060038114915050919050565b6104f56108cb565b73ffffffffffffffffffffffffffffffffffffffff166105136102dc565b73ffffffffffffffffffffffffffffffffffffffff1614610572576105366108cb565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610569919061099d565b60405180910390fd5b565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630aaf7043826040518263ffffffff1660e01b81526004016105ce919061099d565b5f604051808303815f87803b1580156105e5575f5ffd5b505af11580156105f7573d5f5f3e3d5ffd5b5050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663704b6c02826040518263ffffffff1660e01b8152600401610658919061099d565b5f604051808303815f87803b15801561066f575f5ffd5b505af1158015610681573d5f5f3e3d5ffd5b5050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036107b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ae90610a6e565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638c6bfb3b826040518263ffffffff1660e01b8152600401610811919061099d565b5f604051808303815f87803b158015610828575f5ffd5b505af115801561083a573d5f5f3e3d5ffd5b5050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0ebdbe7826040518263ffffffff1660e01b815260040161089b919061099d565b5f604051808303815f87803b1580156108b2575f5ffd5b505af11580156108c4573d5f5f3e3d5ffd5b5050505050565b5f33905090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6108ff826108d6565b9050919050565b61090f816108f5565b8114610919575f5ffd5b50565b5f8135905061092a81610906565b92915050565b5f60208284031215610945576109446108d2565b5b5f6109528482850161091c565b91505092915050565b5f8115159050919050565b61096f8161095b565b82525050565b5f6020820190506109885f830184610966565b92915050565b610997816108f5565b82525050565b5f6020820190506109b05f83018461098e565b92915050565b5f819050919050565b6109c8816109b6565b81146109d2575f5ffd5b50565b5f815190506109e3816109bf565b92915050565b5f602082840312156109fe576109fd6108d2565b5b5f610a0b848285016109d5565b91505092915050565b5f82825260208201905092915050565b7f63616e6e6f74207265766f6b65206f776e20726f6c65000000000000000000005f82015250565b5f610a58601683610a14565b9150610a6382610a24565b602082019050919050565b5f6020820190508181035f830152610a8581610a4c565b905091905056fea2646970667358221220f2f732d978442b49b0ecfe1af950516a759b83444ac4a17d361717e17f3cee4464736f6c634300081e0033", -} - -// AllowListABI is the input ABI used to generate the binding from. -// Deprecated: Use AllowListMetaData.ABI instead. -var AllowListABI = AllowListMetaData.ABI - -// AllowListBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use AllowListMetaData.Bin instead. -var AllowListBin = AllowListMetaData.Bin - -// DeployAllowList deploys a new Ethereum contract, binding an instance of AllowList to it. -func DeployAllowList(auth *bind.TransactOpts, backend bind.ContractBackend, precompileAddr common.Address) (common.Address, *types.Transaction, *AllowList, error) { - parsed, err := AllowListMetaData.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(AllowListBin), backend, precompileAddr) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &AllowList{AllowListCaller: AllowListCaller{contract: contract}, AllowListTransactor: AllowListTransactor{contract: contract}, AllowListFilterer: AllowListFilterer{contract: contract}}, nil -} - -// AllowList is an auto generated Go binding around an Ethereum contract. -type AllowList struct { - AllowListCaller // Read-only binding to the contract - AllowListTransactor // Write-only binding to the contract - AllowListFilterer // Log filterer for contract events -} - -// AllowListCaller is an auto generated read-only Go binding around an Ethereum contract. -type AllowListCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AllowListTransactor is an auto generated write-only Go binding around an Ethereum contract. -type AllowListTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AllowListFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type AllowListFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// AllowListSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type AllowListSession struct { - Contract *AllowList // 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 -} - -// AllowListCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type AllowListCallerSession struct { - Contract *AllowListCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// AllowListTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type AllowListTransactorSession struct { - Contract *AllowListTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// AllowListRaw is an auto generated low-level Go binding around an Ethereum contract. -type AllowListRaw struct { - Contract *AllowList // Generic contract binding to access the raw methods on -} - -// AllowListCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type AllowListCallerRaw struct { - Contract *AllowListCaller // Generic read-only contract binding to access the raw methods on -} - -// AllowListTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type AllowListTransactorRaw struct { - Contract *AllowListTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewAllowList creates a new instance of AllowList, bound to a specific deployed contract. -func NewAllowList(address common.Address, backend bind.ContractBackend) (*AllowList, error) { - contract, err := bindAllowList(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &AllowList{AllowListCaller: AllowListCaller{contract: contract}, AllowListTransactor: AllowListTransactor{contract: contract}, AllowListFilterer: AllowListFilterer{contract: contract}}, nil -} - -// NewAllowListCaller creates a new read-only instance of AllowList, bound to a specific deployed contract. -func NewAllowListCaller(address common.Address, caller bind.ContractCaller) (*AllowListCaller, error) { - contract, err := bindAllowList(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &AllowListCaller{contract: contract}, nil -} - -// NewAllowListTransactor creates a new write-only instance of AllowList, bound to a specific deployed contract. -func NewAllowListTransactor(address common.Address, transactor bind.ContractTransactor) (*AllowListTransactor, error) { - contract, err := bindAllowList(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &AllowListTransactor{contract: contract}, nil -} - -// NewAllowListFilterer creates a new log filterer instance of AllowList, bound to a specific deployed contract. -func NewAllowListFilterer(address common.Address, filterer bind.ContractFilterer) (*AllowListFilterer, error) { - contract, err := bindAllowList(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &AllowListFilterer{contract: contract}, nil -} - -// bindAllowList binds a generic wrapper to an already deployed contract. -func bindAllowList(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := AllowListMetaData.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 (_AllowList *AllowListRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _AllowList.Contract.AllowListCaller.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 (_AllowList *AllowListRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AllowList.Contract.AllowListTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_AllowList *AllowListRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _AllowList.Contract.AllowListTransactor.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 (_AllowList *AllowListCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _AllowList.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 (_AllowList *AllowListTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AllowList.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_AllowList *AllowListTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _AllowList.Contract.contract.Transact(opts, method, params...) -} - -// IsAdmin is a free data retrieval call binding the contract method 0x24d7806c. -// -// Solidity: function isAdmin(address addr) view returns(bool) -func (_AllowList *AllowListCaller) IsAdmin(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _AllowList.contract.Call(opts, &out, "isAdmin", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsAdmin is a free data retrieval call binding the contract method 0x24d7806c. -// -// Solidity: function isAdmin(address addr) view returns(bool) -func (_AllowList *AllowListSession) IsAdmin(addr common.Address) (bool, error) { - return _AllowList.Contract.IsAdmin(&_AllowList.CallOpts, addr) -} - -// IsAdmin is a free data retrieval call binding the contract method 0x24d7806c. -// -// Solidity: function isAdmin(address addr) view returns(bool) -func (_AllowList *AllowListCallerSession) IsAdmin(addr common.Address) (bool, error) { - return _AllowList.Contract.IsAdmin(&_AllowList.CallOpts, addr) -} - -// IsEnabled is a free data retrieval call binding the contract method 0x9015d371. -// -// Solidity: function isEnabled(address addr) view returns(bool) -func (_AllowList *AllowListCaller) IsEnabled(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _AllowList.contract.Call(opts, &out, "isEnabled", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsEnabled is a free data retrieval call binding the contract method 0x9015d371. -// -// Solidity: function isEnabled(address addr) view returns(bool) -func (_AllowList *AllowListSession) IsEnabled(addr common.Address) (bool, error) { - return _AllowList.Contract.IsEnabled(&_AllowList.CallOpts, addr) -} - -// IsEnabled is a free data retrieval call binding the contract method 0x9015d371. -// -// Solidity: function isEnabled(address addr) view returns(bool) -func (_AllowList *AllowListCallerSession) IsEnabled(addr common.Address) (bool, error) { - return _AllowList.Contract.IsEnabled(&_AllowList.CallOpts, addr) -} - -// IsManager is a free data retrieval call binding the contract method 0xf3ae2415. -// -// Solidity: function isManager(address addr) view returns(bool) -func (_AllowList *AllowListCaller) IsManager(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _AllowList.contract.Call(opts, &out, "isManager", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsManager is a free data retrieval call binding the contract method 0xf3ae2415. -// -// Solidity: function isManager(address addr) view returns(bool) -func (_AllowList *AllowListSession) IsManager(addr common.Address) (bool, error) { - return _AllowList.Contract.IsManager(&_AllowList.CallOpts, addr) -} - -// IsManager is a free data retrieval call binding the contract method 0xf3ae2415. -// -// Solidity: function isManager(address addr) view returns(bool) -func (_AllowList *AllowListCallerSession) IsManager(addr common.Address) (bool, error) { - return _AllowList.Contract.IsManager(&_AllowList.CallOpts, addr) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_AllowList *AllowListCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _AllowList.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 (_AllowList *AllowListSession) Owner() (common.Address, error) { - return _AllowList.Contract.Owner(&_AllowList.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_AllowList *AllowListCallerSession) Owner() (common.Address, error) { - return _AllowList.Contract.Owner(&_AllowList.CallOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_AllowList *AllowListTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _AllowList.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_AllowList *AllowListSession) RenounceOwnership() (*types.Transaction, error) { - return _AllowList.Contract.RenounceOwnership(&_AllowList.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_AllowList *AllowListTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _AllowList.Contract.RenounceOwnership(&_AllowList.TransactOpts) -} - -// Revoke is a paid mutator transaction binding the contract method 0x74a8f103. -// -// Solidity: function revoke(address addr) returns() -func (_AllowList *AllowListTransactor) Revoke(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _AllowList.contract.Transact(opts, "revoke", addr) -} - -// Revoke is a paid mutator transaction binding the contract method 0x74a8f103. -// -// Solidity: function revoke(address addr) returns() -func (_AllowList *AllowListSession) Revoke(addr common.Address) (*types.Transaction, error) { - return _AllowList.Contract.Revoke(&_AllowList.TransactOpts, addr) -} - -// Revoke is a paid mutator transaction binding the contract method 0x74a8f103. -// -// Solidity: function revoke(address addr) returns() -func (_AllowList *AllowListTransactorSession) Revoke(addr common.Address) (*types.Transaction, error) { - return _AllowList.Contract.Revoke(&_AllowList.TransactOpts, addr) -} - -// SetAdmin is a paid mutator transaction binding the contract method 0x704b6c02. -// -// Solidity: function setAdmin(address addr) returns() -func (_AllowList *AllowListTransactor) SetAdmin(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _AllowList.contract.Transact(opts, "setAdmin", addr) -} - -// SetAdmin is a paid mutator transaction binding the contract method 0x704b6c02. -// -// Solidity: function setAdmin(address addr) returns() -func (_AllowList *AllowListSession) SetAdmin(addr common.Address) (*types.Transaction, error) { - return _AllowList.Contract.SetAdmin(&_AllowList.TransactOpts, addr) -} - -// SetAdmin is a paid mutator transaction binding the contract method 0x704b6c02. -// -// Solidity: function setAdmin(address addr) returns() -func (_AllowList *AllowListTransactorSession) SetAdmin(addr common.Address) (*types.Transaction, error) { - return _AllowList.Contract.SetAdmin(&_AllowList.TransactOpts, addr) -} - -// SetEnabled is a paid mutator transaction binding the contract method 0x0aaf7043. -// -// Solidity: function setEnabled(address addr) returns() -func (_AllowList *AllowListTransactor) SetEnabled(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _AllowList.contract.Transact(opts, "setEnabled", addr) -} - -// SetEnabled is a paid mutator transaction binding the contract method 0x0aaf7043. -// -// Solidity: function setEnabled(address addr) returns() -func (_AllowList *AllowListSession) SetEnabled(addr common.Address) (*types.Transaction, error) { - return _AllowList.Contract.SetEnabled(&_AllowList.TransactOpts, addr) -} - -// SetEnabled is a paid mutator transaction binding the contract method 0x0aaf7043. -// -// Solidity: function setEnabled(address addr) returns() -func (_AllowList *AllowListTransactorSession) SetEnabled(addr common.Address) (*types.Transaction, error) { - return _AllowList.Contract.SetEnabled(&_AllowList.TransactOpts, addr) -} - -// SetManager is a paid mutator transaction binding the contract method 0xd0ebdbe7. -// -// Solidity: function setManager(address addr) returns() -func (_AllowList *AllowListTransactor) SetManager(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _AllowList.contract.Transact(opts, "setManager", addr) -} - -// SetManager is a paid mutator transaction binding the contract method 0xd0ebdbe7. -// -// Solidity: function setManager(address addr) returns() -func (_AllowList *AllowListSession) SetManager(addr common.Address) (*types.Transaction, error) { - return _AllowList.Contract.SetManager(&_AllowList.TransactOpts, addr) -} - -// SetManager is a paid mutator transaction binding the contract method 0xd0ebdbe7. -// -// Solidity: function setManager(address addr) returns() -func (_AllowList *AllowListTransactorSession) SetManager(addr common.Address) (*types.Transaction, error) { - return _AllowList.Contract.SetManager(&_AllowList.TransactOpts, addr) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_AllowList *AllowListTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _AllowList.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_AllowList *AllowListSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _AllowList.Contract.TransferOwnership(&_AllowList.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_AllowList *AllowListTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _AllowList.Contract.TransferOwnership(&_AllowList.TransactOpts, newOwner) -} - -// AllowListOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the AllowList contract. -type AllowListOwnershipTransferredIterator struct { - Event *AllowListOwnershipTransferred // 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 *AllowListOwnershipTransferredIterator) 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(AllowListOwnershipTransferred) - 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(AllowListOwnershipTransferred) - 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 *AllowListOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *AllowListOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// AllowListOwnershipTransferred represents a OwnershipTransferred event raised by the AllowList contract. -type AllowListOwnershipTransferred 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 (_AllowList *AllowListFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*AllowListOwnershipTransferredIterator, 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 := _AllowList.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &AllowListOwnershipTransferredIterator{contract: _AllowList.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 (_AllowList *AllowListFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *AllowListOwnershipTransferred, 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 := _AllowList.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(AllowListOwnershipTransferred) - if err := _AllowList.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 (_AllowList *AllowListFilterer) ParseOwnershipTransferred(log types.Log) (*AllowListOwnershipTransferred, error) { - event := new(AllowListOwnershipTransferred) - if err := _AllowList.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/contracts/bindings/gen_examplerewardmanager.go b/contracts/bindings/gen_examplerewardmanager.go deleted file mode 100644 index c35152e63b..0000000000 --- a/contracts/bindings/gen_examplerewardmanager.go +++ /dev/null @@ -1,554 +0,0 @@ -// 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/ava-labs/libevm" - "github.com/ava-labs/libevm/accounts/abi" - "github.com/ava-labs/libevm/accounts/abi/bind" - "github.com/ava-labs/libevm/common" - "github.com/ava-labs/libevm/core/types" - "github.com/ava-labs/libevm/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 -) - -// ExampleRewardManagerMetaData contains all meta data concerning the ExampleRewardManager contract. -var ExampleRewardManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowFeeRecipients\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areFeeRecipientsAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setRewardAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405273020000000000000000000000000000000000000460015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015610063575f5ffd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100d5575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100cc91906101ea565b60405180910390fd5b6100e4816100ea60201b60201c565b50610203565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101d4826101ab565b9050919050565b6101e4816101ca565b82525050565b5f6020820190506101fd5f8301846101db565b92915050565b6107bb806102105f395ff3fe608060405234801561000f575f5ffd5b5060043610610086575f3560e01c8063bc17862811610059578063bc178628146100d8578063e915608b146100e2578063f2fde38b14610100578063f6542b2e1461011c57610086565b80630329099f1461008a5780635e00e67914610094578063715018a6146100b05780638da5cb5b146100ba575b5f5ffd5b61009261013a565b005b6100ae60048036038101906100a9919061066b565b6101c0565b005b6100b8610252565b005b6100c2610265565b6040516100cf91906106a5565b60405180910390f35b6100e061028c565b005b6100ea610312565b6040516100f791906106a5565b60405180910390f35b61011a6004803603810190610115919061066b565b6103a6565b005b61012461042a565b60405161013191906106d8565b60405180910390f35b6101426104be565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630329099f6040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156101a8575f5ffd5b505af11580156101ba573d5f5f3e3d5ffd5b50505050565b6101c86104be565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635e00e679826040518263ffffffff1660e01b815260040161022291906106a5565b5f604051808303815f87803b158015610239575f5ffd5b505af115801561024b573d5f5f3e3d5ffd5b5050505050565b61025a6104be565b6102635f610545565b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6102946104be565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc1786286040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156102fa575f5ffd5b505af115801561030c573d5f5f3e3d5ffd5b50505050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e915608b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561037d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a19190610705565b905090565b6103ae6104be565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361041e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161041591906106a5565b60405180910390fd5b61042781610545565b50565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6542b2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610495573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b9919061075a565b905090565b6104c6610606565b73ffffffffffffffffffffffffffffffffffffffff166104e4610265565b73ffffffffffffffffffffffffffffffffffffffff161461054357610507610606565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161053a91906106a5565b60405180910390fd5b565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61063a82610611565b9050919050565b61064a81610630565b8114610654575f5ffd5b50565b5f8135905061066581610641565b92915050565b5f602082840312156106805761067f61060d565b5b5f61068d84828501610657565b91505092915050565b61069f81610630565b82525050565b5f6020820190506106b85f830184610696565b92915050565b5f8115159050919050565b6106d2816106be565b82525050565b5f6020820190506106eb5f8301846106c9565b92915050565b5f815190506106ff81610641565b92915050565b5f6020828403121561071a5761071961060d565b5b5f610727848285016106f1565b91505092915050565b610739816106be565b8114610743575f5ffd5b50565b5f8151905061075481610730565b92915050565b5f6020828403121561076f5761076e61060d565b5b5f61077c84828501610746565b9150509291505056fea2646970667358221220f61773f415e121a56de4f02b984aa72fbdd2d94a3071a4718f845950cd2a511864736f6c634300081e0033", -} - -// ExampleRewardManagerABI is the input ABI used to generate the binding from. -// Deprecated: Use ExampleRewardManagerMetaData.ABI instead. -var ExampleRewardManagerABI = ExampleRewardManagerMetaData.ABI - -// ExampleRewardManagerBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ExampleRewardManagerMetaData.Bin instead. -var ExampleRewardManagerBin = ExampleRewardManagerMetaData.Bin - -// DeployExampleRewardManager deploys a new Ethereum contract, binding an instance of ExampleRewardManager to it. -func DeployExampleRewardManager(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ExampleRewardManager, error) { - parsed, err := ExampleRewardManagerMetaData.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(ExampleRewardManagerBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ExampleRewardManager{ExampleRewardManagerCaller: ExampleRewardManagerCaller{contract: contract}, ExampleRewardManagerTransactor: ExampleRewardManagerTransactor{contract: contract}, ExampleRewardManagerFilterer: ExampleRewardManagerFilterer{contract: contract}}, nil -} - -// ExampleRewardManager is an auto generated Go binding around an Ethereum contract. -type ExampleRewardManager struct { - ExampleRewardManagerCaller // Read-only binding to the contract - ExampleRewardManagerTransactor // Write-only binding to the contract - ExampleRewardManagerFilterer // Log filterer for contract events -} - -// ExampleRewardManagerCaller is an auto generated read-only Go binding around an Ethereum contract. -type ExampleRewardManagerCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ExampleRewardManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ExampleRewardManagerTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ExampleRewardManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ExampleRewardManagerFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ExampleRewardManagerSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ExampleRewardManagerSession struct { - Contract *ExampleRewardManager // 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 -} - -// ExampleRewardManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ExampleRewardManagerCallerSession struct { - Contract *ExampleRewardManagerCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ExampleRewardManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ExampleRewardManagerTransactorSession struct { - Contract *ExampleRewardManagerTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ExampleRewardManagerRaw is an auto generated low-level Go binding around an Ethereum contract. -type ExampleRewardManagerRaw struct { - Contract *ExampleRewardManager // Generic contract binding to access the raw methods on -} - -// ExampleRewardManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ExampleRewardManagerCallerRaw struct { - Contract *ExampleRewardManagerCaller // Generic read-only contract binding to access the raw methods on -} - -// ExampleRewardManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ExampleRewardManagerTransactorRaw struct { - Contract *ExampleRewardManagerTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewExampleRewardManager creates a new instance of ExampleRewardManager, bound to a specific deployed contract. -func NewExampleRewardManager(address common.Address, backend bind.ContractBackend) (*ExampleRewardManager, error) { - contract, err := bindExampleRewardManager(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ExampleRewardManager{ExampleRewardManagerCaller: ExampleRewardManagerCaller{contract: contract}, ExampleRewardManagerTransactor: ExampleRewardManagerTransactor{contract: contract}, ExampleRewardManagerFilterer: ExampleRewardManagerFilterer{contract: contract}}, nil -} - -// NewExampleRewardManagerCaller creates a new read-only instance of ExampleRewardManager, bound to a specific deployed contract. -func NewExampleRewardManagerCaller(address common.Address, caller bind.ContractCaller) (*ExampleRewardManagerCaller, error) { - contract, err := bindExampleRewardManager(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ExampleRewardManagerCaller{contract: contract}, nil -} - -// NewExampleRewardManagerTransactor creates a new write-only instance of ExampleRewardManager, bound to a specific deployed contract. -func NewExampleRewardManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*ExampleRewardManagerTransactor, error) { - contract, err := bindExampleRewardManager(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ExampleRewardManagerTransactor{contract: contract}, nil -} - -// NewExampleRewardManagerFilterer creates a new log filterer instance of ExampleRewardManager, bound to a specific deployed contract. -func NewExampleRewardManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*ExampleRewardManagerFilterer, error) { - contract, err := bindExampleRewardManager(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ExampleRewardManagerFilterer{contract: contract}, nil -} - -// bindExampleRewardManager binds a generic wrapper to an already deployed contract. -func bindExampleRewardManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ExampleRewardManagerMetaData.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 (_ExampleRewardManager *ExampleRewardManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ExampleRewardManager.Contract.ExampleRewardManagerCaller.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 (_ExampleRewardManager *ExampleRewardManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ExampleRewardManager.Contract.ExampleRewardManagerTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ExampleRewardManager *ExampleRewardManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ExampleRewardManager.Contract.ExampleRewardManagerTransactor.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 (_ExampleRewardManager *ExampleRewardManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ExampleRewardManager.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 (_ExampleRewardManager *ExampleRewardManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ExampleRewardManager.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ExampleRewardManager *ExampleRewardManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ExampleRewardManager.Contract.contract.Transact(opts, method, params...) -} - -// AreFeeRecipientsAllowed is a free data retrieval call binding the contract method 0xf6542b2e. -// -// Solidity: function areFeeRecipientsAllowed() view returns(bool) -func (_ExampleRewardManager *ExampleRewardManagerCaller) AreFeeRecipientsAllowed(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _ExampleRewardManager.contract.Call(opts, &out, "areFeeRecipientsAllowed") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// AreFeeRecipientsAllowed is a free data retrieval call binding the contract method 0xf6542b2e. -// -// Solidity: function areFeeRecipientsAllowed() view returns(bool) -func (_ExampleRewardManager *ExampleRewardManagerSession) AreFeeRecipientsAllowed() (bool, error) { - return _ExampleRewardManager.Contract.AreFeeRecipientsAllowed(&_ExampleRewardManager.CallOpts) -} - -// AreFeeRecipientsAllowed is a free data retrieval call binding the contract method 0xf6542b2e. -// -// Solidity: function areFeeRecipientsAllowed() view returns(bool) -func (_ExampleRewardManager *ExampleRewardManagerCallerSession) AreFeeRecipientsAllowed() (bool, error) { - return _ExampleRewardManager.Contract.AreFeeRecipientsAllowed(&_ExampleRewardManager.CallOpts) -} - -// CurrentRewardAddress is a free data retrieval call binding the contract method 0xe915608b. -// -// Solidity: function currentRewardAddress() view returns(address) -func (_ExampleRewardManager *ExampleRewardManagerCaller) CurrentRewardAddress(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ExampleRewardManager.contract.Call(opts, &out, "currentRewardAddress") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// CurrentRewardAddress is a free data retrieval call binding the contract method 0xe915608b. -// -// Solidity: function currentRewardAddress() view returns(address) -func (_ExampleRewardManager *ExampleRewardManagerSession) CurrentRewardAddress() (common.Address, error) { - return _ExampleRewardManager.Contract.CurrentRewardAddress(&_ExampleRewardManager.CallOpts) -} - -// CurrentRewardAddress is a free data retrieval call binding the contract method 0xe915608b. -// -// Solidity: function currentRewardAddress() view returns(address) -func (_ExampleRewardManager *ExampleRewardManagerCallerSession) CurrentRewardAddress() (common.Address, error) { - return _ExampleRewardManager.Contract.CurrentRewardAddress(&_ExampleRewardManager.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_ExampleRewardManager *ExampleRewardManagerCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ExampleRewardManager.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 (_ExampleRewardManager *ExampleRewardManagerSession) Owner() (common.Address, error) { - return _ExampleRewardManager.Contract.Owner(&_ExampleRewardManager.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_ExampleRewardManager *ExampleRewardManagerCallerSession) Owner() (common.Address, error) { - return _ExampleRewardManager.Contract.Owner(&_ExampleRewardManager.CallOpts) -} - -// AllowFeeRecipients is a paid mutator transaction binding the contract method 0x0329099f. -// -// Solidity: function allowFeeRecipients() returns() -func (_ExampleRewardManager *ExampleRewardManagerTransactor) AllowFeeRecipients(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ExampleRewardManager.contract.Transact(opts, "allowFeeRecipients") -} - -// AllowFeeRecipients is a paid mutator transaction binding the contract method 0x0329099f. -// -// Solidity: function allowFeeRecipients() returns() -func (_ExampleRewardManager *ExampleRewardManagerSession) AllowFeeRecipients() (*types.Transaction, error) { - return _ExampleRewardManager.Contract.AllowFeeRecipients(&_ExampleRewardManager.TransactOpts) -} - -// AllowFeeRecipients is a paid mutator transaction binding the contract method 0x0329099f. -// -// Solidity: function allowFeeRecipients() returns() -func (_ExampleRewardManager *ExampleRewardManagerTransactorSession) AllowFeeRecipients() (*types.Transaction, error) { - return _ExampleRewardManager.Contract.AllowFeeRecipients(&_ExampleRewardManager.TransactOpts) -} - -// DisableRewards is a paid mutator transaction binding the contract method 0xbc178628. -// -// Solidity: function disableRewards() returns() -func (_ExampleRewardManager *ExampleRewardManagerTransactor) DisableRewards(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ExampleRewardManager.contract.Transact(opts, "disableRewards") -} - -// DisableRewards is a paid mutator transaction binding the contract method 0xbc178628. -// -// Solidity: function disableRewards() returns() -func (_ExampleRewardManager *ExampleRewardManagerSession) DisableRewards() (*types.Transaction, error) { - return _ExampleRewardManager.Contract.DisableRewards(&_ExampleRewardManager.TransactOpts) -} - -// DisableRewards is a paid mutator transaction binding the contract method 0xbc178628. -// -// Solidity: function disableRewards() returns() -func (_ExampleRewardManager *ExampleRewardManagerTransactorSession) DisableRewards() (*types.Transaction, error) { - return _ExampleRewardManager.Contract.DisableRewards(&_ExampleRewardManager.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_ExampleRewardManager *ExampleRewardManagerTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ExampleRewardManager.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_ExampleRewardManager *ExampleRewardManagerSession) RenounceOwnership() (*types.Transaction, error) { - return _ExampleRewardManager.Contract.RenounceOwnership(&_ExampleRewardManager.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_ExampleRewardManager *ExampleRewardManagerTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _ExampleRewardManager.Contract.RenounceOwnership(&_ExampleRewardManager.TransactOpts) -} - -// SetRewardAddress is a paid mutator transaction binding the contract method 0x5e00e679. -// -// Solidity: function setRewardAddress(address addr) returns() -func (_ExampleRewardManager *ExampleRewardManagerTransactor) SetRewardAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _ExampleRewardManager.contract.Transact(opts, "setRewardAddress", addr) -} - -// SetRewardAddress is a paid mutator transaction binding the contract method 0x5e00e679. -// -// Solidity: function setRewardAddress(address addr) returns() -func (_ExampleRewardManager *ExampleRewardManagerSession) SetRewardAddress(addr common.Address) (*types.Transaction, error) { - return _ExampleRewardManager.Contract.SetRewardAddress(&_ExampleRewardManager.TransactOpts, addr) -} - -// SetRewardAddress is a paid mutator transaction binding the contract method 0x5e00e679. -// -// Solidity: function setRewardAddress(address addr) returns() -func (_ExampleRewardManager *ExampleRewardManagerTransactorSession) SetRewardAddress(addr common.Address) (*types.Transaction, error) { - return _ExampleRewardManager.Contract.SetRewardAddress(&_ExampleRewardManager.TransactOpts, addr) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_ExampleRewardManager *ExampleRewardManagerTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _ExampleRewardManager.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_ExampleRewardManager *ExampleRewardManagerSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _ExampleRewardManager.Contract.TransferOwnership(&_ExampleRewardManager.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_ExampleRewardManager *ExampleRewardManagerTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _ExampleRewardManager.Contract.TransferOwnership(&_ExampleRewardManager.TransactOpts, newOwner) -} - -// ExampleRewardManagerOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ExampleRewardManager contract. -type ExampleRewardManagerOwnershipTransferredIterator struct { - Event *ExampleRewardManagerOwnershipTransferred // 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 *ExampleRewardManagerOwnershipTransferredIterator) 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(ExampleRewardManagerOwnershipTransferred) - 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(ExampleRewardManagerOwnershipTransferred) - 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 *ExampleRewardManagerOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ExampleRewardManagerOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ExampleRewardManagerOwnershipTransferred represents a OwnershipTransferred event raised by the ExampleRewardManager contract. -type ExampleRewardManagerOwnershipTransferred 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 (_ExampleRewardManager *ExampleRewardManagerFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ExampleRewardManagerOwnershipTransferredIterator, 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 := _ExampleRewardManager.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &ExampleRewardManagerOwnershipTransferredIterator{contract: _ExampleRewardManager.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 (_ExampleRewardManager *ExampleRewardManagerFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ExampleRewardManagerOwnershipTransferred, 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 := _ExampleRewardManager.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(ExampleRewardManagerOwnershipTransferred) - if err := _ExampleRewardManager.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 (_ExampleRewardManager *ExampleRewardManagerFilterer) ParseOwnershipTransferred(log types.Log) (*ExampleRewardManagerOwnershipTransferred, error) { - event := new(ExampleRewardManagerOwnershipTransferred) - if err := _ExampleRewardManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/contracts/bindings/gen_exampletxallowlist.go b/contracts/bindings/gen_exampletxallowlist.go deleted file mode 100644 index 6c451ee946..0000000000 --- a/contracts/bindings/gen_exampletxallowlist.go +++ /dev/null @@ -1,627 +0,0 @@ -// 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/ava-labs/libevm" - "github.com/ava-labs/libevm/accounts/abi" - "github.com/ava-labs/libevm/accounts/abi/bind" - "github.com/ava-labs/libevm/common" - "github.com/ava-labs/libevm/core/types" - "github.com/ava-labs/libevm/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 -) - -// ExampleTxAllowListMetaData contains all meta data concerning the ExampleTxAllowList contract. -var ExampleTxAllowListMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"deployContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isManager\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f5ffd5b50730200000000000000000000000000000000000002335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610096575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161008d91906101ec565b60405180910390fd5b6100a5816100ec60201b60201c565b508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610205565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101d6826101ad565b9050919050565b6101e6816101cc565b82525050565b5f6020820190506101ff5f8301846101dd565b92915050565b610b64806102125f395ff3fe608060405234801561000f575f5ffd5b50600436106100a7575f3560e01c806374a8f1031161006f57806374a8f103146101275780638da5cb5b146101435780639015d37114610161578063d0ebdbe714610191578063f2fde38b146101ad578063f3ae2415146101c9576100a7565b80630aaf7043146100ab57806324d7806c146100c75780636cd5c39b146100f7578063704b6c0214610101578063715018a61461011d575b5f5ffd5b6100c560048036038101906100c0919061097a565b6101f9565b005b6100e160048036038101906100dc919061097a565b61020d565b6040516100ee91906109bf565b60405180910390f35b6100ff6102b6565b005b61011b6004803603810190610116919061097a565b6102df565b005b6101256102f3565b005b610141600480360381019061013c919061097a565b610306565b005b61014b61031a565b60405161015891906109e7565b60405180910390f35b61017b6004803603810190610176919061097a565b610341565b60405161018891906109bf565b60405180910390f35b6101ab60048036038101906101a6919061097a565b6103ea565b005b6101c760048036038101906101c2919061097a565b6103fe565b005b6101e360048036038101906101de919061097a565b610482565b6040516101f091906109bf565b60405180910390f35b61020161052b565b61020a816105b2565b50565b5f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eb54dae1846040518263ffffffff1660e01b815260040161026991906109e7565b602060405180830381865afa158015610284573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102a89190610a33565b905060028114915050919050565b6040516102c290610910565b604051809103905ff0801580156102db573d5f5f3e3d5ffd5b5050565b6102e761052b565b6102f08161063c565b50565b6102fb61052b565b6103045f6106c6565b565b61030e61052b565b61031781610787565b50565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eb54dae1846040518263ffffffff1660e01b815260040161039d91906109e7565b602060405180830381865afa1580156103b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103dc9190610a33565b90505f811415915050919050565b6103f261052b565b6103fb8161087f565b50565b61040661052b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610476575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161046d91906109e7565b60405180910390fd5b61047f816106c6565b50565b5f5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eb54dae1846040518263ffffffff1660e01b81526004016104de91906109e7565b602060405180830381865afa1580156104f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051d9190610a33565b905060038114915050919050565b610533610909565b73ffffffffffffffffffffffffffffffffffffffff1661055161031a565b73ffffffffffffffffffffffffffffffffffffffff16146105b057610574610909565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016105a791906109e7565b60405180910390fd5b565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630aaf7043826040518263ffffffff1660e01b815260040161060c91906109e7565b5f604051808303815f87803b158015610623575f5ffd5b505af1158015610635573d5f5f3e3d5ffd5b5050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663704b6c02826040518263ffffffff1660e01b815260040161069691906109e7565b5f604051808303815f87803b1580156106ad575f5ffd5b505af11580156106bf573d5f5f3e3d5ffd5b5050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036107f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ec90610ab8565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638c6bfb3b826040518263ffffffff1660e01b815260040161084f91906109e7565b5f604051808303815f87803b158015610866575f5ffd5b505af1158015610878573d5f5f3e3d5ffd5b5050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0ebdbe7826040518263ffffffff1660e01b81526004016108d991906109e7565b5f604051808303815f87803b1580156108f0575f5ffd5b505af1158015610902573d5f5f3e3d5ffd5b5050505050565b5f33905090565b605880610ad783390190565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61094982610920565b9050919050565b6109598161093f565b8114610963575f5ffd5b50565b5f8135905061097481610950565b92915050565b5f6020828403121561098f5761098e61091c565b5b5f61099c84828501610966565b91505092915050565b5f8115159050919050565b6109b9816109a5565b82525050565b5f6020820190506109d25f8301846109b0565b92915050565b6109e18161093f565b82525050565b5f6020820190506109fa5f8301846109d8565b92915050565b5f819050919050565b610a1281610a00565b8114610a1c575f5ffd5b50565b5f81519050610a2d81610a09565b92915050565b5f60208284031215610a4857610a4761091c565b5b5f610a5584828501610a1f565b91505092915050565b5f82825260208201905092915050565b7f63616e6e6f74207265766f6b65206f776e20726f6c65000000000000000000005f82015250565b5f610aa2601683610a5e565b9150610aad82610a6e565b602082019050919050565b5f6020820190508181035f830152610acf81610a96565b905091905056fe6080604052348015600e575f5ffd5b50603e80601a5f395ff3fe60806040525f5ffdfea2646970667358221220aedbe0b8994e01f21097161356ab23bf8ba2eff27752ec3f93783e61960dc45a64736f6c634300081e0033a2646970667358221220a4be2d748c995fa42a055822677de3696a1c5994ff8558dfb971173a3bcee53564736f6c634300081e0033", -} - -// ExampleTxAllowListABI is the input ABI used to generate the binding from. -// Deprecated: Use ExampleTxAllowListMetaData.ABI instead. -var ExampleTxAllowListABI = ExampleTxAllowListMetaData.ABI - -// ExampleTxAllowListBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use ExampleTxAllowListMetaData.Bin instead. -var ExampleTxAllowListBin = ExampleTxAllowListMetaData.Bin - -// DeployExampleTxAllowList deploys a new Ethereum contract, binding an instance of ExampleTxAllowList to it. -func DeployExampleTxAllowList(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ExampleTxAllowList, error) { - parsed, err := ExampleTxAllowListMetaData.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(ExampleTxAllowListBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &ExampleTxAllowList{ExampleTxAllowListCaller: ExampleTxAllowListCaller{contract: contract}, ExampleTxAllowListTransactor: ExampleTxAllowListTransactor{contract: contract}, ExampleTxAllowListFilterer: ExampleTxAllowListFilterer{contract: contract}}, nil -} - -// ExampleTxAllowList is an auto generated Go binding around an Ethereum contract. -type ExampleTxAllowList struct { - ExampleTxAllowListCaller // Read-only binding to the contract - ExampleTxAllowListTransactor // Write-only binding to the contract - ExampleTxAllowListFilterer // Log filterer for contract events -} - -// ExampleTxAllowListCaller is an auto generated read-only Go binding around an Ethereum contract. -type ExampleTxAllowListCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ExampleTxAllowListTransactor is an auto generated write-only Go binding around an Ethereum contract. -type ExampleTxAllowListTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ExampleTxAllowListFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type ExampleTxAllowListFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// ExampleTxAllowListSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type ExampleTxAllowListSession struct { - Contract *ExampleTxAllowList // 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 -} - -// ExampleTxAllowListCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type ExampleTxAllowListCallerSession struct { - Contract *ExampleTxAllowListCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// ExampleTxAllowListTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type ExampleTxAllowListTransactorSession struct { - Contract *ExampleTxAllowListTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// ExampleTxAllowListRaw is an auto generated low-level Go binding around an Ethereum contract. -type ExampleTxAllowListRaw struct { - Contract *ExampleTxAllowList // Generic contract binding to access the raw methods on -} - -// ExampleTxAllowListCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type ExampleTxAllowListCallerRaw struct { - Contract *ExampleTxAllowListCaller // Generic read-only contract binding to access the raw methods on -} - -// ExampleTxAllowListTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type ExampleTxAllowListTransactorRaw struct { - Contract *ExampleTxAllowListTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewExampleTxAllowList creates a new instance of ExampleTxAllowList, bound to a specific deployed contract. -func NewExampleTxAllowList(address common.Address, backend bind.ContractBackend) (*ExampleTxAllowList, error) { - contract, err := bindExampleTxAllowList(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &ExampleTxAllowList{ExampleTxAllowListCaller: ExampleTxAllowListCaller{contract: contract}, ExampleTxAllowListTransactor: ExampleTxAllowListTransactor{contract: contract}, ExampleTxAllowListFilterer: ExampleTxAllowListFilterer{contract: contract}}, nil -} - -// NewExampleTxAllowListCaller creates a new read-only instance of ExampleTxAllowList, bound to a specific deployed contract. -func NewExampleTxAllowListCaller(address common.Address, caller bind.ContractCaller) (*ExampleTxAllowListCaller, error) { - contract, err := bindExampleTxAllowList(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &ExampleTxAllowListCaller{contract: contract}, nil -} - -// NewExampleTxAllowListTransactor creates a new write-only instance of ExampleTxAllowList, bound to a specific deployed contract. -func NewExampleTxAllowListTransactor(address common.Address, transactor bind.ContractTransactor) (*ExampleTxAllowListTransactor, error) { - contract, err := bindExampleTxAllowList(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &ExampleTxAllowListTransactor{contract: contract}, nil -} - -// NewExampleTxAllowListFilterer creates a new log filterer instance of ExampleTxAllowList, bound to a specific deployed contract. -func NewExampleTxAllowListFilterer(address common.Address, filterer bind.ContractFilterer) (*ExampleTxAllowListFilterer, error) { - contract, err := bindExampleTxAllowList(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &ExampleTxAllowListFilterer{contract: contract}, nil -} - -// bindExampleTxAllowList binds a generic wrapper to an already deployed contract. -func bindExampleTxAllowList(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := ExampleTxAllowListMetaData.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 (_ExampleTxAllowList *ExampleTxAllowListRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ExampleTxAllowList.Contract.ExampleTxAllowListCaller.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 (_ExampleTxAllowList *ExampleTxAllowListRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.ExampleTxAllowListTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ExampleTxAllowList *ExampleTxAllowListRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.ExampleTxAllowListTransactor.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 (_ExampleTxAllowList *ExampleTxAllowListCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _ExampleTxAllowList.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 (_ExampleTxAllowList *ExampleTxAllowListTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_ExampleTxAllowList *ExampleTxAllowListTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.contract.Transact(opts, method, params...) -} - -// IsAdmin is a free data retrieval call binding the contract method 0x24d7806c. -// -// Solidity: function isAdmin(address addr) view returns(bool) -func (_ExampleTxAllowList *ExampleTxAllowListCaller) IsAdmin(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _ExampleTxAllowList.contract.Call(opts, &out, "isAdmin", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsAdmin is a free data retrieval call binding the contract method 0x24d7806c. -// -// Solidity: function isAdmin(address addr) view returns(bool) -func (_ExampleTxAllowList *ExampleTxAllowListSession) IsAdmin(addr common.Address) (bool, error) { - return _ExampleTxAllowList.Contract.IsAdmin(&_ExampleTxAllowList.CallOpts, addr) -} - -// IsAdmin is a free data retrieval call binding the contract method 0x24d7806c. -// -// Solidity: function isAdmin(address addr) view returns(bool) -func (_ExampleTxAllowList *ExampleTxAllowListCallerSession) IsAdmin(addr common.Address) (bool, error) { - return _ExampleTxAllowList.Contract.IsAdmin(&_ExampleTxAllowList.CallOpts, addr) -} - -// IsEnabled is a free data retrieval call binding the contract method 0x9015d371. -// -// Solidity: function isEnabled(address addr) view returns(bool) -func (_ExampleTxAllowList *ExampleTxAllowListCaller) IsEnabled(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _ExampleTxAllowList.contract.Call(opts, &out, "isEnabled", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsEnabled is a free data retrieval call binding the contract method 0x9015d371. -// -// Solidity: function isEnabled(address addr) view returns(bool) -func (_ExampleTxAllowList *ExampleTxAllowListSession) IsEnabled(addr common.Address) (bool, error) { - return _ExampleTxAllowList.Contract.IsEnabled(&_ExampleTxAllowList.CallOpts, addr) -} - -// IsEnabled is a free data retrieval call binding the contract method 0x9015d371. -// -// Solidity: function isEnabled(address addr) view returns(bool) -func (_ExampleTxAllowList *ExampleTxAllowListCallerSession) IsEnabled(addr common.Address) (bool, error) { - return _ExampleTxAllowList.Contract.IsEnabled(&_ExampleTxAllowList.CallOpts, addr) -} - -// IsManager is a free data retrieval call binding the contract method 0xf3ae2415. -// -// Solidity: function isManager(address addr) view returns(bool) -func (_ExampleTxAllowList *ExampleTxAllowListCaller) IsManager(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _ExampleTxAllowList.contract.Call(opts, &out, "isManager", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsManager is a free data retrieval call binding the contract method 0xf3ae2415. -// -// Solidity: function isManager(address addr) view returns(bool) -func (_ExampleTxAllowList *ExampleTxAllowListSession) IsManager(addr common.Address) (bool, error) { - return _ExampleTxAllowList.Contract.IsManager(&_ExampleTxAllowList.CallOpts, addr) -} - -// IsManager is a free data retrieval call binding the contract method 0xf3ae2415. -// -// Solidity: function isManager(address addr) view returns(bool) -func (_ExampleTxAllowList *ExampleTxAllowListCallerSession) IsManager(addr common.Address) (bool, error) { - return _ExampleTxAllowList.Contract.IsManager(&_ExampleTxAllowList.CallOpts, addr) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_ExampleTxAllowList *ExampleTxAllowListCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _ExampleTxAllowList.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 (_ExampleTxAllowList *ExampleTxAllowListSession) Owner() (common.Address, error) { - return _ExampleTxAllowList.Contract.Owner(&_ExampleTxAllowList.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_ExampleTxAllowList *ExampleTxAllowListCallerSession) Owner() (common.Address, error) { - return _ExampleTxAllowList.Contract.Owner(&_ExampleTxAllowList.CallOpts) -} - -// DeployContract is a paid mutator transaction binding the contract method 0x6cd5c39b. -// -// Solidity: function deployContract() returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactor) DeployContract(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ExampleTxAllowList.contract.Transact(opts, "deployContract") -} - -// DeployContract is a paid mutator transaction binding the contract method 0x6cd5c39b. -// -// Solidity: function deployContract() returns() -func (_ExampleTxAllowList *ExampleTxAllowListSession) DeployContract() (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.DeployContract(&_ExampleTxAllowList.TransactOpts) -} - -// DeployContract is a paid mutator transaction binding the contract method 0x6cd5c39b. -// -// Solidity: function deployContract() returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactorSession) DeployContract() (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.DeployContract(&_ExampleTxAllowList.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _ExampleTxAllowList.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_ExampleTxAllowList *ExampleTxAllowListSession) RenounceOwnership() (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.RenounceOwnership(&_ExampleTxAllowList.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.RenounceOwnership(&_ExampleTxAllowList.TransactOpts) -} - -// Revoke is a paid mutator transaction binding the contract method 0x74a8f103. -// -// Solidity: function revoke(address addr) returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactor) Revoke(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.contract.Transact(opts, "revoke", addr) -} - -// Revoke is a paid mutator transaction binding the contract method 0x74a8f103. -// -// Solidity: function revoke(address addr) returns() -func (_ExampleTxAllowList *ExampleTxAllowListSession) Revoke(addr common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.Revoke(&_ExampleTxAllowList.TransactOpts, addr) -} - -// Revoke is a paid mutator transaction binding the contract method 0x74a8f103. -// -// Solidity: function revoke(address addr) returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactorSession) Revoke(addr common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.Revoke(&_ExampleTxAllowList.TransactOpts, addr) -} - -// SetAdmin is a paid mutator transaction binding the contract method 0x704b6c02. -// -// Solidity: function setAdmin(address addr) returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactor) SetAdmin(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.contract.Transact(opts, "setAdmin", addr) -} - -// SetAdmin is a paid mutator transaction binding the contract method 0x704b6c02. -// -// Solidity: function setAdmin(address addr) returns() -func (_ExampleTxAllowList *ExampleTxAllowListSession) SetAdmin(addr common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.SetAdmin(&_ExampleTxAllowList.TransactOpts, addr) -} - -// SetAdmin is a paid mutator transaction binding the contract method 0x704b6c02. -// -// Solidity: function setAdmin(address addr) returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactorSession) SetAdmin(addr common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.SetAdmin(&_ExampleTxAllowList.TransactOpts, addr) -} - -// SetEnabled is a paid mutator transaction binding the contract method 0x0aaf7043. -// -// Solidity: function setEnabled(address addr) returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactor) SetEnabled(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.contract.Transact(opts, "setEnabled", addr) -} - -// SetEnabled is a paid mutator transaction binding the contract method 0x0aaf7043. -// -// Solidity: function setEnabled(address addr) returns() -func (_ExampleTxAllowList *ExampleTxAllowListSession) SetEnabled(addr common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.SetEnabled(&_ExampleTxAllowList.TransactOpts, addr) -} - -// SetEnabled is a paid mutator transaction binding the contract method 0x0aaf7043. -// -// Solidity: function setEnabled(address addr) returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactorSession) SetEnabled(addr common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.SetEnabled(&_ExampleTxAllowList.TransactOpts, addr) -} - -// SetManager is a paid mutator transaction binding the contract method 0xd0ebdbe7. -// -// Solidity: function setManager(address addr) returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactor) SetManager(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.contract.Transact(opts, "setManager", addr) -} - -// SetManager is a paid mutator transaction binding the contract method 0xd0ebdbe7. -// -// Solidity: function setManager(address addr) returns() -func (_ExampleTxAllowList *ExampleTxAllowListSession) SetManager(addr common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.SetManager(&_ExampleTxAllowList.TransactOpts, addr) -} - -// SetManager is a paid mutator transaction binding the contract method 0xd0ebdbe7. -// -// Solidity: function setManager(address addr) returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactorSession) SetManager(addr common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.SetManager(&_ExampleTxAllowList.TransactOpts, addr) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_ExampleTxAllowList *ExampleTxAllowListSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.TransferOwnership(&_ExampleTxAllowList.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_ExampleTxAllowList *ExampleTxAllowListTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _ExampleTxAllowList.Contract.TransferOwnership(&_ExampleTxAllowList.TransactOpts, newOwner) -} - -// ExampleTxAllowListOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the ExampleTxAllowList contract. -type ExampleTxAllowListOwnershipTransferredIterator struct { - Event *ExampleTxAllowListOwnershipTransferred // 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 *ExampleTxAllowListOwnershipTransferredIterator) 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(ExampleTxAllowListOwnershipTransferred) - 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(ExampleTxAllowListOwnershipTransferred) - 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 *ExampleTxAllowListOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *ExampleTxAllowListOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// ExampleTxAllowListOwnershipTransferred represents a OwnershipTransferred event raised by the ExampleTxAllowList contract. -type ExampleTxAllowListOwnershipTransferred 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 (_ExampleTxAllowList *ExampleTxAllowListFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*ExampleTxAllowListOwnershipTransferredIterator, 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 := _ExampleTxAllowList.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &ExampleTxAllowListOwnershipTransferredIterator{contract: _ExampleTxAllowList.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 (_ExampleTxAllowList *ExampleTxAllowListFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ExampleTxAllowListOwnershipTransferred, 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 := _ExampleTxAllowList.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(ExampleTxAllowListOwnershipTransferred) - if err := _ExampleTxAllowList.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 (_ExampleTxAllowList *ExampleTxAllowListFilterer) ParseOwnershipTransferred(log types.Log) (*ExampleTxAllowListOwnershipTransferred, error) { - event := new(ExampleTxAllowListOwnershipTransferred) - if err := _ExampleTxAllowList.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/contracts/contracts/AllowList.sol b/contracts/contracts/AllowList.sol deleted file mode 100644 index 9a6a88e7b6..0000000000 --- a/contracts/contracts/AllowList.sol +++ /dev/null @@ -1,82 +0,0 @@ -//SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import "./interfaces/IAllowList.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; - -// AllowList is a base contract to use AllowList precompile capabilities. -contract AllowList is Ownable { - // Precompiled Allow List Contract Address - IAllowList private allowList; - - uint256 constant STATUS_NONE = 0; - uint256 constant STATUS_ENABLED = 1; - uint256 constant STATUS_ADMIN = 2; - uint256 constant STATUS_MANAGER = 3; - - enum Role { - None, - Enabled, - Admin, - Manager - } - - constructor(address precompileAddr) Ownable(msg.sender) { - allowList = IAllowList(precompileAddr); - } - - modifier onlyEnabled() { - require(isEnabled(msg.sender), "not enabled"); - _; - } - - function isAdmin(address addr) public view returns (bool) { - uint256 result = allowList.readAllowList(addr); - return result == STATUS_ADMIN; - } - - function isManager(address addr) public view returns (bool) { - uint256 result = allowList.readAllowList(addr); - return result == STATUS_MANAGER; - } - - function isEnabled(address addr) public view returns (bool) { - uint256 result = allowList.readAllowList(addr); - // if address is ENABLED or ADMIN or MANAGER it can deploy - // in other words, if it's not NONE it can deploy. - return result != STATUS_NONE; - } - - function setAdmin(address addr) public virtual onlyOwner { - _setAdmin(addr); - } - - function _setAdmin(address addr) private { - allowList.setAdmin(addr); - } - - function setManager(address addr) public virtual onlyOwner { - _setManager(addr); - } - - function _setManager(address addr) private { - allowList.setManager(addr); - } - - function setEnabled(address addr) public virtual onlyOwner { - _setEnabled(addr); - } - - function _setEnabled(address addr) private { - allowList.setEnabled(addr); - } - - function revoke(address addr) public virtual onlyOwner { - _revoke(addr); - } - - function _revoke(address addr) private { - require(msg.sender != addr, "cannot revoke own role"); - allowList.setNone(addr); - } -} diff --git a/contracts/contracts/ExampleRewardManager.sol b/contracts/contracts/ExampleRewardManager.sol deleted file mode 100644 index 2a0d48132c..0000000000 --- a/contracts/contracts/ExampleRewardManager.sol +++ /dev/null @@ -1,34 +0,0 @@ -//SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import "./interfaces/IRewardManager.sol"; -import "@openzeppelin/contracts/access/Ownable.sol"; - -address constant REWARD_MANAGER_ADDRESS = 0x0200000000000000000000000000000000000004; - -// ExampleRewardManager is a sample wrapper contract for RewardManager precompile. -contract ExampleRewardManager is Ownable { - IRewardManager rewardManager = IRewardManager(REWARD_MANAGER_ADDRESS); - - constructor() Ownable(msg.sender) {} - - function currentRewardAddress() public view returns (address) { - return rewardManager.currentRewardAddress(); - } - - function setRewardAddress(address addr) public onlyOwner { - rewardManager.setRewardAddress(addr); - } - - function allowFeeRecipients() public onlyOwner { - rewardManager.allowFeeRecipients(); - } - - function disableRewards() public onlyOwner { - rewardManager.disableRewards(); - } - - function areFeeRecipientsAllowed() public view returns (bool) { - return rewardManager.areFeeRecipientsAllowed(); - } -} diff --git a/contracts/contracts/interfaces/IAllowList.sol b/contracts/contracts/interfaces/IAllowList.sol deleted file mode 100644 index 8b525b12e1..0000000000 --- a/contracts/contracts/interfaces/IAllowList.sol +++ /dev/null @@ -1,21 +0,0 @@ -//SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -interface IAllowList { - event RoleSet(uint256 indexed role, address indexed account, address indexed sender, uint256 oldRole); - - // Set [addr] to have the admin role over the precompile contract. - function setAdmin(address addr) external; - - // Set [addr] to be enabled on the precompile contract. - function setEnabled(address addr) external; - - // Set [addr] to have the manager role over the precompile contract. - function setManager(address addr) external; - - // Set [addr] to have no role for the precompile contract. - function setNone(address addr) external; - - // Read the status of [addr]. - function readAllowList(address addr) external view returns (uint256 role); -} diff --git a/contracts/contracts/interfaces/IRewardManager.sol b/contracts/contracts/interfaces/IRewardManager.sol deleted file mode 100644 index f6876e532b..0000000000 --- a/contracts/contracts/interfaces/IRewardManager.sol +++ /dev/null @@ -1,33 +0,0 @@ -//SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; -import "./IAllowList.sol"; - -interface IRewardManager is IAllowList { - // RewardAddressChanged is the event logged whenever reward address is modified - event RewardAddressChanged( - address indexed sender, - address indexed oldRewardAddress, - address indexed newRewardAddress - ); - - // FeeRecipientsAllowed is the event logged whenever fee recipient is modified - event FeeRecipientsAllowed(address indexed sender); - - // RewardsDisabled is the event logged whenever rewards are disabled - event RewardsDisabled(address indexed sender); - - // setRewardAddress sets the reward address to the given address - function setRewardAddress(address addr) external; - - // allowFeeRecipients allows block builders to claim fees - function allowFeeRecipients() external; - - // disableRewards disables block rewards and starts burning fees - function disableRewards() external; - - // currentRewardAddress returns the current reward address - function currentRewardAddress() external view returns (address rewardAddress); - - // areFeeRecipientsAllowed returns true if fee recipients are allowed - function areFeeRecipientsAllowed() external view returns (bool isAllowed); -} diff --git a/contracts/contracts/test/AllowListTest.sol b/contracts/contracts/test/AllowListTest.sol deleted file mode 100644 index 73a752bba1..0000000000 --- a/contracts/contracts/test/AllowListTest.sol +++ /dev/null @@ -1,11 +0,0 @@ -//SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import "../AllowList.sol"; -import "ds-test/src/test.sol"; - -contract AllowListTest is DSTest { - function assertRole(uint result, AllowList.Role role) internal { - assertEq(result, uint(role)); - } -} diff --git a/contracts/contracts/test/ExampleRewardManagerTest.sol b/contracts/contracts/test/ExampleRewardManagerTest.sol deleted file mode 100644 index b476e1a07c..0000000000 --- a/contracts/contracts/test/ExampleRewardManagerTest.sol +++ /dev/null @@ -1,108 +0,0 @@ -//SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import "../ExampleRewardManager.sol"; -import "../interfaces/IRewardManager.sol"; -import "./AllowListTest.sol"; - -address constant BLACKHOLE_ADDRESS = 0x0100000000000000000000000000000000000000; - -contract ExampleRewardManagerTest is AllowListTest { - IRewardManager rewardManager = IRewardManager(REWARD_MANAGER_ADDRESS); - - ExampleRewardManager exampleReceiveFees; - uint exampleBalance; - - uint blackholeBalance; - - function setUp() public { - blackholeBalance = BLACKHOLE_ADDRESS.balance; - } - - function step_captureBlackholeBalance() public { - blackholeBalance = BLACKHOLE_ADDRESS.balance; - } - - function step_checkSendFeesToBlackhole() public { - assertGt(BLACKHOLE_ADDRESS.balance, blackholeBalance); - } - - function step_doesNotSetRewardAddressBeforeEnabled() public { - ExampleRewardManager example = new ExampleRewardManager(); - address exampleAddress = address(example); - - assertRole(rewardManager.readAllowList(exampleAddress), AllowList.Role.None); - - try example.setRewardAddress(exampleAddress) { - assertTrue(false, "setRewardAddress should fail"); - } catch {} // TODO should match on an error to make sure that this is failing in the way that's expected - } - - function step_setEnabled() public { - ExampleRewardManager example = new ExampleRewardManager(); - address exampleAddress = address(example); - - assertRole(rewardManager.readAllowList(exampleAddress), AllowList.Role.None); - rewardManager.setEnabled(exampleAddress); - assertRole(rewardManager.readAllowList(exampleAddress), AllowList.Role.Enabled); - } - - function step_setRewardAddress() public { - ExampleRewardManager example = new ExampleRewardManager(); - address exampleAddress = address(example); - - rewardManager.setEnabled(exampleAddress); - example.setRewardAddress(exampleAddress); - - assertEq(example.currentRewardAddress(), exampleAddress); - } - - function step_setupReceiveFees() public { - ExampleRewardManager example = new ExampleRewardManager(); - address exampleAddress = address(example); - - rewardManager.setEnabled(exampleAddress); - example.setRewardAddress(exampleAddress); - - exampleReceiveFees = example; - exampleBalance = exampleAddress.balance; - } - - function step_receiveFees() public { - // used as a noop to test if the correct address receives fees - } - - function step_checkReceiveFees() public { - assertGt(address(exampleReceiveFees).balance, exampleBalance); - } - - function step_areFeeRecipientsAllowed() public { - ExampleRewardManager example = new ExampleRewardManager(); - assertTrue(!example.areFeeRecipientsAllowed()); - } - - function step_allowFeeRecipients() public { - ExampleRewardManager example = new ExampleRewardManager(); - address exampleAddress = address(example); - - rewardManager.setEnabled(exampleAddress); - - example.allowFeeRecipients(); - assertTrue(example.areFeeRecipientsAllowed()); - } - - function step_disableRewardAddress() public { - ExampleRewardManager example = new ExampleRewardManager(); - address exampleAddress = address(example); - - rewardManager.setEnabled(exampleAddress); - - example.setRewardAddress(exampleAddress); - - assertEq(example.currentRewardAddress(), exampleAddress); - - example.disableRewards(); - - assertEq(example.currentRewardAddress(), BLACKHOLE_ADDRESS); - } -} diff --git a/contracts/scripts/deployExampleRewardManager.ts b/contracts/scripts/deployExampleRewardManager.ts deleted file mode 100644 index 0a58c75460..0000000000 --- a/contracts/scripts/deployExampleRewardManager.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ethers } from "hardhat" -import { ExampleRewardManager } from "typechain-types" - -const main = async (): Promise => { - const contract: ExampleRewardManager = await ethers.deployContract("ExampleRewardManager") - - await contract.waitForDeployment() - console.log(`Contract deployed to: ${contract.target}`) -} - -main() - .then(() => process.exit(0)) - .catch(error => { - console.error(error) - process.exit(1) - }) diff --git a/contracts/tasks.ts b/contracts/tasks.ts index 9abfbdf442..605b885ca1 100644 --- a/contracts/tasks.ts +++ b/contracts/tasks.ts @@ -1,23 +1,5 @@ import { task } from "hardhat/config" -const BLACKHOLE_ADDRESS = "0x0100000000000000000000000000000000000000" -const CONTRACT_ALLOW_LIST_ADDRESS = "0x0200000000000000000000000000000000000000" -const MINT_ADDRESS = "0x0200000000000000000000000000000000000001" -const TX_ALLOW_LIST_ADDRESS = "0x0200000000000000000000000000000000000002" -const FEE_MANAGER_ADDRESS = "0x0200000000000000000000000000000000000003" -const REWARD_MANAGER_ADDRESS = "0x0200000000000000000000000000000000000004" - - -const ROLES = { - 0: "None", - 1: "Enabled", - 2: "Admin", -} - -const getRole = async (allowList, address) => { - const role = await allowList.readAllowList(address) - console.log(`${address} has role: ${ROLES[role.toNumber()]}`) -} task("accounts", "Prints the list of accounts", async (args, hre): Promise => { const accounts = await hre.ethers.getSigners() @@ -44,49 +26,3 @@ task("balance", "get the balance") const balanceInCoin = hre.ethers.formatEther(balance) console.log(`balance: ${balanceInCoin} Coin`) }) - -// npx hardhat rewardManager:currentRewardAddress --network local -task("rewardManager:currentRewardAddress", "Gets the current configured rewarding address") - .setAction(async (_, hre) => { - const rewardManager = await hre.ethers.getContractAt("IRewardManager", REWARD_MANAGER_ADDRESS) - const areFeeRecipientsAllowed = await rewardManager.areFeeRecipientsAllowed() - const result = await rewardManager.currentRewardAddress() - if (areFeeRecipientsAllowed) { - console.log("Custom Fee Recipients are allowed. (%s)", result) - } else { - console.log(`Current reward address is ${result}`) - } - }) - -// npx hardhat rewardManager:areFeeRecipientsAllowed --network local -task("rewardManager:areFeeRecipientsAllowed", "Gets whether the fee recipients are allowed to receive rewards") - .setAction(async (_, hre) => { - const rewardManager = await hre.ethers.getContractAt("IRewardManager", REWARD_MANAGER_ADDRESS) - const result = await rewardManager.areFeeRecipientsAllowed() - console.log(result) - }) - -// npx hardhat rewardManager:setRewardAddress --network local --address [address] -task("rewardManager:setRewardAddress", "Sets a new reward address") - .addParam("address", "the address that will receive rewards") - .setAction(async (args, hre) => { - const rewardManager = await hre.ethers.getContractAt("IRewardManager", REWARD_MANAGER_ADDRESS) - const result = await rewardManager.setRewardAddress(args.address) - console.log(result) - }) - -// npx hardhat rewardManager:allowFeeRecipients --network local -task("rewardManager:allowFeeRecipients", "Allows custom fee recipients to receive rewards") - .setAction(async (_, hre) => { - const rewardManager = await hre.ethers.getContractAt("IRewardManager", REWARD_MANAGER_ADDRESS) - const result = await rewardManager.allowFeeRecipients() - console.log(result) - }) - -// npx hardhat rewardManager:disableRewards --network local -task("rewardManager:disableRewards", "Disables all rewards, and starts burning fees.") - .setAction(async (_, hre) => { - const rewardManager = await hre.ethers.getContractAt("IRewardManager", REWARD_MANAGER_ADDRESS) - const result = await rewardManager.disableRewards() - console.log(result) - }) \ No newline at end of file diff --git a/contracts/test/reward_manager.ts b/contracts/test/reward_manager.ts deleted file mode 100644 index f9c60133ba..0000000000 --- a/contracts/test/reward_manager.ts +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (C) 2019-2025, Ava Labs, Inc. All rights reserved. -// See the file LICENSE for licensing terms. - -import { ethers } from "hardhat" -import { test } from "./utils" -import { expect } from "chai"; -import { Contract, Signer } from "ethers" -import { IRewardManager } from "typechain-types"; - -// make sure this is always an admin for reward manager precompile -const ADMIN_ADDRESS = "0x8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC" -const REWARD_MANAGER_ADDRESS = "0x0200000000000000000000000000000000000004" -const BLACKHOLE_ADDRESS = "0x0100000000000000000000000000000000000000" - -describe("ExampleRewardManager", function () { - beforeEach('Setup DS-Test contract', async function () { - const signer = await ethers.getSigner(ADMIN_ADDRESS) - const rewardManagerPromise = ethers.getContractAt("IRewardManager", REWARD_MANAGER_ADDRESS, signer) - - return ethers.getContractFactory("ExampleRewardManagerTest", signer) - .then(factory => factory.deploy()) - .then(contract => { - this.testContract = contract - return contract.waitForDeployment().then(() => contract) - }) - .then(contract => contract.setUp()) - .then(tx => Promise.all([rewardManagerPromise, tx.wait()])) - .then(([rewardManager]) => rewardManager.setAdmin(this.testContract.target)) - .then(tx => tx.wait()) - }) - - test("should send fees to blackhole", ["step_captureBlackholeBalance", "step_checkSendFeesToBlackhole"]) - - test("should not appoint reward address before enabled", "step_doesNotSetRewardAddressBeforeEnabled") - - test("contract should be added to enabled list", "step_setEnabled") - - test("should be appointed as reward address", "step_setRewardAddress") - - // we need to change the fee receiver, send a transaction for the new receiver to receive fees, then check the balance change. - // the new fee receiver won't receive fees in the same block where it was set. - test("should be able to receive fees", ["step_setupReceiveFees", "step_receiveFees", "step_checkReceiveFees"]) - - test("should return false for allowFeeRecipients check", "step_areFeeRecipientsAllowed") - - test("should enable allowFeeRecipients", "step_allowFeeRecipients") - - test("should disable reward address", "step_disableRewardAddress") -}); - -describe("IRewardManager", function () { - let owner: Signer - let ownerAddress: string - let contract: IRewardManager - before(async function () { - owner = await ethers.getSigner(ADMIN_ADDRESS); - ownerAddress = await owner.getAddress() - contract = await ethers.getContractAt("IRewardManager", REWARD_MANAGER_ADDRESS, owner) - }); - - it("should emit reward address changed event ", async function () { - let testAddress = "0x0444400000000000000000000000000000000004" - let tx = await contract.setRewardAddress(testAddress) - let receipt = await tx.wait() - await expect(receipt) - .to.be.emit(contract, 'RewardAddressChanged') - .withArgs(ownerAddress, BLACKHOLE_ADDRESS, testAddress) - }) - - it("should emit fee recipients allowed event ", async function () { - let tx = await contract.allowFeeRecipients() - let receipt = await tx.wait() - await expect(receipt) - .to.be.emit(contract, 'FeeRecipientsAllowed') - .withArgs(ownerAddress) - }) - - it("should emit rewards disabled event ", async function () { - let tx = await contract.disableRewards() - let receipt = await tx.wait() - await expect(receipt) - .to.be.emit(contract, 'RewardsDisabled') - .withArgs(ownerAddress) - }) -}) diff --git a/ethclient/simulated/options.go b/ethclient/simulated/options.go index 3b63e86a6e..0c2e5e9b36 100644 --- a/ethclient/simulated/options.go +++ b/ethclient/simulated/options.go @@ -30,6 +30,7 @@ package simulated import ( "math/big" + "github.com/ava-labs/libevm/common" "github.com/ava-labs/subnet-evm/eth/ethconfig" "github.com/ava-labs/subnet-evm/node" "github.com/ava-labs/subnet-evm/params" @@ -58,3 +59,12 @@ func WithChainConfig(chainConfig *params.ChainConfig) func(nodeConf *node.Config ethConf.Genesis.Config = chainConfig } } + +// WithEtherbase configures the simulated backend to use a specific etherbase/coinbase address +// for block production. This is the address that receives block rewards and transaction fees +// when allowFeeRecipients is enabled. +func WithEtherbase(etherbase common.Address) func(nodeConf *node.Config, ethConf *ethconfig.Config) { + return func(nodeConf *node.Config, ethConf *ethconfig.Config) { + ethConf.Miner.Etherbase = etherbase + } +} diff --git a/precompile/allowlist/allowlisttest/bindings/compile.go b/precompile/allowlist/allowlisttest/bindings/compile.go index abdadb4e86..3df2a2717e 100644 --- a/precompile/allowlist/allowlisttest/bindings/compile.go +++ b/precompile/allowlist/allowlisttest/bindings/compile.go @@ -9,4 +9,5 @@ package bindings //go:generate go run github.com/ava-labs/libevm/cmd/abigen --pkg bindings --type IAllowList --abi artifacts/IAllowList.abi --bin artifacts/IAllowList.bin --out gen_allowlist_binding.go //go:generate go run github.com/ava-labs/libevm/cmd/abigen --pkg bindings --type AllowListTest --abi artifacts/AllowListTest.abi --bin artifacts/AllowListTest.bin --out gen_allowlisttest_binding.go // Step 3: Replace import paths in generated binding to use subnet-evm instead of libevm +// This is necessary because the libevm bindings package is not compatible with the subnet-evm simulated backend, which is used for testing. //go:generate sh -c "sed -i.bak -e 's|github.com/ava-labs/libevm/accounts/abi|github.com/ava-labs/subnet-evm/accounts/abi|g' -e 's|github.com/ava-labs/libevm/accounts/abi/bind|github.com/ava-labs/subnet-evm/accounts/abi/bind|g' gen_allowlist_binding.go gen_allowlisttest_binding.go && rm -f gen_allowlist_binding.go.bak gen_allowlisttest_binding.go.bak" diff --git a/precompile/allowlist/allowlisttest/test_allowlist_events.go b/precompile/allowlist/allowlisttest/test_allowlist_events.go index 178821bc4b..a92fd75c7c 100644 --- a/precompile/allowlist/allowlisttest/test_allowlist_events.go +++ b/precompile/allowlist/allowlisttest/test_allowlist_events.go @@ -121,7 +121,7 @@ func RunAllowListEventTests( t.Run(tc.name, func(t *testing.T) { require := require.New(t) - backend := testutils.NewBackendWithPrecompile(t, precompileCfg, fundedAddrs...) + backend := testutils.NewBackendWithPrecompile(t, precompileCfg, fundedAddrs) defer backend.Close() allowList, err := allowlistbindings.NewIAllowList(contractAddress, backend.Client()) diff --git a/precompile/contracts/deployerallowlist/simulated_test.go b/precompile/contracts/deployerallowlist/simulated_test.go index b4ab81a8bb..f728b025d0 100644 --- a/precompile/contracts/deployerallowlist/simulated_test.go +++ b/precompile/contracts/deployerallowlist/simulated_test.go @@ -185,7 +185,7 @@ func TestDeployerAllowList(t *testing.T) { precompileCfg := deployerallowlist.NewConfig(utils.NewUint64(0), []common.Address{adminAddress}, nil, nil) for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - backend := testutils.NewBackendWithPrecompile(t, precompileCfg, adminAddress, unprivilegedAddress) + backend := testutils.NewBackendWithPrecompile(t, precompileCfg, []common.Address{adminAddress, unprivilegedAddress}) defer backend.Close() allowList, err := allowlistbindings.NewIAllowList(deployerallowlist.ContractAddress, backend.Client()) diff --git a/precompile/contracts/feemanager/feemanagertest/bindings/compile.go b/precompile/contracts/feemanager/feemanagertest/bindings/compile.go index be6da6da86..28d9e6d29c 100644 --- a/precompile/contracts/feemanager/feemanagertest/bindings/compile.go +++ b/precompile/contracts/feemanager/feemanagertest/bindings/compile.go @@ -9,4 +9,5 @@ package bindings //go:generate go run github.com/ava-labs/libevm/cmd/abigen --pkg bindings --type IFeeManager --abi artifacts/IFeeManager.abi --bin artifacts/IFeeManager.bin --out gen_ifeemanager_binding.go //go:generate go run github.com/ava-labs/libevm/cmd/abigen --pkg bindings --type FeeManagerTest --abi artifacts/FeeManagerTest.abi --bin artifacts/FeeManagerTest.bin --out gen_feemanagertest_binding.go // Step 3: Replace import paths in generated binding to use subnet-evm instead of libevm +// This is necessary because the libevm bindings package is not compatible with the subnet-evm simulated backend, which is used for testing. //go:generate sh -c "sed -i.bak -e 's|github.com/ava-labs/libevm/accounts/abi|github.com/ava-labs/subnet-evm/accounts/abi|g' -e 's|github.com/ava-labs/libevm/accounts/abi/bind|github.com/ava-labs/subnet-evm/accounts/abi/bind|g' gen_ifeemanager_binding.go gen_feemanagertest_binding.go && rm -f gen_ifeemanager_binding.go.bak gen_feemanagertest_binding.go.bak" diff --git a/precompile/contracts/feemanager/simulated_test.go b/precompile/contracts/feemanager/simulated_test.go index a18ad677d0..e1b04a952d 100644 --- a/precompile/contracts/feemanager/simulated_test.go +++ b/precompile/contracts/feemanager/simulated_test.go @@ -236,7 +236,7 @@ func TestFeeManager(t *testing.T) { precompileCfg := feemanager.NewConfig(utils.NewUint64(0), []common.Address{adminAddress}, nil, nil, &genesisFeeConfig) for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - backend := testutils.NewBackendWithPrecompile(t, precompileCfg, adminAddress, unprivilegedAddress) + backend := testutils.NewBackendWithPrecompile(t, precompileCfg, []common.Address{adminAddress, unprivilegedAddress}) defer backend.Close() feeManager, err := feemanagerbindings.NewIFeeManager(feemanager.ContractAddress, backend.Client()) @@ -252,7 +252,7 @@ func TestIFeeManager_Events(t *testing.T) { admin := testutils.NewAuth(t, adminKey, chainID) precompileCfg := feemanager.NewConfig(utils.NewUint64(0), []common.Address{adminAddress}, nil, nil, &genesisFeeConfig) - backend := testutils.NewBackendWithPrecompile(t, precompileCfg, adminAddress, unprivilegedAddress) + backend := testutils.NewBackendWithPrecompile(t, precompileCfg, []common.Address{adminAddress, unprivilegedAddress}) defer backend.Close() feeManager, err := feemanagerbindings.NewIFeeManager(feemanager.ContractAddress, backend.Client()) diff --git a/precompile/contracts/nativeminter/nativemintertest/bindings/compile.go b/precompile/contracts/nativeminter/nativemintertest/bindings/compile.go index d62e697717..e04c069262 100644 --- a/precompile/contracts/nativeminter/nativemintertest/bindings/compile.go +++ b/precompile/contracts/nativeminter/nativemintertest/bindings/compile.go @@ -9,4 +9,5 @@ package bindings //go:generate go run github.com/ava-labs/libevm/cmd/abigen --pkg bindings --type INativeMinter --abi artifacts/INativeMinter.abi --bin artifacts/INativeMinter.bin --out gen_inativeminter_binding.go //go:generate go run github.com/ava-labs/libevm/cmd/abigen --pkg bindings --type NativeMinterTest --abi artifacts/NativeMinterTest.abi --bin artifacts/NativeMinterTest.bin --out gen_nativemintertest_binding.go // Step 3: Replace import paths in generated binding to use subnet-evm instead of libevm +// This is necessary because the libevm bindings package is not compatible with the subnet-evm simulated backend, which is used for testing. //go:generate sh -c "sed -i.bak -e 's|github.com/ava-labs/libevm/accounts/abi|github.com/ava-labs/subnet-evm/accounts/abi|g' -e 's|github.com/ava-labs/libevm/accounts/abi/bind|github.com/ava-labs/subnet-evm/accounts/abi/bind|g' gen_inativeminter_binding.go gen_nativemintertest_binding.go && rm -f gen_inativeminter_binding.go.bak gen_nativemintertest_binding.go.bak" diff --git a/precompile/contracts/nativeminter/simulated_test.go b/precompile/contracts/nativeminter/simulated_test.go index cfb00696f5..16cc772ba7 100644 --- a/precompile/contracts/nativeminter/simulated_test.go +++ b/precompile/contracts/nativeminter/simulated_test.go @@ -146,7 +146,7 @@ func TestNativeMinter(t *testing.T) { precompileCfg := nativeminter.NewConfig(utils.NewUint64(0), []common.Address{adminAddress}, nil, nil, nil) for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - backend := testutils.NewBackendWithPrecompile(t, precompileCfg, adminAddress, unprivilegedAddress) + backend := testutils.NewBackendWithPrecompile(t, precompileCfg, []common.Address{adminAddress, unprivilegedAddress}) defer backend.Close() nativeMinter, err := nativeminterbindings.NewINativeMinter(nativeminter.ContractAddress, backend.Client()) @@ -164,7 +164,7 @@ func TestINativeMinter_Events(t *testing.T) { testAddress := crypto.PubkeyToAddress(testKey.PublicKey) precompileCfg := nativeminter.NewConfig(utils.NewUint64(0), []common.Address{adminAddress}, nil, nil, nil) - backend := testutils.NewBackendWithPrecompile(t, precompileCfg, adminAddress, unprivilegedAddress) + backend := testutils.NewBackendWithPrecompile(t, precompileCfg, []common.Address{adminAddress, unprivilegedAddress}) defer backend.Close() nativeMinter, err := nativeminterbindings.NewINativeMinter(nativeminter.ContractAddress, backend.Client()) diff --git a/precompile/contracts/rewardmanager/rewardmanagertest/bindings/IRewardManager.sol b/precompile/contracts/rewardmanager/rewardmanagertest/bindings/IRewardManager.sol new file mode 100644 index 0000000000..bf0b484562 --- /dev/null +++ b/precompile/contracts/rewardmanager/rewardmanagertest/bindings/IRewardManager.sol @@ -0,0 +1,36 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; +import "precompile/allowlist/allowlisttest/bindings/IAllowList.sol"; + +interface IRewardManager is IAllowList { + // RewardAddressChanged is the event logged whenever reward address is modified + event RewardAddressChanged( + address indexed sender, + address indexed oldRewardAddress, + address indexed newRewardAddress + ); + + // FeeRecipientsAllowed is the event logged whenever fee recipient is modified + event FeeRecipientsAllowed(address indexed sender); + + // RewardsDisabled is the event logged whenever rewards are disabled + event RewardsDisabled(address indexed sender); + + // setRewardAddress sets the reward address to the given address + function setRewardAddress(address addr) external; + + // allowFeeRecipients allows block builders to claim fees + function allowFeeRecipients() external; + + // disableRewards disables block rewards and starts burning fees + function disableRewards() external; + + // currentRewardAddress returns the current reward address + function currentRewardAddress() + external + view + returns (address rewardAddress); + + // areFeeRecipientsAllowed returns true if fee recipients are allowed + function areFeeRecipientsAllowed() external view returns (bool isAllowed); +} diff --git a/precompile/contracts/rewardmanager/rewardmanagertest/bindings/RewardManagerTest.sol b/precompile/contracts/rewardmanager/rewardmanagertest/bindings/RewardManagerTest.sol new file mode 100644 index 0000000000..33dd1ab8cd --- /dev/null +++ b/precompile/contracts/rewardmanager/rewardmanagertest/bindings/RewardManagerTest.sol @@ -0,0 +1,35 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "./IRewardManager.sol"; + +contract RewardManagerTest { + IRewardManager private rewardManager; + + constructor(address rewardManagerPrecompile) { + rewardManager = IRewardManager(rewardManagerPrecompile); + } + + function setRewardAddress(address addr) external { + rewardManager.setRewardAddress(addr); + } + + function allowFeeRecipients() external { + rewardManager.allowFeeRecipients(); + } + + function disableRewards() external { + rewardManager.disableRewards(); + } + + function currentRewardAddress() external view returns (address) { + return rewardManager.currentRewardAddress(); + } + + function areFeeRecipientsAllowed() external view returns (bool) { + return rewardManager.areFeeRecipientsAllowed(); + } + + // Allow contract to receive ETH for fee testing + receive() external payable {} +} diff --git a/precompile/contracts/rewardmanager/rewardmanagertest/bindings/compile.go b/precompile/contracts/rewardmanager/rewardmanagertest/bindings/compile.go new file mode 100644 index 0000000000..9542888f9d --- /dev/null +++ b/precompile/contracts/rewardmanager/rewardmanagertest/bindings/compile.go @@ -0,0 +1,13 @@ +// Copyright (C) 2019-2025, Ava Labs, Inc. All rights reserved. +// See the file LICENSE for licensing terms. + +package bindings + +// Step 1: Compile Solidity contracts to generate ABI and bin files +//go:generate solc-v0.8.30 -o artifacts --overwrite --abi --bin --base-path ../../../../.. precompile/=precompile/ --evm-version cancun RewardManagerTest.sol IRewardManager.sol +// Step 2: Generate Go bindings from the compiled artifacts +//go:generate go run github.com/ava-labs/libevm/cmd/abigen --pkg bindings --type IRewardManager --abi artifacts/IRewardManager.abi --bin artifacts/IRewardManager.bin --out gen_irewardmanager_binding.go +//go:generate go run github.com/ava-labs/libevm/cmd/abigen --pkg bindings --type RewardManagerTest --abi artifacts/RewardManagerTest.abi --bin artifacts/RewardManagerTest.bin --out gen_rewardmanagertest_binding.go +// Step 3: Replace import paths in generated binding to use subnet-evm instead of libevm +// This is necessary because the libevm bindings package is not compatible with the subnet-evm simulated backend, which is used for testing. +//go:generate sh -c "sed -i.bak -e 's|github.com/ava-labs/libevm/accounts/abi|github.com/ava-labs/subnet-evm/accounts/abi|g' -e 's|github.com/ava-labs/libevm/accounts/abi/bind|github.com/ava-labs/subnet-evm/accounts/abi/bind|g' gen_irewardmanager_binding.go gen_rewardmanagertest_binding.go && rm -f gen_irewardmanager_binding.go.bak gen_rewardmanagertest_binding.go.bak" diff --git a/precompile/contracts/rewardmanager/rewardmanagertest/bindings/gen_irewardmanager_binding.go b/precompile/contracts/rewardmanager/rewardmanagertest/bindings/gen_irewardmanager_binding.go new file mode 100644 index 0000000000..5790ed8e95 --- /dev/null +++ b/precompile/contracts/rewardmanager/rewardmanagertest/bindings/gen_irewardmanager_binding.go @@ -0,0 +1,1034 @@ +// 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/ava-labs/libevm" + "github.com/ava-labs/subnet-evm/accounts/abi" + "github.com/ava-labs/subnet-evm/accounts/abi/bind" + "github.com/ava-labs/libevm/common" + "github.com/ava-labs/libevm/core/types" + "github.com/ava-labs/libevm/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 +) + +// IRewardManagerMetaData contains all meta data concerning the IRewardManager contract. +var IRewardManagerMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"FeeRecipientsAllowed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRewardAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRewardAddress\",\"type\":\"address\"}],\"name\":\"RewardAddressChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RewardsDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"role\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldRole\",\"type\":\"uint256\"}],\"name\":\"RoleSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"allowFeeRecipients\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areFeeRecipientsAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rewardAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"readAllowList\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"role\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setNone\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setRewardAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", +} + +// IRewardManagerABI is the input ABI used to generate the binding from. +// Deprecated: Use IRewardManagerMetaData.ABI instead. +var IRewardManagerABI = IRewardManagerMetaData.ABI + +// IRewardManager is an auto generated Go binding around an Ethereum contract. +type IRewardManager struct { + IRewardManagerCaller // Read-only binding to the contract + IRewardManagerTransactor // Write-only binding to the contract + IRewardManagerFilterer // Log filterer for contract events +} + +// IRewardManagerCaller is an auto generated read-only Go binding around an Ethereum contract. +type IRewardManagerCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IRewardManagerTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IRewardManagerTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IRewardManagerFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IRewardManagerFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IRewardManagerSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IRewardManagerSession struct { + Contract *IRewardManager // 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 +} + +// IRewardManagerCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IRewardManagerCallerSession struct { + Contract *IRewardManagerCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IRewardManagerTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IRewardManagerTransactorSession struct { + Contract *IRewardManagerTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IRewardManagerRaw is an auto generated low-level Go binding around an Ethereum contract. +type IRewardManagerRaw struct { + Contract *IRewardManager // Generic contract binding to access the raw methods on +} + +// IRewardManagerCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IRewardManagerCallerRaw struct { + Contract *IRewardManagerCaller // Generic read-only contract binding to access the raw methods on +} + +// IRewardManagerTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IRewardManagerTransactorRaw struct { + Contract *IRewardManagerTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIRewardManager creates a new instance of IRewardManager, bound to a specific deployed contract. +func NewIRewardManager(address common.Address, backend bind.ContractBackend) (*IRewardManager, error) { + contract, err := bindIRewardManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IRewardManager{IRewardManagerCaller: IRewardManagerCaller{contract: contract}, IRewardManagerTransactor: IRewardManagerTransactor{contract: contract}, IRewardManagerFilterer: IRewardManagerFilterer{contract: contract}}, nil +} + +// NewIRewardManagerCaller creates a new read-only instance of IRewardManager, bound to a specific deployed contract. +func NewIRewardManagerCaller(address common.Address, caller bind.ContractCaller) (*IRewardManagerCaller, error) { + contract, err := bindIRewardManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IRewardManagerCaller{contract: contract}, nil +} + +// NewIRewardManagerTransactor creates a new write-only instance of IRewardManager, bound to a specific deployed contract. +func NewIRewardManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*IRewardManagerTransactor, error) { + contract, err := bindIRewardManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IRewardManagerTransactor{contract: contract}, nil +} + +// NewIRewardManagerFilterer creates a new log filterer instance of IRewardManager, bound to a specific deployed contract. +func NewIRewardManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*IRewardManagerFilterer, error) { + contract, err := bindIRewardManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IRewardManagerFilterer{contract: contract}, nil +} + +// bindIRewardManager binds a generic wrapper to an already deployed contract. +func bindIRewardManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IRewardManagerMetaData.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 (_IRewardManager *IRewardManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IRewardManager.Contract.IRewardManagerCaller.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 (_IRewardManager *IRewardManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IRewardManager.Contract.IRewardManagerTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IRewardManager *IRewardManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IRewardManager.Contract.IRewardManagerTransactor.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 (_IRewardManager *IRewardManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IRewardManager.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 (_IRewardManager *IRewardManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IRewardManager.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IRewardManager *IRewardManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IRewardManager.Contract.contract.Transact(opts, method, params...) +} + +// AreFeeRecipientsAllowed is a free data retrieval call binding the contract method 0xf6542b2e. +// +// Solidity: function areFeeRecipientsAllowed() view returns(bool isAllowed) +func (_IRewardManager *IRewardManagerCaller) AreFeeRecipientsAllowed(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _IRewardManager.contract.Call(opts, &out, "areFeeRecipientsAllowed") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AreFeeRecipientsAllowed is a free data retrieval call binding the contract method 0xf6542b2e. +// +// Solidity: function areFeeRecipientsAllowed() view returns(bool isAllowed) +func (_IRewardManager *IRewardManagerSession) AreFeeRecipientsAllowed() (bool, error) { + return _IRewardManager.Contract.AreFeeRecipientsAllowed(&_IRewardManager.CallOpts) +} + +// AreFeeRecipientsAllowed is a free data retrieval call binding the contract method 0xf6542b2e. +// +// Solidity: function areFeeRecipientsAllowed() view returns(bool isAllowed) +func (_IRewardManager *IRewardManagerCallerSession) AreFeeRecipientsAllowed() (bool, error) { + return _IRewardManager.Contract.AreFeeRecipientsAllowed(&_IRewardManager.CallOpts) +} + +// CurrentRewardAddress is a free data retrieval call binding the contract method 0xe915608b. +// +// Solidity: function currentRewardAddress() view returns(address rewardAddress) +func (_IRewardManager *IRewardManagerCaller) CurrentRewardAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IRewardManager.contract.Call(opts, &out, "currentRewardAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// CurrentRewardAddress is a free data retrieval call binding the contract method 0xe915608b. +// +// Solidity: function currentRewardAddress() view returns(address rewardAddress) +func (_IRewardManager *IRewardManagerSession) CurrentRewardAddress() (common.Address, error) { + return _IRewardManager.Contract.CurrentRewardAddress(&_IRewardManager.CallOpts) +} + +// CurrentRewardAddress is a free data retrieval call binding the contract method 0xe915608b. +// +// Solidity: function currentRewardAddress() view returns(address rewardAddress) +func (_IRewardManager *IRewardManagerCallerSession) CurrentRewardAddress() (common.Address, error) { + return _IRewardManager.Contract.CurrentRewardAddress(&_IRewardManager.CallOpts) +} + +// ReadAllowList is a free data retrieval call binding the contract method 0xeb54dae1. +// +// Solidity: function readAllowList(address addr) view returns(uint256 role) +func (_IRewardManager *IRewardManagerCaller) ReadAllowList(opts *bind.CallOpts, addr common.Address) (*big.Int, error) { + var out []interface{} + err := _IRewardManager.contract.Call(opts, &out, "readAllowList", addr) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ReadAllowList is a free data retrieval call binding the contract method 0xeb54dae1. +// +// Solidity: function readAllowList(address addr) view returns(uint256 role) +func (_IRewardManager *IRewardManagerSession) ReadAllowList(addr common.Address) (*big.Int, error) { + return _IRewardManager.Contract.ReadAllowList(&_IRewardManager.CallOpts, addr) +} + +// ReadAllowList is a free data retrieval call binding the contract method 0xeb54dae1. +// +// Solidity: function readAllowList(address addr) view returns(uint256 role) +func (_IRewardManager *IRewardManagerCallerSession) ReadAllowList(addr common.Address) (*big.Int, error) { + return _IRewardManager.Contract.ReadAllowList(&_IRewardManager.CallOpts, addr) +} + +// AllowFeeRecipients is a paid mutator transaction binding the contract method 0x0329099f. +// +// Solidity: function allowFeeRecipients() returns() +func (_IRewardManager *IRewardManagerTransactor) AllowFeeRecipients(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IRewardManager.contract.Transact(opts, "allowFeeRecipients") +} + +// AllowFeeRecipients is a paid mutator transaction binding the contract method 0x0329099f. +// +// Solidity: function allowFeeRecipients() returns() +func (_IRewardManager *IRewardManagerSession) AllowFeeRecipients() (*types.Transaction, error) { + return _IRewardManager.Contract.AllowFeeRecipients(&_IRewardManager.TransactOpts) +} + +// AllowFeeRecipients is a paid mutator transaction binding the contract method 0x0329099f. +// +// Solidity: function allowFeeRecipients() returns() +func (_IRewardManager *IRewardManagerTransactorSession) AllowFeeRecipients() (*types.Transaction, error) { + return _IRewardManager.Contract.AllowFeeRecipients(&_IRewardManager.TransactOpts) +} + +// DisableRewards is a paid mutator transaction binding the contract method 0xbc178628. +// +// Solidity: function disableRewards() returns() +func (_IRewardManager *IRewardManagerTransactor) DisableRewards(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IRewardManager.contract.Transact(opts, "disableRewards") +} + +// DisableRewards is a paid mutator transaction binding the contract method 0xbc178628. +// +// Solidity: function disableRewards() returns() +func (_IRewardManager *IRewardManagerSession) DisableRewards() (*types.Transaction, error) { + return _IRewardManager.Contract.DisableRewards(&_IRewardManager.TransactOpts) +} + +// DisableRewards is a paid mutator transaction binding the contract method 0xbc178628. +// +// Solidity: function disableRewards() returns() +func (_IRewardManager *IRewardManagerTransactorSession) DisableRewards() (*types.Transaction, error) { + return _IRewardManager.Contract.DisableRewards(&_IRewardManager.TransactOpts) +} + +// SetAdmin is a paid mutator transaction binding the contract method 0x704b6c02. +// +// Solidity: function setAdmin(address addr) returns() +func (_IRewardManager *IRewardManagerTransactor) SetAdmin(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { + return _IRewardManager.contract.Transact(opts, "setAdmin", addr) +} + +// SetAdmin is a paid mutator transaction binding the contract method 0x704b6c02. +// +// Solidity: function setAdmin(address addr) returns() +func (_IRewardManager *IRewardManagerSession) SetAdmin(addr common.Address) (*types.Transaction, error) { + return _IRewardManager.Contract.SetAdmin(&_IRewardManager.TransactOpts, addr) +} + +// SetAdmin is a paid mutator transaction binding the contract method 0x704b6c02. +// +// Solidity: function setAdmin(address addr) returns() +func (_IRewardManager *IRewardManagerTransactorSession) SetAdmin(addr common.Address) (*types.Transaction, error) { + return _IRewardManager.Contract.SetAdmin(&_IRewardManager.TransactOpts, addr) +} + +// SetEnabled is a paid mutator transaction binding the contract method 0x0aaf7043. +// +// Solidity: function setEnabled(address addr) returns() +func (_IRewardManager *IRewardManagerTransactor) SetEnabled(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { + return _IRewardManager.contract.Transact(opts, "setEnabled", addr) +} + +// SetEnabled is a paid mutator transaction binding the contract method 0x0aaf7043. +// +// Solidity: function setEnabled(address addr) returns() +func (_IRewardManager *IRewardManagerSession) SetEnabled(addr common.Address) (*types.Transaction, error) { + return _IRewardManager.Contract.SetEnabled(&_IRewardManager.TransactOpts, addr) +} + +// SetEnabled is a paid mutator transaction binding the contract method 0x0aaf7043. +// +// Solidity: function setEnabled(address addr) returns() +func (_IRewardManager *IRewardManagerTransactorSession) SetEnabled(addr common.Address) (*types.Transaction, error) { + return _IRewardManager.Contract.SetEnabled(&_IRewardManager.TransactOpts, addr) +} + +// SetManager is a paid mutator transaction binding the contract method 0xd0ebdbe7. +// +// Solidity: function setManager(address addr) returns() +func (_IRewardManager *IRewardManagerTransactor) SetManager(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { + return _IRewardManager.contract.Transact(opts, "setManager", addr) +} + +// SetManager is a paid mutator transaction binding the contract method 0xd0ebdbe7. +// +// Solidity: function setManager(address addr) returns() +func (_IRewardManager *IRewardManagerSession) SetManager(addr common.Address) (*types.Transaction, error) { + return _IRewardManager.Contract.SetManager(&_IRewardManager.TransactOpts, addr) +} + +// SetManager is a paid mutator transaction binding the contract method 0xd0ebdbe7. +// +// Solidity: function setManager(address addr) returns() +func (_IRewardManager *IRewardManagerTransactorSession) SetManager(addr common.Address) (*types.Transaction, error) { + return _IRewardManager.Contract.SetManager(&_IRewardManager.TransactOpts, addr) +} + +// SetNone is a paid mutator transaction binding the contract method 0x8c6bfb3b. +// +// Solidity: function setNone(address addr) returns() +func (_IRewardManager *IRewardManagerTransactor) SetNone(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { + return _IRewardManager.contract.Transact(opts, "setNone", addr) +} + +// SetNone is a paid mutator transaction binding the contract method 0x8c6bfb3b. +// +// Solidity: function setNone(address addr) returns() +func (_IRewardManager *IRewardManagerSession) SetNone(addr common.Address) (*types.Transaction, error) { + return _IRewardManager.Contract.SetNone(&_IRewardManager.TransactOpts, addr) +} + +// SetNone is a paid mutator transaction binding the contract method 0x8c6bfb3b. +// +// Solidity: function setNone(address addr) returns() +func (_IRewardManager *IRewardManagerTransactorSession) SetNone(addr common.Address) (*types.Transaction, error) { + return _IRewardManager.Contract.SetNone(&_IRewardManager.TransactOpts, addr) +} + +// SetRewardAddress is a paid mutator transaction binding the contract method 0x5e00e679. +// +// Solidity: function setRewardAddress(address addr) returns() +func (_IRewardManager *IRewardManagerTransactor) SetRewardAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { + return _IRewardManager.contract.Transact(opts, "setRewardAddress", addr) +} + +// SetRewardAddress is a paid mutator transaction binding the contract method 0x5e00e679. +// +// Solidity: function setRewardAddress(address addr) returns() +func (_IRewardManager *IRewardManagerSession) SetRewardAddress(addr common.Address) (*types.Transaction, error) { + return _IRewardManager.Contract.SetRewardAddress(&_IRewardManager.TransactOpts, addr) +} + +// SetRewardAddress is a paid mutator transaction binding the contract method 0x5e00e679. +// +// Solidity: function setRewardAddress(address addr) returns() +func (_IRewardManager *IRewardManagerTransactorSession) SetRewardAddress(addr common.Address) (*types.Transaction, error) { + return _IRewardManager.Contract.SetRewardAddress(&_IRewardManager.TransactOpts, addr) +} + +// IRewardManagerFeeRecipientsAllowedIterator is returned from FilterFeeRecipientsAllowed and is used to iterate over the raw logs and unpacked data for FeeRecipientsAllowed events raised by the IRewardManager contract. +type IRewardManagerFeeRecipientsAllowedIterator struct { + Event *IRewardManagerFeeRecipientsAllowed // 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 *IRewardManagerFeeRecipientsAllowedIterator) 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(IRewardManagerFeeRecipientsAllowed) + 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(IRewardManagerFeeRecipientsAllowed) + 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 *IRewardManagerFeeRecipientsAllowedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IRewardManagerFeeRecipientsAllowedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IRewardManagerFeeRecipientsAllowed represents a FeeRecipientsAllowed event raised by the IRewardManager contract. +type IRewardManagerFeeRecipientsAllowed struct { + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFeeRecipientsAllowed is a free log retrieval operation binding the contract event 0xabb1949bd129fef9b84601a48aee89d600d90074ca10216a02ce43996be55991. +// +// Solidity: event FeeRecipientsAllowed(address indexed sender) +func (_IRewardManager *IRewardManagerFilterer) FilterFeeRecipientsAllowed(opts *bind.FilterOpts, sender []common.Address) (*IRewardManagerFeeRecipientsAllowedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _IRewardManager.contract.FilterLogs(opts, "FeeRecipientsAllowed", senderRule) + if err != nil { + return nil, err + } + return &IRewardManagerFeeRecipientsAllowedIterator{contract: _IRewardManager.contract, event: "FeeRecipientsAllowed", logs: logs, sub: sub}, nil +} + +// WatchFeeRecipientsAllowed is a free log subscription operation binding the contract event 0xabb1949bd129fef9b84601a48aee89d600d90074ca10216a02ce43996be55991. +// +// Solidity: event FeeRecipientsAllowed(address indexed sender) +func (_IRewardManager *IRewardManagerFilterer) WatchFeeRecipientsAllowed(opts *bind.WatchOpts, sink chan<- *IRewardManagerFeeRecipientsAllowed, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _IRewardManager.contract.WatchLogs(opts, "FeeRecipientsAllowed", senderRule) + 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(IRewardManagerFeeRecipientsAllowed) + if err := _IRewardManager.contract.UnpackLog(event, "FeeRecipientsAllowed", 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 +} + +// ParseFeeRecipientsAllowed is a log parse operation binding the contract event 0xabb1949bd129fef9b84601a48aee89d600d90074ca10216a02ce43996be55991. +// +// Solidity: event FeeRecipientsAllowed(address indexed sender) +func (_IRewardManager *IRewardManagerFilterer) ParseFeeRecipientsAllowed(log types.Log) (*IRewardManagerFeeRecipientsAllowed, error) { + event := new(IRewardManagerFeeRecipientsAllowed) + if err := _IRewardManager.contract.UnpackLog(event, "FeeRecipientsAllowed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IRewardManagerRewardAddressChangedIterator is returned from FilterRewardAddressChanged and is used to iterate over the raw logs and unpacked data for RewardAddressChanged events raised by the IRewardManager contract. +type IRewardManagerRewardAddressChangedIterator struct { + Event *IRewardManagerRewardAddressChanged // 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 *IRewardManagerRewardAddressChangedIterator) 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(IRewardManagerRewardAddressChanged) + 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(IRewardManagerRewardAddressChanged) + 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 *IRewardManagerRewardAddressChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IRewardManagerRewardAddressChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IRewardManagerRewardAddressChanged represents a RewardAddressChanged event raised by the IRewardManager contract. +type IRewardManagerRewardAddressChanged struct { + Sender common.Address + OldRewardAddress common.Address + NewRewardAddress common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRewardAddressChanged is a free log retrieval operation binding the contract event 0xc2a9e07cba6f4920acaa5933bd0406949d5dbef7ee698e786ea23e8708f32a6c. +// +// Solidity: event RewardAddressChanged(address indexed sender, address indexed oldRewardAddress, address indexed newRewardAddress) +func (_IRewardManager *IRewardManagerFilterer) FilterRewardAddressChanged(opts *bind.FilterOpts, sender []common.Address, oldRewardAddress []common.Address, newRewardAddress []common.Address) (*IRewardManagerRewardAddressChangedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var oldRewardAddressRule []interface{} + for _, oldRewardAddressItem := range oldRewardAddress { + oldRewardAddressRule = append(oldRewardAddressRule, oldRewardAddressItem) + } + var newRewardAddressRule []interface{} + for _, newRewardAddressItem := range newRewardAddress { + newRewardAddressRule = append(newRewardAddressRule, newRewardAddressItem) + } + + logs, sub, err := _IRewardManager.contract.FilterLogs(opts, "RewardAddressChanged", senderRule, oldRewardAddressRule, newRewardAddressRule) + if err != nil { + return nil, err + } + return &IRewardManagerRewardAddressChangedIterator{contract: _IRewardManager.contract, event: "RewardAddressChanged", logs: logs, sub: sub}, nil +} + +// WatchRewardAddressChanged is a free log subscription operation binding the contract event 0xc2a9e07cba6f4920acaa5933bd0406949d5dbef7ee698e786ea23e8708f32a6c. +// +// Solidity: event RewardAddressChanged(address indexed sender, address indexed oldRewardAddress, address indexed newRewardAddress) +func (_IRewardManager *IRewardManagerFilterer) WatchRewardAddressChanged(opts *bind.WatchOpts, sink chan<- *IRewardManagerRewardAddressChanged, sender []common.Address, oldRewardAddress []common.Address, newRewardAddress []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var oldRewardAddressRule []interface{} + for _, oldRewardAddressItem := range oldRewardAddress { + oldRewardAddressRule = append(oldRewardAddressRule, oldRewardAddressItem) + } + var newRewardAddressRule []interface{} + for _, newRewardAddressItem := range newRewardAddress { + newRewardAddressRule = append(newRewardAddressRule, newRewardAddressItem) + } + + logs, sub, err := _IRewardManager.contract.WatchLogs(opts, "RewardAddressChanged", senderRule, oldRewardAddressRule, newRewardAddressRule) + 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(IRewardManagerRewardAddressChanged) + if err := _IRewardManager.contract.UnpackLog(event, "RewardAddressChanged", 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 +} + +// ParseRewardAddressChanged is a log parse operation binding the contract event 0xc2a9e07cba6f4920acaa5933bd0406949d5dbef7ee698e786ea23e8708f32a6c. +// +// Solidity: event RewardAddressChanged(address indexed sender, address indexed oldRewardAddress, address indexed newRewardAddress) +func (_IRewardManager *IRewardManagerFilterer) ParseRewardAddressChanged(log types.Log) (*IRewardManagerRewardAddressChanged, error) { + event := new(IRewardManagerRewardAddressChanged) + if err := _IRewardManager.contract.UnpackLog(event, "RewardAddressChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IRewardManagerRewardsDisabledIterator is returned from FilterRewardsDisabled and is used to iterate over the raw logs and unpacked data for RewardsDisabled events raised by the IRewardManager contract. +type IRewardManagerRewardsDisabledIterator struct { + Event *IRewardManagerRewardsDisabled // 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 *IRewardManagerRewardsDisabledIterator) 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(IRewardManagerRewardsDisabled) + 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(IRewardManagerRewardsDisabled) + 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 *IRewardManagerRewardsDisabledIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IRewardManagerRewardsDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IRewardManagerRewardsDisabled represents a RewardsDisabled event raised by the IRewardManager contract. +type IRewardManagerRewardsDisabled struct { + Sender common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRewardsDisabled is a free log retrieval operation binding the contract event 0xeb121f0335efe8f4b8ebef7793c18c171834696989656a8c345acc558359fabf. +// +// Solidity: event RewardsDisabled(address indexed sender) +func (_IRewardManager *IRewardManagerFilterer) FilterRewardsDisabled(opts *bind.FilterOpts, sender []common.Address) (*IRewardManagerRewardsDisabledIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _IRewardManager.contract.FilterLogs(opts, "RewardsDisabled", senderRule) + if err != nil { + return nil, err + } + return &IRewardManagerRewardsDisabledIterator{contract: _IRewardManager.contract, event: "RewardsDisabled", logs: logs, sub: sub}, nil +} + +// WatchRewardsDisabled is a free log subscription operation binding the contract event 0xeb121f0335efe8f4b8ebef7793c18c171834696989656a8c345acc558359fabf. +// +// Solidity: event RewardsDisabled(address indexed sender) +func (_IRewardManager *IRewardManagerFilterer) WatchRewardsDisabled(opts *bind.WatchOpts, sink chan<- *IRewardManagerRewardsDisabled, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _IRewardManager.contract.WatchLogs(opts, "RewardsDisabled", senderRule) + 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(IRewardManagerRewardsDisabled) + if err := _IRewardManager.contract.UnpackLog(event, "RewardsDisabled", 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 +} + +// ParseRewardsDisabled is a log parse operation binding the contract event 0xeb121f0335efe8f4b8ebef7793c18c171834696989656a8c345acc558359fabf. +// +// Solidity: event RewardsDisabled(address indexed sender) +func (_IRewardManager *IRewardManagerFilterer) ParseRewardsDisabled(log types.Log) (*IRewardManagerRewardsDisabled, error) { + event := new(IRewardManagerRewardsDisabled) + if err := _IRewardManager.contract.UnpackLog(event, "RewardsDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IRewardManagerRoleSetIterator is returned from FilterRoleSet and is used to iterate over the raw logs and unpacked data for RoleSet events raised by the IRewardManager contract. +type IRewardManagerRoleSetIterator struct { + Event *IRewardManagerRoleSet // 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 *IRewardManagerRoleSetIterator) 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(IRewardManagerRoleSet) + 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(IRewardManagerRoleSet) + 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 *IRewardManagerRoleSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IRewardManagerRoleSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IRewardManagerRoleSet represents a RoleSet event raised by the IRewardManager contract. +type IRewardManagerRoleSet struct { + Role *big.Int + Account common.Address + Sender common.Address + OldRole *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleSet is a free log retrieval operation binding the contract event 0xcdb7ea01f00a414d78757bdb0f6391664ba3fedf987eed280927c1e7d695be3e. +// +// Solidity: event RoleSet(uint256 indexed role, address indexed account, address indexed sender, uint256 oldRole) +func (_IRewardManager *IRewardManagerFilterer) FilterRoleSet(opts *bind.FilterOpts, role []*big.Int, account []common.Address, sender []common.Address) (*IRewardManagerRoleSetIterator, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _IRewardManager.contract.FilterLogs(opts, "RoleSet", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &IRewardManagerRoleSetIterator{contract: _IRewardManager.contract, event: "RoleSet", logs: logs, sub: sub}, nil +} + +// WatchRoleSet is a free log subscription operation binding the contract event 0xcdb7ea01f00a414d78757bdb0f6391664ba3fedf987eed280927c1e7d695be3e. +// +// Solidity: event RoleSet(uint256 indexed role, address indexed account, address indexed sender, uint256 oldRole) +func (_IRewardManager *IRewardManagerFilterer) WatchRoleSet(opts *bind.WatchOpts, sink chan<- *IRewardManagerRoleSet, role []*big.Int, account []common.Address, sender []common.Address) (event.Subscription, error) { + + var roleRule []interface{} + for _, roleItem := range role { + roleRule = append(roleRule, roleItem) + } + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _IRewardManager.contract.WatchLogs(opts, "RoleSet", roleRule, accountRule, senderRule) + 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(IRewardManagerRoleSet) + if err := _IRewardManager.contract.UnpackLog(event, "RoleSet", 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 +} + +// ParseRoleSet is a log parse operation binding the contract event 0xcdb7ea01f00a414d78757bdb0f6391664ba3fedf987eed280927c1e7d695be3e. +// +// Solidity: event RoleSet(uint256 indexed role, address indexed account, address indexed sender, uint256 oldRole) +func (_IRewardManager *IRewardManagerFilterer) ParseRoleSet(log types.Log) (*IRewardManagerRoleSet, error) { + event := new(IRewardManagerRoleSet) + if err := _IRewardManager.contract.UnpackLog(event, "RoleSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/precompile/contracts/rewardmanager/rewardmanagertest/bindings/gen_rewardmanagertest_binding.go b/precompile/contracts/rewardmanager/rewardmanagertest/bindings/gen_rewardmanagertest_binding.go new file mode 100644 index 0000000000..8a0c62d2ef --- /dev/null +++ b/precompile/contracts/rewardmanager/rewardmanagertest/bindings/gen_rewardmanagertest_binding.go @@ -0,0 +1,349 @@ +// 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/ava-labs/libevm" + "github.com/ava-labs/subnet-evm/accounts/abi" + "github.com/ava-labs/subnet-evm/accounts/abi/bind" + "github.com/ava-labs/libevm/common" + "github.com/ava-labs/libevm/core/types" + "github.com/ava-labs/libevm/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 +) + +// RewardManagerTestMetaData contains all meta data concerning the RewardManagerTest contract. +var RewardManagerTestMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardManagerPrecompile\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"allowFeeRecipients\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areFeeRecipientsAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentRewardAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableRewards\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setRewardAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801561000f575f5ffd5b50604051610663380380610663833981810160405281019061003191906100d4565b805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506100ff565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100a38261007a565b9050919050565b6100b381610099565b81146100bd575f5ffd5b50565b5f815190506100ce816100aa565b92915050565b5f602082840312156100e9576100e8610076565b5b5f6100f6848285016100c0565b91505092915050565b6105578061010c5f395ff3fe60806040526004361061004d575f3560e01c80630329099f146100585780635e00e6791461006e578063bc17862814610096578063e915608b146100ac578063f6542b2e146100d657610054565b3661005457005b5f5ffd5b348015610063575f5ffd5b5061006c610100565b005b348015610079575f5ffd5b50610094600480360381019061008f9190610407565b61017d565b005b3480156100a1575f5ffd5b506100aa610206565b005b3480156100b7575f5ffd5b506100c0610283565b6040516100cd9190610441565b60405180910390f35b3480156100e1575f5ffd5b506100ea610316565b6040516100f79190610474565b60405180910390f35b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630329099f6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610165575f5ffd5b505af1158015610177573d5f5f3e3d5ffd5b50505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635e00e679826040518263ffffffff1660e01b81526004016101d69190610441565b5f604051808303815f87803b1580156101ed575f5ffd5b505af11580156101ff573d5f5f3e3d5ffd5b5050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc1786286040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561026b575f5ffd5b505af115801561027d573d5f5f3e3d5ffd5b50505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e915608b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ed573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031191906104a1565b905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6542b2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610380573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a491906104f6565b905090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103d6826103ad565b9050919050565b6103e6816103cc565b81146103f0575f5ffd5b50565b5f81359050610401816103dd565b92915050565b5f6020828403121561041c5761041b6103a9565b5b5f610429848285016103f3565b91505092915050565b61043b816103cc565b82525050565b5f6020820190506104545f830184610432565b92915050565b5f8115159050919050565b61046e8161045a565b82525050565b5f6020820190506104875f830184610465565b92915050565b5f8151905061049b816103dd565b92915050565b5f602082840312156104b6576104b56103a9565b5b5f6104c38482850161048d565b91505092915050565b6104d58161045a565b81146104df575f5ffd5b50565b5f815190506104f0816104cc565b92915050565b5f6020828403121561050b5761050a6103a9565b5b5f610518848285016104e2565b9150509291505056fea2646970667358221220ccd3262a78a2a69cdedd481e181692ee33d9480f66c85047c9603b3398a906d064736f6c634300081e0033", +} + +// RewardManagerTestABI is the input ABI used to generate the binding from. +// Deprecated: Use RewardManagerTestMetaData.ABI instead. +var RewardManagerTestABI = RewardManagerTestMetaData.ABI + +// RewardManagerTestBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use RewardManagerTestMetaData.Bin instead. +var RewardManagerTestBin = RewardManagerTestMetaData.Bin + +// DeployRewardManagerTest deploys a new Ethereum contract, binding an instance of RewardManagerTest to it. +func DeployRewardManagerTest(auth *bind.TransactOpts, backend bind.ContractBackend, rewardManagerPrecompile common.Address) (common.Address, *types.Transaction, *RewardManagerTest, error) { + parsed, err := RewardManagerTestMetaData.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(RewardManagerTestBin), backend, rewardManagerPrecompile) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &RewardManagerTest{RewardManagerTestCaller: RewardManagerTestCaller{contract: contract}, RewardManagerTestTransactor: RewardManagerTestTransactor{contract: contract}, RewardManagerTestFilterer: RewardManagerTestFilterer{contract: contract}}, nil +} + +// RewardManagerTest is an auto generated Go binding around an Ethereum contract. +type RewardManagerTest struct { + RewardManagerTestCaller // Read-only binding to the contract + RewardManagerTestTransactor // Write-only binding to the contract + RewardManagerTestFilterer // Log filterer for contract events +} + +// RewardManagerTestCaller is an auto generated read-only Go binding around an Ethereum contract. +type RewardManagerTestCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// RewardManagerTestTransactor is an auto generated write-only Go binding around an Ethereum contract. +type RewardManagerTestTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// RewardManagerTestFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type RewardManagerTestFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// RewardManagerTestSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type RewardManagerTestSession struct { + Contract *RewardManagerTest // 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 +} + +// RewardManagerTestCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type RewardManagerTestCallerSession struct { + Contract *RewardManagerTestCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// RewardManagerTestTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type RewardManagerTestTransactorSession struct { + Contract *RewardManagerTestTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// RewardManagerTestRaw is an auto generated low-level Go binding around an Ethereum contract. +type RewardManagerTestRaw struct { + Contract *RewardManagerTest // Generic contract binding to access the raw methods on +} + +// RewardManagerTestCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type RewardManagerTestCallerRaw struct { + Contract *RewardManagerTestCaller // Generic read-only contract binding to access the raw methods on +} + +// RewardManagerTestTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type RewardManagerTestTransactorRaw struct { + Contract *RewardManagerTestTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewRewardManagerTest creates a new instance of RewardManagerTest, bound to a specific deployed contract. +func NewRewardManagerTest(address common.Address, backend bind.ContractBackend) (*RewardManagerTest, error) { + contract, err := bindRewardManagerTest(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &RewardManagerTest{RewardManagerTestCaller: RewardManagerTestCaller{contract: contract}, RewardManagerTestTransactor: RewardManagerTestTransactor{contract: contract}, RewardManagerTestFilterer: RewardManagerTestFilterer{contract: contract}}, nil +} + +// NewRewardManagerTestCaller creates a new read-only instance of RewardManagerTest, bound to a specific deployed contract. +func NewRewardManagerTestCaller(address common.Address, caller bind.ContractCaller) (*RewardManagerTestCaller, error) { + contract, err := bindRewardManagerTest(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &RewardManagerTestCaller{contract: contract}, nil +} + +// NewRewardManagerTestTransactor creates a new write-only instance of RewardManagerTest, bound to a specific deployed contract. +func NewRewardManagerTestTransactor(address common.Address, transactor bind.ContractTransactor) (*RewardManagerTestTransactor, error) { + contract, err := bindRewardManagerTest(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &RewardManagerTestTransactor{contract: contract}, nil +} + +// NewRewardManagerTestFilterer creates a new log filterer instance of RewardManagerTest, bound to a specific deployed contract. +func NewRewardManagerTestFilterer(address common.Address, filterer bind.ContractFilterer) (*RewardManagerTestFilterer, error) { + contract, err := bindRewardManagerTest(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &RewardManagerTestFilterer{contract: contract}, nil +} + +// bindRewardManagerTest binds a generic wrapper to an already deployed contract. +func bindRewardManagerTest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := RewardManagerTestMetaData.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 (_RewardManagerTest *RewardManagerTestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RewardManagerTest.Contract.RewardManagerTestCaller.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 (_RewardManagerTest *RewardManagerTestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RewardManagerTest.Contract.RewardManagerTestTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_RewardManagerTest *RewardManagerTestRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RewardManagerTest.Contract.RewardManagerTestTransactor.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 (_RewardManagerTest *RewardManagerTestCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RewardManagerTest.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 (_RewardManagerTest *RewardManagerTestTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RewardManagerTest.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_RewardManagerTest *RewardManagerTestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RewardManagerTest.Contract.contract.Transact(opts, method, params...) +} + +// AreFeeRecipientsAllowed is a free data retrieval call binding the contract method 0xf6542b2e. +// +// Solidity: function areFeeRecipientsAllowed() view returns(bool) +func (_RewardManagerTest *RewardManagerTestCaller) AreFeeRecipientsAllowed(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _RewardManagerTest.contract.Call(opts, &out, "areFeeRecipientsAllowed") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// AreFeeRecipientsAllowed is a free data retrieval call binding the contract method 0xf6542b2e. +// +// Solidity: function areFeeRecipientsAllowed() view returns(bool) +func (_RewardManagerTest *RewardManagerTestSession) AreFeeRecipientsAllowed() (bool, error) { + return _RewardManagerTest.Contract.AreFeeRecipientsAllowed(&_RewardManagerTest.CallOpts) +} + +// AreFeeRecipientsAllowed is a free data retrieval call binding the contract method 0xf6542b2e. +// +// Solidity: function areFeeRecipientsAllowed() view returns(bool) +func (_RewardManagerTest *RewardManagerTestCallerSession) AreFeeRecipientsAllowed() (bool, error) { + return _RewardManagerTest.Contract.AreFeeRecipientsAllowed(&_RewardManagerTest.CallOpts) +} + +// CurrentRewardAddress is a free data retrieval call binding the contract method 0xe915608b. +// +// Solidity: function currentRewardAddress() view returns(address) +func (_RewardManagerTest *RewardManagerTestCaller) CurrentRewardAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RewardManagerTest.contract.Call(opts, &out, "currentRewardAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// CurrentRewardAddress is a free data retrieval call binding the contract method 0xe915608b. +// +// Solidity: function currentRewardAddress() view returns(address) +func (_RewardManagerTest *RewardManagerTestSession) CurrentRewardAddress() (common.Address, error) { + return _RewardManagerTest.Contract.CurrentRewardAddress(&_RewardManagerTest.CallOpts) +} + +// CurrentRewardAddress is a free data retrieval call binding the contract method 0xe915608b. +// +// Solidity: function currentRewardAddress() view returns(address) +func (_RewardManagerTest *RewardManagerTestCallerSession) CurrentRewardAddress() (common.Address, error) { + return _RewardManagerTest.Contract.CurrentRewardAddress(&_RewardManagerTest.CallOpts) +} + +// AllowFeeRecipients is a paid mutator transaction binding the contract method 0x0329099f. +// +// Solidity: function allowFeeRecipients() returns() +func (_RewardManagerTest *RewardManagerTestTransactor) AllowFeeRecipients(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RewardManagerTest.contract.Transact(opts, "allowFeeRecipients") +} + +// AllowFeeRecipients is a paid mutator transaction binding the contract method 0x0329099f. +// +// Solidity: function allowFeeRecipients() returns() +func (_RewardManagerTest *RewardManagerTestSession) AllowFeeRecipients() (*types.Transaction, error) { + return _RewardManagerTest.Contract.AllowFeeRecipients(&_RewardManagerTest.TransactOpts) +} + +// AllowFeeRecipients is a paid mutator transaction binding the contract method 0x0329099f. +// +// Solidity: function allowFeeRecipients() returns() +func (_RewardManagerTest *RewardManagerTestTransactorSession) AllowFeeRecipients() (*types.Transaction, error) { + return _RewardManagerTest.Contract.AllowFeeRecipients(&_RewardManagerTest.TransactOpts) +} + +// DisableRewards is a paid mutator transaction binding the contract method 0xbc178628. +// +// Solidity: function disableRewards() returns() +func (_RewardManagerTest *RewardManagerTestTransactor) DisableRewards(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RewardManagerTest.contract.Transact(opts, "disableRewards") +} + +// DisableRewards is a paid mutator transaction binding the contract method 0xbc178628. +// +// Solidity: function disableRewards() returns() +func (_RewardManagerTest *RewardManagerTestSession) DisableRewards() (*types.Transaction, error) { + return _RewardManagerTest.Contract.DisableRewards(&_RewardManagerTest.TransactOpts) +} + +// DisableRewards is a paid mutator transaction binding the contract method 0xbc178628. +// +// Solidity: function disableRewards() returns() +func (_RewardManagerTest *RewardManagerTestTransactorSession) DisableRewards() (*types.Transaction, error) { + return _RewardManagerTest.Contract.DisableRewards(&_RewardManagerTest.TransactOpts) +} + +// SetRewardAddress is a paid mutator transaction binding the contract method 0x5e00e679. +// +// Solidity: function setRewardAddress(address addr) returns() +func (_RewardManagerTest *RewardManagerTestTransactor) SetRewardAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { + return _RewardManagerTest.contract.Transact(opts, "setRewardAddress", addr) +} + +// SetRewardAddress is a paid mutator transaction binding the contract method 0x5e00e679. +// +// Solidity: function setRewardAddress(address addr) returns() +func (_RewardManagerTest *RewardManagerTestSession) SetRewardAddress(addr common.Address) (*types.Transaction, error) { + return _RewardManagerTest.Contract.SetRewardAddress(&_RewardManagerTest.TransactOpts, addr) +} + +// SetRewardAddress is a paid mutator transaction binding the contract method 0x5e00e679. +// +// Solidity: function setRewardAddress(address addr) returns() +func (_RewardManagerTest *RewardManagerTestTransactorSession) SetRewardAddress(addr common.Address) (*types.Transaction, error) { + return _RewardManagerTest.Contract.SetRewardAddress(&_RewardManagerTest.TransactOpts, addr) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_RewardManagerTest *RewardManagerTestTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RewardManagerTest.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_RewardManagerTest *RewardManagerTestSession) Receive() (*types.Transaction, error) { + return _RewardManagerTest.Contract.Receive(&_RewardManagerTest.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_RewardManagerTest *RewardManagerTestTransactorSession) Receive() (*types.Transaction, error) { + return _RewardManagerTest.Contract.Receive(&_RewardManagerTest.TransactOpts) +} diff --git a/precompile/contracts/rewardmanager/simulated_test.go b/precompile/contracts/rewardmanager/simulated_test.go new file mode 100644 index 0000000000..5bb7559dd5 --- /dev/null +++ b/precompile/contracts/rewardmanager/simulated_test.go @@ -0,0 +1,410 @@ +// Copyright (C) 2019-2025, Ava Labs, Inc. All rights reserved. +// See the file LICENSE for licensing terms. + +package rewardmanager_test + +import ( + "crypto/ecdsa" + "math/big" + "testing" + + "github.com/ava-labs/libevm/common" + "github.com/ava-labs/libevm/core/types" + "github.com/ava-labs/libevm/core/vm" + "github.com/ava-labs/libevm/crypto" + "github.com/stretchr/testify/require" + + "github.com/ava-labs/subnet-evm/accounts/abi/bind" + "github.com/ava-labs/subnet-evm/constants" + "github.com/ava-labs/subnet-evm/core" + "github.com/ava-labs/subnet-evm/eth/ethconfig" + "github.com/ava-labs/subnet-evm/node" + "github.com/ava-labs/subnet-evm/params" + "github.com/ava-labs/subnet-evm/plugin/evm/customtypes" + "github.com/ava-labs/subnet-evm/precompile/allowlist" + "github.com/ava-labs/subnet-evm/precompile/allowlist/allowlisttest" + "github.com/ava-labs/subnet-evm/precompile/contracts/rewardmanager" + "github.com/ava-labs/subnet-evm/precompile/contracts/testutils" + "github.com/ava-labs/subnet-evm/utils" + + sim "github.com/ava-labs/subnet-evm/ethclient/simulated" + rewardmanagerbindings "github.com/ava-labs/subnet-evm/precompile/contracts/rewardmanager/rewardmanagertest/bindings" +) + +var ( + adminKey, _ = crypto.GenerateKey() + unprivilegedKey, _ = crypto.GenerateKey() + + adminAddress = crypto.PubkeyToAddress(adminKey.PublicKey) + unprivilegedAddress = crypto.PubkeyToAddress(unprivilegedKey.PublicKey) +) + +func TestMain(m *testing.M) { + // Ensure libevm extras are registered for tests. + core.RegisterExtras() + customtypes.Register() + params.RegisterExtras() + m.Run() +} + +func deployRewardManagerTest(t *testing.T, b *sim.Backend, auth *bind.TransactOpts) (common.Address, *rewardmanagerbindings.RewardManagerTest) { + t.Helper() + addr, tx, contract, err := rewardmanagerbindings.DeployRewardManagerTest(auth, b.Client(), rewardmanager.ContractAddress) + require.NoError(t, err) + testutils.WaitReceiptSuccessful(t, b, tx) + return addr, contract +} + +// sendSimpleTx sends a simple ETH transfer transaction +// See ethclient/simulated/backend_test.go newTx() for the source of this code +// TODO(jonathanoppenheimer): after libevmifiying the geth code, investigate whether we can use the same code for both +func sendSimpleTx(t *testing.T, b *sim.Backend, key *ecdsa.PrivateKey) *types.Transaction { + t.Helper() + client := b.Client() + addr := crypto.PubkeyToAddress(key.PublicKey) + + chainID, err := client.ChainID(t.Context()) + require.NoError(t, err) + + nonce, err := client.NonceAt(t.Context(), addr, nil) + require.NoError(t, err) + + head, err := client.HeaderByNumber(t.Context(), nil) + require.NoError(t, err) + + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(params.GWei)) + + tx := types.NewTx(&types.DynamicFeeTx{ + ChainID: chainID, + Nonce: nonce, + GasTipCap: big.NewInt(params.GWei), + GasFeeCap: gasPrice, + Gas: 21000, + To: &addr, + Value: big.NewInt(0), + }) + + signedTx, err := types.SignTx(tx, types.LatestSignerForChainID(chainID), key) + require.NoError(t, err) + + err = client.SendTransaction(t.Context(), signedTx) + require.NoError(t, err) + + return signedTx +} + +func TestRewardManager(t *testing.T) { + chainID := params.TestChainConfig.ChainID + admin := testutils.NewAuth(t, adminKey, chainID) + + type testCase struct { + name string + initialRewardConfig *rewardmanager.InitialRewardConfig // optional + backendOpts []func(*node.Config, *ethconfig.Config) // optional + test func(t *testing.T, backend *sim.Backend, rewardManagerIntf *rewardmanagerbindings.IRewardManager) + } + + testCases := []testCase{ + { + name: "should verify sender is admin", + test: func(t *testing.T, _ *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + allowlisttest.VerifyRole(t, rewardManager, adminAddress, allowlist.AdminRole) + }, + }, + { + name: "should verify new address has no role", + test: func(t *testing.T, backend *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + testContractAddr, _ := deployRewardManagerTest(t, backend, admin) + allowlisttest.VerifyRole(t, rewardManager, testContractAddr, allowlist.NoRole) + }, + }, + { + name: "should not allow non-enabled to set reward address", + test: func(t *testing.T, backend *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + testContractAddr, testContract := deployRewardManagerTest(t, backend, admin) + + allowlisttest.VerifyRole(t, rewardManager, testContractAddr, allowlist.NoRole) + + _, err := testContract.SetRewardAddress(admin, testContractAddr) + require.ErrorContains(t, err, vm.ErrExecutionReverted.Error()) //nolint:forbidigo // upstream error wrapped as string + }, + }, + { + name: "should allow admin to enable contract", + test: func(t *testing.T, backend *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + testContractAddr, _ := deployRewardManagerTest(t, backend, admin) + + allowlisttest.VerifyRole(t, rewardManager, testContractAddr, allowlist.NoRole) + allowlisttest.SetAsEnabled(t, backend, rewardManager, admin, testContractAddr) + allowlisttest.VerifyRole(t, rewardManager, testContractAddr, allowlist.EnabledRole) + }, + }, + { + name: "should allow enabled contract to set reward address", + test: func(t *testing.T, backend *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + testContractAddr, testContract := deployRewardManagerTest(t, backend, admin) + + allowlisttest.SetAsEnabled(t, backend, rewardManager, admin, testContractAddr) + + tx, err := testContract.SetRewardAddress(admin, testContractAddr) + require.NoError(t, err) + testutils.WaitReceiptSuccessful(t, backend, tx) + + currentAddr, err := testContract.CurrentRewardAddress(nil) + require.NoError(t, err) + require.Equal(t, testContractAddr, currentAddr) + }, + }, + { + name: "should return false for areFeeRecipientsAllowed by default", + test: func(t *testing.T, backend *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + testContractAddr, testContract := deployRewardManagerTest(t, backend, admin) + allowlisttest.SetAsEnabled(t, backend, rewardManager, admin, testContractAddr) + + isAllowed, err := testContract.AreFeeRecipientsAllowed(nil) + require.NoError(t, err) + require.False(t, isAllowed) + }, + }, + { + name: "should allow enabled contract to allow fee recipients", + test: func(t *testing.T, backend *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + testContractAddr, testContract := deployRewardManagerTest(t, backend, admin) + allowlisttest.SetAsEnabled(t, backend, rewardManager, admin, testContractAddr) + + tx, err := testContract.AllowFeeRecipients(admin) + require.NoError(t, err) + testutils.WaitReceiptSuccessful(t, backend, tx) + + isAllowed, err := testContract.AreFeeRecipientsAllowed(nil) + require.NoError(t, err) + require.True(t, isAllowed) + }, + }, + { + name: "should allow enabled contract to disable rewards", + test: func(t *testing.T, backend *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + testContractAddr, testContract := deployRewardManagerTest(t, backend, admin) + allowlisttest.SetAsEnabled(t, backend, rewardManager, admin, testContractAddr) + + tx, err := testContract.SetRewardAddress(admin, testContractAddr) + require.NoError(t, err) + testutils.WaitReceiptSuccessful(t, backend, tx) + + currentAddr, err := testContract.CurrentRewardAddress(nil) + require.NoError(t, err) + require.Equal(t, testContractAddr, currentAddr) + + tx, err = testContract.DisableRewards(admin) + require.NoError(t, err) + testutils.WaitReceiptSuccessful(t, backend, tx) + + currentAddr, err = testContract.CurrentRewardAddress(nil) + require.NoError(t, err) + require.Equal(t, constants.BlackholeAddr, currentAddr) + }, + }, + { + name: "should return blackhole as default reward address", + test: func(t *testing.T, _ *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + currentAddr, err := rewardManager.CurrentRewardAddress(nil) + require.NoError(t, err) + require.Equal(t, constants.BlackholeAddr, currentAddr) + }, + }, + { + name: "fees should go to blackhole by default", + test: func(t *testing.T, backend *sim.Backend, _ *rewardmanagerbindings.IRewardManager) { + client := backend.Client() + + initialBlackholeBalance, err := client.BalanceAt(t.Context(), constants.BlackholeAddr, nil) + require.NoError(t, err) + + tx := sendSimpleTx(t, backend, adminKey) + testutils.WaitReceiptSuccessful(t, backend, tx) + + newBlackholeBalance, err := client.BalanceAt(t.Context(), constants.BlackholeAddr, nil) + require.NoError(t, err) + + require.Positive(t, newBlackholeBalance.Cmp(initialBlackholeBalance), + "blackhole balance should have increased from fees") + }, + }, + { + name: "fees should go to configured reward address", + test: func(t *testing.T, backend *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + client := backend.Client() + + testContractAddr, testContract := deployRewardManagerTest(t, backend, admin) + allowlisttest.SetAsEnabled(t, backend, rewardManager, admin, testContractAddr) + + rewardRecipientKey, _ := crypto.GenerateKey() + rewardRecipientAddr := crypto.PubkeyToAddress(rewardRecipientKey.PublicKey) + + initialRecipientBalance, err := client.BalanceAt(t.Context(), rewardRecipientAddr, nil) + require.NoError(t, err) + + tx, err := testContract.SetRewardAddress(admin, rewardRecipientAddr) + require.NoError(t, err) + testutils.WaitReceiptSuccessful(t, backend, tx) + + currentAddr, err := testContract.CurrentRewardAddress(nil) + require.NoError(t, err) + require.Equal(t, rewardRecipientAddr, currentAddr) + + // The fees from this transaction should go to the reward address + tx = sendSimpleTx(t, backend, adminKey) + testutils.WaitReceiptSuccessful(t, backend, tx) + + newRecipientBalance, err := client.BalanceAt(t.Context(), rewardRecipientAddr, nil) + require.NoError(t, err) + + require.Positive(t, newRecipientBalance.Cmp(initialRecipientBalance), + "reward recipient balance should have increased from fees") + }, + }, + { + name: "fees should go to coinbase when allowFeeRecipients is enabled", + initialRewardConfig: &rewardmanager.InitialRewardConfig{AllowFeeRecipients: true}, + backendOpts: []func(*node.Config, *ethconfig.Config){ + sim.WithEtherbase(crypto.PubkeyToAddress(unprivilegedKey.PublicKey)), // use unprivilegedAddress as coinbase + }, + test: func(t *testing.T, backend *sim.Backend, _ *rewardmanagerbindings.IRewardManager) { + client := backend.Client() + coinbaseAddr := unprivilegedAddress + + _, testContract := deployRewardManagerTest(t, backend, admin) + + isAllowed, err := testContract.AreFeeRecipientsAllowed(nil) + require.NoError(t, err) + require.True(t, isAllowed, "fee recipients should be allowed") + + initialCoinbaseBalance, err := client.BalanceAt(t.Context(), coinbaseAddr, nil) + require.NoError(t, err) + + // The fees from this transaction should go to the coinbase address + tx := sendSimpleTx(t, backend, adminKey) + testutils.WaitReceiptSuccessful(t, backend, tx) + + newCoinbaseBalance, err := client.BalanceAt(t.Context(), coinbaseAddr, nil) + require.NoError(t, err) + + require.Positive(t, newCoinbaseBalance.Cmp(initialCoinbaseBalance), + "coinbase balance should have increased from fees") + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + cfg := rewardmanager.NewConfig(utils.NewUint64(0), []common.Address{adminAddress}, nil, nil, tc.initialRewardConfig) + backend := testutils.NewBackendWithPrecompile(t, cfg, []common.Address{adminAddress, unprivilegedAddress}, tc.backendOpts...) + defer backend.Close() + + rewardManager, err := rewardmanagerbindings.NewIRewardManager(rewardmanager.ContractAddress, backend.Client()) + require.NoError(t, err) + + tc.test(t, backend, rewardManager) + }) + } +} + +func TestIRewardManager_Events(t *testing.T) { + chainID := params.TestChainConfig.ChainID + admin := testutils.NewAuth(t, adminKey, chainID) + + type testCase struct { + name string + test func(t *testing.T, backend *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) + } + + testCases := []testCase{ + { + name: "should emit RewardAddressChanged event", + test: func(t *testing.T, backend *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + testContractAddr, testContract := deployRewardManagerTest(t, backend, admin) + allowlisttest.SetAsEnabled(t, backend, rewardManager, admin, testContractAddr) + + rewardRecipientKey, _ := crypto.GenerateKey() + rewardRecipientAddr := crypto.PubkeyToAddress(rewardRecipientKey.PublicKey) + + tx, err := testContract.SetRewardAddress(admin, rewardRecipientAddr) + require.NoError(t, err) + testutils.WaitReceiptSuccessful(t, backend, tx) + + iter, err := rewardManager.FilterRewardAddressChanged(nil, nil, nil, nil) + require.NoError(t, err) + defer iter.Close() + + require.True(t, iter.Next(), "expected to find RewardAddressChanged event") + event := iter.Event + require.Equal(t, testContractAddr, event.Sender) + require.Equal(t, constants.BlackholeAddr, event.OldRewardAddress) + require.Equal(t, rewardRecipientAddr, event.NewRewardAddress) + + require.False(t, iter.Next(), "expected no more events") + require.NoError(t, iter.Error()) + }, + }, + { + name: "should emit FeeRecipientsAllowed event", + test: func(t *testing.T, backend *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + testContractAddr, testContract := deployRewardManagerTest(t, backend, admin) + allowlisttest.SetAsEnabled(t, backend, rewardManager, admin, testContractAddr) + + tx, err := testContract.AllowFeeRecipients(admin) + require.NoError(t, err) + testutils.WaitReceiptSuccessful(t, backend, tx) + + iter, err := rewardManager.FilterFeeRecipientsAllowed(nil, nil) + require.NoError(t, err) + defer iter.Close() + + require.True(t, iter.Next(), "expected to find FeeRecipientsAllowed event") + require.Equal(t, testContractAddr, iter.Event.Sender) + + require.False(t, iter.Next(), "expected no more events") + require.NoError(t, iter.Error()) + }, + }, + { + name: "should emit RewardsDisabled event", + test: func(t *testing.T, backend *sim.Backend, rewardManager *rewardmanagerbindings.IRewardManager) { + testContractAddr, testContract := deployRewardManagerTest(t, backend, admin) + allowlisttest.SetAsEnabled(t, backend, rewardManager, admin, testContractAddr) + + tx, err := testContract.DisableRewards(admin) + require.NoError(t, err) + testutils.WaitReceiptSuccessful(t, backend, tx) + + iter, err := rewardManager.FilterRewardsDisabled(nil, nil) + require.NoError(t, err) + defer iter.Close() + + require.True(t, iter.Next(), "expected to find RewardsDisabled event") + require.Equal(t, testContractAddr, iter.Event.Sender) + + require.False(t, iter.Next(), "expected no more events") + require.NoError(t, iter.Error()) + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + backend := testutils.NewBackendWithPrecompile(t, rewardmanager.NewConfig(utils.NewUint64(0), []common.Address{adminAddress}, nil, nil, nil), []common.Address{adminAddress, unprivilegedAddress}) + defer backend.Close() + + rewardManager, err := rewardmanagerbindings.NewIRewardManager(rewardmanager.ContractAddress, backend.Client()) + require.NoError(t, err) + + tc.test(t, backend, rewardManager) + }) + } +} + +func TestIAllowList_Events(t *testing.T) { + precompileCfg := rewardmanager.NewConfig(utils.NewUint64(0), []common.Address{adminAddress}, nil, nil, nil) + admin := testutils.NewAuth(t, adminKey, params.TestChainConfig.ChainID) + allowlisttest.RunAllowListEventTests(t, precompileCfg, rewardmanager.ContractAddress, admin, adminAddress) +} diff --git a/precompile/contracts/testutils/simulated_helpers.go b/precompile/contracts/testutils/simulated_helpers.go index 8cce014eed..da69e4936b 100644 --- a/precompile/contracts/testutils/simulated_helpers.go +++ b/precompile/contracts/testutils/simulated_helpers.go @@ -13,6 +13,8 @@ import ( "github.com/stretchr/testify/require" "github.com/ava-labs/subnet-evm/accounts/abi/bind" + "github.com/ava-labs/subnet-evm/eth/ethconfig" + "github.com/ava-labs/subnet-evm/node" "github.com/ava-labs/subnet-evm/params" "github.com/ava-labs/subnet-evm/params/extras" "github.com/ava-labs/subnet-evm/precompile/precompileconfig" @@ -29,8 +31,14 @@ func NewAuth(t *testing.T, key *ecdsa.PrivateKey, chainID *big.Int) *bind.Transa } // NewBackendWithPrecompile creates a simulated backend with the given precompile enabled -// at genesis and funds the specified addresses with 1 ETH each. -func NewBackendWithPrecompile(t *testing.T, precompileCfg precompileconfig.Config, fundedAddrs ...common.Address) *sim.Backend { +// at genesis and funds the specified addresses with 1 ETH each. Additional options can be passed +// to configure the backend. +func NewBackendWithPrecompile( + t *testing.T, + precompileCfg precompileconfig.Config, + fundedAddrs []common.Address, + opts ...func(*node.Config, *ethconfig.Config), +) *sim.Backend { t.Helper() chainCfg := params.Copy(params.TestChainConfig) params.GetExtra(&chainCfg).GenesisPrecompiles = extras.Precompiles{ @@ -42,7 +50,8 @@ func NewBackendWithPrecompile(t *testing.T, precompileCfg precompileconfig.Confi genesisAlloc[addr] = types.Account{Balance: big.NewInt(1000000000000000000)} } - return sim.NewBackend(genesisAlloc, sim.WithChainConfig(&chainCfg)) + opts = append(opts, sim.WithChainConfig(&chainCfg)) + return sim.NewBackend(genesisAlloc, opts...) } // WaitReceipt commits the simulated backend and waits for the transaction receipt. diff --git a/precompile/contracts/txallowlist/simulated_test.go b/precompile/contracts/txallowlist/simulated_test.go index 20a6a98028..f0033e4b6d 100644 --- a/precompile/contracts/txallowlist/simulated_test.go +++ b/precompile/contracts/txallowlist/simulated_test.go @@ -271,7 +271,7 @@ func TestTxAllowList(t *testing.T) { precompileCfg := txallowlist.NewConfig(utils.NewUint64(0), []common.Address{adminAddress}, nil, nil) for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - backend := testutils.NewBackendWithPrecompile(t, precompileCfg, adminAddress, unprivilegedAddress) + backend := testutils.NewBackendWithPrecompile(t, precompileCfg, []common.Address{adminAddress, unprivilegedAddress}) defer backend.Close() allowList, err := allowlistbindings.NewIAllowList(txallowlist.ContractAddress, backend.Client()) diff --git a/tests/precompile/genesis/reward_manager.json b/tests/precompile/genesis/reward_manager.json deleted file mode 100644 index ac6c314b06..0000000000 --- a/tests/precompile/genesis/reward_manager.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "config": { - "chainId": 99999, - "homesteadBlock": 0, - "eip150Block": 0, - "eip155Block": 0, - "eip158Block": 0, - "byzantiumBlock": 0, - "constantinopleBlock": 0, - "petersburgBlock": 0, - "istanbulBlock": 0, - "muirGlacierBlock": 0, - "feeConfig": { - "gasLimit": 20000000, - "minBaseFee": 1000000000, - "targetGas": 100000000, - "baseFeeChangeDenominator": 48, - "minBlockGasCost": 0, - "maxBlockGasCost": 10000000, - "targetBlockRate": 1, - "blockGasCostStep": 500000 - }, - "rewardManagerConfig": { - "blockTimestamp": 0, - "adminAddresses": [ - "0x8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC" - ] - } - }, - "alloc": { - "8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC": { - "balance": "0x52B7D2DCC80CD2E4000000" - }, - "0x0Fa8EA536Be85F32724D57A37758761B86416123": { - "balance": "0x52B7D2DCC80CD2E4000000" - } - }, - "nonce": "0x0", - "timestamp": "0x5FCB13D0", - "extraData": "0x00", - "gasLimit": "0x1312D00", - "difficulty": "0x0", - "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", - "coinbase": "0x0000000000000000000000000000000000000000", - "number": "0x0", - "gasUsed": "0x0", - "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" -} diff --git a/tests/precompile/solidity/suites.go b/tests/precompile/solidity/suites.go index 0566ab33d6..94c0f0d3f2 100644 --- a/tests/precompile/solidity/suites.go +++ b/tests/precompile/solidity/suites.go @@ -5,10 +5,6 @@ package solidity import ( - "context" - "fmt" - "time" - "github.com/ava-labs/subnet-evm/tests/utils" ginkgo "github.com/onsi/ginkgo/v2" @@ -27,24 +23,10 @@ func RegisterAsyncTests() { if len(genesisFiles) == 0 { ginkgo.AbortSuite("No genesis files found") } - subnetsSuite := utils.CreateSubnetsSuite(genesisFiles) - - timeout := 3 * time.Minute _ = ginkgo.Describe("[Asynchronized Precompile Tests]", func() { - // Register the ping test first - utils.RegisterPingTest() - // Each ginkgo It node specifies the name of the genesis file (in ./tests/precompile/genesis/) // to use to launch the subnet and the name of the TS test file to run on the subnet (in ./contracts/tests/) - ginkgo.It("reward manager", ginkgo.Label("Precompile"), ginkgo.Label("RewardManager"), func() { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - - blockchainID := subnetsSuite.GetBlockchainID("reward_manager") - runDefaultHardhatTests(ctx, blockchainID, "reward_manager") - }) - // ADD YOUR PRECOMPILE HERE /* ginkgo.It("your precompile", ginkgo.Label("Precompile"), ginkgo.Label("YourPrecompile"), func() { @@ -60,15 +42,3 @@ func RegisterAsyncTests() { */ }) } - -// Default parameters are: -// -// 1. Hardhat contract environment is located at ./contracts -// 2. Hardhat test file is located at ./contracts/test/.ts -// 3. npx is available in the ./contracts directory -func runDefaultHardhatTests(ctx context.Context, blockchainID, testName string) { - cmdPath := "./contracts" - // test path is relative to the cmd path - testPath := fmt.Sprintf("./test/%s.ts", testName) - utils.RunHardhatTests(ctx, blockchainID, cmdPath, testPath) -}